Alexey2015 0 30 ноября, 2015 Опубликовано 30 ноября, 2015 · Жалоба Здравствуйте. Передо мной стоит учебная задача написать программу транспонирования матрицы на Verilog. Я Verilog начал изучать совсем недавно и с вопросом о работе с массивами и матрицами еще не разобрался. Я написал код, но Quartus выдает ошибку, что массив matrix у меня объявлен неверно. Помогите пожалуйста разобраться в данной теме. Привожу пример части кода: integer i=0; integer j=0; reg [2:0] matrix [2:0]= {3'b110,3'b001,3'b101}; reg [2:0] matrixt[2:0]; 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
full41 0 30 ноября, 2015 Опубликовано 30 ноября, 2015 · Жалоба Здравствуйте. Передо мной стоит учебная задача написать программу транспонирования матрицы на Verilog. Я Verilog начал изучать совсем недавно и с вопросом о работе с массивами и матрицами еще не разобрался. Я написал код, но Quartus выдает ошибку, что массив matrix у меня объявлен неверно. Помогите пожалуйста разобраться в данной теме. Привожу пример части кода: integer i=0; integer j=0; reg [2:0] matrix [2:0]= {3'b110,3'b001,3'b101}; reg [2:0] matrixt[2:0]; always @ (posedge C) begin for(i=0; i<2; i=i+1) begin for(j=i; j<2; j=j+1) begin matrixt[j]<=matrix[j]; end end end В Verilog нельзя присвоить значение матрицы reg [2:0] matrix [2:0]= {3'b110,3'b001,3'b101}; Необходимо присвоение делать через for или просто каждому значению в цикле. Например: always @(posedge C) begin matrix [2:0][0] = 3'b110; matrix [2:0][1] = 3'b001; matrix [2:0][2] = 3'b101; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey2015 0 4 декабря, 2015 Опубликовано 4 декабря, 2015 (изменено) · Жалоба В Verilog нельзя присвоить значение матрицы reg [2:0] matrix [2:0]= {3'b110,3'b001,3'b101}; Необходимо присвоение делать через for или просто каждому значению в цикле. Например: always @(posedge C) begin matrix [2:0][0] = 3'b110; matrix [2:0][1] = 3'b001; matrix [2:0][2] = 3'b101; end Спасибо за совет. Используя ваши рекомендации, я написал программу для проверки правильности алгоритма транспонирования. В ней я ввожу исходную матрицу и транспонированную, затем ПЛИС выполняет операцию транспонирования и результат сравнивает с введенной мной транспонированной матрицей-если они равны (т.е. алгоритм верен), то загорается светодиод на отладочной плате. 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 нс по отношению к тактовому сигналу. Правильно я сделал? Есть ли какие то другие способы добиться того, чтобы блоки выполнялись последовательно? Изменено 4 декабря, 2015 пользователем des00 используйте теги code для оформления кода (с) модератор Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 4 декабря, 2015 Опубликовано 4 декабря, 2015 · Жалоба wire #200 D=C; Чтобы второй блок always выполнялся последовательно за первым блоком, я поставил его чувствительным к сигналу D, задержанным на 200 нс по отношению к тактовому сигналу. Правильно я сделал? Есть ли какие то другие способы добиться того, чтобы блоки выполнялись последовательно? Несинтезируемая конструкция, годится только для симулятора... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey2015 0 4 декабря, 2015 Опубликовано 4 декабря, 2015 · Жалоба Несинтезируемая конструкция, годится только для симулятора... Подскажите пожалуйста, каким образом лучше эту задержку выполнить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 4 декабря, 2015 Опубликовано 4 декабря, 2015 · Жалоба Подскажите пожалуйста, каким образом лучше эту задержку выполнить? 1. Сделать синхронный проект, с клоками как и полагается 2. Могу предложить персональные занятия по ПЛИС Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться