`ifndef UVM_REG_BYTENABLE_WIDTH `define UVM_REG_BYTENABLE_WIDTH ((`UVM_REG_DATA_WIDTH-1)/8+1) `endif / //uvm_reg_model.svh// / // Type: uvm_reg_byte_en_t // // 2-state byte_enable value with <`UVM_REG_BYTENABLE_WIDTH> bits // typedef bit unsigned [`UVM_REG_BYTENABLE_...
从uvm_reg_field类型定义的源码可以看到,跟域值相关的成员变量有这么几个:value, m_mirrored, m_desired, m_reset[“HARD”]。它们的数据类型均为uvm_reg_data_t,其实也就是UVM对bit unsigned [`UVM_REG_DATA_WIDTH-1:0]的类型重命名。 尽管除value以外其他三个成员都是local可见的,但是知道这些local成员的...
也就是说我们寄存器的一次操作(对应uvm_reg_item)有可能需要多次总线行为(对应uvm_reg_op),当我们寄存器模型寄存器位宽(位宽在寄存器模型中指定,最大值由宏`UVM_REG_DATA_WIDTH约束,该宏默认是64,当总线位宽超过64时就需要修改该宏的值)与总线位宽(对应上面struct中的变量n_bits)想等时,两者表示同一意义。 接着...
`ifndefUVM_REG_DATA_WIDTH`defineUVM_REG_DATA_WIDTH64`endif 与数据位宽类似,地址位宽默认最大值也为64,其受到`UVM_REG_ADDR_WIDTH宏控制。要想获得更大的数据位宽或地址位宽,可以通过改变上述两个宏来实现。 7.8 寄存器模型的其他常用函数 get_root_blocks函数得到验证平台上所有的根块。根块指最顶层的reg_bl...
`define UVM_REG_ADDR_WIDTH64`endif//Macro: `UVM_REG_DATA_WIDTH///Maximum data width in bits///Default value is 64. Used to define the <uvm_reg_data_t> type.//`ifndef UVM_REG_DATA_WIDTH `define UVM_REG_DATA_WIDTH64`endif//Macro: `UVM_REG_BYTENABLE_WIDTH///Maximum number of byt...
(1) uvm_reg_field是寄存器模型的最小单位,在uvm_reg的build函数内实例化,和DUT中每个register里的field对应; 2.uvm_reg_field源码 1`ifndef UVM_REG_ADDR_WIDTH2//可以通过改变这个宏的值来改变register model所能表示的最大寄存器的值;3`define UVM_REG_ADDR_WIDTH644`endif56`ifndef UVM_REG_DATA_WIDTH7...
UVM REG Model入门 本章通过一个非常小的示例来解释UVM REG中一些常用操作的实现。 1.1. 示例 假设某个功能模块中包含如下寄存器,且寄存器通过APB接口进行配置。 1.1.1. status 状态寄存器,只读,Offset: 0h, Width: 32bits Field access width reset comment Reserved RO [31:4] 0 保留位 Error RO [3:...
IC验证之UVM常用宏汇总分析(四) : +define+MACRO 或者: +define+MACRO=100扩展寄存器模型中的数据位宽:`define UVM_REG_DATA_WIDTH 128扩展寄存器模型中的地址位宽:`define IC那些事儿 2020-12-02 15:24:35 UVM driver和sequencer的通信 sequencer生成激励数据,并将其传递给driver执行。UVM类库提供了uvm_...
uvm_reg_field:包含uvm_reg_data_t类型的三个成员变量value,m_mirrored,m_desire。 uvm_reg:包含成员变量m_fields,加入各个uvm_reg_field。 uvm_reg_block:uvm_reg的集合,uvm_reg需要加入到uvm_reg_map中,且属于同一个uvm_reg_block。每个uvm_reg_block至少包含一个uvm_reg_map。uvm_reg_block中也可以再...
`uvm_object_utils(cfs_dut_reg_config) function new(string name = "cfs_dut_reg_config"); //specify the name of the register, its width in bits and if it has coverage super.new(name, 32, 1); endfunction virtual function void build(); ...