我是Verilog的初学者。 我尝试设计用于视频编解码器的DCT(离散余弦变换)。 所以,我必须做矩阵乘法Y = AXAT(AT是A的转置矩阵) 我进行了2x2矩阵乘法,并且实现了。 但是,在第二个for循环(计算XAT)时,出现了问题。 输出y未知。
为什么输出值未知?
module dct(x1,x2,x3,x4,y1,y2,y3,y4);
input [31:0] x1,x2,x3,x4;
output [31:0] y1,y2,y3,y4;
reg [31:0] y1,y2,y3,y4;
reg [7:0] y[0:1][0:1];
reg [7:0] A [0:1][0:1];
reg [7:0] AT [0:1][0:1];
reg [7:0] x [0:1][0:1];
reg [7:0] Res [0:1][0:1];
integer i,j,k;
always@ (x1 or x2 or x3 or x4)
begin
A[0][0] = 8'd1; A[0][1] = 8'd2;
A[1][0] = 8'd3; A[1][1] = 8'd4;
AT[0][0] = 8'd1; AT[0][1] = 8'd3;
AT[1][0] = 8'd2; AT[1][1] = 8'd4;
x[0][0] = x1; x[0][1] = x2;
x[1][0] = x3; x[1][1] = x4;
i = 0;
j = 0;
k = 0;
{Res[0][0],Res[0][1],Res[1][0],Res[1][1]} = 32'd0;
for(i=0;i < 2;i=i+1)
for(j=0;j < 2;j=j+1)
for(k=0;k < 2;k=k+1)
Res[i][j] = Res[i][j] + (A[i][k] * x[k][j]);
for(i=0;i < 2;i=i+1)
for(j=0;j < 2;j=j+1)
for(k=0;k < 2;k=k+1)
y[i][j] = y[i][j] + (Res[i][k] * AT[k][j]);
//final output assignment - 3D array to 1D array conversion.
y1=y[0][0]; y2=y[0][1];
y3=y[1][0]; y4=y[1][1];
end
endmodule
我是一个初学者。 因此,我附加了整个代码,因为我不知道哪里出错了。 请帮助我。