有限状态机介绍_第1页
有限状态机介绍_第2页
有限状态机介绍_第3页
有限状态机介绍_第4页
有限状态机介绍_第5页
已阅读5页,还剩46页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

有限状态机为什么要设计有限状态机应用的需要,复杂系统的需要如果我们能设计这样一个电路能记住自己目前所处的状态状态的变化只可能在同一时钟的跳变沿时刻发生,而不可能发生在任意时刻在时钟跳变沿时刻,如输入条件满足则进入下一状态,并记住自己目录所处的状态。否则仍保留原来的状态。在进入不同的状态时刻,对系统的开关阵列做开启或关闭操作。1234有限状态机什么是有限状态机FSM:FiniteStateMachine应用市场上的电子产品进入非正常状态/(不需要考虑的状态)的可能很多,不可能一一去列举于是采用以“不变应万变”的方式,只考虑需要的状态,不需要的状态不管。需要考虑的状态一一列举出来(有限性Finite),不需要考虑的状态都统一当异常处理(default)123有限状态机有限状态机三要素FSM:FiniteStateMachine状态(当前状态,下一个状态)输入信号(事件)输出控制信号(相应操作)123有限状态机什么是有限状态机有限状态机是由寄存器组和组合逻辑构成的硬件时序电路

其状态(即由寄存器组1和0的组合状态所构成的有限个状态)只能在同一时钟跳变沿的情况下,才能从一状态转向另一个状态。

究竟转向哪一个状态不但取决于各个输入值,还取决于当前状态状态机可产生在时钟跳变沿时刻进行开关的复杂的控制逻辑,是数字逻辑的控制核心。123解释说明有限状态机显式有限状态机两种表示方法有限状态机Moory有限状态机建模Moore有限状态机(FSM)的输出只依赖于状态而不依赖于其输入信号下一个状态=F(当前状态,输入信号)输出信号=G(当前状态)输入下一个状态的逻辑F状态寄存器Clk输入输出逻辑G激励信号当前状态输出时钟信号moore状态机的结构有限状态机Mealy有限状态机建模Mealy有限状态机的输出不仅依赖状态而且依赖于它的输入下一个状态=F(当前状态,输入信号)输出信号=G(当前状态,输入信号)下一个状态的逻辑F状态寄存器Clk输入输出逻辑G激励信号当前状态输出时钟信号mealy状态机的结构输入有限状态机两种有限状态机的总结狀態解碼邏輯:負責狀態機解碼邏輯,是組合電路。F(當前狀態,輸入信號)

狀態暫存器:儲存目前的狀態機,是循序電路。

輸出邏輯:負責輸出邏輯,是組合電路。G(當前狀態)[moore機]或者G(當前狀態,輸入信號)[mealy機]

輸出暫存器:對輸出結果再做一次寄存,避免glitch產生,有利於時序收斂,也能保證輸入delay是一個可預測的量。有限状态机应用举例—序列检测器用FSM实现10010串的检测,画出其状态图,并用verilog语言实现逻辑功能分析有限状态机时钟12345678910111213141516171819

a110010010000100101…

z000001001000000010…有限状态机用FSM实现10010串的检测,画出其状态图,并用verilog语言实现Moore状态转移图有限状态机modulemoorefsm(clk,rst,a,z);inputclk,rst;inputa;outputz;regz;reg[3:0]currentstate,nextstate;parameterS0=4'b0000;parameterS1=4'b0001;parameterS2=4'b0010;parameterS3=4'b0011;parameterS4=4'b0100;parameterS5=4'b0101;有限状态机应用举例—序列检测器Moore型verilog源代码有限状态机有限状态机应用举例—序列检测器Moore型verilog源代码//*****************************************always@(posedgeclkornegedgerst)beginif(!rst)currentstate<=S0;elsecurrentstate<=nextstate;end//*****************************************有限状态机有限状态机应用举例—序列检测器Moore型verilog源代码always@(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;endcaseend有限状态机有限状态机应用举例—序列检测器Moore型verilog源代码always@(rstorcurrentstate)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;endcaseendendmodule有限状态机有限状态机应用举例—序列检测器Mealy状态转移图有限状态机有限状态机应用举例—序列检测器Mealy型verilog源代码modulemealyfsm(clk,rst,a,z);inputclk;inputrst;inputa;outputz;regz;reg[3:0]temp_z;reg[3:0]currentstate,nextstate;parameterS0=4'b0000;parameterS1=4'b0001;parameterS2=4'b0010;parameterS3=4'b0011;parameterS4=4'b0100;有限状态机有限状态机应用举例—序列检测器Moore型verilog源代码//******************************************always@(posedgeclkornegedgerst)if(!rst)currentstate<=S0;elsecurrentstate<=nextstate;//******************************************有限状态机有限状态机应用举例—序列检测器Moore型verilog源代码always@(currentstateoraorrst)if(!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)?S2:S0;default:nextstate=S0;endcase有限状态机有限状态机应用举例—序列检测器Moore型verilog源代码always@(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;endcase有限状态机有限状态机应用举例—序列检测器Moore型verilog源代码always@(posedgeclkornegedgerst)if(!rst)z<=0;elsebeginif((temp_z==1)&&(nextstate==S2))z<=1;elsez<=0;endendmodule有限状态机moorefsm测试模块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;#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有限状态机mealyfsm测试模块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有限状态机Moorefsm的Modelsim仿真波形图有限状态机Mealyfsm的Modelsim仿真波形图VerilogHDL状态机的状态分配有限状态机FSM可综合编写风格VerilogHDL描述状态机必须由parameter分配好状态。1组合逻辑和时序逻辑要分开用不同的过程块2组合逻辑包括状态译码和输出,时序逻辑则是状态寄存器的切换;必须包括对所有状态都处理,不能出现无法处理的状态,使状态机失控。

