[UVM]UVM Sequence之Response的使用
UVM Sequence之Response
前言:Sequence機制提供了一種Sequence -> Sequencer -> Driver的單向數據傳輸機制。但是在複雜的驗證平台中,Sequence需要根據Driver對Transaction的反應來決定接下來需要發送的Transaction,換言之,Sequence需要得到Driver的一個反饋。Sequence機制提供了對這種反饋的支持,它允許Driver將一個Response返回給Sequence。本文將介紹這種方法。
Sequence的這種機制主要是應用於Outstanding的場景,例如AXI BUS的Read操作,當R Channel拿到數據的時候,put_response,用於標記讀操作的完成。
一、在Sequence(Master)中調用get_response()任務
class axi_vip_test_mst_seq extends uvm_sequence #(axi_transaction);int seq_cnt = 0;virtual task pre_body();super.pre_body();use_response_handler(1);endtaskvirtual task body();super.body();forkfor(int i = 0; i < num_txn; i++) begin `uvm_do_with(req, {req.lock == axi_master_txn::NORMAL;})seq_cnt += 1;get_response(rsp);endjoin_nonewait(seq_cnt == 0);endtaskvirtual function void response_handler(uvm_sequence_item response);seq_cnt -= 1;endfunctionendclass
二、在Driver中調用put_response()任務
task my_driver::get_seq_item(uvm_pahse phase);my_transaction tr;forever beginseq_item_port.get_next_item(req);phase.raise_objection(this);$cast(tr, req.clone());tr.set_id_info(req);send(tr);seq_item_port.put_response(tr);seq_item_port.item_done(); phase_drop_objection(this); end
endtask
三、非阻塞的Response方法 --- use_response_handler
- 首先需要在pre_body中調用use_response_handler(1);打開該功能。
- 其次需要Override respon_handler()這個function,一般地是在這個function中做一個Counter,當get到item之後,系統會自動調用response_handler()這個function,Counter用於控制Sequence的結束。
- 當調用put_response的時候,response_handcler()會被自動執行,這種做法可以避免發包和get response在同一個進程中發包被阻塞的問題。
class axi_vip_test_mst_seq extends uvm_sequence #(axi_transaction);virtual task pre_body();super.pre_body();use_response_handler(1);endtaskvirtual function void response_handler(uvm_sequence_item response);if(!$cast(rsp, response)) begin`uvm_error(get_full_name(), "[SEQ]Can't case!")end else begin`uvm_info("SEQ", $sformatf("get one response: %s", rep.sprint()), UVM_MEDIUM)endendfunctionvirtual task body();super.body();if(starting_phase != null) starting_phase.raise_objection(this);report(10) begin`uvm_do(m_tr);end #100ns;if(starting_phase != null) starting_phase.drop_objection(this);endtaskendclass
[UVM]UVM Sequence之Response的使用相关推荐
- UVM layering sequence for layered protocol
在OSI(Open System Interconnect )模型中,将网络结构分为7层,自上而下:应用层,表示层,会话层,传输层,网络层,链路层,物理层.每层都有相应的协议和对应的数据结构. IC中 ...
- UVM基础-Sequence、Sequencer(一)
目录 Sequence.Sequencer.Driver大局观 Sequence和item item与sequence的关系 flat sequence hierarchical sequence s ...
- UVM基础-Sequence、Sequencer(二)
目录 sequence和sequencer 将sequence挂载到sequencer 将item挂载到sequencer 宏定义使用实例 sequencer仲裁特性 实例 sequencer的锁定机 ...
- uvm中sequence和virtual sequence中objection的控制
sequence中的objection的控制策略 在整颗UVM树中,树的结点很多,理论来说在任何组件中都可以控制objection.一般在sequence和virtual sequence中,也有在s ...
- 如何在UVM的sequence中控制objection
文章目录 前言 一.Objections can be raised/dropped in sequence 总结 前言 在张强的<UVM实战>的5.2.3节中提到,控制objection ...
- [UVM] kill sequence
默认条件下,stop_sequence 会递归kill 掉子sequence,前提是已经建立了父子关系. 如何建立sequence的父子关系呢? 1. 使用uvm_do/uvm_do_on启动sequ ...
- 【UVM】sequence 的启动方式
该篇文章描述不清楚的地方建议参考:UVM设计模式 (七)命令模式.三种sequence启动方式.start_item/finish_item.中介模式.virtual sequence_Holden_ ...
- [UVM]UVM TLM1.0 Interface归纳总结 --- 图解UVM TLM1.0 Interface
UVM TLM1.0 Interface归纳总结 --- 图解UVM TLM1.0 Interface Transaction-Level Modeling (TLM) 用户模块之间的通信. 是实现基 ...
- [UVM]UVM Component之Subscriber
UVM Component之Subscriber 一.Subscriber是用來收Coverage的,下面是一種推薦的寫法: class uvm_ip_subscriber extends uvm_s ...
最新文章
- C++动态链接库dll及静态链接库lib制作及使用教程
- [置顶] 安全-用户身份验证
- 讨论SELinux对系统安全的影响(转)
- 手把手指导centos7中安装python3
- linux关于文件夹的知识,Ubuntu 7.10 系统文件夹相关知识
- html div转换图片
- python如何连redis_python操作redis
- 程序员思维是什么?程序员思维从哪里来?程序员思维到哪里去?
- dj鲜生-36-商品应用-其它模型类的创建-完善goods应用的数据表
- linux-关机与重启命令
- jQuery实现影院选座订座效果
- Linux驱动开发基础
- python绘制相频特性曲线_详解基于python的图像Gabor变换及特征提取
- Linux的一些常用操作命令
- Ferry工单管理系统安装部署
- 如何让浏览器用极速模式打开网站而不是兼容模式
- 基于JAVA家装建材网计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- 计算机学院新生篮球赛名字,计算机学院新生篮球赛圆满结束,获奖队伍公布!...
- 【解决方案】EasyCVR视频结构化平台如何搭建肉品屠宰场全市联网远程监控系统?
- 技术干货集中营——WOT 2017全球架构与运维技术峰会