0 Вопрос: Как сделать матричное умножение повторно в Verilog?

вопрос создан в Thu, May 2, 2019 12:00 AM

Я новичок в verilog. Я пытаюсь спроектировать DCT (дискретное косинусное преобразование), который используется в видеокодеке. Итак, я должен сделать матричное умножение Y = AXAT (AT транспонированная матрица A) Я сделал 2x2 матричное умножение, и это было достигнуто. но, во-вторых для цикла (который вычисляет XAT), у него есть проблема. выход у был неизвестен.

почему выходное значение неизвестно?

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

Я очень новичок. Итак, я приложил весь код, потому что я не знаю, где это неправильно. пожалуйста, помогите мне ..

    
- 1
  1. Вы можете НЕ (обратите внимание) написать код HDL, как если бы он был C. Ваш код не миль , но световых лет от того, что требуется в видеокодеке. Вы должны начать с простого HDL и строить оттуда. Затем, примерно через год, вы можете подумать о написании дискретного косинусного транца для видеокодека.
    2019-05-02 15: 36: 00Z
  2. Большое спасибо. Я знаю, что это похоже на разные C и HDL. Я должен начать простой пример
    2019-05-02 23: 33: 22Z
  3. Вы должны взглянуть на систолические массивы, эта архитектура идеально подходит для умножения матриц.
    2019-05-11 11: 53: 32Z
0 ответов                              0                         
источник размещен Вот