在SystemVerilog中制作2D阵列/矩阵

时间:2018-09-29 13:47:19

标签: system-verilog

我当时正在SystemVerilog中制作2D数组,但是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)对网络数组“ matrix_1”的非法引用。

     

unit.sv(40):( vlog-2110)非法引用网络数组“ matrix_2”。

     

unit.sv(40):( vlog-2990)对解压缩类型进行非法操作。

     

unit.sv(40):( vlog-2110)非法引用内存“累加器”。

     

unit.sv(40):( vlog-2990)对解压缩类型进行非法操作。

所以我的问题是如何在SystemVerilog中声明矩阵?

1 个答案:

答案 0 :(得分:0)

SystemVerilog不执行矩阵乘法。您需要将方程式扩展为单个元素。有很多例子。这是一个:http://verilogcodes.blogspot.com/2015/11/verilog-code-for-matrix-multiplication.html