数字日历电路设计EDA实训
数字万年历实训报告电气
![数字万年历实训报告电气](https://img.taocdn.com/s3/m/a0254f6e30126edb6f1aff00bed5b9f3f90f72d8.png)
一、实训目的随着科技的不断发展,电子产品的应用越来越广泛。
数字万年历作为一种常见的电子设备,具有显示日期、星期、农历、节假日等多种功能,给人们的生活带来了极大的便利。
为了更好地掌握电子产品的设计原理和制作方法,提高自身的实践能力,本次实训旨在通过设计和制作数字万年历,使学生对电子技术、电路设计、编程等方面有一个全面的认识和掌握。
二、实训内容1. 数字万年历的设计(1)功能需求分析根据用户需求,数字万年历应具备以下功能:1)显示日期、星期、农历、节假日等信息;2)具有闹钟功能,可设定闹钟时间、闹钟音量等;3)具有定时关机功能,可根据用户需求设定关机时间;4)具备背光功能,便于夜间使用;5)具有定时更新功能,可自动更新农历、节假日等信息。
(2)硬件设计1)主控芯片:选用STM32F103系列单片机,具有丰富的片上资源,易于编程和控制。
2)显示模块:采用TFT LCD显示屏,显示效果清晰,支持触摸操作。
3)按键模块:采用独立按键,实现功能选择、闹钟设置、关机等操作。
4)时钟模块:采用DS3231实时时钟模块,提供高精度的时间测量和闹钟功能。
5)背光模块:采用LED背光,可调节亮度,满足不同环境需求。
6)电源模块:采用DC-DC转换器,将5V输入电压转换为3.3V输出电压,为电路提供稳定电源。
(3)软件设计1)系统初始化:初始化各个模块,包括显示模块、按键模块、时钟模块等。
2)主循环:根据用户操作,实现功能切换、闹钟设置、关机等功能。
3)闹钟功能:实现闹钟时间设置、闹钟音量调节、闹钟提醒等功能。
4)定时关机功能:根据用户设置,实现定时关机功能。
5)背光功能:实现背光亮度调节,满足不同环境需求。
6)定时更新功能:自动更新农历、节假日等信息。
2. 数字万年历的制作(1)焊接电路板:按照电路图,焊接各个模块,确保电路连接正确。
(2)编程:使用Keil uVision5开发环境,编写STM32F103单片机程序,实现数字万年历的功能。
数字日历的设计DA应用实例
![数字日历的设计DA应用实例](https://img.taocdn.com/s3/m/11b93122cfc789eb172dc8c7.png)
数字钟和年月日按键切换模块程序(mux_4v.v) module mux_4v(k,jm,jf,js,jr,jy,jn,j1,j2,j3); input k,j1,j2,j3; //输入按键 output reg jm,jf,js,jr,jy,jn; //输出时分秒、年月日 always begin if (k==0) {jm,jf,js}={j1,j2,j3}; //输出时分秒 else {jr,jy,jn}={j1,j2,j3}; //输出年月日 end endmodule
数字钟和年月日显示8秒切换模块程序(contr.v) module contr(clk,k1,k2,k); input clk,k1,k2; output reg k; reg [3:0] qc; reg rc; always @(posedge clk) //时钟显示和日期8秒显示切换程序 begin qc=qc+1; if (qc<8) rc=0; //每8秒切换一次 else rc=1; case ({k1,k2}) //按键切换选择 0:k=rc; //自动切换 1:k=0; //显示时分秒 2:k=1; // //显示年月日 3:k=rc; endcase end endmodule
2、数字日历的设计
1. 设计任务 设计并制作一台数字日历。 2. 设计要求 ① 用EDA实训仪的I/O设备和PLD芯片实现数字日历的设计。 ② 数字日历能够显示年、月、日、时、分和秒。 ③ 用EDA实训仪上的8只八段数码管分两屏分别显示年、月、日和时、 分、秒,即在一定时间段内显示年、月、日(如20080101),然后在另 一时间段内显示时、分、秒(如00123625),两个时间段能自动倒换。 ④ 数字日历具有复位和校准年、月、日、时、分、秒的按钮,但校年和 校时同用一个按钮,即在显示年、月、日时用此按钮校年,在显示时、 分、秒时则用此按钮校时,依此类推。
《EDA技术及可编程器件应用实训》课程设计报告-基于CPLD技术的数字万年历设计模板
![《EDA技术及可编程器件应用实训》课程设计报告-基于CPLD技术的数字万年历设计模板](https://img.taocdn.com/s3/m/08c1a9f619e8b8f67c1cb961.png)
《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;所写程序经过仿真的如上图所示。
数字万年历组装实训报告
![数字万年历组装实训报告](https://img.taocdn.com/s3/m/dd1b6f4e53d380eb6294dd88d0d233d4b14e3f9c.png)
一、实训背景随着科技的发展,电子产品在我们的日常生活中扮演着越来越重要的角色。
为了提高学生的动手能力和实际操作技能,同时也为了加深对数字电路知识的理解,我们选择了数字万年历的组装作为实训项目。
数字万年历是一种具有日历、星期、日期、农历、节假日等多种功能的电子设备,它集成了数字电路、微控制器、液晶显示屏等元件,能够直观地显示日期和时间信息。
二、实训目的1. 通过组装数字万年历,使学生掌握数字电路的基本原理和实际应用。
2. 培养学生的动手能力、团队协作能力和创新意识。
3. 加深对微控制器、液晶显示屏等电子元件的理解和认识。
4. 学会使用电子工具和仪器,提高实际操作技能。
三、实训内容1. 硬件准备:数字万年历的硬件主要包括微控制器、液晶显示屏、时钟模块、按键、电源模块等。
2. 元件识别:学习各种电子元件的外观、符号、规格等,了解它们在电路中的作用。
3. 电路设计:根据数字万年历的功能要求,设计电路图,包括电路元件的连接方式和电路参数。
4. 电路焊接:按照电路图,将各个电子元件焊接在一起,确保电路的连通性。
5. 软件编程:编写微控制器的程序,实现万年历的各项功能,如时间显示、日期设置、农历查询等。
6. 系统调试:检查万年历的各项功能是否正常,对出现的问题进行调试和修复。
四、实训过程1. 硬件准备:首先,我们准备了一套数字万年历的组装套件,包括微控制器、液晶显示屏、时钟模块、按键、电源模块等。
2. 元件识别:在指导老师的讲解下,我们学习了各种电子元件的外观、符号、规格等,了解了它们在电路中的作用。
3. 电路设计:根据数字万年历的功能要求,我们设计了电路图,包括电路元件的连接方式和电路参数。
电路图设计完成后,我们将其打印出来,作为焊接的依据。
4. 电路焊接:按照电路图,我们将各个电子元件焊接在一起。
在焊接过程中,我们注意以下几点:a. 焊接前,检查元件的规格和引脚是否正确;b. 焊接时,控制好焊接时间,避免过热损坏元件;c. 焊接完成后,检查焊接点是否牢固,是否有虚焊现象。
EDA技术及其应用__万年历实训报告
![EDA技术及其应用__万年历实训报告](https://img.taocdn.com/s3/m/29c29591daef5ef7ba0d3c31.png)
EDA实训万年历简介万年历的制作是利用EDA技术中VHDL语言编制程序,利用QuartusII软件进行仿真波形,然后在试验箱上实现功能。
万年历由电子表模块、日历模块、调制模块组成。
电子表模块是基层;日历模块是高层;调制模块由五选一模块、二选一模块组成,它可以对电子表模块和日历模块进行手动调节。
但是,各个独立的模块需要通过顶层文件来实现。
顶层文件的作用为将各独立的功能模块关联起来,协同完成该系统的最终功能,通过画系统的整体组装设计原理图的方法来实现这一功能。
万年历实训大纲1.·················实训课题2.·················实训地点3.·················实训目的4.·················实训器材5.·················实训内容6.·················实训结果7.·················实训心得实训报告正文实训课题万年历实训地点郑州信息科技职业学院EDA技术实验室实训目的(1)掌握系统设计的方法和层次化设计方法。
《EDA技术及应用》数字日历电路的设计
![《EDA技术及应用》数字日历电路的设计](https://img.taocdn.com/s3/m/570c5c37eef9aef8941ea76e58fafab069dc443d.png)
《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(校年)。
EDA万年历实训报告
![EDA万年历实训报告](https://img.taocdn.com/s3/m/a6ac34647e21af45b307a8f2.png)
《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实训](https://img.taocdn.com/s3/m/3b76c693f242336c1fb95e3b.png)
成绩批阅教师日期桂林电子科技大学实训报告2016-2017学年第1学期学院海洋信息工程学院课程 EDA综合实训姓名钟朝林学号 1416030218 指导老师覃琴日期 2016/12/29实训题目:数字日历电路的设计1 概述1.1 设计要求1.1.1 设计任务设计并制作一台数字日历。
1.1.2 性能指标要求①用EDA实训仪的I/O设备和PLD芯片实现数字日历的设计。
②数字日历能够显示年、月、日、时、分和秒。
③用EDA实训仪上的8只八段数码管分两屏分别显示年、月、日和时、分、秒,即在一定时间段内显示年、月、日(如20080101),然后在另一时间段内显示时、分、秒(如00123625),两个时间段能自动倒换。
④数字日历具有复位和校准年、月、日、时、分、秒的按钮,但校年和校时同用一个按钮,即在显示年、月、日时用此按钮校年,在显示时、分、秒时则用此按钮校时,依此类推。
1.2 总体设计基本原理及框图1.2.1 基本原理日历主要由年月日模块、时分秒模块、控制模块、显示模块、校时模块组成。
采用3个公用按钮j1、j2、和j3完成时分秒或年月日的校时,用8只七段数码管分时完成时分秒或年月日的显示。
设计电路的计时器模块(jsq24)用于完成一天的24小时计时;年月日模块接收计时器模块送来的“天”脉冲进行计数,得到日月年的显示结果,控制模块产生控制信号k,控制数码显示器显示年月日,还是时分秒,或者自动轮流显示;校时选择模块在k信号的控制下,选择将j1、j2和j3这3个校时按钮产生的信号是送到计时器模块的校秒、校分和校时输入端,还是送到年月日模块的校天、校月、校年输入端;显示选择模块在k信号的控制下,选择是将计时器模块的时、分、秒状态信号,还是将年月日模块的年、月、日状态信号送到数码管显示器显示。
1.2.2 总体框图2 系统软件设计分析2.1年月日模块module r(clrn,clk,jn,jy,jr,qn,qy,qr); //年月日模块input clrn,clk,jn,jy,jr;output reg[15:0] qn;reg [15:0] qn1;output 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='h2011;qn1=2011;qy=1;qr=1;endalways @(posedge (clk^jr) or negedge clrn)// 日计时模块beginif(~clrn)qr=1;else beginif(qr==date)begin qr=1; clky=1;endelse begin qr=qr+1;clky=0;endif(qr[3:0]=='ha)beginqr[3:0]=0;qr[7:4]=qr[7:4]+1;endendendalways @(posedge (clky^jy) or negedge clrn)//月计时模块beginif(~clrn) qy=1;else beginif(qy=='h12) begin qy=1;clkn=1;endelse begin qy=qy+1;clkn=0;endif(qy[3:0]=='ha)beginqy[3:0]=0;qy[7:4]=qy[7:4]+1;endendendalwayscase(qy)'h01:date='h31;'h02:beginif((qn1%4==0)&(qn1%100 != 0)|(qn1%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)begin qn[3:0]=1;qn1=2011;endelse begin if(qn[3:0]==9)qn[3:0]=0;else begin qn[3:0]=qn[3:0]+1;qn1=qn1+1;endif(qn[3:0]==9)clkn1=0;else clkn1=1;endendalways @(posedge clkn1 or negedge clrn)beginif(~clrn)qn[7:4]=1;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[7:4]+1;if(qn[11:8]==9) clkn3=0;else clkn3=1;endendalways @(posedge clkn3 or negedge clrn)if(~clrn)qn[15:12]=2;else if(qn[15:12]==9) qn[15:12]=0;else qn[15:12]=qn[15:12]+1;endendmodule2.2时分秒模块module cnt60(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=='h59) begin q=0;cout=1;endelse begin q=q+1;cout=0;endif (q[3:0]=='ha) beginq[3:0]=0;q[7:4]=q[7:4]+1;endendendendmodulemodule 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) begin q=0;cout=1;endelse begin q=q+1;cout=0;endif (q[3:0]=='ha) beginq[3:0]=0;q[7:4]=q[7:4]+1;endendendendmodule2.3控制模块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;endcaseendendmodule2.4显示模块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};endendmodule2.5校时模块module mux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3); input k,j1,j2,j3;output reg jm,jf,js,jr,jy,jn;alwaysbeginif (k==0) {jm,jf,js}={j1,j2,j3};else {jr,jy,jn}={j1,j2,j3};endendmodule2.6闹钟模块module naozhong(qs,qf,led,zt);input zt;input[7:0] qs,qf;output led;reg led;alwaysbeginif (qs=='h06&&qf=='h01) //6:01闹钟开始闪烁led=1;elseled=0;if(zt==1) led=0; // 在任意时刻都可以关掉闹钟endendmodule2.7分频器模块module FENP(clk,newclk);input clk;output reg newclk;reg[24:0] cnter;always @(posedge clk)beginif(cnter<20000000) cnter=cnter+1;else cnter=0;if (cnter<10000000) newclk=1;elsenewclk=0;endendmodule3 系统测试(调试)3.1 测试仪器与设备计算机,EDA实训仪。
EDA实训万年历
![EDA实训万年历](https://img.taocdn.com/s3/m/923e3f54b7360b4c2f3f6412.png)
《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课程设计电子日历](https://img.taocdn.com/s3/m/1e7ea3ed19e8b8f67c1cb9fb.png)
燕山大学EDA课程设计报告书电子日历姓名:王斌班级:05级电子信息工程3班学号:050104020064日期:2007/11/05——2007/11/14一、设计题目:电子日历二、设计要求:1.能显示年,月,日,星期;2.例如: 01.11.08. 6,星期日显示8;3.年月日,星期可调;4.不考虑闰年三.设计思路:为实现本电路得功能,采取模块电路设计方法,本电路系统主要包括以下三三大模块:.1: 电子日历记数模块2: 中间控制模块3: 译码器显示模块由于不同的月份,决定了不同的天数,因此须设计反馈电路,协调月日的关系,通过不同的月选择相应的天数:比如二月二十八天,十二月三十一天,……..这是利用真值表列出逻辑表达式,从而画出电路图如图1:仿真图如下:四、设计过程:一、电子日历记数模块1、实现星期计时:为实现星期计时模块,计到星期日时,显示“8”,采用一般的计数器难以实现,即可通过四个jk触发器设计而成。
其电路图如下:仿真图如下:2、实现天数计时:由于不同的月份,决定了不同的天数,因此须设计三个独立完成计数的计数器电路,如日计数器周期性的(28,30或31)向月计数器进位调月日的关系,即通过三个选择端(c28,c30,c31),同一时刻只能有一个有效,由其中的任一个有效端来控制相应日计数器。
其电路原理图3、实现月份及年份计时:由用两个74160采用整体同步置数分别构成100进制和12进制计数器,分别完成年,月的计数功能。
然后将两者依次异步连接,每隔12个月,月计数器向年计数器进一位,从而实现年月的周期性计数。
月份计数器电路原理图如下:年份计数器电路图如下:仿真图如下:二、中间控制模块时钟脉冲经cp输入端引入,控制端有:K,Kweek,Kday,Kmonth,Kyear1,Kyear2当接入电源时,须按K按钮进行调整到某一时间即正常计时。
按下K时,同时按其它的任一控制端,即可完成对相应的控制及调整。
EDA万年历实训报告
![EDA万年历实训报告](https://img.taocdn.com/s3/m/ec25c9f1ba0d4a7302763ad5.png)
《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技术与应用》实训报告](https://img.taocdn.com/s3/m/ac0686b6fd0a79563c1e72d7.png)
桂林电子科技大学信息科技学院《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实验报告万年历](https://img.taocdn.com/s3/m/4e8396afdd3383c4bb4cd2e6.png)
《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。
数字万年历实训报告总结
![数字万年历实训报告总结](https://img.taocdn.com/s3/m/bc428116e55c3b3567ec102de2bd960590c6d9d8.png)
一、实训背景随着科技的飞速发展,电子产品的普及,人们对信息获取和展示的需求日益增长。
数字万年历作为一种实用性强的电子设备,其设计制作在当今社会具有重要意义。
为了提高自身动手能力、设计能力和创新思维,我参加了本次数字万年历实训课程。
二、实训目的1. 熟悉数字万年历的设计原理和制作流程;2. 掌握电子元器件的选择和电路设计;3. 提高编程能力和嵌入式系统应用能力;4. 培养团队合作精神和创新能力。
三、实训内容1. 硬件设计:根据数字万年历的功能需求,选择合适的电子元器件,如单片机、显示屏、按键等,并设计相应的电路图。
2. 软件设计:编写单片机程序,实现万年历的功能,包括日期显示、星期显示、闰年判断、节假日提醒等。
3. 系统集成:将硬件和软件进行集成,调试并测试系统功能。
4. 优化与改进:针对实际运行中存在的问题,对系统进行优化和改进。
四、实训过程1. 硬件设计阶段:在老师的指导下,我了解了数字万年历的基本硬件结构,并学会了如何选择合适的电子元器件。
根据功能需求,我选择了AT89C52单片机作为核心控制单元,并选择了1602液晶显示屏和按键作为输入输出设备。
通过查阅相关资料,我完成了电路图的设计。
2. 软件设计阶段:我学习了C语言编程,并掌握了单片机程序设计的基本方法。
在编写程序时,我实现了以下功能:(1)初始化:设置单片机的工作状态,初始化LCD显示和按键扫描。
(2)日期显示:读取实时日期,并在LCD上显示年、月、日。
(3)星期显示:根据日期计算出星期,并在LCD上显示。
(4)闰年判断:根据年份判断是否为闰年。
(5)节假日提醒:根据预设的节假日信息,在LCD上显示提醒信息。
3. 系统集成阶段:将硬件和软件进行集成,调试并测试系统功能。
在调试过程中,我发现了以下问题:(1)按键响应不及时:经过检查,发现按键扫描程序存在bug,导致按键响应不及时。
经过修改程序,问题得到解决。
(2)LCD显示不清晰:发现LCD显示模块的背光亮度不足,导致显示不清晰。
eda日历电路路课程设计
![eda日历电路路课程设计](https://img.taocdn.com/s3/m/460a0ac350e79b89680203d8ce2f0066f5336487.png)
eda日历电路路课程设计一、课程目标知识目标:1. 学生能理解EDA(电子设计自动化)的基本概念,掌握日历电路的设计原理;2. 学生能够运用所学知识,设计并实现一个功能齐全的日历电路;3. 学生了解日历电路在实际应用中的重要性,如时间计算、日期显示等。
技能目标:1. 学生能够运用EDA软件进行电路设计,提高实际操作能力;2. 学生通过小组合作,培养团队协作能力和沟通能力;3. 学生能够分析并解决日历电路设计过程中遇到的问题,提升问题解决能力。
情感态度价值观目标:1. 学生对电子设计产生兴趣,培养探索精神和创新意识;2. 学生在学习过程中,树立正确的价值观,认识到科技发展对社会进步的重要性;3. 学生通过自主学习和合作交流,培养自信心和责任感。
本课程旨在让学生将所学理论知识与实际操作相结合,提高学生的实践能力。
针对学生的年龄特点和认知水平,课程设计注重启发式教学,引导学生主动探索、积极思考。
同时,注重培养学生的团队合作精神,提升学生的综合素质。
通过本课程的学习,为学生今后的电子设计及相关领域的学习打下坚实基础。
二、教学内容本课程依据课程目标,结合教材内容,制定以下教学大纲:1. EDA基本概念与原理- EDA软件介绍与安装- EDA设计流程及方法2. 日历电路设计原理- 日历电路的功能与组成- 常见日历电路的设计方法3. EDA软件操作与实践- EDA软件界面及功能介绍- 日历电路的绘制与仿真4. 日历电路设计与实现- 设计要求及注意事项- 小组合作进行电路设计- 电路调试与优化5. 成果展示与评价- 各小组展示设计成果- 学生互评与教师评价- 总结与反思教学内容按照以上大纲进行安排和进度控制,共计10个课时。
教材章节关联如下:1. EDA基本概念与原理:教材第1章2. 日历电路设计原理:教材第2章3. EDA软件操作与实践:教材第3章4. 日历电路设计与实现:教材第4章5. 成果展示与评价:教材第5章三、教学方法本课程根据教学内容和课程目标,选择以下多样化的教学方法,以激发学生的学习兴趣和主动性:1. 讲授法:教师通过讲解EDA基本概念、原理及日历电路设计方法,为学生奠定理论基础。
电子日历实训报告
![电子日历实训报告](https://img.taocdn.com/s3/m/d1943c13777f5acfa1c7aa00b52acfc789eb9fb1.png)
一、实训时间:2023年10月15日至2023年10月22日二、实训地点:XX职业学院电子实验室三、指导老师:张老师、刘老师四、实训目的:通过本次电子日历实训,旨在提升我的电子设计能力,加深对电子电路原理的理解,并锻炼实际操作技能。
通过设计并制作一个功能完整的电子日历,我期望能够掌握以下技能和知识:1. 掌握电子日历的基本设计原理。
2. 熟悉电子时钟电路的设计与搭建。
3. 学会使用LCD显示屏显示日期和时间。
4. 提高编程能力,使用单片机实现日历功能的控制。
5. 增强故障排除和调试能力。
五、实训内容:1. 电路设计:- 设计了基于单片机的电子日历电路,主要包括单片机核心模块、时钟模块、显示模块和电源模块。
- 选择合适的电子元件,如单片机、晶体振荡器、LCD显示屏、按键等。
- 设计电路图,确保电路连接正确,元件布局合理。
2. 程序编写:- 使用C语言编写单片机程序,实现日历的基本功能,包括时间的读取、显示、调整以及日期的更新。
- 编写按键扫描程序,以便用户可以调整时间。
- 编写LCD显示程序,将日期和时间信息清晰显示在LCD屏幕上。
3. 电路搭建:- 按照电路图进行元件焊接,确保焊接质量。
- 连接LCD显示屏,调试显示效果。
- 连接按键,测试按键响应功能。
4. 测试与调试:- 对电子日历进行功能测试,确保所有功能正常运行。
- 调试程序,解决显示错误、按键响应不及时等问题。
- 优化电路设计,提高电子日历的稳定性和可靠性。
六、实训过程及心得:在实训过程中,我遇到了不少挑战,以下是我的一些心得体会:- 理论学习与实践操作的结合:在设计电路和编写程序的过程中,我深刻体会到理论知识与实践操作的结合的重要性。
只有将所学知识应用到实际操作中,才能真正掌握电子设计技能。
- 耐心与细致:在电路搭建和调试过程中,我学会了耐心和细致。
每一个细节的疏忽都可能导致整个电路无法正常工作。
- 团队合作:在实训过程中,我与同学们相互学习、相互帮助,共同完成了电子日历的设计与制作。
燕山大学EDA课程设计电子日历
![燕山大学EDA课程设计电子日历](https://img.taocdn.com/s3/m/7fa4563af111f18583d05a2f.png)
燕山大学EDA课程设计报告书姓名:班级:学号:日期:一、设计题目:电子日历二、设计要求1.能显示年、月、日、星期,如01.11.08 6,星期日显示82.年、月、日、星期可调3.不考虑闰年三、设计思路为实现本电路要求,采取模块电路设计方法。
本电路系统主要包括以下三大模块:1.计数模块2.控制模块3.译码器显示模块四、设计过程1. 计数模块1)星期计数模块由于星期日要显示8,一般芯片难以实现,可通过四个JKFF 触发器设计而成。
电路图如下:波形仿真图如下:2)天计数模块通过两个74160芯片作计数电路和DFF作去毛刺电路设计而成,若没有去毛刺电路,在硬件仿真时,月计数会出现连续计两次的情况。
由于不同月份有不同天数(31、30、28),故需要三个输入端(C31、C30、C28)选择计数的进制,同一时刻只能有一个有效(输入高电平)。
电路图如下:C30端有效时的波形仿真图如下:3)月计数模块通过两个74160芯片设计而成,电路图如下:波形仿真图如下:4)月计数对天计数的反馈模块通过画真值表列出逻辑表达式,从而设计出如下电路:波形仿真图如下:5)年计数模块通过两个74160芯片设计而成,为了实现可调,将年个位对十位的进位输出端C先到控制模块上。
电路图如下:波形仿真图如下:2. 控制模块时钟脉冲经CP端输入,K、Kweek、Kday、Kmonth、Kyear1、Kyear2为手动控制端。
K端输入高电平时为调节状态,输入低电平时为自动计数状态。
电路图如下:3. 译码器显示模块该模块由一个74160芯片、四个数据选择74151和译码驱动器7449组成。
电路图如下:连接控制模块和计数模块。
电路图如下:该部分波形仿真图如下:在其中可以发现,月比天滞后1.5个时钟周期(其中1个时钟周期是由于天计数模块的去毛刺电路产生的),年个位比月滞后0.5个时钟周期,年十位比年个位滞后0.5个时钟周期。
由于时间有限,知识经验不足等限制,在答辩前仍未解决该问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成绩批阅教师日期桂林电子科技大学实训报告2016-2017学年第1学期学院海洋信息工程学院课程EDA综合实训姓名钟朝林学号 1416030218指导老师覃琴日期2016/12/29实训题目:数字日历电路的设计1 概述1.1 设计要求1.1.1 设计任务设计并制作一台数字日历。
1.1.2 性能指标要求①用EDA实训仪的I/O设备和PLD芯片实现数字日历的设计。
②数字日历能够显示年、月、日、时、分和秒。
③用EDA实训仪上的8只八段数码管分两屏分别显示年、月、日和时、分、秒,即在一定时间段内显示年、月、日(如20080101),然后在另一时间段内显示时、分、秒(如00123625),两个时间段能自动倒换。
④数字日历具有复位和校准年、月、日、时、分、秒的按钮,但校年和校时同用一个按钮,即在显示年、月、日时用此按钮校年,在显示时、分、秒时则用此按钮校时,依此类推。
1.2 总体设计基本原理及框图1.2.1 基本原理日历主要由年月日模块、时分秒模块、控制模块、显示模块、校时模块组成。
采用3个公用按钮j1、j2、和j3完成时分秒或年月日的校时,用8只七段数码管分时完成时分秒或年月日的显示。
设计电路的计时器模块(jsq24)用于完成一天的24小时计时;年月日模块接收计时器模块送来的“天”脉冲进行计数,得到日月年的显示结果,控制模块产生控制信号k,控制数码显示器显示年月日,还是时分秒,或者自动轮流显示;校时选择模块在k信号的控制下,选择将j1、j2和j3这3个校时按钮产生的信号是送到计时器模块的校秒、校分和校时输入端,还是送到年月日模块的校天、校月、校年输入端;显示选择模块在k信号的控制下,选择是将计时器模块的时、分、秒状态信号,还是将年月日模块的年、月、日状态信号送到数码管显示器显示。
1.2.2 总体框图2 系统软件设计分析2.1年月日模块module r(clrn,clk,jn,jy,jr,qn,qy,qr); //年月日模块input clrn,clk,jn,jy,jr;output reg[15:0] qn;reg [15:0] qn1;output 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='h2011;qn1=2011;qy=1;qr=1;endalways @(posedge (clk^jr) or negedge clrn)// 日计时模块beginif(~clrn)qr=1;else beginif(qr==date)begin qr=1; clky=1;endelse begin qr=qr+1;clky=0;endif(qr[3:0]=='ha)beginqr[3:0]=0;qr[7:4]=qr[7:4]+1;endendendalways @(posedge (clky^jy) or negedge clrn)//月计时模块 beginif(~clrn) qy=1;else beginif(qy=='h12) begin qy=1;clkn=1;endelse begin qy=qy+1;clkn=0;endif(qy[3:0]=='ha)beginqy[3:0]=0;qy[7:4]=qy[7:4]+1;endendendalwaysbegincase(qy)'h01:date='h31;'h02:beginif((qn1%4==0)&(qn1%100 != 0)|(qn1%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)begin qn[3:0]=1;qn1=2011;endelse begin if(qn[3:0]==9)qn[3:0]=0;else begin qn[3:0]=qn[3:0]+1;qn1=qn1+1;endif(qn[3:0]==9)clkn1=0;else clkn1=1;endendalways @(posedge clkn1 or negedge clrn)beginif(~clrn)qn[7:4]=1;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[7:4]+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;endendmodule2.2时分秒模块module cnt60(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=='h59) begin q=0;cout=1;endelse begin q=q+1;cout=0;endif (q[3:0]=='ha) beginq[3:0]=0;q[7:4]=q[7:4]+1;endendendendmodulemodule 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) begin q=0;cout=1;endelse begin q=q+1;cout=0;endif (q[3:0]=='ha) beginq[3:0]=0;q[7:4]=q[7:4]+1;endendendendmodule2.3控制模块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;endcaseendendmodule2.4显示模块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};endendmodule2.5校时模块module mux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3); input k,j1,j2,j3;output reg jm,jf,js,jr,jy,jn;alwaysbeginif (k==0) {jm,jf,js}={j1,j2,j3};else {jr,jy,jn}={j1,j2,j3};endendmodule2.6闹钟模块module naozhong(qs,qf,led,zt);input zt;input[7:0] qs,qf;output led;reg led;alwaysbeginif (qs=='h06&&qf=='h01) //6:01闹钟开始闪烁led=1;elseled=0;if(zt==1) led=0; // 在任意时刻都可以关掉闹钟endendmodule2.7分频器模块module FENP(clk,newclk);input clk;output reg newclk;reg[24:0] cnter;always @(posedge clk)beginif(cnter<20000000) cnter=cnter+1;else cnter=0;if (cnter<10000000) newclk=1;elsenewclk=0;endendmodule3 系统测试(调试)3.1 测试仪器与设备计算机,EDA实训仪。
3.2 性能指标测试k1、k2控制分屏显示,当k1k2为00或11时是自动显示,控制数码显示用8秒时间显示年、月、日,另外8秒时间显示时、分、秒;当k1k2为01时,仅显示时、分、秒,同时j1、j2和j3校秒、校分和校时,当k1k2为10时,仅显示年、月、日,同时j1、j2和j3校年、月、日。
clkn清零功能。
3.3 结果分析各个功能的实现分开设计。
对于时分秒,则采用24进制和60进制,对于年月日的设计复杂点。