EDA实训万年历

合集下载

《EDA技术及可编程器件应用实训》课程设计报告-基于CPLD技术的数字万年历设计模板

《EDA技术及可编程器件应用实训》课程设计报告-基于CPLD技术的数字万年历设计模板

《EDA技术及可编程器件应用实训》课程设计报告院系机械电子工程系姓名专业班级07通信技术一班学号指导老师日期:2009年 6 月10 日《EDA技术及可编程器件应用实训》课程设计报告一、设计内容:课程设计题目:基于CPLD技术的数字万年历设计。

课题设计的万年历具有年、月、日、时、分、秒计数功能,以秒、分、时、日、月、年进制循环计时;具有清零、调时功能、报时功能。

二、设计意义通过理论学习和实践动手操作,可以掌握小型数字系统的设计方法。

理论学习中了解到大规模可编程逻辑器件CPLD/FPGA的内部结构和外部特性;了解到EDA设计的方法;掌握硬件描述语言VHDL程序方法和思路;学会使用Quartus II开发平台。

通过具体的数字百年历的项目设计,可深切地领会到EDA硬件设计软件化的特点;掌握六十进制、二十四进制、十二进制、及通过语言VHDL程序来控制三十、三十一、二十八、二十九进制的选择、五选一、二选一,从而实现计数器的设计方法;同时掌握CPLD技术的层次化结构化设计方法;并能熟练使用Quartus II开发小中型数字系统,解决调试过程中所遇到的一些问题。

三、设计方法常见数字百年历具有计时和显示、报时功能。

电路设计中包括分频模块,用于将外部晶振产生的一定周期的时钟信号计数产生1s时钟信号;60进制的秒、分计数模块;24进制的时计数模块;12进制的月计数模块;通过语言选择的闰年平年天数选择模块;5选一的调时控制模块;2选一模式转换模块;另有显示模块和整点报时信号端口。

1、同步计时六十进制加法器的程序如下。

其中,cout为输出端口信号,clk为分频模块产生的秒计时信号(时钟信号),q1和q2为秒计数中十进制数所对应的高位和低位信号。

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt60 isport(clk:in std_logic;cout:out std_logic;q1,q2:out std_logic_vector(3 downto 0));architecture behav of cnt60 isbeginvariable cq1,cq2:std_logic_vector(3 downto 0);beginif clk'event and clk='1' thencq1:=cq1+1;if cq1>9 then cq1:="0000";cq2:=cq2+1;end if;if cq2=6 and cq1=0 thencq1:="0000";cq2:="0000";cout<='1';else cout<='0';end if;q1<=cq1;q2<=cq2;end process;end;所写程序经过仿真的如上图所示。

基于EDA的万年历

基于EDA的万年历

目录一、设计总体思路1.1课程设计内容-------------------------------------------------1 1.2课程设计要求-------------------------------------------------1 1.3课程设计的意义----------------------------------------------2 1.4设计总体思路-------------------------------------------------2 1.5设计框图-------------------------------------------------------3 二单元电路设计2.1天模块----------------------------------------------------------4 2.2月模块----------------------------------------------------------5 2.3年模块. ---------------------------------------------------------7 2.4星期模块-------------------------------------------------------8 2.5提醒模块-------------------------------------------------------9 2.6控制模块------------------------------------------------------102.7显示模块------------------------------------------------------11三、总电路设计--------------------------------------------------13四、电路调试----------------------------------------------------14五、设计调试总结与体会--------------------------------------16六、附录-----------------------------------------------------------17七、参考文献-----------------------------------------------------18 附:课程设计评分表一、设计总体思路1.1设计总体内容用FPGA为核心器件,用VHDL为设计手段设计制作一个具有大小月份自动调节和闰年补偿功能的数字日历,具体设计要求如下:1、用7个数码管从左到右分别显示年(后两位)、月、日和星期;星期与日之间隔开一位。

EDA技术及其应用__万年历实训报告

EDA技术及其应用__万年历实训报告

EDA实训万年历简介万年历的制作是利用EDA技术中VHDL语言编制程序,利用QuartusII软件进行仿真波形,然后在试验箱上实现功能。

万年历由电子表模块、日历模块、调制模块组成。

电子表模块是基层;日历模块是高层;调制模块由五选一模块、二选一模块组成,它可以对电子表模块和日历模块进行手动调节。

但是,各个独立的模块需要通过顶层文件来实现。

顶层文件的作用为将各独立的功能模块关联起来,协同完成该系统的最终功能,通过画系统的整体组装设计原理图的方法来实现这一功能。

