Verilog状态机设计技术PPT演示课件_第1页
Verilog状态机设计技术PPT演示课件_第2页
Verilog状态机设计技术PPT演示课件_第3页
Verilog状态机设计技术PPT演示课件_第4页
Verilog状态机设计技术PPT演示课件_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

EDA技术与应用,第10章Verilog状态机设计技术,1,EDA技术与应用,10.1Verilog状态机的一般形式,广义而论,只要涉及触发器的电路,无论电路大小,都能归结为状态机。有限状态机用来实现一个数字电路的控制部分。与CPU的功能类似,综合了时序逻辑和组合逻辑电路。CPU是通过操作指令和硬件操作单元来实现控制功能,而有限状态机是通过状态转移来实现控制功能。综合器能从不同表述形态的HDL代码中轻易萃取出状态机,并加以多侧面、多目标和多种形式的优化。,2,EDA技术与应用,10.1.1状态机的特点与优势,面对同一个设计项目的不同形式的逻辑设计方案中,利用有限状态机的设计方案来描述和实现将可能是最佳选择。,有限状态机的优越性:(1)高效的顺序控制模型(2)容易利用现成的EDA工具进行优化设计(3)性能稳定(4)高速性能(5)高可靠性能,3,EDA技术与应用,10.1.2状态机的一般结构,用Verilog设计的状态机根据不同的分类标准可以分为多种不同形式:从状态机的信号输出方式上分:Mealy型和Moore型状态机从状态机的结构描述上分:单过程状态机和多过程状态机从状态表达方式上分:符号化状态机和确定状态编码的状态机从状态机编码方式上分:顺序编码、一位热编码或其他编码方式状态机,最一般和最常用的状态机结构中通常包含了说明部分、主控时序过程、主控组合过程、辅助过程等几个部分,4,EDA技术与应用,说明部分中包含状态转换变量的定义和所有可能状态的说明,必要时还要确定每一状态的编码形式,最好是纯抽象的符号化状态机,即所定义的状态序列和状态转换变量都不涉及具体的数值、编码,甚至数据类型或变量类型。,1、状态机说明部分,parameter2:0s0=0,s1=1,s2=2,s3=3,s4=4;reg2:0current_state,next_state;,状态元素s0、s1等用关键词parameter来定义,各状态元素所取得数值或编码必须写出具体值。parameter旁的位宽说明可写可不写current_state是现态变量和next_state是次态变量,5,EDA技术与应用,2005版本的SystemVerilog,1、状态机说明部分,typedefenums0,s1,s2,s3,s4type_user;type_usercurrent_state,next_state;,typedef是用户数据类型自定义语句关键词enum是定义枚举类型关键词type_user是用户定义状态元素s0、s1、s2、s3、s4为type_user类型的标识符第二句将状态变量current_state、next_state定义为type_user类型,6,EDA技术与应用,2、主控时序过程,主控时序过程指负责状态机运转和在时钟驱动下负责状态转换的过程。状态机是随外部时钟信号,以同步时序方式工作的,状态机中必须包含一个对工作时钟敏感的过程,状态机向下一状态转换的实现仅取决于时钟信号的到来。当时钟的有效跳变到来时,时序过程只是机械地将代表次态的信号next_state中的内容送入现态的信号current_state中,而信号next_state中的内容完全由其他过程根据实际情况来决定。此时序过程中也可放置一些同步或异步清0或置位方面的控制信号。,7,EDA技术与应用,3、主控组合过程,主控组合过程根据当前状态和外部的信号发出控制信号,同时确定下一状态的走向。,在时钟的作用下,REG时序过程将次态信号的内容next_state传递给现态信号current_stateCOM组合过程通过信号current_state中的状态值,进入相应的状态;在此状态中根据外部的信号(如state_inputs)向内或向外发出控制信号(如com_outputs);同时根据外部信号(如state_inputs)向次态信号next_state中赋相应的状态值,确定下一状态的走向;此状态值通过next_state传给REG时序过程,直到下一个时钟脉冲的到来。,8,EDA技术与应用,4、辅助过程,辅助过程用于配合状态机工作的组合过程或时序过程。例如为了完成某种算法的过程,或为了存储数据的存储过程,或用于配合状态机工作的其他时序过程等。,例10-1,moduleFSM_EXP(clk,reset,state_inputs,comb_outputs);inputclk;/状态机工作时钟inputreset;/状态机复位控制input0:1state_inputs;/来自外部的状态机控制信号output3:0comb_outputs;/状态机对外部发出的控制信号输出reg3:0comb_outputs;parameters0=0,s1=1,s2=2,s3=3,s4=4;/定义状态参数reg4:0c_st,next_state;/定义现态和次态的状态变量always(posedgeclkornegedgereset)begin/主控时序过程if(!reset)c_st=s0;/复位有效时,下一状态进入初态s0elsec_st=next_state;end,9,EDA技术与应用,例10-1-续,always(c_storstate_inputs)begin/主控组合过程case(c_st)/为了在仿真波形中容易看清,将current_state简写为c_sts0:begincomb_outputs=5;/进入状态s0时,输出控制码5if(state_inputs=2b00)next_state=s0;/条件满足,回初态s0elsenext_state=s1;end/条件不满足,到下一状态s1s1:begincomb_outputs=8;/进入状态s1时,输出控制码8if(state_inputs=2b01)next_state=s1;elsenext_state=s2;ends2:begincomb_outputs=12;if(state_inputs=2b10)next_state=s0;elsenext_state=s3;ends3:begincomb_outputs=14;if(state_inputs=2b11)next_state=s3;elsenext_state=s4;ends4:begincomb_outputs=9;next_state=s0;enddefault:next_state=s0;/现态若未出现以上各态,返回初态s0endcaseendendmodule,10,EDA技术与应用,状态机的状态转换图,状态机的工作时序,11,EDA技术与应用,10.1.3初始控制与表述,Verilog状态机的相关设置控制:,(1)打开“状态机萃取”开关:AssignmentsSettings,在category栏,选择Analysisinput7:0D;/来自0809转换好的8位数据inputCLK,RST;/状态机工作时钟和系统复位控制inputEOC;/转换状态指示,低电平表示正在转换outputALE;/8个模拟信号通道地址锁存信号outputSTART,OE;/转换启动信号和数据输出三态控制信号outputADDA,LOCK_T;/信号通道控制信号和锁存测试信号output7:0Q;regALE,START,OE;parameters0=0,s1=1,s2=2,s3=3,s4=4;/定义各状态子类型reg4:0cs,next_state;/为了便于仿真显示,现态名简写为csreg7:0REGL;regLOCK;/转换后数据输出锁存时钟信号always(csorEOC)begin/主控组合过程,规定各状态转换方式case(cs)s0:beginALE=0;START=0;OE=0;LOCK=0;next_state=s1;end/0809初始化s1:beginALE=1;START=1;OE=0;LOCK=0;next_state=s2;end/启动采样信号START,17,EDA技术与应用,例10-2-续:ADC0809采样控制,s2:beginALE=0;START=0;OE=0;LOCK=0;if(EOC=1b1)next_state=s3;/EOC=0表明转换结束elsenext_state=s2;end/转换未结束,继续等待s3:beginALE=0;START=0;OE=1;LOCK=0;/开启OE,打开AD数据口next_state=s4;end/下一状态无条件转向s4s4:beginALE=0;START=0;OE=1;LOCK=1;/开启数据锁存信号next_state=s0;enddefault:beginALE=0;START=0;OE=0;LOCK=0;next_state=s0;endendcaseendalways(posedgeCLKorposedgeRST)begin/时序过程if(RST)cs=s0;elsecs=next_state;endalways(posedgeLOCK)if(LOCK)REGL=D;/在LOCK上升沿将转换好的数据锁入assignADDA=0;assignQ=REGL;/选择模拟信号进入通道IN0assignLOCK_T=LOCK;/将测试信号输出endmodule,18,EDA技术与应用,采样状态机结构框图,程序中包含三个过程结构:时序过程REG:在CLK的驱动下,不断将next_state中的内容(状态元素)赋给现态cs,并由此信号将状态变量传输给COM组合过程。组合过程COM:(1)状态译码功能。根据从现态信号cs中获得的状态变量,以及来自0809的状态线信号EOC,决定下一状态的转移方向,即次态的状态变量。(2)采样控制功能。根据cs中的状态变量确定对0809的控制信号ALE、START、OE等输出相应控制信号,当采样结束后还要通过LOCK向锁存器过程LATCH发出锁存信号。锁存器辅助过程LATCH:将由0809的D7.0数据输出口输出的8位已转换好的数据锁存起来。,19,EDA技术与应用,ADC0809采样状态机工作时序,状态s0:复位信号后即进入状态s0。状态s1:第二个时钟上升沿后,状态机进入状态s1(即cs=s1),由START、ALE发出启动采样和地址选通的控制信号。状态s2:EOC由高电平变为低电平,0809的8位数据输出端呈现高阻态“ZZ”。等待CLK数个时钟周期后,EOC变为高电平,表示转换结束。状态s3:在此状态的输出允许OE被设置成高电平。此时8089的数据输出端D7.0即输出已经转换好的数据5EH。状态s4:LOCK_T发出一个脉冲,其上升沿立即将D端口的5E锁入Q和REGL中。,20,EDA技术与应用,例10-3:修改后的ADC0809采样控制,/将组合过程COM拆分为两个部分always(csorEOC)begin/状态译码和状态转换case(cs)s0:next_state=s1;s1:next_state=s2;s2:if(EOC=1b1)next_state=s3;elsenext_state=s2;s3:next_state=s4;s4:next_state=s0;default:next_state=s0;endcaseendalways(csorEOC)begin/对外控制信号输出case(cs)s0:beginALE=0;START=0;OE=0;LOCK=0;ends1:beginALE=1;START=1;OE=0;LOCK=0;ends2:beginALE=0;START=0;OE=0;LOCK=0;ends3:beginALE=0;START=0;OE=1;LOCK=0;ends4:beginALE=0;START=0;OE=1;LOCK=1;enddefault:beginALE=0;START=0;OE=0;LOCK=0;endendcaseend,21,EDA技术与应用,10.2.2序列检测器及其状态机设计,序列检测器用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次正确码及正确序列,直到连续的检测中所收到的每一位码都与预置数的对应码相同,任何一位不相等都将回到初始状态重新开始检测。,22,EDA技术与应用,例10-4:8位序列数11010011的序列检测器,moduleSCHK(inputCLK,DIN,RST,outputSOUT);parameters0=40,s1=41,s2=42,s3=43,s4=44,s5=45,s6=46,s7=47,s8=48;/设定9个状态参数reg8:0ST,NST;always(posedgeCLKorposedgeRST)beginif(RST)ST=s0;elseST=NST;endalways(STorDIN)begin/11010011串行输入,高位在前case(ST)s0:if(DIN=1b1)NST=s1;elseNST=s0;s1:if(DIN=1b1)NST=s2;elseNST=s0;s2:if(DIN=1b0)NST=s3;elseNST=s0;s3:if(DIN=1b1)NST=s4;elseNST=s0;s4:if(DIN=1b0)NST=s5;elseNST=s0;s5:if(DIN=1b0)NST=s6;elseNST=s0;s6:if(DIN=1b1)NST=s7;elseNST=s0;s7:if(DIN=1b1)NST=s8;elseNST=s0;s8:if(DIN=1b0)NST=s3;elseNST=s0;default:NST=s0;endcaseendassignSOUT=(ST=s8);endmodule,23,EDA技术与应用,10.3Mealy型状态机设计,Mealy型状态机与Moore型状态机相比,输出变化要领先一个周期,即一旦输入信号或状态发生变化,输出信号即刻发生变化。Mealy机与Moore机在设计上基本相同,只是Mealy机的组合过程结构中的输出信号是当前状态和当前输入的函数。Mealy机将时序过程与组合过程混合,在同一个过程中决定主控状态译码和主控时序,所以不需要用次态来传递状态。,24,EDA技术与应用,例10-5:双过程Mealy机,moduleMEALY1(inputCLK,DIN1,DIN2,RST,outputreg4:0Q);reg4:0PST;parameterst0=0,st1=1,st2=2,st3=3,st4=4;always(posedgeCLKorposedgeRST)begin:REGif(RST)PST=st0;elsebegincase(PST)st0:if(DIN1=1b1)PST=st1;elsePST=st0;st1:if(DIN1=1b1)PST=st2;elsePST=st1;st2:if(DIN1=1b1)PST=st3;elsePST=st2;st3:if(DIN1=1b1)PST=st4;elsePST=st3;st4:if(DIN1=1b0)PST=st0;elsePST=st4;default:PST=st0;endcaseendendAlways(PSTofDIN2)begin:COM/输出控制信号的过程case(PST)st0:if(DIN2=1b1)Q=5H10;elseQ=5H0A;st1:if(DIN2=1b0)Q=5H17;elseQ=5H14;st2:if(DIN2=1b1)Q=5H15;elseQ=5H13;st3:if(DIN2=1b0)Q=5H1B;elseQ=5H09;st4:if(DIN2=1b1)Q=5H1D;elseQ=5H0D;default:Q=5b00000;endcaseendendmodule,25,EDA技术与应用,过程REG是时序与组合混合型过程,将状态机的主控时序电路和主控状态译码电路同时用一个过程来表达。过程COM负责根据状态和输入信号给出不同的对外控制信号输出。,双过程Mealy机状态图,26,EDA技术与应用,双过程Mealy机仿真波形,PST是现态转换情况,DIN1控制各状态的转换方式,DIN2控制对外控制信号码的输出:当复位后,且DIN1=0时,一直处于st0状态,若此时DIN2=0,输出码0AH;当DIN1都为1时,每一个时钟上升沿后,都转入下一状态,直到状态s4,同时根据每一个状态下的DIN2的值输出相应设定的控制码,一直到DIN1=0才回到初始状态s0。输出信号中存在毛刺,为了排除毛刺,可通过选择可能的优化设置,也可将输出通过寄存器锁存,滤除毛刺。,27,EDA技术与应用,例10-6:单过程Mealy机,moduleMEALY2(inputCLK,DIN1,DIN2,RST,outputreg4:0Q);reg4:0PST;parameterst0=0,st1=1,st2=2,st3=3,st4=4;always(posedgeCLKorposedgeRST)begin:REGif(RST)PST=st0;elsebegincase(PST)st0:beginif(DIN2=1b1)Q=5H10;elseQ=5H0A;if(DIN1=1b1)PST=st1;elsePST=st0;endst1:beginif(DIN2=1b0)Q=5H17;elseQ=5H14;if(DIN1=1b1)PST=st2;elsePST=st1;endst2:beginif(DIN2=1b1)Q=5H15;elseQ=5H13;if(DIN1=1b1)PST=st3;elsePST=st2;endst3:beginif(DIN2=1b0)Q=5H1B;elseQ=5H09;if(DIN1=1b1)PST=st4;elsePST=st3;endst4:beginif(DIN2=1b1)Q=5H1D;elseQ=5H0D;if(DIN1=1b0)PST=st0;elsePST=st4;default:beginPST=st0;Q=5b00000;endendcaseendendendmodule,28,EDA技术与应用,单过程Mealy机仿真波形,单过程Mealy机状态图(与双过程相同),29,EDA技术与应用,例10-7:单过程序列检测器Mealy机,moduleSCHK(inputCLK,DIN,RST,outputSOUT);parameters0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8;reg8:0ST;always(posedgeCLK)beginSOUT=0;if(RST)ST=s0;elsebegincase(ST)s0:if(DIN=1b1)ST=s1;elseST=s0;s1:if(DIN=1b1)ST=s2;elseST=s0;s2:if(DIN=1b0)ST=s3;elseST=s0;s3:if(DIN=1b1)ST=s4;elseST=s0;s4:if(DIN=1b0)ST=s5;elseST=s0;s5:if(DIN=1b0)ST=s6;elseST=s0;s6:if(DIN=1b1)ST=s7;elseST=s0;s7:if(DIN=1b1)ST=s8;elseST=s0;s8:beginSOUT=1;if(DIN=1b0)ST=s3;elseST=s0;enddefault:ST=s0;endcaseendendendmodule,30,EDA技术与应用,单过程序列检测器Mealy机仿真波形,与双过程序列检测器Moore机相比,单过程Mealy机的仿真波形在SOUT的输出延迟了一个时钟,这种延迟数据具有滤波作用。如果SOUT是一个多位复杂算法的组合逻辑输出,可能会有许多毛刺,引起不良后果,利用单过程Mealy机形式可以有所改善。,双过程序列检测器Moore机仿真波形,31,EDA技术与应用,10.4状态机图形编辑设计,(1)打开状态机图形编辑窗:在QuartusII的工程管理窗中点击FileNew,选择状态机文件StateMachineFile。(2)打开状态机图形编辑窗后,在QuartusII的工程管理窗中点击ToolsStateMachineWizard。,32,EDA技术与应用,(3)在StateMachineWizard最初的对话框中选择生成一个新状态机“Createanewstatemachinedesign”,然后在后面出来的框中分别选择复位信号控制方式和有效方式,如异步和高电平有效:Asynchronous和active-high。,33,EDA技术与应用,(4)在状态机编辑器对话框中设置状态元素、输入输出信号、状态转换条件等。,34,EDA技术与应用,(5)完成后存盘,文件后缀是.smf。可以从状态机图形编辑器上看到转换图形,还可以利用左侧的工具进行一些修改补充。将这个图形状态机存盘后,可以以此文件作为工程进行设计。,状态转换图形,35,EDA技术与应用,(6)也可以将这个图形状态机文件转变成HDL代码文件。选择ToolsGenerateHDLFile(HDL文件控制项),在打开的窗口中,选择需要转变的硬件描述语言项,包括VHDL、VerilogHDL或SystemVerilog。,36,EDA技术与应用,10.5不同编码类型状态机,用文字符号定义各状态元素的状态机称为符号化状态机,其状态元素的具体编码由Verilog状态机的综合器根据预设的约束来确定。可直接将各状态用具体的二进制数来定义,不使用文字符号,这种编码方式称为直接编码方式。,37,EDA技术与应用,10.5.1直接输出型编码,最典型的应用实例就是计数器。计数器本质上是一个主控时序过程与一个主控组合过程合二为一的状态机,计数输出就是各状态的状态码。,38,EDA技术与应用,状态码直接输出型状态机:将状态编码直接输出作为控制信号,即output=state,要求各状态的编码作特殊的安排,以适应控制对象的要求。,控制ADC0809采样状态机的状态编码表,39,EDA技术与应用,例10-8:ADC0809采样控制(状态码直接输出型),moduleADC0809(D,CLK,ECO,RST,ALE,START,OE,ADDA,Q,LOCK_T);input7:0D;inputCLK,RST,EOC;outputSTART,OE,ALE,ADDA,LOCK_T;output7:0Q;parameters0=5B00000,s1=5B11000,s2=5B00001,s3=5B00100,s4=5B00110;reg4:0cs,SOUT,next_state;reg7:0REGL;regLOCK;always(csorEOC)begincase(cs)s0:beginnext_state=s1;SOUT=s0;ends1:beginnext_state=s2;SOUT=s1;ends2:beginSOUT=s2;if(EOC=1b1)next_state=s3;elsenext_state=s2;ends3:beginSOUT=s3;next_state=s4;ends4:beginSOUT=s4;next_state=s0;enddefault:beginnext_state=s0;SOUT=s0;endendcaseendalways(posedgeCLKorposedgeRST)begin/时序过程if(RST)cs=s0;elsecs=next_state;endalways(posedgeSOUT1)/寄存器过程if(SOUT1)REGAL=D;assignADDA=0;assignQ=REGL;assignLOCK_T=SOUT1;assignOE=SOUT2;assignALE=SOUT3;assignSTART=SOUT4;endmodule,40,EDA技术与应用,状态机工作时序,状态码直接输出型状态机的优点:输出速度快,不大可能出现毛刺现象(因为控制输出信号直接来自构成状态编码的触发器)。状态码直接输出型状态机的缺点:程序可读性差,用于状态译码的组合逻辑资源比其他以相同触发器数量构成的状态要多,而且控制非法状态出现的容错技术要求较高。,41,EDA技术与应用,10.5.2用宏定义语句定义状态编码,例10-9:ADC0809采样控制(宏替换语句define定义状态元素),defines05B00000defines15B11000defines25B00001defines35B00100defines45B00110moduleADC0809(D,CLK,ECO,RST,ALE,START,OE,ADDA,Q,LOCK_T);input7:0D;inputCLK,RST,EOC;outputSTART,OE,ALE,ADDA,LOCK_T;output7:0Q;reg4:0cs,SOUT,next_state;reg7:0REGL;regLOCK;always(csorEOC)begincase(cs)s0:beginnext_state=s1;SOUT=s0;ends1:beginnext_state=s2;SOUT=s1;ends2:beginSOUT=s2;if(EOC=1b1)next_state=s3;elsenext_state=s2;ends3:beginSOUT=s3;next_state=s4;ends4:beginSOUT=s4;next_state=s0;enddefault:beginnext_state=s0;SOUT=s0;endendcaseend,42,EDA技术与应用,10.5.2用宏定义语句定义状态编码,例10-9-续:ADC0809采样控制(宏替换语句define定义状态元素),always(posedgeCLKorposedgeRST)begin/时序过程if(RST)cs=s0;elsecs=next_state;endalways(posedgeSOUT1)/寄存器过程if(SOUT1)REGAL=D;assignADDA=0;assignQ=REGL;assignLOCK_T=SOUT1;assignOE=SOUT2;assignALE=SOUT3;assignSTART=SOUT4;endmodule,用define或parameter来定义状态元素的编码的区别是:define定义可以针对整个设计全局,它定义的可以是全局符号常量,可以在各个不同的模块中通用,这时定义语句必须放在模块语句module外;也可以针对局部,放在module中。parameter定义在某个模块module中,只有局部特征。,43,EDA技术与应用,44,EDA技术与应用,10.5.3宏定义命令语句,宏定义命令语句define属于编译指示语句,不参与综合,只是在综合前做一些数据控制操作。通过define语句的定义,可以用简单的名称或称为宏名的标识符来替代一个复杂的名字,或字符串,或表达式等。,define宏名(标识符)宏内容(字符串),define属于编译预处理命令语句。在编译预处理时,把程序中在该定义以后的所有同名宏名或标识符的内容都换成定义中指定的宏内容。,definesA+B+C+DassignDOUT=s+E,assignDOUT=A+B+C+D+E,45,EDA技术与应用,10.5.3宏定义命令语句,采用宏定义的好处是,简化了程序的书写,便于程序修改。在define具体应用上还应注意(1)宏定义语句行末尾不加分号。(2)在程序中引用已定义的宏名时,必须在定义了宏名的标识符签名加上符号“”,以示该标识符是一个宏定义名字。,46,EDA技术与应用,10.5.4顺序编码,优点:这种编码方式最为简单,使用的触发器数量最少(6状态状态机只需3个触发器),剩余的非法状态也最少,容错技术最为简单。缺点:常常会占用状态转换译码组合逻辑较多的资源,特别是有的相邻状态或不相邻的状态转换时涉及多个触发器的同时状态转换,将耗用更长的转换时间,而且容易出现毛刺现象,这对于触发器资源丰富而组合逻辑资源相对珍贵的FPGA器件意义不大,也不合适。,47,EDA技术与应用,10.5.5一位热码编码,用n个触发器来实现具有n个状态的状态机。每一个状态都由其中一个触发器的状态表示,处于该状态时,对应的触发器为1,其余的触发器为0。使用了较多的触发器,但简化了状态译码逻辑,提高了状态转换速度,增强了状态机的工作稳定性,适合FPGA。因此一位热码编码方式是状态机最常用的编码方式。,48,EDA技术与应用,10.5.6状态编码设置,将需要的编码方式直接写在程序中,不需要EDA软件工具进行干预。所有Verilog状态机都属于用户自定义编码型的状态机。控制好综合器,使其不要干预程序的编码方式,设置为用户自定义编码方式“User-Encoded”。在确定编码方式前要打开“状态机萃取”开关。,1、用户自定义方式,49,EDA技术与应用,直接在Verilog程序中使用属性定义语句指示编译器按照要求选择编码方式。,2、用属性定义语句设置,例10-10:序列检测器(用属性定义语句),moduleSCHK(inputCLK,DIN,RST,outputregSOUT);parameters0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8;(*syn_encoding=“one-hot”*)reg8:0ST;always(posedgeCLK)begin,(*syn_encoding=“one-hot”*),“one-hot”是对编码的约束。在编译前要打开“状态机萃取”开关。,编码方式的属性表述:,50,EDA技术与应用,当选用默认型编码“default”时,计算机自动选择“one-hot”型编码。,例10-7不同编码方式的属性定义及资源耗用,51,EDA技术与应用,3、直接设置方法,在QuartusII中,选择AssignmentsSettings,在跳出的对话框中,选择Category栏中的Analysis(*synthesis,keep*)reg1:0CS;/为在波形图中了解CS的情况reg1:0NS;regW1,W2;parameterS0=1,S1=3,S2=2,S3=0;always(RSTorNS)/注意其状态编码形式,这将影响状态机功能beginif(RST)CS=S0;elseCS=NS;endalways(CS)beginif(CS=S0)beginW1=1b0;W2=1b0;endif(CS=S1)beginW1=1b1;W2=1b0;endif(CS=S2)beginW1=1b1;W2=1b1;endif(CS=S3)beginW1=1b0;W2=1b1;endendalways(CLK)begincase(CS)S0:if(CLK)NS=S1;elseNS=S0;S1:if(CLK)NS=S2;elseNS=S1;S2:if(CLK)NS=S3;elseNS=S2;S3:if(CLK)NS=S0;elseNS=S3;default:NS=S0;endcaseendendmodule,工作时序,输出W1在输入CLK的上升沿翻转,输出W2在输入CLK的下降沿翻转,54,EDA技术与应用,例10-12:,moduleASM_WAVE2(CLK1,CLK2,RST,W);inputCLK1,CLK2,RST;outputW;reg1:0NS;regW,Z;(*synthesis,keep*)reg1:0CS;/为在波形图中了解CS的情况parameterS0=1,S1=3,S2=2,S3=0;/注意其状态编码形式always(RSTorNS)beginif(RST)CS=S0;elseCS=NS;endalways(CSorW)begincase(CS)S0:if(W=1)Z=0;elseZ=1;S1:if(W=1)Z=0;elseZ=1;S2:if(W=1)Z=0;elseZ=1;endcaseendalways(CSorCLK1orCLK2)begincase(CS)S0:if(CLK1,CLK2=2b00)beginNS=S0;W=W;endelseif(CLK1,CLK2=2b01)NS=S1;elseif(CLK1,CLK2=2b10)NS=S2;elseif(CLK1,CLK2=2b11)NS=S3;elseNS=S0;,输入信号CLK1和CLK2,复位信号RST,输出信号W。当(CLK1,CLK2)=00时,W保持原值;当(CLK1,CLK2)=01时,W输出低电平;当(CLK1,CLK2)=10时,W输出高电平;当(CLK1,CLK2)=11时,W改变当前电平值;,工作时序,55,EDA技术与应用,例10-12-续:,S1:if(CLK1,CLK2=2b00)NS=S0;elseif(CLK1,CLK2=2b01)beginNS=S1;W=1b0;endelseif(CLK1,CLK2=2b10)NS=S2;elseif(CLK1,CLK2=2b11)NS=S3;elseNS=S0;S2:if(CLK1,CLK2=2b00)NS=S0;elseif(CLK1,CLK2=2b01)NS=S1;elseif(CLK1,CLK2=2b10)beginNS=S2;W=1b1;endelseif(CLK1,CLK2=2b11)NS=S3;elseNS=S0;S3:if(CLK1,CLK2=2b00)NS=S0;elseif(CLK1,CLK2=2b01)NS=S1;elseif(CLK1,CLK2=2b10)NS=S2;elseif(CLK1,CLK2=2b11)beginNS=S3;W=Z;endelseNS=S0;endcaseendendmodule,输入信号CLK1和CLK2,复位信号RST,输出信号W。当(CLK1,CLK2)=00时,W保持原值;当(CLK1,CLK2)=01时,W输出低电平;当(CLK1,CLK2)=10时,W输出高电平;当(CLK1,CLK2)=11时,W改变当前电平值;,56,EDA技术与应用,例10-13:,moduleASM3(inputCLK1,CLK2,RST,outputregW);(*synthesis,keep*)reg2:0CS;reg2:0NS;wireCLK;parameterS0=3b000,S1=3b001,S2=3b011,S3=3b010,S4=3b110,S5=3b111,S6=3b101,S7=3b100;/注意状态编码形式assignCLK=CLK1endendcaseendendmodule,输入信号CLK1和CLK2,输出信号W。CLK1总是和CLK2同时有效,且每隔两个CLK2的有效电平,当第三个有效电平出现时,立即输出W,且其维持有效的时间与CLK2的有效时间相同。,57,EDA技术与应用,10.7安全状态机设计,状态机设计中,无论使用枚举类型还是直接指定状态编码的程序中,特别是使用了一位热码编码方式后,不可避免出现大量剩余状态,即未被定义的编码组合。这些状态在状态机的正常运行中是不可能出现的,称为非法状态。在外界不确定的干扰下,或是随机上电的初始启动后,状态机都有可能进入不可预测的非法状态,后果是对外界出现短暂失控,或是完全无法摆脱非法状态而失去正常功能,除非使用复位控制信号Reset。但在无人控制时,无法获取复位信号。对于稳定性要求高的控制电路,状态机剩余状态的处理,即状态机系统容错技术的应用,是设计者必须慎重考虑的问题。剩余状态的处理会不同程度地耗用逻辑资源,这就要求设计者在选用何种状态机结构、何种状态编码方式、何种容错技术及系统的工作速度与资源利用率等方面权衡比较。,58,EDA技术与应用,10.7安全状态机设计,如果要使此5状态的状态机有可靠的工作性能,必须设法使系统在任何不利情况下都在落入非法状态后还能返回正常的状态转移路径中。,59,EDA技术与应用,10.7.1状态导引法,在状态元素定义中针对所有的状态,包括多余状态都做出定义,并在以后的语句中加以处理。,在剩余状态的转向设置中,只要导向专门用于处理出错恢复的状态中即可。优点:直观可靠。缺点:可处理的非法状态少,如果非法状态太多,则耗用逻辑资源太大,所以只适合于顺序编码类状态机。,60,EDA技术与应用,10.7.2状态编码监测法,对于采用一位热码编码方

温馨提示

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

评论

0/150

提交评论