AngelicQuasar 1 23 декабря, 2023 Опубликовано 23 декабря, 2023 · Жалоба Здравствуйте. Помогите, пожалуйста, написать код по линейной переключательной схеме на картинке. Я написал такой код, но он работает неправильно. Модуль: module hamming_coder( input wire clk, input wire enable, input wire reset, input wire in, output wire out ); reg [3:0] counter = 0; reg [3:0] state; wire feedback = state[0] ^ state[2] ^ state[3]; wire nextBit = counter < 5 ? in : feedback; always @(posedge clk) begin if (reset) begin state <= 0; counter <= 0; end else if (enable) begin state <= { nextBit, state[3:1] }; counter <= counter + 4'b0001; end end assign out = state[0]; endmodule Тестбенч: module hamming_coder_tb(); logic clk; logic [3:0] data = 4'b0001; logic reset; logic enable; logic in; logic out; assign in = data[0]; initial begin clk = 0; forever #5 clk = ~clk; end always @(posedge clk) if (!reset && enable) data <= data >> 1; hamming_coder coder( .clk(clk), .enable(enable), .reset(reset), .in(in), .out(out) ); always @(posedge clk) if (!reset && enable) $write(out); initial begin reset <= 1'b1; enable <= 1'b0; @(posedge clk); reset <= 1'b0; enable <= 1'b1; repeat (11) @(posedge clk); $finish; end endmodule Ориентиры для проверки корректности кодирования: примеры кодирования при помощи порождающей матрицы этого кода. Информационное слово (1010), код (1010001); слово (1100), код (1100101); слово (1000), код (1000110). Помогите, пожалуйста, разобраться, что-то запутанно как-то. Одна маленькая погрешность приводит к совершенно другому кодовому слову. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 23 декабря, 2023 Опубликовано 23 декабря, 2023 · Жалоба попробуйте так module hamming_ecoder( input [3:0] data_in, output [6:0] ham_out ); wire p0,p1,p2; assign p0 = data_in[0] ^ data_in[1] ^ data_in[3]; assign p1 = data_in[0] ^ data_in[2] ^ data_in[3]; assign p2 = data_in[1] ^ data_in[2] ^ data_in[3]; assign ham_out = {data_in, p0, p1, p2}; endmodule `timescale 1ns / 1ps module hamming_encoder_tb(); reg [3:0] data_in; wire [6:0] ham_out; hamming_encoder DUT(data_in,ham_out); initial begin data_in = 4'h4; #10; data_in = 4'h0; #10; data_in = 4'h8; #10; data_in = 4'hF; #10; data_in = 4'hA; #10; data_in = 4'h9; #10; end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AngelicQuasar 1 23 декабря, 2023 Опубликовано 23 декабря, 2023 · Жалоба Ну да, можно сделать кодер и таким образом, умножив абстрактный вектор на матрицу и посчитав соотношения координат вектора, спасибо. А мой способ реализации вообще жизнеспособен? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 23 декабря, 2023 Опубликовано 23 декабря, 2023 · Жалоба Да просто надо понять, где ошибка и исправить) PS Кто ищет тот вседа найдет) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OM-S 0 23 декабря, 2023 Опубликовано 23 декабря, 2023 · Жалоба А если написать вот так: wire nextBit = counter < 4 ? in : feedback; И заодно в тестбенче лучше генерить клок так: initial begin clk <= 0; forever #5 clk <= ~clk; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stells 12 23 декабря, 2023 Опубликовано 23 декабря, 2023 (изменено) · Жалоба Оффтоп: помнится в 89 году будущей жене написал курсовик по кодеру Хемминга на ПЗУ типа 556 что ли (а предполагалось, что задача будет решаться на простой логике). Препод тогда поставил ей 4 и передал, что мне поставил 5. Эх, молодость!😄 Изменено 23 декабря, 2023 пользователем stells 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 4 23 декабря, 2023 Опубликовано 23 декабря, 2023 · Жалоба @AngelicQuasar Если не секрет, какая это книга? Я сначала подумал, что это методичка ВУЗ-а, а потом увидел, что там страница 355 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AngelicQuasar 1 23 декабря, 2023 Опубликовано 23 декабря, 2023 · Жалоба 2 часа назад, Джеймс сказал: @AngelicQuasar Если не секрет, какая это книга? Я сначала подумал, что это методичка ВУЗ-а, а потом увидел, что там страница 355 Михайлов, Мазепа "Основы теории кодирования" Но мне по кодам больше нравится Блейхут "Теория и практика кодов, контролирующих ошибки" 3 часа назад, OM-S сказал: А если написать вот так: wire nextBit = counter < 4 ? in : feedback; И заодно в тестбенче лучше генерить клок так: initial begin clk <= 0; forever #5 clk <= ~clk; end Офигеть, помогло Спасибо 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться