如何在Verilog中重复进行矩阵乘法?

时间:2019-05-02 14:54:57

标签: verilog

我是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

我是一个初学者。 因此,我附加了整个代码,因为我不知道哪里出错了。 请帮助我。

0 个答案:

没有答案