将内存块串联到线阵列中?

时间:2018-12-09 05:25:22

标签: memory concatenation verilog

在我的项目中,我有这样的东西:

reg [15:0] mem [3:0];
wire [63:0] data;

我知道我可以将mem连接到data中,

assign data = {mem[3], mem[2], mem[1], mem[0]};

但是当内存变大时,这会变得很糟糕:

reg [3:0] mem [255:0];
wire [1023:0] data;

即使我可以写一些其他的Python或Ruby脚本来生成这样的行,恐怕也不应该写这样的东西。

assign data = {mem[255], ..........., mem[0]};
summon_cthulhu();

有什么更好的方法吗?

注意:这不是XY问题-这是我要解决的确切问题。

2 个答案:

答案 0 :(得分:0)

使用generate-for循环

genvar ii;
for (ii=0;ii<256;ii=ii+1)
   assign data[ii*16+:16] = mem[ii];

答案 1 :(得分:0)

这是一种方法。

parameter  MEM_WIDTH = 4;
parameter  MEM_DEPTH = 256;
localparam DATA_SIZE = (MEM_WIDTH * MEM_DEPTH);

reg[MEM_WIDTH-1:0]mem[MEM_DEPTH-1:0];
reg[DATA_SIZE-1:0]data;

always@(*)
begin
 for(i=0; i<MEM_DEPTH; i=i+1)
 begin
   data[i*MEM_WIDTH +: MEM_WIDTH] = mem[i];
 end
end