第5章_常用VHDL设计实例

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2020/1/291第5章常用VHDL设计实例内容提要:常用数字电路的VHDL描述常用组合逻辑电路时序逻辑电路状态机存储器特色实用电路教学方法:本章以自学为主,重点仅讲授状态机的设计方法2020/1/2925.1组合电路逻辑设计5.1.2常用组合电路的设计(译码器、编码器、数据选择器、加法器、补码器等)5.1.1门电路的设计(门电路、缓冲器等)2020/1/2935.2时序电路逻辑设计5.2.1触发器设计(D触发器、RS触发器、主从JK触发器等)5.2.2.移位寄存器设计(8位串行输入、串行输出移位寄存器;可预加载循环移位寄存器;5.2.3计数器设计(具有清零端的4位二进制计数器、8位异步复位的可预置加减计数器;4位移存器型扭环计数器;顺序脉冲发生器2020/1/2945.3状态机设计状态机(StateMachine)是一类很重要的时序电路,是很多数字电路的核心部件,是大型电子设计的基础。状态机相当于一个控制器,通过预先设计的顺序在各状态之间进行转换,状态转换的过程就是实现逻辑功能的过程。状态机有摩尔(Moore)型和米里(Mealy)型两种。Moore型状态机的输出信号只与当前状态有关;Mealy型状态机的输出信号不仅与当前状态有关,还与输入信号有关。如图5-1所示。2020/1/295状态机(StateMachine)是一类很重要的时序电路,是很多数字电路的核心部件,是大型电子设计的基础。状态机相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状态转换的过程就是实现逻辑功能的过程。摩尔(Moore)型:输出信号只与当前状态有关;米里(Mealy)型:输出信号不仅与当前状态有关,还与输入信号有关。2020/1/296a)Moore型状态机次态译码器输出译码器寄存器输入输出.........次态译码器输出译码器寄存器输入输出.........图5-2两种状态机的模型b)Mealy型状态机2020/1/297一般有限状态机的设计方法用TYPE语句定义枚举类型来说明状态机的状态通过进程来描述状态的转移和输出内部逻辑可使用多进程方式来描述(例如时序逻辑进程、组合逻辑进程,其它逻辑进程)2020/1/2985.3.1摩尔型状态机的设计1.空调控制器设计要求:两个输入temp_high和temp_low分别与温度传感器相连,用于检测室内温度。如果温度适宜(如18℃~25℃),则两个输入均为低;如果室内温度超过上限(25℃),则输入temp_high为高;如果室内温度低于下限(18℃),则输入temp_low为高。设控制器的输出为“heat”和“cool”,当两者之一为高时,空调器就制热或制冷。控制器状态机的状态转换如图5-3所示。2020/1/299图5-3空调控制器状态转换图temp-high=0temp-low=0heat=0cool=0cool=0heat=1cool=1heat=0temp-high=1正好太冷太热temp-high=0temp-low=0temp-high=0temp-low=0temp-low=1temp-high=1temp-high=1temp-low=1temp-low=12020/1/2910控制器的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYair_contISPORT(clk:INSTD_LOGIC;temp_high:INSTD_LOGIC;temp_low:INSTD_LOGIC;heat:OUTSTD_LOGIC;cool:OUTSTD_LOGIC);ENDair_cont;ARCHITECTUREarc1OFair_contISTYPEstate_typeIS(just_right,too_cold,too_hot);--状态类型,枚举三种状态SIGNALstvar:state_type;--状态变量BEGINPROCESSBEGIN2020/1/2911控制器的VHDL描述(接上页)WAITONclkUNTILRISING_EDGE(clk);--等待clk上升沿IFtemp_low='1'THENstvar=too_cold;--次态逻辑ELSIFtemp_high='1'THENstvar=too_hot;ELSEstvar=just_right;ENDIF;CASEstvarIS--输出逻辑WHENjust_right=heat='0';cool='0';--正好,不制冷,也不制热WHENtoo_cold=heat='1';cool='0';--太冷,制热WHENtoo_hot=heat='0';cool='1';--太热,制冷ENDCASE;ENDPROCESS;ENDarc1;注意,状态变量的判断必须用CASE语句,不能用IF语句2020/1/29122.序列检测器用途:序列检测器在数字通信、雷达和遥控遥测等领域中用于检测同步识别标志。功能:检测一组或多组序列信号,本例要求检测器连续收到一组串行码(1110010)后,输出检测标志为1;否则,输出为0。分析:该例要检测的序列码是7位,需要7个状态分别记忆连续收到了1,11,111,1110,11100,111001,1110010的7个状态,还要增加一个“未收到一个有效位”的初始状态,共8个状态。这8个状态用S0~S7来表示。状态转移图如图5-3所示。2020/1/2913图5-3序列检测器的状态图2020/1/2914LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYjcqISPORT(clk,xi:INSTD_LOGIC;z:OUTSTD_LOGIC);ENDjcq;ARCHITECTUREarchjcqOFjcqISTYPEstate_typeIS(S0,S1,S2,S3,S4,S5,S6,S7);SIGNALpresent_state,next_state:state_type;BEGINstate_comb:PROCESS(present_state,xi)BEGINCASEpresent_stateISWHENS0=z='0';IFxi='1'THENnext_state=S1;ELSEnext_state=S0;ENDIF;2020/1/2915WHENS1=z='0';IFxi='1'THENnext_state=S2;ELSEnext_state=S0;ENDIF;WHENS2=z='0';IFxi='1'THENnext_state=S3;ELSEnext_state=S0;ENDIF;WHENS3=z='0';IFxi='1'THENnext_state=S3;ELSEnext_state=S4;ENDIF;WHENS4=z='0';IFxi='1'THENnext_state=S1;ELSEnext_state=S5;ENDIF;WHENS5=z='0';IFxi='1'THENnext_state=S6;ELSEnext_state=S0;ENDIF;WHENS6=z='0';IFxi='1'THENnext_state=S2;ELSEnext_state=S7;ENDIF;WHENS7=z='1';IFxi='1'THENnext_state=S1;ELSEnext_state=S0;ENDIF;2020/1/2916ENDCASE;ENDPROCESSstate_comb;state_clk:PROCESS(clk)BEGINIFclk'EVENTANDclk='1'THENpresent_state=next_state;ENDIF;ENDPROCESSstate_clk;ENDarchjcq;源文件有两个进程:第一个进程说明次态的取值由现态及输入决定,但并没有指出它在什么时候成为现态;第二个进程,我们可以看到该赋值过程与时钟的上升沿同步。因为序列检测器使用了两个进程来定义有限状态机,故而我们称之为双进程的有限状态机描述方式。2020/1/29175.3.2米里型状态机的设计米里型状态机应具有以下端口信号:时钟输入端:clk;输入变量:input1;输出变量:output1;状态复位端:reset;下面给出的是米里型状态机的典型电路的VHDL描述,对于更复杂的数字系统的程序设计,可查阅有关资料,通过一定的练习逐步掌握。2020/1/2918LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYstatmach4ISPORT(clk,input1,reset:INBIT;output1:OUTINTEGERRANGE0TO4);ENDstatmach4;ARCHITECTUREaOFstatmach4ISTYPEstate_typeIS(s0,s1,s2,s3);SIGNALstate:state_type;BEGINPROCESS(clk)BEGINIFreset='1'THENstate=s0;ELSIF(clk'EVENTANDclk='1')THENCASEstateISWHENs0=state=s1;WHENs1=2020/1/2919IFinput1='1'THENstate=s2;ELSEstate=s1;ENDIF;WHENs2=IFinput1='1'THENstate=s3;ELSEstate=s2;ENDIF;WHENs3=state=s0;ENDCASE;ENDIF;ENDPROCESS;PROCESS(state,input1)BEGINCASEstateISWHENs0=IFinput1='1'THENoutput1=0;ELSEoutput1=4;ENDIF;2020/1/2920WHENs1=IFinput1='1'THENoutput1=1;ELSEoutput1=4;ENDIF;WHENs2=IFinput1='1'THENoutput1=2;ELSEoutput1=4;ENDIF;WHENs3=IFinput1='1'THENoutput1=3;ELSEoutput1=4;ENDIF;ENDCASE;ENDPROCESS;ENDa;2020/1/29215.4存储器设计5.4.1只读存储器ROM5.4.2静态随机存储器SRAM5.4.3先入后出堆栈2020/1/29225.5特色实用电路设计5.5.1计数器型防抖动电路设计5.5.2积分分频器电路设计

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功