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;四、心得体会通过本次万年历实训,让我从中收获很多,感触也很多。

EDA实训万年历

EDA实训万年历

《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课程的学习,可知运用Verilog HDL语言设计一个数字日历括计时器模块(jsq60、jsq24)、年月日模块(nyr2009)、控制模块(conr)、校时选择模块(mux_4)、显示选择模块(mux_16)和闹钟定时模块(LED1)、闹钟灯模块(nzd);然后将各个模块连接起来画成原理图再下载到实训仪上,调节开关及按钮来实现数字日历的功能。

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

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

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

EDA课程设计-万年历电子钟的设计

EDA课程设计-万年历电子钟的设计

EDA课程设计-万年历电子钟的设计————————————————————————————————作者:————————————————————————————————日期:课程设计(论文)任务书信息工程学院学院通信工程专业2009.2 班一、课程设计(论文)题目电子钟设计二、课程设计(论文)工作自2012年1月 3日起至 2012 年 1月 6 日止。

三、课程设计(论文) 地点: 华东交通大学4-410,图书馆四、课程设计(论文)内容要求:1.本课程设计的目的(1)掌握EDA技术及CPLD/FPGA的开发流程;(2)掌握自顶向下的设计思想;(3)掌握实用电子钟的设计原理;(4)掌握系统设计的分析方法;(5)提高学生的科技论文写作能力。

2.课程设计的任务及要求1)基本要求:(1)用HDL设计一个多功能数字钟,包含以下主要功能:精确计时,时间可以24小时制或12小时制显示;(2)日历:显示年月日星期;(3)能把设计文件进行仿真并下载到实验箱实现功能验证。

2)创新要求:在基本要求达到后,可进行创新设计,如增加报时等、秒表功能模块。

3)课程设计论文编写要求(1)要按照书稿的规格打印誊写论文(2)论文包括目录、绪论、正文、小结、参考文献、谢辞、附录等(3)论文装订按学校的统一要求完成4)答辩与评分标准:(1)完成系统分析:20分;(2)完成设计过程:20分;(3)完成仿真:10分;(4)完成下载:10分(5)回答问题:10分。

