1、序列检测有限状态机的实现一、 有限状态机有限状态机是绝大部分控制电路的核心结构,是表示有限个状态以及在这些状态之间转移和动作等行为的数学模型。有限状态机是指输出取决于过去输入部分和当前输入部分的时序逻辑电路。一般来说,除了输入部分和输出部分外,有限状态机还含有一组具有“记忆” 功能的寄存器 ,这些寄存器的功能是记忆有限状态机的内部状态,它们常被称为状态寄存器。在有限状态机中,状态寄存器的的下一个状态不仅与输入信号有关,而且还与该寄存器的当前状态有关,因此有限状态机又可以认为是组合逻辑和寄存器逻辑的一种组合。在实际的应用中,根据有限状态机是否使用输入信号,可将其分为 Moore型有限状态机和 M
2、ealy 型有限状态机两种类型。Moore 型有限状态机 其输出信号仅与当前状态有关,即可以把 Moore 型有限状态的输出看成是当前状态的函数。Mealy 型有限状态机 其输出信号不仅与当前状态有关,而且还与所有的输入信号有关,即可以把 Mealy 型有限状态机的输出看成是当前状态和所有输入信号的函数。二、 问题描述1、Moore 型序列检测状态机的设计利用 Verilog 设计一个电路,对输入的一串二进制数用于检测序列中 3 个或者 3 个以上的 1,其状态描述如下表所示。现态 现态 输入 次态 次态 输出0 0 0 0 0 00 0 1 0 1 00 1 0 0 0 00 1 1 1 0
3、 01 0 0 0 0 01 0 1 1 1 01 1 0 0 0 11 1 1 1 1 12、Mealy 型序列检测状态机的设计利用 Verilog 设计一个电路,对输入的一串二进制数用于检测序列中 3 个或者 3 个以上的 1,当检测到第三个 1 出现的时候,输出立刻变 1,否则输出为0。三、 设计准备本设计通过 ISE 软件硬件描述语言方式设计。定义一个输入端,一个清零端和一个时钟,输入端用来表示一串二进制数,清零端用来将状态机初始化,时钟用来更新当前状态。定义四个状态,分别表示当前无 1 输入、有一个 1 输入、有连续两个 1 输入以及连续三个或三个以上 1 输入。定义一个输出,用于检
4、测序列中 3 个或者 3 个以上的 1。四、 硬件描述语言输入1、Moore 型状态机源程序module Moore(input din,input clk,input rst,output reg op);reg 1:0 current,next;parameter S0 = 2b00,S1 = 2b01,S2 = 2b10,S3 = 2b11;always(posedge clk or negedge rst)beginif(!rst)current = 2b00;elsecurrent = next;endalways(current or din)begincase(current)S
5、0:beginop = 0;if(din = 0)next = S0;elsenext = S1;endS1:beginop = 0;if(din = 0)next = S0;elsenext = S2;endS2:beginop = 0;if(din = 0)next = S0;elsenext = S3;endS3:beginop = 1;if(din = 0)next = S0;elsenext = S3;enddefault:beginop = 0;next = S0;endendcaseendendmodule2、Mealy 型状态机源程序module Mealy(input clk
6、,input rst,input din,output reg op);reg 1:0 current,next;parameter S0 = 2b00,S1 = 2b01,S2 = 2b10,S3 = 2b11;always(posedge clk or negedge rst)beginif(!rst)current = 2b00;elsecurrent = next;endalways(current or din)begincase(current)S0:beginop = 0;if(din = 0)next = S0;elsenext = S1;endS1:beginop = 0;i
7、f(din = 0)next = S0;elsenext = S2;endS2:beginif(din = 0)next = S0;elsebeginnext = S3;op = 1;endendS3:beginif(din = 0)beginnext = S0;op = 0;endelsenext = S3;enddefault:beginop = 0;next = S0;endendcaseendendmodule五、 功能仿真在所建工程下添加 test 文件,用来进行逻辑功能验证。试输入二进制数列010110111011110000 进行逻辑功能验证。并通过 Modelsim 软件与 I
8、SE 联调生成对应的状态图,如图 1、2、3、4 所示。图 1 Moore 型状态机仿真波形图图 2 Moore 型状态机状态转换图图 3 Mealy 型状态机仿真波形图图 4 Mealy 型状态机状态转换图六、 综合优化综合优化将 Verilog 设计输入翻译成基本逻辑单元,根据目标与要求优化所生成的逻辑连接,最后输出标准格式的网表文件。再利用软件以最优的方式对逻辑软件进行逻辑元件布局,并准确实现元件间的互连。图 5 及图 6 为 ISE 生成的 RTL 仿真电路图。图 5 Moore 型状态机仿真电路图图 6 Mealy 型状态机仿真电路图七、 设计结果设计的源程序可以实现题目所提出的要求,并通过仿真进行验证。从仿真结果可以看出,Mealy 型状态机的输出在输入变化的时候立刻发生变化,而Moore 型状态机在输入变化后,还必须的等待时钟的到来,时钟使状态发生变化时才导致输出的变化,所以比 Mealy 型状态机要多等待一个时钟周期。