Спасибо за совет. Используя ваши рекомендации, я написал программу для проверки правильности алгоритма транспонирования. В ней я ввожу исходную матрицу и транспонированную, затем ПЛИС выполняет операцию транспонирования и результат сравнивает с введенной мной транспонированной матрицей-если они равны (т.е. алгоритм верен), то загорается светодиод на отладочной плате. Quartus ее откомпилировал, но она не работает. Может у меня есть какие то ошибки или неточности в коде? Помогите пожалуйста разобраться.
Привожу код программы:
module matrix2 (C,a);
input C;
output a;
integer i=0;
integer j=0;
integer k=0;
wire #200 D=C;
reg a=1'b0;
reg [2:0] matrix [2:0];
reg [2:0] matrixt[2:0];
reg [2:0] result [2:0];
initial
begin
matrix [0][2:0] = 3'b110;
matrix [1][2:0] = 3'b001;
matrix [2][2:0] = 3'b101;
result [0][2:0] = 3'b101;
result [1][2:0] = 3'b100;
result [2][2:0] = 3'b011;
end
always @ (posedge C)
begin
for(i=0; i<2; i=i+1)
begin
for(j=i; j<2; j=j+1)
begin
matrixt[j][i]<=matrix[i][j];
end
end
end
always @ (posedge D)
begin
for(i=0; i<2; i=i+1)
begin
for(j=0; j<2; j=j+1)
begin
if (matrixt[i][j]==result[i][j])begin
k=k+1;
end
end
end
if (k==9)
begin
a=1'b1;
end
end
endmodule
Чтобы второй блок always выполнялся последовательно за первым блоком, я поставил его чувствительным к сигналу D, задержанным на 200 нс по отношению к тактовому сигналу. Правильно я сделал? Есть ли какие то другие способы добиться того, чтобы блоки выполнялись последовательно?