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

下载本文档

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

文档简介

会计学1第基本逻辑电路的VHDL设计输入输出ABY001011101110表5.1二输入与非门的真值表

图5.1二输入与非门的电路符号5.1组合逻辑电路设计5.1.1基本门电路设计

1.与非门电路(1)VHDL设计方法二输入与非门电路的逻辑真值表见表5.1,二输入与非门的电路符号如图5.1所示。第1页/共99页5.1.1基本门电路设计

1.与非门电路(1)VHDL设计方法【例5.1】二输入与非门的VHDL描述方法一:LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYnand_2IS PORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);END;ARCHITECTUREoneOFnand_2IS BEGIN y<=anandb;END;5.1组合逻辑电路设计第2页/共99页5.1.1基本门电路设计

1.与非门电路(1)VHDL设计方法【例5.2】二输入与非门的VHDL描述方法二:LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYnand_2IS PORT(a,b:IN STD_LOGIC; y:OUT STD_LOGIC);END;ARCHITECTUREoneOFnand_2IS SIGNALab:STD_LOGIC_VECTOR(1DOWNTO0);BEGIN ab<=a&b;--接下页5.1组合逻辑电路设计第3页/共99页5.1.1基本门电路设计

1.与非门电路---接上页process(ab)isbegincaseabiswhen“00”=>y<=‘1‘;--这里的“=>”相当于THEN或于是

when"01"=>y<='1';when"10"=>y<='1';when"11"=>y<='0';whenothers=>y<=null;endcase;endprocess;end;5.1组合逻辑电路设计第4页/共99页(a)用nand实现的二输入与非门的RTL电路(b)用case语句实现的二输入与非门的RTL电路图5.2二输入与非门RTL电路

5.1组合逻辑电路设计5.1.1基本门电路设计

1.与非门电路(1)VHDL设计方法第5页/共99页

二输入与非门的功能仿真结果如图5.3所示,观察波形可知,输入为a与b,输出为y,且其逻辑关系满足二输入与非门真值表的要求。

图5.3二输入与非门的功能仿真图5.1组合逻辑电路设计5.1.1基本门电路设计

1.与非门电路(2)仿真结果第6页/共99页5.1.1基本门电路设计2.基本逻辑门电路的VHDL描述【例5.3】基本逻辑门电路的VHDL描述LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYgateIS PORT(a,b:INSTD_LOGIC;

y1,y2,y3,y4,y5,y6:OUTSTD_LOGIC);END;ARCHITECTUREoneOFgateIS BEGIN y1<=aandb;--构成与门

y2<=aorb;--构成或门

y3<=nota;--构成非门

y4<=anandb;--构成与非门

y5<=anorb;--构成异或门

y6<=not(axorb);--构成异或非门

END;5.1组合逻辑电路设计第7页/共99页

5.1.2编码器设计

在数字系统中,常常需要将某信息变换为某一特定的代码。把二进制码按一定的规律进行编排,使每组代码具有特定的含义,称为编码。具有编码功能的逻辑电路称为编码器。编码器是将2N个分立的信息代码以N个二进制码来表示。5.1组合逻辑电路设计第8页/共99页输入输出I0I1I2I3I4I5I6I7Y2Y1Y010000000000010000000010010000001000010000011000010001000000010010100000010110000000011115.1.2编码器设计1.8线-3线编码器的VHDL描述8线-3线编码真值表见表5.2所示。表5.28线-3线编码真值表5.1组合逻辑电路设计第9页/共99页【例5.4】

8线-3线编码器的VHDL设计LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYencoder8_3IS PORT(i:IN STD_LOGIC_VECTOR(7downto0); y:OUT STD_LOGIC_VECTOR(2downto0));END;ARCHITECTUREoneOFencoder8_3ISBEGINProcess(i)isbegin caseiis--接下页5.1组合逻辑电路设计5.1.2编码器设计1.8线-3线编码器的VHDL描述第10页/共99页

