(1) uvm_reg::write (1.1) FRONTDOOR write操作最终会转换为uvm_reg_map的do_write任务; (1.2) uvm_reg_map的do_write任务会查看系统是否设置了adapter,如果没有设置,就直接启动sequence, 让sequencer发送uvm_reg_item类型的transaction;如果设置了,那就调用do_bus_write任务. (1.3) uvm_reg_map的do_write完...
在实例化后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...
在write函数中显示调用do_predict函数,更新model中的mirror value,此时do_check函数,会根据read_on_check进行调用。 uvm自建的针对reg的sequence,针对普通的reg有:reg_access_seq,reg_bit_bash_seq,reg_hw_reset_seq。 uvm_reg model,主要实现了 1) 增加了对dut的reg进行访问的方式,可以直接通过reg model进行访问。
sample()可以理解为read()、write()方法的回调函数,用户需要填充该方法,使得可以保证自动采样数据。sample_values()是供用户外部调用的方法,在一些特定的事件触发时,例如中断、复位等场景,用户可以在外部通过监听具体事件来主动调用该方法,即ctrl_reg::sampel_values()。
uvm_reg_model——寄存器模型(一)uvm_reg_model——寄存器模型(⼀) 对于⼀个复杂设计,寄存器模型要能够模拟任意数量的寄存器域操作。UVM提供标准的基类库,UVM的寄存器模型来⾃于继承⾃VMM 的RAL(Register Abstract Layer),现在可以先将寄存器模型进⾏XML建模,再通过脚本⼯具直接⽣产寄存器模型。
第一种即uvm_reg:: read()/write()。在传递时,用户需要注意将参数path指定为UVM_ FRONTDOOR。uvm_reg: :read()/write()方法可传入的参数较多,除了status和 value两个参数需要传入,其他参数如果不指定,可采用默认值。 第二种即uvm_reg_ sequence: :read _reg()/write _reg()。在使用时,也需要将path指定...
第一种即uvm_reg::read()/write()。在传递时,用户需要注意将参数path指定为UVM_FRONTDOOR。uvm_reg::read()/write()方法可传入的参数较多,除了status和value两个参数需要传入,其它参数如果不指定,可采用默认值。 第二种即uvm_reg_sequence::read_reg()/write_reg()。在使用时,也需要将path指定为UVM_FRONT...
uvm_reg的write()uvm_reg的read()总结 至此,通过以上的学习我们得到如下结论:1、我们需要在寄存器模型...
read&write:使用BACKDOOR或FRONTDOOR的方式从DUT中读取或者写入指定寄存器的值,当操作完成后,会根据读写的结果更新register model中的渴望值和镜像值(二者相等)。 peek&poke:peek几乎等同于使用BACKDOOR方式的read,poke几乎等同于BACKDOOR方式的write,与read和write的区别是peek和poke不会模仿寄存器的行为。如对于一个读...