Fsm3 Fsm3

See also: State transition logic for this FSM

The following is the state transition table for a Moore state machine with one input, one output, and four states. Implement this state machine. Include an asynchronous reset that resets the FSM to state A.
Fsm3 Fsm3_第1张图片

 一种写法

module top_module(
    input clk,
    input in,
    input areset,
    output out); //
	
    parameter A = 2'b00,
    		B = 2'b01,
    		C = 2'b11,
    		D = 2'b10;
    reg [1:0] state;
    reg [1:0] next_state;
    
    // State transition logic
    always@ (*) begin
          case(state)
                A:if(in == 1)
                    	next_state <= B;
                		else
                            next_state <= A;
                B:if(in == 0)
                    	next_state <= C;
                		else
                            next_state <= B;
                C:if(in == 1)
                    	next_state <= D;
                		else
                            next_state <= A;
                D:if(in == 1)
                    	next_state <= B;
                		else
                            next_state <= C;
				default:   next_state <= A;  
            endcase
    end
    
    // State flip-flops with asynchronous reset
    always@(posedge clk or posedge areset)
        if(areset)
            state <= A;
    	else 
         state  <= next_state;
           
    // Output logic
	assign out = state == D ? 1'b1 : 1'b0;
endmodule

另一种写法

module top_module(
    input clk,
    input in,
    input areset,
    output out); //
	
    parameter A = 2'b00,
    		B = 2'b01,
    		C = 2'b11,
    		D = 2'b10;
    reg [1:0] state;
    reg [1:0] next_state;
    
    // State transition logic
    always@ (*) begin
          state  <= next_state;
    end
   
    // State flip-flops with asynchronous reset
    always@(posedge clk or posedge areset)
        if(areset)
            next_state <= A;
    	else 
          case(next_state)
                A:if(in == 1)
                    	next_state <= B;
                		else
                            next_state <= A;
                B:if(in == 0)
                    	next_state <= C;
                		else
                            next_state <= B;
                C:if(in == 1)
                    	next_state <= D;
                		else
                            next_state <= A;
                D:if(in == 1)
                    	next_state <= B;
                		else
                            next_state <= C;
				default:   next_state <= A;  
            endcase
           
    // Output logic
	assign out = state == D ? 1'b1 : 1'b0;
endmodule

你可能感兴趣的:(HDLBits题目,verilog)