Как я могу использовать переменную genvar для доступа к входным сигналам? - PullRequest
0 голосов
/ 17 июня 2020

У меня есть модуль с 30-векторными входами .. Мне нужна помощь в назначении for l oop.

module test (
  input [3:0] i0,
  input [3:0] i1,
  input [3:0] i2,
  ...
  input [3:0] i29

);

wire [3:0] int_i [0:29];

genvar j;
generate
  for (j=0; j<30; j=j+1) begin
    assign int_i[j] = i(j) //need help here 
  end
endgenerate


endmodule

Есть ли простой способ сделать это в Verilog. Я знаю, что могу сделать это в System verilog, создав двумерный вектор входных данных. Но есть ли способ сделать это в Verilog?

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Это функция systemverilog, в Verilog она должна упаковывать входной массив в вектор (я включил параметр для автоматизации):

module test
# (
   parameter WIDTH = 4,
   parameter DEPTH = 30
  ) (input [(WIDTH*DEPTH)-1:0] i);

wire [WIDTH-1:0] int_i [DEPTH-1:0];
genvar j;

generate
 for(j=0; j<DEPTH; j=j+1) begin: assign_i_gen //..(don't forget to name the for loop)
   assign int_i[j] = i[(WIDTH*j)+:WIDTH];
 end
endgenerate
1 голос
/ 17 июня 2020

Единственный способ сделать это в Verilog - выровнять двумерный массив в один вектор.

module test (
  input [30*4-1:0] i;
);
wire [3:0] int_i [0:29];
genvar j;
for (j=0; j<30; j=j+1) begin
    assign int_i[j] = i[4*j+:4];
end
...