万年历实训大纲1.·················实训课题2.·················实训地点3.·················实训目的4.·················实训器材5.·················实训内容6.·················实训结果7.·················实训心得实训报告正文实训课题万年历实训地点郑州信息科技职业学院EDA技术实验室实训目的(1)掌握系统设计的方法和层次化设计方法。

基于EDA的万历设计

基于EDA的万历设计

《EDA技术及其应用》实验报告万年历设计班级姓名学号摘要21世纪是信息爆炸的时代,生活的节奏越来越快,大家的时间观念越来越强,但是老式的钟表以及日历等时间显示工具已经不太合适。

如钟表易坏,需经常维修,日历每天都需要翻页等。

对此,数字万年历的设计就用了用武之地。

基于DEA的万年历设计,采用软件开发模块,开发成本底,而且功能设计上有很大的灵活度,需要在软件上进行简单的修该就能实现不同的功能要求,能够满足不同的环境要求。

同时,该设计在精度上远远超过钟表,并且不需要维修,也不用没天的翻页,极其的方便。

且能够添加各种不同的功能要求。

例如:在其上加闹钟,同时显示阴阳历等。

综上所述本设计具有设计方便、功能多样、电路简洁成本低廉等优点,符合社会发展的趋势,前景广阔。

基于EDA的万年历设计,主要完成的任务是使用VHDL语言,在QuartusII 上完成电路的设计,程序的开发,基本功能是能够显示、修改年、月、日、时、分、秒。

电路的设计模块分为几个模块:控制、时间显示调整、时、分、年、月、日各模块。

各个模块完成不同的任务,合在一起就构成了万年历。

软件模块直接在QuartusII上进行,使用VHDL语言,根据各个模块的不同功能和它们之间的控制关系进行编写。

关键字:万年历;EDA;仿真;VHDL;QuartusIIAbstractThe 21st century is the era of information explosion, the pace of life is more and more quick, everyone's concept of time is more and more strong. But the old clock and calendar time display tools are not very suitable. To this, the design of digital calendar is very useful.Based on DEA perpetual calendar design, the software development cost low and the function design is of great nimbleness. At the same time, the design is more correct than clocks and watches, and don't need to be maintained.And you can add all sorts of different functional requirements. The perpetual calendar based on EDA design, the main task is to use VHDL language to complete circuit design, program development in the QuartusII. Basic function is to display, modify, year, month, day, points, The design of the circuit module can be divided into several modules: control, time display adjustment,, points, year, month, day each module. Each module complete different tasks, and they form a perpetual calendar. Write the program according to the different function of each module and the relationship between them.目录摘要 (2)第一章 EDA技术简介 (4)1.1 EDA技术的发展概况 (4)1.2 EDA技术的基本特征 (4)1.2.1“自顶向下”的设计方法 (4)1.2.2高层次设计 (5)第二章工作原理 (5)2.1任务概述 (5)2.2系统设计思路 (5)2.3系统原理图 (5)2.4工作过程 (6)第三章设计过程 (6)3.1各子模块的VHDL程序以及时序仿真 (6)3.1.1秒/分计时模块 (6)3.1.2时计时模块 (8)3.1.3天计时模块 (9)3.1.4月计时模块 (11)3.1.5年低位计时模块 (13)3.1.6年高位计时模块 (15)3.1.7调时模块 (16)3.1.8控制显示模块 (18)3.2引脚绑定 (20)3.3下载验证 (21)3.3.1模式三的电路图 (21)3.3.2显示输出 (22)总结 (22)参考文献 (23)第一章 EDA技术简介EDA(Electronic Design Automation),即电子设计自动化,是指利用计算机完成电子系统的设计。

基于-EDA的万年历设计

基于-EDA的万年历设计

《EDA技术及其应用》实验报告万年历设计班级姓名学号摘要21世纪是信息爆炸的时代,生活的节奏越来越快,大家的时间观念越来越强,但是老式的钟表以及日历等时间显示工具已经不太合适。

如钟表易坏,需经常维修,日历每天都需要翻页等。

对此,数字万年历的设计就用了用武之地。

基于DEA的万年历设计,采用软件开发模块,开发成本底,而且功能设计上有很大的灵活度,需要在软件上进行简单的修该就能实现不同的功能要求,能够满足不同的环境要求。

同时,该设计在精度上远远超过钟表,并且不需要维修,也不用没天的翻页,极其的方便。

且能够添加各种不同的功能要求。

