1.前门访问操作只有两种:读操作和写操作。

2.对于参考模型来说,最大问题是如何在其中启动一个sequence。全局变量和config_db。

3.除了这两种方式之外,如果能在参考模型中得到sequencer 的指针,也可以启动sequence。只要在其中设置p_sqr变量,并在env 中将sequencer 的指针赋值此变量即可。

4.分别写一个读写sequence:

UVM:7.3.1 UVM 中前门访问的实现_寄存器


5.在参考模型中使用如下方式读操作:

UVM:7.3.1 UVM 中前门访问的实现_寄存器_02

1)sequence是自动执行的,执行完毕后,为此sequence 分配的内存依然是有效的,所以可以使用reg_seq继续引用此sequence。上述读操作正是用到了这一点。(if 那一行)


6.在寄存器模型中使用的方式也与此类似。关键是在参考模型中有一个sequencer 的指针,而在寄存器模型中也有一个这样的指针。7.2.2

UVM:7.3.1 UVM 中前门访问的实现_寄存器_03


7.uvm内建了一种transaction:uvm_reg_item。通过adapter 的bus2reg 及 reg2bus,可以实现uvm_reg_item 与transaction 的转换。

7.6.7.2节,如果driver 一直发送应答而sequence 不收集应答,那么将会导致sequencer 的应答队列溢出。所以在adapter 中设置了provide_responses选项:

UVM:7.3.1 UVM 中前门访问的实现_ide_04