




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE2期末大作业课程设计实验报告设计题目:基于VHDL电子钟的设计目录概述…………31.1目的……………31.2课程设计的要求和功能………3二、总结…………..32.1课程设计进行过程及步骤……32.2所遇到的问题,如何解决问题……………….152.3体会收获以及建议…………….153.4参考资料(书,网络资料)………………….15三、教师评语………16四、成绩……………16概述1.1目的1.基于CPLD系统模块板,设计一个电子钟。来熟悉CPLD的工作原理以及对VHDL的使用。2.通过设计出一个电子钟具有校时功能,来巩固分频,键盘扫描,计数,动态扫描等知识内容。1.2课程设计的要求和功能设计一个电子钟,能进行正常的时分秒计时功能,分别有六个数码管显示24小时,60分钟,60秒的计数器显示。利用实验箱系统上的按键实现“校时”、“校分”功能:(1)按下“SA”键时,计时器快速递增,按24小时循环,进行时校正;(2)按下“SB”键时,计分器快速递增,按60分循环,进行分校正(3)按下“SC”键时,秒清零,进行秒校正;二、总结2.1课程设计进行及步骤1.设计提示系统框图见下动态显示电路动态显示电路M24计数器M60计数器M60计数器控制器校时电路控制输入2.系统结构设计描述(1)系统顶层文件1.顶层原理图见下2.各个模块的解释(1)五个输入量clk50MHz,SA,SB,SC,reset:其中clk50MHz为总体系统提供时钟,并且经过分频来分别对电子钟模块提供时钟,产生一秒一秒的进位信号,对显示模块的计数器提供时钟实现显示模块的扫描功能,对按键去抖动提供时钟,实现键盘扫描的功能。SA,SB,SC用来控制按键,实现按键控制,SA是实现“时”加一,SB是实现“分”加一,SC是实现“秒”清零。Reset是来控制按键功能的使能。(2)按键功能模块三个输入chos,date0,date1的功能是:chos接受来自按键的信号,若按键按下,则将date0的内容,也就是通过按键产生的脉冲来控制电子钟进行加一,若按键没有按下,则将“秒”分频信号接入电子钟的clk计数输入端,通过时钟脉冲来控制电子钟。(3)电子钟计数模块有5个输入ci,nreset,load,clk,d[7..0],作用分别是ci是使能端,直接接高电位,nreset是复位,load和d[7..0]是用来置数的,clk提供计数时钟,也就是一秒一个脉冲。输出端有三个,co是进位功能,只有“秒”和“分”模块有效,qh[3..0],ql[3..0]是分位的数字输出端,一个是十位,一个是个位。(4)显示模块输入端有qcnt接受来自计数器的计数实现显示扫描,d0h,d1h,d0m,d1m,d0s,d1s分别是接收的来自“秒”“分”“时”个位十位的数据,seg输出LCD的段扫描结果,SCAN输出LCD位扫描结果。(2)系统各个模块的VHDL程序1.显示模块Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Useieee.std_logic_arith.all;entitydisplayisport(qcnt:INintegerrange0to7;--计数值输入d0h,d1h,d0m,d1m,d0s,d1s:INintegerrange0to9;--分位得到的十位数和个位数seg:OUTstd_logic_vector(6downto0);--7位段码输出scan:OUTstd_logic_vector(7downto0)--8为位码输出);enddisplay;architectureaofdisplayissignaldata:integerrange0to10;beginprocess(qcnt,d0h,d1h,d0m,d1m,d0s,d1s)begincaseqcntiswhen0=>scan<="11111110";data<=d0h;when1=>scan<="11111101";data<=d1h;when2=>scan<="11111011";data<=10;when3=>scan<="11110111";data<=d0m;when4=>scan<="11101111";data<=d1m;when5=>scan<="11011111";data<=10;when6=>scan<="10111111";data<=d0s;whenothers=>scan<="01111111";data<=d1s;endcase;endprocess;process(data)begincasedataiswhen0=>seg<="0111111";--0when1=>seg<="0000110";--1when2=>seg<="1011011";--2when3=>seg<="1001111";--3when4=>seg<="1100110";--4when5=>seg<="1101101";--5when6=>seg<="1111101";--6when7=>seg<="0000111";--7when8=>seg<="1111111";--8when9=>seg<="1100111";--9when10=>seg<="1000000";--whenothers=>seg<="0000000";endcase;endprocess;enda;动态显示计数器部分:LIBRARYieee;USEieee.std_logic_1164.all;useieee.std_logic_unsigned.all;--EntityDeclarationENTITYqcnt_displayIS --{{ALTERA_IO_BEGIN}}DONOTREMOVETHISLINE! PORT ( clk:INSTD_LOGIC; qcnt:bufferSTD_LOGIC_VECTOR(2downto0) ); --{{ALTERA_IO_END}}DONOTREMOVETHISLINE! ENDqcnt_display;--ArchitectureBodyARCHITECTUREcnt_architectureOFqcnt_displayISBEGINPROCESS(clk) BEGIN IF(clk'EVENTANDclk='1')THEN qcnt<=qcnt+1; ENDIF; ENDPROCESS;ENDcnt_architecture;2.分位计数模块“秒”,“分”部分:LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_unsigned.all;--EntityDeclarationENTITYcounter60IS --{{ALTERA_IO_BEGIN}}DONOTREMOVETHISLINE! PORT ( ci:instd_logic; nreset:INSTD_LOGIC:='1'; load:INSTD_LOGIC; clk:INSTD_LOGIC; d:instd_logic_vector(7downto0); co:outstd_logic; qh:bufferstd_logic_vector(3downto0); ql:bufferstd_logic_vector(3downto0) ); --{{ALTERA_IO_END}}DONOTREMOVETHISLINE! ENDcounter60;--ArchitectureBodyARCHITECTUREcounter_architectureOFcounter60IS BEGINco<='1'when(qh="0101"andql="1001"andci='1')else'0';process(clk,nreset)beginif(nreset='0')thenqh<="0000";ql<="0000";elsifrising_edge(clk)thenif(load='1')thenqh<=d(7downto4);ql<=d(3downto0);elsif(ci='1')thenif(ql=9)thenql<="0000";if(qh=5)thenqh<="0000";elseqh<=qh+1;endif;elseql<=ql+1;endif;endif;endif;endprocess;ENDcounter_architecture;“时”部分:LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_unsigned.all;--EntityDeclarationENTITYcounter24IS --{{ALTERA_IO_BEGIN}}DONOTREMOVETHISLINE! PORT ( ci:instd_logic; nreset:INSTD_LOGIC:='1'; load:INSTD_LOGIC; clk:INSTD_LOGIC; d:instd_logic_vector(7downto0); co:outstd_logic:='0'; qh:bufferstd_logic_vector(3downto0); ql:bufferstd_logic_vector(3downto0) ); --{{ALTERA_IO_END}}DONOTREMOVETHISLINE! ENDcounter24;--ArchitectureBodyARCHITECTUREcounter_architectureOFcounter24IS BEGIN--co<='1'when(qh="0010"andql="0011"andci='1')else'0';process(clk,nreset)begin--if(nreset='0')then--qh<="0000";--ql<="0000";ifrising_edge(clk)thenif(load='1')thenqh<=d(7downto4);ql<=d(3downto0);elsif(ci='1')then if(qh=0orqh=1)then if(ql=9)then ql<="0000"; if(qh=2)then qh<="0000"; else qh<=qh+1; endif; else ql<=ql+1; endif; else if(ql=3)then ql<="0000"; if(qh=2)then qh<="0000"; else qh<=qh+1; endif; else ql<=ql+1; endif; endif;endif;endif;endprocess; ENDcounter_architecture;3.分频模块Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Useieee.std_logic_arith.all;Entityfdiv_duoisport(clkin:INstd_logic;clkout_200HZ:bufferstd_logic;--键盘去抖动clkout_1KHZ:bufferstd_logic;--显示模块计数器clkout_10HZ:bufferstd_logic;--按键选择clkout_1HZ:bufferstd_logic--计数器模块);Endfdiv_duo;Architectureaoffdiv_duoissignalcnt_1HZ:naturalrange0to24999999;signalcnt_10HZ:naturalrange0to249999999;signalcnt_1KHZ:naturalrange0to24999;signalcnt_200HZ:naturalrange0to124999;Beginprocess(clkin)beginif(clkin'eventandclkin='1')thenifcnt_1HZ=24999999thencnt_1HZ<=0;clkout_1HZ<=notclkout_1HZ;elsecnt_1HZ<=cnt_1HZ+1;endif;ifcnt_10HZ=249999999thencnt_10HZ<=0;clkout_10HZ<=notclkout_10HZ;elsecnt_10HZ<=cnt_10HZ+1;endif;ifcnt_1KHZ=24999thencnt_1KHZ<=0;clkout_1KHZ<=notclkout_1KHZ;elsecnt_1KHZ<=cnt_1KHZ+1;endif;ifcnt_200HZ=124999thencnt_200HZ<=0;clkout_200HZ<=notclkout_200HZ;elsecnt_200HZ<=cnt_200HZ+1;endif;endif;endprocess;Enda;4.键盘控制模块时钟和分钟的键盘去抖动和“增益”,“清零”控制部分:Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Useieee.std_logic_arith.all;Entitydebounceisport(clk200hz,reset:INstd_logic;--200HZ时钟din:INstd_logic;dout:OUTstd_logic);Enddebounce;architectureaofdebounceistypestateis(S0,S1,S2);--定义状态机类型signalcurrent:state;beginprocess(clk200hz,reset,din)beginif(reset='1')then--状态机复位dout输出信号复位current<=S0;dout<='1';elsif(clk200hz'eventandclk200hz='1')thencasecurrentiswhenS0=>dout<='1';if(din='0')thencurrent<=S1;elsecurrent<=S0;endif;whenS1=>dout<='1';if(din='0')thencurrent<=S2;elsecurrent<=S0;endif;whenS2=>dout<='0';if(din='0')thencurrent<=S2;elsecurrent<=S0;endif;whenothers=>dout<='1';current<=S0;endcase;endif;endprocess;enda;作用解释:当检测到按键被按下时,将按键的输出直接给计数模块的时钟控制通过按键控制计数时钟从而实现“增益”功能,如果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 期末工作总结教师
- 监理市场工作汇报
- 《论语十二章》课件
- 《西门豹》课件教学
- 公司级安全教育培训总结课件
- 脑梗护理查房情景演练
- 事故案例安全培训总结课件
- 《蝙蝠和雷达》课件
- 公司级员工安全培训内容课件
- 公司级信息安全知识培训课件
- 2025年度2025年少先队知识测试题及答案
- 勇气与成长写物作文10篇范文
- 反洗钱可疑交易识别课件
- 2025年中国银行招聘考试模拟试题及答案集
- 真人秀节目策划与执行方案
- GB/T 15234-2025塑料平托盘
- 人工智能技术及应用 第2版 课件全套 程显毅 第1-7章 人工智能时代 -人工智能应用
- 艾滋病合并马尔菲青霉菌感染
- 科技金融管理课件下载
- 国内道路运输安全管理培训指南
- 山东省汽车维修工时定额(T-SDAMTIA 0001-2023)
评论
0/150
提交评论