下面给出的代码是将多维数组转换为单维数组,以将其作为模块的输出。
1)我的问题是+:在粗体的陈述中正在做什么 2)如果我们想使它一般,循环中的哪个术语是行,哪一个是列?
module module1(instructionmem);
output [32*32-1:0] instructionmem;
reg [31:0] instructionmem_array [31:0];
genvar i;
generate for (i = 0; i < 32; i = i+1) begin:instmem
**assign instructionmem[32*i +: 32] = instructionmem_array[i];**
end endgenerate
endmodule
答案 0 :(得分:1)
+:
语法用于读取和写入数组的变量切片
主要语法是a = b[offset +: fixed_width]
,相当于:
a = b[offset : offset + fixed_width];
值得注意的是,由于您可能包含动态宽度,因此上述内容无法合成。引入了使用+:
的新语法来解决该问题并且是可综合的。
第11.5.1节SystemVerilog IEEE 1800-2012的向量位选择和部分选择寻址将对此进行介绍。
要定义32位字,我们可以这样做:
reg [31:0] a_word;
要将其转换为32位宽,10位深存储器(多维阵列),根据您的问题我们可以做到:
reg [31:0] a_memory [0:9];
当访问位置时,第一个[]
从访问字的位变为从存储器中的字。即
initial begin
a_bit = a_word[31];
a_word = a_memory[9];
a_bit = a_memory[9][31];
end
记忆在SystemVerilog IEEE 1800-2012的第7.4.4节中有所介绍。