Мне нужно преобразовать следующую диаграмму конечных состояний в код Verilog.
Я включил код, который написал ниже. Мне кажется, что я правильно реализовал всю логику, и код работает для первых нескольких входных комбинаций. Однако в конце концов это терпит неудачу, и я не могу понять, почему.
module FiniteStateMachine(output reg out_z, input in_x, in_y, clk, reset_b);
parameter S0 = 2'b00, S1 = 2'b01, S2 = 2'b10, S3 = 2'b11;
reg state;
always @(posedge clk, negedge reset_b) begin
// set state
if (reset_b || !in_x) state <= S0;
else
case (state)
S0: state <= (in_y == 1) ? S1 : S3;
S1: state <= S2;
S2: state <= S3;
S3: state <= S3;
endcase
// set output
out_z <= (state == S2 || state == S3) ? 1 : 0;
end
endmodule
case (state)
неверно. я думаю, вы хотели использовать что-то вродеcase ({in_x,in_y})
вместо этого. Также я бы предложил использовать разные имена для состояний и условий. - person Serge   schedule 22.03.2018