(2)get_full_name()会打印出”jerry_is_good”;对于uvm_sequence_item, get_full_name()与get_name()一样!因为它是不作为UVM树节点的,所以路径没有别的层次; 这点保留了uvm_object原本的函数性质; (3)get_type_name()会打印出”jerry_tr”; 注1:原始的uvm_object的get_type_name()传出的是<unknown...
对于uvm_component,这个get_type_name(),就是class的名字。 4. get_type_name()会打印出: “jerry_component”。 对于uvm_component,这个get_type_name(),就是class的名字。 02、uvm_sequence_item中get_name系列小函数 classjerry_trextendsuvm_sequence_item; … `uvm_object_utils_begin( jerry_tr ) … ...
我们在sequence中往driver发包时,最常用的方法就是使用uvm_do()系列宏,偶尔会使用方法start_item()和finish_item()的组合,极个别场景下会 使用`uvm_create()和`uvm_send()宏,极极个别场景下还会看到create_item()方法的使用,这些宏和方法有什么区别,各自使用场景有什么局限和注意事项,他们分别定义在了UVM源代码...
A、agent中完成driver和sequencer的连接:my_drv.seq_item_port.connect(my_seqr.seq_item_export); B、driver中调用seq_item_port的函数获取下个item、进行相应驱动后,结束当前item: 1、seq_item_port.get_next_item(req); 2、向总线上驱动该item; 3、seq_item_port.item_done; C、sequence中可以重新定义pr...
string tID = get_type_name; `uvm_object_utils(my_adapter) functionnew(string name="my_adapter"); super.new(name); endfunction :new function uvm_sequence_itemreg2bus(constref uvm_reg_bus_op rw); bus_transaction tr; tr =new("tr"); ...
sequence和sequencer需要握手,获取transaction以后调用driver_transfer()发送。发送成功以后克隆request生成新的response,作为响应发送回去。 task apb_master_driver::get_and_drive(); forever begin seq_item_port.get_next_item(req); `uvm_info(get_type_name(), "sequencer got next item", UVM_HIGH) ...
在传输过程中我们可以用`uvm_do_prio_with来赋予优先级;uvm_sequencer除了优先级的判定,还有锁定功能,两个方法:lock(),grab();lock()是当某一个sequence中的item拿到sequencer的权限之后,必须等该sequence使用unlock()才将权限还回去,一般sequence用来限制住权限,等自己的所有item传输完毕再unlock();而grab()则是只...
UVM产生激励是通过sequence sequencer以及driver三者配合实现的。生成激励的flow的框架是围绕sequence构建的,但是生成数据流使用sequence_items作为数据对象。由于 sequence_items 是构建sequence的基础,因此在设计时需要注意一些问题。Sequence_item的内容由driver在pin一级的时序决定的;通过支持随即约束,sequence item能够更加简...
5)如果不使用uvm_do 宏,可以直接使用start_item 与finish_item 产生transaction。 3.sequencer过程 1)一个sequence 再向sequencer发送请求前,要先向sequencer发送一个请求(只是个请求,不是真的transaction),sequencer把这个请求放在一个仲裁队列中。 2)sequencer做两件事:1)检验队列是否有sequence发送transaction的请求;...
• 考虑到 uvm_ sequence 和 uvm_ sequence _item 并不处于 UVM 结构当中,所以顶层在做配置时,无法按照层次关系直接配置到sequence,sequence一旦活动起来, 必须挂载到一个 sequencer 上, 这样 sequence 可以依赖于 sequencer 的结构关系, 间接通过 sequencer 来获取顶层的配置和更多信息。