Verilog 使用readmemb初始化内存时,索引参数的顺序是否重要

Verilog 使用readmemb初始化内存时,索引参数的顺序是否重要,verilog,Verilog,因此,为了将内存加载到FPGA上的“文件”中,我使用了下面概述的过程 粗略的公式是这样的 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 wan

因此,为了将内存加载到FPGA上的“文件”中,我使用了下面概述的过程

粗略的公式是这样的

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]