例如:在其上加闹钟,同时显示阴阳历等。

综上所述本设计具有设计方便、功能多样、电路简洁成本低廉等优点,符合社会发展的趋势,前景广阔。

基于EDA的万年历设计,主要完成的任务是使用VHDL语言,在QuartusII 上完成电路的设计,程序的开发,基本功能是能够显示、修改年、月、日、时、分、秒。

电路的设计模块分为几个模块:控制、时间显示调整、时、分、年、月、日各模块。

各个模块完成不同的任务,合在一起就构成了万年历。

软件模块直接在QuartusII上进行,使用VHDL语言,根据各个模块的不同功能和它们之间的控制关系进行编写。

关键字:万年历;EDA;仿真;VHDL;QuartusIIAbstractThe 21st century is the era of information explosion, the pace of life is more and more quick, everyone's concept of time is more and more strong. But the old clock and calendar time displaytools are not very suitable. To this, the design of digital calendar is very useful.Based on DEA perpetual calendar design, the software development cost low and the function design is of great nimbleness. At the same time, the design is more correct than clocks and watches, and don't need to be maintained.And you can add all sorts of different functional requirements. The perpetual calendar based on EDA design, the main task is to use VHDL language to plete circuit design, program development in the QuartusII. Basic function is to display, modify, year, month, day, points, The design of the circuit module can be divided into several modules: control, time display adjustment,, points, year, month, day each module. Each module plete different tasks, and they form a perpetual calendar. Write the program according to the different function of each module and the relationship between them.目录摘要 (2)第一章 EDA技术简介 (5)1.1 EDA技术的发展概况 (5)1.2 EDA技术的基本特征 (5)1.2.1“自顶向下”的设计方法 (5)1.2.2高层次设计 (6)第二章工作原理 (6)2.1任务概述 (6)2.2系统设计思路 (6)2.3系统原理图 (6)2.4工作过程 (7)第三章设计过程 (8)3.1各子模块的VHDL程序以及时序仿真 (8)3.1.1秒/分计时模块 (8)3.1.2时计时模块 (10)3.1.3天计时模块 (11)3.1.4月计时模块 (14)3.1.5年低位计时模块 (17)3.1.6年高位计时模块 (19)3.1.7调时模块 (20)3.1.8控制显示模块 (23)3.2引脚绑定 (25)3.3下载验证 (27)3.3.1模式三的电路图 (27)3.3.2显示输出 (28)总结 (29)参考文献 (29)第一章 EDA技术简介EDA(Electronic Design Automation),即电子设计自动化,是指利用计算机完成电子系统的设计。

《EDA技术及应用》数字日历电路的设计

《EDA技术及应用》数字日历电路的设计

《EDA技术及应用》数字日历电路的设计1 系统设计1.1 设计要求1.1.1 设计任务设计并制作一台数字日历。

1.1.2 性能指标要求①用EDA实训仪的I/O设备和PLD芯片实现数字日历的设计。

②数字日历能够显示年、月、日、时、分和秒。

③用EDA实训仪上的8只八段数码管分三屏分别显示年、月、日和时、分、秒,即在一定时间段内显示年(如002022),一段时间段内月、日(如000101),然后在另一时间段内显示时、分、秒(如120000),两个时间段能自动倒换。

④数字日历具有复位和校准年、月、日、时、分、秒的按钮,但校年和校时同用一个按钮,即在显示年、月、日时用此按钮校年,在显示时、分、秒时则用此按钮校时,依此类推。

1.2 设计思路及设计框图1.2.1设计思路通过EDA课程的学习,总体设计中包括显示部分、计时部分、控制部分、校时部分、年月日部分以及分频功能。

之后运用Verilog HDL语言编写60进制、24进制、年月日模块(nyr2022.)、控制模块(contr)、校时选择模块(mux_4)、显示选择模块(mux_16)和分频器的源程序,分别生成元件符号,然后将各个模块连接起来画成原理图再下载到实训箱上,调节开关及按钮来实现数字日历的功能。

1.2.2总体设计框图2 各个模块程序的设计1.1 年月日模块clrn是异步清除输入端,低电平有效;clk是时钟输入端,上升沿有效;jn、jy和jr分别是校年、校月、校日输入端;qn[15..0]、qy[7..0]、qr[7..0]分别是年、月、日的输出端。

1.2 控制模块控制模块上的clk给的是1s时钟脉冲,k是一个两位的控制输出端,所以k可以有4个值,它与显示模块共同控制年月日,时分秒,月日显示的切换。

1.3 校时选择模块①当k=0时,开关j1,j2,j3校秒时分然后将信号分别送到jsq模块的jm(校秒)、jf(校分)、js(校时)。

②当k=1时,开关j1,j2,j3校年月日然后将信号分别送到nyr模块的jr(校日)、jy(校月)、jn(校年)。

万年历实训报告

万年历实训报告

万年历实训报告目录第一部分:实训目的 (2)第二部分:实训意义 (2)第三部分:实训内容 (3)(一)硬件实训内容 (3)(二)软件实训内容 (3)1.秒、分的VHDL语言及CNT60模块 (3)2.时的VHDL语言及CNT24模块 (4)3.天的VHDL语言及tian模块 (6)4.月的VHDL语言及yue模块 (7)5.年的VHDL语言及nian模块 (9)6.调试的VHDL语言及tiaoshi模块 (10)7.显示的VHDL语言及xianshi模块 (11)8.万年历的原理图 (12)第四部分:实训中疑难解答 (14)第五部分:实训心得 (15)一.实训目的(一)硬件实训目的:1. 熟悉EDA实验箱的基本工作原理。

2. 熟悉并掌握EDA实验箱各个模式的功能。

3. 提高学生的动手能力。

(二)软件实训目的:1.熟悉并掌握Quartus II 6.0软件的使用。

2.熟练的使用原理图输入设计方法,VHDL语言编写程序,进一步了解和掌握各个程序语言,提高编程的熟练程度。

3.掌握年、月、日、时、分、秒程序的原理,进而理解万年历的设计原理。

4.拓宽学生知识面,增强工程意识,培养学生的分析和解决实际问题的能力。

5.提高学生的动手能历。

二.实训意义该数字时钟实现了调时、年、月、日、时、分、秒的显示功能,无需接译码器,可直接接八段共阴极数码管,总体结构如下图所示:第一部分第二部分第三部分D8(l5)D7(l2) D6 D5 (l4) D4(l1) D3 D2(l3)D18个LED数码管为了显示清楚只用了6个数码管,分为3个部分。

采用的是EDA试验箱上的模式7。

软件Quartus II 6.0方面:在显示程序中,k3控制分屏。

当k3=‘1’时,3部分数码管显示年、月、日;当k3=‘0’时,3部分数码管显示时、分、秒。

万年历正常工作时,D1~D8都不亮。

调时时,秒的变化不需控制,故需调时有年、月、日、时、分5个量。

EDA万年历实训报告

EDA万年历实训报告

《EDA技术及其应用》实训报告班级 11241姓名苏合信,张明伟,朱迎新,王亚坤学号 22,11,28,29指导教师薛瑞2013年05月26 日北华航天工业学院11级电子工程系目录一设计要求 (2)1.0 设计目的及意义 (2)1.1 设计要求 (2)二设计流程: (2)2.0 原理框图 (2)2.1 VHDL设计思路 (3)三 VHDL程序 (3)3.0 天计数模块 (6)3.1 月计数模块 (7)3.2 年计数模块 (9)3.3 调时控制模块 (11)3.4 译码模块 (12)3.5 扫描模块 (12)四心得体会 (14)4.0 (14)五附录 (15)5.0 顶层文件 (15)一、设计目的及意义1.0 设计目的及意义在掌握EDA理论知识的基础上进一步了解EDA开发软件QuartusII的使用,掌握VHDL编程的技巧及方法,学会并熟练掌握PC机与实验箱的连接下载及使用,进一步提高自己的动手操作能力。

1.1 设计要求利用QuartusII编写程序在实验箱上实现万年历的年月日的显示,要求能够区分闰年与平年;年月日,时分秒可以自由调整并能随意切换;能够清楚地分辨出年月日,时分秒的显示状态。

二、设计流程2.0 原理框图2.1 VHDL设计思路编写年月日模块,年模块要有一个反馈端口控制月;月也要有一个反馈端口控制日;最后编写调时模块和扫描模块,以及译码模块,可以用k1,k2调节年月,用对应的LED等的亮灭来表示调节状态。

三、VHDL程序3.0 天计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity tian isport(clk:in std_logic;pan:in std_logic_vector(1 downto 0);T1:out std_logic_vector(6 downto 0);cout:out std_logic);end tian;architecture one of tian issignal q1:std_logic_vector(3 downto 0);signal q2:std_logic_vector(2 downto 0);signal ab:std_logic_vector(1 downto 0);beginprocess(clk,pan)beginif clk'event and clk='1'then q1<=q1+1;if q1=9 then q1<="0000";q2<=q2+1;end if;case pan iswhen "00"=>if q2=3 and q1=1 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0';end if;when "01"=>if q2=3 and q1=0 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0';end if;when "10"=>if q2=2 and q1=8 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0';end if;when "11"=>if q2=2 and q1=9 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0';end if;when others=>null;end case;end if;end process;T1(3 downto 0)<=q1;T1(6 downto 4)<=q2;end one;3.1 月计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity yue isport(clk,run:in std_logic;cout:out std_logic;pan:out std_logic_vector(1 downto 0);Y1:out std_logic_vector(6 downto 0));end yue;architecture behav of yue issignal q1:std_logic_vector(3 downto 0);signal q2:std_logic_vector(2 downto 0);signal q3:std_logic_vector(6 downto 0);beginprocess(clk,run,q1,q2)beginif clk'event and clk='1' thenq1<=q1+1;if q1=9 then q1<="0000";q2<=q2+1;end if;if q1=2 and q2=1 thenq1<="0001";q2<="000";cout<='1';else cout<='0';end if;q3<=q2&q1;case q3 iswhen "0000001"=>pan<="00";when "0000010"=>if run='1' then pan<="11";else pan<="10"; end if;when "0000011"=>pan<="00";when "0000100"=>pan<="01";when "0000101"=>pan<="00";when "0000110"=>pan<="01";when "0000111"=>pan<="00";when "0001000"=>pan<="00";when "0001001"=>pan<="01";when "0001010"=>pan<="00";when "0001011"=>pan<="01";when "0001100"=>pan<="00";when others=>null;end case;end if;Y1(3 downto 0)<=q1;Y1(6 downto 4)<=q2; end process;end behav;3.2 年计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity nian isport(clk :in std_logic;n1:out std_logic_vector(6 downto 0); run:out std_logic);end entity;architecture one of nian issignal q1,q3:std_logic_vector(3 downto 0); signal q2:std_logic_vector(2 downto 0);beginprocess(clk)beginif clk'event and clk='1' thenq1<=q1+1;q3<=q3+1;if q1=9 then q2<=q2+1;q1<="0000";end if;if q3=3 thenq3<="0000";run<='1';else run<='0';end if;if q1=9 and q2<=7 then q1<="0001";q2<="000"; end if;end if;end process;n1(3 downto 0)<=q1;n1(6 downto 4)<=q2;end one;3.3 调时模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity tiaoshi isport(k1,k2:in std_logic;m1,m2:in std_logic;n1,n2,d1,d2:out std_logic);end entity;architecture one of tiaoshi issignal q:std_logic_vector(3 downto 0);beginprocess(k1,q,m1,m2)beginif k1'event and k1='1' then q<=q+1;if q=2 then q<="0000";end if;end if;case q iswhen"0000"=>n1<=m1;n2<=m2;d1<='0';d2<='0'; when"0001"=>n1<=k2;n2<='0'; d1<='1';d2<='0'; when"0010"=>n1<='0';n2<=k2; d1<='0';d2<='1'; when others=>NULL;end case;end process;end one;3.4 扫描模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity seltime isport(clk1:in std_logic;tian,yue:in std_logic_vector(6 downto 0); nian:in std_logic_vector(6 downto 0);daout:out std_logic_vector(3 downto 0);dp:out std_logic;sel:out std_logic_vector(2 downto 0));end seltime;architecture fun of seltime issignal count:std_logic_vector(2 downto 0); beginsel<=count;process(clk1)beginif(clk1'event and clk1='1')thenif(count>="101")thencount<="000";elsecount<=count+1;end if;end if;case count iswhen "000"=>daout<=tian(3 downto 0);dp<='0'; when"001"=>daout(3)<='0';daout(2 downto 0)<=tian(6 downto 4);dp<='0';when "010"=>daout<=yue(3 downto 0);dp<='1'; when"011"=>daout(3)<='0';daout(2 downto 0)<=yue(6 downto 4);dp<='0';when "100"=>daout<=nian(3 downto 0);dp<='1'; when others=>daout(3 downto 2)<="00"; daout(2 downto 0)<=nian(6 downto 4);dp<='0';end case;end process;end fun;3.5 译码模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity led isport(ledi:in std_logic_vector(3 downto 0);ledo:out std_logic_vector(6 downto 0));end entity;architecture one of led isbeginprocess(ledi)begincase ledi iswhen "0000"=>ledo<="1111110";when "0001"=>ledo<="0110000";when "0010"=>ledo<="1101101";when "0011"=>ledo<="1111001";when "0100"=>ledo<="0110011";when "0101"=>ledo<="1011011";when "0110"=>ledo<="1011111";when "0111"=>ledo<="1110000";when "1000"=>ledo<="1111111";when "1001"=>ledo<="1111011";when others=>null;end case;end process;end one;四、心得体会通过本次万年历实训,让我从中收获很多,感触也很多。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《EDA技术与应用》实训报告指导教师:实训题目:数字日历1. 系统设计1.1 设计要求1.1.1 设计任务:设计一个数字日历电路1.1.2 技术要求:⑴用Verilog HDL 语言设计一个数字日历。

⑵数字日历能正确显示年、月、日、时、分和秒。

⑶通过开关分别控制对年、月、日或时、分、秒校对及自动切换、,并且运用按钮对年、月、日或时、分、秒校对。

⑷通过按钮对数码管全部清零。

⑸拓展功能:添加时钟闹钟功能,并通过LED管显示。

1.2 方案比较:由于这次实验用到的仪器是EDA实训仪,数码管个数只有八个,因此不能同时显示年、月、日、时、分、秒。

但是实训仪的LED管只有12个,因此在拓展功能时12 小时做一个周期的整点记时显示。

在多次的测试和修改后,得到此最好方案。

1.3 方案论证1.3.1 总体思路:通过EDA S程的学习,可知运用Verilog HDL语言设计一个数字日历括计时器模块(jsq60、j sq24 )、年月日模块(nyr2009)、控制模块(conr)、校时选择模块(mux_4、显示选择模块(mux_16和闹钟定时模块(LED1)、闹钟灯模块(nzd);然后将各个模块连接起来画成原理图再下载到实训仪上,调节开关及按钮来实现数字日历的功能。

1.3.2 设计方案:总原理图如下:2 •各个模块程序的设计(1)设计一个分频器进行20MHz分频得到实训所需的1Hz的频率分析:这是个20MHZ寸钟的分频器,将原来EDA实训仪提供的频率为20MHZ的时钟转换成频率1HZ的时钟,然后输出到有需要的端口,触发模块起作用。

⑵分别设计一个能显示年月日和时分秒的程序校准年月日和秒分时的原理图如下:分析:①当k=0时,开关j1,j2,j3校秒时分然后将信号分别送到jsq24模块的jm(校秒)、jf (校分)、js (校时)。

②当k=1时,开关j1,j2,j3校年月日然后将信号分别送到nyr2009模块的jr(校日)、jy(校月)、jn (校年)。

计算年月日的模块如下:FIHI Ilkm■!:!下町nrTUT TFT)H'j 31 ,mzitc'FIH iOSH<匚;rm c计七匚―H •-i-im LTJrn ?■ FIMCl |r-NLCs'M'l tFl处i/lFIW反jiBiietiiiam liar mill i wi i lirir-iiniiiirniliii rvii ii A■:15lrnq<15.Q| iwT ••町■ 1 ■F ' ■*-CIKJ ■ !jy-F 1 ■分析:clrn 是异步清除输入端,低电平有效; elk 是时钟输入端,上升沿有效;和jr 分别是校年、校月、校日输入端; qn[15..0]、qy[7..O]、qr[7..O]分别是年、月、输出端。

显示时分秒与年月历的模块如下:qPi 0]■—叩卩』]■a - qs|7..n]■—>qr[7.D]qn[15.J] 分析:①当k=0时,把jsq24送来的时分秒的状态信号送到数码管显示 ②当k=1时,把nyr2009送来的年月日的状态信号送到数码管显示。

