Verilog状态机设计技术ppt课件

上传人:钟*** 文档编号:5852457 上传时间:2020-02-09 格式:PPT 页数:69 大小:1.29MB
返回 下载 相关 举报
Verilog状态机设计技术ppt课件_第1页
第1页 / 共69页
Verilog状态机设计技术ppt课件_第2页
第2页 / 共69页
Verilog状态机设计技术ppt课件_第3页
第3页 / 共69页
点击查看更多>>
资源描述
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 状态机说明部分 parameter 2 0 s0 0 s1 1 s2 2 s3 3 s4 4 reg 2 0 current state next state 状态元素s0 s1等用关键词parameter来定义 各状态元素所取得数值或编码必须写出具体值 parameter旁的位宽说明可写可不写current state是现态变量和next state是次态变量 5 EDA技术与应用 2005版本的SystemVerilog 1 状态机说明部分 typedefenum s0 s1 s2 s3 s4 type 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 状态机复位控制input 0 1 state inputs 来自外部的状态机控制信号output 3 0 comb outputs 状态机对外部发出的控制信号输出reg 3 0 comb outputs parameters0 0 s1 1 s2 2 s3 3 s4 4 定义状态参数reg 4 0 c 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 2 b00 next state s0 条件满足 回初态s0elsenext state s1 end 条件不满足 到下一状态s1s1 begincomb outputs 8 进入状态s1时 输出控制码8if state inputs 2 b01 next state s1 elsenext state s2 ends2 begincomb outputs 12 if state inputs 2 b10 next state s0 elsenext state s3 ends3 begincomb outputs 14 if state inputs 2 b11 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 打开 状态机萃取 开关 Assignments Settings 在category栏 选择Analysis SynthesisSettings 单击旁边的按钮MoreSettings 在弹出的对话框下方Existingoptionsettings栏单击选中ExtractVerilogStateMachines 在上方的Option的Setting栏选择On 12 EDA技术与应用 10 1 3初始控制与表述 Verilog状态机的相关设置控制 2 关于参数定义表述 在状态机设计中 用parameter进行参数定义 综合器萃取状态机的主要依据 一旦打开 状态机萃取 开关 其定义的形式可以十分随意 比如 可以表述为 parameters0 0 s1 1 也可以表述为 parameters0 4 b1001 s1 4 b0011 最后状态机被综合的结果未必按照此表述方式来构建 3 状态变量定义表述 如果已打开 状态机萃取 开关 定义句中位宽 msb lsb 的表述可以比较随意 不必一定与状态数对应 假设有5个状态 定义时 reg 2 0 c st next state 中用了位宽 2 0 而不是 4 0 一旦打开了 状态机萃取 开关 就可利用QuartusII的状态图观察器直观了解当前状态图走向 方法是 Tools NetlistViewers StateMachineViewer 13 EDA技术与应用 10 2Moore型状态机及其设计 从信号输出方式上分 有Moore型和Mealy型两类状态机 Mealy型状态机属于异步输出状态机 它的输出是当前状态和所有输入信号的函数 它的输出是在输入变化后立即发生的 不依赖时钟的同步 Moore型状态机属于同步输出状态机 它的输出仅为当前状态的函数 这类状态机在输入发生变化时必须等待时钟的到来 比Mealy机要多等待一个时钟周期 例10 1既属于Mealy型状态机 又属于Moore型状态机 14 EDA技术与应用 10 2 1多过程结构状态机 ADC0809工作时序和芯片引脚图 START为转换启动控制信号 高电平有效 ALE为模拟信号输入选通端口地址锁存信号 上升沿有效 EOC为状态信号 START有效后 EOC为低电平 进入转换状态 转换时间约100ms 转换结束后 EOC变为高电平 OE为输出允许控制 高电平有效 15 EDA技术与应用 控制ADC0809采样状态图 16 EDA技术与应用 例10 2 ADC0809采样控制 moduleADC0809 D CLK EOC RST ALE START OE ADDA Q LOCK T input 7 0 D 来自0809转换好的8位数据inputCLK RST 状态机工作时钟和系统复位控制inputEOC 转换状态指示 低电平表示正在转换outputALE 8个模拟信号通道地址锁存信号outputSTART OE 转换启动信号和数据输出三态控制信号outputADDA LOCK T 信号通道控制信号和锁存测试信号output 7 0 Q regALE START OE parameters0 0 s1 1 s2 2 s3 3 s4 4 定义各状态子类型reg 4 0 cs next state 为了便于仿真显示 现态名简写为csreg 7 0 REGL 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 1 b1 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的D 7 0 数据输出口输出的8位已转换好的数据锁存起来 19 EDA技术与应用 ADC0809采样状态机工作时序 状态s0 复位信号后即进入状态s0 状态s1 第二个时钟上升沿后 状态机进入状态s1 即cs s1 由START ALE发出启动采样和地址选通的控制信号 状态s2 EOC由高电平变为低电平 0809的8位数据输出端呈现高阻态 ZZ 等待CLK数个时钟周期后 EOC变为高电平 表示转换结束 状态s3 在此状态的输出允许OE被设置成高电平 此时8089的数据输出端D 7 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 1 b1 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个状态参数reg 8 0 ST NST always posedgeCLKorposedgeRST beginif RST ST s0 elseST NST endalways STorDIN begin 11010011串行输入 高位在前case ST s0 if DIN 1 b1 NST s1 elseNST s0 s1 if DIN 1 b1 NST s2 elseNST s0 s2 if DIN 1 b0 NST s3 elseNST s0 s3 if DIN 1 b1 NST s4 elseNST s0 s4 if DIN 1 b0 NST s5 elseNST s0 s5 if DIN 1 b0 NST s6 elseNST s0 s6 if DIN 1 b1 NST s7 elseNST s0 s7 if DIN 1 b1 NST s8 elseNST s0 s8 if DIN 1 b0 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 outputreg 4 0 Q reg 4 0 PST parameterst0 0 st1 1 st2 2 st3 3 st4 4 always posedgeCLKorposedgeRST begin REGif RST PST st0 elsebegincase PST st0 if DIN1 1 b1 PST st1 elsePST st0 st1 if DIN1 1 b1 PST st2 elsePST st1 st2 if DIN1 1 b1 PST st3 elsePST st2 st3 if DIN1 1 b1 PST st4 elsePST st3 st4 if DIN1 1 b0 PST st0 elsePST st4 default PST st0 endcaseendendAlways PSTofDIN2 begin COM 输出控制信号的过程case PST st0 if DIN2 1 b1 Q 5 H10 elseQ 5 H0A st1 if DIN2 1 b0 Q 5 H17 elseQ 5 H14 st2 if DIN2 1 b1 Q 5 H15 elseQ 5 H13 st3 if DIN2 1 b0 Q 5 H1B elseQ 5 H09 st4 if DIN2 1 b1 Q 5 H1D elseQ 5 H0D default Q 5 b00000 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 outputreg 4 0 Q reg 4 0 PST parameterst0 0 st1 1 st2 2 st3 3 st4 4 always posedgeCLKorposedgeRST begin REGif RST PST st0 elsebegincase PST st0 beginif DIN2 1 b1 Q 5 H10 elseQ 5 H0A if DIN1 1 b1 PST st1 elsePST st0 endst1 beginif DIN2 1 b0 Q 5 H17 elseQ 5 H14 if DIN1 1 b1 PST st2 elsePST st1 endst2 beginif DIN2 1 b1 Q 5 H15 elseQ 5 H13 if DIN1 1 b1 PST st3 elsePST st2 endst3 beginif DIN2 1 b0 Q 5 H1B elseQ 5 H09 if DIN1 1 b1 PST st4 elsePST st3 endst4 beginif DIN2 1 b1 Q 5 H1D elseQ 5 H0D if DIN1 1 b0 PST st0 elsePST st4 default beginPST st0 Q 5 b00000 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 reg 8 0 ST always posedgeCLK beginSOUT 0 if RST ST s0 elsebegincase ST s0 if DIN 1 b1 ST s1 elseST s0 s1 if DIN 1 b1 ST s2 elseST s0 s2 if DIN 1 b0 ST s3 elseST s0 s3 if DIN 1 b1 ST s4 elseST s0 s4 if DIN 1 b0 ST s5 elseST s0 s5 if DIN 1 b0 ST s6 elseST s0 s6 if DIN 1 b1 ST s7 elseST s0 s7 if DIN 1 b1 ST s8 elseST s0 s8 beginSOUT 1 if DIN 1 b0 ST s3 elseST s0 enddefault ST s0 endcaseendendendmodule 30 EDA技术与应用 单过程序列检测器Mealy机仿真波形 与双过程序列检测器Moore机相比 单过程Mealy机的仿真波形在SOUT的输出延迟了一个时钟 这种延迟数据具有滤波作用 如果SOUT是一个多位复杂算法的组合逻辑输出 可能会有许多毛刺 引起不良后果 利用单过程Mealy机形式可以有所改善 双过程序列检测器Moore机仿真波形 31 EDA技术与应用 10 4状态机图形编辑设计 1 打开状态机图形编辑窗 在QuartusII的工程管理窗中点击File New 选择状态机文件StateMachineFile 2 打开状态机图形编辑窗后 在QuartusII的工程管理窗中点击Tools StateMachineWizard 32 EDA技术与应用 3 在StateMachineWizard最初的对话框中选择生成一个新状态机 Createanewstatemachinedesign 然后在后面出来的框中分别选择复位信号控制方式和有效方式 如异步和高电平有效 Asynchronous和active high 33 EDA技术与应用 4 在状态机编辑器对话框中设置状态元素 输入输出信号 状态转换条件等 34 EDA技术与应用 5 完成后存盘 文件后缀是 smf 可以从状态机图形编辑器上看到转换图形 还可以利用左侧的工具进行一些修改补充 将这个图形状态机存盘后 可以以此文件作为工程进行设计 状态转换图形 35 EDA技术与应用 6 也可以将这个图形状态机文件转变成HDL代码文件 选择Tools GenerateHDLFile 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 input 7 0 D inputCLK RST EOC outputSTART OE ALE ADDA LOCK T output 7 0 Q parameters0 5 B00000 s1 5 B11000 s2 5 B00001 s3 5 B00100 s4 5 B00110 reg 4 0 cs SOUT next state reg 7 0 REGL regLOCK always csorEOC begincase cs s0 beginnext state s1 SOUT s0 ends1 beginnext state s2 SOUT s1 ends2 beginSOUT s2 if EOC 1 b1 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 posedgeSOUT 1 寄存器过程if SOUT 1 REGAL D assignADDA 0 assignQ REGL assignLOCK T SOUT 1 assignOE SOUT 2 assignALE SOUT 3 assignSTART SOUT 4 endmodule 40 EDA技术与应用 状态机工作时序 状态码直接输出型状态机的优点 输出速度快 不大可能出现毛刺现象 因为控制输出信号直接来自构成状态编码的触发器 状态码直接输出型状态机的缺点 程序可读性差 用于状态译码的组合逻辑资源比其他以相同触发器数量构成的状态要多 而且控制非法状态出现的容错技术要求较高 41 EDA技术与应用 10 5 2用宏定义语句定义状态编码 例10 9 ADC0809采样控制 宏替换语句 define定义状态元素 defines05 B00000 defines15 B11000 defines25 B00001 defines35 B00100 defines45 B00110moduleADC0809 D CLK ECO RST ALE START OE ADDA Q LOCK T input 7 0 D inputCLK RST EOC outputSTART OE ALE ADDA LOCK T output 7 0 Q reg 4 0 cs SOUT next state reg 7 0 REGL regLOCK always csorEOC begincase cs s0 beginnext state s1 SOUT s0 end s1 beginnext state s2 SOUT s1 end s2 beginSOUT s2 if EOC 1 b1 next state s3 elsenext state s2 end s3 beginSOUT s3 next state s4 end s4 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 posedgeSOUT 1 寄存器过程if SOUT 1 REGAL D assignADDA 0 assignQ REGL assignLOCK T SOUT 1 assignOE SOUT 2 assignALE SOUT 3 assignSTART SOUT 4 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 reg 8 0 ST always posedgeCLK begin syn encoding one hot one hot 是对编码的约束 在编译前要打开 状态机萃取 开关 编码方式的属性表述 50 EDA技术与应用 当选用默认型编码 default 时 计算机自动选择 one hot 型编码 例10 7不同编码方式的属性定义及资源耗用 51 EDA技术与应用 3 直接设置方法 在QuartusII中 选择Assignments Settings 在跳出的对话框中 选择Category栏中的Analysis SynthesisSetting选项 在出现的窗口中单击按钮MoreSettings 然后选择新对话框的Option Name StateMachinePocessing 而在其下的Setting栏选择需要的编码方式 52 EDA技术与应用 10 6异步有限状态机设计 对于异步有限状态机 通常情况下 综合器的 状态机萃取 开关对它们没有影响 而且编译后也无法自动生成状态转换图 53 EDA技术与应用 例10 11 moduleASM WAVE1 inputCLK RST outputW1 W2 synthesis keep reg 1 0 CS 为在波形图中了解CS的情况reg 1 0 NS regW1 W2 parameterS0 1 S1 3 S2 2 S3 0 always RSTorNS 注意其状态编码形式 这将影响状态机功能beginif RST CS S0 elseCS NS endalways CS beginif CS S0 beginW1 1 b0 W2 1 b0 endif CS S1 beginW1 1 b1 W2 1 b0 endif CS S2 beginW1 1 b1 W2 1 b1 endif CS S3 beginW1 1 b0 W2 1 b1 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 reg 1 0 NS regW Z synthesis keep reg 1 0 CS 为在波形图中了解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 2 b00 beginNS S0 W W endelseif CLK1 CLK2 2 b01 NS S1 elseif CLK1 CLK2 2 b10 NS S2 elseif CLK1 CLK2 2 b11 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 2 b00 NS S0 elseif CLK1 CLK2 2 b01 beginNS S1 W 1 b0 endelseif CLK1 CLK2 2 b10 NS S2 elseif CLK1 CLK2 2 b11 NS S3 elseNS S0 S2 if CLK1 CLK2 2 b00 NS S0 elseif CLK1 CLK2 2 b01 NS S1 elseif CLK1 CLK2 2 b10 beginNS S2 W 1 b1 endelseif CLK1 CLK2 2 b11 NS S3 elseNS S0 S3 if CLK1 CLK2 2 b00 NS S0 elseif CLK1 CLK2 2 b01 NS S1 elseif CLK1 CLK2 2 b10 NS S2 elseif CLK1 CLK2 2 b11 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 reg 2 0 CS reg 2 0 NS wireCLK parameterS0 3 b000 S1 3 b001 S2 3 b011 S3 3 b010 S4 3 b110 S5 3 b111 S6 3 b101 S7 3 b100 注意状态编码形式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状态编码监测法 对于采用一位热码编码方式设计的状态机 合法与非法状态之和最大可能状态数有m 2n个 而合法状态数有n个 因此非法状态数有2n n个 n越大 非法状态数越多 选用一位热码编码方式的重要目的之一是减少状态转换间的译码数据的变化 减少逻辑资源的耗用 提高变化速度 如果采用状态导引法处理剩余状态 又会导致耗用过多逻辑资源 61 EDA技术与应用 10 7 2状态编码监测法 一位热码编码的正常状态只有一个触发器的状态为1 任何多于一个触发器为1的状态都属于非法状态 可对状态编码中1的个数是否大于1监测判断 当有多个1时 产生警告信号alarm 根据此信号是否有效来决定是否调整状态转向或复位 状态机的非法状态总是有限的 所以利用状态码检测法从非法状态返回正常工作情况是可以实现的 而CPU死机进入的状态几乎是无限的 在无人复位的情况下 用任何方式都不能绝对保证CPU的恢复 62 EDA技术与应用 10 7 3借助EDA工具自动生成安全状态机 在QuartusII中 选择Assignments Settings 在跳出的对话框中 选择Category栏中的Analysis SynthesisSetting选项 在出现的窗口中单击按钮MoreSettings 然后选择新对话框的Option Name SafeStateMachine 而在其下的Setting栏选择On 另一种方法是用属性 syn encoding safe one hot 63 EDA技术与应用 10 8硬件技术排除毛刺 通常通过使信号有微量的延时来消除数字系统中的毛刺现象 传统数字电路设计技术中较常用的方法是在通道上增加门电路 或利用所谓冗余技术来解决 甚至增加滤波电路 但这些方法在现代数字技术中完全行不通 因为 1 EDA对构建逻辑功能无贡献的逻辑器件都自动删除 2 PLD等器件没有诸如门电路的纯组合电路的元件 PLD组合逻辑电路功能的实现 未必具体到门电路实体 门电路逻辑功能的实现常常只是在可编程门阵列中多一个或几个熔丝点 在逻辑电路图中多一个或少一个逻辑门不一定影响延时 有时可能起反作用 3 每一种目标器件的基本延时特性都不同 且延时特性随外部因素变化 延时量极难控制 4 现代数字系统属于高速系统 增加几个门电路或滤波电容不可能达到需要的延时 10 8 1延时方式去毛刺 64 EDA技术与应用 现代数字系统中的延时技术 使用触发器或寄存器等时序元件或电路对输入或输出或电路通道上的信号进行适当的延时 或延时采样 使处理过的信号再输出后能避开毛刺 对于进入FPGA的信号或时钟 建议用触发器延时电路来排除毛刺 特别是由专用时钟输入口进入FPGA的时钟 进入锁相环的时钟信号入口虽然也是专用时钟口 但不必加任何额外电路 对于一般情况的非驱动锁相环的时钟信号的毛刺预防 延时控制时钟DELAY CLK的频率应远高于工作时钟 且DELAY CLK最好来自锁相环 65 EDA技术与应用 双触发器延时电路 左图输入 右图输出 双寄存器数据延时电路 针对总线数据通道的延时 66 EDA技术与应用 延时方式去毛刺主要针对数据或时钟单边沿的毛刺 且延时时钟信号的周期应该与主通道的输入数据时序宽度或时钟的周期有较好配合 对于双边沿都有毛刺或抖动的时钟信号 如按键的抖动 来自电机转速光电测控脉冲信号的抖动等含大量随机干扰毛刺的时钟信号 可采用逻辑方式去毛刺 10 8 2逻辑方式去毛刺 67 EDA技术与应用 信号的上升沿和下降沿都含随机干扰抖动信号 去抖动电路 功能上类似一个信号滤波器 双边沿抖动信号 68 EDA技术与应用 消抖电路的仿真波形 抖动被消除了 输出脉宽变小了 只等于CLK的一个周期宽度 且输出信号比原来的信号有一个明显的延迟 CLK的频率可以决定输出信号的脉宽和延迟量 CLK的频率要足够高 至少应该有4个上升沿被包含在正常信号脉宽中 否则所有信号都无法通过此电路 CLK的频率也不能太高 即其周期不能太小于干扰信号的脉宽 如果增加D触发器的数量 可以提高滤波性能 69
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!