sequence通过wait_for_item_done和sequencer的item_done握手,通过成员变量m_wait_for_item_sequence/transaction_id判断。每个sequence, sequence中的每个transaction其ID都是唯一的。 如果item_done()传入rsp,调用put_response函数,与sequence中的get_response配合使用。 start_item/finish_item封装函数以及sequence,sequencer...
就是通过 item_done 的方式告诉 sequencer。当driver 再次调用 get_next_item 获取下一个 transaction 时,如果此时 sesequencer 知道 driver 调用了 item_done,那么 sequencer 就认为上一次事务 driver 接受到了。 反之,如果 driver 再次调用 get_next_item时,sequencer 发现上一次的 item_done 没有被调用,则 sequ...
寄存器模型产生sequence,并产生uvm_reg_item:rw 产生driver能够接受的transaction:bus_req=adapter.reg2bus(rw) 把bus_req交给bus_sequencer driver得到bus_req后驱动它,得到读取的值,并将读取值放入bus_req中,调用item_done 寄存器模型调用adapter.bus2reg(bus_req,rw)将bus_req中的读取值传递给rw 将rw中的读数...
sequence中的uvm_do宏发送transaction后,会一直等待,直到driver返回item_done信号。 在某个component(如my_sequencer、 my_env)的main_phase中启动这个sequence,即可让sequence向sequencer发送transaction。 get_next_item和try_next_item的比较 get_next_item是阻塞的,它会一直等到有新的transaction才会返回; try_next_i...
如果总线要返回response数据,应当在adapter中使能provides_response = 1;如果总线不支持返回RSP(如没有调用put_response(RSP)或item_done(RSP) ),则不能使能,否则adapter会致使验证环境挂起; 寄存器的操作,无论是读操作还是写操作,都要经历调用reg2bus(),继而发起总线事务,在完成事务发回反馈后调用bus2reg(),将总...
b.寄存器模型产生 sequence,并产生 uvm_reg_item:rw。 c.产生 driver 能够接受的transaction:bus_req=adapter.reg2bus(rw)。 d.把 bus_req 交给bus_sequencer。 e.driver 得到 bus_req 后驱动它,得到读取的值,并将读取值放入 bus_req 中,调用 item_done。
foreverbeginreq = peek();req = peek();item_done();req = get();endendfunction 2)错误,因为不能在调用item_done()之前两次调用get_next_item(),无法完成与sequencer的握手。 43、如何停止在sequencer上运行的所有sequences? sequencer具有stop_sequences()方法,可用于停止所有sequences。但是此方法不检查driv...
seq_item_port.item_done(rsp);// end response的数量问题 通常来说,一个transaction对应一个response,但是事实上,UVM也支持一个transaction对应多个response的情况,在这种情况 下,在sequence中需要多次调用get_response,而在driver中,需要多次调用put_response: ...
1) function get_drive_req(); forever begin req = get(); req = get(); end endfunction 2) function get_drive_req(); forever begin req = get_next_item(); req = get_next_item(); item_done(); end endfunction 3) function get_drive_req(); forever begin req = peek(); req = ...
将两者连接:drv.seq_item_port.connect(sqr.seq_item_export); 在driver中通过get_next_item任务来得到一个新的req,并且驱动它,驱动完成后调用item_done通知sequencer(完成握手)。 sequencer和sequence之间: sequence中的uvm_do宏发送transaction后,会一直等待,直到driver返回item_done信号。