5)参考文献:(1)潘松,黄继业编著 .《EDA技术实用教程》,2005 ,科学出版社(2)徐志军,徐光辉编著.《CPLD/FPGA的开发与应用》,电子工业出版社,2001.1(3)/html/85/t-113885.html6)课程设计进度安排内容天数地点构思及收集资料1图书馆设计与调试3实验室撰写论文1图书馆、实验室学生签名:年月日课程设计(论文)评审意见(1)设计程序(40分):优()、良()、中()、一般()、差();(2)仿真结果(10分):优()、良()、中()、一般()、差();(3)下载结果(10分):优()、良()、中()、一般()、差();(4)回答问题(10分):优()、良()、中()、一般()、差();(5)报告成绩(30分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是()、否()评阅人:职称:年月日电子钟的设计摘要基于FPGA的电子钟设计,主要完成的任务是使用Verilog语音,在Quartise2上完成电路的设计,程序的开发,基本功能是能够显示、修改年月日时分秒。

EDA课程设计

EDA课程设计

课程设计报告课程设计名称:EDA技术课程设计题目:万年历系统的设计姓名:专业:电子信息科学与技术班级:电信一班学号:目录一、设计目标: (3)二、设计方案 (3)1、系统功能 (3)2、系统设计方案说明 (3)三.模块设计 (4)3.1分频模块 (4)3.2、主控制模块 (5)3.3 时间和日期的显示及设置模块 (6)3.4 输出显示模块 (11)3.5按键去抖模块 (12)四、设计总结 (13)附件1 原理电路图 (14)附件2、管脚分配图 (14)附件3、设计原理框图 (15)EDA课程设计实验报告一、设计目标:基本要求:1、使用原理图输入完成下述设计功能(1)设计一个数码管实时显示时、分、秒的数字时钟(24小时显示模式);(2)为了演示方便,应具有分钟、小时快进功能;(3)时、分、秒设置功能即校时功能。

(4)其他时钟使用功能,如闹钟、整点报时等功能。

2、使用硬件描述语言verilog HDL完成上述功能。

二、设计方案1、系统功能系统有数字钟的显示与设置,数字跑表的暂停及清零,闹铃的设置与实现,日期的设置与显示。

2、系统设计方案说明此实验是 FPGA系统的设计,主要有分频模块、主控制模块、时间和日期的显示及设置模块、输出显示模块、按键去抖模块以及一些输入和输出管脚、电源和地构成。

三.模块设计3.1分频模块1.功能:分频器,使1000HZ时钟信号分频成低频信号,达到适合的频率,以供此实验应用。

最后输入频率为1Hz。

2.相关程序:input clk_1Hz ; //1Hz时钟,供数字钟使用input clk_1kHz ;always@(posedge clk_1kHz)beginclk_500Hz=~clk_500Hz; //2分频//由1 kHz分频得500 Hz时钟信号,整点报时使用temp1=func_key;temp2=key1;temp3=key2;if(divide==3'b101) // 5 分频//由1 kHz分频得到100 Hz信号,用作跑表的时钟begindivide=0;clk_100Hz=~clk_100Hz;endelse divide=divide+1;end3.2、主控制模块1.功能:该模块实现对各个功能的整体控制选择,包括对时间显示与调整、日期显示与调整、闹钟显示与调整、秒表操作等的控制,同时输出所要显示的相应数据,完成万年历的整体操控选择设置等功能。

EDA万年历实训报告

EDA万年历实训报告

《EDA技术及其应用》实训报告班级姓名学号指导教师年月日郑州信息科技职业学院10级机械电子工程系目录一设计要求 (2)1.0 设计目的及意义 (2)1.1 设计要求 (2)二设计流程: (2)2.0 原理框图 (2)2.1 VHDL设计思路 (3)三 VHDL程序 (3)3.0 60进制计数器 (3)3.1 24进制计数器 (5)3.2 天计数模块 (6)3.3 月计数模块 (7)3.4 年计数模块 (9)3.5 调时控制模块 (11)3.6 显示切换模块 (12)四心得体会 (14)4.0 (14)五附录 (15)5.0 顶层文件 (15)一、设计目的及意义1.0 设计目的及意义在掌握EDA理论知识的基础上进一步了解EDA开发软件QuartusII的使用,掌握VHDL编程的技巧及方法,学会并熟练掌握PC机与实验箱的连接下载及使用,进一步提高自己的动手操作能力。

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

二、设计流程2.0 原理框图显示秒、分、时日月年调整控制k4、k7秒、分是60进制计数器,时是24进制计数器,日有月份判断天数,月受年的影响由年判断出是润年还是平年从而反馈给月决定具体天数。

2.1 VHDL设计思路分别编写60进制计数器和24进制计数器生成元器件供秒,分和时使用,编写年月日模块,年模块要有一个反馈端口控制月;月也要有一个反馈端口控制日;最后编写调时模块和显示切换模块,可以用键4和键7控制调时,键1控制显示的切换,用对应的LED等的亮灭来表示显示状态。

三、VHDL程序3.0 60进制计数library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt60 isport(clk:in std_logic;q1,q2:out std_logic_vector(3 downto 0);cout:out std_logic);end cnt60;architecture one of cnt60 issignal q11,q22:std_logic_vector(3 downto 0); beginprocess(clk)beginif clk'event and clk='1' thenq11<=q11+1;if q11=9 then q11<=(others=>'0');q22<=q22+1;end if;if q22=5 and q11=9 thenq22<="0000";q11<="0000";cout<='1';else cout<='0';end if;end if;end process;q1<=q11;q2<=q22;end;3.1 24进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt24 isport(clk:in std_logic;q1,q2:out std_logic_vector(3 downto 0);cout:out std_logic);end cnt24;architecture one of cnt24 issignal q11,q22:std_logic_vector(3 downto 0); beginprocess(clk)beginif clk'event and clk='1' thenq11<=q11+1;if q11=9 then q11<=(others=>'0');q22<=q22+1;end if;if q22=2 and q11=3 thenq22<="0000";q11<="0000";cout<='1';else cout<='0';end if;end if;end process;q1<=q11;q2<=q22;end;3.2 天计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity tian isport(clk:in std_logic;ab:in std_logic_vector(1 downto 0);CQ1,CQ2:out std_logic_vector(3 downto 0);COUT:OUT std_logic);end entity tian;architecture art of tian issignal s1,s2:std_logic_vector(3 downto 0);beginprocess(clk)beginIF clk'event AND clk='1' thenS1<=S1+1;IF S1=9 THENS1<="0000";S2<=S2+1;END IF;CASE AB ISwhen"00"=>IF S2=2 AND S1=8 THEN S1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;when"01"=>IF S2=2 AND S1=9 THEN S1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;when"10"=>IF S2=3 AND S1=0 THEN S1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;when"11"=>IF S2=3 AND S1=1 THEN S1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;WHEN OTHERS=>NULL;END CASE;END IF;CQ1<=S1;CQ2<=S2;end process;END art;3.3 月计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity yue isport(clk:in std_logic;ab:out std_logic_vector(1 downto 0);r: in std_logic;CQ1,CQ2:out std_logic_vector(3 downto 0);COUT:OUT std_logic);end entity YUE;architecture art of yue issignal s1,s2:std_logic_vector(3 downto 0);beginprocess(clk)beginIF clk'event AND clk='1' thenS1<=S1+1;IF S1=9 THENS1<="0000";S2<=S2+1;END IF;IF s2=1 and s1=2 thens1<="0001";s2<="0000";COUT<='1';ELSE COUT<='0';END IF;END IF;CASE s2&s1 iswhen"00000001"=>ab<="11";when"00000010"=>if r='0' then ab<="00"; else ab<="01";end if;when"00000011"=>ab<="11";when"00000100"=>ab<="10";when"00000101"=>ab<="11";when"00000110"=>ab<="10";when"00000111"=>ab<="11";when"00001000"=>ab<="11";when"00001001"=>ab<="10";when"00010000"=>ab<="11";when"00010001"=>ab<="10";when"00010010"=>ab<="11";WHEN OTHERS=>NULL;END CASE;CQ1<=S1;CQ2<=S2;end process;END art;3.4 年计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity year isport(clk:in std_logic;y1,y2:out std_logic_vector(3 downto 0);run,cout:out std_logic);end year;architecture one of year issignal q1,q2,q3:std_logic_vector(3 downto 0); beginprocess(clk)beginif clk'event and clk='1' thenq1<=q1+1;if q1=9 then q1<=(others=>'0');q2<=q2+1;end if;if q2=9 and q1=9 thenq2<="0000";q1<="0000";cout<='1';else cout<='0';end if;end if;end process;process(clk)beginif clk'event and clk='1' thenq3<=q3+1;if q3=3 then q3<=(others=>'0');run<='1';else run <='0';end if;end if;y1<=q1;y2<=q2;end process;end;3.5 调时控制模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity TIAO isPORT(NHO,NLO,YO,TOO,HO,MO,SO,K2,K8 : IN STD_LOGIC;NHI,NLI,YI,TI,HI,MI,SI,L1,L2,L4,L5,L7,L8 : OUT STD_LOGIC); END ENTITY;ARCHITECTURE BEHAV OF TIAO ISSIGNAL ABC :STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINPROCESS(ABC,K2)BEGINif k2'event and k2='1' then ABC<=ABC+1; END IF;IF ABC="110" THEN ABC<="000" ; END IF;CASE ABC ISWHEN"000"=>NHI<=NHO;NLI<=NLO;YI<=YO;TI<=TOO;HI<=HO;MI<=MO;SI<=SO;L1<='0';L2<='0'; L4<='0';L5<='0';L8<='0';L7<='0';WHEN"001"=>NHI<='0';NLI<='0';YI<='0';TI<='0';HI<='0';MI<='0';SI<=K8;L4<='1';L1<=' 0';L2<='0';L5<='0';L8<='0';L7<='0';WHEN"010"=>NHI<='0';NLI<='0';YI<='0';TI<='0';HI<='0';MI<=K8;SI<='0';L7<='1';L1<=' 0';L2<='0';L4<='0';L5<='0';L8<='0';WHEN"011"=>NHI<='0';NLI<='0';YI<='0';TI<='0';HI<=K8;MI<='0';SI<='0';L2<='1';L1<=' 0';L4<='0';L5<='0';L8<='0';L7<='0';WHEN"100"=>NHI<='0';NLI<='0';YI<='0';TI<=K8;HI<='0';MI<='0';SI<='0';L5<='1';L1<=' 0';L2<='0';L4<='0';L7<='0';L8<='0';WHEN"101"=>NHI<='0';NLI<='0';YI<=K8;TI<='0';HI<='0';MI<='0';SI<='0';L8<='1';L1<=' 0';L2<='0';L4<='0';L5<='0';L7<='0';WHEN OTHERS => NULL;END CASE;END PROCESS;END;3.6 显示切换模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity control isport(sl,sh,fl,fh,hl,hh,dl,dh,ml,mh,yl,yh,yl1,yh1:instd_logic_vector(3 downto 0);k1:in std_logic;q1,q2,q3,q4,q5,q6,q7,q8:out std_logic_vector(3 downto 0);L6,L3:out std_logic);end control;architecture one of control issignal w:std_logic_vector(1 downto 0);beginprocess(k1)beginif k1'event and k1='1' then w<=w+1;if w=2 then w<="00";end if;end if;case w iswhen"00"=>q6<=yh;q5<=yl;q4<=mh;q3<=ml;q2<=dh;q1<=dl;L6<='1';L3<='0 ';when"01"=>q6<=hh;q5<=hl;q4<=fh;q3<=fl;q2<=sh;q1<=sl;L6<='0';L3<='1 ';when others=>null;end case;end process;end;四、心得体会4.0通过本次万年历实训,让我从中收获很多,感触也很多。

《EDA技术与应用》实训报告

《EDA技术与应用》实训报告

桂林电子科技大学信息科技学院《EDA技术与应用》实训报告学号姓名指导教师:2012 年6 月20 日数字日历电路的设计1.系统设计1.1 设计要求①通过编程下载至实训箱实现万年历的设计制作;②数字日历能够显示年、月、日和时、分和秒;③用EDA实训仪上的8只八段数码管显示年、月、日和时、分、秒,每过8秒分别现实两个时间段能自动倒换;④数字日历具有复位和校准年、月、日、时、分、秒的按钮,有锁定时分秒的按键,同时加了一个现实闹钟的程序,即在设置的时间,LED显示一分钟,按键可以暂停。

1.1.1 设计任务设计并制作一台数字日历,添加闹钟功能。

1.1.2 技术要求基于Verilog HDL 编写电路设计2.总体思路根据学校EDA实验设备的输入/输出接口的容限,本设计采用8只七断数码管分时完成时,分,秒,年,月,日的显示。

设计电路的计时器模块用于完成一天中24小时计时;年月日模块接受24小时计时器模块送来的“天”脉冲进行计数,得到日,月,年的显示结果;控制模块产生控制信号K,控制数码显示器显示年月日,和时分秒的显示或自动切换显示。

校时选择模块在k信号的控制下,选择将j1,j2,j3这三个校时按钮产生的信号是送到计时器模块的校秒,校时,校分的输入端,还是送到年月诶模块的校天,校月,校年输入端;显示选择模块在k信号的控制下,选择是将24小时模块信号,还是将年月日模块信号送到数码显示器显示。

闹钟模块用于在设置时间用LED代替真正的闹钟,灯光一闪一闪表示闹钟响,加一按键,用于控制闹钟的灭。

24小时计数器电路图分频模块控制模块控制模块24小时计时模块 年月日模块闹钟模块校时模块显示模块译码器系统流程图整个系统电路里模块有主要有年月日模块,24小时计数器模块,闹钟模块,显示模块,信号k控制模块,校时选择模块,还原选择模块;而24小时计数器模块中又分有分频模块,六十进制计数器模块,二十四进制计数器模块。

2.1 设计方案2.1.1各个模块程序的设计1:分频器module gen (clk,cout);input clk;reg[24:0] q;output reg cout;always @(posedge clk) beginif(q==20000000-1) q=0; else q=q+1;if(q==20000000-1) cout=1; else cout=0;endendmodule module gen_mb(clk,cout); input clk;reg[24:0] q;output reg cout;always @(posedge clk) beginif(q==200000-1) q=0; else q=q+1;if(q==200000-1) cout=1; else cout=0;endendmodule2:六十进制计数器模块module cnt60(clk,clrn,j,q,cout);input clk,clrn,j;2千万分频20万分频output reg[7:0] q;output reg cout;always @(posedge clk^j or negedge clrn) beginif(~clrn) q=0;else beginif(q=='h59) q=0;else q=q+1;if(q[3:0]=='ha)beginq[3:0]=0; q[7:4]=q[7:4]+1;endif(q=='h59) cout=1;else cout=0;endendendmodule3:二十四进制计数器模块module cnt24(clk,clrn,j,q,cout);input clk,clrn,j;output reg[7:0] q;output reg cout;always @(posedge clk^j or negedge clrn) beginif(~clrn) q=0;else beginif(q=='h23) q=0;else q=q+1;if(q[3:0]=='ha)beginq[3:0]=0; q[7:4]=q[7:4]+1;endif(q=='h23) cout=1;else cout=0;endendendmodule4:100进制计数器模块module cnt100(clk,clrn,j,q,cout);input clk,clrn,j;output reg[7:0] q;output reg cout;reg[7:0] flay;always @(j)beginif(j) flay=0;else flay=1;endalways @(posedge clk or negedge clrn) beginif(~clrn) q=0;else if(flay==0) beginif(q==99) q=0;else q=q+1;if(q[3:0]=='hff)beginq[3:0]=0; q[7:4]=q[7:4]+1;endif(q==99) cout=1;else cout=0;endendendmodule5:年月日模块module nyr2009(clrn,clk,jn,jy,jr,qn,qy,qr); input clrn,clk,jn,jy,jr;output [15:0] qn;output [7:0] qy,qr;reg [15:0] qn;reg [7:0] qy,qr;reg clkn,clky;reg [7:0] date;reg clkn1,clkn2,clkn3;initial begin clkn1=1;clkn2=1;clkn3=1;endinitial begin qn='h2000;qy=1;qr=1;endalways @(posedge (clk^jr) or negedge clrn)beginif (~clrn) qr=1;else beginif (qr==date) qr=1;else qr=qr+1;if (qr[3:0]=='ha) beginqr[3:0]=0; qr[7:4]=qr[7:4]+1;endif (qr==date) clky = 1;else clky = 0;endendalways @(posedge clky^jy or negedge clrn)beginif (~clrn) qy=1;else beginif (qy=='h12) qy=1;else qy=qy+1;if (qy[3:0]=='ha) beginqy[3:0]=0;qy[7:4]=qy[7:4]+1;endif (qy=='h12) clkn = 1;else clkn = 0;endendalwaysbegincase (qy)'h01: date='h31;'h02: beginif ((qn%4==0)&(qn%100 != 0)|(qn%400==0)) date='h29;else date='h28; end'h03: date='h31;'h04: date='h30;'h05: date='h31;'h06: date='h30;'h07: date='h31;'h08: date='h31;'h09: date='h30;'h10: date='h31;'h11: date='h30;'h12: date='h31;default :date='h30;endcaseendalways @(posedge (clkn^jn) or negedge 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[11:8]==9) clkn3=0;else clkn3=1;endendalways @(posedge clkn3 or negedge clrn ) beginif (~clrn) qn[15:12]=2;else if(qn[15:12]==9) qn[15:12]=0;else qn[15:12]=qn[15:12]+1;endendmodule6:信号k控制模块module contr(clk,k1,k2,k);input clk,k1,k2;output reg k;reg [3:0] qc;reg rc;always @(posedge clk)begin qc=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;endcaseendendmodule7:校时选择模块module mux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3,); input j1,j2,j3;input k;output reg jm,jf,js,jr,jy,jn;alwaysbeginif(k==0) {jm,jf,js}={j1,j2,j3};else {jr,jy,jn}={j1,j2,j3};endendmodule8:24小时计数器module cnt24(clrn,clk,q,j,cont);input clrn,clk,j;output reg [7:0] q;output reg cont;always @(posedge clk^j or negedge clrn)beginif(~clrn) q=0;else beginif(q=='h23) q=0;else q=q+1;if(q[3:0]=='ha) begin q[3:0]=0;q[7:4]=q[7:4]+1;end if(q=='h23) cont=1;else cont=0;endendendmodule9:.显示器选择器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:24]=0;q[23:0]={qs,qf,qm};endelse q={qn,qy,qr};endEndmodule10:闹钟模块naozhong(qs,qf,led,zt);input zt;input[7:0] qs,qf;output led;reg led;alwaysbeginif (qs=='h06&&qf=='h01)led=1;elseled=0;if(zt==1) led=0;endendmodule3.制作与调试过程在实验中参考上课中学的万年历,在原有的基础上添加了一个闹钟功能,用LED代替实际的闹钟,在设置的时间内闪烁1分钟,又添加姨暂停按键,实现闹钟关闭功能,由于能力有限,没能加上其他功能的创新,是此次实训设计的缺憾,在调试过程中也比较顺利,在经过一段时间的调试后,基本就能实现功能,而主要时间用在了对原来的程序理解上。

EDA实验报告万年历

EDA实验报告万年历

《EDA技术及其应用》实验报告万年历设计班级姓名学号年月日***********学院一设计要求与系统功能要求:1.能实现年、月、日和时、分、秒的计时功能,按键控制模式切换。

2.能利用实验系统上的按键实现年、月、日和时、分、秒的校对功能。

功能:1. 将年、月、日和时、分、秒两种模式分别在试验箱模式0下显示,并设置键6(KEY1)为模式的切换键。

2.当KEY1=1时,显示年、月、日,键5(T1)为调年键、键4(T2)为调月键、键3(T3)键为调日键。

3.当KEY1=0时,显示时、分、秒,键5 为调时键,键4为调分键,键3为调秒键。

4.能实现进位,判断闰年等功能。

二设计流程1. 万年历原理秒、分是60进制,时是24进制,日31天由月1.3.5.7.8.10.12控制,日28/29由2月和润年控制,日30由月4.6.9.11控制。

原理如下图:显示秒、分、时日月年调整控制T1、T2、T32. 原理框图根据实验要求,截得实验原理框图如下:3. 原理框图中各子模块的VHDL程序、生成模块框图和功能仿真3.0 分频器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY divider isPORT(CLKI:IN STD_LOGIC;CLKO1,CLKO2:OUT STD_LOGIC);END divider;SIGNAL count:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINPROCESS (clki)BEGINIF clki'EVENT and clki='1' THENcount<=count+1;END IF;END PROCESS;clko2<=count(0);------------------输出4Hz作为校时的时钟信号clko1<=count(2);------------------输出1Hz作为正常计时的秒时钟信号END a;3.1 2选1数据选择器(用以选择正常计时的时钟或校时的时钟信号)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX2 ISPORT(A,D0,D1:IN STD_LOGIC;Y: OUT STD_LOGIC);END MUX2;ARCHITECTURE ONE OF MUX2 ISBEGINY<=D0 WHEN A='0' ELSE------A为低电平输出D0D1 WHEN A='1'; -------A为高电平输出D1END ONE;3.2 调时模块(用以控制按键是调节时分秒还是年月日以及数码管相应显示) LIBRARY IEEE;USE IEEE.STD_LOGIC_1164. ALL;ENTITY tiaoshi ISport(key1,t1,t2,t3:in std_logic;ty,tm,td,th,tf,ts:out std_logic;k:out std_logic);end tiaoshi;architecture one of tiaoshi issignal a:std_logic;beginprocess(key1)beginif key1'event and key1='1' then a<=not a;end if;if a<='0' thenty<='0';tm<='0';td<='0';th<=t1;tf<=t2;ts<=t3; ------k=0时,显示、调节时分秒elsety<=t1;tm<=t2;td<=t3; ------k=1时,显示、调节年月日th<='0';tf<='0';ts<='0';end if;end process;k<=a;end one;3.3 60进制计数器(秒与分的计数模块)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT60 ISPORT(CLK:IN STD_LOGIC;CQ1,CQ2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT60;ARCHITECTURE behav OF CNT60 ISBEGINPROCESS(CLK)V ARIABLE Q1,Q2: STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THENQ1:=Q1+1;IF Q1>9 THEN Q1:="0000";Q2:=Q2+1;END IF;IF Q2=6 AND Q1=0 THEN Q1:="0000";Q2:="0000";COUT<='1';ELSE COUT<='0';END IF;END IF;CQ1<=Q1;CQ2<=Q2;END PROCESS;END;3.4 24进制计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt24 ISPORT(CLK:IN STD_LOGIC;CQ1,CQ2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);COUT:OUT STD_LOGIC);END cnt24;ARCHITECTURE behav OF cnt24 ISBEGINPROCESS(CLK)V ARIABLE Q1,Q2: STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THENQ1:=Q1+1;IF Q1>9 THEN Q1:="0000";Q2:=Q2+1;END IF;IF Q2=2 AND Q1=4 THEN Q1:="0000";Q2:="0000";COUT<='1';ELSE COUT<='0';END IF;END IF;CQ1<=Q1;CQ2<=Q2;END PROCESS;END;3.5 天计数模块Library IEEE;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_1164.all;ENTITY day ISPORT( clk : in std_logic;a,b : in std_logic;T1,T2 : out std_logic_vector(3 downto 0);cout : out std_logic);END day;Architecture one of day issignal ab: STD_LOGIC_VECTOR(1 DOWNTO 0);signal Q1,Q2: STD_LOGIC_VECTOR(3 DOWNTO 0);BeginPROCESS(clk,a,b)beginab<=a&b;IF CLK'EVENT AND CLK='1' THENIF Q1=9 THENQ1<="0000";Q2<=Q2+1;else Q1<=Q1+1;end if;if ab="00" thenif Q2=3 AND Q1=1 THENQ2<="0000"; Q1<="0001"; cout<='1';else cout<='0';end if;elsif ab="01"thenif Q2=3 and Q1=0 THENQ2<="0000" ;Q1<="0001";cout<='1';else cout<='0';end if;elsif ab="10" thenif Q2=2 AND Q1=8 thenQ2<="0000" ;Q1<="0001";cout<='1';else cout<='0';end if;elsif ab="11" thenif Q2=2 AND Q1=9 thenQ2<="0000" ;Q1<="0001";cout<='1'; else cout<='0';end if;else null;END IF;end if;T1<=Q1;T2<=Q2;END PROCESS;END ARCHITECTURE one;3.6 月计数模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yue ISPORT(CLK,run:IN STD_LOGIC;Y1,Y2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);a,b:OUT STD_LOGIC;COUT:OUT STD_LOGIC);END yue ;ARCHITECTURE ONE OF yue ISsignal Q2,Q1:STD_LOGIC_VECTOR (3 DOWNTO 0); signal Q2Q1:STD_LOGIC_VECTOR (7 DOWNTO 0);SIGNAL a1,b1:STD_LOGIC;BEGINPROCESS(CLK,run)BEGINIF CLK'EVENT AND CLK='1' THENIF Q1=9 THENQ1<="0000";Q2<=Q2+1;ELSEQ1<=Q1+1;END IF;IF Q2=1 AND Q1=2 THENQ1<="0001";Q2<="0000";COUT<='1';ELSE COUT<='0';END IF;end if;end PROCESS;PROCESS(q2,q1)beginQ2Q1<=Q2&Q1;IF Q2Q1="00000001" ORQ2Q1="00000011" ORQ2Q1="00000101" ORQ2Q1="00001000" ORQ2Q1="00010000" ORQ2Q1="00010010"THEN a1<='0';b1<='0';ELSIF Q2Q1="00000010" THENIF run='1' thena1<='1';b1<='1';else a1<='1';b1<='0';end if;ELSE a1<='0';b1<='1';END IF;END PROCESS;Y1<=Q1;Y2<=Q2;a<=a1;b<=b1;END ARCHITECTURE ONE;3.7 年计数模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY nian ISPORT(CLK:IN STD_LOGIC;N1,N2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);run:OUT STD_LOGIC);END nian;ARCHITECTURE ABC OF nian ISsignal Q1,Q2,Q3:STD_LOGIC_VECTOR (3 DOWNTO 0); BEGINPROCESS(CLK,Q1,Q2)BEGINIF CLK'EVENT AND CLK='1' THENIF Q1=9 THENIF Q2=9 THENQ1<="0000";Q2<="0000";ELSEQ1<="0000";Q2<=Q2+1;END IF;ELSEQ1<=Q1+1;END IF;Q3<=Q3+1;IF Q3=3 THENQ3<="0000";run<='1';ELSE run<='0';END IF;end if;end PROCESS;N1<=Q1;N2<=Q2;end;3.8秒分时和日月年分组输出控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164. ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity kong isport(n1,n2,y1,y2,t1,t2,h1,h2,f1,f2,s1,s2:in std_logic_vector(3downto 0);k:in std_logic;hn1,hn2,fy1,fy2,st1,st2:out std_logic_vector(3 downto 0));end kong;architecture one of kong isbeginprocess(k,s1,s2,f1,f2,h1,h2,t1,t2,y1,y2,n1,n2)beginif k='0' then-----------显示时分秒st1<=s1;st2<=s2;fy1<=f1;fy2<=f2;hn1<=h1;hn2<=h2;else -----------显示年月日st1<=t1;st2<=t2;fy1<=y1;fy2<=y2;hn1<=n1;hn2<=n2;end if;end process;3.9 顶层文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY TOP ISPORT(CLK,KEY1,T1,T2,T3:IN STD_LOGIC;HNH,HNL,FYH,FYL,STH,STL: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END TOP;ARCHITECTURE ONE OF TOP ISCOMPONENT TIAOSHI IS-------------------------例化调试port(key1,t1,t2,t3:in std_logic;ty,tm,td,th,tf,ts:out std_logic;k:out std_logic);END COMPONENT;COMPONENT MUX2 IS----------------------------例化数选PORT(A,D0,D1:IN STD_LOGIC;Y: OUT STD_LOGIC);END COMPONENT;COMPONENT NIAN IS--------------------------例化年PORT(CLK:IN STD_LOGIC;N1,N2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);run:OUT STD_LOGIC);END COMPONENT;COMPONENT YUE IS---------------------------例化月PORT(CLK,run:IN STD_LOGIC;Y1,Y2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);a,b:OUT STD_LOGIC;COUT:OUT STD_LOGIC);END COMPONENT;COMPONENT DAY IS---------------------------例化日Port( clk : in std_logic;a,b : in std_logic;T1,T2 : out std_logic_vector(3 downto 0);cout : out std_logic);END COMPONENT;COMPONENT CNT24 IS----------------------例化时PORT(CLK:IN STD_LOGIC;CQ1,CQ2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);COUT:OUT STD_LOGIC);END COMPONENT;COMPONENT CNT60 IS---------------------例化分秒PORT(CLK:IN STD_LOGIC;CQ1,CQ2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);COUT:OUT STD_LOGIC);END COMPONENT;COMPONENT KONG IS----------------------例化控制显示port(n1,n2,y1,y2,t1,t2,h1,h2,f1,f2,s1,s2:in std_logic_vector(3 downto 0);k:in std_logic;hn1,hn2,fy1,fy2,st1,st2:out std_logic_vector(3 downto 0));END COMPONENT;COMPONENT DIVIDER IS--------------------例化分频器PORT(CLKI:IN STD_LOGIC;CLKO1,CLKO2:OUT STD_LOGIC);END COMPONENT;SIGNAL Y,M,D,H,F,S,K1:STD_LOGIC;SIGNAL C1,C2:STD_LOGIC;SIGNAL Y1,Y2,Y3,Y4,Y5,Y6,CL1,CL2,CL3,CL4,CL5,CL6:STD_LOGIC;SIGNAL CO1,CO2,CO3,CO4,CO5:STD_LOGIC;SIGNAL A1,B1,R:STD_LOGIC;SIGNAL Q:STD_LOGIC_VECTOR(47 DOWNTO 0);BEGINU1:TIAOSHI PORT MAP(KEY1=>KEY1,T1=>T1,T2=>T2,T3=>T3,TY=>Y,TM=>M,TD=>D,TH=>H,TF=>F,TS=>S,K=>K1);U2:DIVIDER PORT MAP(CLKI=>CLK,CLKO1=>C1,CLKO2=>C2);U3:MUX2 PORT MAP(A=>S,D0=>C1,D1=>C2,Y=>Y1);U4:MUX2 PORT MAP(A=>F,D0=>CO1,D1=>C2,Y=>Y2);U5:MUX2 PORT MAP(A=>H,D0=>CO2,D1=>C2,Y=>Y3);U6:MUX2 PORT MAP(A=>D,D0=>CO3,D1=>C2,Y=>Y4);U7:MUX2 PORT MAP(A=>M,D0=>CO4,D1=>C2,Y=>Y5);U8:MUX2 PORT MAP(A=>Y,D0=>CO5,D1=>C2,Y=>Y6);U9:CNT60 PORT MAP(CLK=>Y1,COUT=>CO1,CQ1=>Q(3 DOWNTO 0),CQ2=>Q(7 DOWNTO 4));U10:CNT60 PORT MAP(CLK=>Y2,COUT=>CO2,CQ1=>Q(11 DOWNTO 8),CQ2=>Q(15 DOWNTO 12));U11:CNT24 PORT MAP(CLK=>Y3,COUT=>CO3,CQ1=>Q(19 DOWNTO 16),CQ2=>Q(23 DOWNTO 20));U12:DAY PORT MAP(CLK=>Y4,COUT=>CO4,T1=>Q(27 DOWNTO 24),T2=>Q(31 DOWNTO 28),A=>A1,B=>B1);U13:YUE PORT MAP(CLK=>Y5,COUT=>CO5,Y1=>Q(35 DOWNTO 32),Y2=>Q(39 DOWNTO 36),RUN=>R,A=>A1,B=>B1);U14:NIAN PORT MAP(CLK=>Y6,RUN=>R,N1=>Q(43 DOWNTO 40),N2=>Q(47 DOWNTO 44));U15:KONG PORT MAP(N1=>Q(43 DOWNTO 40),N2=>Q(47 DOWNTO 44),Y1=>Q(35 DOWNTO 32),Y2=>Q(39 DOWNTO 36),T1=>Q(27 DOWNTO 24),T2=>Q(31 DOWNTO 28),H1=>Q(19 DOWNTO 16),H2=>Q(23 DOWNTO 20),F1=>Q(11 DOWNTO 8),F2=>Q(15 DOWNTO 12),S1=>Q(3 DOWNTO 0),S2=>Q(7 DOWNTO 4),HN1=>HNL,HN2=>HNH,FY1=>FYL,FY2=>FYH,ST1=>STL,ST2=>STH,K=>K1);END ONE;三系统调试1.设置引脚选用系统上N0.0电路结构:CLK~CLOCK1(实验箱上跳针帽连接CLOCK1和8Hz),T1~键5,T2~键4,T3~键3,HNH~PIO39-36,HNL~PIO35-32,FYH~PIO31-28,FYL~PIO27-24,STH~PIO23-20,STL~PIO19-16。

数字万年历制作实习报告

数字万年历制作实习报告

一、实习背景随着科技的发展,电子产品的普及,人们对生活品质的要求也越来越高。

为了培养自己的动手能力,提高综合素质,我在本次实习中选择了数字万年历的制作。

数字万年历是一种结合了电子技术、编程和艺术设计的产品,它能够显示日期、星期、农历等信息,方便人们的生活和工作。

通过本次实习,我对数字万年历的制作过程有了更加深入的了解,也锻炼了自己的实际操作能力。

二、实习目的1. 学习数字万年历的制作原理,掌握电子元器件的选用和焊接技术。

2. 熟悉编程软件的使用,掌握单片机编程的基本方法。

3. 提高自己的动手能力和团队合作精神。

4. 培养自己的创新意识和解决问题的能力。

三、实习内容1. 硬件部分(1)元器件选型:根据数字万年历的功能需求,选择了以下元器件:STC89C52单片机、LCD显示屏、DS1302时钟芯片、按键模块、电阻、电容、二极管等。

(2)电路设计:根据元器件的特性和功能,设计了数字万年历的电路图。

电路图主要包括单片机、时钟芯片、显示屏、按键模块等部分。

(3)焊接:按照电路图进行元器件的焊接,确保电路连接正确。

2. 软件部分(1)编程环境:使用Keil uVision4软件进行编程。

(2)编程方法:根据数字万年历的功能需求,编写了以下程序:a. 初始化程序:设置单片机的工作模式、时钟频率、端口初始化等。

b. 时钟程序:读取DS1302时钟芯片的时间信息,显示在LCD显示屏上。

c. 显示程序:根据日期、星期、农历等信息,在LCD显示屏上显示相应的信息。

d. 按键扫描程序:扫描按键状态,实现日期、星期、农历等信息的切换。

3. 系统调试(1)硬件调试:检查电路连接是否正确,元器件是否损坏。

(2)软件调试:在Keil uVision4软件中编译程序,下载到单片机中,观察LCD显示屏的显示效果。

四、实习成果通过本次实习,我成功制作了一款数字万年历。

该万年历能够显示日期、星期、农历等信息,具有以下特点:1. 操作简便:用户可以通过按键切换日期、星期、农历等信息。

EDA万年历报告

EDA万年历报告

FPGA-CPLD原理及应用课程设计报告题目:基于SOPC设计万年历学院: 信息与电子工程学院专业: 电子信息工程学号:姓名:指导老师:时间: 2013.7.15--2013.7.20一、摘要设计从系统硬件出发,由CPU、总线、RAM、外接设备等构成SOPC Builder 的硬件系统,通过Nios II DE2开发的嵌入式软件编写并嵌入SOPC Builder的硬件中实现万年历的整体开发。

通过应用SoPC Builder开发工具,设计者可以摆脱传统的、易于出错的软硬件设计细节,从而达到加快项目开发、缩短开发周期、节约开发成本的目的并具有高集成度、设计灵活和可移植性较好。

关键词:万年历SOPC SOPC Builder Nios II DE2二、设计要求用Nios II DE2 开发板的LCD显示电子钟的日期和时间。

LCD分两行显示,第1行显示年、月、日;第2行显示时、分、秒。

用输入BUTTON[0]来控制LCD 行的修改,同时让Nios II DE2开发板上的绿色发光二极管亮灭来表示这个选择。

当BUTTON[0]按一下后,LEDG3亮,可以修改年、月和日的数字;再按一下BUTTON[0]后,LEDG3灭,可以修改时、分和秒的数字。

另外用输入按钮BUTTON[3]来控制日期和时间的修改,当处于日期修改方式时,每次按动一次BUTTON[3],依次更换“年”、“月”和“日”的修改。

当处于时间修改方式时,每次按动一次BUTTON[3],依次更换“时”、“分”和“秒”的修改。

修改对象被选中后,按动BUTTON[2]输入按钮可以增加显示的数字;按动BUTTON[1]输入按钮可以减少显示的数字。

三、设计内容1、按键信息BUTTON[3]:“年”、“月”、“日”或“时”、“分”、“秒”切换键BUTTON[2]:+键BUTTON[1]:-键BUTTON[0]:“年”、“月”、“日”与“时”、“分”、“秒”切换键显示信息LCD_Line1:显示“年”、“月”、“日”LCD_Line1:显示“时”、“分”、“秒”2、SOPC Builder 硬件建立SOPC Builder是在Quartus II里的SOPC Builder进行的,先建立工程,在SOPC Builder里添加硬件,包括CPU ,jtag_uart ,RAM,LCD,PIO,按键,LED,以及LCD_ON。

万年历实训报告

万年历实训报告

《EDA技术及其应用》实训报告班级电信一班姓名 xx学号 xx 指导教师 xx2012年 05月 21 日xxxx学院10级机械电子工程系目录前言......................................................... .. (4)课题......................................................... (4)实验的目的及意义......................................................... (4)实验的内容及要求......................................................... (4)实验的地点......................................................... (4)1. 6 实验的器材......................................................... (4)1. 7 实验设计思想......................................................... .. (4)1.8各模块的设计程序和元件介绍 (5)感想……………………………………………………….前言随着电子技术的不断发展与进步,电子系统的设计方法发生了很大的变化,基于EDA技术的设计方法正成为电子系统设计的主流,EDA技术已成为许多高职高专院校电类专业学生必须掌握的一门重要技术。

此次基于EDA技术的万年历实训,加强了同学们对EDA工具QuartusII的使用方法、VHDL语言知识、FPGA开发技术的深入理解,通过万年历的功能实现和功能测试,详细介绍QuartusII的完整设计流程,在此基础上,进一步介绍面向复杂模块的使用方法。

  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。

相关文档
最新文档