uvm_reg_item,uvm_sequence中的trnasaction类型,定义reg access的方式,包含一个uvm_object类型的extension,可以自定义。 在读写时,方式与adapter交互。 uvm_reg_adapter,继承自uvm_object,从其中设置一个uvm_reg_item,需要实现两个function,bus2reg和reg2bus。 其中的变量supports_byte_enable, 影响sequence的个数。
无论是读或写,寄存器模型都会通过sequence产生一个uvm_reg_bus_op的变量,此变量中存储着操作类型(读还是写)和操作的地址,变量中的信息要经过一个转换器(adapter)转换后交给bus_sequencer,随后交给bus_driver,由bus_driver实现最终的前门访问读写操作 一个转换器要定义好两个函数,一是reg2bus,将寄存器模型通过sequen...
1. uvm_reg 寄存器类型是uvm_reg class,定义了寄存器的各个比特,包括名字,初始值,比特位大小,然后再在uvm_reg_block里面将各个寄存器例化,设置名字,地址等。 然后在env里面例化uvm_reg_block, 设置它的bus sequencer/adapter, 以及基地址和HDL hierarchy. 在test里面进行寄存器访问时,只需要利用uvm_reg_block,根据...
对adapter的调用发生在uvm_reg_map的内部,详细调用reg2bus和bus2reg的过程见下节: 寄存器模型组成 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_field的定义 我们可以看到这里涉及到了4个值类型: 1、value:唯一一个没有被local修饰的值类型,即寄存器模型可以直接访问,也是唯一一个用rand修饰的字段,即对寄存器模型里的寄存器进行随机时value用来存储随机后的随机值(关于这个随机值的值内容有什么特点我们后面会具体讲),并且这个值也是我们对寄存...
UVM类库提供了通用的代码功能,如component hierarchy、transaction level model(TLM),configuration database等等,使用户能够创建任何类型的Testbench架构。 2023-05-22 10:14:28 reg与wire的区别 1,reg与wire的区别: 相同点: 都能表示一种类型类型。 不同点: wire 连线型数据,线网类型; 表示元件间的物理连线,...
在UVM中,reg_access参数提供了这种访问能力。 reg_access参数可以分为两种类型:读取(read)和写入(write)。读取参数用于从寄存器中读取数据,而写入参数用于向寄存器中写入数据。这两种参数可以在UVM验证环境中灵活地使用,以实现对寄存器的访问和验证。 对于读取参数,我们可以使用reg_access.read()方法来读取寄存器中的...
在进行信号赋值时,wire型信号不能出现在等号左边只能在右边,reg型信号可以出现在等号左边和右边。故,当不小心把wire型信号放在等号左边,就会报错。 信号赋值,左右两边的信号必须是相同类型,否则无法赋值。 当然,现在systemVerilog中引入了logic类型的变量,可看作是wire型和reg型的综合。使用logic类型的信号,就能避免上面...
寄存器块(uvm_reg_block)由包含很多的寄存器(uvm_reg),也可以有存储器(uvm_mem); 每个寄存器(uvm_reg)都由很多的域(uvm_reg_field)组成; 单个域(uvm_reg_filed)包含多个bit位。 寄存器模型相关类(均为Object类型) 寄存器模型配置的代码如下: class ctrl_reg extends uvm_reg;//寄存器 ...
uvm_component的parent和childr的类型为uvm_component,只要继承于uvm_component的组件自然继承这种层次化能力;而uvm_reg机制的parent和children是针对reg model的具体子类类型。基于uvm_component的parent和children机制服务于phase机制、config_set等机制,而uvm_object的子类uvm_sequence和uvm_sequence_item不...