这组特例 port 就是 uvm_seq_item_pull_port 和 uvm_seq_item_pull_imp ,通过名字可以知道,这组端口通常是在 sequencer 和 driver 中使用的,用于它们之间的数据传递。uvm library 中 原型代码如下所示: uvm_seq_item_pull_port classuvm_driver#(typeREQ=uvm_sequence_item,typeRSP=REQ)extendsuvm_c...
39void'($cast(rsp, req.clone()));40rsp.set_sequence_id(req.get_sequence_id());41rsp.data +=10;42seq_item_port.item_done(rsp);43`uvm_info("DRV", $sformatf("sent a item \n %s",rsp.sprint()), UVM_LOW)44endtask45endclass4647class env extends uvm_env;48sequencer sqr;49driver...
其中 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_driver 中 seq_item_pull_port 的句柄是 seq_item_port类型。driver代码用来与sequencer交互的 API 被 seq_item_port 引用,但实际上是在sequencer seq_item_export 中实现的(这是标准的 TLM )。 “说人话就是握手,driver收了可以不发rsp,不过这样sequence就就没有相关信息了。然后由于本质上还是通过tlm进行...
我们来看看seq_item_port这个类的继承关系,他在driver源码中的原型是uvm_seq_item_pull_port #(REQ, RSP) seq_item_port; 我们查看uvm_seq_item_pull_port的继承关系 他继承自uvm_port_base#(uvm_sqr_if_base#(REQ,RSP)) 而uvm_port_base的继承关系是 ...
可以看到,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...
(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) ...
默认的类型是uvm_sequence_item TLM端口uvm_seq_item_pull_port my_driver extends uvm_driver(my_transaction) seq_item_port.get_next_item(req) 其中req的类型默认是my_transaction,如果没有声明,那默认就是uvm_sequence_item的类型。 规范来讲的话,这里要写成my_transaction ...
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 ...
除了get_next_item() 任务外 , uvm_seq_item_pull_port 类还提供了另一个任务try_next_item()。如果没有数据项可供驱动,这个任务将在同一simulation step中返回,此时可以让driver执行一些idle transactions,比如当没有有意义的数据要传输时,给DUT发送随机数据,如下图所示: ...