因此,为了将存储器加载到FPGA上的“文件”中,我正在使用here中概述的过程。
粗略公式是这个
reg [7:0] ex2_memory [0:15];
$readmemh("ex2.mem", ex2_memory);
这对我来说很奇怪,因为许多指南都建议应该略有不同。例如,这是我的指南之一
Sometimes it can be useful to have structures with more than one dimension – for example, we might want to hold 16 8-bit values. Verilog allows you to define multiple sets of indexes for a variable:
reg [7:0] string [15:0];
请注意在readmemb示例中它是[n:0]而不是[0:n]。那么这两种定义多维总线的方式有什么区别?
对于Verilog,解包尺寸顺序无关紧要。 $readmemh/b
始终将起始地址映射到较低的索引,并且一次只能访问一个存储元素。使用Verilog编程接口(VPI)时,C代码有一个罕见的例外,但是我说那是罕见的吗?
在SystemVerilog中,这更重要,因为您可以整体访问未打包的数组,也可以使用零件选择,这与Verilog允许选择打包矢量尺寸的零件的方式类似。当选择位reg [7:0] mr;
时,它会在reg [0:7] mr;
或mr[0]
之间产生区别。