《Verilog状态机设计技术教学课件.pptx》由会员分享,可在线阅读,更多相关《Verilog状态机设计技术教学课件.pptx(69页珍藏版)》请在三一办公上搜索。
1、E D A技术与应用,第10章 Verilog状态机设计技术,1,E第10章 Verilog状态机设计技术1,E D A技术与应用,10.1 Verilog状态机的一般形式,广义而论,只要涉及触发器的电路,无论电路大小,都能归结为状态机。有限状态机用来实现一个数字电路的控制部分。与CPU的功能类似,综合了时序逻辑和组合逻辑电路。CPU是通过操作指令和硬件操作单元来实现控制功能,而有限状态机是通过状态转移来实现控制功能。综合器能从不同表述形态的HDL代码中轻易萃取出状态机,并加以多侧面、多目标和多种形式的优化。,2,E10.1 Verilog状态机的一般形式广义而论,只,E D A技术与应用,1
2、0.1.1 状态机的特点与优势,面对同一个设计项目的不同形式的逻辑设计方案中,利用有限状态机的设计方案来描述和实现将可能是最佳选择。,有限状态机的优越性:(1)高效的顺序控制模型(2)容易利用现成的EDA工具进行优化设计(3)性能稳定(4)高速性能(5)高可靠性能,3,E10.1.1 状态机的特点与优势面对同一个设计项目的不,E D A技术与应用,10.1.2 状态机的一般结构,用Verilog设计的状态机根据不同的分类标准可以分为多种不同形式:从状态机的信号输出方式上分:Mealy型和Moore型状态机从状态机的结构描述上分:单过程状态机和多过程状态机从状态表达方式上分:符号化状态机和确定状
3、态编码的状态机从状态机编码方式上分:顺序编码、一位热编码或其他编码方式状态机,最一般和最常用的状态机结构中通常包含了说明部分、主控时序过程、主控组合过程、辅助过程等几个部分,4,E10.1.2 状态机的一般结构用Verilog设计的状,E D A技术与应用,说明部分中包含状态转换变量的定义和所有可能状态的说明,必要时还要确定每一状态的编码形式,最好是纯抽象的符号化状态机,即所定义的状态序列和状态转换变量都不涉及具体的数值、编码,甚至数据类型或变量类型。,1、状态机说明部分,parameter2: 0 s0=0, s1=1, s2=2 , s3=3, s4=4;reg 2: 0 current_
4、state, next_state;,状态元素s0、s1等用关键词parameter来定义,各状态元素所取得数值或编码必须写出具体值。parameter旁的位宽说明可写可不写current_state是现态变量和next_state是次态变量,5,E说明部分中包含状态转换变量的定义和所有可能状态的说明,必,E D A技术与应用,2005版本的System Verilog,1、状态机说明部分,typedef enum s0, s1, s2, s3, s4 type_user;type_user current_state, next_state;,typedef是用户数据类型自定义语句关键词en
5、um是定义枚举类型关键词type_user是用户定义状态元素s0、s1、s2、s3、s4为type_user类型的标识符第二句将状态变量current_state、next_state定义为type_user类型,6,E2005版本的System Verilog1、状态机说明,E D A技术与应用,2、主控时序过程,主控时序过程指负责状态机运转和在时钟驱动下负责状态转换的过程。状态机是随外部时钟信号,以同步时序方式工作的,状态机中必须包含一个对工作时钟敏感的过程,状态机向下一状态转换的实现仅取决于时钟信号的到来。当时钟的有效跳变到来时,时序过程只是机械地将代表次态的信号next_state中的
6、内容送入现态的信号current_state中,而信号next_state中的内容完全由其他过程根据实际情况来决定。此时序过程中也可放置一些同步或异步清0或置位方面的控制信号。,7,E2、主控时序过程主控时序过程指负责状态机运转和在时钟驱动,E D A技术与应用,3、主控组合过程,主控组合过程根据当前状态和外部的信号发出控制信号,同时确定下一状态的走向。,在时钟的作用下,REG时序过程将次态信号的内容next_state传递给现态信号current_stateCOM组合过程通过信号current_state中的状态值,进入相应的状态;在此状态中根据外部的信号(如state_inputs)向内或
7、向外发出控制信号(如com_outputs);同时根据外部信号(如state_inputs)向次态信号next_state中赋相应的状态值,确定下一状态的走向;此状态值通过next_state传给REG时序过程,直到下一个时钟脉冲的到来。,8,E3、主控组合过程主控组合过程根据当前状态和外部的信号发出,E D A技术与应用,4、辅助过程,辅助过程用于配合状态机工作的组合过程或时序过程。例如为了完成某种算法的过程,或为了存储数据的存储过程,或用于配合状态机工作的其他时序过程等。,例10-1,module FSM_EXP (clk, reset, state_inputs, comb_output
8、s); input clk;/状态机工作时钟 input reset;/状态机复位控制 input 0: 1 state_inputs;/来自外部的状态机控制信号 output 3: 0 comb_outputs;/状态机对外部发出的控制信号输出 reg 3: 0 comb_outputs; parameter s0=0, s1=1, s2=2, s3=3, s4=4; /定义状态参数 reg 4: 0 c_st, next_state; /定义现态和次态的状态变量 always (posedge clk or negedge reset) begin/主控时序过程 if (!reset) c
9、_st=s0; /复位有效时,下一状态进入初态s0 else c_st=next_state; end,9,E4、辅助过程辅助过程用于配合状态机工作的组合过程或时序过,E D A技术与应用,例10-1-续,always (c_st or state_inputs) begin/主控组合过程 case (c_st) /为了在仿真波形中容易看清,将current_state简写为c_st s0 : begin comb_outputs=5; /进入状态s0时,输出控制码5if (state_inputs=2b00) next_state=s0; /条件满足,回初态s0else next_state
10、=s1; end/条件不满足,到下一状态s1 s1 : begin comb_outputs=8; /进入状态s1时,输出控制码8if (state_inputs=2b01) next_state=s1;else next_state=s2; end s2 : begin comb_outputs=12;if (state_inputs=2b10) next_state=s0;else next_state=s3; end s3 : begin comb_outputs=14;if (state_inputs=2b11) next_state=s3;else next_state=s4; en
11、d s4 : begin comb_outputs=9; next_state=s0; end default : next_state =s0; /现态若未出现以上各态,返回初态s0 endcase endendmodule,10,E例10-1-续always (c_st or sta,E D A技术与应用,状态机的状态转换图,状态机的工作时序,11,E状态机的状态转换图状态机的工作时序间接了解状态机内部运行,E D A技术与应用,10.1.3 初始控制与表述,Verilog状态机的相关设置控制:,(1)打开“状态机萃取”开关:AssignmentsSettings,在category栏,选
12、择Analysis & Synthesis Settings,单击旁边的按钮More Settings,在弹出的对话框下方Existing option settings栏单击选中Extract Verilog State Machines。在上方的Option的Setting栏选择On,12,E10.1.3 初始控制与表述Verilog状态机的相关,E D A技术与应用,10.1.3 初始控制与表述,Verilog状态机的相关设置控制:,(2)关于参数定义表述:在状态机设计中,用parameter进行参数定义(综合器萃取状态机的主要依据),一旦打开“状态机萃取”开关,其定义的形式可以十分随意
13、。比如,可以表述为“parameter s0=0, s1=1”,也可以表述为“parameter s0=4b1001, s1=4b0011”,最后状态机被综合的结果未必按照此表述方式来构建。(3)状态变量定义表述:如果已打开“状态机萃取”开关,定义句中位宽msb: lsb的表述可以比较随意,不必一定与状态数对应。假设有5个状态,定义时“reg 2: 0 c_st, next_state”中用了位宽2:0,而不是4:0。,一旦打开了“状态机萃取”开关,就可利用Quartus II的状态图观察器直观了解当前状态图走向,方法是:ToolsNetlist Viewers State Machine V
14、iewer,13,E10.1.3 初始控制与表述Verilog状态机的相关,E D A技术与应用,10.2 Moore型状态机及其设计,从信号输出方式上分,有Moore型和Mealy型两类状态机。Mealy型状态机属于异步输出状态机,它的输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的,不依赖时钟的同步。Moore型状态机属于同步输出状态机,它的输出仅为当前状态的函数,这类状态机在输入发生变化时必须等待时钟的到来,比Mealy机要多等待一个时钟周期。例10-1既属于Mealy型状态机,又属于Moore型状态机。,14,E10.2 Moore型状态机及其设计从信号输出方式上,
15、E D A技术与应用,10.2.1 多过程结构状态机,ADC0809工作时序和芯片引脚图,START为转换启动控制信号,高电平有效。ALE为模拟信号输入选通端口地址锁存信号,上升沿有效。EOC为状态信号,START有效后,EOC为低电平,进入转换状态,转换时间约100ms,转换结束后,EOC变为高电平。OE为输出允许控制,高电平有效。,15,E10.2.1 多过程结构状态机ADC0809工作时序和,E D A技术与应用,控制ADC0809采样状态图,16,E控制ADC0809采样状态图监测EOC,低电平,转换未结,E D A技术与应用,例10-2 :ADC0809采样控制,module ADC
16、0809 (D, CLK, EOC, RST, ALE, START, OE, ADDA, Q, LOCK_T); input 7: 0 D; /来自0809转换好的8位数据 input CLK, RST; /状态机工作时钟和系统复位控制 input EOC; /转换状态指示,低电平表示正在转换 output ALE; /8个模拟信号通道地址锁存信号 output START, OE; /转换启动信号和数据输出三态控制信号 output ADDA, LOCK_T; /信号通道控制信号和锁存测试信号 output 7:0 Q; reg ALE, START, OE; parameter s0=0
17、, s1=1, s2=2, s3=3, s4=4; /定义各状态子类型 reg4: 0 cs, next_state; /为了便于仿真显示,现态名简写为cs reg7: 0 REGL; reg LOCK; /转换后数据输出锁存时钟信号 always (cs or EOC) begin /主控组合过程,规定各状态转换方式 case (cs) s0 : begin ALE=0; START=0; OE=0; LOCK=0;next_state=s1; end /0809初始化 s1 : begin ALE=1; START=1; OE=0; LOCK=0;next_state=s2; end /启
18、动采样信号START,17,E例10-2 :ADC0809采样控制 module AD,E D A技术与应用,例10-2-续 :ADC0809采样控制,s2 : begin ALE=0; START=0; OE=0; LOCK=0;if (EOC=1b1) next_state=s3;/EOC=0表明转换结束else next_state=s2; end /转换未结束,继续等待s3 : begin ALE=0; START=0; OE=1; LOCK=0;/开启OE,打开 AD数据口next_state=s4; end /下一状态无条件转向s4 s4 : begin ALE=0;START=0
19、;OE=1;LOCK=1;/开启数据锁存信号next_state=s0; enddefault : begin ALE=0; START=0; OE=0; LOCK=0;next_state=s0; end endcase end always (posedge CLK or posedge RST) begin/时序过程 if (RST) cs=s0; else cs=next_state; end always (posedge LOCK) if (LOCK) REGL=D;/在LOCK上升沿 将转换好的数据锁入 assign ADDA=0; assign Q=REGL; /选择模拟信号进
20、入通道IN0 assign LOCK_T=LOCK; /将测试信号输出endmodule,18,E例10-2-续 :ADC0809采样控制 s2 : b,E D A技术与应用,采样状态机结构框图,程序中包含三个过程结构:时序过程REG:在CLK的驱动下,不断将next_state中的内容(状态元素)赋给现态cs,并由此信号将状态变量传输给COM组合过程。组合过程COM:(1)状态译码功能。根据从现态信号cs中获得的状态变量,以及来自0809的状态线信号EOC,决定下一状态的转移方向,即次态的状态变量。(2)采样控制功能。根据cs中的状态变量确定对0809的控制信号ALE、START、OE等输出
21、相应控制信号,当采样结束后还要通过LOCK向锁存器过程LATCH发出锁存信号。锁存器辅助过程LATCH:将由0809的D7.0数据输出口输出的8位已转换好的数据锁存起来。,19,E采样状态机结构框图程序中包含三个过程结构:19,E D A技术与应用,ADC0809采样状态机工作时序,状态s0:复位信号后即进入状态s0。状态s1:第二个时钟上升沿后,状态机进入状态s1(即cs=s1),由START、ALE发出启动采样和地址选通的控制信号。状态s2:EOC由高电平变为低电平,0809的8位数据输出端呈现高阻态“ZZ”。等待CLK数个时钟周期后,EOC变为高电平,表示转换结束。状态s3:在此状态的输
22、出允许OE被设置成高电平。此时8089的数据输出端D7.0即输出已经转换好的数据5EH。状态s4:LOCK_T发出一个脉冲,其上升沿立即将D端口的5E锁入Q和REGL中。,20,EADC0809采样状态机工作时序状态s0:复位信号后即进,E D A技术与应用,例10-3:修改后的ADC0809采样控制,/将组合过程COM拆分为两个部分 always (cs or EOC) begin/状态译码和状态转换 case (cs)s0 : next_state=s1;s1 : next_state=s2;s2 : if (EOC=1b1) next_state=s3; else next_state=
23、s2; s3 : next_state=s4; s4 : next_state=s0; default : next_state=s0; endcase end always (cs or EOC) begin/对外控制信号输出 case (cs)s0 : begin ALE=0; START=0; OE=0; LOCK=0; ends1 : begin ALE=1; START=1; OE=0; LOCK=0; end s2 : begin ALE=0; START=0; OE=0; LOCK=0; end s3 : begin ALE=0; START=0; OE=1; LOCK=0; e
24、nd s4 : begin ALE=0; START=0; OE=1; LOCK=1; end default : begin ALE=0; START=0; OE=0; LOCK=0; end endcase end,21,E例10-3:修改后的ADC0809采样控制 /将组合过,E D A技术与应用,10.2.2 序列检测器及其状态机设计,序列检测器用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次正确码及正确序列,直到连
25、续的检测中所收到的每一位码都与预置数的对应码相同,任何一位不相等都将回到初始状态重新开始检测。,22,E10.2.2 序列检测器及其状态机设计序列检测器用于检,E D A技术与应用,例10-4:8位序列数11010011的序列检测器,module SCHK (input CLK, DIN, RST, output SOUT); parameter s0=40, s1=41, s2=42, s3=43, s4=44, s5=45, s6=46, s7=47, s8=48;/设定9个状态参数 reg 8: 0 ST, NST; always (posedge CLK or posedge RST)
26、 begin if (RST) ST=s0; else ST=NST; end always (ST or DIN) begin /11010011串行输入,高位在前 case (ST)s0 : if (DIN=1b1) NST=s1; else NST=s0;s1 : if (DIN=1b1) NST=s2; else NST=s0;s2 : if (DIN=1b0) NST=s3; else NST=s0;s3 : if (DIN=1b1) NST=s4; else NST=s0;s4 : if (DIN=1b0) NST=s5; else NST=s0;s5 : if (DIN=1b0)
27、 NST=s6; else NST=s0;s6 : if (DIN=1b1) NST=s7; else NST=s0;s7 : if (DIN=1b1) NST=s8; else NST=s0;s8 : if (DIN=1b0) NST=s3; else NST=s0;default : NST=s0; endcase end assign SOUT= (ST=s8);endmodule,23,E例10-4:8位序列数11010011的序列检测器mod,E D A技术与应用,10.3 Mealy型状态机设计,Mealy型状态机与Moore型状态机相比,输出变化要领先一个周期,即一旦输入信号或状
28、态发生变化,输出信号即刻发生变化。Mealy机与Moore机在设计上基本相同,只是Mealy机的组合过程结构中的输出信号是当前状态和当前输入的函数。 Mealy机将时序过程与组合过程混合,在同一个过程中决定主控状态译码和主控时序, 所以不需要用次态来传递状态。,24,E10.3 Mealy型状态机设计Mealy型状态机与,E D A技术与应用,例10-5 :双过程Mealy机,module MEALY1 (input CLK, DIN1, DIN2, RST, output reg 4: 0 Q); reg 4: 0 PST; parameter st0=0, st1=1, st2=2, st
29、3=3, st4=4; always (posedge CLK or posedge RST) begin : REG if (RST) PST=st0; else begincase (PST) st0 : if (DIN1=1b1) PST=st1; else PST=st0; st1 : if (DIN1=1b1) PST=st2; else PST=st1; st2 : if (DIN1=1b1) PST=st3; else PST=st2; st3 : if (DIN1=1b1) PST=st4; else PST=st3; st4 : if (DIN1=1b0) PST=st0;
30、else PST=st4; default : PST=st0;endcase end endAlways (PST of DIN2) begin : COM/输出控制信号的过程 case (PST)st0 : if (DIN2=1b1) Q=5H10; else Q=5H0A;st1 : if (DIN2=1b0) Q=5H17; else Q=5H14;st2 : if (DIN2=1b1) Q=5H15; else Q=5H13;st3 : if (DIN2=1b0) Q=5H1B; else Q=5H09;st4 : if (DIN2=1b1) Q=5H1D; else Q=5H0D;
31、default : Q=5b00000; endcase endendmodule,25,E例10-5 :双过程Mealy机module MEALY,E D A技术与应用,过程REG是时序与组合混合型过程,将状态机的主控时序电路和主控状态译码电路同时用一个过程来表达。过程COM负责根据状态和输入信号给出不同的对外控制信号输出。,双过程Mealy机状态图,26,E过程REG是时序与组合混合型过程,将状态机的主控时序电路,E D A技术与应用,双过程Mealy机仿真波形,PST是现态转换情况,DIN1控制各状态的转换方式,DIN2控制对外控制信号码的输出:当复位后,且DIN1=0时,一直处于st0
32、状态,若此时DIN2=0,输出码0AH;当DIN1都为1时,每一个时钟上升沿后,都转入下一状态,直到状态s4,同时根据每一个状态下的DIN2的值输出相应设定的控制码,一直到DIN1=0才回到初始状态s0。输出信号中存在毛刺,为了排除毛刺,可通过选择可能的优化设置,也可将输出通过寄存器锁存,滤除毛刺。,27,E双过程Mealy机仿真波形PST是现态转换情况,DIN1,E D A技术与应用,例10-6 :单过程Mealy机,module MEALY2 (input CLK, DIN1, DIN2, RST, output reg 4: 0 Q); reg 4: 0 PST; parameter s
33、t0=0, st1=1, st2=2, st3=3, st4=4; always (posedge CLK or posedge RST) begin : REG if (RST) PST=st0; else begincase (PST) st0 : begin if (DIN2=1b1) Q=5H10; else Q=5H0A; if (DIN1=1b1) PST=st1; else PST=st0; end st1 : begin if (DIN2=1b0) Q=5H17; else Q=5H14; if (DIN1=1b1) PST=st2; else PST=st1; end st2
34、 : begin if (DIN2=1b1) Q=5H15; else Q=5H13; if (DIN1=1b1) PST=st3; else PST=st2; end st3 : begin if (DIN2=1b0) Q=5H1B; else Q=5H09; if (DIN1=1b1) PST=st4; else PST=st3; end st4 : begin if (DIN2=1b1) Q=5H1D; else Q=5H0D; if (DIN1=1b0) PST=st0; else PST=st4; default : begin PST=st0; Q=5b00000; endendc
35、ase end endendmodule,28,E例10-6 :单过程Mealy机module MEALY,E D A技术与应用,单过程Mealy机仿真波形,单过程Mealy机状态图(与双过程相同),29,E单过程Mealy机仿真波形单过程Mealy机状态图(与双,E D A技术与应用,例10-7 :单过程序列检测器Mealy机,module SCHK (input CLK, DIN, RST, output SOUT); parameter s0=0, s1=1, s2=2, s3=3, s4=4, s5=5, s6=6, s7=7, s8=8; reg 8: 0 ST; always (p
36、osedge CLK) begin SOUT=0; if (RST) ST=s0; else begincase (ST) s0 : if (DIN=1b1) ST=s1; else ST=s0; s1 : if (DIN=1b1) ST=s2; else ST=s0; s2 : if (DIN=1b0) ST=s3; else ST=s0; s3 : if (DIN=1b1) ST=s4; else ST=s0; s4 : if (DIN=1b0) ST=s5; else ST=s0; s5 : if (DIN=1b0) ST=s6; else ST=s0; s6 : if (DIN=1b1
37、) ST=s7; else ST=s0; s7 : if (DIN=1b1) ST=s8; else ST=s0; s8 : begin SOUT=1; if (DIN=1b0) ST=s3; else ST=s0; end default : ST=s0; endcase end endendmodule,30,E例10-7 :单过程序列检测器Mealy机module,E D A技术与应用,单过程序列检测器Mealy机仿真波形,与双过程序列检测器Moore机相比,单过程Mealy机的仿真波形在SOUT的输出延迟了一个时钟,这种延迟数据具有滤波作用。如果SOUT是一个多位复杂算法的组合逻辑输出
38、,可能会有许多毛刺,引起不良后果,利用单过程Mealy机形式可以有所改善。,双过程序列检测器Moore机仿真波形,31,E单过程序列检测器Mealy机仿真波形与双过程序列检测器M,E D A技术与应用,10.4 状态机图形编辑设计,(1)打开状态机图形编辑窗:在Quartus II的工程管理窗中点击FileNew,选择状态机文件State Machine File。(2)打开状态机图形编辑窗后,在Quartus II的工程管理窗中点击ToolsState MachineWizard。,32,E10.4 状态机图形编辑设计(1)打开状态机图形编辑窗,E D A技术与应用,(3)在State Ma
39、chine Wizard最初的对话框中选择生成一个新状态机“Create a new state machine design”,然后在后面出来的框中分别选择复位信号控制方式和有效方式,如异步和高电平有效:Asynchronous和active-high。,33,E(3)在State Machine Wizard最初的对,E D A技术与应用,(4)在状态机编辑器对话框中设置状态元素、输入输出信号、状态转换条件等。,34,E(4)在状态机编辑器对话框中设置状态元素、输入输出信号、,E D A技术与应用,(5)完成后存盘,文件后缀是.smf。可以从状态机图形编辑器上看到转换图形,还可以利用左侧的
40、工具进行一些修改补充。将这个图形状态机存盘后,可以以此文件作为工程进行设计。,状态转换图形,35,E(5)完成后存盘,文件后缀是.smf。可以从状态机图形编,E D A技术与应用,(6)也可以将这个图形状态机文件转变成HDL代码文件。选择ToolsGenerate HDL File(HDL文件控制项),在打开的窗口中,选择需要转变的硬件描述语言项,包括VHDL、Verilog HDL或System Verilog。,36,E(6)也可以将这个图形状态机文件转变成HDL代码文件。选,E D A技术与应用,10.5 不同编码类型状态机,用文字符号定义各状态元素的状态机称为符号化状态机,其状态元素的
41、具体编码由Verilog状态机的综合器根据预设的约束来确定。可直接将各状态用具体的二进制数来定义,不使用文字符号,这种编码方式称为直接编码方式。,37,E10.5 不同编码类型状态机用文字符号定义各状态元素的,E D A技术与应用,10.5.1 直接输出型编码,最典型的应用实例就是计数器。计数器本质上是一个主控时序过程与一个主控组合过程合二为一的状态机,计数输出就是各状态的状态码。,38,E10.5.1 直接输出型编码最典型的应用实例就是计数器,E D A技术与应用,状态码直接输出型状态机:将状态编码直接输出作为控制信号,即output=state,要求各状态的编码作特殊的安排,以适应控制对象
42、的要求。,控制ADC0809采样状态机的状态编码表,39,E状态码直接输出型状态机:将状态编码直接输出作为控制信号,,E D A技术与应用,例10-8 :ADC0809采样控制(状态码直接输出型),module ADC0809 (D, CLK, ECO, RST, ALE, START, OE, ADDA, Q, LOCK_T); input 7: 0 D; input CLK, RST, EOC; output START, OE, ALE, ADDA, LOCK_T; output 7: 0 Q; parameter s0=5B00000, s1=5B11000, s2=5B00001,
43、s3=5B00100, s4=5B00110; reg 4: 0 cs, SOUT, next_state; reg7: 0 REGL; reg LOCK; always (cs or EOC) begin case (cs) s0 : begin next_state=s1; SOUT=s0; end s1 : begin next_state=s2; SOUT=s1; end s2 : begin SOUT=s2; if (EOC=1b1) next_state=s3; else next_state=s2; end s3 : begin SOUT=s3; next_state=s4; e
44、nd s4 : begin SOUT=s4; next_state=s0; end default : begin next_state=s0; SOUT=s0; end endcase end always (posedge CLK or posedge RST) begin /时序过程 if (RST) cs=s0; else cs=next_state; end always (posedge SOUT1) /寄存器过程 if (SOUT1) REGAL=D; assign ADDA=0; assign Q=REGL; assign LOCK_T=SOUT1; assign OE=SOU
45、T2; assign ALE=SOUT3; assign START=SOUT4;endmodule,40,E例10-8 :ADC0809采样控制(状态码直接输出型),E D A技术与应用,状态机工作时序,状态码直接输出型状态机的优点:输出速度快,不大可能出现毛刺现象(因为控制输出信号直接来自构成状态编码的触发器)。状态码直接输出型状态机的缺点:程序可读性差,用于状态译码的组合逻辑资源比其他以相同触发器数量构成的状态要多,而且控制非法状态出现的容错技术要求较高。,41,E状态机工作时序状态码直接输出型状态机的优点:输出速度快,,E D A技术与应用,10.5.2 用宏定义语句定义状态编码,例1
46、0-9 :ADC0809采样控制(宏替换语句define定义状态元素),define s0 5B00000define s1 5B11000define s2 5B00001define s3 5B00100define s4 5B00110module ADC0809 (D, CLK, ECO, RST, ALE, START, OE, ADDA, Q, LOCK_T); input 7: 0 D; input CLK, RST, EOC; output START, OE, ALE, ADDA, LOCK_T; output 7: 0 Q;reg 4: 0 cs, SOUT, next_s
47、tate; reg7: 0 REGL; reg LOCK; always (cs or EOC) begin case (cs) s0 : begin next_state=s1; SOUT=s0; end s1 : begin next_state=s2; SOUT=s1; end s2 : begin SOUT=s2; if (EOC=1b1) next_state=s3; else next_state=s2; end s3 : begin SOUT=s3; next_state=s4; end s4 : begin SOUT=s4; next_state=s0; end default
48、 : begin next_state=s0; SOUT=s0; end endcase end,42,E10.5.2 用宏定义语句定义状态编码例10-9 :A,E D A技术与应用,10.5.2 用宏定义语句定义状态编码,例10-9 -续:ADC0809采样控制(宏替换语句define定义状态元素),always (posedge CLK or posedge RST) begin /时序过程 if (RST) cs=s0; else cs=next_state; end always (posedge SOUT1) /寄存器过程 if (SOUT1) REGAL=D; assign ADD
49、A=0; assign Q=REGL; assign LOCK_T=SOUT1; assign OE=SOUT2; assign ALE=SOUT3; assign START=SOUT4;endmodule,用define或parameter来定义状态元素的编码的区别是:define定义可以针对整个设计全局,它定义的可以是全局符号常量,可以在各个不同的模块中通用,这时定义语句必须放在模块语句module外;也可以针对局部,放在module中。parameter定义在某个模块module中,只有局部特征。,43,E10.5.2 用宏定义语句定义状态编码例10-9 -续,E D A技术与应用,4
50、4,E例10-8 采用parameter来定义状态元素的仿真波,E D A技术与应用,10.5.3 宏定义命令语句,宏定义命令语句define属于编译指示语句,不参与综合,只是在综合前做一些数据控制操作。通过define语句的定义,可以用简单的名称或称为宏名的标识符来替代一个复杂的名字,或字符串,或表达式等。,define 宏名 (标识符) 宏内容 (字符串),define属于编译预处理命令语句。在编译预处理时,把程序中在该定义以后的所有同名宏名或标识符的内容都换成定义中指定的宏内容。,define s A+B+C+Dassign DOUT=s+E,assign DOUT=A+B+C+D+E,