《数字电子技术基础-第11章.ppt》由会员分享,可在线阅读,更多相关《数字电子技术基础-第11章.ppt(76页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第11章VHDL数字系统设计实例 11.1数字系统设计简介数字系统设计简介11.1.1数字系统的基本结构数字系统的基本结构数字系统由若干个数字电路和逻辑功能部件组成,它可以实现数据存储、传输和加工处理等复杂的逻辑功能。数字系统从逻辑上可划分为数据处理单元和控制单元两部分,其结构框图如图11.1.1所示。数据处理单元实现信息的存储、传输和加工处理等功能。控制单元根据外部控制信号和数据处理单元提供的当前状态信号,发出对数据处理单元的控制序列信号,在此控制序列信号的作用下,数据处理单元完成所规定的操作,并向控制单元输出变化后的状态信号,以表示当前的工作状态和数据处理结果。控制单元接收到状态信号后,再
2、发出下一步的控制序列信号,使数据处理单元执行新一轮的操作。第11章VHDL数字系统设计实例 图11.1.1数字系统的结构框图 第11章VHDL数字系统设计实例 11.1.2数字系统的基本设计方法数字系统的基本设计方法传统的数字系统设计多采用自底向上的方法,通常设计者选用标准的通用集成电路芯片和其他元器件,由底层逐级向上构成子系统和系统。其设计过程是:书面设计硬件安装、调试制作样机。这样设计的系统不仅所用元件的种类和数量多,功耗大,可靠性差,而且花费时间多,修改电路和交流设计思想都很不方便。第11章VHDL数字系统设计实例 EDA技术的发展和可编程逻辑器件的普及对数字系统硬件设计产生了很大的影响
3、,它改变了传统的设计思想,使人们可以利用EDA工具,通过芯片的设计来实现数字系统的功能。现代数字系统设计多采用自顶向下的方法。它是一种从抽象到具体,从高层次到低层次,逐步由粗到细的分层次、分模块的设计方法。设计者先将一个硬件系统划分成几个大的模块,设计出各大模块的行为(功能)或结构,并进行仿真以检验设计思想是否正确,然后将大的模块分给下一级设计者。由于自顶向下的设计能够在高层次完成,即一开始进行功能划分和结构设计时,就能通过仿真去检验系统设计思想是否正确,在早期就能发现设计中存在的错误,因而大大提高了系统的设计效率,缩短了设计周期。第11章VHDL数字系统设计实例 数字系统设计主要分系统设计和
4、逻辑设计两个阶段。数字系统的一般设计过程如下:(1)确定顶层系统的方案。这是设计过程的第一阶段,要求对设计任务进行透彻了解,并在此基础上决定设计任务和系统整体的功能、输入信号及输出信号。(2)描述系统功能,设计算法。第11章VHDL数字系统设计实例 描述系统功能是用符号、图形、文字、表达式等形式来正确描述系统应具有的逻辑功能和应达到的技术指标。设计算法是寻求一个解决问题的步骤,实质上是把系统要实现的复杂运算分解成一组有序进行的子运算。描述算法的工具有算法流程图、算法状态机图(ASM,Algorithmic stateMachine)、方框图、硬件描述语言等。在上述描述方法中,硬件描述语言是一种
5、最容易向计算机输入,由计算机自动处理的现代化方法。方框图用于描述数字系统的模型,是系统设计常用的重要手段,它可以详细描述系统的总体结构,并作为进一步设计的基础。第11章VHDL数字系统设计实例(3)根据算法选择电路结构。算法明确后,根据算法选择电路结构,并将系统划分为若干个子系统。若某部分规模仍然较大,则可进一步划分。划分后的多个部分应逻辑功能清楚,便于进行电路设计。(4)设计输入。描述系统功能的输入方式有多种,常用的有原理图输入法、硬件描述语言输入法、波形图输入法等。可以采用其中一种方法输入,也可以多种方法混合使用。(5)设计验证(仿真、测试)和设计实现。第11章VHDL数字系统设计实例 1
6、1.2数字系统设计实例数字系统设计实例11.2.1简易电子琴简易电子琴1.系统原理框图系统原理框图扬声器在不同频率的信号驱动下将发出不同的声音。本设计是利用实验板上的8个按键产生不同的音阶信号,按键不同时,不同的音阶信号产生不同频率的信号去驱动扬声器,从而实现电子琴的功能。根据音乐学理论,每两个8度音之间可分为12个半音,每两个半音之间的频率相差(=1.0599Hz)。若C调第一个音名do的频率定为261.63Hz,则各音名与频率以及2MHz时钟的分频系数的关系如表11.2.1所示。第11章VHDL数字系统设计实例 表表11.2.1音名与频率以及音名与频率以及2MHz时钟的分频系数的关系时钟的
7、分频系数的关系 第11章VHDL数字系统设计实例 简易电子琴的系统框图如图11.2.1所示,它由键盘编码器和时钟分频器组成。键盘编码器产生按键编码信号;时钟分频器产生不同的分频系数,将输入时钟频率分频至各音名对应的频率值,从而驱动扬声器发出该频率的声音。第11章VHDL数字系统设计实例 图11.2.1 电子琴系统框图 第11章VHDL数字系统设计实例 图11.2.2 电子琴顶层原理图 第11章VHDL数字系统设计实例 图11.2.2为实现简易电子琴的顶层原理图。其中,KEYBOARD模块实现对键盘的8-3编码,K7.0为键盘输入,SEL2.0为3位二进制编码输出,EN为使能输出信号(高电平有效
8、);MFREQ模块实现分频功能,CLK为时钟输入,当SEL2.0编码输入不同,且EN输入为高电平时,分频器产生不同的频率值,当SPK输出为1时扬声器响,否则静音。第11章VHDL数字系统设计实例 2.模块设计模块设计1)键盘编码器VHDL描述文件keyboard.vhd如下:library ieee;use ieee.stdlogic1164.all;use ieee.stdlogicunsigned.all;entitykeyboard isport(k:instdlogicvector(7 downto 0);8位键盘输入sel:outstdlogicvector(2 downto 0);
9、3位键盘编码输出en:outstdlogic使能输出);第11章VHDL数字系统设计实例 end keyboard;architecture arckeyboard ofkeyboard isbegin process(k)begincase k iswhen 11111110=sel=001;按键,产生编码 ensel=010;ensel=011;ensel=100;ensel=101;ensel=110;ensel=111;ensel=000;ensel=000;encountldcountldcountldcountldcountldcountldcountldcountldcountl
10、d=0111011101110;3822end case;end process;processbeginwait until clkevent and clk=1;-计数器同步清零if en=0thencount0);spk=1;第11章VHDL数字系统设计实例 当计数值小于countld/2时,spk=1,且加1计数elsif count(0&countld(12 downto 1)thencount=count+1;spk=1;当计数值大于countld/2且小于countld时,spk=0,且加1计数elsif countcountldthencount=count+1;spk=0;-
11、当计数值计到countld时,计数器清零,spk=1 else count0);spk=1;end if;end process;end arcmfreq;第11章VHDL数字系统设计实例 11.2.2用状态机设计的交通信号控制系统用状态机设计的交通信号控制系统1.设计任务设计任务设计一个十字路口交通控制系统,要求如下:(1)东西(用A表示)、南北(用B表示)方向均有绿灯、黄灯、红灯指示,其持续时间分别是40秒、5秒和45秒,交通灯运行的切换示意图和时序图分别如图11.2.3和图11.2.4所示。第11章VHDL数字系统设计实例 图11.2.3交通控制系统运行切换示意图 第11章VHDL数字系
12、统设计实例 图11.2.4交通控制系统的时序图 第11章VHDL数字系统设计实例(2)系统设有时钟,以倒计时方式显示每一路允许通行的时间。(3)当东西或南北两路中任一路出现特殊情况时,系统可由交警手动控制立即进入特殊运行状态,即红灯全亮,时钟停止计时,东西、南北两路所有车辆停止通行;当特殊运行状态结束后,系统恢复工作,继续正常运行。第11章VHDL数字系统设计实例 2.原理分析原理分析本系统主要由分频器、计数器、控制器、倒计时显示器等电路组成。分频器将晶振送来的4MHz信号变为1Hz时钟信号;计数器实现总共90秒的计数,90秒也是交通控制系统的一个大循环;控制器控制系统的状态转移和红、黄、绿灯
13、的信号输出;倒计时显示电路实现45秒倒计时和显示功能。整个系统的工作时序受控制器控制,它是系统的核心。控制器的整个工作过程用状态机进行描述,其状态转移关系如图11.2.5所示。5种状态描述如下:第11章VHDL数字系统设计实例 s0:A方向绿灯亮,B方向红灯亮,此状态持续40秒的时间;s1:A方向黄灯亮,B方向红灯亮,此状态持续5秒的时间;s2:A方向红灯亮,B方向绿灯亮,此状态持续40秒的时间;s3:A方向红灯亮,B方向黄灯亮,此状态持续5秒的时间;s4:紧急制动状态,A方向红灯亮,B方向红灯亮,当紧急制动信号有效(hold=0)时进入这种状态。第11章VHDL数字系统设计实例 图11.2.
14、5交通控制系统的状态转移图 第11章VHDL数字系统设计实例 当紧急制动信号无效(hold=1)时,状态机按照s0s1s2s3s0循环;当紧急制动信号有效(hold=0)时,状态机立即转入s4,两个方向红灯全亮,计数器停止计数;当紧急制动信号再恢复无效时,状态机会回到原来的状态继续执行。第11章VHDL数字系统设计实例 3.电路设计电路设计交通控制系统顶层原理图如图11.2.6所示,它主要由4MHz分频器(DEVIDE4M)模块、控制器(CONTROL)、45秒倒计时计数器(M45)模块、7字段译码器(SEG7)模块组成。4MHz分频器和7段译码器的设计可参照例10.6.14和例10.6.4,
15、下面主要介绍控制器和倒计时计数器M45的设计方法。第11章VHDL数字系统设计实例 图11.2.6交通控制系统顶层原理图 第11章VHDL数字系统设计实例 1)控制器的设计控制器CONTROL的逻辑符号如图11.2.7所示。其中,CLK为时钟输入信号;HOLD为紧急制动信号;ARED、AGREEN、AYELLOW分别为东西方向驱动红灯、绿灯、黄灯指示的输出信号;BRED、BGREEN、BYELLOW分别为南北方向驱动红灯、绿灯、黄灯指示的输出信号。控制器按照图11.2.5所示的状态转移图控制系统的时序,即各方向红、绿、黄灯的亮、灭时间。第11章VHDL数字系统设计实例 图11.2.7控制器的逻
16、辑符号第11章VHDL数字系统设计实例 控制器的VHDL描述文件control.vhd如下:library ieee;use ieee.stdlogic1164.all;use ieee.stdlogicunsigned.all;entitycontrol is port(clk,hold:instdlogic;ared,agreen,ayellow,bred,bgreen,byellow:outstdlogic);end control;architecture behavior ofcontrol istype statetype is(s0,s1,s2,s3,s4);signal cur
17、rent state,next state:statetype;signalcounter:stdlogicvector(6 downto 0);第11章VHDL数字系统设计实例 beginsynch:processbeginwait until clkevent and clk=1;if hold=0then当紧急制动信号有效时,计数器停止计数counter=counter;else当紧急制动信号无效时,计数器进行周期为90s的计数if counter89thencounter=counter+1;elsecounter0);end if;end if;end process;第11章VHD
18、L数字系统设计实例 process状态机的状态转移描述beginwait until clkevent and clk=1;current stateifhold=0thennext state=s4;elseifcounter39thennext state=s0;第11章VHDL数字系统设计实例 elsenext stateif hold=0thennext state=s4;elseif counter44thennext state=s1;elsenext state 第11章VHDL数字系统设计实例 if hold=0thennext state=s4;elseifcounter84
19、thennext state=s2;elsenext stateif hold=0thennext state=s4;elseif counter89thennext state=s3;else 第11章VHDL数字系统设计实例 next stateif hold=0thennext state=s4;elseif counter39 thennext state=s0;elsif counter44 thennext state=s1;elsif counter84 thennext state=s2;elsif counter89 thennext stateared=0;agreen=1
20、;ayellow=0;bred=1;bgreen=0;byellowared=0;agreen=0;ayellow=1;bred=1;bgreen=0;byellowared=1;agreen=0;ayellow=0;bred=0;bgreen=1;byellow ared=1;第11章VHDL数字系统设计实例 agreen=0;ayellow=0;bred=0;bgreen=0;byellowared=1;agreen=0;ayellow=0;bred=1;bgreen=0;byellow=0;end case;end process;end behavior;第11章VHDL数字系统设计实
21、例 图11.2.8控制器的仿真波形 第11章VHDL数字系统设计实例 2)倒计时计数器M45的设计倒计时计数器M45的逻辑符号如图11.2.9所示。其中,CLK、EN、CR分别为时钟、计数使能和清零端,QL3.0、QH3.0、OC分别为BCD码的个位、十位和进位输出。图11.2.9倒计时计数器的逻辑符号 第11章VHDL数字系统设计实例 VHDL描述文件m45.vhd如下:library ieee;use ieee.stdlogic1164.all;use ieee.stdlogicunsigned.all;entitym45 isport(CLK:instdlogic;EN :instdlo
22、gic;CR :instdlogic;QL,QH:outstdlogicvector(3 downto 0);OC :outstdlogic );end m45;第11章VHDL数字系统设计实例 architecturebehav ofm45 issignalcouL,couH:stdlogicvector(3 downto 0);beginprocess(CR,CLK,EN)beginif CR=0then异步清零couL=0000;couH=0000;elsif clkevent and clk=1thenif EN=1thenif(couL=0 andcouH=0)then减法计到00后
23、,重新置数44 couL=0100;couH=0100;elsif couL=0 then否则个位计到0时置为9,十位减1 第11章VHDL数字系统设计实例 couL=1001;couH=couH-1;elsecouL=couL-1;否则个位减1end if;end if;end if;end process;process(couL,couH)beginif(couL=0 andcouH=0)thenOC=1;减到00时有借位输出elseOC=0;end if;end process;QL=couL;QH=couH;end behav;第11章VHDL数字系统设计实例 图11.2.10倒计时
24、计数器M45的仿真波形 第11章VHDL数字系统设计实例 11.2.3函数信号发生器函数信号发生器1.系统原理框图系统原理框图函数信号发生器电路能够产生用户需要的特定波形信号,其基本构成为数字逻辑电路加D/A转换器。本节描述的函数信号发生器可产生4种波形,分别是:锯齿波、三角波、方波和正弦波,通过选择器选择以后送给D/A转换器产生相应的信号波形输出,具体如图11.2.11所示。其中,用虚线框起来的部分属于数字电路部分。第11章VHDL数字系统设计实例 图11.2.11函数信号发生器的电路框图 第11章VHDL数字系统设计实例 各种波形示意图如图11.2.12所示。锯齿波、三角波和方波每个周期有
25、256点数据,而正弦波为了简化设计每个周期有64点数据。数据线采用8位宽度,因此每种波形幅度的最大值不超过255。第11章VHDL数字系统设计实例 图11.2.12信号波形示意图 第11章VHDL数字系统设计实例 每种波形第i个点的幅度值计算如下:锯齿波:qsawtooth(i)=i,i=0255。三角波:当i=0127时,qtriangle(i)=i;当i=128255时,与前面的半个周期对称。方波:当i=0127时,qsquare(i)=255;当i=128255时,qsquare(i)=0。正弦波:qsin(i)=128+128sin(23.14i/64),i=063。四种波形数据产生以
26、后,由sel1.0选择输出哪种波形数据。第11章VHDL数字系统设计实例 2模块设计模块设计函数信号发生器电路数字部分的硬件语言描述如下:library ieee;use ieee.stdlogic1164.all;use ieee.stdlogicunsigned.all;use ieee.stdlogicarith.all;entity waveform isport(clk:instdlogic;sel:instdlogicvector(1 downto 0);qout:outstdlogicvector(7 downto 0);end waveform;第11章VHDL数字系统设计实例
27、 architecture arc ofwaveform issignalqsawtooth:stdlogicvector(7 downto 0);锯齿波信号signalqtriangle:stdlogicvector(7 downto 0);三角波信号signalqsquare:stdlogicvector(7 downto 0);方波信号signalqsin:integerrange0to255;正弦波信号signalcounter:stdlogicvector(7 downto 0);begin计数器,同时也是锯齿波波形产生电路 processbegin 第11章VHDL数字系统设计实例
28、 wait until clkevent and clk=1;counter=counter+1;end process;qsawtooth=counter;三角波波形产生电路processbeginwait until clkevent and clk=1;covnstdlogicvector(127,8),将interger类型的数据127转换成stdlogicvector类型的8位数据if counter=convstdlogicvector(127,8)then 第11章VHDL数字系统设计实例 qtriangle=qtriangle+1;elseqtriangle=qtriangle
29、-1;end if;end process;-方波波形产生电路processbeginwait until clkevent and clk=1;ifcounter=convstdlogicvector(127,8)thenqsquare=XFF;elseqsquare0);end if;end process;第11章VHDL数字系统设计实例 sin波形发生电路将一个周期的正弦波(共64点)的幅度值直接送给信号qsin processbeginwait until clkevent and clk=1;convinteger(counter(7 downto 2)将stdlogicvecto
30、r类型的数据counter(7 downto 2)转换成interger类型的数据case convinteger(counter(7 downto 2)is when 0=qsinqsinqsinqsinqsinqsinqsinqsinqsinqsinqsinqsin=240;第11章VHDL数字系统设计实例 第11章VHDL数字系统设计实例 第11章VHDL数字系统设计实例 在上面的硬件语言描述中使用了一个函数convstdlogicvector(a,b),其作用是将interger类型的数据转换成stdlogicvector类型的数据。其中,参数a表示要转换的整形数,参数b表示生成的st
31、dlogicvector数据的位数。该函数属于stdlogicarith库,所以在最前面库的包含里必须有use ieee.stdlogicarith,否则仿真工具或综合工具都会提示出错。第11章VHDL数字系统设计实例 11.2.4基于基于DDS的正弦信号发生器的正弦信号发生器1直接数字频率合成器原理简介直接数字频率合成器原理简介直接数字频率合成器(DDS,DirectDigitalSynthesizer)是从相位概念出发直接合成所需波形的一种频率合成技术。一个数字频率合成器由相位累加器、加法器、波形存储ROM、D/A转换器和低通滤波器(LPF)构成。DDS的原理框图如图11.2.13所示。第
32、11章VHDL数字系统设计实例 图11.2.13DDS的原理框图 第11章VHDL数字系统设计实例 图中,K为频率控制字,P为相位控制字,相位累加器的字长为N位,ROM及D/A转换器的位宽为D位。相位累加器在时钟fc的控制下以步长K进行累加,输出的N位二进制码与相位控制字P相加后作为存储波形的ROM的地址对ROM进行寻址。ROM输出D位的幅度码S(n),经D/A转换后变成模拟信号S(t),再经过低通滤波器平滑后就可以得到合成的信号波形。波形形状取决于ROM中存放的数据,因此DDS可以产生任意波形。下面我们以正弦波为例介绍DDS的波形产生原理。第11章VHDL数字系统设计实例 1)频率设置K称为
33、频率控制字,也叫相位增量。输出信号的频率与时钟频率之间的关系为其中,f0为输出信号的频率,fc为时钟频率,N为相位累加器的位数。当K1时,DDS输出最低频率(即频率分辨率)为fc/2N,因此当N值很大时,可以得到很小的频率间隔。要改变DDS的输出频率,只要改变频率控制字K即可。第11章VHDL数字系统设计实例 2)累加器相位累加器由内部N位加法器和N位寄存器组成。每来一个时钟作用沿,加法器将频率控制字K与寄存器输出的数据相加,再把相加的结果送至寄存器输入端。下一个时钟来到后,寄存器将其输出数据又送至加法器输入端继续与频率控制字相加,从而完成在时钟作用下的相位累加。因此每来一个时钟,相位累加器的
34、输出就增加一个步长的相位增量,当相位累加到满量程时便产生一次溢出,完成一个周期的动作。第11章VHDL数字系统设计实例 3)相位调节器相位调节器将相位累加器的输出数据和相位控制字P相加,实现信号的相位调节。改变相位控制字P可控制输入信号的相位参数。如果相位调节器的字长为N,则当相位控制字由0变为P时,输出信号的相位增加2P/2N。4)波形存储器用相位调节器输出的数据作为波形存储器的取样地址,进行波形数据的寻址,即可确定输出波形的取样幅度。N位的ROM相当于把0360的正弦信号离散成具有2N个样点的序列。若ROM的数据位宽为D,则2N个样点的幅值以D位二进制数值存在ROM中,按照地址的不同可以输
35、出相应相位的正弦信号的幅值。第11章VHDL数字系统设计实例 5)D/A转换器转换器D/A转换器的作用是把合成的正弦波数字量转换成模拟量。转换之后输出波形变成了包络为正弦波的阶梯波S(t)。D/A转换器的分辨率越高,合成的正弦波台阶数就越多,输出的波形精度也就越高。第11章VHDL数字系统设计实例 6)低通滤波器对D/A输出的阶梯波S(t)进行频谱分析可知,S(t)中除主频f0外,还存在分布在fc,2fc,两边f0处的非谐波分量。因此,为了取出主频f0,必须在D/A转换器的输出端接入截止频率为fc/2的低通滤波器。在上面几部分电路中,累加器、控制相位的加法器和ROM存储器可以在FPGA内部实现
36、,而D/A转换器和低通滤波器包含模拟电路,不能在FPGA内部实现。下面我们介绍FPGA内部电路的设计过程。第11章VHDL数字系统设计实例 第11章VHDL数字系统设计实例 2)系统设计按照上面的参数进行设计,VHDL语言描述如下:library ieee;use ieee.stdlogic1164.all;use ieee.stdlogicunsigned.all;use ieee.stdlogicarith.all;entity dds isport(rst:instdlogic;clk:instdlogic;k:instdlogicvector(7 downto 0);p:instdlo
37、gicvector(7 downto 0);第11章VHDL数字系统设计实例 dout:outstdlogicvector(7 downto 0);end dds;architecture arc ofdds istypeRom256x8 isarray(0to255)ofstdlogicvector(7 downto 0);存储256点的正弦波数据(1个周期),每个样点为8位,X80表示16进制的数值80第i个点的正弦波幅值计算公式:128+128sin(23.14i/256)第11章VHDL数字系统设计实例 第11章VHDL数字系统设计实例 第11章VHDL数字系统设计实例 signal
38、counter:stdlogicvector(7 downto 0);signal phaseshift :stdlogicvector(7 downto 0);signal address :stdlogicvector(7 downto 0);begin process累加器描述 begin wait until clkevent and clk=1;if rst=1thencounter0);elsecounter=counter+k;end if;end process;第11章VHDL数字系统设计实例 process相位加法器描述beginwait until clkevent and clk=1;ifrst=1then=phaseshift0);elsephaseshift=counter+p;end if;end process;address=phaseshift;dout=Rom(convinteger(address);ROM寻址并输出数据end arc;第11章VHDL数字系统设计实例 图11.2.14DDS波形发生器的仿真波形