第5章 基本逻辑电路的VHDL设计.ppt_第1页
第5章 基本逻辑电路的VHDL设计.ppt_第2页
第5章 基本逻辑电路的VHDL设计.ppt_第3页
第5章 基本逻辑电路的VHDL设计.ppt_第4页
第5章 基本逻辑电路的VHDL设计.ppt_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 基本逻辑电路的VHDL设计,【学习目标】 通过本章学习应掌握组合逻辑电路设计,主要有基本门电路、编码器、译码器、加法器、三态输出电路等组合逻辑电路设计技术;时序逻辑电路设计,主要有触发器、移位寄存器、计数器等时序逻辑电路设计技术;状态机基本概念、状态机设计流程、一般有限状态机的VHDL设计、Moore型有限状态机设计、Mealy型有限状态机设计、有限状态机的编码等。,5.1 组合逻辑电路设计,5.1.1 基本门电路设计 1与非门电路 与非门电路包括二输入与非门、三输入与非门、四输入与非门和多输入与非门等。下面介绍二输入与非门电路的设计方法,其他的设计方法与二输入与非门的设计方法类似,在

2、这里不作更多论述。二输入与非门电路的逻辑方程式为Y= ,逻辑真值表见表5.1,二输入与非门的电路符号如图5.1所示,表5.1 二输入与非门的真值表,图5.1 二输入与非门的电路符号,5.1 组合逻辑电路设计,5.1.1 基本门电路设计 1与非门电路 (1)VHDL设计方法 二输入与非门电路的逻辑真值表见表5.1,二输入与非门的电路符号如图5.1所示。,5.1.1 基本门电路设计 1与非门电路 (1)VHDL设计方法 【例5.1】二输入与非门的VHDL描述方法一: LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY nand_2 IS PORT (

3、a, b: IN STD_LOGIC; y: OUT STD_LOGIC); END; ARCHITECTURE one OF nand_2 IS BEGIN y=a nand b; END;,5.1 组合逻辑电路设计,5.1.1 基本门电路设计 1与非门电路 (1)VHDL设计方法 【例5.2】二输入与非门的VHDL描述方法二: LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY nand_2 IS PORT (a, b: INSTD_LOGIC; y: OUTSTD_LOGIC); END; ARCHITECTURE one OF nand_

4、2 IS SIGNAL ab: STD_LOGIC_VECTOR (1 DOWNTO 0); BEGIN ab=a -接下页,5.1 组合逻辑电路设计,5.1.1 基本门电路设计 1与非门电路 -接上页 process (ab) is begin case ab is when “00”=y” 相当于THEN或于是 when 01=yyyy=null; end case; end process; end;,5.1 组合逻辑电路设计,(a) 用nand实现的二输入 与非门的RTL电路,(b)用 case语句实现的二输入 与非门的RTL电路,图5.2 二输入与非门RTL电路,5.1 组合逻辑电路

5、设计,5.1.1 基本门电路设计 1与非门电路 (1)VHDL设计方法,二输入与非门的功能仿真结果如图5.3所示,观察波形可知,输入为a与b,输出为y,且其逻辑关系满足二输入与非门真值表的要求。,图5.3 二输入与非门的功能仿真图,5.1 组合逻辑电路设计,5.1.1 基本门电路设计 1与非门电路 (2)仿真结果,5.1.1 基本门电路设计 2 基本逻辑门电路的VHDL描述 【例5.3】基本逻辑门电路的VHDL描述 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY gate IS PORT (a, b: IN STD_LOGIC; y1,y2,

6、y3,y4,y5,y6: OUT STD_LOGIC); END; ARCHITECTURE one OF gate IS BEGIN y1=a and b; -构成与门 y2=a or b; -构成或门 y3= not a ; -构成非门 y4=a nand b; -构成与非门 y5=a nor b; -构成异或门 y6=not(a xor b); -构成异或非门 END;,5.1 组合逻辑电路设计,5.1.2 编码器设计 在数字系统中,常常需要将某信息变换为某一特定的代码。把二进制码按一定的规律进行编排,使每组代码具有特定的含义,称为编码。具有编码功能的逻辑电路称为编码器。 编码器是将 2

