VHDL数字钟报告模板_第1页
VHDL数字钟报告模板_第2页
VHDL数字钟报告模板_第3页
VHDL数字钟报告模板_第4页
VHDL数字钟报告模板_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./数字钟设计报告绪论:20世纪90年代,国际上电子和计算机技术较为先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件〔如CPLD、FPGA〕的应用,已得到广泛的普与,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。概要:本设计主要利用VHDL语言在EDA平台上设计一个24进制和12进制可以相互转换的电子数字钟,另外还具有设置时间和闹钟功能。总的程序由几个各具不同功能的单元模块程序拼接而成,其中包括分频程序模块、时分秒计数和设置程序模块、比较器程序模块、译码显示程序模块。并且使用QUARTUSII软件进行电路波形仿真,下载到实验箱进行验证。一、设计目的1、熟练地运用数字系统的设计方法进行数字系统设计;2、能进行较复杂的数字系统设计;3、按要求设计一个数字钟。二、设计思路数字钟的设计模块包括:分频器、"时、分、秒"计数器、闪烁电路、整点报时和译码显示电路。每一个功能模块作为一个实体单独进行设计,最后再用VHDL的例化语句将各个模块进行整合。该数字钟可以实现的几个功能:计时功能、设置时间功能、设置闹钟和报时功能。系统设计闪烁模块分频模块闪烁模块分频模块显示模块时间和闹钟显示选择以与闹钟模块计时与设置时间模块显示模块时间和闹钟显示选择以与闹钟模块计时与设置时间模块时间控制模块时间控制模块闹钟控制模块设置闹钟模块闹钟控制模块设置闹钟模块1、分频模块:提供1hz的时钟信号与100hz的测试时钟信号。可通过实验板上的k2键来调节。2、时间控制模块:控制设置时间和计时的使能信号。3、闹钟控制模块:控制设置闹钟和计时的使能信号。4、计时与设置时间模块和设置闹钟模块:通过时间控制模块和闹钟控制模块传来的使能信号来转换计时、设置时间和设置闹钟。可以通过Key0键设置时间,Key1键设置闹钟。Key3键选择需要设置的位数,Key4键来调整时间。时间和闹钟显示选择以与闹钟模块:接收计时与设置时间模块和设置闹钟模块传来的数据选择时间或者闹钟传至显示模块。并且可以根据sw2键来改变传至显示模块的是12进制和24进制。可以整点报时和闹钟。显示模块:将从时间和闹钟显示选择模块传来的数据显示在数码管上。并且可以在设置时间和设置闹钟时闪烁显示。五、模块设计1分频模块引入50Mhz的时钟信号,根据<50M/2n>-1,实现1hz和100hz的分频ARCHITECTUREBAHAVOFFDISSIGNALQ,Q1:STD_LOGIC;BEGINPROCESS<CLK,EN,SW2>VARIABLETEMP:INTEGERRANGE24999999DOWNTO0;BEGINIFSW2='1'THENIFEN='1'THENIFCLK'EVENTANDCLK='1'THENIFTEMP=24999999THENTEMP:=0;Q<=NOTQ;ELSETEMP:=TEMP+1;ENDIF;ENDIF;ELSETEMP:=0;Q<='0';ENDIF;ENDIF;ENDPROCESS;PROCESS<CLK,EN,SW2>VARIABLETEMP1:INTEGERRANGE249999DOWNTO0;BEGINIFSW2='0'THENIFEN='1'THENIFCLK'EVENTANDCLK='1'THENIFTEMP1=249999THENTEMP1:=0;Q1<=NOTQ1;ELSETEMP1:=TEMP1+1;ENDIF;ENDIF;ELSETEMP1:=0;Q1<='0';ENDIF;ENDIF;ENDPROCESS;PROCESS<SW2>BEGINIFSW2='1'THENCLK_OUT<=Q;ELSECLK_OUT<=Q1;ENDIF;ENDPROCESS;ENDARCHITECTURE;时间控制模块〔与闹钟控制模块类似〕〔1〕功能分析通过TIMESET〔KEY0〕键来控制设置时间,按下TIMESET〔KEY0〕,开始设置时间,再次按下表示设置结束。通过使用状态机,每按下一次SHIFT〔KEY3〕改变状态从状态s0->s1->s2->s3->s4->s1来改变使能信号。S0状态为计时模式,S1,S2,S3,S4状态为设置时间模式。S1状态为分钟低位可设置,S2状态为分钟高位可设置,S3状态为小时低位可设置,S4状态为小时高位可设置。〔2〕信号分析SEC_EN0,MIN_EN1,MIN_EN0,HOUR_EN1,HOUR_EN0为0时为不可改变状态〔不能计时和设置〕,为1时为可改变状态〔能计时和设置〕。SEL为0时,传入计时与设置时间模块的是1hz的时钟信号,SEL为1时,进入设置模式,传入计时与设置时间模块的是ADD信号<KEY2>,ARCHITECTUREBAHAVOFSETMODEISTYPEFSM_STIS<S0,S1,S2,S3,S4>;SIGNALCST,NST:FSM_ST:=S0;SIGNALFLAG:STD_LOGIC:='0';BEGINPROCESS<TIMESET>BEGINIFTIMESET'EVENTANDTIMESET='1'THENFLAG<=NOTFLAG;——小时时间设置标记FLAG_H<=FLAG;——输出小时时间设置标记ENDIF;ENDPROCESS;PROCESS<SHIFT>BEGINIFFLAG='1'THENIFSHIFT'EVENTANDSHIFT='1'THENCST<=NST;ENDIF;LED<='1';ELSECST<=S0;LED<='0';ENDIF;ENDPROCESS;——PROCESS<CST>BEGINCASECSTISWHENS0=>NST<=S1;——S0状态为计时模式WHENS1=>NST<=S2;——S1状态为分钟低位可设置WHENS2=>NST<=S3;——S2状态为分钟高位可设置WHENS3=>NST<=S4;——S3状态为小时低位可设置WHENS4=>NST<=S1;——S4状态为小时高位可设置WHENOTHERS=>NST<=S0;ENDCASE;ENDPROCESS;PROCESS<CST>BEGINCASECSTISWHENS0=>SEC_EN<='1';MIN_EN1<='1';MIN_EN0<='1';HOUR_EN1<='1';HOUR_EN0<='1';SEL<='0';WHENS1=>SEC_EN<='0';MIN_EN1<='0';MIN_EN0<='1';HOUR_EN1<='0';HOUR_EN0<='0';SEL<='1';WHENS2=>SEC_EN<='0';MIN_EN1<='1';MIN_EN0<='0';HOUR_EN1<='0';HOUR_EN0<='0';SEL<='1';WHENS3=>SEC_EN<='0';MIN_EN1<='0';MIN_EN0<='0';HOUR_EN1<='0';HOUR_EN0<='1';SEL<='1';WHENS4=>SEC_EN<='0';MIN_EN1<='0';MIN_EN0<='0';HOUR_EN1<='1';HOUR_EN0<='0';SEL<='1';WHENOTHERS=>SEC_EN<='0';MIN_EN1<='0';MIN_EN0<='0';HOUR_EN1<='0';HOUR_EN0<='0';SEL<='0';ENDCASE;ENDPROCESS;ENDARCHITECTURE;小时模块〔秒钟,分钟模块类似〕本模块分为3个进程第一个进程的功能为转换时钟信号与设置信号〔KEY2〕,由时间控制模块传来的HOUR_SEL控制。第二个进程的功能为小时低位的计数和设置。第二个进程的功能为小时高位的计数和设置。并且考虑到了低位和高位的钳制。ARCHITECTUREBAHAVOFHOURISSIGNALHOURVALUE:STD_LOGIC_VECTOR<7DOWNTO0>:="00100011";SIGNALCLK_IN:STD_LOGIC;BEGINPROCESS<HOUR_SEL>——转换时钟信号与设置信号BEGINIFHOUR_SEL='0'THENCLK_IN<=HCLK;ELSECLK_IN<=HOUR_SET;ENDIF;ENDPROCESS;PROCESS<CLK_IN,EN0>——小时低位的计数和设置BEGINIFEN0='1'THENIFCLK_IN'EVENTANDCLK_IN='1'THENIFHOURVALUE<7DOWNTO4>="0010"THENIFHOURVALUE<3DOWNTO0>="0011"THENHOURVALUE<3DOWNTO0><="0000";ELSEHOURVALUE<3DOWNTO0><=HOURVALUE<3DOWNTO0>+'1';ENDIF;ELSIFHOURVALUE<3DOWNTO0><"1001"THENHOURVALUE<3DOWNTO0><=HOURVALUE<3DOWNTO0>+'1';ELSEHOURVALUE<3DOWNTO0><="0000";ENDIF;ENDIF;ENDIF;ENDPROCESS;PROCESS<CLK_IN,EN1>——小时高位的计数和设置。并且考虑到了低位和高位的钳制BEGINIFEN1='1'THENIFCLK_IN'EVENTANDCLK_IN='1'THENIFEN0='1'THENIFHOURVALUE<3DOWNTO0>="0011"ORHOURVALUE<3DOWNTO0>="1001"THENIFHOURVALUE<7DOWNTO4>="0010"THENHOURVALUE<7DOWNTO4><="0000";ELSIFHOURVALUE<3DOWNTO0>="1001"THENIFHOURVALUE<7DOWNTO4><"0011"THENHOURVALUE<7DOWNTO4><=HOURVALUE<7DOWNTO4>+'1';ENDIF;ENDIF;ENDIF;——设置小时低位对高位钳制ELSIFHOURVALUE<3DOWNTO0><"0100"THENIFHOURVALUE<7DOWNTO4><"0010"THENHOURVALUE<7DOWNTO4><=HOURVALUE<7DOWNTO4>+'1';ELSEHOURVALUE<7DOWNTO4><="0000";ENDIF;ELSIFHOURVALUE<3DOWNTO0>>="0100"THENIFHOURVALUE<7DOWNTO4><"0001"THENHOURVALUE<7DOWNTO4><=HOURVALUE<7DOWNTO4>+'1';ELSEHOURVALUE<7DOWNTO4><="0000";ENDIF;ENDIF;ENDIF;ENDIF;ENDPROCESS;HOUR0<=HOURVALUE<3DOWNTO0>;HOUR1<=HOURVALUE<7DOWNTO4>;ENDARCHITECTURE;4、选择模块和闹钟报时模块第一个进程为24进制和12进制转换,当SW信号为1时,选择24进制时间输出,当SW信号为0时,将24进制时间转换为12进制时间输出。第二个进程为判断12进制是AM还是PM第三个进程为12进制是AM或PM数码管灯提示。第四个进程为闹钟报时与整点报时模块:当计时模块传来的时间和闹钟设置的时间相等时,闹钟提示灯闪烁,或者分钟模块传来是30或00时,闹钟提示灯闪烁。ARCHITECTUREBAHAVOFCHOOSEISSIGNALFLAG_AP:STD_LOGIC;BEGINPROCESS<FLAG>BEGINIFFLAG='1'THEN——闹钟时间输出MIN0<=AMININ0;MIN1<=AMININ1;HOUR0<=AHOURIN0;HOUR1<=AHOURIN1;HF0<=AH_FLASH0;HF1<=AH_FLASH1;MF0<=AM_FLASH0;MF1<=AM_FLASH1;ELSE——时钟时间输出MIN0<=MININ0;MIN1<=MININ1;HF0<=H_FLASH0;HF1<=H_FLASH1;MF0<=M_FLASH0;MF1<=M_FLASH1;IFSW='1'THENHOUR0<=HOURIN0;HOUR1<=HOURIN1;ELSEIFFLAG_H='0'THEN——24进制输出HOUR0<=HOURIN0;HOUR1<=HOURIN1;ELSE——24进制转换12进制时间输出IFHOURIN1&HOURIN0>="00010010"THENIFHOURIN0>="0010"THENHOUR1<=HOURIN1-"0001";HOUR0<=HOURIN0-"0010";ELSIFHOURIN0="0001"THENHOUR1<=HOURIN1-"0001";HOUR0<="1001";ELSIFHOURIN0="0000"THENHOUR1<=HOURIN1-"0001";HOUR0<="1000";ENDIF;ELSEHOUR1<=HOURIN1;HOUR0<=HOURIN0;ENDIF;ENDIF;ENDIF;ENDIF;ENDPROCESS;——判断12进制是AM还是PMPROCESS<HOURIN1,HOURIN0>BEGINIFHOURIN1>="0001"ANDHOURIN0>="0010"THENFLAG_AP<='1';ELSEFLAG_AP<='0';ENDIF;ENDPROCESS;——12进制是AM或PM数码管灯提示PROCESS<FLAG_AP,SW>BEGINIFSW='1'THENHEX<="1111111";ELSEIFFLAG_AP='1'THENHEX<="0001100";ELSEHEX<="0001000";ENDIF;ENDIF;ENDPROCESS;——整点报时,半点报时,闹钟PROCESS<AMININ0,AMININ1,AHOURIN0,AHOURIN1,MININ0,MININ1,HOURIN0,HOURIN1>BEGINIF<AMININ0=MININ0ANDAMININ1=MININ1ANDAHOURIN0=HOURIN0ANDAHOURIN1=HOURIN1>ORMININ1&MININ0="00000000"ORMININ1&MININ0="00110000"THENFLASH_FLAG<='1';ELSEFLASH_FLAG<='0';ENDIF;ENDPROCESS;ENDARCHITECTURE;5、显示模块HOURFLASH1,HOURFLASH0,MINFLASH1,MINFLASH0信号控制数码管的闪烁,当这些信号为1时,数码管暗,为0时,数码管显示数值。SECIN0,SECIN1,MININ0,MININ1,HOURIN0,HOURIN1为时间和闹钟显示选择以与闹钟模块传来的四进制数,每一个进程的作用就是将传来的四进制数译码为7进制数,传入实验板中,使数码管显示相应的数值。ARCHITECTUREBEHAVOFDISPISSIGNALREG7_0:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALREG7_1:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALREG7_2:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALREG7_3:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALREG7_4:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALREG7_5:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALREG7_6:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALREG7_7:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALREG7_8:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALREG7_9:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALREG7_NULL:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALLEDX:STD_LOGIC;BEGINREG7_0<="1000000";——数码管0REG7_1<="1111001";——数码管1REG7_2<="0100100";——数码管2REG7_3<="0110000";——数码管3REG7_4<="0011001";——数码管4REG7_5<="0010010";——数码管5REG7_6<="0000010";——数码管6REG7_7<="1111000";——数码管7REG7_8<="0000000";——数码管8REG7_9<="0010000";——数码管9REG7_NULL<="1111111";——不显示——译码器PROCESS<HOURFLASH1,HOURIN1,EN>BEGINIFEN='1'THENIFHOURFLASH1='1'THENHOUR1<=REG7_NULL;ELSECASEHOURIN1ISWHEN"0000"=>HOUR1<=REG7_0;WHEN"0001"=>HOUR1<=REG7_1;WHEN"0010"=>HOUR1<=REG7_2;WHEN"0011"=>HOUR1<=REG7_3;WHEN"0100"=>HOUR1<=REG7_4;WHEN"0101"=>HOUR1<=REG7_5;WHEN"0110"=>HOUR1<=REG7_6;WHEN"0111"=>HOUR1<=REG7_7;WHEN"1000"=>HOUR1<=REG7_8;WHEN"1001"=>HOUR1<=REG7_9;WHENOTHERS=>HOUR1<=REG7_NULL;ENDCASE;ENDIF;ELSEHOUR1<=REG7_1;ENDIF;ENDPROCESS;PROCESS<HOURFLASH0,HOURIN0>BEGINIFEN='1'THENIFHOURFLASH0='1'THENHOUR0<=REG7_NULL;ELSECASEHOURIN0ISWHEN"0000"=>HOUR0<=REG7_0;WHEN"0001"=>HOUR0<=REG7_1;WHEN"0010"=>HOUR0<=REG7_2;WHEN"0011"=>HOUR0<=REG7_3;WHEN"0100"=>HOUR0<=REG7_4;WHEN"0101"=>HOUR0<=REG7_5;WHEN"0110"=>HOUR0<=REG7_6;WHEN"0111"=>HOUR0<=REG7_7;WHEN"1000"=>HOUR0<=REG7_8;WHEN"1001"=>HOUR0<=REG7_9;WHENOTHERS=>HOUR0<=REG7_NULL;ENDCASE;ENDIF;ELSEHOUR0<=REG7_4;ENDIF;ENDPROCESS;PROCESS<MINFLASH1,MININ1,EN>BEGINIFEN='1'THENIFMINFLASH1='1'THENMIN1<=REG7_NULL;ELSECASEMININ1ISWHEN"0000"=>MIN1<=REG7_0;WHEN"0001"=>MIN1<=REG7_1;WHEN"0010"=>MIN1<=REG7_2;WHEN"0011"=>MIN1<=REG7_3;WHEN"0100"=>MIN1<=REG7_4;WHEN"0101"=>MIN1<=REG7_5;WHEN"0110"=>MIN1<=REG7_6;WHEN"0111"=>MIN1<=REG7_7;WHEN"1000"=>MIN1<=REG7_8;WHEN"1001"=>MIN1<=REG7_9;WHENOTHERS=>MIN1<=REG7_NULL;ENDCASE;ENDIF;ELSEMIN1<=REG7_4;ENDIF;ENDPROCESS;PROCESS<MINFLASH0,MININ0,EN>BEGINIFEN='1'THENIFMINFLASH0='1'THENMIN0<=REG7_NULL;ELSECASEMININ0ISWHEN"0000"=>MIN0<=REG7_0;WHEN"0001"=>MIN0<=REG7_1;WHEN"0010"=>MIN0<=REG7_2;WHEN"0011"=>MIN0<=REG7_3;WHEN"0100"=>MIN0<=REG7_4;WHEN"0101"=>MIN0<=REG7_5;WHEN"0110"=>MIN0<=REG7_6;WHEN"0111"=>MIN0<=REG7_7;WHEN"1000"=>MIN0<=REG7_8;WHEN"1001"=>MIN0<=REG7_9;WHENOTHERS=>MIN0<=REG7_NULL;ENDCASE;ENDIF;ELSEMIN0<=REG7_8;ENDIF;ENDPROCESS;PROCESS<SECIN1,EN>BEGINIFEN='1'THENCASESECIN1ISWHEN"0000"=>SEC1<=REG7_0;WHEN"0001"=>SEC1<=REG7_1;WHEN"0010"=>SEC1<=REG7_2;WHEN"0011"=>SEC1<=REG7_3;WHEN"0100"=>SEC1<=REG7_4;WHEN"0101"=>SEC1<=REG7_5;WHEN"0110"=>SEC1<=REG7_6;WHEN"0111"=>SEC1<=REG7_7;WHEN"1000"=>SEC1<=REG7_8;WHEN"1001"=>SEC1<=REG7_9;WHENOTHERS=>SEC1<=REG7_NULL;ENDCASE;ELSESEC1<=REG7_2;ENDIF;ENDPROCESS;PROCESS<SECIN0,EN>BEGINIFEN='1'THENCASESECIN0ISWHEN"0000"=>SEC0<=REG7_0;WHEN"0001"=>SEC0<=REG7_1;WHEN"0010"=>SEC0<=REG7_2;WHEN"0011"=>SEC0<=REG7_3;WHEN"0100"=>SEC0<=REG7_4;WHEN"0101"=>SEC0<=REG7_5;WHEN"0110"=>SEC0<=REG7_6;WHEN"0111"=>SEC0<=REG7_7;WHEN"1000"=>SEC0<=REG7_8;WHEN"1001"=>SEC0<=REG7_9;WHENOTHERS=>SEC0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论