when“00000001”=>y<=“000”;--接上页

when"00000010"=>y<="001"; when"00000100"=>y<="010"; when"00001000"=>y<="011";when"00010000"=>y<="100"; when"00100000"=>y<="101";when"01001000"=>y<="110";when"10000000"=>y<="111";whenothers=>y<="000";endcase;endprocess;endprocess;end;5.1组合逻辑电路设计5.1.2编码器设计1.8线-3线编码器的VHDL描述第11页/共99页

本例中,运用了case语句完成了编码器内部逻辑结构设计,其RTL电路图如图5.4所示。图5.48线-3线编码器的RTL电路图

5.1组合逻辑电路设计5.1.2编码器设计1.8线-3线编码器的VHDL描述第12页/共99页2.8线-3线编码器的功能仿真

8线-3线编码器的功能仿真结果如图5.5所示。图5.58线-3线编码器功能仿真波形图

5.1组合逻辑电路设计5.1.2编码器设计第13页/共99页5.1.3译码器设计译码是编码的逆过程,它的功能是将具有特定含义的二进制码进行辨别,并转换成控制信号。具有译码功能的逻辑电路称为译码器。5.1组合逻辑电路设计第14页/共99页5.1.3译码器设计

1.2线-4线译码器2线-4线译码器的真值表见表5.3所示。输入输出A1A2Z3Z2Z1Z0000001010010100100111000表5.32线-4线译码器的真值表

5.1组合逻辑电路设计第15页/共99页(1)2线-4线译码器的VHDL设计libraryieee;---【例5.5】

2线-4线译码器的VHDL代码useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydecode_24isport(a:instd_logic_vector(1downto0);z:outstd_logic_vector(3downto0));end;architecturestrofdecode_24isBeginwithaselect

z<="0001"when"00","0010"when"01","0100"when"10","1000"when"11","XXXX"whenothers;end;5.1组合逻辑电路设计5.1.3译码器设计

1.2线-4线译码器第16页/共99页图5.62线-4线译码器的RTL电路

5.1组合逻辑电路设计5.1.3译码器设计

1.2线-4线译码器第17页/共99页(2)2线-4线译码器的仿真波形如图5.7所示,当输入使“00”、“01”、“10”、“11”时分别输出“0001”、“0010”、“0100”和“1000”,这与真值表中显示的逻辑关系一致。图5.72线-4线译码器的仿真波形图5.1组合逻辑电路设计5.1.3译码器设计

1.2线-4线译码器第18页/共99页7段数码显示译码电路是一个组合逻辑电路,通常的小规模专用集成IC,如74系列或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。5.1组合逻辑电路设计5.1.3译码器设计

2.7段数码显示译码器设计第19页/共99页【例5.6】

7段BCD译码显示器的VHDL描述

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLED_SEGISPORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);LED:OUTSTD_LOGIC_VECTOR(6DOWNTO0));END;ARCHITECTUREoneOFLED_SEGISBEGINPROCESS(A)BEGIN5.1组合逻辑电路设计5.1.3译码器设计

2.7段数码显示译码器设计第20页/共99页CASEAISWHEN"0000"=>LED<="0111111";--显示“0”WHEN"0001"=>LED<="0000110";--显示“1”WHEN"0010"=>LED<="1011011";--显示“2”WHEN"0011"=>LED<="1001111";--显示“3”WHEN"0100"=>LED<="1100110";--显示“4”WHEN"0101"=>LED<="1101101";--显示“5”WHEN"0110"=>LED<="1111101";--显示“6”WHEN"0111"=>LED<="0000111";--显示“7”WHEN"1000"=>LED<="1111111";--显示“8”WHEN"1001"=>LED<="1101111";--显示“9”WHEN"1010"=>LED<="1110111";--显示“A”WHEN"1011"=>LED<="1111100";--显示“B”WHEN"1100"=>LED<="0111001";--显示“C”WHEN"1101"=>LED<="1011110";--显示“D”WHEN"1110"=>LED<="1111001";--显示“E”WHEN"1111"=>LED<="1110001";--显示“F”WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;END;5.1组合逻辑电路设计5.1.3译码器设计

2.7段数码显示译码器设计第21页/共99页

例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.87段数码显示译码电路功能仿真波形

5.1组合逻辑电路设计5.1.3译码器设计

2.7段数码显示译码器设计第22页/共99页5.1.4加法器设计

1.四位二进制全加器的VHDL5.1组合逻辑电路设计【例5.7】

四位二进制全加器的VHDL描述

LIBRARYieee; USEieee.STD_LOGIC_1164.ALL;USEieee.STD_LOGIC_unsigned.ALL; ENTITYadder_4bitIS PORT(a,b:INSTD_LOGIC_VECTOR(3DOWNTO0);ci:INSTD_LOGIC; s:OUTSTD_LOGIC_VECTOR(3DOWNTO0); co:OUTSTD_LOGIC);END; ARCHITECTUREoneOFadder_4bitISSIGNALtemp:STD_LOGIC_VECTOR(4DOWNTO0); BEGIN temp<=('0'&a)+b+ci;s<=temp(3downto0);co<=temp(4); END;第23页/共99页图5.94位二进制全加器的RTL电路图

5.1组合逻辑电路设计5.1.4加法器设计第24页/共99页2.4位全加器的仿真结果例5.7中的4位全加器的功能仿真结果如图5-10所示,其时序仿真结果如图5-17所示。从波形中可以看出,当a、b和ci取不同的值时,执行a+b+ci操作后,和数s与进位co均满足4位全加器的逻辑功能要求。5.104位二进制全加器的功能仿真结果

5.1组合逻辑电路设计5.1.4加法器设计第25页/共99页5.1.5三态门与双向缓冲电路设计

三态门,是指逻辑门的输出除有高、低电平两种状态外,还有第三种状态——高阻状态的门电路,高阻态相当于隔断状态。三态门都有一个EN为控制使能端,来控制门电路的通断。具备这三种状态的器件就叫做三态(门、总线、...)。VHDL设计中,如果用STD_LOGIC数据类型的'Z'对一个变量赋值,即会引入三态门,并在使能信号的控制下可使其输出呈高阻态,这等效于使三态门禁止输出。

5.1组合逻辑电路设计第26页/共99页5.1.5三态门与双向缓冲电路设计1.三态门设计

