Ошибка: невозможно получить доступ к памяти * переменная * непосредственно в Verilog - PullRequest
0 голосов
/ 02 мая 2020

Это мой код для умножения матриц [100x100]. Имя файла: matrix1.v Этот код предназначен для ядра polybench mvt. Цель состоит в том, чтобы найти два вектора, x1 и x2, длиной 100, с x1 = x1 + A y1 и x2 = x2 + A y2.

module matrix1(A,y1,y2,clk,rst,x1,x2);
    input [0:31] A[0:99][0:99];
    input [0:31] y1[0:99];
    input [0:31] y2[0:99];
    input clk;
    input rst;
    output [0:31] x1[0:99];
    output [0:31] x2[0:99];

    integer i,j,t;
    reg [0:31] x1[0:99],x2[0:99];
    always@(posedge clk or posedge rst)   
    begin
    for(i=0;i<100;i=i+1)
    begin
        x1[i]=32'b0;
        x2[i]=32'b0;
    end
    for(i=0;i<100;i=i+1)
    begin
        for(j=0;j<=100;j=j+1)
        begin
            x1[i]=x1[i]+A[i][j]*y1[j];
            x2[i]=x2[i]+A[i][j]*y2[j];
        end
    end
    end
endmodule

Это мой тестовый стенд код. Имя файла: matrix1_tb.v Получение ошибки в строке 8 кода tb Попытка предоставить примеры входных данных в testbench, но ошибка сохраняется для всех переменных с массивами. ошибка: «не может получить доступ к памяти« A »напрямую в ТБ.

module matrix_tb();
    reg [0:31] A[0:99][0:99];
    reg [0:31] y1[0:99];
    reg [0:31] y2[0:99];
    reg clk;
    reg rst;
    wire [0:31] x1[0:99];
    wire [0:31] x2[0:99];
    matrix1 m1(A,y1,y2,clk,rst,x1,x2);
    integer i,j;
    initial begin
        for(i=0;i<100;i=i+1)
        begin
            y1[i]=i;
            y2[i]=i+1;
            for(j=0;j<=100;j=j+1)
            begin
                A[i][j]=i+j;
            end
        end        
    end
endmodule
...