uvm_queue实现了基于类的动态队列,在sv 队列基础上,主要更改/新加了以下方法: get_global_queue(),获取全局队列,没有全局队列的话,新建全局队列; get_global(int index),获取全局队列并返回第index个元素; get(int index),返回队列第index个元素,index超出范围会报warning; size(),返回队列的长度; insert(int ...
● get_global(int index),获取全局队列并返回第index个元素;● covert2string(),队列转换为字符串 这个class将sv的queue封装,并引入了单例模式,用于全局共享的一个queue。实例化的时候最好带着参数。 uvm_pool https://developer.aliyun.com/article/1070423 uvm_queue实现了基于类的动态队列,在sv 队列基础上,...
uvm_config_db #(bit[3:0])::get(this, "", "switch_is_on", packed_switch_is_on); switch_is_on = {>>{packed_switch_is_on}}; 这种方法看上去简单,但是需要多做一个中转变量,而且有个致命缺陷--一旦switch_is_on数组的深度改变,甚至变为动态数组,这set就没法估计packed类型的宽度了。于是我们...
我们再次故技重施grep一下,发现uvm_reg_map.sv的2191和2337行有所使用,相关代码如图17所示,这里果然调用了get_base_response()(rw.parent调用的,rw为uvm_reg_item,而parent就是指的是其中定义的uvm_sequence_base类型的变量)将driver返回的response消耗掉了。
假如uvm_test_top中set函数的第一个参数是this,而env中set函数的第一个参数是uvm_root::get(),那么driver得到的pre_num的值也是100。这是因为env中set函数的寄信人变成了uvm_top,在UVM树中具有最高的优先级。因此,无论如何,在调用set函数时其第一个参数应该尽量使用this。在无法得到this指针的情况下(如在top...
// Provide implementations of virtual methods such as get_type_name and create `uvm_component_utils (fifo_demo_tb) // fifo environment fifo_env fifo0; // new function new (string name, uvm_component parent=null); super.new (name, parent); ...
put_response/get_response的常规用法实例 图1是apb_master_driver中的一段代码,106-109行是关于driver中将transaction信息通过response的方式返回给发起这次req的sequence中。 图1 apb_master_driver中put_response代码示例 而我们通过在sequence中调用get_response的方式就能获取到该返回的rsp,如图2所示。