Verilog有限状态机FSM.ppt_第1页
Verilog有限状态机FSM.ppt_第2页
Verilog有限状态机FSM.ppt_第3页
Verilog有限状态机FSM.ppt_第4页
Verilog有限状态机FSM.ppt_第5页
免费预览已结束,剩余31页可下载查看

下载本文档

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

文档简介

* 有限状态机fsm * 为什么要设计有限状态机?为什么要设计有限状态机? 如果能严格以时钟跳变沿为前提,按排好时时序如果能严格以时钟跳变沿为前提,按排好时时序 ,来操作逻辑系统中每一个开关,来操作逻辑系统中每一个开关sisi,则系统中数则系统中数 据的流动和处理会按同一时钟节拍有序地进行,据的流动和处理会按同一时钟节拍有序地进行, 可以控制冒险和竞争现象对逻辑运算的破坏,可以控制冒险和竞争现象对逻辑运算的破坏,时时 延问题就能有效地加以解决。延问题就能有效地加以解决。 利用同步有限状态机就能产生复杂的以时钟跳变利用同步有限状态机就能产生复杂的以时钟跳变 沿为前提的同步时序逻辑,并提供操作逻辑系统沿为前提的同步时序逻辑,并提供操作逻辑系统 的开关阵列所需要的复杂控制时序(具有信号互的开关阵列所需要的复杂控制时序(具有信号互 锁和先后次序等要求的)。锁和先后次序等要求的)。 * 为什么要设计有限状态机?为什么要设计有限状态机? 如果我们能设计这样一个电路:如果我们能设计这样一个电路: 1 1)能记住自己目前所处的状态)能记住自己目前所处的状态 ; 2 2)状态的变化只可能在同一个时钟的跳变沿时)状态的变化只可能在同一个时钟的跳变沿时 刻发生,而不可能发生在任意时刻;刻发生,而不可能发生在任意时刻; 3 3)在时钟跳变沿时刻,如输入条件满足,则进)在时钟跳变沿时刻,如输入条件满足,则进 入下一状态,并记住自己目前所处的状态,入下一状态,并记住自己目前所处的状态, 否则仍保留原来的状态;否则仍保留原来的状态; 4 4)在进入不同的状态时刻,对系统的开关阵列)在进入不同的状态时刻,对系统的开关阵列 做开启或关闭的操作。做开启或关闭的操作。 * 为什么要设计有限状态机?为什么要设计有限状态机? clock 10ns s2 开 关 s1 t t t sn s3 t t t s4 * 为什么要设计有限状态机?为什么要设计有限状态机? 有了以上电路,我们就不难设计出复杂的控制序列有了以上电路,我们就不难设计出复杂的控制序列 来操纵数字系统的控制开关阵列。能达到以上要来操纵数字系统的控制开关阵列。能达到以上要 求的电路就是时序和组合电路互相结合的产物:求的电路就是时序和组合电路互相结合的产物: 同步有限状态机和由状态和时钟共同控制的开关同步有限状态机和由状态和时钟共同控制的开关 逻辑阵列。逻辑阵列。 我们只要掌握有限状态机的基本设计方法,加上我们只要掌握有限状态机的基本设计方法,加上 对基本电路的掌握,再加上对数据处理的过程的对基本电路的掌握,再加上对数据处理的过程的 细致了解,我们就可以避免由于逻辑器件和布线细致了解,我们就可以避免由于逻辑器件和布线 延迟产生的冒险竞争现象所造成的破坏,设计出延迟产生的冒险竞争现象所造成的破坏,设计出 符合要求的复杂数字逻辑系统。符合要求的复杂数字逻辑系统。 * 数字系统的构成示意图数字系统的构成示意图 同步有限状态机 ena_2 ena_3enaena_n_nena_1 clockclock 组合逻辑 1 寄存器组 组合逻辑 2 寄存器组 组合逻辑 3 寄存器组 组合逻辑 n 寄存器组 input_1 input_2input_n * 同步有限状态机的设计同步有限状态机的设计 什么是有限状态机(什么是有限状态机( fsm fsm ) fsmfsm的种类和不同点的种类和不同点 设计举例设计举例 * 什么是有限状态机?什么是有限状态机? - - 有限状态机是由寄存器组和组合逻辑构成的有限状态机是由寄存器组和组合逻辑构成的 硬件时序电路硬件时序电路; - - 其状态(即由寄存器组的其状态(即由寄存器组的1 1和和0 0的组合状态所的组合状态所 构成的有限个状态)只能在构成的有限个状态)只能在同一同一时钟跳变沿时钟跳变沿 的的 情况下才能从一个状态转向另一个状态情况下才能从一个状态转向另一个状态; - - 究竟转向哪一状态不但取决于各个输入值究竟转向哪一状态不但取决于各个输入值, 还取决于当前状态还取决于当前状态。 - - 状态状态机可用于产生在时钟跳变沿时刻开关的机可用于产生在时钟跳变沿时刻开关的 复杂的控制逻辑,是数字逻辑的控制核心。复杂的控制逻辑,是数字逻辑的控制核心。 * mealy mealy 状态机状态机 下一个状态下一个状态 = f(= f(当前状态,输入信号当前状态,输入信号) ); 输出信号输出信号 = g(= g(当前状态,输入信号当前状态,输入信号) ); 图1 . 时钟同步的状态机结构 (mealy 状态机) 下一状态 的逻辑 f 输出逻辑 g 状态 寄存器 时钟信号时钟信号clkclk clk 输入 输入输入 输出输出 当前状态当前状态激励信号激励信号 * moor moor 状态机状态机 下一个状态下一个状态 = f(= f(当前状态,输入信号当前状态,输入信号) ) 输出信号输出信号 = g(= g(当前状态当前状态) ); 下一状 态的逻 辑 f 输出逻辑 g 状态 寄存器 时钟信号时钟信号clkclk clk clk 输入输入 输入输入 输出输出 当前状态当前状态激励信号激励信号 图2. 时钟同步的状态机结构 (moor状态机) * 带流水线输出的带流水线输出的 mealy mealy 状态机状态机 下一个状态下一个状态 = f(= f(当前状态,输入信号当前状态,输入信号) ); 输出信号输出信号 = g(= g(当前状态,输入信号当前状态,输入信号) ); 输出输出 图3 带流水线输出的mealy 状态机 下一状态下一状态 的逻辑的逻辑 f f 输出 逻辑 g 状态状态 寄存器寄存器 时钟信号时钟信号clkclk clk clk 输入输入 输入输入 当前状态当前状态 激励信号激励信号 输出流输出流 水线寄水线寄 存器存器 clk clk 输入输入 * 简单的状态机设计举例简单的状态机设计举例 状态转移图表示 rtl级可综合的 verilog 模块表示 * 有限状态机的图形表示 图形表示:状态、转移、条件和逻辑开关 图3.4 状态转移图 idle start stop clear a/k1=0 !a a/k2=1 !reset /k2=0 k1=0 !reset /k2=0 k1=0 (!reset |!a )/ k2=0 k1=1 !reset /k2=0 k1=0 * 有限状态机的有限状态机的verilogverilog描述描述 定义模块名和输入输出端口;定义模块名和输入输出端口; 定义输入、输出变量或寄存器;定义输入、输出变量或寄存器; 定义时钟和复位信号;定义时钟和复位信号; 定义状态变量和状态寄存器;定义状态变量和状态寄存器; 用时钟沿触发的用时钟沿触发的alwaysalways块表示状态转移过程;块表示状态转移过程; 在复位信号有效时给状态寄存器赋初始值;在复位信号有效时给状态寄存器赋初始值; 描述状态的转换过程:符合条件,从一个状态到描述状态的转换过程:符合条件,从一个状态到 另外一个状态,否则留在原状态;另外一个状态,否则留在原状态; 验证状态转移的正确性,必须完整和全面。验证状态转移的正确性,必须完整和全面。 * 表示方法之一 module fsm (clock, reset, a, k2, k1); input clock, reset, a; /定义时钟、复位和输入信号 output k2, k1; /定义输出控制信号的端口 reg k2, k1; /定义输出控制信号的寄存器 reg 1:0 state ; /定义状态寄存器 parameter idle = 2b00, start = 2b01, stop = 2b10, clear = 2b11; /定义状态变量参数值 always (posedge clock) if (!reset) begin /定义复位后的初始状态和输出值 state = idle; k2=0; k1=0; end * 表示方法之一(续) else case (state) idle: begin if (a) begin state = start; k1=0; end else state = idle; end start: begin if (!a) state = stop; else state = start; end * 表示方法之一(续) stop: begin /符合条件进入新状态,否则留在原状态符合条件进入新状态,否则留在原状态 if (a) begin state = clear; k2= 1; end else state = stop; end clear: begin if (!a) begin state = idle; k2=0; k1=1; end else state = clear; end endcase endmodule * 表示方法之二 我们还可以用另一个 verilog hdl模型来表示同一个有限状态, 见下例。(用可综合的verilog模块设计用独热码表示状态的状态机) module fsm (clock, reset, a, k2, k1); input clock, reset, a; output k2, k1; reg k2, k1; reg 3:0 state ; parameter idle = 4b1000, start = 4b0100, stop = 4b0010, clear = 4b0001; * 表示方法之二(续) always (posedge clock) if (!reset) begin state = idle; k2=0; k1=0; end else case (state) idle: if (a) begin state = start; k1=0; end else state = idle; * 表示方法之二(续) start: if (!a) state = stop;start: if (!a) state = stop; else state = start; else state = start; stop: if (a) begin stop: if (a) begin state = clear; state = clear; k2= 1; k2= 1; end end else state = stop; else state = stop; clear: if (!a) begin clear: if (!a) begin state =idle; state =idle; k2=0; k1=1; k2=0; k1=1; end end else state = clear; else state = clear; * 表示方法之二(续) default: state = idle;default: state = idle; endcaseendcase endmoduleendmodule 例例22与与 例例11的主要不同点是状态编码,的主要不同点是状态编码, 例例22 采用了独热编码,而采用了独热编码,而 例例11则采用则采用graygray码,究码,究 竟采用哪一种编码好要看具体情况而定。竟采用哪一种编码好要看具体情况而定。 * 表示方法之三表示方法之三 在比较复杂的状态机设计过程中,我们往往把在比较复杂的状态机设计过程中,我们往往把 状态的变化与输出开关的控制分成两部分来考状态的变化与输出开关的控制分成两部分来考 虑。就象前面讲过的虑。就象前面讲过的mealymealy状态机输出部分的组状态机输出部分的组 合逻辑。为了调试方便,还常常把每一个输出合逻辑。为了调试方便,还常常把每一个输出 开关写成一个个独立的开关写成一个个独立的alwaysalways组合块。在调试组合块。在调试 多输出状态机时,这样做比较容易发现问题和多输出状态机时,这样做比较容易发现问题和 改正模块编写中出现的问题。建议同学们在设改正模块编写中出现的问题。建议同学们在设 计复杂的多输出状态机时采用下面的风格举例计复杂的多输出状态机时采用下面的风格举例 ,说明如下:,说明如下: * 表示方法之三(续)表示方法之三(续) module module fsmfsm (clock, reset, a, k2, k1); (clock, reset, a, k2, k1); input clock, reset, a;input clock, reset, a; output k2, k1;output k2, k1; regreg k2, k1; k2, k1; regreg 1:0 state, 1:0 state, nextstatenextstate ; ; parameter parameter idle = 2b00, idle = 2b00, start = 2b01, start = 2b01, stop = 2b10, stop = 2b10, clear = 2b11;clear = 2b11; * 表示方法之三(续)表示方法之三(续) /- /- 每一个时钟沿产生一次可能的状态变化每一个时钟沿产生一次可能的状态变化- - - always (always (posedgeposedge clock) clock) begin begin if (!reset) if (!reset) state = idle; state = idle; else else state = state = nextstatenextstate; ; end end /-/- * 表示方法之三(续)表示方法之三(续) /- /- 产生下一状态的组合逻辑产生下一状态的组合逻辑 - always (state or a)always (state or a) case (state) case (state) idle: if (a) idle: if (a) nextstatenextstate = start; = start; else else nextstatenextstate = idle; = idle; start: if (!a) start: if (!a) nextstatenextstate = stop; = stop; else else nextstatenextstate = start; = start; stop: if (a) stop: if (a) nextstatenextstate = clear; = clear; else else nextstatenextstate = stop; = stop; clear: if (!a) clear: if (!a) nextstatenextstate = idle; = idle; else else nextstatenextstate = clear; = clear; default: default: nextstatenextstate =2bxx; =2bxx; endcaseendcase * 表示方法之三(续)表示方法之三(续) /- /- 产生输出产生输出k1k1的组合逻辑的组合逻辑 - always (state or reset or a) always (state or reset or a) if (!reset) k1=0; if (!reset) k1=0; else else if (state = clear k1=1; else k1= 0; else k1= 0; /- /- 产生输出产生输出k2k2的组合逻辑的组合逻辑 - always (state or reset or a ) always (state or reset or a ) if (!reset) k2 = 0; if (!reset) k2 = 0; else else if (state = stop k2 = 1; else k2 = 0; else k2 = 0; /-/- endmoduleendmodule * 表示方法之四表示方法之四 用输出指定的码表示状态的状态机用输出指定的码表示状态的状态机 方法四采用了另一种方法:直接把状态码定方法四采用了另一种方法:直接把状态码定 义为输出。也就是把状态码的指定与状态机义为输出。也就是把状态码的指定与状态机 控制的输出联系起来,把状态的变化直接用控制的输出联系起来,把状态的变化直接用 作输出,这样做可以提高输出信号的开关速作输出,这样做可以提高输出信号的开关速 度并节省电路器件。这种设计方法常用在高度并节省电路器件。这种设计方法常用在高 速状态机中。建议同学们在设计高速状态机速状态机中。建议同学们在设计高速状态机 时采用方法四的风格。例中时采用方法四的风格。例中state3 state3 和和 state0state0分别表示前面两个例子中的输出分别表示前面两个例子中的输出k2k2 和和k1k1。 * 表示方法之四(续)表示方法之四(续) module module fsmfsm (clock, reset, a, k2, k1, state); (clock, reset, a, k2, k1, state); input clock, reset, a;input clock, reset, a; output k2, k1;output k2, k1; output 4:0 state;output 4:0 state; regreg 4:0 state ; 4:0 state ; assign assign k2= k2= state4; state4; / / 把状把状态变态变态变态变 量的最高位用作量的最高位用作输输输输出出 k2k2 assign assign k1= k1= state0; state0; / / 把状把状态变态变态变态变 量的最低位用作量的最低位用作输输输输出出 k1k1 * 表示方法之四(续)表示方法之四(续) parameter parameter /-output coded state assignment/-output coded state assignment - - /- k2_i_j_n_k1 /- k2_i_j_n_k1 idle = 5b0_0_0_0_0, idle = 5b0_0_0_0_0, start = 5b0_0_0_1_0, start = 5b0_0_0_1_0, stop = 5b0_0_1_0_0, stop = 5b0_0_1_0_0, stoptoclearstoptoclear = 5b1_1_0_0_0, = 5b1_1_0_0_0, clear = 5b0_1_0_1_0,clear = 5b0_1_0_1_0, cleartoidlecleartoidle = 5b0_0_1_1_1; = 5b0_0_1_1_1; * 表示方法之四(续)表示方法之四(续) always (always (posedgeposedge clock) clock) if (!reset) if (!reset) begin begin state = idle; state = idle; end end else else case (state) case (state) idle : if (a) idle : if (a) state = start; state = start; else state = idle; else state = idle; start: if (!a) state = stop; start: if (!a) state = stop; else state = start; else state = start; * 表示方法之四(续)表示方法之四(续) stop: if (a) stop: if (a) state = state = stoptoclearstoptoclear; ; else state = stop; else state = stop; stoptoclearstoptoclear: state = clear;: state = clear; clear: if (!a) clear: if (!a) state = state = cleartoidlecleartoidle; ; else state = clear; else state = clear; cleartoidlecleartoidle: state = idle;: state = idle; default: state = idle;default: state = idle; endcaseendcase endmoduleendmodule * 状态机的测试状态机的测试 上面四个例子是同一个状态机的四种不上面四个例子是同一个状态机的四种不 同的同的verilogverilog hdlhdl模型,它们都是可综模型,它们都是可综 合的,在设计复杂程度不同的状态机时合的,在设计复杂程度不同的状态机时 有它们各自的优势。如用不同的综合器有它们各自的优势。如用不同的综合器 对这四个例子进行综合,综合出的逻辑对这四个例子进行综合,综合出的逻辑 电路可能会有些不同,但逻辑功能是相电路可能会有些不同,但逻辑功能是相 同的。下面列出测试这些不同风格状态同的。下面列出测试这些不同风格状态 机的测试模块机的测试模块 * 状态机的测试模块状态机的测试模块 timescale 1ns/1nstimescale 1ns/1ns module t;module t; regreg a; a; regreg clock,rstclock,rst; ; wire k2,k1; wire k2,k1; initial / initialinitial / initial常用于仿真时信号的给出。常用于仿真时信号的给出。 begin begin a=0; a=0; rstrst = 1; / = 1; /给复位信号变量赋初始值给复位信号变量赋初始值 clock = 0; /clock = 0; /给时钟变量赋初始值给时钟变量赋初始值 #22 #22 rstrst = 0; / = 0; /使复位信号有效使复位信号有效 #133 #133 rstrst = 1; / = 1; /经过一个多周期后使复位信号无效经过一个多周期后使复位信号无效 endend * 状态机的测试模块状态机的测试模块 always #50 clock = clock; /always #50 clock = clock; /产生周期性的时钟产生周期性的时钟 always (always (posedgeposedge clock) / clock) /在每次时钟正跳变沿时刻产生不同的在每次时钟正跳变沿时刻产生不同的a a begin begin #30 a = $random%2; / #30 a = $random%2; / 每次每次a a是是 0 0还是还是1 1是随机的。是随机的。

温馨提示

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

评论

0/150

提交评论