Skip to content

Instantly share code, notes, and snippets.

@eggie5
Created March 23, 2013 20:50
Show Gist options
  • Select an option

  • Save eggie5/5229306 to your computer and use it in GitHub Desktop.

Select an option

Save eggie5/5229306 to your computer and use it in GitHub Desktop.
module FSM
(input clk, input RESET, input din, output pe);
//state declartion
reg [1:0] state_reg, next_state; //2 bits for 3 states - not one-hot encoding
parameter zero=0;
parameter one=1;
parameter _edge=2;
always @(posedge clk or posedge RESET) begin
if(RESET) state_reg <= zero;
else state_reg <= next_state;
end
always @(state_reg or din) begin
case(state_reg)
zero:
if(din==0) //stay in 0 state -- loopback
next_state = zero;
else if(din==1) //transition to edge state
next_state = _edge;
else next_state = zero; //default
_edge:
if(din==0) next_state=zero;
else if(din==1) next_state=one;
else next_state =zero; //default
one:
if(din==0) next_state=zero;
else if(din==1) next_state = one; //loopback
else next_state=one; //default
default:
$display("invalid state error case default fall-through, state:%d", state_reg);
endcase
end
assign pe = (state_reg == _edge) ? 1 : 0 ;
endmodule
//iverilog -o fsm moore.v
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment