我当时正在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中声明矩阵?
答案 0 :(得分:0)
SystemVerilog不执行矩阵乘法。您需要将方程式扩展为单个元素。有很多例子。这是一个:http://verilogcodes.blogspot.com/2015/11/verilog-code-for-matrix-multiplication.html