基于VHDL的可调电子钟设计详解:模块、按键与报时功能

版权申诉
5星 · 超过95%的资源 1 下载量 195 浏览量 更新于2024-06-27 3 收藏 82KB DOC 举报
该文档是一份基于VHDL(Very High Speed Integrated Circuit Hardware Description Language)的电子钟设计课程作业。设计目标是在物理工程学院的专业班级中,通过模块化方法实现一个功能全面的电子钟,包括显示年月日、星期、时分秒、闹钟以及整点报时,并且所有这些功能均可调整。设计采用VHDL语言,涉及的主要模块有: 1. **时分秒模块**:由三个独立的部分组成,每个部分处理时、分、秒的计数,利用不同的时钟信号(秒脉冲1Hz,秒进位为分钟时钟,分钟进位为小时时钟,小时进位用于控制日和星期模块)。 2. **年月日模块**:包含闰年和非闰年、大月和小月的处理逻辑,日进位作为月的时钟信号,月进位作为年的时钟信号,这三个字段共享时钟信号,形成复杂的时间计算机制。 3. **闹钟模块**:与整点报时功能结合,作为单独的模块设计,处理定时事件。 4. **显示设计**:针对实验箱中8个LED数码管,设计了三种显示模式:星期、时分秒、年月日以及闹钟时间。 5. **按键设计**:包括五个按键,如J8、J7、J5、J3和J1,分别对应不同的功能,如切换显示模式、显示闹钟、复位系统、选择可调区域和累加功能。 6. **报时设计**:整点报时通过蜂鸣器实现,报时规则是整点响几下,闹钟响一分钟。 7. **时钟设计**:使用两个不同频率的时钟,秒部分用1Hz,其他模块用2Hz,确保精确计时。 8. **模式设计**:实验箱选择了模式5,并提供了一些注意事项,如程序下载后的初始化问题和reset信号处理。 9. **实验程序**:文档展示了秒计数器和分计数器的VHDL实体(entity)和架构(architecture),这部分代码是设计的核心部分,展示了如何用VHDL实现基本的计数逻辑和输入/输出处理。 这份文档不仅提供了电子钟的设计思路和技术实现,还展示了如何运用VHDL语言进行硬件描述,对于学习和理解数字逻辑设计以及VHDL编程具有很高的参考价值。
2023-02-27 上传
西南科技大学现代电子系统设计( ) 实验报告 实验名称: FPGA时钟设计 姓 名: 学 号: 班 级: 指导教师: FPGA时钟设计 一、设计目的 1、掌握各类计数器及将它们相连的方法; 2、掌握FPGA技术层次化设计 3、进一步了解VHDL硬件描述语言的设计思想 4、了解有关数字系统的设计 二、设计原理: 数字钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒 、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,计数器清零, 重新开始计时。秒计数器的计数时钟CLK为1Hz的标准信号,可以由27MHz信号通过分频 得到。当数字钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信 号,分钟计数器的进位输出信号又作为小时计数器的计数信号。时、分、秒的计时结 果通过6个数码管来动态显示。 数字钟除了能够正常计时外,还应能够对时间进行调整。因此,通过模式选择信 号MOD1、MOD2控制数字钟的工作状态,即控制数字钟,使其分别工作于正常计时,调 整分、时和设定分、时5个状态。当数字钟处于计时状态时,3个计数器允许计数,且 秒、分、时计数器的计数时钟信号分别为CLK,秒的进位, 分的进位;当数字钟处于调整时间状态时,被调的分或时会一秒一秒地增加;当数字 钟处于定时状态时,可以设定小时和分;当计时到所设定的时刻时,驱动扬声器,持 续1分钟。 三、电子钟相关功能描述如下: (1) 计时功能:这是本计时器设计的基本功能,可进行时、分、秒计时,并显示。 (2) 闹钟功能:当前时间与设置的闹钟时间相同,扬声器发出一段音乐,并维持一分钟。 (3) 调闹钟功能:当需要校时或者要重新设置闹钟的时间时,可通过实验箱上的按键控制。 总体方框图: clk key 四、实现设计的几个重要模块如下: (1) 分频模块:将27MHz时钟频率分频成1Hz的时钟频率,以便进行时钟计数。 (2) 计数模块:进行时钟累加计数,必要时可置入新的时钟值,然后从该值开始新的计数。 (3) 控制器模块:按设计要求产生相应的控制信号,以控制其他各部分的工作。 (4)闹铃模块:设置闹钟时间,实现闹钟的功能。 (5)显示模块:将二进制表示的信号转化为十进制显示出来。 五、设计结果 1、秒计时模块仿真结果—— 2、分计时模块仿真结果—— 3、时计时模块仿真结果—— 4、60进制转换10进制模块仿真—— 5、24进制转换为10进制模块仿真结果—— 6、时校对模块仿真结果—— 7、分秒校对模块仿真结果—— 8、闹钟模块仿真结果—— 9、整体连线图—— 六、实验心得 通过本次大作业,进一步了解VHDL硬件描述语言的设计思想,再设计过程中不仅掌握 了各类计数器及将它们相连的方法,也掌握了FPGA技术层次化设计,提高了自己解决问 题的能力,巩固了自己的FPGA知识,加深了对知识的运用等。 附件:实验程序 module sec60(clk,rst,en,cq1,coutm); //秒计时模块 input clk; input rst; input en; output[5:0] cq1; output coutm; reg[5:0] cq1; reg coutm; always@(posedge clk or posedge rst) begin if(rst) cq1<=6'b000000; else if(en) begin if(cq1<6'b111011) begin cq1<=cq1+1'b1;coutm<=1'b0; end else begin cq1<=6'b000000; coutm<=1'b1; end end end endmodule //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// module min60(rst,ctr1,coutm1,cq2,couth,m_in); //分计时模块 input rst; input ctr1; input coutm1; input[5:0] m_in; output[5:0] cq2; output couth; reg[5:0] cq2; reg couth; always@(posedge coutm1 or posedge rst) begin if(rst) cq2<=6'b000000; else begin case (ctr1) 1'b0: if(cq2<6'b111011) begin cq2<=cq2+1'b1;couth<