7、N 个分立的信息代码以N个二进制码来表示。,5.1 组合逻辑电路设计,5.1.2 编码器设计 1. 8线-3线编码器的VHDL描述 8线-3线编码真值表见表5.2所示。 表5.2 8线-3线编码真值表,5.1 组合逻辑电路设计,【例5.4】 8线-3线编码器的VHDL设计 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY encoder8_3 IS PORT (i: INSTD_LOGIC_VECTOR (7 downto 0) ; y: OUT STD_LOGIC_VECTOR(2 downto 0); END; ARCHITECTURE o

8、ne OF encoder8_3 IS BEGIN Process (i) is begin case i is -接下页,5.1 组合逻辑电路设计,5.1.2 编码器设计 1. 8线-3线编码器的VHDL描述,when “00000001”=yyyyyyyyy=000; end case; end process; end process; end;,5.1 组合逻辑电路设计,5.1.2 编码器设计 1. 8线-3线编码器的VHDL描述,本例中,运用了case语句完成了编码器内部逻辑结构设计,其RTL电路图如图5.4所示。,图5.4 8线-3线编码器的RTL电路图,5.1 组合逻辑电路设计,

9、5.1.2 编码器设计 1. 8线-3线编码器的VHDL描述,2. 8线-3线编码器的功能仿真 8线-3线编码器的功能仿真结果如图5.5所示。,图5.5 8线-3线编码器功能仿真波形图,5.1 组合逻辑电路设计,5.1.2 编码器设计,5.1.3 译码器设计 译码是编码的逆过程,它的功能是将具有特定含义的二进制码进行辨别,并转换成控制信号。具有译码功能的逻辑电路称为译码器。,5.1 组合逻辑电路设计,5.1.3 译码器设计1. 2线- 4线译码器,2线-4线译码器的真值表见表5.3所示。,表5.3 2线-4线译码器的真值表,5.1 组合逻辑电路设计,(1)2线-4线译码器的VHDL设计 lib

10、rary ieee; -【例5.5】 2线-4线译码器的VHDL代码 use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity decode_24 is port (a: in std_logic_vector(1 downto 0); z: out std_logic_vector(3 downto 0); end ; architecture str of decode_24 is Begin with a select z=0001 when 00, 0010 when 01, 0100 when 10, 1

11、000 when 11, XXXX when others; end;,5.1 组合逻辑电路设计,5.1.3 译码器设计1. 2线- 4线译码器,图5.6 2线-4线译码器的RTL电路,5.1 组合逻辑电路设计,5.1.3 译码器设计1. 2线- 4线译码器,(2)2线-4线译码器的仿真波形 如图5.7所示,当输入使“00”、“01”、“10”、“11”时分别输出“0001”、“0010”、“0100”和“1000”,这与真值表中显示的逻辑关系一致。,图5.7 2线-4线译码器的仿真波形图,5.1 组合逻辑电路设计,5.1.3 译码器设计1. 2线- 4线译码器,7段数码显示译码电路是一个组合

12、逻辑电路,通常的小规模专用集成IC,如74系列或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。,5.1 组合逻辑电路设计,5.1.3 译码器设计 2. 7段数码显示译码器设计,【例5.6】 7段BCD译码显示器的VHDL描述 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY LED_SEG IS PORT (A: IN STD_LOGIC_VECTOR (3 DOWNTO 0); LED:

13、 OUT STD_LOGIC_VECTOR (6 DOWNTO 0) ) ; END; ARCHITECTURE one OF LED_SEG IS BEGIN PROCESS ( A ) BEGIN,5.1 组合逻辑电路设计,5.1.3 译码器设计 2. 7段数码显示译码器设计,CASE A IS WHEN 0000 = LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED NULL ; END CASE; END PROCESS; END;,5.1 组合逻辑电路设计,5.1.3 译码器设计 2. 7段数码显示译码器设

14、计,例5.6中输出信号LED 的7位分别接数码管的7个段,高位在左,低位在右。例如当LED输出为“1101111”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、1、1;接有高电平的段点亮,低电平的段不亮,于是数码管显示“9”,其功能仿真如图5.8所示。,图5.8 7段数码显示译码电路功能仿真波形,5.1 组合逻辑电路设计,5.1.3 译码器设计 2. 7段数码显示译码器设计,5.1.4 加法器设计1.四位二进制全加器的VHDL,5.1 组合逻辑电路设计,【例5.7】 四位二进制全加器的VHDL描述 LIBRARY ieee; USE ieee.STD_LOGIC_11

15、64.ALL; USE ieee.STD_LOGIC_unsigned.ALL; ENTITY adder_4bit IS PORT (a, b: IN STD_LOGIC_VECTOR(3 DOWNTO 0); ci: IN STD_LOGIC; s: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); co: OUT STD_LOGIC); END; ARCHITECTURE one OF adder_4bit IS SIGNAL temp: STD_LOGIC_VECTOR (4 DOWNTO 0); BEGIN temp=(0,图5.9 4位二进制全加器的RTL电路图,

16、5.1 组合逻辑电路设计,5.1.4 加法器设计,2 4位全加器的仿真结果 例5.7中的4位全加器的功能仿真结果如图5-10所示,其时序仿真结果如图5-17所示。从波形中可以看出, 当a、b和ci取不同的值时,执行a+b+ci操作后,和数s与进位co均满足4位全加器的逻辑功能要求。,5.10 4位二进制全加器的功能仿真结果,5.1 组合逻辑电路设计,5.1.4 加法器设计,5.1.5 三态门与双向缓冲电路设计 三态门,是指逻辑门的输出除有高、低电平两种状态外,还有第三种状态高阻状态的门电路,高阻态相当于隔断状态。三态门都有一个EN为控制使能端,来控制门电路的通断。具备这三种状态的器件就叫做三态

17、(门、总线、.)。VHDL设计中,如果用STD_LOGIC数据类型的Z对一个变量赋值,即会引入三态门,并在使能信号的控制下可使其输出呈高阻态,这等效于使三态门禁止输出。,5.1 组合逻辑电路设计,5.1.5 三态门与双向缓冲电路设计 1三态门设计 【例5.8】4位三态控制门电路的VHDL描述 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; USE ieee.STD_LOGIC_unsigned.ALL; ENTITY tri_gate IS PORT(en : IN STD_LOGIC; din: IN STD_LOGIC_VECTOR(3 DOWNTO

18、0); dout: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END; ARCHITECTURE one OF tri_gate IS BEGIN PROCESS (en ,din) BEGIN IF (en=1) then dout=din; else dout=ZZZZ; end if; end process; END;,5.1 组合逻辑电路设计,图5.11 三态门电路的RTL电路,5.1 组合逻辑电路设计,5.1.5 三态门与双向缓冲电路设计 1三态门设计,图5.12 三态门电路的功能仿真图,5.1 组合逻辑电路设计,5.1.5 三态门与双向缓冲电路设计 1三

19、态门设计,2. 双向总线缓冲器 双向总线缓冲器用于对数据总线的驱动和缓冲,典型双向总线缓冲电路图如图5.13所示。 一般双向总线缓冲器的模式为:两个数据端口a、 b,一个使能端en,一个方向控制端dr。其操作行为真值表如表5.4所示。,5.1 组合逻辑电路设计,5.1.5 三态门与双向缓冲电路设计,2. 双向总线缓冲器 ain=a; a=aout;,图5.13 双向总线驱动电路,如果A为输入端口,即ain=a时,aout应为“ZZZZZZZZ”,表5.4双向总线驱动电路真值表,5.1 组合逻辑电路设计,5.1.5 三态门与双向缓冲电路设计,2. 双向总线缓冲器 【例5.9】 双向总线缓冲器的V

20、HDL描述 library ieee; use ieee.std_logic_1164.all; ENTITY DUB_GATE IS PORT ( a,b: INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); en: IN STD_LOGIC; dr: INOUT STD_LOGIC); END DUB_GATE; ARCHITECTURE a OF DUB_GATE IS SIGNAL abuf, bbuf: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN P1: PROCESS (a, dr, en) BEGIN if (en=0) and (

21、dr=1) then bbuf = a; -接下页,5.1 组合逻辑电路设计,5.1.5 三态门与双向缓冲电路设计,else - 接上页 bbuf=ZZZZZZZZ; end if; b=bbuf; END PROCESS; P2: PROCESS (b,dr,en) BEGIN if (en=0) and (dr=0) then abuf = b; else abuf=ZZZZZZZZ; end if; a=abuf; END PROCESS; END a;,5.1 组合逻辑电路设计,5.1.5 三态门与双向缓冲电路设计,图5.14 双向总线缓冲器的RTL电路图,5.1 组合逻辑电路设计,5

22、.1.5 三态门与双向缓冲电路设计 双向总线缓冲器的RTL电路图如图5.14所示。,5.2 时序逻辑电路设计,5.2.1 触发器设计 1.RS触发器设计 RS触发器由两个与非门(或者或非门)的输入和输出交叉连接而成,如图5.15所示, 真值表见表5.5。,图5.15 RS触发器原理图,表5.5 RS触发器真值表,5.2.1 触发器设计 1.RS触发器设计 【例5.10】 RS触发器的VHDL程序代码 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY RSFF IS PORT(R, S: IN STD_LOGIC; Q, QB: OUT STD_

23、LOGIC); END; ARCHITECTURE one OF RSFF IS SIGNAL Q_TEMP,QB_TEMP: STD_LOGIC; BEGIN Q_TEMP=S NAND QB_TEMP; QB_TEMP=R NAND Q_TEMP; Q=Q_TEMP; QB=QB_TEMP; END;,5.2 时序逻辑电路设计,图5.16 RS触发器的RTL电路,图5.17 RS触发器功能仿真波形图,5.2 时序逻辑电路设计,5.2.1 触发器设计 1.RS触发器设计,5.2.1 触发器设计 2. JK触发器设计 JK触发器的状态方程是:Q_tmp=j +q_temp。用VHDL逻辑表达式

24、对JK触发器进行描述。其真值表见表5.6所示。,表5.6 JK触发器真值表,5.2 时序逻辑电路设计,5.2.1 触发器设计 【例5.11】 JK触发器VHDL程序 library ieee; use ieee.std_logic_1164.all; entity jkff1 is port (j, k, clk: in std_logic; q: out std_logic); end; architecture one of jkff1 is signal q_temp :std_logic; begin p1:process begin wait until(clkevent and c

25、lk=1); q_temp=(j and (not q_temp) or (not k) and q_temp); end process; q=q_temp; end;,5.2 时序逻辑电路设计,图5.18 JK触发器的RTL电路,图5.19 JK触发器的功能仿真图,5.2 时序逻辑电路设计,5.2.1 触发器设计 2. JK触发器设计,5.2.2 移位寄存器设计 移位寄存器是一个具有移位功能的寄存器,是指寄存器中所存的代码能够在移位脉冲的作用下依次左移或右移。既能左移又能右移的称为双向移位寄存器,只需要改变左、右移的控制信号便可实现双向移位要求。根据移位寄存器存取信息的方式不同分为:串入串

26、出、串入并出、并入串出、并入并出四种形式。,5.2 时序逻辑电路设计,5.2.2 移位寄存器设计 【例5.12】8位右移移位寄存器的VHDL描述 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; ENTITY SHFRT IS PORT (CLK, LOAD: IN STD_LOGIC; DIN: IN STD_LOGIC_VECTOR (7 DOWNTO 0); QB: OUT STD_LOGIC); END; ARCHITECTURE ONE OF SHFRT IS BEGIN -接下页,5.2 时序逻辑电路设计,PROCESS (CLK, LOAD)

27、-接上页 VARIABLE REG8:STD_LOGIC_VECTOR (7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK=1 THEN IF LOAD=1 THEN REG8:=DIN; ELSE REG8 (6 DOWNTO 0):=REG8(7 DOWNTO 1); END IF; END IF; QB=REG8 (0); END PROCESS; END;,5.2 时序逻辑电路设计,5.2.2 移位寄存器设计,图5.20 移位寄存器的RTL电路图,图5.21 移位寄存器的功能仿真波形图(十六进制表示形式),5.2 时序逻辑电路设计,5.2.2 移位寄存器设计

28、,5.2.3计数器设计,1.十六进制加法计数器设计 【例5.13】十六进制加法计数器的VHDL描述 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; USE ieee. STD_LOGIC_unsigned.ALL; ENTITY CNT10 IS PORT(CLK,RST,EN:IN STD_LOGIC; CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT:OUT STD_LOGIC); END; ARCHITECTURE one OF CNT16 IS BEGIN -接下页,5.2 时序逻辑电路设计,PROCESS (CL

29、K, RST, EN) -接上页 VARIABLE CQI: STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN IF RST=1 THEN CQI:=(OTHERS=0); -计数器高电平复位 ELSIF CLKEVENT AND CLK=1 THEN IF EN=1 THEN -计数器控制端高电平有效 IF CQI0); END IF; END IF; END IF; IF CQI=15 THEN COUT=1; -计数满16产生一个进位 ELSE COUT=0; END IF; CQ=CQI; END PROCESS; END;,5.2 时序逻辑电路设计,5.2.3

30、计数器设计,例5.13描述的是一个带有异步复位和同步时钟使能的十六进制加法计数器。所谓同步或异步都是相对于时钟而言的。依赖时钟而有效的信号称为同步信号,否则称为异步信号。 例5.13中的进程语句中含有两个独立的IF语句,第个IF语句是不完整性条件语句,因而将产生计数器时序电路;第二个IF语句产生一个纯组合逻辑的多路选择器。从结构上讲,更一般的表述是将这两个独立的IF语句用两个独立的进程语句来表达,一个为时序进程(或称时钟进程),另一个为组合进程。,5.2 时序逻辑电路设计,5.2.3计数器设计,另外,不完整条件语句是指在条件语句中,没有对所有可能发生的条件给出对应的处理方式。对于这种语言现象,

31、VHDL综合器将理解为当不满足条件时,不能执行新的赋值,即应保持原值不变,这就意味着必须引进时序元件来保存的原值,直到满足IF语句的判断条件后才能更新存储器中的值。 利用这种不完整的条件语句的描述引进寄存器元件,从而构成时序电路的方式是VHDL描述时序电路最重要的途径,通常,完整的条件语句只能构成组合逻辑电路。,5.2 时序逻辑电路设计,5.2.3计数器设计,图5.22 十六进制加法计数器的RTL电路图,5.2 时序逻辑电路设计,5.2.3计数器设计,图5.23 十六进制加法计数器的功能仿真图,5.2 时序逻辑电路设计,5.2.3计数器设计,2.十六进制减法计数器设计 【例5.14】十六进制减

32、法计数器VHDL程序 LIBRARY ieee; USE ieee.STD_LOGIC_1164.ALL; USE ieee.STD_LOGIC_unsigned.ALL; ENTITY CNT16 IS PORT(CLK,RST,EN:IN STD_LOGIC; CQ: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END; ARCHITECTURE one OF CNT16 IS BEGIN -接下页,5.2 时序逻辑电路设计,5.2.3计数器设计,PROCESS (CLK, RST, EN) -接上页 VARIABLE CQI: STD_LOGIC_VECTOR(3

33、 DOWNTO 0); BEGIN IF RST=1 THEN CQI: =1111; ELSIF CLKEVENT AND CLK=1 THEN IF EN=1 THEN IF CQI0 THEN CQI: =CQI-1; ELSE CQI: =1111; END IF; END IF; END IF; CQ=CQI; END PROCESS; END;,5.2 时序逻辑电路设计,十六进制减法计数器的仿真结果如图5.24所示。,图5.24 十六进制减法计数器功能仿真波形图,5.2 时序逻辑电路设计,5.2.3计数器设计,3.异步计数器设计 异步计数器,它的下一位计数器的输出作为上一位计数器的

34、时钟信号,这样一级一级串行连接起来就构成了一个异步计数器。 用VHDL语言描述异步逻辑电路时,由于一个时钟进程只能构成对应单一时钟信号的时序电路,如果在进程中需要构成多触发器时序电路,也只能产生对应某个单一时钟的同步时序逻辑,异步时序逻辑一般采取多个时钟进程来构成。,5.2 时序逻辑电路设计,5.2.3计数器设计,【例5.15】4个触发器构成的异步计数器的VHDL底层模块程序 library ieee; use ieee.std_logic_1164.all; entity dffr is port (clk, clr, d:in std_logic; q, qb: out std_logic

35、); end; architecture str of dffr is signal q_in:std_logic; Begin -接下页,5.2 时序逻辑电路设计,5.2.3计数器设计,qb=not(q_in); -接上页 q=q_in; process (clk) begin if (clr=1) then q_in=0; elsif (clkevent and clk=1) then q_in=d; end if; end process; end;,5.2 时序逻辑电路设计,5.2.3计数器设计,图5.25 异步计数器的底层模块的RTL电路图,5.2 时序逻辑电路设计,5.2.3计数器

36、设计,【例5.16】 4个触发器构成的异步计数器的顶层VHDL描述 library ieee; use ieee.std_logic_1164.all; entity rplcont is port(clk,clr:in std_logic; count:out std_logic_vector(3 downto 0); end; architecture str of rplcont is signal count_in_bar:std_logic_vector(4 downto 0); -接下页,5.2 时序逻辑电路设计,5.2.3计数器设计,component dffr is -接上页

37、port(clk,clr,d:in std_logic; q,qb:out std_logic); end component; begin count_in_bar(0)count_in_bar(i), clr=clr,d=count_in_bar(i+1), q=count(i),qb=count_in_bar(i+1); end generate; end;,5.2 时序逻辑电路设计,5.2.3计数器设计,图5.26 4个触发器构成的异步计数器的RTL电路图,5.2 时序逻辑电路设计,5.2.3计数器设计,5.3.1 状态机概述 1.什么是状态机 通俗地说,状态机就是事物存在状态的一种综

38、合描述。 比如,一个单向路口的一盏红绿灯,它有“亮红灯”、“亮绿灯”和“亮黄灯”3种状态。在不同情况下,3种状态可以互相转换。转换的条件可以是经过多少时间,比如经过30秒钟由“亮红灯”状态变为“亮绿灯”状态;也可以是特殊条件,比如有紧急事件,不论处于什么状态都将转变为“亮红灯”状态。而所谓的状态机,就是对这盏红绿灯3种状态的综合描述,说明任意两个状态之间的转变条件。,5.3 状态机的设计,状态机是由状态寄存器和组合逻辑电路构成的,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。 状态机可归纳为4个要素:即现态、条件、动作及次态。这样的归纳,主要是出于

39、对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。,5.3 状态机的设计,5.3.1 状态机概述 1.什么是状态机,现态:是指当前所处的状态。 条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。,5.3 状态机的设计,5.3.1 状态机概述 1.什么是状态机,根据时序输出

40、信号产生机理的不同,状态机可以分成两类:摩尔(Moore)型状态机和米勒(Mealy)型状态机。 两种状态机的区别: 前者的输出仅是当前状态的函数,后着的输出 是当前状态和输入信号的函数。 米勒型状态机输出的变化先于摩尔型。,5.3 状态机的设计,5.3.1 状态机概述 1.什么是状态机,所有的状态均可表达为CASE WHEN结构中的一条CASE语句,而状态的转移则通过IF_THEN_ELSE语句实现。 应用VHDL设计有限状态机的流程如图5.27所示。,5.3 状态机的设计,5.3.1 状态机概述 2. 有限状态机的设计流程,图5.27 VHDL设计有限状态机的流程图,(1)选择状态机类型

41、(2)建立状态表或者画出状态图 (3)根据状态表或状态图,构建状态机的VHDL模型 (4)利用EDA工具进行仿真、验证,5.3 状态机的设计,5.3.1 状态机概述 2. 有限状态机的设计流程,5.3.2 一般有限状态机的VHDL设计,一般和最常用的状态机通常包含: 说明部分 主控时序进程 主控组合进程 辅助进程几个部分,5.3 状态机的设计,1说明部分 使用TYPE语句定义新的数据类型,此数据类型为枚举型, 其元素通常都用状态机的状态名来定义; 状态变量(如现态和次态)应定义为信号,便于信 息传递; 并将状态变量的数据类型定义为含有既定状态元素的新定 义的数据类型; 说明部分一般放在结构体的

42、ARCHITECTURE和BEGIN之 间。,5.3 状态机的设计,5.3.2 一般有限状态机的VHDL设计,2主控时序进程 主控时序进程是指负责状态机运转和在时钟驱动下负责状态 转换的进程; 状态机是随外部时钟信号、以同步时序方式工作的; 状态机向下一状态(包括再次进入本状态)转换的实现仅仅取 决于时钟信号的到来。,5.3 状态机的设计,5.3.2 一般有限状态机的VHDL设计,3. 主控组合进程 主控组合进程的任务是根据外部输入的控制信号 (包括来自状态机外部的信号和来自状态机内部其他非主控的组合或时序进程的信号),或/和当前状态的状态值确定下一状态(next_state)的取向,即nex

43、t_state的取值内容; 确定对外输出或对内部其他组合或时序进程输出控制信号的内容。,5.3 状态机的设计,5.3.2 一般有限状态机的VHDL设计,5.3 状态机的设计,4辅助进程 辅助进程用于配合状态机工作的组合进程或时序进程。例如为了完成某种算法的进程,或用于配合状态机工作的其他时序进程,或为了稳定输出设置的数据锁存器等。,5.3.2 一般有限状态机的VHDL设计,图5.28 一个状态机的结构框图,5.3 状态机的设计,5.3.2 一般有限状态机的VHDL设计,【例5.17】一般有限状态机的VHDL设计,利用状态机设计方法输出一个方波信号。 LIBRARY ieee; USE ieee

44、.STD_LOGIC_1164.ALL; ENTITY A_EXAMPLE IS PORT (clk,reset:IN STD_LOGIC; output:OUT STD_LOGIC); END; ARCHITECTURE ONE OF A_EXAMPLE IS TYPE STATE_TYPE IS(S0,S1,S2,S3); -状态机说明部分 SIGNAL state: STATE_TYPE; BEGIN -接下页,5.3 状态机的设计,5.3.2 一般有限状态机的VHDL设计,-接上页 REG:PROCESS(clk,reset) -状态机主控时序进程 BEGIN IF reset=1 T

45、HEN state statestatestatestate=S0; END CASE; END IF; END PROCESS; -接下页,5.3 状态机的设计,5.3.2 一般有限状态机的VHDL设计,-接上页 COM:PROCESS(state) -状态机主控组合进程 BEGIN CASE state IS WHEN S0=outputoutputoutputoutput=0; END CASE; END PROCESS; END;,5.3 状态机的设计,5.3.2 一般有限状态机的VHDL设计,图5.29 状态机设计输出一个方波信号的RTL电路,图5.30 利用一般状态机设计方法实现的

46、方波信号,5.3 状态机的设计,5.3.2 一般有限状态机的VHDL设计,5.3.3摩尔(Moore)型状态机设计,如图5.31所示是摩尔型状态机的结构图,图中的输出只与当前的状态有关,而与当前的输入信号无关。 其状态图如图5.32所示,摩尔状态机的VHDL描述如例5.18所示。,图5.31 摩尔型状态机的结构图,5.3 状态机的设计,图5.32 摩尔型状态机的状态图,5.3 状态机的设计,5.3.3摩尔(Moore)型状态机设计,【例5.18】摩尔状态机的VHDL描述 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_

47、unsigned.all; use ieee.std_logic_arith.all; entity moore_state is port(clk,x_in,rst:in std_logic; key_en:out std_logic; y:out std_logic_vector(3 downto 0); end ; architecture str of moore_state is type state_type is (s1,s2,s3,s4); signal state:state_type; begin p1_state_p:process(clk,rst) Begin -接下页

48、,5.3 状态机的设计,5.3.3摩尔(Moore)型状态机设计,if rst=1 then state if x_in=0 then state if x_in=1 then state if x_in=0 then state if x_in=1 then statestate=s1; end case; end if; -接下页,5.3 状态机的设计,5.3.3摩尔(Moore)型状态机设计,end process; -接上页 p2_state_p:process(state) begin case state is when s1=yyyynull; end case; end pro

49、cess; end;,5.3 状态机的设计,5.3.3摩尔(Moore)型状态机设计,图5.33 摩尔型状态机的RTL电路图,RTL电路图如图5.33所示,仿真波形如图5.34所示。,5.3 状态机的设计,5.3.3摩尔(Moore)型状态机设计,图5.34 摩尔型状态机的仿真波形,5.3.4 米勒(Mealy)型状态机设计,如图5.35所示是米勒型状态机的结构图,图中的输出不仅与当前状态有关,还与当前输入信号有关。米勒型状态机的状态图如图5.36所示。,图5.35 米勒型状态机的结构图,5.3 状态机的设计,图5.36 米勒型状态机的状态图,5.3 状态机的设计,5.3.4 米勒(Mealy

50、)型状态机设计,米勒型状态机的结构体也由三部分组成:说明部分、时钟同步的时序进程和组合进程。说明部分和时钟完全类似于摩尔型状态机,不同的只是组合进程。例5.19是实现米勒型状态机的VHDL代码。米勒型状态机的RTL电路图如图5.37所示,仿真图形如图5.38所示。,【例5.19】米勒型状态机的VHDL描述 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mealy is port(clk,rst,x_in:in std_logic; key_en:out std_logic;

51、y:out std_logic_vector(3 downto 0); end; architecture str of mealy is type state_type is (s1,s2,s3,s4); signal state:state_type; begin state_p:process(clk,rst) begin -接下页,5.3 状态机的设计,5.3.4 米勒(Mealy)型状态机设计,if rst=1 then state if x_in=0 then state if x_in=1 then state if x_in=0 then state if x_in=1 then statestate=s1; end case; end if; end process; -接下页,5.3 状态机的设计,5.3.4 米勒(M

温馨提示

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

最新文档

评论

0/150

提交评论