Mealy机的输出与输入有关,而Moore机的输出与输入无关。3有限状态机IC设计公司对FSM可综合编写风格的规定KeepFSMlogicintwoseparatedsectionsofamodule,oneforthesequentiallogic,andtheotherforthecombinatoriallogic.

Eachstateisdefinedwithparameterincapital.12有限状态机IC设计公司对FSM可综合编写风格的规定Forexample/************NEXTSTATEDECODING***************/always@(stateoraddror…)begincase(state)IDLE:next_state=state2;STATE2:next_state=state3;…default:next_state=IDLE;endcaseend有限状态机IC设计公司对FSM可综合编写风格的规定/***********STATEASSIGNMENT*************/always@(posedgeclkornegedgen_Reset)beginif(~n_Reset)state<=#`DLYIDLE;elsestate<=#`DLYnext_state;endendmodule有限状态机练习-设计饮料自动投币售卖机的核心控制电路简化考虑,假设饮料只有一种价格为2.5元。硬币有0.5元和1.0元两种,考虑找零,用Verilog描述其控制电路,并用FPGA实现要求有限状态机练习-设计饮料自动投币售卖机的核心控制电路设计步骤分解分析输入输出端口信号;状态转移图;根据状态转移图进行Verilog语言描述;测试代码编写,仿真;FPGA实现。12345有限状态机练习-设计饮料自动投币售卖机的核心控制电路分析输入输出信号输入信号:

clk,rst;输入信号:操作开始:op_start;

//定义1开始操作输入信号:投币币值:coin_val;//定义2’b01表示0.5元;2’b10表示1元输入信号:取消操作指示:cancel_flag;//定义1为取消操作输出信号:机器是否占用:hold_ind;//定义0为不占用,可以使用输出信号:取饮料信号:drinktk_ind;//定义1为取饮料输出信号:找零与退币标志信号:charge_ind;//定义1为找零输出信号:找零与退币币值:

charge_val;//定义3’b001表示找0.5元;3’b010表示找1元//3’b011表示找1.5元;3’b100表示找2.0元;有限状态机练习-设计饮料自动投币售卖机的核心控制电路状态确定S0:初始态;S1:已投币0.5元S2:已投币1.0元S3:已投币1.5元S4:已投币2.0元;S5:已投币2.5元S6:已投币3.0元有限状态机练习-设计饮料自动投币售卖机的核心控制电路状态说明:S0:初始态;S1:已投币0.5元;S2:已投币1.0元;S3:已投币1.5元;S4:已投币2.0元;S5:已投币2.5元;S6:已投币3.0元;状态转移图有限状态机练习-设计饮料自动投币售卖机的核心控制电路说明:1.在S0状态下,如果检测到op_start=1,开始检测是否有投币,如果有,一次新的售货操作开始;2.在状态S1/S2/S3/S4下,如果检测到cancel_flag=1,则取消操作,状态回S0,并退回相应的币值;3.在状态S5下,卖出饮料不找零;在状态S6下,卖出饮料并找零;4.在状态S5和S6操作完后,都返回状态S0,等待下一轮新的操作开始;5.只有在S0状态下,hold_ind=0,可以发起新一轮操作,其它状态下都为1有限状态机练习-设计饮料自动投币售卖机的核心控制电路modulesoftdrinkFSM(clk,rst,op_start,cancel_flag,coin_val,hold_ind,charge_ind,drinktk_ind,charge_val);inputclk,rst;inputop_start,cancel_flag;input[1:0]coin_val;outputhold_ind,charge_ind,drinktk_ind;output[2:0]charge_val;reghold_ind,charge_ind,drinktk_ind;reg[2:0]charge_val;reg[2:0]currentstate,nextstate;parameterS0=3'b000;parameterS1=3'b001;parameterS2=3'b010;parameterS3=3'b011;parameterS4=3'b100;parameterS5=3'b101;parameterS6=3'b110;源代码有限状态机练习-设计饮料自动投币售卖机的核心控制电路always@(posedgeclkorposedgerst)if(rst)currentstate<=S0;elsecurrentstate<=nextstate;always@(currentstateorrstorop_startorcancel_flagorcoin_val)if(rst)nextstate=S0;elsecase(currentstate)S0:if(op_start)if(coin_val==2'b01)nextstate=S1;elseif(coin_val==2'b10)nextstate=S2;源代码有限状态机练习-设计饮料自动投币售卖机的核心控制电路S1:if(cancel_flag)nextstate=S0;elseif(coin_val==2'b01)nextstate=S2;elseif(coin_val==2'b10)nextstate=S3;S2:if(cancel_flag)nextstate=S0;elseif(coin_val==2'b01)nextstate=S3;elseif(coin_val==2'b10)nextstate=S4;S3:if(cancel_flag)nextstate=S0;elseif(coin_val==2'b01)nextstate=S4;elseif(coin_val==2'b10)nextstate=S5;源代码有限状态机练习-设计饮料自动投币售卖机的核心控制电路S4:if(cancel_flag)nextstate=S0;elseif(coin_val==2'b01)nextstate=S5;elseif(coin_val==2'b10)nextstate=S6;S5:nextstate=S0;S6:nextstate=S0;default:nextstate=S0;endcase源代码有限状态机练习-设计饮料自动投币售卖机的核心控制电路always@(currentstate)if(currentstate==S0)hold_ind=1'b0;elsehold_ind=1'b1;always@(currentstate)if((currentstate==S5)||(currentstate==S6))drinktk_ind=1'b1;elsedrinktk_ind=1'b0;always@(currentstateorcancel_flag)if(currentstate==S0)charge_ind=1'b0;elseif(currentstate==S6)charge_ind=1'b1;elseif(cancel_flag)charge_ind=1'b1;elsecharge_ind=1'b0;源代码有限状态机练习-设计饮料自动投币售卖机的核心控制电路always@(currentstateorcancel_flag)if(currentstate==S0)charge_val=3'b000elseif(currentstate==S6)charge_val=3'b001elseif(cancel_flag)begincase(currentstate)S1:charge_val=3'b001;S2:charge_val=3'b010;S3:charge_val=3'b011;S4:charge_val=3'b100;default:charge_val=3'b000;endcaseendelsecharge_val=3'b000;endmodule源代码有限状态机练习-设计饮料自动投币售卖机的核心控制电路modulesoftdrink_testbench;regrst,clk;regop_start;regcancel_flag;reg[1:0]coin_val;wirehold_ind;wirecharge_ind;wiredrinktk_ind;wire[2:0]charge_val;initialclk=0;always#500clk=~clk;

testbench有限状态机练习-设计饮料自动投币售卖机的核心控制电路initialbeginrst=0;op_start=0;cancel_flag=0;coin_val=2'b00;#25rst=1;#25rst=0;//第一次:依次投入一元、一元、一元的硬币,看结果如何?#50op_start=1;#300coin_val=2'b10;#1000coin_val=2'b10;#1000coin_val=2'b10;#1000op_start=0;testbench有限状态机练习-设计饮料自动投币售卖机的核心控制电路//第二次:依次投入0.5元、一元、一元的硬币,看结果又如何?#2000op_start=1;coin_val=2'b01;#1000coin_val=2'b10;#1000coin_val=2'b10;#1000op_start=0;//第三次:依次投入0.5元、一元的硬币,然后取消操作,看结果如何?#2000op_start=1;coin_val=2'b01;#1000coin_val=2'b10;#1000cancel_flag=1'b1;op_start=0;#1000cancel_flag=0;testbench有限状态机练习-设计饮料自动投币售卖机的核心控制电路//第四次:依次投入0.5元、0.5元、0.5元、0.5元、一元的硬币,看结果如何?#2000op_start=1;coin_val=2'b01;#1000coin_val=2'b01;#1000coin_val=2'b01;#1000coin_val=2'b01;#1000coin_val=2'b10;#1000op_start=0;#1000000$stop;end//endinitialsoftdrinkFSMu0(rst,clk,op_start,coin_val,cancel_flag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论