1.除了寄存器,还有大量的存储器。有些存储器被分配了地址空间,有些没有。

2.两级检查可以快速定位问题所在,(这个图好像和这节没什么关系):

UVM:7.4.5 加入存储器_地址空间

3.在一个16位的系统中加入一块1024x16(1024个深,16个宽)的存储在如下:

UVM:7.4.5 加入存储器_地址空间_02

1)由uvm_mem 派生my_memory,new 中有3个参数。

第一个名字。

第二个深度。

第三个宽度。

2)例化,configure。

第一个所在reg_block 的指针。

第二个此块存储器的hdl 路径。

3)加入default_map,可以进行前门操作。

4)如果没有对存储器分配地址空间,可以不加入default_map。只能后门访问。


4.要进行读写通过read,write,peek,poke。这4个在调用的时候需要额外一个offset 参数,说明读取哪个地址:

UVM:7.4.5 加入存储器_地址空间_03

UVM:7.4.5 加入存储器_地址空间_04

UVM:7.4.5 加入存储器_寄存器_05

UVM:7.4.5 加入存储器_物理地址_06


5在一个16位系统中加入512x32 的存储器:

UVM:7.4.5 加入存储器_物理地址_07

1)一个单元占据两个物理地址,共1024个地址。

2)offset是物理地址还是某一个存储单元偏移呢?

答:存储单元地址。offset 最大值是511,不是1023(UVM会自动算)。一次读操作,一个offset 对应两个物理地址,寄存器模型在总线上进行两次读写操作。