UVM:7.6.2 检查默认值的sequence 1.uvm_reg_hw_reset_seq 检查上电复位后寄存器模型与DUT 寄存器的默认值是否相同,原型为: 2.对于DUT,复位完成后,就是默认值。但是对寄存器模型,如果只是集成到验证平台,不做任何处理,所有值都是0,此时要调用reset 函数使其寄存器的值变为默认值: 3.这个sequence 检查前会调用m...
`uvm_object_utils(mcdf_example_seq) `uvm_declare_p_sequencer(mcdf_bus_sequencer) ... task body(); uvm_status_e status; uvm_reg_data_t data; uvm_reg_hw_reset_seq reg_rst_seq=new();// uvm_reg_bit_bash_seq reg_bit_bash_seq=new(); uvm_reg_access_seq reg_acc_seq=new(); if(...
我们首先来看下uvm_reg_hw_reset_seq中的一个空的virtual task reset_blk的描述。由此我们可以获得上面第一个问题的答案,uvm源代码中的uvm_reg_hw_reset_seq是不会主动帮你去对DUT做reset的,但是它预留了一个hook任务reset_blk,我们可以通过从uvm_reg_hw_reset_seq继承的sequence来override这个任务来实现将reset ...
//Class: uvm_reg_bit_bash_seq //"NO_REG_TESTS"or"NO_REG_BIT_BASH_TEST" //| uvm_resource_db#(bit)::set({"REG::",regmodel.blk.get_full_name(),".*"}, //|"NO_REG_TESTS",1, this); // class: uvm_reg_hw_reset_seq //"NO_REG_TESTS"or"NO_REG_HW_RESET_TEST" //| uvm...
下面的例码分别添加了uvm_reg_hw_reset_seq、uvm_reg_bit_bash_seq和uvm_reg_access_seq来测试寄存器模型,从代码的整洁性来看,用户并不需要额外再添加什么,这种使用方式非常方便,且又能完成寄存器的大规模集成测试。 对于一些寄存器,如果像将其排除在某些内建序列测试范围之外,用户可以额外添加上面列表中提到的“...
uvm_reg_hw_reset_seq用于检查上电复位后寄存器模型与DUT中寄存器的默认值是否相同。寄存器模型如果不调用reset函数,则其寄存器都会是0而非像DUT那样是复位值。该sequence在检查前会调用model的reset函数,然后通过前门访问的方式读取DUT所有寄存器的值,并将其与寄存器模型中的值比较。同样地,这个sequence也需要指定model变...
rgm.chnl0_ctrl_reg.pkt_len.reset(); // register field reset 在复位之后, 用户也可以通过读取寄存器模型的复位值(与寄存器描述文件一致), 与前门访问获取的寄存器复位值进行比较, 以此判断硬件各个寄存器的复位值是否按照寄存器描述去实现。这里的 get_reset()方法指的也是寄存器模型的复位值, 而不是硬件。
下面的例码分别添加了 uvm_reg_ hw _reset_ seq、 uvm_reg_ bit_ bash_ seq和 uvm _reg_ access_ seq 来测试寄存器模型, 从代码的整洁性来看, 用户并不需要额外再添加什么, 这种使用方式非常方便, 且又能完成寄存器的大规模集成测试。 如果想将一些寄存器排除在某些内建序列测试范围之外, 可以额外添加上面...
uvm_reg_hw_reset_seq rst_seq; rst_seq = new("rst_seq");rst_seq.model = env.ral_model;rs...
下面的例码分别添加了uvm_reg_hw_reset_seq、uvm_reg_bit_bash_seq和uvm_reg_access_seq来测试寄存器模型,从代码的整洁性来看,用户并不需要额外再添加什么,这种使用方式非常方便,且又能完成寄存器的大规模集成测试。 对于一些寄存器,如果像将其排除在某些内建序列测试范围之外,用户可以额外添加上面列表中提到的“...