《verilog经典三段式状态机设计实例》由会员分享,可在线阅读,更多相关《verilog经典三段式状态机设计实例(7页珍藏版)》请在金锄头文库上搜索。
1、Moore型verilog源代码:FSM实现10010串的检测Moore状态转移图modulemoorefsm(clk,rst,a,z);inputclk,rst;inputa;outputz;regz;reg3:0currentstate,nextstate;parameterS0=4b0000;parameterS1=4b0001;parameterS2=4b0010;parameterS3=4b0011;parameterS4=4b0100;parameterS5=4b0101;always(posedgeclkornegedgerst)beginif(!rst)currentstate
2、=S0;elsecurrentstate=nextstate;endalways(currentstateoraorrst)beginif(!rst)nextstate=S0;elsecase(currentstate)S0:nextstate=(a=1)?S1:S0;S1:nextstate=(a=0)?S2:S1;S2:nextstate=(a=0)?S3:S1;S3:nextstate=(a=1)?S4:S0;S4:nextstate=(a=0)?S5:S1;S5:nextstate=(a=0)?S3:S1;default:nextstate=S0;endcaseendalways(rs
3、torcurrentstate)beginif(!rst)z=0;elsecase(currentstate)S0:z=0;S1:z=0;S2:z=0;S3:z=0;S4:z=0;S5:z=1;default:z=0;endcaseendendmodulemoorefsm测试模块testbenchmoduletb_fsm;regclk,rst;rega;wirez;moorefsmfsm(.clk(clk),.rst(rst),.a(a),.z(z);initialbeginclk=0;rst=1;#5rst=0;#3rst=1;#20a=1;#100a=1;#100a=0;#100a=0;#
4、100a=1;#100a=0;#100a=0;#100a=1;#100a=0;#100a=0;#100a=0;#100a=0;#100a=1;#100a=0;#100a=0;#100a=1;#100a=0;#100a=1;#100a=0;endalways#50elk=clk;endmoduleMealy型verilog源代码:FSM实现10010串的检测modulemealyfsm(clk,rst,a,z);Mealy状态转移图inputclk;inputrst;inputa;outputz;regz;reg3:0temp_z;reg3:0currentstate,nextstate;par
5、ameterS0=4b0000;parameterS1=4b0001;parameterS2=4b0010;parameterS3=4b0011;parameterS4=4b0100;always(posedgeclkornegedgerst)if(!rst)currentstate=S0;elsecurrentstate=nextstate;always(currentstateoraorrst)if(!rst)nextstate=S0;elsecase(currentstate)S0:nextstate=(a=1)?S1:S0;S1:nextstate=(a=0)?S2:S1;S2:nex
6、tstate=(a=0)?S3:S1;S3:nextstate=(a=1)?S4:S0;S4:nextstate=(a=0)?S2:S0;default:nextstate=S0;endcasealways(rstorcurrentstateora)if(!rst)temp_z=0;elsecase(currentstate)S0:temp_z=0;S1:temp_z=0;S2:temp_z=0;S3:temp_z=0;S4:temp_z=(a=0)?1:0;default:temp_z=0;endcasealways(posedgeclkornegedgerst)if(!rst)z=0;el
7、sebeginif(temp_z=1)&(nextstate=S2)z=1;elsez=0;endendmodulemealyfsm测试模块testbenchmoduletb_fsm;regclk,rst;rega;wirez;mealyfsmfsm(.clk(clk),.rst(rst),.a(a),.z(z);initialbeginclk=0;rst=1;#5rst=0;#3rst=1;#20a=1;#100a=1;#100a=0;#100a=0;#100a=1;#100a=0;#100a=0;#100a=1;#100a=0;#100a=0;#100a=0;#100a=0;#100a=1;#100a=0;#100a=0;#100a=1;#100a=0;#100a=1;#100a=0;endalways#50clk=clk;endmodule