(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完成后,如果auto predict功...
(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完成后,如果auto predict功...
do_write()我们分5大块来讲解其中UVM_BACKDOOR相关的代码,首先是第1步调用get_backdoor来获取uvm_reg_backdoor的句柄,uvm_reg_backdoor类的定义和描述如图2所示。 图3 src/reg/uvm_reg_backdoor.svh中uvm_reg_backdoor类的定义与描述 简单概括下这个类的功能就是作为用户使用backdoor的方式访问寄存器或者memory...
在UVM源代码中,后门访问的实现主要围绕write任务展开,核心方法是do_write(),它包括获取uvm_reg_backdoor句柄、等待访问权限和更新期望值等步骤。uvm_reg_backdoor类是用户自定义后门访问的入口,允许通过派生类实现定制化的访问方式。获取uvm_reg_backdoor句柄的过程会遍历寄存器模型的层次,如果没有自定...
1.获取寄存器模型的指针:首先,我们需要获取到要进行Backdoor操作的寄存器模型的指针。可以通过寄存器模型的名字或路径从UVM寄存器层次结构中获取指针。 2.执行读取操作:一旦获取到寄存器模型的指针,我们可以使用`read()`方法直接读取寄存器的值。这样可以绕过寄存器模型的读取事务。 3.执行写入操作:使用`write()`方法可以...
uvm寄存器模型的backdoor用法 uvm寄存器模型的backdoor用法UVM(Universal Verification Methodology)中的寄存器模型通常用于验证设计中的寄存器。Backdoor(背门)是一种UVM寄存器模型中的特性,用于在测试中直接读取或写入寄存器的值,而不通过正常的寄存器访问路径。在UVM中,Backdoor访问通过UVM的uvm_reg_backdoor类实现。
reg中的poke()和peek()也会自动调用do_predict()函数,类似于do_write()/do_read()的UVM_BACKDOOR...
UVM_BACKDOOR形式的read和write; peek和poke函数。 这两类函数的区别是, 第一类会在进行操作时模仿DUT的行为, 第二类则完全不管DUT的行为。 如对一个只读的寄存器进行写操作, 那么第一类由于要模拟DUT的只读行为, 所以是写不进去的, 但是使用第二类可以写进去。编写代码如下所示: ...
使用后门访问的时候,只需将UVM_FRONTDOOR改成UVM_BACKDOOR即可,例如 reg_seq.write_reg(reg_seq.rgm.chnl0_ctrl_reg,status,wr_val,UVM_BACKDOOR); reg_seq.read_reg(reg_seq.rgm.chnl0_ctrl_reg,status,rd_val,UVM_BACKDOOR); 建立映射 需要将reg_block内的寄存器与dut中的reg型变量作映射。 在reg...
regmodel.register.write(status, value, UVM_BACKDOOR, .parent(this)); ``` 序列可以对uvm_reg进行写操作,同时遵循一定的规则(写清零等)。uvm_reg可以使用DPI/XMR设置DUT寄存器的值。隐式更新镜像值。 后门读: ```plaintext regmodel.register.read(status, value, UVM_BACKDOOR, .parent(this)); ...