版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
r~i基于FPGA的VerilogHDL数字钟
设计-不盲而不盲而口基于FPGA的VerilogHDL数字钟设计专业班级 姓名 学号一、 实验目的 掌握可编程逻辑器件的应用开发技术一一设计输入、编译、仿真和器件编程;熟悉一种EDA软件使用;掌握Verilog设计方法;掌握分模块分层次的设计方法;用Verilog完成一个多功能数字钟设计;学会FPGA的仿真。二、 实验要求功能要求:利用实验板设计实现一个能显示时分秒的多功能电子钟,基本功能:1) 准确计时,以数字形式显示时、分、秒,可通过按键选择当前显示时间范围模式;2) 计时时间范围00:00:00—23:59:593) 可实现校正时间功能;4) 可通过实现时钟复位功能:00:00:00扩展功能:5) 定时报:时间自定(不要求改变),闹1分钟(1kHz) 利用板上LED或外接电路实现。不盲而不盲而口6) 仿广播电台正点报时:XX:59:[51,53,55,57(500Hz);59(1kHz)]―-用板上LED或外接7) 报整点时数:XX:00:[00.5-XX.5](1kHz),自动、手动---用板上LED或外接8) 手动输入校时;9) 手动输入定时闹钟;10) 万年历;11) 其他扩展功能;设计步骤与要求:1) 计算并说明采用Basys2实验板时钟50MHz实现系统功能的基本原理。2) 在XilinxISE13.1软件中,利用层次化方法,设计实现模一百计数及显示的电路系统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。3) 对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快得出仿真结果)。4) 输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit文件。5) 在Basys2实验板上下载所生成的.bit文件,观察验证所设计的电路功能。三、实验设计功能说明:实现时钟,时间校时,闹铃定时,秒表计时等功能时钟功能:完成分钟/小时的正确计数并显示;秒的显示用LED灯的闪烁做指示;时钟利用4位数码管显示时分;口闹钟定时:实现定时提醒及定时报时,利用LED灯代替扬声器发出报时声音;时钟校时:当认为时钟不准确时,可以分别对分钟和小时位的值进行调整;秒表功能:利用4个数码管完成秒表显示:可以实现清零、暂停并记录时间等功能。秒表利用4位数码管计数;方案说明:本次设计由时钟模块和译码模块组成。时钟模块中50MHz的系统时钟clk分频产生一个1Hz的使能控制信号enable,并以此产生1s的脉冲second_en以实现每秒计时,控制各个模式下的计数显示。由模式控制信号选择当前数码管显示哪个状态:mode=00,时钟常规显示状态,mode=01,闹铃定时状态,mode=10,时钟校时状态,mode=11,秒表计时状态;时钟:利用count,smin0,smin1,shour0,shour1的计数来实现,具体情况见程序;校时:当turn=1时,调整分位smin1、smin0;当turn=0时,调整小时位shour1、shour0;闹铃:当turn=1时,调整分位amin1、amin0;当turn=0时,调整小时位ahour1、ahour0;秒表:当pause=0时,开始计时;当pause=1时,暂停。口习不口习不不白而rjj不斗四、实验代码时钟模块moduleclockfelk,clr,pause,turn,mode,sec,mini,min0,houri,hourO,alert,LDalert);inputclk;//时钟信号(50MHz)inputclr;〃清零键inputpause;〃秒表暂停键input[1:0]mode;〃决定时钟显示功能状态outputsec;〃接发光二极管output[3:0]min1;〃用于输出接数码管4output[3:0]min0;〃用于输出接数码管3output[3:0]hour1;〃用于输出接数码管2output[3:0]hour0;〃用于输出接数码管1outputalert;〃接发光二极管,代替蜂鸣器〃调整分还是小时位的控制inputturn;口 、IE□□用爪斗outputLD_alert;〃当闹铃设定后,发光二极管显示wiresec; 〃秒位显示wireLD_alert;〃用于闹铃存在时的提醒显示//wireclkl;//时钟1s//wireclk2;//时钟100ms,用于秒表最小计时单位//wireclrl;reg[3:0]min1;//常规显示reg[3:0]min0;//常规显示reg[3:0]hour1;〃常规显示reg[3:0]hour0;〃常规显示reg[3:0]smin1;〃校时reg[3:0]smin0;〃校时reg[3:0]shour1;〃校时reg[3:0]shour0;〃校时reg[3:0]amin1;〃闹铃reg[3:0]amin0;〃闹铃reg[3:0]ahour1;〃闹铃reg[3:0]ahour0;〃闹铃reg[3:0]mmin1;〃秒表reg[3:0]mmin0;〃秒表reg[3:0]mhour1;〃秒表奸口僧而奸口僧而endendalways@(posedgeclk)//?????beginif(clr)beginen1<=1'b0;en2<=1'b0;endelsebeginen1<=enable;en2<=en1;endendassignsecond_en=(!en1)&&(en2);always@(posedgeclk)beginif(clr)beginamin1<=0;amin0<=0;ahour1<=0;ahour0<=0;smin1<=0;smin0<=0;shour1<=0;shour0<=0;mmin1<=0;mmin0<=0;mhour1<=0;奸口
僧而mhour0<=0;count<=0;endelseif(second_en)begincount<=count+1;///////////////////////////////////////////////////////////////////////////////////////////if(mode==2'b01) 〃闹铃调时状态if(turn==1) 〃当turn为高电平时调整分位if((amin1==5)&&(amin0==9))beginamin1<=0;amin0<=0;endelseif(amin0==9)beginamin1<=amin1+1;amin0<=0;endelseamin0<=amin0+1;else 〃当turn为低电平时调整小时位if((ahour1==2)&&(ahour0==3))beginahour1<=0;ahour0<=0;奸口
僧而endelseif(ahour0==9)beginahour1<=ahour1+1;ahour0<=0;endelseahour0<=ahour0+1;////////////////////////////////////////////////////////////////////////////////////////if(mode==2'b10) 〃时钟调时状态if(turn==1) 〃当turn为高电平时调整分位if((smin1==5)&&(smin0==9))beginsmin1<=0;smin0<=0;endelseif(smin0==9)beginsmin1<=smin1+1;smin0<=0;endelsesmin0<=smin0+1;else 〃当turn为低电平时调整小时位if((shour1==2)&&(shour0==3))begin奸口僧而奸口僧而shour1<=shour1+1;if(shour1==2)shour1<=0;endendendendend////////////////////////////////////////////////////////////////////////////////if(mode==2'b11)begin〃秒表计时状态if(pause==0)〃当pause为低电平时开始计时Ibeginmmin0<=mmin0+1;if(mmin0==9)beginmmin0<=0;mmin1<=mmin1+1;if(mmin1==9)beginmmin1<=0;mhour0<=mhour0+1;if(mhour0==9)beginmhour0<=0;mhour1<=mhour1+1;if(mhour1==9)奸口僧而mhour1<=0;endendendendendendendassignLD_alert=(amin11aminO|ahourl|ahour0)?1:0; 〃当闹铃有定时后LD_alert发光以示闹铃已定assignsec=enable;〃将秒针接到LED灯always@(posedgeclk)beginif(clr)alert<=0;elseif((amin1==smin1)&&(amin0==smin0)&&(ahour1==shour1)&&(ahour0==shour0))alert<=1;〃对闹铃做检查,时间到时发光elsealert<=0;end〃以下为选择显示模块always@(posedgeclk)beginif(clr)beginmin1<=0;min0<=smin0;min0<=smin0;奸口僧而min0<=0;hour1<=0;hour0<=0;endelsebegincase(mode)2'b01:begin //mode=01时,显示闹铃模块min1<=amin1;min0<=amin0;hour1<=ahour1;hour0<=ahour0;end2'b10:begin //mode=10时,显示校时模块min1<=smin1;min0<=smin0;hour1<=shour1;hour0<=shour0;end2'b11:begin //mode=11时,显示秒表模块min1<=mmin1;min0<=mmin0;hour1<=mhour1;hour0<=mhour0;end2'b00:begin 〃其他状态,显示普通时钟模块min1<=smin1;奸口僧而hour1<=shour1;hour0<=shour0;Iendendcaseendendendmodule译码模块奸口僧而奸口
僧而always@(posedgeclk)//SegScanbeginif(reset)begintemp<=4'b0000;endelsecase(count[1:0])//仿真时将扫描信号频率加快1000倍// case(count[11:10])//执行设计时将扫描频率改回2'b00:temp<=h1;2'b01:temp<=h0;2'b10:temp<=m1;2'b11:temp<=m0;endcaseendalways@(posedgeclk)〃数码管译码beginif(reset)beginq<=7'b0000000;endelsecase(temp)4'd0:q<=7'b0000001;//04'd1:q<=7'b1001111;//14'd2:q<=7'b0010010;//2奸口
僧而4,d3:q<=7'b0000110;//34,d4:q<=7'b1001100;//44,d5:q<=7,b0100100;//54,d6:q<=7,b0100000;//64,d7:q<=7,b0001111;//74,d8:q<=7,b0000000;//84,d9:q<=7,b0000100;//9default:q<=7'b0000001;endcaseendendmoduleUCF文件NET"clk"LOC="B8";#50MPinassignmentforDispCtlConnectedtoBasys2onBoard7qdisplayNET"q<6>"LOC="L14";#Bank=1,Signalname=CANET"q<5>"LOC="H12";#Bank=1,Signalname=CBNET"q<4>"LOC="N14";#Bank=1,Signalname=CCNET"q<3>"LOC="N11";#Bank=2,Signalname=CDNET"q<2>"LOC="P12";#Bank=2,Signalname=CENET"q<1>"LOC="L13";#Bank=1,Signalname=CFNET"q<0>"LOC="M12";#Bank=1,Signalname=CG#NET"dp"LOC="N13";#Bank=1,Signalname=DPNET"ctr<3>"LOC="K14";#Bank=1,Signalname=AN3NET"ctr<2>"LOC="M13";#Bank=1,Signalname=AN2NET"ctr<1>"LOC="J12";#Bank=1,Signalname=AN1奸口僧而NET"ctr<0>"LOC="F12";#Bank=1,Signalname=AN0NET"reset"LOC="N3";#Bank=2,Signalname=SW7NET"mode<1>"LOC="E2";#Bank=3,Signalname=SW6NET"mode<0>"LOC="F3";#Bank=3,Signalname=SW5NET"turn"LOC="G3";#Bank=3,Signalname=SW4NET"pause"LOC="B4";#Bank=3,Signalname=SW3NET"LD_alert"LOC="P7";#Bank=3,Signalname=LD2NET"alert"LOC="M11";#Bank=2,Signalname=LD1NET"sec"LOC="M5";#Bank=2,Signalname=LD0奸口僧而奸口僧而蛙口 EHffi 蛙口 EHffi endmodule五、仿真进入ISim仿真波形界面&养mIE01!■:蚩•快岫VW7*下詞f?H£激透聊§EuWE迎ndow。晔vl出p^migc MbnlM成,m#ici:i:£orIrra^ceandl^cicessNbTriEEUd— Mr上心EKZMtfid-«nI#X诺'•■■户卢:&尸-。0史hHu.MK4DLILtlt>^migc MbnlM成,m#ici:i:£orIrra^ceandl^cicessNbTriEEUd— Mr上心EKZMtfid-«nI#X诺'•■■户卢:&尸-。0史hHu.MK4DLILtlt>1DPtrMDt>八;,:tK而ILD.Jtflidk,NSKrrodeilOOhumpaua*韓蹌州tq□4Ijc4gmhiw.QdSd-X-E-Xa1IhiaIai,JiLlTirxLUifTIMITiEiLUfL^1KI.JIEriM3]^£ffirI.E仙rq£1rcdl.tlali4ikll.Si£id«kprdsfliEEEMnnhRisi^rmiLjiaiHd.让―曲小pracaia.I5J>>「—・.1.~||1I匸■jllrUanLar| ~BrMJqpalJifcBIFIjmI-IjlITiljKlinlkiI*?nSiiril.UMsd-tc女eTim•:L皿皿DM1pa(1)仿真,运行1ms,将波形结果调整为适合的大小卜*Ctr[3S]4I*alertLD_al^rtAbjtEsVL。国靴1reieiHirNJcllOJlumpause牛raoogm]clockdi中I則0000001LLOL010000000oonnnnnaaaatXI:liZ.QOKOflTIE⑵这时我们可以分别点开clock模块和display模块查看具体的信号变化是否正确。我们先看clock模块。▼fclock姑dkl^dr伯peuxLLturn%m▼fclock姑dkl^dr伯peuxLLturn%m"I版LD_alcrt噬minip-n]餘皇minO|51FJ*hcuriLBfl]齢*宙hournpfl]1、alert酎fmDde[l:0]9K0nd_m000000nnanOQODQDODGOOD10D0* 卩间p■mminl侣:□门齢~sminDBiUOOQDememJil:112.000030u=■C-OQOownJII二□C-01oweC-OOC'当mode=00时,实现正常时钟显示功能。在脉冲second_en到来时,count做计数加1,此时小时位是shourl,shourO,分钟位是sminl,sminO,将这几个相关信号在波形窗口中位置做个调整放到一起来查看。当count计数到59时,分钟位sminO实现加1变化,由0变为1’•此时结果是正确的当mode=2^01时,实现闹铃模块。当turn=l时,调整分位aminl、aminO;当turn=O时,调整小时位ahourlsahour0o将相关信号放在一起查看,由图可知,当turn为低时,调整小
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年骨折急救现场处理方法
- 2026年感恩父母班会活动方案
- 2026年用电设备安全距离标准
- 2026年学前教育毕业设计书
- 2026年保障科年度工作筹划方案
- 2026年职业技能成长规划书
- 2026年云南省红河州红河县中考英语一模试卷(含详细答案解析)
- 2026年公司过除夕活动意义
- 生产机器转让协议书模板
- 三明大型仓库租赁协议书
- 新疆地形地貌教学课件
- 软件开发项目供货计划及进度保障措施
- 国内贸易操作流程
- 电子喉镜清洗消毒流程
- 5W1H在护理中的应用
- 2024年会计从业资格考试《会计基础》复习知识点总结
- DB37T-建筑工程施工资料管理规程 第1部分:总体要求
- GB/T 29468-2024洁净室及相关受控环境围护结构夹芯板
- GB/T 44179-2024交流电压高于1 000 V和直流电压高于1 500 V的变电站用空心支柱复合绝缘子定义、试验方法和接收准则
- 08SS704 混凝土模块式化粪池
- 北京市朝阳区2023-2024学年八年级下学期期末检测语文试题
评论
0/150
提交评论