(1.2) uvm_reg_map的do_write任务会查看系统是否设置了adapter,如果没有设置,就直接启动sequence, 让sequencer发送uvm_reg_item类型的transaction;如果设置了,那就调用do_bus_write任务. (1.3) uvm_reg_map的do_write完成后,如果auto predict功能打开了, uvm_reg的do_write会根据写入的值更新register model中寄存器...
在实例化后reg_model还要做四件事:第一是调用configure函数,其第一个参数是parent block,由于是最顶层的reg_block,因此填写null,第二个参数是后门访问路径 第二是调用build函数,将所有的寄存器实例化 第三是调用lock_model函数,调用此函数后,reg_model中就不能再加入新的寄存器了 第四是调用reset函数,如果不调用...
reg_model变量在实例化后还需要完成以下操作:调用configure函数,调用build函数,调用lock_model函数(这样reg_model中就不能再加入新的寄存器了),最后是调用reset函数(调用后所有寄存器值都将会变为复位值)。 为了让uvm_reg_map能通过sequencer自动执行前门访问,再connect_phase中需要将转换器和bus_sequencer通过set_sequen...
UVM_NO_COVERAGE='h0000,UVM_CVR_REG_BITS ='h0001,UVM_CVR_ADDR_MAP ='h0002,UVM_CVR_FIELD_VALS ='h0004,UVM_CVR_ALL = -1} uvm_coverage_model_e;//Enum: uvm_reg_mem_tests_e///Select which pre-defined test sequence to execute.///Multiple test sequences may be selected by bitwise ...
sample()可以理解为read()、write()方法的回调函数,用户需要填充该方法,使得可以保证自动采样数据。sample_values()是供用户外部调用的方法,在一些特定的事件触发时,例如中断、复位等场景,用户可以在外部通过监听具体事件来主动调用该方法,即ctrl_reg::sampel_values()。
uvm_reg_model——寄存器模型(⼀) 对于⼀个复杂设计,寄存器模型要能够模拟任意数量的寄存器域操作。UVM提供标准的基类库,UVM的寄存器模型来⾃于继承⾃VMM 的RAL(Register Abstract Layer),现在可以先将寄存器模型进⾏XML建模,再通过脚本⼯具直接⽣产寄存器模型。⾸先来看看 uvm_reg_model的代码...
第一种即uvm_reg:: read()/write()。在传递时,用户需要注意将参数path指定为UVM_ FRONTDOOR。uvm_reg: :read()/write()方法可传入的参数较多,除了status和 value两个参数需要传入,其他参数如果不指定,可采用默认值。 第二种即uvm_reg_ sequence: :read _reg()/write _reg()。在使用时,也需要将path指定...
读取的方式可以选择BACKDOOR或者FRONTDOOR。与update类似,每个uvm_reg派生来的类都有mirror操作,每个由uvm_reg_blcok派生出来的类也有mirror操作。mirror操作可以指定是否报告DUT中寄存器的值与register model中镜像值不一样。如果选择了这一项,那么就可以检查某些计数器的值是否DUT中相应计数器的值一致。
uvm_reg本质就是通过reg中的write,read等API,将读写请求,数据等通过API启动sequence发送给driver,...
class reg_model extends uvm_reg_block; rand reg_invert invert; … endclass 1. 2. 3. 4. 由此可以判断,对register_model来说,支持randomize操作。可以在uvm_reg_block级别调用randomize函数,也可以在uvm_reg级别,甚至可以在uvm_reg_field级别调用: ...