1//示例323class vga_ral_adapter extends uvm_reg_adapter;4`uvm_object_utils(vga_ral_adapter)56functionnew(stringname="");7super.new(name);8endfunction910virtualfunctionuvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw);11wb_transaction w_trans;12w_trans=wb_transaction::type_id::creat...
1//示例323class vga_ral_adapter extends uvm_reg_adapter;4`uvm_object_utils(vga_ral_adapter)56functionnew(stringname="");7super.new(name);8endfunction910virtualfunctionuvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw);11wb_transaction w_trans;12w_trans=wb_transaction::type_id::creat...
uvm_reg_block:uvm_reg的集合,uvm_reg需要加入到uvm_reg_map中,且属于同一个uvm_reg_block。每个uvm_reg_block至少包含一个uvm_reg_map。uvm_reg_block中也可以再添加子uvm_reg_block,同时子uvm_reg_block的uvm_reg_map也需要添加到父uvm_reg_block的uvm_reg_map中。 uvm_reg_map:包含成员变量m_adapter,...
关于map使用我们可以理解为我们需要比对uvm_monitor发送过来的transaction中address与实际寄存器模型uvm_reg_map中的地址列表作比对,以选择需要做predict的那个uvm_reg,所以我们在创建uvm_reg_predictor实例的时候需要将uvm_reg_map关联到我们寄存器模型中的uvm_reg_map上。 adapter的作用仅仅是通过其内部的bus2reg()函数...
将block和adapter添加到环境中完成这些步骤后,一个完整的寄存器模型就生成了。 27. 运行RAL序列在UVM中,我们可以隐式或显式地运行RAL序列。这些序列主要用于测试寄存器模型,确保寄存器的文档和RTL代码一致。例如:cpp uvm_reg_hw_reset_seq // 测试硬复位值 ...
组件uvm_reg_predictor是uvm_subscriber的子类并且有一个可以用来接收来自目标监视器(target monitor)来的总线sequence解析端口(analysis implementation port)。它使用寄存器适配器(register adapter)来将进来的总线数据包转化为通用寄存器项,并且它在寄存器映射(register map)中查找地址,从而找到对应寄存器并且更新其内容。上述...
一个项目对寄存器的的管理应中心化,大部分公司用XML格式的寄存器描述,也有用Excel(CSV)的,这样减少各个部门在项目上的分歧,我们要做的就是利用脚本生成UVM寄存器模型。以下类以及uvm_reg_adapter都是继承于object。 书上代码p405看看就能理解。 假设我们在reference model里需要读一个寄存器的值。第一,我们需要在ref...
uvm_reg_adapter中除了以上截图的代码并未有其他代码涉及到provides_responses的使用,我们再次故技重施grep一下,发现uvm_reg_map.sv的2191和2337行有所使用,相关代码如图17所示,这里果然调用了get_base_response()(rw.parent调用的,rw为uvm_reg_item,而parent就是指的是其中定义的uvm_sequence_base类型的变量)将...
uvm_reg_adapter,继承自uvm_object,从其中设置一个uvm_reg_item,需要实现两个function,bus2reg和reg2bus。 其中的变量supports_byte_enable, 影响sequence的个数。provides_reponses,影响sequencer和driver之间的交互。 uvm_reg_predictor,当auto_predict关闭的时候,需要例化的component,连接到寄存器的monitor。
由于我们在本reg_block中只定义了一个map,因此可以直接用get_default_map获取该map,然后对该map设置sequencer和reg_adapter,sequencer其实就是在环境中用于配置寄存器的driver对应的那个sequencer,uvm_reg本质就是通过reg中的write,read等API,将读写请求,数据等通过API启动sequence发送给driver,然后通过driver去驱动interface...