【例5.8】4位三态控制门电路的VHDL描述LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;USEieee.STD_LOGIC_unsigned.ALL;ENTITYtri_gateIS PORT(en:INSTD_LOGIC;din:INSTD_LOGIC_VECTOR(3DOWNTO0); dout:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREoneOFtri_gateISBEGINPROCESS(en,din)BEGINIF(en='1')thendout<=din;elsedout<="ZZZZ";endif;endprocess;END;5.1组合逻辑电路设计第27页/共99页图5.11三态门电路的RTL电路5.1组合逻辑电路设计5.1.5三态门与双向缓冲电路设计1.三态门设计第28页/共99页图5.12三态门电路的功能仿真图

5.1组合逻辑电路设计5.1.5三态门与双向缓冲电路设计1.三态门设计第29页/共99页2.双向总线缓冲器双向总线缓冲器用于对数据总线的驱动和缓冲,典型双向总线缓冲电路图如图5.13所示。一般双向总线缓冲器的模式为:两个数据端口a、b,一个使能端en,一个方向控制端dr。其操作行为真值表如表5.4所示。

5.1组合逻辑电路设计5.1.5三态门与双向缓冲电路设计第30页/共99页2.双向总线缓冲器

ain<=a;a<=aout;图5.13双向总线驱动电路

如果A为输入端口,即ain<=a时,aout应为“ZZZZZZZZ”EnDr功能00a=b01b=a1X高阻表5.4双向总线驱动电路真值表

5.1组合逻辑电路设计5.1.5三态门与双向缓冲电路设计第31页/共99页2.双向总线缓冲器【例5.9】

双向总线缓冲器的VHDL描述libraryieee;useieee.std_logic_1164.all;ENTITYDUB_GATEIS PORT( a,b:INOUTSTD_LOGIC_VECTOR(7DOWNTO0); en:INSTD_LOGIC; dr:INOUTSTD_LOGIC);ENDDUB_GATE;ARCHITECTUREaOFDUB_GATEISSIGNALabuf,bbuf:STD_LOGIC_VECTOR(7DOWNTO0);BEGINP1:PROCESS(a,dr,en) BEGIN if(en='0')and(dr='1')then bbuf<=a;----接下页5.1组合逻辑电路设计5.1.5三态门与双向缓冲电路设计第32页/共99页else---接上页

bbuf<="ZZZZZZZZ"; endif; b<=bbuf; ENDPROCESS; P2:PROCESS(b,dr,en)BEGIN if(en='0')and(dr='0')then abuf<=b; else abuf<="ZZZZZZZZ"; endif; a<=abuf; ENDPROCESS;ENDa;5.1组合逻辑电路设计5.1.5三态门与双向缓冲电路设计第33页/共99页图5.14双向总线缓冲器的RTL电路图5.1组合逻辑电路设计5.1.5三态门与双向缓冲电路设计双向总线缓冲器的RTL电路图如图5.14所示。第34页/共99页5.2时序逻辑电路设计5.2.1触发器设计

1.RS触发器设计

RS触发器由两个与非门(或者或非门)的输入和输出交叉连接而成,如图5.15所示,

真值表见表5.5。

图5.15RS触发器原理图

输入输出RSQQ非0001011010不变不变11不定不定表5.5RS触发器真值表第35页/共99页5.2.1触发器设计

1.RS触发器设计【例5.10】RS触发器的VHDL程序代码LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYRSFFISPORT(R,S:INSTD_LOGIC; Q,QB:OUTSTD_LOGIC);END;ARCHITECTUREoneOFRSFFISSIGNALQ_TEMP,QB_TEMP:STD_LOGIC;BEGIN

Q_TEMP<=SNANDQB_TEMP;QB_TEMP<=RNANDQ_TEMP;

Q<=Q_TEMP;QB<=QB_TEMP;END;5.2时序逻辑电路设计第36页/共99页图5.16RS触发器的RTL电路图5.17RS触发器功能仿真波形图5.2时序逻辑电路设计5.2.1触发器设计

1.RS触发器设计第37页/共99页5.2.1触发器设计

2.JK触发器设计

JK触发器的状态方程是:Q_tmp<=j+q_temp。用VHDL逻辑表达式对JK触发器进行描述。其真值表见表5.6所示。

输入输出jkq00保持01010111翻转表5.6JK触发器真值表5.2时序逻辑电路设计第38页/共99页5.2.1触发器设计

【例5.11】JK触发器VHDL程序libraryieee;useieee.std_logic_1164.all;entityjkff1isport(j,k,clk:instd_logic;q:outstd_logic);end;architectureoneofjkff1issignalq_temp:std_logic;beginp1:processbeginwaituntil(clk'eventandclk='1');q_temp<=(jand(notq_temp))or((notk)andq_temp);endprocess;q<=q_temp;end;

5.2时序逻辑电路设计第39页/共99页图5.18JK触发器的RTL电路图5.19JK触发器的功能仿真图5.2时序逻辑电路设计5.2.1触发器设计

2.JK触发器设计第40页/共99页

5.2.2移位寄存器设计

移位寄存器是一个具有移位功能的寄存器,是指寄存器中所存的代码能够在移位脉冲的作用下依次左移或右移。既能左移又能右移的称为双向移位寄存器,只需要改变左、右移的控制信号便可实现双向移位要求。根据移位寄存器存取信息的方式不同分为:串入串出、串入并出、并入串出、并入并出四种形式。

5.2时序逻辑电路设计第41页/共99页5.2.2移位寄存器设计【例5.12】8位右移移位寄存器的VHDL描述LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYSHFRTISPORT(CLK,LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0); QB:OUTSTD_LOGIC);END;ARCHITECTUREONEOFSHFRTISBEGIN---接下页5.2时序逻辑电路设计第42页/共99页

PROCESS(CLK,LOAD)---接上页

VARIABLEREG8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINIFCLK'EVENTANDCLK='1'THENIFLOAD='1'THENREG8:=DIN;ELSEREG8(6DOWNTO0):=REG8(7DOWNTO1);ENDIF;ENDIF;QB<=REG8(0);ENDPROCESS;END;5.2时序逻辑电路设计5.2.2移位寄存器设计第43页/共99页图5.20移位寄存器的RTL电路图图5.21移位寄存器的功能仿真波形图(十六进制表示形式)

5.2时序逻辑电路设计5.2.2移位寄存器设计第44页/共99页5.2.3计数器设计1.十六进制加法计数器设计【例5.13】十六进制加法计数器的VHDL描述LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;USEieee.STD_LOGIC_unsigned.ALL;ENTITYCNT16IS PORT(CLK,RST,EN

:

INSTD_LOGIC;CQ

:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT

:

OUTSTD_LOGIC);END;ARCHITECTUREoneOF

CNT16

ISBEGIN---接下页5.2时序逻辑电路设计第45页/共99页

PROCESS(CLK,RST,EN)---接上页

VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENCQI:=(OTHERS=>'0');--计数器高电平复位

ELSIFCLK'EVENTANDCLK='1'THENIFEN='1'THEN--计数器控制端高电平有效

IFCQI<15

THENCQI:=CQI+1;--计数器开始计数

ELSECQI:=(OTHERS=>'0');ENDIF;ENDIF;ENDIF;IFCQI=15THENCOUT<='1';--计数满16产生一个进位

ELSECOUT<='0';ENDIF;CQ<=CQI;ENDPROCESS;END;5.2时序逻辑电路设计5.2.3计数器设计第46页/共99页

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

另外,不完整条件语句是指在条件语句中,没有对所有可能发生的条件给出对应的处理方式。对于这种语言现象,VHDL综合器将理解为当不满足条件时,不能执行新的赋值,即应保持原值不变,这就意味着必须引进时序元件来保存的原值,直到满足IF语句的判断条件后才能更新存储器中的值。利用这种不完整的条件语句的描述引进寄存器元件,从而构成时序电路的方式是VHDL描述时序电路最重要的途径,通常,完整的条件语句只能构成组合逻辑电路。

5.2时序逻辑电路设计5.2.3计数器设计第48页/共99页图5.22十六进制加法计数器的RTL电路图5.2时序逻辑电路设计5.2.3计数器设计第49页/共99页图5.23十六进制加法计数器的功能仿真图5.2时序逻辑电路设计5.2.3计数器设计第50页/共99页2.十六进制减法计数器设计【例5.14】十六进制减法计数器VHDL程序LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;USEieee.STD_LOGIC_unsigned.ALL;ENTITYCNT16IS PORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREoneOFCNT16ISBEGIN---接下页5.2时序逻辑电路设计5.2.3计数器设计第51页/共99页PROCESS(CLK,RST,EN)---接上页

VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENCQI:="1111";ELSIFCLK'EVENTANDCLK='1'THENIFEN='1'THENIFCQI>0THENCQI:=CQI-1;ELSECQI:="1111";ENDIF;ENDIF;ENDIF;CQ<=CQI;ENDPROCESS;END;5.2时序逻辑电路设计第52页/共99页十六进制减法计数器的仿真结果如图5.24所示。图5.24十六进制减法计数器功能仿真波形图5.2时序逻辑电路设计5.2.3计数器设计第53页/共99页3.异步计数器设计异步计数器,它的下一位计数器的输出作为上一位计数器的时钟信号,这样一级一级串行连接起来就构成了一个异步计数器。用VHDL语言描述异步逻辑电路时,由于一个时钟进程只能构成对应单一时钟信号的时序电路,如果在进程中需要构成多触发器时序电路,也只能产生对应某个单一时钟的同步时序逻辑,异步时序逻辑一般采取多个时钟进程来构成。

5.2时序逻辑电路设计5.2.3计数器设计第54页/共99页【例5.15】4个触发器构成的异步计数器的VHDL底层模块程序libraryieee;useieee.std_logic_1164.all;entitydffrisport(clk,clr,d:instd_logic;q,qb:outstd_logic);end;architecturestrofdffrissignalq_in:std_logic;Begin---接下页5.2时序逻辑电路设计5.2.3计数器设计第55页/共99页qb<=not(q_in);---接上页q<=q_in;process(clk)beginif(clr='1')thenq_in<='0';elsif(clk'eventandclk='1')thenq_in<=d;endif;endprocess;end;5.2时序逻辑电路设计5.2.3计数器设计第56页/共99页图5.25异步计数器的底层模块的RTL电路图

5.2时序逻辑电路设计5.2.3计数器设计第57页/共99页【例5.16】4个触发器构成的异步计数器的顶层VHDL描述libraryieee;useieee.std_logic_1164.all;entityrplcontisport(clk,clr:instd_logic;count:outstd_logic_vector(3downto0));end;architecturestrofrplcontissignalcount_in_bar:std_logic_vector(4downto0);---接下页5.2时序逻辑电路设计5.2.3计数器设计第58页/共99页componentdffris---接上页port(clk,clr,d:instd_logic;q,qb:outstd_logic);endcomponent;begincount_in_bar(0)<=clk;gen1:foriin0to3generateu:dffrportmap(clk=>count_in_bar(i),clr=>clr,d=>count_in_bar(i+1),q=>count(i),qb=>count_in_bar(i+1));endgen1;end;5.2时序逻辑电路设计5.2.3计数器设计第59页/共99页图5.264个触发器构成的异步计数器的RTL电路图5.2时序逻辑电路设计5.2.3计数器设计第60页/共99页

5.3.1状态机概述1.什么是状态机

通俗地说,状态机就是事物存在状态的一种综合描述。比如,一个单向路口的一盏红绿灯,它有“亮红灯”、“亮绿灯”和“亮黄灯”3种状态。在不同情况下,3种状态可以互相转换。转换的条件可以是经过多少时间,比如经过30秒钟由“亮红灯”状态变为“亮绿灯”状态;也可以是特殊条件,比如有紧急事件,不论处于什么状态都将转变为“亮红灯”状态。而所谓的状态机,就是对这盏红绿灯3种状态的综合描述,说明任意两个状态之间的转变条件。

5.3状态机的设计

第61页/共99页

状态机是由状态寄存器和组合逻辑电路构成的,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。状态机可归纳为4个要素:即现态、条件、动作及次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。5.3状态机的设计

5.3.1状态机概述1.什么是状态机

第62页/共99页①现态:是指当前所处的状态。②条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

5.3状态机的设计

5.3.1状态机概述1.什么是状态机

第63页/共99页

根据时序输出信号产生机理的不同,状态机可以分成两类:摩尔(Moore)型状态机和米勒(Mealy)型状态机。两种状态机的区别:

①前者的输出仅是当前状态的函数,后着的输出是当前状态和输入信号的函数。

②米勒型状态机输出的变化先于摩尔型。5.3状态机的设计

5.3.1状态机概述1.什么是状态机

第64页/共99页

所有的状态均可表达为CASEWHEN结构中的一条CASE语句,而状态的转移则通过IF_THEN_ELSE语句实现。应用VHDL设计有限状态机的流程如图5.27所示。

5.3状态机的设计

5.3.1状态机概述2.有限状态机的设计流程根据系统要求建立状态转移图根据状态转移图编写VHDL代码利用EDA工具进行仿真和验证

图5.27VHDL设计有限状态机的流程图

第65页/共99页(1)选择状态机类型(2)建立状态表或者画出状态图(3)根据状态表或状态图,构建状态机的VHDL模型(4)利用EDA工具进行仿真、验证

5.3状态机的设计

5.3.1状态机概述2.有限状态机的设计流程第66页/共99页5.3.2一般有限状态机的VHDL设计

一般和最常用的状态机通常包含:

①说明部分②主控时序进程③主控组合进程④辅助进程几个部分5.3状态机的设计

第67页/共99页1.说明部分①使用TYPE语句定义新的数据类型,此数据类型为枚举型,其元素通常都用状态机的状态名来定义;②状态变量(如现态和次态)应定义为信号,便于信息传递;

③并将状态变量的数据类型定义为含有既定状态元素的新定义的数据类型;

④说明部分一般放在结构体的ARCHITECTURE和BEGIN之间。

5.3状态机的设计

5.3.2一般有限状态机的VHDL设计

第68页/共99页2.主控时序进程①主控时序进程是指负责状态机运转和在时钟驱动下负责状态转换的进程;

②状态机是随外部时钟信号、以同步时序方式工作的;③状态机向下一状态(包括再次进入本状态)转换的实现仅仅取决于时钟信号的到来。

5.3状态机的设计

5.3.2一般有限状态机的VHDL设计

第69页/共99页3.主控组合进程

①主控组合进程的任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其他非主控的组合或时序进程的信号),或/和当前状态的状态值确定下一状态(next_state)的取向,即next_state的取值内容;②确定对外输出或对内部其他组合或时序进程输出控制信号的内容。5.3状态机的设计

5.3.2一般有限状态机的VHDL设计

第70页/共99页5.3状态机的设计4.辅助进程

辅助进程用于配合状态机工作的组合进程或时序进程。例如为了完成某种算法的进程,或用于配合状态机工作的其他时序进程,或为了稳定输出设置的数据锁存器等。

5.3.2一般有限状态机的VHDL设计

第71页/共99页

图5.28一个状态机的结构框图5.3状态机的设计

5.3.2一般有限状态机的VHDL设计

第72页/共99页【例5.17】一般有限状态机的VHDL设计,利用状态机设计方法输出一个方波信号。LIBRARYieee;USEieee.STD_LOGIC_1164.ALL;ENTITYA_EXAMPLEISPORT(clk,reset:INSTD_LOGIC;output:OUTSTD_LOGIC);END;ARCHITECTUREONEOFA_EXAMPLEISTYPESTATE_TYPEIS(S0,S1,S2,S3);--状态机说明部分SIGNALstate:STATE_TYPE;BEGIN---接下页5.3状态机的设计

5.3.2一般有限状态机的VHDL设计

第73页/共99页----接上页REG:PROCESS(clk,reset)--状态机主控时序进程

BEGINIFreset='1'THENstate<=S0;ELSIFclk'EVENTANDclk='1'THENCASEstateISWHENS0=>state<=S1;WHENS1=>state<=S2;WHENS2=>state<=S3;WHENS3=>state<=S0;ENDCASE;ENDIF;ENDPROCESS;---接下页5.3状态机的设计

5.3.2一般有限状态机的VHDL设计

第74页/共99页---接上页COM:PROCESS(state)--状态机主控组合进程BEGINCASEstateISWHENS0=>output<='1';WHENS1=>output<='1';WHENS2=>output<='0';WHENS3=>output<='0';ENDCASE;ENDPROCESS;END;5.3状态机的设计

5.3.2一般有限状态机的VHDL设计

第75页/共99页图5.29状态机设计输出一个方波信号的RTL电路

图5.30利用一般状态机设计方法实现的方波信号5.3状态机的设计

5.3.2一般有限状态机的VHDL设计

第76页/共99页5.3.3摩尔(Moore)型状态机设计

如图5.31所示是摩尔型状态机的结构图,图中的输出只与当前的状态有关,而与当前的输入信号无关。其状态图如图5.32所示,摩尔状态机的VHDL描述如例5.18所示。

图5.31摩尔型状态机的结构图5.3状态机的设计

第77页/共99页图5.32摩尔型状态机的状态图5.3状态机的设计

5.3.3摩尔(Moore)型状态机设计

第78页/共99页【例5.18】摩尔状态机的VHDL描述libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitymoore_stateisport(clk,x_in,rst:instd_logic;key_en:outstd_logic;y:outstd_logic_vector(3downto0));end;architecturestrofmoore_stateistypestate_typeis(s1,s2,s3,s4);signalstate:state_type;beginp1_state_p:process(clk,rst)Begin---接下页5.3状态机的设计

5.3.3摩尔(Moore)型状态机设计

第79页/共99页ifrst=‘1’thenstate<=s1;---接上页

elsifclk'eventandclk='1'thencasestateiswhens1=>ifx_in='0'thenstate<=s2;endif;whens2=>ifx_in='1'thenstate<=s3;endif;whens3=>ifx_in='0'thenstate<=s4;endif;whens4=>ifx_in='1'thenstate<=s1;endif;whenothers=>state<=s1;endcase;endif;---接下页5.3状态机的设计

5.3.3摩尔(Moore)型状态机设计

第80页/共99页endprocess;---接上页p2_state_p:process(state)begincasestateiswhens1=>y<="0001";key_en<='0';whens2=>y<="0010";key_en<='1';whens3=>y<="0100";key_en<='1';whens4=>y<="1000";key_en<='0';whenothers=>null;endcase;endprocess;end;5.3状态机的设计

5.3.3摩尔(Moore)型状态机设计

第81页/共99页图5.33摩尔型状态机的RTL电路图RTL电路图如图5.33所示,仿真波形如图5.34所示。5.3状态机的设计

5.3.3摩尔(Moore)型状态机设计

图5.34摩尔型状态机的仿真波形第82页/共99页5.3.4米勒(Mealy)型状态机设计

如图5.35所示是米勒型状态机的结构图,图中的输出不仅与当前状态有关,还与当前输入信号有关。米勒型状态机的状态图如图5.36所示。图5.35米勒型状态机的结构图5.3状态机的设计

第83页/共99页图5.36米勒型状态机的状态图5.3状态机的设计

5.3.4米勒(Mealy)型状态机设计第84页/共99页

米勒型状态机的结构体也由三部分组成:说明部分、时钟同步的时序进程和组合进程。说明部分和时钟完全类似于摩尔型状态机,不同的只是组合进程。例5.19是实现米勒型状态机的VHDL代码。米勒型状态机的RTL电路图如图5.37所示,仿真图形如图5.38所示。第85页/共99页【例5.19】米勒型状态机的VHDL描述libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitymealyisport(clk,rst,x_in:instd_logic;key_en:outstd_logic;y:outstd_logic_vector(3downto0));end;architecturestrofmealyistypestate_typeis(s1,s2,s3,s4);signalstate:state_type;beginstate_p:process(clk,rst)begin---接下页5.3状态机的设计

5.3.4米勒(Mealy)型状态机设计第86页/共99页ifrst=‘1’thenstate<=s1;---接上页

elsifclk'eventandclk='1'thencasestateiswhens1=>ifx_in='0'thenstate<=s2;endif;whens2=>ifx_in='1'thenstate<=s3;endif;whens3=>ifx_in='0'thenstate<=s4;endif;whens4=>ifx_in='1'thenstate<=s1;endif;whenothers=>state<=s1;endcase;endif;endprocess;---接下页5.3状态机的设计

5.3.4米勒(Mealy)型状态机设计第87页/共99页out_p:process(state)---接上页begincasestateiswhens1=>ifx_in='0'theny<="0001";key_en<='0';elsey<="1111";key_en<='1';endif;whens2=>ifx_in='1'

温馨提示

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

评论

0/150

提交评论