3.random seq_item ,然后send_request把seq_item 发给sqr.这个过程不消耗仿真时间,然后seq进入wait_for_item_done()的阻塞性等待状态,直到获取drv的response。 sqr的REQ FIFO会把seq_item转给drv。 drv使用get_next_item 非阻塞的获取seq_item.转成virtual interface时序 4. drv返回response(item_done)给sqr; sq...
`uvm_do(SEQ_OR_ITEM)//1. 根据sequence_item实例,随机化产生数据`uvm_do_with(SEQ_OR_ITEM, CONSTRAINTS)//2. 在随机化数据的基础上,添加约束`uvm_do_pri(SEQ_OR_ITEM, PRIORITY) `uvm_do_pri_with(SEQ_OR_ITEM, PRIORITY, CONSTRAINTS) `uvm_do_on(SEQ_OR_ITEM, SEQR)//3. 随机化同时,显式的...
uvm_seq_item_pull_port #(REQ, RSP) seq_item_port; uvm_seq_item_pull_port #(REQ, RSP) seq_item_prod_if; // alias // Port: rsp_port // // This port provides an alternate way of sending responses back to the // originating sequencer. Which port to use depends on which export t...
上图是红宝书代码执行结果我有疑问的地方,开始在想为啥已经lock了,seq3还传了,原因就是权限最终是给到item的,lock之后10ns才satrt第一个item,所以这个时候lock_sequence是还没有拿到权限的,所以seq3不需要等10ns,他的item就先拿了权限发了。 5.1.3 Sequence层次化 virtual sequencer相当于一个中心路由,就是相当...
uvm_sequence_item相当于一个pkt,seq用于随机化该pkt等。sqr用于发送。 另外uvm_do不仅可以发送item,也可以发送seq。seq支持嵌套。 start_phase start_phase常常存在seq的task body中,它是在正确得到sqr后,指向sqr某一个phase。而seq不是comp,它没有phase。
从hier_seq::body()来看,它其中包含有bus_trans t1,t2和flat_seq s1,s2。而它的层次关系就体现在了对于各个sequence/item的协调上面。例码中使用了`uvm_do_with宏,这个宏完成了三个步骤: sequence或者item的创建 sequence或者item的随机化 sequence或者item的传送 ...
从hier_seq::body()来看,它其中包含有bus_trans t1,t2和flat_seq s1,s2。而它的层次关系就体现在了对于各个sequence/item的协调上面。例码中使用了`uvm_do_with宏,这个宏完成了三个步骤: sequence或者item的创建 sequence或者item的随机化 sequence或者item的传送 ...
(1)driver(参数化类):主动向sequencer索要sequence_item,即transaction。并将sequence_item的信息驱动到DUT的端口上。相当于完成从transaction到signal端口级别的转换。默认RSP=REQ //driver的端口 uvm_seq_item_pull_port #(REQ, RSP) seq_item_port(可以get和put) ...
2)在uvm_sequencer 中有变量seq_item_export: 在这两者中建立通道。 5.在my_agent中的connect 把两者连接到一起: function void my_agent::connect_phase(uvm_phase phase); super.connect_phase(phase); if (is_active == UVM_ACTIVE) begin
jb_drvr.seq_item_port.connect(jb_seqr.seq_item_export); 通信过程中在jelly_bean_driver一侧driver通过调用get_next_item来获取彩虹糖配方的内容jelly_bean_transaction(jb_tx),在最后又调用item_done来结束每一次的数据通信,代码如图1中run_phase所示。