Подскажите, пожалуйста, как аппаратно реализуются такие схемы? Прикладываю схемы картинками.
Я сделал простой расчет, пример кодирования на своем листочке и хочу повторить этот пример програмно на Verilog в симуляторе. Но что-то ничего не получается. Вот какая цепь у меня получилась по этой схеме:
Код:
module cyclic_coder_serial(
input logic clk,
input logic reset,
input logic in,
output logic out
);
reg [3:0] lfsr;
always @(posedge clk)
if (reset)
lfsr <= '0;
else begin
lfsr[3] <= in;
lfsr[2] <= lfsr[3];
lfsr[1] <= lfsr[2] ^ in;
lfsr[0] <= lfsr[1] ^ in;
end
assign out = lfsr[0] ^ in;
endmodule
А тестбенч у меня, видимо, кривой, потому что в симуляторе получается какая-то не такая кривая последовательность:
Цитата:
xxxx1x10010$finish called at time : 110 ns
Сам тестбенч:
Цитата:
module cyclic_coder_serial_tb();
logic clk;
logic reset;
logic in;
logic out;
initial begin
clk <= 0;
forever #5 clk <= !clk;
end
cyclic_coder_serial uut(clk, reset, in, out);
initial begin
reset <= 1; #10
reset <= 0; #10
in <= 0; #10
in <= 1; #10
in <= 0; #10
in <= 1; #10
in <= 0; #10
in <= 0; #10
in <= 0; #10
in <= 0; #10
in <= 0; #10
$finish;
end
always @(posedge clk)
$write(out);
endmodule
Что я делаю не так?