已看第五章VHDL有限状态机设计_第1页
已看第五章VHDL有限状态机设计_第2页
已看第五章VHDL有限状态机设计_第3页
已看第五章VHDL有限状态机设计_第4页
已看第五章VHDL有限状态机设计_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

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

文档简介

1、VHDL有限状态机设计有限状态机设计内容内容u有限状态机的基本概念有限状态机的基本概念u状态机的基本描述方式状态机的基本描述方式uVHDL语言描述状态机语言描述状态机u状态机设计举例状态机设计举例u三种进程描述状态机方式对比三种进程描述状态机方式对比u毛刺信号的数字排除方式毛刺信号的数字排除方式1 有限状态机的基本概念有限状态机的基本概念u状态机是一种思想方法状态机是一种思想方法状态机的本质就是对具有逻辑顺序或时序规律状态机的本质就是对具有逻辑顺序或时序规律事件的一种描述方法。具有逻辑顺序和时序规事件的一种描述方法。具有逻辑顺序和时序规律的事件都适合用状态机描述。律的事件都适合用状态机描述。1

2、 有限状态机的基本概念有限状态机的基本概念某学生在学校的学习生活可以简单地概括为宿某学生在学校的学习生活可以简单地概括为宿舍、教室、食堂之间的周而复始。舍、教室、食堂之间的周而复始。1 有限状态机的基本概念有限状态机的基本概念右图也是一张标准右图也是一张标准的状态转移图,通过的状态转移图,通过状态机的方式我们再状态机的方式我们再次清晰地描述另一个次清晰地描述另一个学生的在校生活方式。学生的在校生活方式。1 有限状态机的基本概念有限状态机的基本概念u例:设计一个以秒为单位的例:设计一个以秒为单位的4位流水灯。要求:位流水灯。要求:每秒只能点亮每秒只能点亮1个个LED,点亮方式为高电平有效。,点亮

3、方式为高电平有效。u例:设计一个串行数据流检测器。要求:输入连例:设计一个串行数据流检测器。要求:输入连续的二进制数,当检测到连续续的二进制数,当检测到连续“1”的个数大于的个数大于2个的时候,输出个的时候,输出“1”;其他状态输出;其他状态输出“0”。1 有限状态机的基本概念有限状态机的基本概念u有限状态机的定义有限状态机的定义所谓有限状态机是指那些输出取决于过去输入所谓有限状态机是指那些输出取决于过去输入部分和当前输入部分的时序逻辑电路。部分和当前输入部分的时序逻辑电路。1 有限状态机的基本概念有限状态机的基本概念u状态机的本质状态机的本质对具有对具有“逻辑顺序逻辑顺序”和和“时序规律时序

4、规律”事件的一事件的一种描述方法。种描述方法。u应用思路应用思路从状态变量入手,分析每个状态的输入,状态从状态变量入手,分析每个状态的输入,状态转移和输出,从而完成电路的功能。转移和输出,从而完成电路的功能。首先明确电路的输出关系,这些输出相当于状首先明确电路的输出关系,这些输出相当于状态的输出,回溯规划每个状态和状态转移条件态的输出,回溯规划每个状态和状态转移条件与状态输入。与状态输入。1 有限状态机的基本概念有限状态机的基本概念u状态机的基本要素状态机的基本要素状态:也叫状态变量。在逻辑设计中,使用状状态:也叫状态变量。在逻辑设计中,使用状态划分逻辑顺序和时序规律。态划分逻辑顺序和时序规律

5、。输出:输出指在某一个状态时特定发生的事件。输出:输出指在某一个状态时特定发生的事件。输入:指状态机中进入每个状态的条件,有的输入:指状态机中进入每个状态的条件,有的状态机没有输入条件,其中的状态转移较为简状态机没有输入条件,其中的状态转移较为简单,有的状态机有输入条件,当某个输入条件单,有的状态机有输入条件,当某个输入条件存在时才能转移到相应的状态。存在时才能转移到相应的状态。1 有限状态机的基本概念有限状态机的基本概念u有限状态机的组成有限状态机的组成组合逻辑组合逻辑组合逻辑又可分为次态逻辑和输出逻辑两个部分。其组合逻辑又可分为次态逻辑和输出逻辑两个部分。其中:次态逻辑的功能是用来确定有限

6、状态机的下一个中:次态逻辑的功能是用来确定有限状态机的下一个状态;输出逻辑是用来确定有限状态机的输出。状态;输出逻辑是用来确定有限状态机的输出。时序逻辑时序逻辑 时序逻辑:时序逻辑:同步时序方式工作下运转及状态转换。同步时序方式工作下运转及状态转换。寄存器逻辑寄存器逻辑寄存器逻辑的功能:用来存储有限状态机的内部状态。寄存器逻辑的功能:用来存储有限状态机的内部状态。1 有限状态机的基本概念有限状态机的基本概念u状态机实现三个功能状态机实现三个功能状态译码:根据输入以及系统当前的状态,状态译码:根据输入以及系统当前的状态, 由状态方程来决定下一状态的状态码。由状态方程来决定下一状态的状态码。状态输

