Moore machine – String 1011 Detector
module Moore_FSM(x, clk, rst, w);
input x, clk, rst;
output w;
reg w;
parameter [2:0] A = 3'b 000, B = 3'b 001, C = 3'b 010, D = 3'b 011, E = 3'b 100;
reg [2:0] p_state, n_state; // present and next states, respectively.
always @(x or p_state) begin: Transitions
n_state = A; //Reset state
case (p_state)
A:
if (x == 1'b 1) n_state =
else n_state = A;
B:
if (x == 1'b 1) n_state =
else n_state = C;
C:
if (x == 1'b 1) n_state =
else n_state = A;
D:
if (x == 1'b 1) n_state =
else n_state = C;
E:
if (x == 1'b 1) n_state =
else n_state = C;
B;
B;
D;
E;
B;
default:
n_state = A; // reset state
endcase
end
always @(x or p_state) begin: Outputing
w = 1'b 0;
w = (p_state == E);
end
always @(posedge clk) begin: Registering //Synchronous
if (rst) p_state = A; //reset state
else p_state = n_state;
end
endmodule
Mealy machine– String 1011 Detector
module Mealy_FSM(x, clk, rst, w);
input x, clk, rst;
output w;
reg w;
parameter [1:0] A = 2'b 00, B = 2'b 01, C = 2'b 10, D = 2'b 11;
reg [1:0] p_state, n_state; // present and next states, respectively.
always @(x or p_state) begin: Transitions
n_state = A; //Reset state
case (p_state)
A:
if (x == 1'b 1) n_state =
else n_state = A;
B:
if (x == 1'b 1) n_state =
else n_state = C;
C:
if (x == 1'b 1) n_state =
else n_state = A;
D:
if (x == 1'b 1) n_state =
else n_state = C;
B;
B;
D;
B;
default:
n_state = A; // reset state
endcase
end
always @(x or p_state) begin: Outputing
w = 1'b 0;
w = (p_state == D)&(x == 1'b 1);
end
always @(posedge clk) begin: Registering //Synchronous
if (rst) p_state = A; //reset state
else p_state = n_state;
end
endmodule