您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 理学 > VHDL数字时钟实验报告
VHDL数字时钟设计一、实验目的:进一步练习VHDL语言设计工程的建立与仿真的步骤和方法、熟悉VHDL语言基本设计实体的编写方法。同时,在已有知识的基础上,简单综合编写程序,仿制简单器械。二、实验环境:PC个人计算机、WindowsXP操作系统、QuartusII集成开发环境软件。三、设计要求:运用VHDL语言编写一个数字钟,具体要求:1.具有时、分、秒计数的十进制数字显示功能,以24小时循环计时。2.具有手动调节小时,分钟的功能。3.具有闹钟的功能,能够在设定的闹钟时间发出闹铃声。四、实验步骤:1.定义输入输出信号量port(clk:instd_logic;---时钟speak:outstd_logic;---铃dout:outstd_logic_vector(7downto0);---晶体管显示setclk:instd_logic_vector(2downto0);---操作按钮d1,d2,d3,d4,d5,d6:outstd_logic);---六个晶体管2.定义结构体中的信号量signalsel:std_logic_vector(2downto0);signalhou1:std_logic_vector(3downto0);--时分秒的个位和十位signalhou2:std_logic_vector(3downto0);signalmin1:std_logic_vector(3downto0);signalmin2:std_logic_vector(3downto0);signalseth1:std_logic_vector(3downto0);signalseth2:std_logic_vector(3downto0);signalsetm1:std_logic_vector(3downto0);signalsetm2:std_logic_vector(3downto0);signalsec1:std_logic_vector(3downto0);signalsec2:std_logic_vector(3downto0);signalh1:std_logic_vector(3downto0);signalh2:std_logic_vector(3downto0);signalm1:std_logic_vector(3downto0);signalm2:std_logic_vector(3downto0);signals1:std_logic_vector(3downto0);signals2:std_logic_vector(3downto0);signalsph1,sph2,spm1,spm2,sps1,sps2:std_logic_vector(3downto0);signalcount_sec:std_logic_vector(9downto0);signalsec_co:std_logic;signalco1,co2,co3,co4:std_logic;--进位signalswitch:std_logic_vector(1downto0);--表示状态3.分频模块用来定义秒count_sec用来计时钟个数,当count_sec=1111111111时,及得到1Hz信号。代码如下:process(clk)is--defineasecondbeginif(clk'eventandclk='1')thenif(count_sec=1111111111)thencount_sec=0000000000;sec_co='1';elsecount_sec=count_sec+'1';sec_co='0';endif;endif;endprocess;4.时钟正常走时模块该模块使用6个进程实现,分别为秒个位计时、秒十位计时、分个位计时、分十位计时、时个位计时、时十位计时。process(sec_co)is------------秒个位beginifswitch=00then--正常状态ifsec_co='1'thenifsec2=1001thensec2=0000;co1='1';elsesec2=sec2+'1';co1='0';endif;endif;elsifswitch=01then--调时状态sec2=0000;endif;endprocess;--------------------------------------------------process(co1)is-------秒十位beginifswitch=00thenifco1'eventandco1='1'thenif(sec1=0101)thensec1=0000;co2='1';elsesec1=sec1+'1';co2='0';endif;endif;elsifswitch=01thensec1=0000;endif;endprocess;-------------------------------------------------process(co1,co2)is--------分钟个位beginifswitch=00thenifco2'eventandco2='1'thenifmin2=1001thenmin2=0000;co3='1';elsemin2=min2+'1';co3='0';endif;endif;elsifswitch=01thenmin2=setm2;endif;endprocess;------------------------------------------------------process(co3)is-----------分钟十位beginifswitch=00thenifco3='1'thenifmin1=0101thenmin1=0000;co4='1';elsemin1=min1+'1';co4='0';endif;endif;elsifswitch=01thenmin1=setm1;endif;endprocess;---------------------------------------------------------process(co4)-------小时beginifswitch=00thenifco4='1'thenif(hou1=0010)then--小时十位为2时,个位满3进一if(hou2=0011)thenhou2=0000;hou1=0000;elsehou2=hou2+'1';endif;else--小时十位为0或1,个位满9进一if(hou2=1001)thenhou2=0000;hou1=hou1+'1';elsehou2=hou2+'1';endif;endif;endif;elsifswitch=01thenhou1=seth1;hou2=seth2;endif;endprocess;5.调时模块该进程用来控制时钟状态,switch为“00”时正常显示时间,为“01”时是进行调时,为“10”时是设置闹钟时间。代码如下:process(setclk(0))isbeginif(setclk(0)'eventandsetclk(0)='1')thenif(switch=10)thenswitch=00;elseswitch=switch+'1';endif;endif;endprocess;process(setclk(2),switch,setclk(1))isbegin--setclk(1)为1调分if(switch=01andsetclk(1)='1')thenif(setclk(2)'eventandsetclk(2)='1')thenif(setm2=1001)thensetm2=0000;if(setm1=0101)thensetm1=0000;elsesetm1=setm1+'1';endif;elsesetm2=setm2+'1';endif;endif;endif;endprocess;process(setclk(2),switch,setclk(1))isbegin--setclk(1)为0调时if(switch=01andsetclk(1)='0')thenif(setclk(2)'eventandsetclk(2)='1')thenif(seth1=0010)thenif(seth2=0011)thenseth1=0000;seth2=0000;elseseth2=seth2+'1';endif;elseif(seth2=1001)thenseth1=seth1+'1';seth2=0000;elseseth2=seth2+'1';endif;endif;endif;endif;endprocess;6.闹钟模块该模块由3个小模块组成,分别为设置闹钟时间、判断闹钟时间是否到达以及闹铃声音模块。(1)设置闹钟时间模块该进程用于设置闹钟时间。信号量switch为‘10‘时,表示设置闹钟时间;if(switch=10)then--调闹钟时,显示闹钟设置时间ifsel=000thend1='0';casesph1iswhen0000=dout=11000000;when0001=dout=11111001;when0010=dout=10100100;whenothers=dout=XXXXXXXX;endcase;elsifsel=001thend2='0';casesph2iswhen0000=dout=11000000;when0001=dout=11111001;when0010=dout=10100100;when0011=dout=10110000;when0100=dout=10011001;when0101=dout=10010010;when0110=dout=10000010;when0111=dout=11111000;when1000=dout=10000000;when1001=dout=10010000;whenothers=dout=XXXXXXXX;endcase;elsifsel=010thend3='0';casespm1iswhen0000=dout=11000000;when0001=dout=11111001;when0010=dout=10100100;when0011=dout=10110000;when0100=dout=10011001;when0101=dout=10010010;whenothers=dout=XXXXXXXX;endcase;elsifsel=011thend4='0';casespm2iswhen0000=dout=11000000;when0001=dout=11111001;when0010=dout=10100100;when0011=dout=10110000;when0100=dout=10011001;when0101=dout=10010010;when0110=dout=10000010;when0111=dout=11111000;when1000=dout=10000000;when1001=dout=10010000;whenothers=dout=XXXXXXXX;endcase;elsifsel=100thend5='0';casesps1iswhen0000=dout=11000000;when0001=dout=11111001;when0010=dout=10100100;when0011=dout=10110000;when0100=dout=10011001;when0
本文标题:VHDL数字时钟实验报告
链接地址:https://www.777doc.com/doc-5835998 .html