Объединить блок памяти в проводной массив? - PullRequest
0 голосов
/ 09 декабря 2018

В моем проекте у меня есть что-то вроде этого:

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

Я знаю, что могу объединить мем в 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 голосов
/ 13 декабря 2018

Вот один из способов сделать это.

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
0 голосов
/ 09 декабря 2018

Использовать цикл сгенерировать для

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