Итак, я работаю над назначением лаборатории для класса компьютерной техники. У меня есть задание, и я пытаюсь получить всю необходимую помощь, так как для профессора мне нужно подождать до нескольких дней, прежде чем я смогу поговорить с ними о помощи. Поэтому я вижу, могу ли я помочь ей.Хэмминг (7,4) Код - Конечный автомат
Моя проблема заключается в том, что мой конечный автомат не работает, как должно быть задано из задания лаборатории. Предполагается, что государственный аппарат имеет 3 состояния; idle, s1, s2. Ожидается, что Idle должен показать все нули в форме волны, состояние 1 покажет случайно генерируемое 4-битное число из LFSR, а состояние 2 покажет результат из 4-битного числа после того, как будет выполнено подавление (7,4). Часы меняются на такт 1HZ, используется деление clk.
код выглядит следующим образом:
CLOCK_1HZ
module clock_1hz (clk, reset, clk2);
input clk, reset;
output clk2;
reg temp;
reg [25:0] cnt;
always @(posedge clk or posedge reset)
begin
if (reset)
begin
cnt = {25{1'b0}};
end
else
begin
if (cnt == 26'b10111110101111000001111111)
begin
cnt = {25{1'b0}};
temp = 1'b1;
end
else if (cnt < 26'b01011111010111100000111111)
begin
cnt = cnt + 1;
temp = 1'b1;
end
else
begin
cnt = cnt + 1;
temp = 1'b0;
end
end
end
assign clk2 = temp;
endmodule
ЛРСОС
module lfsr (out, clk, rst);
output [4:1] out;
input clk, rst;
reg [4:1] w;
always @(posedge clk or posedge rst)
begin
if (rst)
begin
w = 4'b1011;
end
else
w = {w[3],w[2],w[1]^w[4], w[4]};
end
assign out=w;
endmodule
Хэмминга
module hamming(din, dout);
output [6:0] dout;
input [3:0] din;
assign dout[6] = din[3];
assign dout[5] = din[2];
assign dout[4] = din[1];
assign dout[3] = din[1]^din[2]^din[3];
assign dout[2] = din[0];
assign dout[1] = din[0]^din[2]^din[3];
assign dout[0] = din[0]^din[1]^din[3];
endmodule
Весь этот код работает правильно и вычисляет правильное HAMMING, а деление часов хорошо работает с LFSR и работает, когда оно объединено в виде иерархического дизайна.
Когда я создаю FSM для этого кода, он работает до его вычисления количества помех, но не меняет состояние, если указано.
- Когда переключатель 1 комплект: состояние IDLE
- Когда переключатель 2 набор: состояние 1, показывает 4-битовый LFSR номер
- Когда переключатель 2 набора: состояние 2, показывает 7-битный Хэмминга результата
Ниже мой код конечного автомата и после этого является выходного сигнала.
module fsm (clk , reset , sw1 , sw2 , sw3 , lights);
input clk, reset, sw1, sw2, sw3;
output reg [6:0] lights;
reg[2:0] state;
wire clkhz;
wire [3:0] lfsr_out;
wire [6:0] hout;
parameter S0 = 3'b000, S1 =3'b001, S2 = 3'b010; // states
clock_1hz u1(.clk(clk),
.reset(reset),
.clk2(clkhz));
lfsr u2(.rst(reset),
.clk(clkhz),
.out(lfsr_out));
hamming u3(.din(lfsr_out),
.dout(hout));
always @(posedge clk or posedge reset)
begin
if (reset == 1)
begin
state <= S0;
end
else
case(state)
S0: if(sw1 == 1)
begin
state <= S0;
end
S1: if(sw2 == 1)
begin
state <= S1;
end
S2: if(sw3 == 1)
begin
state <= S2;
end
default state <= S0;
endcase
end
always @(*)
begin
case(state)
S0: lights = 7'b0000000; //led are all off
S1: lights = lfsr_out; //4bit lfsr shown on led
S2: lights = hout; // display hamming code result
default lights = 7'b0000000; //led are all off
endcase
end
endmodule
WAVEFORM КОНЕЧНЫХ ГОСУДАРСТВЕННОГО АППАРАТА:
С данного кода, вы не можете изменить ' state'. Оператор case verilog не требует 'break;' как C/C++ или Java. – Greg