verilog-这句话正在做什么" +:"

时间:2014-05-26 06:43:39

标签: verilog

下面给出的代码是将多维数组转换为单维数组,以将其作为模块的输出。

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

1 个答案:

答案 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节中有所介绍。