AngelicQuasar 1 27 марта, 2023 Опубликовано 27 марта, 2023 · Жалоба Хочу сделать кодирование Хэмминга на ПЛИС. Скажите, пожалуйста, есть ли у меня ошибки в коде? При отладке (моделировании) происходит что-то странное, где-то появляются иксы, после присваивания code <= codeword слева становится 0x55, а справа 0x5C. Должно быть равенство. Вот мой код: module hamming_decoder( input logic clk, input logic [6:0] codeword, output logic [2:0] syndrome, output reg [3:0] data ); logic [6:0] code; logic [6:0] err; always @(posedge clk) begin syndrome[2] <= codeword[2] ^ codeword[3] ^ codeword[4] ^ codeword[6]; syndrome[1] <= codeword[1] ^ codeword[3] ^ codeword[4] ^ codeword[5]; syndrome[0] <= codeword[6] ^ codeword[5] ^ codeword[3] ^ codeword[0]; code <= codeword; if (syndrome != 0) begin case (syndrome) 3'b001 : err <= 7'b0000001; 3'b010 : err <= 7'b0000010; 3'b100 : err <= 7'b0000100; 3'b111 : err <= 7'b0001000; 3'b110 : err <= 7'b0010000; 3'b011 : err <= 7'b0100000; 3'b101 : err <= 7'b1000000; endcase code <= code ^ err; end end always @(code) begin data[3] = code[6]; data[2] = code[5]; data[1] = code[4]; data[0] = code[3]; end endmodule Тестбенч: module hamming_decoder_tb(); logic clk; logic [6:0] codeword; logic [2:0] syndrome; logic [3:0] data; hamming_decoder dut(clk, codeword, syndrome, data); initial begin clk <= '0; forever #10 clk <= ~clk; end initial begin $monitor("codeword = %b, syndrome = %b, data = %b", codeword, syndrome, data); codeword = 7'b0011001; #100 codeword = 7'b0101100; #100 codeword = 7'b1010011; #100 codeword = 7'b1011001; #100 codeword = 7'b0101000; end endmodule Может, я где-то напутал с = и <=? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 27 марта, 2023 Опубликовано 27 марта, 2023 · Жалоба 1 hour ago, AngelicQuasar said: Может, я где-то напутал с = и <=? Да. Синдром и дата. Если регистр - пихаем под клок (<=) и он присвоится на следующем такте. Если провод асигнуем моментально (=). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AngelicQuasar 1 27 марта, 2023 Опубликовано 27 марта, 2023 (изменено) · Жалоба Должно быть syndrome[2] = codeword[2] ^ codeword[3] ^ codeword[4] ^ codeword[6]; и data[3] <= code[6]; ? Изменено 27 марта, 2023 пользователем AngelicQuasar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 28 марта, 2023 Опубликовано 28 марта, 2023 · Жалоба 12 hours ago, AngelicQuasar said: после присваивания code <= codeword слева становится 0x55, а справа 0x5C. Должно быть равенство. не должно быть там равенство, вы же сами этот код написали. читайте внимательно ваш код, желательно с тетрадью, в которой нарисована функциональная схема вашего устройства. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 28 марта, 2023 Опубликовано 28 марта, 2023 · Жалоба 10 hours ago, AngelicQuasar said: Должно быть syndrome[2] = codeword[2] ^ codeword[3] ^ codeword[4] ^ codeword[6]; и data[3] <= code[6]; ? Переписать всё так, чтобы: 1. (<=) относилось к D-триггеру у которого Q=D только после "posedge CLK", т.е Q можно использовать на следующем такте; 2. (=) относилось к LUT логике значение которой вычисляется "мгновенно", т.е. не зависит от CLK. А уж кто из них регистр - решать вам следуя придуманной вами реализации алгоритма. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 4 2 мая, 2023 Опубликовано 2 мая, 2023 · Жалоба On 3/27/2023 at 11:13 PM, AngelicQuasar said: сделать кодирование Хэмминга на ПЛИС. Скажите, пожалуйста, есть ли у меня ошибки в коде? попробуйте свериться с выходом вот этого онлайн-генератора: http://idoka.ru/verilog-ecc-generator/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться