uvm_driver 中 seq_item_pull_port 的句柄是 seq_item_port类型。driver代码用来与sequencer交互的 API 被 seq_item_port 引用,但实际上是在sequencer seq_item_export 中实现的(这是标准的 TLM )。 “说人话就是握手,driver收了可以不发rsp,不过这样sequence就就没有相关信息了。然后由于本质上还是通过tlm进行...
可以看到,uvm_driver里面声明了三个port:seq_item_port/rsp_port/uvm_analysis_port,seq_item_port是一个uvm_seq_item_pull_port #(REQ, RSP)的类,这是个啥呢?这是uvm_port_base下面的一个子类。 它的代码部分特别简单。(属于uvm_seq_item_pull_port ) //--- // // Class: uvm_seq_item_pull_por...
其中 monitor 通过 uvm_analysis_port A_port 调用 write 函数将 my_transaction 存入 uvm_tlm_analysis_fifo 的缓存单元中,在 reference model 中通过 get 函数将 tranansction 取出进行后续处理。 3.端口特例 这组特例 port 就是 uvm_seq_item_pull_port 和 uvm_seq_item_pull_imp ,通过名字...
如上所示,Driver与Sequencer进行通信主要就是依靠uvm_seq_item_pull_port派生的TLM端口seq_item_port的上述多种方法。所以其实也可以不用uvm_driver来派生Driver,只需要在Driver中自行定义seq_item_port并指定好参数类型,并与Sequencer的seq_item_export连接,进而调用seq_item_port的方法即可。 Driver调用get_next_item...
uvm_seq_item_pull_port #(REQ, RSP) seq_item_prod_if; // alias uvm_analysis_port #(RSP) rsp_port; REQ req; RSP rsp; 1. 2. 3. 4. 5. uvm_monitor:所有的monitor都要派生自uvm_monitor。monitor做的事情与driver相反,monitor从DUT的pin上接收数据并转换成transaction级别的sequence_item,再把转...
其中 monitor 通过 uvm_analysis_port A_port 调用 write 函数将 my_transaction 存入 uvm_tlm_analysis_fifo 的缓存单元中,在 reference model 中通过 get 函数将 tranansction 取出进行后续处理。 3.端口特例 这组特例 port 就是 uvm_seq_item_pull_port 和 uvm_seq_item_pull_imp ,通过名字...
但是,我不确定如何连接定序器和记分板,因为定序器拥有 uvm_seq_item_pull_imp并且不可能简单地将其连接到分析 imp。我的想法是检查uvm_driver使用的端口,即uvm_seq_item_pull_port。 不幸的是,连接定序器和记分板似乎并不常见,但出于我的目的,这是必要的。是否只能使用uvm_seq_item_pull_port进行序列器-记分...
my_drv.seq_item_port.connect(my_seqr.seq_item_export); 我们从seq_item_port入手。 seq_item_port是driver的成员变量。在uvm_driver.svh中的声明如下: uvm_seq_item_pull_port#(REQ, RSP) seq_item_port;其中,REQ和RSP均为driver类的参数,RSP默认与REQ相同。在uvm_sqr_connections.svh中该类型定义如下...
uvm_seq_item_pull_export #(type REQ=int, type RSP=REQ) uvm_seq_item_pull_imp #(type REQ=int, type RSP=REQ, type imp=int) 由于driver是请求发起端,所以在driver一侧例化了下面的两种端口: uvm_seq_item_pull_port #(REP, RSP) seq_item_port ...
//uvm_do_with这个宏负责把各个最基本的sequence_item加上约束发送出去。 endclass : read_rx_fifo_seq 如何把这个sequence发送出去呢?这就需要在testcase里边把这个sequence通过sequencer发出去。 class read_rx_fifo_test extends uvm_test; `uvm_component_utils(read_rx_fifo_test) ...