Verilog 中的内存建模 收藏
这里的内存模型指的是内存的行为模型。Verilog 中提供了两维数组来帮助我们建立内存的行为模型。
具体来说,就是可以将内存宣称为一个 reg 类型的数组,这个数组中的任何一个单元都可以通过一个下标
去访问。这样的数组的定义方式如下:
reg [wordsize : 0] array_name [0 : arraysize];
例如:
reg [7:0] my_memory [0:255];
其中 [7:0] 是内存的宽度,而[0:255]则是内存的深度(也就是有多少存储单元),其中宽度为 8 位,
深度为 256。地址 0 对应着数组中的 0 存储单元。
如果要存储一个值到某个单元中去,可以这样做:
my_memory [address] = data_in;
而如果要从某个单元读出值,可以这么做:
data_out = my_memory [address];
但要是只需要读一位或者多个位,就要麻烦一点,因为 Verilog 不允许读/写一个位。这时,就需要
使用一个变量转换一下:
例如:
data_out = my_memory[address];
data_out_it_0 = data_out[0];
这里首先从一个单元里面读出数据,然后再取出读出的数据的某一位的值。
初始化内存
初始化内存有多种方式,这里介绍的是使用$readmemb 和 $readmemh 系统任务来将保存在文
件中的数据填充到内存单元中去。$readmemb 和 $readmemh 是类似的,只不过$readmemb 用于
内存的二进制表示,而$readmemh 则用于内存内容的 16 进制表示。这里以$readmemh 系统任务来
介绍。
语法
$readmemh("%le_name", mem_array, start_addr, stop_addr);
注意的是:
%le_name 是包含数据的文本文件名, mem_array 是要初始化的内存单元数组名,start_addr 和