《EDA技术综合应用设计实例》由会员分享,可在线阅读,更多相关《EDA技术综合应用设计实例(25页珍藏版)》请在金锄头文库上搜索。
1、第9章 EDA技术综合应用设计实例本章提要:本章介绍了两个EDA技术的综合应用设计实例:数字闹钟和直接数字频率合 成器DDS。学习要求:在教师讲授掌握这些设计实例的设计思想的基础上,要求学生熟练地掌握各 个模块及整个系统的设计思想,上机独立的将各个程序调试成功,将各个程序进行仿真及结 果分析,最后应在自己所拥有的EDA实验开发系统上直接或稍作修改后进行硬件验证。关键词:数字闹钟(Digital Clock)、直接数字频率合成器DDS(Direct Digital Synthesis)。9.1数字闹钟的设计9.1.1系统的设计要求9.1.2系统的总体设计9.1.3闹钟控制器的设计9.1.4预置寄
2、存器的设计9.1.5闹钟寄存器的设计9.1.6分频电路的设计9.1.7时间计数器的设计9.1.8显示驱动器的设计9.1.9系统的总装设计9.1.10系统的硬件验证9.2直接数字频率合成器DDS的设计9.2.1 DDS的基本原理9.2.2 参数确定及误差分析9.3.3 实现器件的选择9.4.4 DDS的FPGA实现设计9.1数字闹钟的设计9.1.1系统的设计要求本课题要求设计一个24小时的数字闹钟,该数字闹钟的面板如图9.1所示,它包括以下 几个组成部分:(1)显示屏,由7个七段数码管组成,其中6个用于显示当前时间(时:分: 秒)或设置的闹钟时间,而另一个则用于显示系统内部产生的周期性循环变化的
3、待选预置数 字;(2)YES (确认)键:用于输入新的时间或新的闹钟时间时,对每位待选预置数字输入 的确认;(3)TIME(时间)键:用于确定新的时间设置;ALARM(闹钟)键:用于确定新的闹 钟时间设置,或显示已设置的闹钟时间;(5)扬声器,在当前时钟时间与闹钟时间相同时, 发出蜂鸣声。该数字闹钟的具体功能要求如下:(1)计时功能:这是本数字闹钟设计的基本功能,每隔1秒钟计时一次,并在显示屏 上显示当前时间;(2)闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声;(3)设置新的计时器时间:系统内部产生的周期性循环变化的待选预置数字,当用户 按”YES”键后则该数字将作为预置数字
4、输入;在输入过程中,输入数字在显示屏上从右到左 依次显示,例如,用户要设置新的时间12 : 48 : 56,则按顺序先后输 入”1”,”2”,”4”,”8”,”5”,”6”,与之对应,显示屏依次显示的信息 为:”1”,”12”, ”124”,”1248”, ”12485”,”124856”。如果用户在输入任意几个数字后较长 时间内,例如5秒,没有按任何键,则计时器恢复到正常的计时显示状态。(4) 设置新的闹钟时间:用户用YES键输入新的时间,然后ALARM”键确认,过 程与3类似。(5) 显示所设置闹钟时间:在正常计时显示状态下,用户直接按下“ALARM”键则已 设置的闹钟时间显示在显示屏上。
5、根据该系统的设计功能要求,整个系统大致包括如下几个组成部分:用于预置数字输入 的预置数字缓冲器;用于数字闹钟计时的计数器;用于保存闹钟时间的寄存器;用于显示的 七段数码显示电路以及控制以上各个部分协同工作的控制器。图9.1数字闹钟面板图9.1.2系统的总体设计CLOCKYE SALARM_BUTT O HT X ME _BRJTT O Hl_E D W -SE G 7 2 . . 0CLKRE SE T5OU N D _r i_ Fb Ft ri图9.2计时器的外部端口根据该数字闹钟的设计要求,我们可得到其外部端口如图9.2所示。各个输入/输出端口 的作用如下:(1) CLK为外部时钟信号,R
6、ESET为复位信号。(2) 当YES为高电平时(YES= T),表示用户选择了某个预置数字。(3) 当ALARM_BUTTON为高电平时,表示用户按下ALARM键。(4) 当TIME_BUTTON为高电平时,表示用户按下TIME键。(5) SEG7是数据动态扫描显示的公共八段数码显示管驱动端,而LEDW则是数码管的 位选择端,它经过外接的38译码器译码后接数码管的公共端COM。(6) SOUND_ALARM用于控制扬声器发声,当SOUND_ALARM = T时,扬声器发出 蜂鸣,表示到了设定的闹钟时间。根据系统的设计要求,整个系统可分为闹钟控制器、预置寄存器、分频电路、时间计数器、闹钟寄存器、
7、显示驱动控制器等6个模块,其总体设计原理图如图9. 3所示。各图9. 3系统总体设计原理图个模块的作用介绍如下:(1) 闹钟控制器(CONTROL):它是整个系统正常有序工作的核心,按设计要求产生相 应的控制逻辑,以控制其他各部分的协调工作。(2) 预置寄存器(KEYBUFFER):这时一个预置数字产生器和移位寄存器的结合体。通 过对YES进行操作,选择输入欲输入的数字,暂存用户输入的数字,并且用户每输入一个 数字,暂存数字移位一次,实现用户输入数字在显示器上从右到左的依次显示。(3) 分频电路(DIVIDER):将较高速的外部时钟频率分频成每秒钟一次的时钟频率,以 便进行时钟计数。(4) 时
8、间计数器(COUNTER):实际上是一个异步复位、异步置数的累加器,通常情况 下进行时钟累加计数,必要时可置入新的时钟值,然后从该值开始新的计数。(5) 闹钟寄存器(REG):用于保存用户设置的闹钟时间,是一个异步复位寄存器。(6) 显示驱动器(DRIVER):根据需要显示当前时间、用户设置的闹钟时间或用户输入 的预置时间,同时判断当前时间是否已到了闹钟时间,实际上是一个多路选择器加比较器。 对具体数据的显示,采用的是动态扫描显示方式。9.1.3闹钟控制器的设计CONTROLKE Tl_ORD_HEU_ AAI_RRM_ DUTTONl_OAD_NEU_CTIME_BUTTOHSHDW_HEW
9、_TIHECLWRE SE T图9.4 闹钟控制器的外部端口闹钟控制器的外部端口如图9.4所示,各端口的作用如下:(1) CLK为外部时钟信号,RESET为复位信号。(2) 当KEY为高电平(KEY= T)时,表示用户按下数字键(“0”“9”)。(3) 当ALARM_BUTTON为高电平时,表示用户按下“ALARM”键。(4) 当TIME_BUTTON为高电平时,表示用户按下“TIME”键。(5) 当LOAD_NEW_A为高电平时,控制(闹钟时间寄存器)加载新的闹钟时间值。(6) 当LOAD_NEW_C为高电平时,控制(时钟计数器)设置新的时间值。(7) 当SHOW_NEW_TIME为高电平时
10、,控制(七段数码显示电路)显示新的时间值,即 用户输入的预置时间;否则,当SHOW_NEW_TIME为低电平时,根据SHOW_A信号的值 控制显示当前时间或闹钟时间。此时,当SHOW_A为高电平时,控制显示闹钟时间,否则, 显示当前时间。控制器的功能可以通过有限状态自动机(FSM)的方式来实现。根据设计要求及端口设 置,需要五个状态来实现:S0:表示电路初态即正常时钟计数状态,完成计时功能。S1:接收预置数字输入状态。在状态S0时用户按下“YES”键后进入此状态。在此状态 下,显示屏上显示的是用户预置的数字。S2:设置新的闹钟时间。在状态S1时用户按下ALARM键后进入此状态。S3:设置新的计
11、时器时间。在状态S1时用户按下TIME键后进入此状态。S4:显示闹钟时间。在状态S0时用户直接按下ALARM键后进入此状态。在此状态下, 显示屏上显示的是所设置的闹钟时间。注意:在此状态下,用户按下ALARM键后,显示 屏上保持显示闹钟时间,经过一段时间以后,再返回状态S0显示计时器时间。相应的状态转换及控制如表9.1所示。表9.1控制器状态转换及控制输出表当前状态控制输入(条件)下一状态控制输出(动作)S0YES = 1S1SHOW_NEW_TIME = 1ALARM_BUTTON = 1S4SHOW_A = 1否则S0-S1YES = 1S1SHOW_NEW_TIME = 1ALARM_B
12、UTTON = 1S2LOAD_NEW_A = 1TIME_BUTTON = 1S3LOAD_NEW_C = 1否则(超时)否S1SHOW NEW TIME = 1,“超时”判断处理是S0-S2ALARM_BUTTON = 1S2LOAD_NEW_A = 1否则S0-S3TIME_BUTTON = 1S3LOAD_NEW_C = 1否则S0-S4ALARM_BUTTON = 1S4SHOW_A = 1否则(超时)否S4SHOW_A = 1,“超时”判断处理是S0-表9. 1中没有显式说明的控制信号赋值,表示信号的值为零。例如在状态S0,当信号 YES = T 时,SHOW_NEW_TIME 信
13、号的赋值为 1,而其他信号 LOAD_NEW_A、LOAD_NEW_C 和SHOW_A的值此时都赋为0。另外,表中关于“超时”判断处理的处理细节见VHDL源程 序中的有关部分。由于在整个系统中有多个模块需要用到自行设计的数据类型,并且这些数据类型大部分 相同,因此我们为了使用上的方便,可设计一个程序包P_ALARM,该程序既可加在调用该程 序包的程序前面,也可加在整个系统的顶层设计程序的前面。但是对于一个比较复杂系统的 设计,一般是分模块进行设计和调试,所以加在各个调用该程序包的程序前面会比较方便写。 程序包P_ALARM的具体设计如下:LIBRARY IEEE;USE IEEE.STD_LO
14、GIC_1164.ALL;PACKAGE P_ALARM ISSUBTYPE T_DIGITAL IS INTEGER RANGE 0 TO 9;SUBTYPE T_SHORT IS INTEGER RANGE 0 TO 65535;TYPE T_CLOCK_TIME IS ARRAY (5 DOWNTO 0) OF T_DIGITAL;TYPE T_DISPLAY IS ARRAY (5 DOWNTO 0) OF T_DIGITAL;END PACKAGE P_ALARM;根据上面的设计分析,我们可将闹钟控制器的VHDL源程序设计如下:-控制器源程序CONTROL.VHDLIBRARY IE
15、EE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.P_ALARM.ALL;ENTITY CONTROL ISPORT(KEY:IN STD_LOGIC;ALARM_BUTTON:IN STD_LOGIC;TIME_BUTTON:IN STD_LOGIC;CLK:IN STD_LOGIC;RESET:IN STD_LOGIC;LOAD_NEW_A:OUT STD_LOGIC;LOAD_NEW_C:OUT STD_LOGIC;SHOW_NEW_TIME:OUT STD_LOGIC;SHOW_A:OUT STD_LOGIC);END ENTITY CONTROL;ARCHITECTURE ART OF CONTROL ISTYP