您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 22VHDL课程设计_001
VHDL课程设计题目多功能万年历的数字钟设计专业名称学生姓名指导教师完成时间一:课程设计的任务设计一个多功能的数字时钟,具有以下功能:1.正常的显示功能:显示AM、PM、时、分、秒(24进制或者12进制)。2.手动校时功能:按动方式键,将电路置于校时状态,则计时电路可用手动方式校准,每按一下校时键,时计数器加1;按动方式键,将电路置于校分状态,以同样方式手动校分。按动按键有滴滴声,并且数码管显示的数字会闪动。3.万年历功能:显示年、月、日、星期、是否闰年。4.手动校正日历功能。按动方式键,将电路置于校年状态,则计时电路可用手动方式校准,每按一下校年键,时计数器加1;按动方式键,将电路置于校月状态,以同样方式手动校月。按动按键有滴滴声,并且数码管显示的数字会闪动。5.闹钟功能:按动方式键进入闹钟设定模块,设定闹钟时间。闹铃信号到达播放音乐《两只蝴蝶》,按动停止键则立即停止播放音乐,若不按动停止键则自动播放音乐1分钟后停止。6.整点播报功能,从59分50秒开始发出播报,每隔2秒发出一声(信号名叫持续时间1秒,间隙1秒)连续发出5次,到达整点时停止播报。7.秒表功能:按动开始键开始计时,按动停止键数字保持不变,按动复位键从新计时二:系统设计根据以上对于多功能数字钟的功能的描述,可以将整个的电路设计分为以下几个模块:1.分频模块:由于实验电路板上所能提供的只有1Khz和6Mhz的信号,而本设计过程的即时以及跑表模块需要1hz、100hz和4hz的时钟信号。2.控制模块:为达到多动能数字钟在计时、校时、显示日历、跑表等不同的模块之间切换,需要控制模块产生时序要不相冲突的控制信号,保证各个模块的功能有序的执行。3.计时模块:在输入的1hz时钟信号,产生显示的AM、PM、时、分、秒信号,由于要涉及到后面的校时模块,这里采用带有置数的计时模块,在load信号控制下将校时模块设定的时间转载至初始值,在初始值的基础上正常计时。4.校时模块:当功能切换至校时模块时,本程序采用在外部按键的上升沿即:每按动一次校时键对应显示相应加1。5.万年历模块:在计时模块的进位输出信号(每次跳动代表一年),产生显示的年、月、日、星期、是否闰年信号,同样类似于计时模块考虑到后面的校正日历模块,这里同样采用带有置数的计时模块,在load信号控制下将校正日历模块设定的日历转载至初始值,在初始值的基础上正常计时。6.校正日历模块:切换至该模块时,采用外部按键的上升沿:每按动一次校正键对应的显示相应的加1。7.闹钟模块:这里采用和校时模块同样的电路设定闹钟的时间,一旦触发信号为高电平,触发音乐播放模块,播放歌曲《两只蝴蝶》,不按停止键播放一分钟自动停止。8.跑表模块:采用显示毫秒、秒、分的显示格式,并设有stop按钮和reset按钮。9.显示模块:采用从控制模块中出来的mode信号为变量,跟随该信号的变化,选着不同的模块的输出信号,通过两个译码器输出数据连接到数码管显示。以上简单的介绍了构成电路的几大模块,下面给出本设计电路的总的模块化示意图:图一系统总模块化示意图三:模块实现根据以上的介绍可知闹钟的设计的组成模块:分频模块、控制模块、计时模块、校时模块、万年历模块、校正日历模块、闹钟模块(包块音乐模块)、跑表模块、显示模块。以下将就着上面的模块电路的各个模块加以详细的说明。对以上模块的实现进行具体的VHDL的设计。注:(在前面定义的子模块,后面不再定义而是直接的例化使用)一:分频模块由于开发板系统提供的时钟只有1Khz和6Mhz(专用于音乐模块),而本实验的计时模块、音乐模块、跑表模块等需要1hz、100hz的时钟信号,故需要加以分频实现所需信号。分频电路的模块化示意图如下:图二分频电路模块图下面给出分频模块的RTL级的描述:1)10分频模块:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityfenpin10isport(clk_in:instd_logic;--输入时钟信号clk_out:bufferstd_logic);--输出时钟信号endfenpin10;architecturertloffenpin10issignalcnt:std_logic_vector(3downto0);--定义计数器模值beginprocess(clk_in)beginif(clk_in'eventandclk_in='1')thenif(cnt=0100)thenclk_out=notclk_out;cnt=0000;elsecnt=cnt+'1';endif;endif;endprocess;endrtl;2)分频模块的RTL描述:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityfenpinisport(clk_1khz:instd_logic;--输入1Khz时钟信号clk_1hz,clk_100hz:bufferstd_logic);--输出的1hz和100hz信号endfenpin;architecturertloffenpinissignalclk_10hz:std_logic;componentfenpin10is--例化10分频电路,在本设计中调用port(clk_in:instd_logic;clk_out:bufferstd_logic);endcomponent;beginu0:fenpin10portmap(clk_in=clk_1khz,--时钟输入clk_out=clk_100hz);--时钟输出u1:fenpin10portmap(clk_in=clk_100hz,--时钟输入clk_out=clk_10hz);--时钟输出u2:fenpin10portmap(clk_in=clk_10hz,--时钟输入clk_out=clk_1hz);--时钟输出endrtl;3)分频模块的仿真图图三分频模块仿真图仿真图分析:输入信号为1Khz经过分频成功产生100hz和1hz时钟信号二:计时模块本计时完成时间输出功能,根据秒、分、时(24进制)计时原理故需要设计到60、24进制的BCD计数器,并在此基础上构成RTL级的计时描述,模块图如下所示:图四计时电路模块图下面给出计时模块的RTL级的描述:由于考虑到后面的跑表和校时模块的预置数,这里的模60、24BCD计数器均设计成带有预置数端口,和暂停计数功能。同时考虑到现实AM、PM,以及整点报时以及对于报时声音时宽的要求,加入实现上述功能的子模块。1)模60BCD计数器循环的进行0-59计数,产生秒、分信号输出libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycnt60isport(clk_in,reset,load,stop,en:instd_logic;--输入的时钟、清0、置数、暂停、使能信号l_in,h_in:instd_logic_vector(3downto0);--预置数,高4位和低4位enout:outstd_logic;--输出地进位信号h,l:outstd_logic_vector(3downto0));---输出信号的高4位和低4位endcnt60;architecturertlofcnt60issignalh_temp,l_temp:std_logic_vector(3downto0)beginprocess(clk_in,en)----个位计数进程(0-9)循环计数beginif(reset='1')then---清0l_temp=0000;elsif(load='1')then---下载预置数l_temp=l_in;elsif(clk_in'eventandclk_in='0')then---正常计数if((en='1')and(stop='0'))thenif(l_temp=1001)thenl_temp=0000;elsel_temp=l_temp+'1';endif;endif;endif;endprocesslow_proc;l=l_temp;process(clk_in,en)----十位计数进程(0~5)循环计数beginif(reset='1')then---清0h_temp=0000;elsif(load='1')then---下载预置数h_temp=h_in;elsif(clk_in'eventandclk_in='0')then---正常计数if((en='1')and(stop='0'))thenif(l_temp=1001)thenif(h_temp=0101)thenh_temp=0000;elseh_temp=h_temp+'1';endif;endif;endif;endif;endprocesshigh_proc;h=h_temp;enout='1'whenl_temp=1001andh_temp=0101else---计满60产生进位输出'0';endrtl;2)模24BCD计数器循环进行0-23计数产生时输出信号libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycnt24isport(clk_in,reset,load,stop,en:instd_logic;---输入的时钟、清0、置数、暂停、使能信号h_in,l_in:instd_logic_vector(3downto0);---输入的预置数enout:outstd_logic;---输出进位信号h,l:outstd_logic_vector(3downto0));---输出信号的高4位和低4位endcnt24;architecturertlofcnt24issignall_temp:std_logic_vector(3downto0);signalh_temp:std_logic_vector(3downto0);signalclr:std_logic:='0';---计满模24产生的清0信号beginprocess(clk_in,en,clr)---个位的计数进程(0~9)循环计数beginif(reset='1')then---清0信号l_temp=0000;elsif(load='1')then---下载预置数l_temp=l_in;elsif(clk_in'eventandclk_in='0')then---正常计数if((en='1')and(stop='0'))thenif((l_temp=1001)or(clr='1'))thenl_temp=0000;elsel_temp=l_temp+'1';endif;endif;endif;endprocesslow_proc;l=l_temp;process(clk_in,en,clr)---十位计数进程(0~2)循环计数beginif(reset='1')thenh_temp=0000;elsif(load='1')thenh_temp=h_in;elsif(clk_in'eventandclk_in='0')thenif((en='1')and(stop='0'))thenif(clr='1')thenh_temp=0000;elsif(l_temp=1001)thenh_temp=h_temp+'1';endif;endif;endif;endprocesshigh_proc;h=h_temp;clr='1'whenl_temp=0011andh_temp=0010else---计满模24产生清0信号'0';enout=clr;---计满24产生进位信号en
本文标题:22VHDL课程设计_001
链接地址:https://www.777doc.com/doc-5728828 .html