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