多功能数字钟设计实验报告0704240213樊晓清1多功能数字钟设计院系:电光学院班级:***学号:***姓名:***指导老师:***时间:2010.4.20.多功能数字钟设计实验报告0704240213樊晓清2摘要:利用QuartusII软件设计一个数字钟,利用模块化的程序设计思想,核心模块均采用Verilog语言编写(译码显示模块采用原理图设计),软件仿真调试编译成功后,再下载到SmartSOPC实验系统中。经过硬件测试,查找软件设计缺陷,并进一步完善软件,最终设计得到较为满意的多功能数字钟。关键词:QuartusII;多功能数字钟;模块化;Verilog;可编程;Abstract:UsingtheQuartusIIsoftwaredesignadigitalbellwiththeblockingmethod.ThedesigntakestheorydrawinginsteadofVeriloglanguage.Afteremluatinganddebugingsuccessfully,translateandeditthecode.Then,downloadtheresulttotheprogrammableSmartSOPCsystemandtestitinhardware.Realizingthesoulofdesigninghardwarebysoftware.Keywords:QuartusII;digitalbell;blockingmethod;VHDL;programmable;hardware目录设计内容简介………………………………………………………………………3设计要求说明………………………………………………………………………3方案论证(整体电路设计原理)………………………………………3各子模块设计理……………………………………………………………………5分频模块:………………………………………………………………………………5计数模块:………………………………………………………………………………7--校准模块程序实现:………………………………………………………………8--秒计数模块程序实现:……………………………………………………………9--分计数模块程序实现:……………………………………………………………10--时计数模块程序实现:……………………………………………………………10整点报时模块:…………………………………………………………………………12闹钟设定模块:…………………………………………………………………………13--闹钟调节模块程序实现:…………………………………………………………14--输出信号选择模块程序实现:……………………………………………………14彩铃模块:………………………………………………………………………………15译码显示模块:…………………………………………………………………………18万年历模块:……………………………………………………………………………19--日计数模块程序设计:……………………………………………………………20--月计数模块程序设计:……………………………………………………………23--年计数模块程序设计:……………………………………………………………23--万年历波形仿真结果:……………………………………………………………25结论:…………………………………………………………………………26实验感想:………………………………………………………………………26多功能数字钟设计实验报告0704240213樊晓清3附图:…………………………………………………………………………………27设计内容简介设计一个数字计时器,可以完成00:00:00到23:59:59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、快速较秒等功能。在设计的电路具有上述基本功能的前提下,我又进行了功能扩展:整点报时、闹钟设置、彩铃和万年历功能。(由于时间限制,万年历功能未经硬件测试,仅通过软件层面简单调试仿真)设计要求说明设计基本要求:1、能进行正常的时、分、秒计时功能;2、分别由六个数码管显示时分秒的计时;3、K1是系统的使能开关(K1=0正常工作,K1=1时钟保持不变);4、K2是系统的清零开关(K2=0正常工作,K2=1时钟的分、秒全清零);5、K3是系统的校分开关(K3=0正常工作,K3=1时可以快速校分);6、K4是系统的校时开关(K4=0正常工作,K4=1时可以快速校时);设计提高部分要求1、使时钟具有整点报时功能(当时钟计到59’53”时开始报时,在59’53”,59’55”,59’57”时报时频率为512Hz,59’59”时报时频率为1KHz);2、闹表设定功能;方案论证(整体电路的工作原理)本实验在实现实验基本功能的基础上,加入了整点报时、闹钟设置、彩铃和万年历显示调节功能。整个电路由计数模块、分频模块、校时、校分较秒模块,清零模块、保持模块,整点报时模块,闹钟设定模块、彩铃模块,以及万年历模块构成。(如下图所示)基本功能:数字计时器基本功能是计时,因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为48MHZ,通过分频获得所需脉冲频率(1Hz,,2Hz,4Hz,1KHz,500Hz,6MHz)。经过Verilog编程可以轻松获得较为精确的分频信号。在计数模块中,秒位和分位分别通过编程用模60计数器实现,时位通过编程用模24计数器实现。校时、校分及校秒模块则通过语言选择实现。清零及保持功能在多功能数字钟设计实验报告0704240213樊晓清4计数模块中用判断语句可轻松实现。计数模块总共输出6路信号:秒位的个、十位,分位的个、十位及时位的个、十位。整点报时:利用计数模块的输出作为报时模块的输入,当检测到59’53”,59’55”,59实验模块原理图57”时令报时模块的输出为500Hz,59’59”时令报时模块的输出为1Kz.,驱动蜂鸣器产生不同的响声。闹钟设定模块:这里设计一个闹钟模块,输入为计数模块的输出及一系列调节信号,输出接到译码模块上。在闹钟模块内部,核心模块是一个选择模块,选择输出的信号是闹钟显示还是正常的计数显示。为了使闹钟模块与计数模块是相互独立的,因此单独设计模24(闹钟小时)和模60(闹钟分钟)作为选择模块的输入。设计程序语言的思想是,当检测到与设定闹钟相同的时、分位时就输出一个信号1,并保存当前计数位(加1)当检测到当前信号与保存位相同时输出信号恢复为0。(这个信号将作为闹铃结束的判断信号)彩铃模块:本程序选用了一段悠扬的梁祝音乐,该模块的输入分别为6MHz和4Hz,通过编程实现输出为符合音律的不同频率。程序实现的思想并不复杂,只要有乐谱可以实现各种不同的音乐输出。蜂鸣器何时鸣叫取决于闹钟模块的输出。译码显示模块:本模块没有采用Verilog语言实现,通过搭建原理图实现。显示功能是通过数选器、译码器、码转换器和7段显示管实现的。因为实验中只用一个译码显示单元,多功能数字钟设计实验报告0704240213樊晓清56个7段码(用于显示时分秒),所以通过1个24选4MUX和一个3-8译码器配合,显示译码器采用7447,根据计数器的信号进行数码管的动态显示。万年历模块:通过编程可以轻松实现,原理与上述计数模块,调节模块很是类似。由于未经硬件测试(时间限制),将在下面的子模块介绍中给出软件层面的实现和编译调试结果。各子模块设计原理本数字钟设计主要用Verilog语言实现,严格采用了模块化的程序设计思想,自顶向下逐步求精,模块之间高度独立。(仅译码显示模块采用原理图搭建)下面将分别介绍各主要子模块及其子模块以及算法语言的实现和部分波形仿真编译调试结果。分频模块:(clkout输出为1Hz,clkout1K输出为1Kz,clkout500输出为500Hz,clkout2输出为2Hz,clkout6M输出为6MHz,clkout4输出为4Hz.)moduleclkdiv(clk,clkout,clkout1k,clkout500,clkout2,clkout6M,clkout4);inputclk;outputclkout,clkout1k,clkout500,clkout2,clkout6M,clkout4;regclkout,clkout1k,clkout500,clkout2,clkout6M,clkout4;reg[31:0]cnt,cnm,cnn,cmm,caa,cbb;always@(posedgeclk)//产生1Hz信号beginif(cnt==32'd24000000)beginclkout=1'd1;cnt=cnt+32'd1;多功能数字钟设计实验报告0704240213樊晓清6endelseif(cnt==32'd48000000)beginclkout=1'b0;cnt=32'd0;endelsecnt=cnt+32'd1;endalways@(posedgeclk)//产生1KHz信号beginif(cnm==32'd24000)beginclkout1k=1'd1;cnm=cnm+32'd1;endelseif(cnm==32'd48000)beginclkout1k=1'b0;cnm=32'd0;endelsecnm=cnm+32'd1;endalways@(posedgeclk)//产生500Hz信号beginif(cnn==32'd48000)beginclkout500=1'd1;cnn=cnn+32'd1;endelseif(cnn==32'd96000)beginclkout500=1'b0;cnn=32'd0;endelsecnn=cnn+32'd1;endalways@(posedgeclk)//产生2Hz信号beginif(cmm==32'd12000000)begin多功能数字钟设计实验报告0704240213樊晓清7clkout2=1'd1;cmm=cmm+32'd1;endelseif(cmm==32'd24000000)beginclkout2=1'b0;cmm=32'd0;endelsecmm=cmm+32'd1;endalways@(posedgeclk)//产生6MHz信号beginif(caa==32'd4)beginclkout6M=1'd1;caa=caa+32'd1;endelseif(caa==32'd8)beginclkout6M=1'b0;caa=32'd0;endelsecaa=caa+32'd1;endalways@(posedgeclk)//产生4Hz信号beginif(cbb==32'd6000000)beginclkout4=1'd1;cbb=cbb+32'd1;endelseif(cbb==32'd12000000)beginclkout4=1'b0;cbb=32'd0;endelsecbb=cbb+32'd1;endEndmodule多功能数字钟设计实验报告0704240213樊晓清8除了6MHz可以通过波形图直接观察,其他分频在程序设计原理上都可以确定是正确的,通过硬件可以作一定的观察(或者对仿真时间设定作相应调整)。计数模块:计数模块中包含三个校准模块和三个计数模块(分别对应着秒分时)。(secondclka为秒脉冲输入信号1Hz,secondclkb为输入校准信号用频率2Hz,K5jiaomiao、K3jiaofen、K4jiaoshi分别为校秒、校分、校时输入信号,clkdff为D触发器输入信号(去开关抖动用),reset1K2为清零信号,start0K1为保持信号。输出分别对应秒分时的个位和十位)多功能数字钟设计实验报告0704240213樊晓清9--校准模块程序实现:modulexiaozhun(clka,clkb,cp,c