计算时分秒的模块如下:dr qn[7. 0]elk QUO)jrm q47. 0] jf cout i 3clkcoutjn 、jy日的分析:elr 是异步清除输入端,低电平有效;js 分别是校秒、校分、校时输入端; 日的输出端;cout 是进位;elkeout 时钟闹钟模块如下:elk 是时钟输入端,上升沿有效;jm qm[7..0]、qf[7..0]、qs[7..0]分别是年、是由elk 控制的秒秒脉冲。

jf 和月、inst4数码管显示整点,LED灯亮相应灯。

当时间与闹钟所设时间相同LED管亮(3)设计三个转换器和一个自动切换器计时器24的模块如下:这个模块是产生计数秒时分的;其中clkcout是由elk脉冲经过16分频器gen产生秒脉冲;cout是经过计时器后产生的24时脉冲;自动转换器模块如下:自动切换主要是为了实现8秒就切换成秒分时或是年月日的,还有控制秒分时的校准和年月曰的校准。

(4)闹钟灯控制模块(nzd)如下:k是闹钟信号输入端;按键X,控制闹钟灯的熄灭;elk是时钟脉冲。

3. 制作与调试过程在这次的实训中我选择了EDA课程中讲解过的万年历的设计,在其基础上添加了整点报时的一个拓展功能,通过运用Verilog HDL语言对程序进行设计,然后运用Quartusll9.0 软件对各程序进行编译,看是否能通过,如有错误可以逐条对语句进行调试,当所有模块编译成功后就下载到EDA 工具实验箱进行验证。