7、出:根据当前的状态码决定电路当前输出。状态输出:根据当前的状态码决定电路当前输出。状态转换:将下一状态转变为当前状态。状态转换:将下一状态转变为当前状态。1 有限状态机的基本概念有限状态机的基本概念u1. 说明部分说明部分 ARCHITECTURE .IS TYPE FSM_ST IS (s0,s1,s2,s3); SIGNAL current_state, next_state: FSM_ST;u2.主控时序进程主控时序进程 负责状态机运转和在时钟驱动下的状态转换,随负责状态机运转和在时钟驱动下的状态转换,随外部时钟信号,以同步时序方式工作。外部时钟信号,以同步时序方式工作。u3.主控组合进

8、程主控组合进程 通过通过pr_state的改变,进入主控组合进程,根据外部的改变,进入主控组合进程,根据外部输入信号确定输出和下一状态的走向(输入信号确定输出和下一状态的走向(nx_state)u4. 辅助进程辅助进程1 有限状态机的基本概念有限状态机的基本概念u有限状态机的类型有限状态机的类型 从信号输出方式上分从信号输出方式上分Mealy型状态机型状态机Moore型状态机型状态机 从结构上分从结构上分单进程状态机单进程状态机两进程状态机两进程状态机三进程状态机三进程状态机 从表达方式上分从表达方式上分符号化状态机符号化状态机确定状态编码的状态机确定状态编码的状态机 从编码方式上分从编码方式

9、上分顺序编码状态机顺序编码状态机独热码状态机独热码状态机格雷码状态机格雷码状态机1 有限状态机的基本概念有限状态机的基本概念uMoore型有限状态机型有限状态机是指那些输出信号仅与当前状态有关的有限状是指那些输出信号仅与当前状态有关的有限状态机,即可以把态机,即可以把Moore型有限状态机的输出看型有限状态机的输出看成是当前状态的函数。成是当前状态的函数。Moore型有限状态机框图:型有限状态机框图:1 有限状态机的基本概念有限状态机的基本概念uMealy型有限状态机型有限状态机是指那些输出信号不仅与当前状态有关,而且是指那些输出信号不仅与当前状态有关,而且还与所有的输入信号有关的有限状态机,

10、即可还与所有的输入信号有关的有限状态机,即可以把以把Mealy有限状态机的输出看作当前状态和有限状态机的输出看作当前状态和所有输入信号的函数。可见,所有输入信号的函数。可见,Mealy有限状态有限状态机要比机要比Moore有限状态机复杂一些。有限状态机复杂一些。Mealy有限状态机框图:有限状态机框图:1 有限状态机的基本概念有限状态机的基本概念uMoore型和型和Mealy型有限状态机的区别:型有限状态机的区别:Moore型有限状态机仅与当前状态有关,而与型有限状态机仅与当前状态有关,而与输入信号无关;输入信号无关;Mealy型有限状态机不但与当前状态有关,而型有限状态机不但与当前状态有关,

11、而且还与状态机的输入信号有关。且还与状态机的输入信号有关。1 有限状态机的基本概念有限状态机的基本概念u采用何种有限状态机的判别条件:采用何种有限状态机的判别条件:Moore型有限状态机可能要比相应的型有限状态机可能要比相应的Mealy型型有限状态机需要更多的状态。有限状态机需要更多的状态。Moore型有限状态机的输出与当前的输入部分型有限状态机的输出与当前的输入部分无关,因此当前输入产生的任何效果将会延迟无关,因此当前输入产生的任何效果将会延迟到下一个时钟周期。可见,到下一个时钟周期。可见,Moore型状态机的型状态机的最大优点就是可以将输入部分和输出部分隔离最大优点就是可以将输入部分和输出

12、部分隔离开。开。对于对于Mealy型有限状态机来说,由于它的输出型有限状态机来说,由于它的输出是输入信号的函数,因此如果输入信号发生改是输入信号的函数,因此如果输入信号发生改变,那么输出可以在一个时钟周期内发生改变。变,那么输出可以在一个时钟周期内发生改变。1 有限状态机的基本概念有限状态机的基本概念u单进程状态机单进程状态机整个状态机的描述在一个进程中完成整个状态机的描述在一个进程中完成u双进程状态机双进程状态机将组合逻辑部分和时序逻辑部分分开描述,放将组合逻辑部分和时序逻辑部分分开描述,放在结构体的说明部分在结构体的说明部分u三进程状态机三进程状态机将组合逻辑部分再分为产生次态的组合逻辑部

13、将组合逻辑部分再分为产生次态的组合逻辑部分和产生输出的组合逻辑部分,与时序逻辑部分和产生输出的组合逻辑部分,与时序逻辑部分一起放在结构体的说明部分分一起放在结构体的说明部分1 有限状态机的基本概念有限状态机的基本概念u符号化状态机符号化状态机所谓符号化状态机,就是在程序的说明部分使所谓符号化状态机,就是在程序的说明部分使用用TYPE语句定义枚举类型,其元素用状态机语句定义枚举类型,其元素用状态机的状态名来定义。状态变量(如状态机的现态的状态名来定义。状态变量(如状态机的现态和次态)定义为变量或信号,并将状态变量的和次态)定义为变量或信号,并将状态变量的数据类型定义为含有既定状态元素的枚举类型。

14、数据类型定义为含有既定状态元素的枚举类型。在使用多进程时,为便于信息传递,要将状态在使用多进程时,为便于信息传递,要将状态变量定义为信号。变量定义为信号。1 有限状态机的基本概念有限状态机的基本概念u类型定义语句类型定义语句TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 OF 基本数基本数据类型据类型; 或或 TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义;例:例:TYPE st1 IS ARRAY (0 TO 15) OF STD_LOGIC;TYPE week IS (sun, mon, tue, wed, thu, fri, sat);符号化状态机应用符号

15、化状态机应用TYPE m_state IS (st0, st1, st2, st3, st4, st5);SIGNAL present_state, next_state : m_state;1 有限状态机的基本概念有限状态机的基本概念u确定状态编码的状态机确定状态编码的状态机使用符号化定义的枚举类型,枚举类型文字元使用符号化定义的枚举类型,枚举类型文字元素的编码通常是自动设置的,综合器根据优化素的编码通常是自动设置的,综合器根据优化情况、优化控制的设置或设计者的特殊设定来情况、优化控制的设置或设计者的特殊设定来确定各元素具体编码的二进制位数、数值及元确定各元素具体编码的二进制位数、数值及元素

16、间编码的顺序。素间编码的顺序。也可以在程序中指明编码方式。也可以在程序中指明编码方式。常用的编码方式常用的编码方式2进制编码进制编码格雷码编码格雷码编码One-hot编码编码1 有限状态机的基本概念有限状态机的基本概念u2进制编码进制编码状态机的每一个状态用二进制位来编码状态机的每一个状态用二进制位来编码例:实现例:实现4状态的状态机,其其二进制编码可状态的状态机,其其二进制编码可为为 状态状态1=“00”状态状态2=“01”状态状态3=“10”状态状态4=“11”需要的寄存器数量最少,有需要的寄存器数量最少,有n个寄存器就可以个寄存器就可以对对2n个状态进行编码。个状态进行编码。需要更多的外

17、部辅助逻辑,并且速度较慢。需要更多的外部辅助逻辑,并且速度较慢。1 有限状态机的基本概念有限状态机的基本概念u格雷码状态机编码格雷码状态机编码格雷码编码每次仅一个状态位的值发生变化格雷码编码每次仅一个状态位的值发生变化例:实现例:实现4状态的状态机,其格雷码编码可为状态的状态机,其格雷码编码可为 状态状态1=“00”状态状态2=“01”状态状态3=“11”状状态态4=“10”特点:触发器使用较少,速度较慢,不会产生特点:触发器使用较少,速度较慢,不会产生两位同时翻转的情况。当状态位的输出被异步两位同时翻转的情况。当状态位的输出被异步应用时,格雷码编码是有益的。应用时,格雷码编码是有益的。1 有

18、限状态机的基本概念有限状态机的基本概念uOne-hot状态机编码状态机编码One hot的编码方案对每一个状态采用一个触的编码方案对每一个状态采用一个触发器,即发器,即4个状态的状态机需个状态的状态机需4个触发器。同一个触发器。同一时间仅时间仅1个状态位处于有效电平(如逻辑个状态位处于有效电平(如逻辑“1”)例:实现例:实现4状态的状态机,其状态的状态机,其one hot编码可为编码可为 状态状态1=“0001”状态状态2=“0010”状态状态3=“0100”状态状态4=“1000”特点:触发器使用较多,但逻辑简单,速度快。特点:触发器使用较多,但逻辑简单,速度快。1 有限状态机的基本概念有限

19、状态机的基本概念u关于关于one-hot、gray-code、binary编码使编码使用说明用说明Binary、gray-code编码使用较少的触发器,编码使用较少的触发器,较多的组合逻辑,而较多的组合逻辑,而one-hot编码反之。由于编码反之。由于CPLD更多的提供组合逻辑,而更多的提供组合逻辑,而FPGA更多的更多的提供触发器资源,所以提供触发器资源,所以CPLD多使用多使用gray-code,而,而FPGA多使用多使用one-hot编码。编码。对于小型设计使用对于小型设计使用gray-code和和binary编码更编码更有效,而大型状态机使用有效,而大型状态机使用one-hot编码更有

20、效。编码更有效。1 有限状态机的基本概念有限状态机的基本概念u程序中指明编码方式程序中指明编码方式ARCHITECTURE BEHAV OF BINARY ISTYPE STATE_TYPE IS(S1, S2, S3, S4, S5, S6, S7);ATTRIBUTE ENUM_ENCODING: STRING;ATTRIBUTE ENUM_ENCODING OF STATE_TYPE: TYPE IS 001 010 011 100 101 110 111;ARCHITECTURE BEHAV OF ONE_HOT ISTYPE STATE_TYPE IS(S1, S2, S3, S4,

21、 S5, S6, S7);ATTRIBUTE ENUM_ENCODING: STRING;ATTRIBUTE ENUM_ENCODING OF STATE_TYPE: TYPE IS 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;Binary编码One-hot编码1 有限状态机的基本概念有限状态机的基本概念u程序中指明编码方式程序中指明编码方式2 状态机的基本描述方式状态机的基本描述方式u设计状态机的步骤:设计状态机的步骤: 分析设计要求,列出状态机的全部可能状态,分析设计要求,列出状态机的全部可

22、能状态,并对每一个状态进行编码。并对每一个状态进行编码。 根据状态转移关系和输出函数画出状态转移图。根据状态转移关系和输出函数画出状态转移图。 由状态转移图,用由状态转移图,用VHDLVHDL语句对状态机描述语句对状态机描述。 2 状态机的基本描述方式状态机的基本描述方式u状态转移图状态转移图状态转移图是状态机描述的最自然的方式,下状态转移图是状态机描述的最自然的方式,下图是使用图是使用HDL Designer设计的一个简单的状设计的一个简单的状态转移图。态转移图。2 状态机的基本描述方式状态机的基本描述方式u状态转移列表状态转移列表状态转移列表使用列表的方式描述状态机,是状态转移列表使用列表

23、的方式描述状态机,是数字逻辑电路常用的设计方法之一,经常被用数字逻辑电路常用的设计方法之一,经常被用于对状态化简,对于可编程逻辑设计,由于可于对状态化简,对于可编程逻辑设计,由于可用逻辑资源比较丰富,而且状态编码要考虑设用逻辑资源比较丰富,而且状态编码要考虑设计的稳定性、安全性等因素,所以并不经常使计的稳定性、安全性等因素,所以并不经常使用状态转移列表优化状态。用状态转移列表优化状态。状态 输入a=1b=1defaultS0S1S2S1S2S0S2S02 状态机的基本描述方式状态机的基本描述方式uHDL语言描述状态机语言描述状态机使用使用HDL语言描述状态机有一定的灵活性,但语言描述状态机有一

24、定的灵活性,但是决不是天马行空,而是有章可循的。通过一是决不是天马行空,而是有章可循的。通过一些规范的描述方法,可以使些规范的描述方法,可以使HDL语言描述的状语言描述的状态机更安全、稳定、高效、易于维护。下面是态机更安全、稳定、高效、易于维护。下面是使用使用“HDL Designer”软件,通过以上的状软件,通过以上的状态转移图自动生成的态转移图自动生成的VHDL描述的状态机代码。描述的状态机代码。自动生成的代码的形式,是严格按照三进程状自动生成的代码的形式,是严格按照三进程状态机描述风格实现的。态机描述风格实现的。 2 状态机的基本描述方式状态机的基本描述方式u1. 说明部分说明部分 AR

25、CHITECTURE .IS TYPE FSM_ST IS (s0,s1,s2,s3); SIGNAL current_state, next_state: FSM_ST;u2.主控时序进程主控时序进程 负责状态机运转和在时钟驱动下的状态转换,随负责状态机运转和在时钟驱动下的状态转换,随外部时钟信号,以同步时序方式工作。外部时钟信号,以同步时序方式工作。u3.主控组合进程主控组合进程 通过通过pr_state的改变,进入主控组合进程,根据外部的改变,进入主控组合进程,根据外部输入信号确定输出和下一状态的走向(输入信号确定输出和下一状态的走向(nx_state)u4. 辅助进程辅助进程ENTIT

26、Y smtest IS PORT( a : IN std_logic; b : IN std_logic; clk : IN std_logic; rst : IN std_logic; x : OUT std_logic; y : OUT std_logic );- DeclarationsEND smtest ;LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all; ARCHITECTURE fsm OF smtest IS TYPE STATE_TYPE IS ( s0, s1, s2 ); - Dec

27、lare current and next state signals SIGNAL current_state : STATE_TYPE; SIGNAL next_state : STATE_TYPE;BEGIN - clocked_proc : PROCESS ( clk, rst ) - BEGIN IF (rst = 0) THEN current_state = s0; ELSIF (clkEVENT AND clk = 1) THEN current_state IF (b=1) THEN next_state = s2; ELSIF (a=1) THEN next_state =

28、 s1; ELSE next_state IF (a=1) THEN next_state = s2; ELSIF (b=1) THEN next_state = s0; ELSE next_state next_state next_state x y NULL; END CASE; END PROCESS output_proc; END fsm;状态类型定义时序逻辑进程输入组合逻辑进程输出组合逻辑进程3 VHDL语言描述状态机语言描述状态机uRTL级级FSM描述评判标准描述评判标准安全,稳定性高安全,稳定性高所谓所谓FSM安全是指安全是指FSM不会进入死循环,特别是不会进入非不会进入死循

29、环,特别是不会进入非预知状态,而且由于某些扰动进入非设计状态,也能很快的恢预知状态,而且由于某些扰动进入非设计状态,也能很快的恢复到正常的状态循环中来。这里面有两层含义,第一:要求该复到正常的状态循环中来。这里面有两层含义,第一:要求该FSM的综合实现结果无毛刺等异常扰动;第二:要求状态机的综合实现结果无毛刺等异常扰动;第二:要求状态机要完备,即使收到异常扰动进入非设计状态,也能很快恢复到要完备,即使收到异常扰动进入非设计状态,也能很快恢复到正常状态。正常状态。速度快,满足设计的频率要求速度快,满足设计的频率要求任何任何RLT设计都应该满足设计的频率要求。设计都应该满足设计的频率要求。面积小,

30、满足设计的面积要求面积小,满足设计的面积要求任何任何RTL设计都应该满足设计的面积要求。设计都应该满足设计的面积要求。FSM设计要清晰易懂、易维护设计要清晰易懂、易维护不规范的不规范的FSM写法上很难让其他人解读,甚至过一段时间后写法上很难让其他人解读,甚至过一段时间后设计者也发现很难维护。设计者也发现很难维护。3 VHDL语言描述状态机语言描述状态机u时序逻辑设计时序逻辑设计由右图可知,由右图可知,clock和和reset作为时序逻辑部分的输入,作为时序逻辑部分的输入,Nx_state也使输入之一。也使输入之一。Pr_state作为其输出。可以作为其输出。可以描述如下描述如下PROCESS

31、(reset, clock)BEGINIF (reset = 1) THEN pr_state = state0;ELSIF (clockEVENT AND clock = 1) THEN pr_state IF (input=.) THEN nx_state IF (input=.) THEN nx_state IF (input=.) THEN nx_state = state3; ELSIF . END IF;.END CASE;END PROCESS;PROCESS (input, pr_state)BEGIN IF (input=. AND pr_state=. ) THEN out

32、put = ; ELSIF . END IF;END PROCESS;ROCESS (pr_state)BEGIN IF (pr_state=. ) THEN output = ; ELSIF . END IF;END PROCESS;3 VHDL语言描述状态机语言描述状态机u通过以上分析,我们在这里给出使用通过以上分析,我们在这里给出使用VHDL语言描述状态机的两个一般性的语言描述状态机的两个一般性的“套路套路” 。3 VHDL语言描述状态机语言描述状态机u模板一模板一LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;-ENTITY ISPORT (input

33、: IN; reset, clock: IN STD_LOGIC; output: OUT);END ;-ARCHITECTURE OFISTYPE state IS (state0, state1, state2, state3, .);SIGNAL pr_state, nx_state: state;BEGIN-Lower section-PROCESS (reset, clock)BEGIN IF (reset = 1) THENpr_state = state0; ELSIF (clockEVENT AND clock = 1) THENpr_state IF (input=.) TH

34、EN outpur = ; nx_state IF (input=.) THEN output = ; nx_state IF (input=.) THEN outpur = ; nx_state = state3; ELSI . END IF; . END CASE;END PROCESS;END ;3 VHDL语言描述状态机语言描述状态机u模板二模板二LIBRARY ieee;USE ieee.std_logic_1164.all;-ENTITY ISPORT (input: IN ; reset, clock: IN STD_LOGIC; output: OUT );END ;-ARCH

35、ITECTURE OFISTYPE states IS (state0, state1, state2, state3, .);SIGNAL pr_state, nx_state: states;SIGNAL temp: ;BEGIN-Lower section:-PROCESS (reset, clock)BEGIN IF (reset = 1) THENpr_state = state0; ELSIF (clockEVENT AND clock = 1) THENoutput = temp;pr_state temp = ;IF (condition) THEN nx_state temp

36、 = ;IF (condition) THEN nx_state temp = ;IF (condition) THEN nx_state = state3;.END IF; . END CASE;END PROCESS;END ;仅一个寄存器3 VHDL语言描述状态机语言描述状态机u举例(模板一)举例(模板一)-LIBRARY ieee;USE ieee.std_logic_1164.all;-ENTITY simple_fsm ISPORT (a, b, d, clk, rst: IN BIT; x: OUT BIT);END simple_fsm;-ARCHITECTURE simple

37、_fsm OF simple_fsm ISTYPE state IS (stateA, stateB);SIGNAL pr_state, nx_state: state;BEGIN-Lower section: -PROCESS (rst, clk)BEGIN IF (rst = 1) THENpr_state = stateA; ELSIF (clkEVENT AND clk = 1) THENpr_state x = a;IF (d = 1) THEN nx_state = stateB;ELSE nx_state x = b;IF (d = 1) THEN nx_state = stat

38、eA;ELSE nx_state = stateB;END IF; END CASE;END PROCESS;END simple_fsm;使用synplify综合后的RTL图3 VHDL语言描述状态机语言描述状态机u举例(模板二)举例(模板二)-LIBRARY ieee;USE ieee.std_logic_1164.all;-ENTITY simple_fsm ISPORT (a, b, d, clk, rst: IN BIT; x: OUT BIT);END simple_fsm;-ARCHITECTURE simple_fsm OF simple_fsm ISTYPE state IS

39、 (stateA, stateB);SIGNAL pr_state, nx_state: state;SIGNAL temp: BIT := 0;BEGIN-Lower section: -PROCESS (rst, clk)BEGIN IF (rst = 1) THENpr_state = stateA; ELSIF (clkEVENT AND clk = 1) THENx = temp;pr_state temp = a;IF (d = 1) THEN nx_state = stateB;ELSE nx_state temp = b;IF (d = 1) THEN nx_state = s

40、tateA;ELSE nx_state = stateB;END IF; END CASE;END PROCESS;END simple_fsm;使用synplify综合后的RTL图多出一个输出寄存器3 VHDL语言描述状态机语言描述状态机u两种方式的仿真结果对比两种方式的仿真结果对比模板一方式实现的Mealy型状态机,其输出结果与时钟不同步。模板二方式实现的同样的状态机,其输出结果与时钟是同步的。3 VHDL语言描述状态机语言描述状态机u结论结论从形式上看:模板一只存储了从形式上看:模板一只存储了pr_state;而模;而模板二同时存储了板二同时存储了output。对于对于Mealy型状态机

41、,为了时序同步,必须采型状态机,为了时序同步,必须采用模板二的方式。用模板二的方式。而而moore型状态机,则不需要使用模板二的描型状态机,则不需要使用模板二的描述方式。述方式。模板一模板二4 Moore型状态机举例型状态机举例u上例是一个上例是一个Mealy型状态机。下面我们来型状态机。下面我们来设计一个设计一个Moore型状态机。型状态机。例:设计一个串行数据流检测器。要求:输入例:设计一个串行数据流检测器。要求:输入连续的二进制数,当检测到连续连续的二进制数,当检测到连续“1”的个数的个数大于大于2个的时候,输出个的时候,输出“1”;其他状态输出;其他状态输出“0”。分析:确定所需的状态

42、数,取决于数据流中出分析:确定所需的状态数,取决于数据流中出现连续现连续“1”的个数,应该为的个数,应该为4个状态。个状态。4 Moore型状态机举例型状态机举例画出状态转移图画出状态转移图zero(q=0)one(q=0)two(q=0)three(q=1)rstd=0d=1d=0d=0d=0d=1d=1d=14 Moore型状态机举例型状态机举例根据状态转移图,写出根据状态转移图,写出VHDL代码代码-LIBRARY ieee;USE ieee.std_logic_1164.all;-ENTITY string_detector ISPORT (d, clk, rst: IN BIT; q

43、: OUT BIT);END string_detector;-ARCHITECTURE my_arch OF string_detector ISTYPE state IS (zero, one ,two, three);SIGNAL pr_state, nx_state: state;BEGIN-Lower section;-PROCESS (rst, clk)BEGIN IF (rst = 1) THEN pr_state = zero; ELSIF (clkEVENT AND clk = 1) THEN pr_state q = 0;4 Moore型状态机举例型状态机举例 IF (d

44、= 1) THEN nx_state = one;ELSE nx_state q = 0;IF (d = 1) THEN nx_state = two;ELSE nx_state q = 0;IF (d = 1) THEN nx_state = three;ELSE nx_state q = 1;IF (d = 1) THEN nx_state = three; ELSE nx_state = zero; END IF; END CASE;END PROCESS;END my_arch;4 Moore型状态机举例型状态机举例设计后使用设计后使用synplify生成的状态转移图如下生成的状态转移

45、图如下虽然使用的是模板一的风格描述的状态机,但是输出依然可以保持与时钟上升沿同步。4 Moore型状态机举例型状态机举例功能仿真后的结果功能仿真后的结果虽然使用的是模板一的风格描述的状态机,但是输出依然可以保持与时钟上升沿同步。虽然使用的是模板一的风格描述的状态机,但是输出依然可以保持与时钟上升沿同步。可见,对于可见,对于Moore状态机,不需要对输出进行状态机,不需要对输出进行同步。同步。 4 Moore型状态机举例型状态机举例u使用使用synplify综合之后,可以看出默认的综合之后,可以看出默认的编码方式是编码方式是one-hot编码。编码。综合后是one-hot编码方式4 Moore型

46、状态机举例型状态机举例u如果将在原来的程序的基础上通过如果将在原来的程序的基础上通过attribute语句指定编码方式,即将结构体语句指定编码方式,即将结构体的声明部分添加如下代码,可将编码方式的声明部分添加如下代码,可将编码方式改为二进制编码:改为二进制编码:ATTRIBUTE enum_encoding: string;ATTRIBUTE enum_encoding OF state : TYPE IS 00 01 10 11;综合后是binary码编码方式4 Moore型状态机举例型状态机举例u以上两种情况是在默认综合的情况下生成以上两种情况是在默认综合的情况下生成的,即没有将的,即没有

47、将“FSM Explorer”的选项勾的选项勾选。选。u如果将如果将“FSM Explorer”选项勾选,那么选项勾选,那么即使是在程序中指定了编码方式,其综合即使是在程序中指定了编码方式,其综合后的状态编码也是后的状态编码也是one-hot编码。编码。u因此,在状态机设计的时候,大家要注意因此,在状态机设计的时候,大家要注意软件的使用细节,应当有意识的通过软件软件的使用细节,应当有意识的通过软件进行性能优化。进行性能优化。没有勾选“FSM Explorer”5 三种进程描述状态机方式对比三种进程描述状态机方式对比u单进程描述单进程描述它就是将状态机的三个逻辑单元(状态寄存器、它就是将状态机的

48、三个逻辑单元(状态寄存器、下状态产生逻辑、输出逻辑)合并起来,采用下状态产生逻辑、输出逻辑)合并起来,采用一个进程描述。一个进程描述。适用于简单的设计;适用于简单的设计;对于复杂的状态机,可读性差,易出错,不利对于复杂的状态机,可读性差,易出错,不利于于EDA软件优化。软件优化。5 三种进程描述状态机方式对比三种进程描述状态机方式对比下一状态组合逻辑寄存输出逻辑当前状态时序逻辑u单进程描述单进程描述u单进程描述单进程描述下一状态组合逻辑寄存输出逻辑当前状态时序逻辑5 三种进程描述状态机方式对比三种进程描述状态机方式对比u双进程描述双进程描述将输出进程和状态转移进程合并起来,采用一将输出进程和状

49、态转移进程合并起来,采用一个组合逻辑来描述。个组合逻辑来描述。通常情况下,综合工具可以较好地识别这两部通常情况下,综合工具可以较好地识别这两部逻辑并进行优化,但建议如果不是输出逻辑非逻辑并进行优化,但建议如果不是输出逻辑非常简单,还是采用两个不同的进程来描述,这常简单,还是采用两个不同的进程来描述,这样综合工具可以明确下状态转移逻辑,优化效样综合工具可以明确下状态转移逻辑,优化效果较好。果较好。另一种双进程描述另一种双进程描述将下状态转移逻辑和当将下状态转移逻辑和当前状态寄存器描述结合,省略中间变量。前状态寄存器描述结合,省略中间变量。5 三种进程描述状态机方式对比三种进程描述状态机方式对比u

50、双进程描述双进程描述第二个进程(纯组合逻辑),描述状态转移条件的判断。第一个进程(同步时序),格式化地描述次态到现态的转移。一般情况是组合逻辑输出,如果时序允许,尽量插入寄存器输出。5 三种进程描述状态机方式对比三种进程描述状态机方式对比u三进程描述三进程描述一般可以采用三个进程来描述状态机:一般可以采用三个进程来描述状态机:描述状态寄存器的时序进程描述状态寄存器的时序进程描述下状态产生逻辑的组合进程描述下状态产生逻辑的组合进程定义输出的组合逻辑进程定义输出的组合逻辑进程5 三种进程描述状态机方式对比三种进程描述状态机方式对比u三进程描述三进程描述第一个进程(同步时序)格式化描述次态寄存器迁移

51、到现态寄存器第二个进程(纯组合逻辑),描述状态转移条件判断第三个进程(同步时序),格式化描述次态的寄存器输出。5 三种进程描述状态机方式对比三种进程描述状态机方式对比u举例:举例:分别使用单进程、双进程、三进程描述方式如分别使用单进程、双进程、三进程描述方式如下状态转移图所示的状态机:下状态转移图所示的状态机:5 三种进程描述状态机方式对比三种进程描述状态机方式对比u单进程描述的单进程描述的VHDL代码代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine1 ISPORT ( clk, reset : IN STD_LOGIC;

52、state_inputs : IN STD_LOGIC_VECTOR (0 TO 1); comb_outputs : OUT INTEGER RANGE 0 TO 15 );END s_machine2;ARCHITECTURE behv OF s_machine1 ISTYPE FSM_ST IS (s0, s1, s2, s3);VARIABLE state: FSM_ST;BEGINPROCESS (reset, clk, state, state_inputs)BEGIN IF reset = 1 THEN state comb_outputs = 5; IF state_input

53、s = 00 THEN state = s0; ELSE state comb_outputs = 8; IF state_inputs = 00 THEN state = s1; ELSE state comb_outputs = 12; IF state_inputs = 11 THEN state = s3; ELSE state comb_outputs = 14; IF state_inputs = 11 THEN state = s3; ELSE state = s0; END IF;END CASE; END IF;END PROCESS;END behv; -(完)(完)5 三

54、种进程描述状态机方式对比三种进程描述状态机方式对比u单进程描述单进程描述RTL图图5 三种进程描述状态机方式对比三种进程描述状态机方式对比u双进程描述的双进程描述的VHDL代码代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine ISPORT ( clk, reset : IN STD_LOGIC; state_inputs : IN STD_LOGIC_VECTOR (0 TO 1); comb_outputs : OUT INTEGER RANGE 0 TO 15 );END s_machine;ARCHITECTURE b

55、ehv OF s_machine ISTYPE FSM_ST IS (s0, s1, s2, s3);SIGNAL current_state, next_state : FSM_ST;BEGINREG: PROCESS (reset, clk)BEGIN IF reset = 1 THEN current_state = s0; ELSIF clk = 1 AND clkEVENT THEN current_state comb_outputs = 5; IF state_inputs = 00 THEN next_state = s0; ELSE 5 三种进程描述状态机方式对比三种进程描述

56、状态机方式对比 next_state comb_outputs = 8; IF state_inputs = 00 THEN next_state = s1; ELSE next_state comb_outputs = 12; IF state_inputs = 11 THEN next_state = s3; ELSE next_state comb_outputs = 14; IF state_inputs = 11 THEN next_state = s3; ELSE next_state = s0; END IF; END CASE;END PROCESS;END behv;5 三种

57、进程描述状态机方式对比三种进程描述状态机方式对比u双进程描述产生的双进程描述产生的RTL图图5 三种进程描述状态机方式对比三种进程描述状态机方式对比u三进程描述的三进程描述的VHDL代码代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine2 ISPORT ( clk, reset : IN STD_LOGIC;state_inputs : IN STD_LOGIC_VECTOR (0 TO 1);comb_outputs : OUT INTEGER RANGE 0 TO 15 );END s_machine2;ARCHITECT

58、URE behv OF s_machine2 ISTYPE FSM_ST IS (s0, s1, s2, s3);SIGNAL current_state, next_state: FSM_ST;BEGINREG: PROCESS (reset, clk)BEGIN IF reset = 1 THEN current_state = s0; ELSIF clk = 1 AND clkEVENT THEN current_state IF state_inputs = 00 THEN next_state = s0; ELSE next_state IF state_inputs = 01 TH

59、EN next_state = s1;5 三种进程描述状态机方式对比三种进程描述状态机方式对比 ELSE next_state IF state_inputs = 10 THEN next_state = s3; ELSE next_state IF state_inputs = 11 THENnext_state = s3; ELSE next_state comb_outputs comb_outputs comb_outputs comb_outputs major_green = 1;minor_green = 0;IF (car = 1) THEN start_timer major

60、_green = 0;minor_green = 1;IF (timed= 1) THEN start_timer = 1; state := G;END IF;END CASE;END IFEND PROCESS;6 ASM图法状态机设计图法状态机设计u单进程状态机:单进程状态机:单进程状态变量可以定义为变量类型,放在进程的说单进程状态变量可以定义为变量类型,放在进程的说明部分明部分一般在进程的开头写上时钟有效边沿的检测语句一般在进程的开头写上时钟有效边沿的检测语句注意在这里进程敏感参数表中的注意在这里进程敏感参数表中的car和和timed可省去可省去rising_edge(clock)也可

温馨提示

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

评论

0/150

提交评论