基于Xilinx_FPGA的数字钟设计.doc_第1页
基于Xilinx_FPGA的数字钟设计.doc_第2页
基于Xilinx_FPGA的数字钟设计.doc_第3页
基于Xilinx_FPGA的数字钟设计.doc_第4页
基于Xilinx_FPGA的数字钟设计.doc_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

各专业全套优秀毕业设计图纸基于fpga的多功能数字钟一、设计题目基于xilinx fpga的多功能数字钟设计二、设计目的1.掌握可编程逻辑器件的应用开发技术设计输入、编译、仿真和器件编程;2.熟悉一种eda软件使用;3.掌握verilog设计方法;4.掌握分模块分层次的设计方法;5.用verilog完成一个多功能数字钟设计;6.学会fpga的仿真。三、设计内容设计实验项目九多功能电子钟 功能要求:利用实验板设计实现一个能显示时分秒的多功能电子钟,具体要求为:基本功能:1) 准确计时,以数字形式显示时、分、秒,可通过按键选择指示当前显示时间范围模式;2) 计时时间范围 00:00:0023:59:593) 可实现校正时间功能;4) 可通过实现时钟复位功能:00:00:00扩展功能:1) 定时报:时间自定(不要求改变),闹1分钟(1khz)-利用实验板led或外接电路实现。2) 仿广播电台正点报时:xx:59:51,53,55,57(500hz);59(1khz) -利用实验板led或外接电路实现。3) 报整点时数:xx:00:00.5-xx.5(1khz),自动、手动-利用实验板led或外接电路实现。4) 手动输入校时;5) 手动输入定时闹钟;6) 万年历;7) 其他扩展功能; 设计步骤与要求:1) 计算并说明采用basys2实验板时钟50mhz实现系统功能的基本原理。2) 在xilinx ise13.1软件中,利用层次化方法,设计实现模一百计数及显示的电路系统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。3) 对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快得出仿真结果)。4) 输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit类型文件。5) 在basys2实验板上下载所生成的.bit文件,观察验证所设计的电路功能。四、总体设计思路主体分为分频模块,正常时间模块(包含两个模60计数器和一个模24计数器子模块),闹钟模块(分为一个模60计数器模块,一个模24计数器模块,四个比较器模块),电台报时模块,数码管显示模块(分为模式选择模块,片选信号及扫描程序模块,和译码模块)。将各模块连接好各接线口即得到数字钟顶层模块complete.sch。五、各模块设计及源代码1.分频模块分频模块要将50mhz的时钟信号分成三个分别为1hz,500hz,1khz的三个脉冲信号,设置三个计数器,在三个频率信号分别对应的延时时间进行翻转,就可以得到三个不同的脉冲信号。源代码如下:/freq.vmodule freq(clk,_1hz,_500hz,_1khz);input clk;output _1hz,_500hz,_1khz;reg _1hz=0,_500hz=0,_1khz=0;reg 24:0 cnt1=0,cnt2=0,cnt3=0;always (posedge clk)beginif (cnt125d24999999)/if (cnt125d249)/做test仿真时让变化更快cnt1=cnt1+1;/未达到计数时间计数器加一elsebegin _1hz=_1hz;/达到计时时间,信号翻转且计数器归零cnt1=0;endendalways (posedge clk)beginif (cnt225d49999)/if(cnt225d49)cnt2=cnt2+1;elsebegin _500hz=_500hz;cnt2=0;endendalways (posedge clk)beginif (cnt325d24999)/if (cnt325d25)cnt3=cnt3+1;elsebegin _1khz=_1khz;cnt3=0;endendendmodule2.时钟正常显示模块正常显示模块分为时分秒三个子模块,分别对应一个模24计数器和两个模60计数器。模24计数器和模60计数器设计都bcd码来表示时分秒的值,每个分为高位和低位,均对应一个十进制的数。对模24计数器,每个脉冲信号来临时当低位小于9时加一;等于9时高位加一且低位置零;且高位小于3,低位小于9,超过时高低位均置零;当高位等于2时,低位只能到3,同时复位ncr低电平时高低位均置零。同理可得模60计数器的设计。根据这个思路,得到模24计数器源代码如下:/counter24.vmodule counter24(cnth,cntl,ncr,en,cp);input ncr,en,cp;output 3:0 cnth,cntl;/分别为高位和低位reg 3:0 cnth,cntl;always (posedge cp or negedge ncr)beginif (ncr) cnth,cntl=8h00;/复位键清零else if(en) cnth,cntl2)|(cntl9)|(cnth=2)&(cntl=3)cnth,cntl=8b00;/出现计数错误全部清零else if(cnth=2)&(cntl3)cntl=cntl+1;/超过20时计数方式else if(cntl=9)begin cnth=cnth+1b1; cntl=4b0 ;/一般情况下计数方式endelsecntl=cntl+1b1;end模60计数器代码如下:/counterm60.vmodule counterm60(cntmh,cntml,ncr,en,cp);input cp,en,ncr;output 3:0 cntmh,cntml;reg 3:0 cntmh=0,cntml=0; always (posedge cp or negedge ncr) begin if(ncr)cntmh,cntml=8b00;else if (en)cntmh,cntml9|cntmh5|(cntmh=5&cntml=9)begincntmh,cntml=8h00;endelse if(cntmh5&cntml=9)begincntmh=cntmh+1b1;cntml=4b0;endelsecntml=cntml+1b1;endendmodule而时钟计时就是调用两个模60计数器和一个模24计数器,但相应的cp信号是需要修改的使得秒的60计数一周期可以使分加一,同时分钟跑一个周期能使得时针加一。同时按照设计要求需要加入按键调时功能,将两个按键adjhr和adjmin分别作为调时针和分针的按键,按下时时针和分钟的脉冲信号变为1hz脉冲,由此时针分钟会以1hz的频率改变而达到调时间的目的。设置分钟和时钟的驱动信号分别为mincp,hrcp,则可以设置mincp=adjmin?_1hz:(second=8h59); hrcp=adjhr?_1hz:(minute,second=16h5959);源代码如下:/top_clock.vmodule top_clock(hour,minute,second,_1hz,ncr,adjmin,adjhr);input _1hz,ncr,adjmin,adjhr;output 7:0 hour,minute,second;/分别为时分秒输出wire 7:0 hour,minute,second;supply1 vdd;/设置使能wire mincp,hrcp;/定义激励信号counterm60 ut1(second7:4,second3:0,ncr,vdd,_1hz);counterm60 ut2(minute7:4,minute3:0,ncr,vdd,mincp);counter24 ut3(hour7:4,hour3:0,ncr,vdd,hrcp);assign mincp=adjmin?_1hz:(second=8h59);/分钟激励assign hrcp=adjhr?_1hz:(minute,second=16h5959);/时钟激励endmodule3.仿电台报时模块设置alarm为报时输出,minute和second分别为分钟信号和秒钟信号,先用if-else语句来进行minute是否为59的判断,之后再用case语句在second为51,53,55,57时输出500hz的信号,在59时输出为1khz的信号,在板子上没有输出声音的设备,就接入led来验证是否正常报时。/radio.vmodule radio(alarm,minute,second,_1khz,_500hz);input _1khz,_500hz;input 7:0 minute,second;output alarm;reg alarm;always (minute or second)if(minute=8h59)case(second)8h51,8h53,8h55,8h57:alarm=_500hz;/500hz方式输出,报时8h59:alarm=_1khz;/59s以1khz输出default:alarm=1b0;/一般不输出endcaseelse alarm=1b0;endmodule4.闹钟模块闹钟模块分为设定闹钟(包含两个按键),闹钟正常响铃,一个关闭闹钟的按键ctrring。设定闹钟同样可以以1hz脉冲为激励信号,其主体电路为一个以1hz为激励信号的受setminkey控制的模60计数器和一个受sethrkey控制的模24计数器,调用之前已经写好的模块即可。同时响铃设置为alarm_clock,受按键ctrring控制。设置四个比较器,分别为小时高位比较,小时低位比较,分钟高位比较和分钟低位比较。当四个比较信号都为1时才会闹钟响铃。比较器的设计很简单直接给出源代码:/comparator.vmodule comparator(equ,a,b);input 3:0 a,b;output equ;assign equ=(a=b);endmodule而闹钟主体源代码如下:/ring.vmodule ring(alarm_clock,set_hr,set_min,hour,minute,second,sethrkey,setminkey,_1khz,_500hz,_1hz,ctrring );output alarm_clock;output 7:0 set_hr,set_min;/输出的闹钟设定时间wire alarm_clock;wire 7:0 set_hr,set_min;input _1khz,_500hz,_1hz;input 7:0 hour,minute,second;input sethrkey,setminkey,ctrring;/闹钟设定按键和关闭闹钟按键supply1 vdd;/设置高电平wire hrh_cop,minh_cop,hrl_cop,minl_cop;/中间变量,为设定闹钟时间和正常时间比较wire time_equ;counterm60 su1(set_min7:4,set_min3:0,vdd,setminkey,_1hz);/调用模60计数器模块counter24 su2(set_hr7:4,set_hr3:0,vdd,sethrkey,_1hz);comparator su4(hrh_cop,set_hr7:4,hour7:4);/调用比较器模块comparator su5(hrl_cop,set_hr3:0,hour3:0);comparator su6(minh_cop,set_min7:4,minute7:4);comparator su7(minl_cop,set_min3:0,minute3:0);assign time_equ=(hrh_cop&hrl_cop&minh_cop&minl_cop);/时间比较信号assign alarm_clock=ctrring?(time_equ&(second0=1b1)&_500hz)|(second0=1b0)&_1khz):1b0;/设置闹铃输出endmodule5.数码管显示模块之前的模块设置了两个音频信号输出alarm和alarm_clock,这里可以统一起来。数码管既要显示闹钟设定时间,也要显示时钟正常显示时间。设置一个按键mode来切换显示模式,为0时显示正常时间,为1时显示闹钟定时时间。设置led_hr和led_min为得到的当前显示的时和分。还有由led_hr和led_min到数码管的显示需要设计扫描程序,分为片选和译码模块。分别贴出源代码如下:模式选择模块:/mode.vmodule mode(mode,hour,minute,second,set_hr,set_min,led_hr,led_min,alarm,alarm_clock,alarmout);input mode,alarm,alarm_clock;input 7:0 hour,minute,second,set_hr,set_min;output 7:0 led_hr,led_min;output alarmout;wire alarm,alarm_clock;wire 7:0 set_hr,set_min;assign alarmout=alarm|alarm_clock;/时钟响铃,闹钟和电台报时均有效assign led_hr=mode?set_hr:hour;/选择当前显示的小时assign led_min=mode?set_min:minute;/选择当前显示的分endmodule之后是译码模块在配置引脚时将小数点dp配置为最高位,其余g,f,e,d,c,b,a按从高到低的顺序配置,低电平段码管亮,由此可以写出对应段码,源代码如下:/translate.vmodule translate(seg_in,seg_outh,seg_outl);input7:0 seg_in;/输入的数码output 7:0 seg_outh;/翻译后的高位段码output 7:0 seg_outl;/翻译后的低位段码wire 7:0 seg_outh,seg_outl;reg 7:0 seg_outh1,seg_outl1; always (seg_in7:4)/高位译码case (seg_in7:4)4b0000 : seg_outh1=8b11000000;/0的段码4b0001 : seg_outh1=8b11111001;/14b0010 : seg_outh1=8b10100100;/24b0011 : seg_outh1=8b10110000;/34b0100 : seg_outh1=8b10011001;/44b0101 : seg_outh1=8b10010010;/54b0110 : seg_outh1=8b10000010;/64b0111 : seg_outh1=8b11111000;/74b1000 : seg_outh1=8b10000000;/84b1001 : seg_outh1=8b10010000;/9default: seg_outh1=8b10100011;/出错显示endcasealways (seg_in3:0)/低位译码case (seg_in3:0)4b0000 : seg_outl1=8b11000000;4b0001 : seg_outl1=8b11111001;4b0010 : seg_outl1=8b10100100;4b0011 : seg_outl1=8b10110000;4b0100 : seg_outl1=8b10011001;4b0101 : seg_outl1=8b10010010;4b0110 : seg_outl1=8b10000010;4b0111 : seg_outl1=8b11111000;4b1000 : seg_outl1=8b10000000;4b1001 : seg_outl1=8b10010000;default: seg_outl1=8b10100011;endcaseassign seg_outh=seg_outh1;assign seg_outl=seg_outl1;endmodule之后是数码管片选信号的设置和扫描程序,以500hz为扫描频率。代码如下:/trans.vmodule trans(_500hz,led_hr,led_min,sgg,sele);input 7:0 led_hr,led_min;input _500hz;output 7:0 sgg;output 3:0 sele;wire 7:0 sgml,sgmh,sghl,sghh;/经过翻译的段码reg 1:0 count=2b00;/扫描的计数控制wire 3:0 sele;/片选信号wire 7:0 sgg;/输入数码管的输出信号reg 7:0 sg;/数码管段码中间变量reg 3:0 sel=1110;/片选中间变量translate st1(led_hr,sghh,sghl);translate st2(led_min,sgmh,sgml);always (posedge _500hz)case(count)2b00:begin sg=sgml;/选中第一个数码管 sel=4b1110; count=count+1b1;/扫描信号不断加一,从而实现扫描end2b01:begin sg=sgmh;/选中第二个管 sel=4b1101; count=count+1b1;end2b10:begin sg=sghl;/选中第三个管 sel=4b1011;count=count+1b1;end2b11:begin sg=sghh;/选中第四个管 sel=4b0111; count=count+1b1;endendcaseassign sele=sel;/设置片选信号assign sgg=sg;/设置数码管显示信号endmodule6、多功能数字钟顶层模块设计采用图形设计方法,将以上已经写好的各模块都选择create schematic symbol封装成各个器件。名字设置为complete.sch,在这个文件里将各个器件拖出来进行各引脚连线和标记输入输出端口。由于图太小截图看不清楚,只能先给个大概如下:其生成的vf文件如下:/complete.vfmodule complete(xlxn_10, xlxn_15, xlxn_16, xlxn_17, xlxn_19, xlxn_20, xlxn_21, xlxn_33, xlxn_32, xlxn_39, xlxn_40); input xlxn_10; input xlxn_15; input xlxn_16; input xlxn_17; input xlxn_19; input xlxn_20; input xlxn_21; input xlxn_33; output xlxn_32; output 7:0 xlxn_39; output 3:0 xlxn_40; wire xlxn_4; wire xlxn_5; wire 7:0 xlxn_6; wire 7:0 xlxn_7; wire 7:0 xlxn_8; wire xlxn_11; wire 7:0 xlxn_13; wire 7:0 xlxn_14; wire xlxn_22; wire xlxn_24; wire 7:0 xlxn_37; wire 7:0 xlxn_38; freq xlxi_1 (.clk(xlxn_10), ._1hz(xlxn_24), ._1khz(xlxn_4), ._500hz(xlxn_5); radio xlxi_5 (.minute(xlxn_77:0), .second(xlxn_87:0), ._1khz(xlxn_4), ._500hz(xlxn_5), .alarm(xlxn_11); ring xlxi_6 (.ctrring(xlxn_21), .hour(xlxn_67:0), .minute(xlxn_77:0), .second(xlxn_87:0), .sethrkey(xlxn_19), .setminkey(xlxn_20), ._1hz(xlxn_24), ._1khz(xlxn_4), ._500hz(xlxn_5), .alarm_clock(xlxn_22), .set_hr(xlxn_137:0), .set_min(xlxn_147:0); top_clock xlxi_7 (.adjhr(xlxn_16), .adjmin(xlxn_15), .ncr(xlxn_17), ._1hz(xlxn_24), .hour(xlxn_67:0), .minute(xlxn_77:0), .second(xlxn_87:0); mode xlxi_8 (.alarm(xlxn_11), .alarm_clock(xlxn_22), .hour(xlxn_67:0), .minute(xlxn_77:0), .mode(xlxn_33), .second(xlxn_87:0), .set_hr(xlxn_137:0), .set_min(xlxn_147:0), .alarmout(xlxn_32), .led_hr(xlxn_377:0), .led_min(xlxn_387:0); trans xlxi_9 (.led_hr(xlxn_377:0), .led_min(xlxn_387:0), ._500hz(xlxn_5), .sele(xlxn_403:0), .sgg(xlxn_397:0);endmodule7.引脚配置拨码开关sw0对应mode(高电平为闹钟时间,低电平为正常时间),sw1对应sethrkey(高电平有效),sw2对应seyminkey(高电平有效),sw3对应ctrring(高电平有效),sw5对应adjmin(高电平有效),sw6对应adjhr(高电平有效),sw7对应ncr(高电平有效)。alarm_out对应led0。得到的代码如下:#created by constraints editor (xc3s100e-cp132-4) - 2014/12/03net xlxn_10 tnm_net = xlxn_10;timespec ts_xlxn_10 = period xlxn_10 20 ns high 50 %;net xlxn_10 loc = b8;net xlxn_10 iostandard = lvcmos25;net xlxn_15 iostandard = lvcmos25;net xlxn_32 loc = m5;net xlxn_33 loc = p11;net xlxn_19 loc = l3;net xlxn_20 loc = k3;net xlxn_21 loc = b4;net xlxn_17 loc = n3;net xlxn_15 loc = f3;net xlxn_16 loc = e2;net xlxn_397 loc = p6;net xlxn_390 loc = l14;net xlxn_391 loc = h12;net xlxn_392 loc = n14;n

温馨提示

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

评论

0/150

提交评论