4. 结论运用Verilog HDL语言在QuartusII9.0 软件上设计了一个数字日历,并通过实训仪正确地显示出来且实现各种功能。

5. 实训心得体会通过这两周的EDA实训,不仅更熟练的运用Verilog HDL 语言在QuartusII9.0软件上的设计方法与步骤,还在参考资料后添加了一个拓展功能完成了数字日历电路的设计。

在实训过程中,设计时钟闹钟模块时,想让闹钟灯亮的久点,结果闹钟灯一直亮,不会灭了,同时,闹钟灯功能也不能用了,最后在覃琴老师的提点下,我用一个按键来控制闹钟灯的熄灭,回去和同学讨论,把添加了nzd模块程序,不仅把灯的问题给解决了,时钟闹钟功能也能进行显示。

从一开始接受课程任务,和同学一起着手建立设计框图,再到网上查阅相关资料,确定电路图到最终制作成型,每一步都必须真诚付出。

刚开始我是做的并不成功,不能实现闹钟功能。

在多次检修之后,最终实现了课程设计作业的全部功能。

将各个部分组成起来设计成为万年历定时闹钟功能。

通过这次EDA实训我对数字逻辑电路也更加地了解,有了更直观的了解。

特别感谢指导老师覃琴老师的悉心指点!6. 参考文献(1)江国强,EDA技术与应用.北京:电子工业出版社.20107、附录:7.1仿真波形图(部分模块)7.11.C nt60模块仿真波形图I7.12.C ontr模块仿真波形图7.14.LED1模块波形仿真图:7.15.n yr2009模块仿真波形图7.2程序清单一、拓展部分:LED1模块程序:module mux6(m,f,s, nm, nf,n s,q,q2); input[7:0] nm,nf,ns,m,f,s; output reg [31:0] q2; output reg q; always beginif((m==nm)&&(f==nf)&&(s==n s)) begin q=1; q2[31:24]=0; q2[23:0]={ ns, nf,nm}; end else begi n q=0;q2[31:24]=0;q2[23:0]={ ns, nf,n m};; endj3 jm汗jy4 0it o克o 汛xH ¥X XM 0即0[^0谆18 参2T£ m z q u=q[+j a outrJOOCOMO X 00000100 \ 00000000) (00000100XooooooooX Qc ioo^booooo i^ooooo io^ooooai ix )ooboi (jo^boooiWiB mi 0171,1—16. ^1G nsdi clra」rJF j”Q vH H H Hi HiH 2tKC K(^mr_RjmmmnnnjmrmnnnrmrLrLm^1[ IIIjLrLrLrLrLrLrLrLruinjirLrLrLnrLrLrLruinrLrirLnrLrLrLrLrL rLrLnrLrLrLrLrLrLn2〔D]-Q F□Q0?am30C :OOOOMJOOOOO OODOOOOOOHJ Cend endmodule 拓展部分数码管现实模块:module mux2(k,q2,q,q1); inputk;input[31:0] q2; input[31:0] q;output reg [31:0] q1; alwaysbegin if(k==1)q1=q2; elseq1=q;endendmodule 二、基本部分:1、contr 模块程序modulecontr(clk,k1,k2,k); input clk,k1,k2;output reg k; reg [3:0] qc; reg rc;always @(posedge clk) beginqc=qc+1; if (qc<8) rc=0; else rc=1;case ({k1,k2}) 0:k=rc; 1:k=0; 2:k=1;3:k=rc; endcase end endmodule2、mux_4 模块程序modulemux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3); inputk,j1,j2,j3; output reg jm,jf,js,jr,jy,jn; alwaysbegin if (k==0) {jm,jf,js}={j1,j2,j3}; else{jr,jy,jn}={j1,j2,j3}; end endmodule3、gen 模块程序module gen(clk,cout);input clk; reg[24:0] q;output reg cout;always @(posedge clk)beginif(q<20000000-1) q=q+1;else q=0;if(q==20000000-1) cout=1;else cout=0;endendmodule4、cnt60 模块程序module cnt60(clk,clr,j,q,cout); input clk,clr,j; output r eg[7:0] q;output reg cout;reg en1;always @(posedge clk A j or n egedge clr)beginif(~clr) q[3:0]=0;else beginif(q[3:0]<9) q[3:0]=q[3:0]+1;else q[3:0]=0;if (q[3:0]==9) en1=1;else en1=0; endendalways @(posedge clkAj or negedge clr) begin if(~clr) q[7:4]=0;else if(en1) beginif(q[7:4]<5) q[7:4]=q[7:4]+1;else q[7:4]=0;if (q[7:4]==5) cout=1;else cout=0; endendendmodule5、jsq24 模块程序module jsq24(clk,clr,j,q,cout);input clk,clr,j;output reg[7:0] q;output reg cout;reg en1; always@(posedge clkAj or negedge clr)beginif(~clr) q[3:0]=0;else beginif (q[3:0]==9|q=='h23) q[3:0]=0;else q[3:0]=q[3:0]+1; if(q[3:0]==9|q=='h23)en1=1;else en1=0;endendalways@(posedge clk A j or n egedge clr) begin if(~clr) q[7:4]=0;else if(en1) beginif (q=='h23) q[7:4]=0;else q[7:4]=q[7:4]+1;if(q[7:4]==2) cout=1;else cout=0;endendendmodule6、nyr2009 模块程序module nyr2009(clrn,clk,jn,jy,jr,qn,qy,qr); inputclrn,clk,jn,jy,jr;output reg [15:0] qn;output reg[7:0] qy,qr;reg [7:0] regreg [4:0] reg qym,qrm;clkn,clky;date;clkn1,clkn2,clkn3;initial begin clkn1=1;clkn2=1;clkn3=1;end initial begin qn='h2000;qym=1;qrm=1;end always@(posedge (clkAjr) or negedge clrn) beginif (~clrn) qrm=1;else beginif (qrm==date) qrm=1;else qrm=qrm+1;if (qrm==date) clky = 1;else clky = 0;endqr[7:4]=qrm/10; qr[3:0]=qrm%10;endalways @(posedge clkyAjy or negedge clrn)beginif (~clrn) qym=1;else beginif (qym==12) qym=1; else qym=qym+1; if(qym==12) clkn = 1; else clkn = 0;endqy[7:4]=qym/10;qy[3:0]=qym%10; end always begin case (qy) 1: date=31;2: beginif ((qn%4==0)&(qn/100 != 0)|(qn/400==0)) date=29; else date=28; end3: date=31;4: date=30;5: date=31;6: date=30;7: date=31;8: date=31;9: date=30;10: date=31;11: date=30;12: date=31; default :date=30; endcase end always @(posedge (elk n%) or n egedge clrn ) beginif (~clrn) qn[3:0]=0;else begin if(qn[3:0]==9) qn[3:0]=0;else qn[3:0]=qn[3:0]+1; if (qn[3:0]==9) clkn1=0; else clkn1=1;endendalways @(posedge clkn1 or negedge clrn ) beginif (~clrn) qn[7:4]=0;else begin if(qn[7:4]==9) qn[7:4]=0;else qn[7:4]=qn[7:4]+1;if (qn[7:4]==9) clkn2=0;else clkn2=1;endendalways @(posedge clkn2 or negedge clrn ) beginif (~clrn) qn[11:8]=0;else begin if(qn[11:8]==9) qn[11:8]=0;else qn[11:8]=qn[11:8]+1;if (qn[7:4]==9) clkn3=0;else clkn3=1;endendalways @(posedge clkn3 or negedge clrn ) begin if (~clrn) qn[15:12]=2;else if(qn[15:12]==9) qn[15:12]=0;else qn[15:12]=qn[15:12]+1;endendmodule7、mux_16 模块程序module mux_16(k,qm,qf,qs,qr,qy,qn,q); input k;input[7:0] qm,qf,qs,qr,qy;input[15:0] qn;output reg [31:0] q;alwaysbeginif (k==0) beginq[31:28]=0;q[27:0]={qs,qf,qm};endelse q={qn,qy,qr};endendmodule8、nzd 模块程序module nzd(k,x,q,clk);input k,x,clk;output reg q;always @(posedge clk)beginif(k==1) q=1;if(x==0) q=0;endendmodule。

相关文档
最新文档