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...
1.获取寄存器模型的指针:首先,我们需要获取到要进行Backdoor操作的寄存器模型的指针。可以通过寄存器模型的名字或路径从UVM寄存器层次结构中获取指针。 2.执行读取操作:一旦获取到寄存器模型的指针,我们可以使用`read()`方法直接读取寄存器的值。这样可以绕过寄存器模型的读取事务。 3.执行写入操作:使用`write()`方法可以...
uvm_reg_sequence::read_reg()/write_reg(),在使用时也需要注明UVM_BACKDOOR的访问方式。 另外,uvm_reg::peek()/poke()两个方法,也分别对应了读取寄存器(peek)和修改寄存器(poke)两种操作,而用户无需指定访问方式尾UVM_BACKDOOR,因为这两个方法本来就只针对于后门访问。 前门访问和后门访问的比较 下面的表总...
uvm寄存器模型的backdoor用法 uvm寄存器模型的backdoor用法UVM(Universal Verification Methodology)中的寄存器模型通常用于验证设计中的寄存器。Backdoor(背门)是一种UVM寄存器模型中的特性,用于在测试中直接读取或写入寄存器的值,而不通过正常的寄存器访问路径。在UVM中,Backdoor访问通过UVM的uvm_reg_backdoor类实现。
对于read任务,其常用的三个参数是uvm_state_e status,代表读操作是否成功,第二个是uvm_reg_data_tvalue,代表读取的数值,第三个是uvm_path_e path,代表读取的方式,可选UVM_FRONTDOOR或UVM_BACKDOOR。write任务的常用参数与read任务类似。寄存器模型对sequence的transaction类型没有任何要求,因此可以在任意类型的...
在UVM源代码中,后门访问的实现主要围绕write任务展开,核心方法是do_write(),它包括获取uvm_reg_backdoor句柄、等待访问权限和更新期望值等步骤。uvm_reg_backdoor类是用户自定义后门访问的入口,允许通过派生类实现定制化的访问方式。获取uvm_reg_backdoor句柄的过程会遍历寄存器模型的层次,如果没有自...
UVM_BACKDOOR形式的read和write; peek和poke函数。 这两类函数的区别是, 第一类会在进行操作时模仿DUT的行为, 第二类则完全不管DUT的行为。 如对一个只读的寄存器进行写操作, 那么第一类由于要模拟DUT的只读行为, 所以是写不进去的, 但是使用第二类可以写进去。编写代码如下所示: ...
write的主体部分,分成了UVM_BACKDOOR和UVM_FRONTDOOR两种分支,我么知道UVM_BACKDOOR是通过hdl_path的...
通过set_backdoor()来将相应的寄存器与它对应的后门访问的读写函数对应起来。其中read和write函数以路径名来直接操作。 前门访问通过总线操作来实现,在其中有uvm_adapter的扩展类,扩展了函数reg2bus和bus2reg,并在uvm_reg扩展类中用default_map 命令添加指定的sequencer和adapter。这样便可以正确的在write函数中调用reg...
• uvm _reg_ sequence: :read _reg()/write _reg(), 在使用时也需要注明 UVM_BACKDOOR 的访问方式。 • 另外, uvm_reg: :peek()/poke()两个方法,也分别对应了读取寄存器 (peek) 和修改寄存器 (poke) 两种操作, 而用户无须指定访问方式为 UVM_BACKDOOR, 因为这两个方法本来就只针对于后门访问的...