⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mealy fsm.txt

📁 mealy fsm 和moore fsm
💻 TXT
字号:
Verilog 

// Example of a 5-state Mealy FSM

module mealy (data_in, data_out, reset, clock);

output data_out;

input [1:0] data_in;

input reset, clock;

reg data_out;

reg [2:0] pres_state, next_state;

parameter st0=3'd0, st1=3'd1, st2=3'd2, st3=3'd3, st4=3'd4;

// FSM register

always @ (posedge clock or negedge reset)

begin: statereg

if(!reset)// asynchronous reset

pres_state <= st0;

else

pres_state <= next_state;

end // statereg

// FSM combinational block

always @(pres_state or data_in)

begin: fsm

case (pres_state)

st0:    case(data_in)

2'b00:       next_state=st0;

2'b01:       next_state=st4;

2'b10:       next_state=st1; 

2'b11:       next_state=st2;

endcase

st1:    case(data_in)

2'b00:       next_state=st0;

2'b10:       next_state=st2;

default:     next_state=st1;

endcase

st2:    case(data_in)

2'b0x:       next_state=st1;

2'b1x:       next_state=st3;

endcase

st3:    case(data_in)

2'bx1:       next_state=st4;

default:     next_state=st3;

endcase

st4:    case(data_in)

2'b11:       next_state=st4;

default:     next_state=st0;

endcase

default:                     next_state=st0;

endcase

end // fsm

// Mealy output definition using pres_state w/ data_in

always @(data_in or pres_state)

begin: outputs

case(pres_state)

st0:    case(data_in)

2'b00:      data_out=1'b0;

default:     data_out=1'b1;

endcase

st1:      data_out=1'b0;

st2:    case(data_in)

2'b0x:      data_out=1'b0;

default:     data_out=1'b1;

endcase

st3:      data_out=1'b1;

st4:    case(data_in)

2'b1x:      data_out=1'b1;

default:     data_out=1'b0;

endcase

default:                     data_out=1'b0;

endcase

end // outputs

endmodule



Verilog 

// Example of a 5-state Moore FSM

module moore (data_in, data_out, reset, clock);

output data_out;

input [1:0] data_in;

input reset, clock;

reg data_out;

reg [2:0] pres_state, next_state;

parameter st0=3'd0, st1=3'd1, st2=3'd2, st3=3'd3, st4=3'd4;

//FSM register

always @(posedge clock or negedge reset)

begin: statereg

if(!reset)

pres_state = st0;

else

pres_state = next_state;

end // statereg

// FSM combinational block

always @(pres_state or data_in)

begin: fsm

case (pres_state)

st0:    case(data_in)

2'b00:       next_state=st0;

2'b01:       next_state=st4;

2'b10:       next_state=st1;

2'b11:       next_state=st2;

endcase

st1:    case(data_in)

2'b00:       next_state=st0;

2'b10:       next_state=st2;

default:     next_state=st1;

endcase

st2:    case(data_in)

2'b0x:       next_state=st1;

2'b1x:       next_state=st3;

endcase

st3:    case(data_in)

2'bx1:       next_state=st4;

default:     next_state=st3;

endcase

st4:    case(data_in)

2'b11:       next_state=st4;

default:     next_state=st0;

endcase

default:                     next_state=st0;

endcase

end // fsm

// Moore output definition using pres_state only

always @(pres_state) 

begin: outputs

case(pres_state)

st0:     data_out=1'b1;

st1:     data_out=1'b0;

st2:     data_out=1'b1;

st3:     data_out=1'b0;

st4:     data_out=1'b1;

default: data_out=1'b0;

endcase

end // outputs

endmodule // Moore


 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -