Создание 2D массивов / матриц в SystemVerilog - PullRequest
0 голосов
/ 29 сентября 2018

Я делал 2D-массив в SystemVerilog, но modelsim скомпилирован с ошибками, поэтому теперь мой вопрос почему?

Вот код для матрицы умножения и накопления, которую я пытаюсь сделать:

module matrix_mac_unit
(//ports

 input  clock,
 input  reset,
 input  enable,
 input  clear,
 input  [7:0] matrix_1 [0:3][0:3],
 input  [7:0] matrix_2 [0:3][0:3],
 output [7:0] result   [0:3][0:3]
);

 logic [7:0] accumulator [0:3][0:3];

//sequential logic
always_ff @(posedge clock) begin
  if (!reset) begin
      accumulator <= 0;
  end
  else if (clear) begin
      accumulator <= 0;
  end
  else begin
      accumulator <= result;
  end

end

//combinational logic
assign result = enable ? matrix_1 * matrix_2 + accumulator : 
accumulator;

endmodule

Modelim говорит:

unit.sv (40) :( vlog-2110) Недопустимая ссылка на массив net "matrix_1".

unit.sv (40) :( vlog-2110) Недопустимая ссылка на массив net "matrix_2".

unit.sv (40) :( vlog-2990) Недопустимая операция для распакованного типа.

unit.sv (40) :( vlog-2110) Недопустимая ссылка на «аккумулятор» памяти.

unit.sv (40) :( vlog-2990) Недопустимая операция с распакованным типом.

Так что мой вопрос, как вы декларируете матрицу в SystemVerilog?

1 Ответ

0 голосов
/ 29 сентября 2018

SystemVerilog не выполняет умножение матриц.Вам нужно будет расширить уравнение на отдельные элементы.Есть много примеров там.Вот один из них: http://verilogcodes.blogspot.com/2015/11/verilog-code-for-matrix-multiplication.html

...