您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 6----状态机的结构与设计
本次课主要内容¾¾什么是有限状态机(什么是有限状态机(FSMFSM))¾¾FSMFSM的种类和不同点的种类和不同点¾¾设计举例设计举例常见公司数字IC设计招聘-题目1,画出可以检测10010串的状态图,并verilog实现之。(威盛)2,用FSM实现101101的序列检测模块。(南山之桥)3,a为输入端,b为输出端,如果a连续输入为1101则b输出为1,否则为0。例如a:0001100110110100100110b:0000000000100100000000请画出statemachine;请用RTL描述其statemachine。(华为)常见公司数字IC设计招聘-题目1,画出可以检测10010串的状态图,并verilog实现之。(威盛)常见公司数字IC设计招聘-题目4、描述一个交通信号灯的设计。(仕兰微电子)5、设计一个自动饮料售卖机,饮料10分钱,硬币有5分和10分两种,并考虑找零:(1)画出fsm(有限状态机);(2)用verilog编程,语法要符合fpga设计的要求;(3)设计工程中可使用的工具及设计大致过程。显式有限状态机•可以在过程块中用单一时钟边沿和case语句显式地描述FSM。•必须声明定义状态机的状态变量。•要改变当前状态,必须在时钟边沿改变状态变量的值。•给通常不会发生的条件指定缺省动作(default)是一个很好的描述方式。显式有限状态机两种表示方式•Moore状态机•Mealy状态机常见公司数字IC设计招聘-题目MOORE与MEALY状态机的特征。(南山之桥)Moore有限状态机建模•Moore有限状态机(FSM)的输出只依赖于状态而不依赖其输入信号。MooreMoore状态机状态机下一个状态下一个状态=F(=F(当前状态,输入信号当前状态,输入信号););输出信号输出信号=G(=G(当前状态当前状态));;下一状态的逻辑F输出逻辑G状态寄存器时钟信号clk时钟信号时钟信号clkclkclkclk输入输入输入输入输出输出输出当前状态当前状态当前状态激励信号激励信号激励信号图2.Moor状态机结构moduleMoore_FSM(A,clk,rst,Z);inputA,clk,rst;outputZ;regZ;parameterST0=2’b00,ST1=2’b01;parameterST2=2’b10,ST3=2’b11;reg[1:0]Moore_State;always@(negedgeclkornegedgerst)if(!rst)Moore_State=ST0;elsecase(Moore_State)ST0:beginZ=1;if(A)Moore_State=ST2;endST2:beginZ=0;if(!A)Moore_State=ST1;elseMoore_State=ST3;endST1:beginZ=0;if(A)Moore_State=ST3;endST3:beginZ=1;if(A)Moore_State=ST0;endendcaseendmoduleMoore状态机有很多种描述方法,上面这种描述方法同学们经常采用,书中也很常见,其特点:1,符合Moore状态机特点,输出Z跟输入信号无关,只跟处于哪个状态有关.2,时序逻辑中用阻塞赋值;3,case对象是Moore_State,语句内状态转移对象仍然是Moore_State.Leonardo综合波形如下:Mealy型有限状态机建模在Mealy型有限状态机中,输出不仅依赖状态而且依赖于它的输入。Mealy状态机下一个状态=F(当前状态,输入信号);输出信号=G(当前状态,输入信号);MealyMealy状态机状态机下一个状态下一个状态=F(=F(当前状态,输入信号当前状态,输入信号));;输出信号输出信号=G(=G(当前状态,输入信号当前状态,输入信号));;图.Mealy状态机结构下一状态的逻辑F输出逻辑G状态寄存器时钟信号clk时钟信号时钟信号clkclkclk输入输入输入输出输出输出当前状态当前状态当前状态激励信号激励信号激励信号根据状态转移表画出状态转移图moduleMealy_FSM(A,clk,rst,Z);inputA,clk,rst;outputZ;regZ;parameterST0=2’b00,ST1=2’b01;parameterST2=2’b10,ST3=2’b11;reg[1:0]Current_State,Next_State;always@(negedgeclkornegedgerst)if(!rst)Current_State=ST0;elseCurrent_State=Next_State;always@(Current_StateorA)case(Current_State)ST0:if(A)Next_State=ST3;elseNext_State=ST0;ST1:if(A)Next_State=ST0;elseNext_State=ST1;ST2:if(A)Next_State=ST1;elseNext_State=ST2;ST3:if(A)Next_State=ST1;elseNext_State=ST2;endcasealways@(Current_StateorA)case(Current_State)ST0:if(A)Z=1;elseZ=0;ST1:if(A)Z=0;elseZ=1;ST2:if(A)Z=1;elseZ=0;ST3:Z=0;endcaseendmoduleMealy状态机也有很多种表达方法,上面这种建模方法IC设计公司推荐使用,书中没有,其特点为:1,符合Mealy状态机特点,输出Z跟状态,输入信号都有关系.2,同时采用时序逻辑和组合逻辑:时序逻辑把next_state辅状态寄存器赋给current_state主状态寄存器;组合逻辑case判断的对象是current_state主状态寄存器,逻辑描述中进行状态转移的是next_state辅状态寄存器.3,时序逻辑采用非阻塞赋值,组合逻辑采用阻塞赋值.4,输出采用时序逻辑还是组合逻辑根据情况而异.Leonardo综合波形如下:简单的状态机设计举例简单的状态机设计举例简单的状态机设计举例¾状态转移图表示¾RTL级可综合的Verilog模块表示¾状态转移图表示¾RTL级可综合的Verilog模块表示序列检测器用FSM实现10010串的检测,画出其状态图,并用verilog语言实现.Moore状态转移图Moore状态机的Verilog实现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;always@(posedgeclkornegedgerst)if(!rst)currentstate=S0;elsecurrentstate=nextstate;always@(currentstateora)case(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;endcasealways@(rstorcurrentstateora)if(!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;endcaseendmoduleMealy状态转移图Mealy状态机的Verilog实现moduleMealyfsm(clk,rst,a,z);inputclk,rst;inputa;outputz;regz;regtemp_z;reg[3:0]currentstate,nextstate;parameterS0=4'b0000;parameterS1=4'b0001;parameterS2=4'b0010;parameterS3=4'b0011;parameterS4=4'b0100;always@(posedgeclkornegedgerst)if(!rst)currentstate=S0;elsecurrentstate=nextstate;always@(currentstateora)case(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:S1;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;elsebeginif((temp_z==1)&&(nextstate==S2))z=1;elsez=0;endendmodule测试模块testbenchmoduletb_fsm;regclk,rst;rega;wirez;//Moorefsmfsm(.clk(clk),.rst(rst),.a(a),.z(z));Mealyfsmfsm(.clk(clk),.rst(rst),.a(a),.z(z));initialbeginrst=1;clk=0;#5rst=0;#3rst=1;//100100100010011//1100101110010000#20a=1;#100a=0;#100a=0;#100a=1;#100a=0;#100a=0;#100a=1;#100a=0;…………….endalways#50clk=~clk;endmoduleMoore状态机仿真波形如下(请同学分析波形,为什么nextstate和currentstate的波形不是一样的?)Moore状态机仿真波形如下Moore状态机电路原理图Mealy状态机仿真波形如下(为什么nextstate出现了0001这个状态,且为什么该值没被赋给currentstate?)Mealy状态机仿真波形如下Mealy状态机电路原理图
本文标题:6----状态机的结构与设计
链接地址:https://www.777doc.com/doc-5716323 .html