1、 EDA课程设计汇报设计题目: 数字时钟设计 班 级: 电气工程及其自动化 姓 名: 学 号: 日 期: 6月15日 目录摘要一、课程设计任务及要求31.1试验目标31.2功效设计4二、整体设计思想42.1性能指标及功效设计42.2总体方框图4三、具体设计53.1数字时钟结构:53.2控制模块结构53.3.1按键处理模块63.3.2定时时钟模块63.3.3扫描时钟模块63.3.4定时计数模块63.3.5显示控制模块7四、主程序.7五、试验步骤145.1工程建立及存盘 145.2时序仿真 145.3引脚锁定 145.4硬件测试 155.5试验结果 15结束语 15参考文件 16EDA技术实现数字
2、电子时钟设计作者: 指导老师: 摘 要 EDA技术在硬件实现方面融合了大规模集成电路制造技术,IC版图设计技术、ASIC测 试和封装技术、FPGA /CPLD编程下载技术、自动检测技术等;EDA技术为现代电子理论和设计表示和实现提供了可能性。在现代技术全部领域中,纵观很多得以飞速发展科学技术,多为计算机辅助设计,而非自动化设计。显然,最早进入设计自动化技术领域之一是电子技术,这就是为何电子技术一直处于全部科学技术发展最前列原因之一。不难了解,EDA技术已不是某一学科分支,或某种新技能技术,应该是一门综合性学科。它融合多学科于一体,打破了软件和硬件间壁垒,是计算机软件技术和硬件实现、设计效率和产
3、品性能合二为一,它代表了电子设计技术合应用激活速 发展方向。电子时钟以成为大家常生活中数字电子钟通常由振荡器,分频器,译码器,显示器等部分组成。电子时钟应用很广泛,应用于人家庭或车站、剧场、办公室等公共场所,给大家生活,学习,工作,娱乐带来极大便利, 尽管现在市场上以有现成电子时钟集成电路芯片,价格廉价这些全部是数字电路中最基础,应用最广电路。数字电子钟基础逻辑功效框图以下:它是一个将“时”,“分”,“秒”显示于人视觉器官计时装置。她计时装置周期为二十四小时,显示满刻度为23时 59分59秒,另外应有校时功效。 关键字:EDA;VHDL语言;电子时钟 一、 课程设计任务及要求1.1试验内容选择
4、适宜可编程逻辑器件及外围电子元器件。设计一个数字电子钟,利用EDA软件(QUARTUS)进行编译及仿真,设计输入可采取VHDL硬件描述语言输入法和原理图输入法,并下载到EDA试验开发系统,连接外围电路,完成实际测试。1.2设计要求1)用六个数码管显示时、分、秒信息2)设置复位功效,可经过复位键将时、分、秒清零3)含有时、分预置功效,可分别对时和分做递增设置和递减设置二、整体设计思想2.1性能指标及功效设计 数字钟时常见一个计数装置,数字钟以1Hz频率工作。该设计完成数字钟运行和显示。其关键功效有: (1)数字钟以1Hz频率工作,其输入频率为1MHz。 (2)数字钟显示时、分、秒信息。这些显示信
5、息在6个7段数码管上完成。 (3)经过按键设置时、分信息。而且含有对数字钟复位功效。 复位键将时、分、秒清零,并做好重新计数准备。按键含有预置时、分功效。分别对目前时和分信息做递增设置和递减设置。2.2总体方框图三、具体设计3.1数字时钟结构该数字钟控制部分由PLD芯片完成。该芯片输入和输出接口由下面信号组成:输入信号:复位信号(reset)时钟输入信号(clk)小时递增信号(inc_hour)小时递减信号(sub_hour)分钟递增信号(inc_min)分钟递减信号(sub_min)输出信号:7段数码管选信号(sel)7段数码管段选信号(q)3.2控制模块结构该设计分成下面五个模块:定时时钟
6、模块、扫描时钟模块、按键处理模块、定时计数模块和显示控制模块。图11.2给出了这多个模块之间信号连接关系。 3.2.1、按键处理模块 因为VHDL语言规则,将按键处理和定时模块设计在一起。为了描述清楚,将对按键处理进行说明。在该设计中,采取异步复位电路方法。当复位信号低有效时,计数器停止计数,时、分、秒清零。对于小时递增、递减按键操作,经过一个1Hz计数时钟采样。图11.3给出了递增、递减操作时序。当1Hzdiv_clk信号上升沿到来时,检测hour_inc和hour_dec按键,图中虚线表示在时钟上升沿对按键信号进行采样。当hour_inc或hour_dec按键低有效时,对小时进行递加或递减
7、操作。对于分钟递加、递减按键操作,也是经过一个1Hz计数时钟采样。原理同图11.3。 3.2.2、定时时钟模块定时时钟模块其作用就是将外部提供1MHz时钟,经过分频器后向模块内定时计数模块提供1Hz定时计数时钟。在设计定时时钟模块时,采取同时计数电路。 3.2.3、扫描时钟模块扫描时钟模块作用就是经过对1MHz分频处理后,向显示控制模块提供适宜显示扫描时钟,该时钟必需经过合理设计,才能确保7段数码显示稳定。在设计扫描时钟模块时,采取同时计数电路。 3.2.4、定时计数模块 定时计数模块是该设计中最关键一部分,在设计该模块时,为了便于后续显示控制模块设计,将时、分、秒进行分离,即小时分成了小时十
8、位和个位分别处理,分钟分成了分钟十位和个位分别处理。秒分成了秒十位和个位分别处理。在该设计中,采取二十四小时计数模式。 比如:13:28:57。13为小时表示,1为小时十位,3为小时个位;28为分钟表示,2为分钟十位,8为分钟个位;57为秒表示,5为秒十位,7为秒个位。秒个位计数从0-9,即十进制计数。当秒个位计数到9后,准备向秒十位进位。秒十位计数从0-5,即六进制计数。当秒十位计数到5后,准备向分个位进位。分钟个位计数从0-9,即十进制计数。当分钟个位计数到9后,准备向分钟十位进位。分钟十位计数从0-5,即六进制计数。当分钟十位计数到5后,准备向小时个位进位。对于小时处理比较复杂,小时十位
9、和个位之间存在下面关系:(1)当小时十位为0或1时,小时个位能够计数范围为0-9,即十进制计数;(2)当小时十位为2时,小时各位能够计数范围为0-3,即四进制计数;3.2.5、显示控制模块显示控制模块关键作用是在7段数码管上正确显示0-9数字。sel三位选择线和3-8译码器相连四、主程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity clock is port(clk : in std_logic;rst : in std_l
10、ogic;inc_min : in std_logic;sub_min : in std_logic;inc_hour : in std_logic;sub_hour : in std_logic;sel : out std_logic_vector(5 downto 0);q : out std_logic_vector(7 downto 0); end clock;architecture Behavioral of clock is signal sec_counter1:std_logic_vector(3 downto 0); signal sec_counter2:std_logi
11、c_vector(3 downto 0); signal min_counter1:std_logic_vector(3 downto 0); signal min_counter2:std_logic_vector(3 downto 0); signal hour_counter1:std_logic_vector(3 downto 0); signal hour_counter2:std_logic_vector(3 downto 0); signal divcounter : std_logic_vector(8 downto 0); signal div_clk : std_logic
12、; signal scancounter : std_logic_vector(1 downto 0); signal scan_clk : std_logic; signal scan_out : std_logic_vector(2 downto 0); signal secseg1,secseg2,minseg1,minseg2,hourseg1,hourseg2:std_logic_vector(7 downto 0); beginprocess(rst,clk) begin if(rst=1)then divcounter=; div_clk=0;elsif(rising_edge(
13、clk)thenif(divcounter=) then divcounter=; div_clk=not div_clk; else divcounter=divcounter+1; end if;end if; end process;process(rst,clk) beginif(rst=1)then scancounter=00; scan_clk=0; elsif(rising_edge(clk)then if(scancounter=11) then scancounter=00; scan_clk=not scan_clk; else scancounter=scancount
14、er+1; end if; end if; end process;clock:process(div_clk,rst) begin if(rst=1)then sec_counter1=X0;sec_counter2=X0;min_counter1=X0;min_counter2=X0;hour_counter1=X0;hour_counter2=X0;elsif(rising_edge(div_clk)then if(inc_min=1) then if(min_counter1=X9) then min_counter1=X5) then min_counter2=X0; else mi
15、n_counter2=min_counter2+1; end if; else min_counter1=min_counter1+1; end if;elsif(sub_min=1) then if(min_counter1=X0) then min_counter1=X9; if(min_counter2=X0)then min_counter2=X5; else min_counter2=min_counter2-1; end if; else min_counter1=min_counter1-1;end if;elsif(inc_hour=1) then if(hour_counte
16、r2=X2)then if(hour_counter1=X3)then hour_counter1=X0; hour_counter2=X0; else hour_counter1=hour_counter1+1; end if; else if(hour_counter1=X9) then hour_counter1=X0; hour_counter2=hour_counter2+1; else hour_counter1=hour_counter1+1; end if; end if;elsif(sub_hour=1) then if(hour_counter1=X0)then if(ho
17、ur_counter2=X0)then hour_counter1=X3; hour_counter2=X2; else hour_counter2=hour_counter2-1; hour_counter1=X9; end if; else hour_counter1=X9) then sec_counter1=X5) then sec_counter2=X9) then min_counter1=X5) then min_counter2=X0; if(hour_counter2=X2) then if(hour_counter1=X3) then hour_counter1=X0; h
18、our_counter2=X0; else hour_counter1=hour_counter1+1; end if; else if(hour_counter1=X9) then hour_counter1=X0; hour_counter2=hour_counter2+1; else hour_counter1=hour_counter1+1; end if; end if; else min_counter2=min_counter2+1; end if;else min_counter1=min_counter1+1; end if; else sec_counter2=sec_co
19、unter2+1; end if; else sec_counter1=sec_counter1+1; end if; end if; end if; end process clock;process(rst,scan_clk) begin if (rst=1) then scan_out=000; elsif(rising_edge(scan_clk) then if(scan_out=101)then scan_out=000; else scan_out q=secseg1; sel q=secseg2; sel q=minseg1; sel q=minseg2; sel q=hour
20、seg1; sel q=hourseg2; sel q=11111111;sel secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg2 secseg2 secseg2 secseg2 secseg2 secseg2 secseg2 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg2 minseg2 minseg2 min
21、seg2 minseg2 minseg2 minseg2 hourseg1 hourseg1 hourseg1 hourseg1 hourseg1 hourseg1 hourseg1 hourseg1 hourseg1 hourseg1 hourseg1 hourseg2 hourseg2 hourseg2 hourseg2”,全部输入/输出全部被拷贝到右边一侧,这些正是我们期望各个引脚,也能够只选其中一部分,依据实际情况决定。然后单击屏幕右上脚 “OK”。在出现小屏幕上单击“OK”。 设定仿真时间宽度。选择 Edit End time选项,在End time选择窗中选择合适仿真时间域,方便有
22、足够长观察时间。波形文件存盘。选择FileSave as 选项,直接存盘即可。运行仿真器。在菜单中选择项,直到出现,仿真结束。5.3引脚锁定将设计编程下载进选定目标器件中操作以下:1选择 Assignments Assignments Editor ,即进入 Assignments Editor编辑器。在Category 栏选择 Pin,或直接单击右上侧 Pin 按钮。2双击 TO 栏new,在出现下拉栏中选择对应端口信号名(如 D0);然后双击对应栏new,在出现下拉栏中选择对应端口信号名期间引脚号。3最终存放这些引脚锁定信息后,必需再编译(开启 )一次,才能将引脚锁定信息编译进编程下载文件
23、中。以后就能够准备将编译好 SOF 文件下载到试验系统FPGA中去了。5.4硬件测试1.首先将下载线把计算机打印机口和目标板(如开发板或试验板)连接好,打开电源,选择模式3。2.打开编辑窗和配置文件。选择,弹出一个编辑窗。在Mode栏中选择JTAG,并在选项下小方框打勾。注意查对下载文件路径和文件名。假如文件没有出现或犯错,单击左Add file侧按钮,手动选择配置文件 clocksof。 3.最终单击下载标符Start,即进入对目标器件 FPGA 配置下载操作。当 Progress 显示100%,和在底部处理栏中出现 Configuration Succeeded 时,表示编程成功,图所表示
24、。注意,假如必需时,可再次单击 Start ,直至编程成功。4下载完成后,经过硬件测试深入确定设计是否达成全部技术指标,如未达成,可逐步检验,哪部分出现问题。假如是代码出现问题,须修改代码;若是时序波形图有问题,须重新设置。5.5试验结果试验箱使用模式3,键8为复位按键,键8为0时正常工作。键3、4设置小时,键1、2设置分钟。下载成功后,按下键8,及使六个LED复位清零,松开键8,显示数秒自动计时,能够经过3、4键设置小时数,1、2键设置分钟数。当秒数满60则进一位,分钟数满60进一位,当显示为23:59:59时,秒数在加一则显示00:00:00,以后从新计时。结束语伴随电子设计自动化技术普及
25、,利用EDA技术进行数字电路课程设计,不仅能够很好地锻炼学生综合设计开发能力和动手能力,从而激发学生学习爱好,还能够大大节省数字电路课程设计试验成本,提升设计效率。所以,将EDA技术应用于数字电路课程设计必将成为以后数字电路试验课程改革新动向。EDA软件,可方便地在计算机上进行电路设计、仿真,其电路结构及设计观念能够很轻易地被修正;也可方便地更换所需要元件。经过模拟可快速地反应出所设计电路性能。若能利用计算机辅助设计进行电路模拟和分析,则可有效地节省资源、缩短产品研发成本和时间。在此次课程设计中,曾碰到过不少问题,假如单靠我个人努力,极难按时完成,在此,我衷心感谢我指导老师,我学到了很多东西。
26、知道老师认真负责工作态度,严谨治学精神和深厚理论水平全部使我获益非浅。老师不管在理论上还是在实践中,全部给我无私帮助和悉心教导,使我课程得以顺利地按时完成。参考文件1 曾繁泰 李冰 李晓林.EDA工程概论M. 清华大学出版社, . 2 胡立涛.EWB电子仿真试验指导书M. 南海出版企业, .3 朱运利.EDA技术应用M. 电子工业出版社, .4 郭勇.EDA技术M. 高等教育出版社, .5 钟文耀 段玉生 何丽静.EWB电路设计入门和应用M.清华大学出版社, .6 崔建明.电子电工EDA仿真技术M. 高等教育出版社, .7 周功明 周陈深.基于Electronics Workbench 6.0 数字电子钟设计和仿真