EDA模电子时钟设计0001_第1页
EDA模电子时钟设计0001_第2页
EDA模电子时钟设计0001_第3页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、苏州科技学院天平学院EDA电子综合设计院 系:专 业:班 级:学 号:姓 名:第一局部:设计说明1.1 设计任务设计一款数字电子时钟,具体要求如下:1:输入条件:50MHz时钟,2个输入按键;2:功能实现:具有显示时、分、秒功能;采用LED数码管显示;具有闹钟与对时功能,对时精确到分,闹钟设置与对时采用按键作为输入信号。3:采用 altera 公司的 quartusII 软件进行编程与仿真,设计语言可以选择 VerilogHDL 或 VHDL。1.2 目的与意义训练综合运用学过的数字电子技术、数字系统设计技术HDL 硬件设计 和计算机编程及电路相关根本知识,培养独立设计比拟复杂数字系统设计能力

2、。通过综合设计, 力争掌握使用 EDA 工具设计数字系统电路的根本方法, 包括原理方案的 确定、详细设计中的编程与仿真等一系列过程,为以后进行工程实践问题的研究打下设计基 础。时钟,自从它创造的那天起,就成为人类的朋友,但随着社会的进步,科技的的开展, 人们对它的功能又提出了新的要求, 怎样让时钟更好的为人民效劳, 怎样让我们的老朋 友焕 发青春呢?这就要求人们不断设计出新型时钟。现代社会,守时已不仅关系到一个人的职业生涯,还成了衡量一个人道德的标准。时钟 为人们提供了科学利用时间规律的依据,然而,普通的机械钟表与半机械钟表对于忙碌的生 活显然早已不太适应,设计一款高精度数字时钟势在必行。本课

3、题将通过对目前市场上的数 字电子钟的研究,利用EDA技术设计一款高精度数字式电子钟,使人们可以得到精确时间显 示, 帮助人们合理安排时间,方便人们的生活。第二局部原理方案设计设计一个多功能数字时钟,具有时分、秒计数显示、闹钟功能。能够利用按键实现对闹钟时间的设定并在当前显示时间到时后能够进行闹钟提示。能够利用按键实现“较时、“较分功能,随时对数码管的显示进行校正和校对。数字中系统主要由系统时钟,三个功能按 键mode,turn,change, FPGA,数码管和蜂鸣器局部组成。数码管T显示模块0 n二计时模块闹钟模块ATT控制模块图i多功能数字时钟整体模块图2.1分频模块方案设计分频模块用于为

4、系统的实现提供稳定的工作频率和计时信号源,产生分频为1HZ频率的信号作为计时模块的信号源。分频算法设计:定义变量并根据需要得到的分频信号设定计数值,对该变量进行加或减 计数,每到达一次计数值点,将该变量清零或重置,并且对输出信号取一次反,即可以得到 所需的分频信号。在这里使用任意分频计数器。定义变量并且设定一个上限值,每次加计数到该上限值时, 输出该计数值的最高位。2.2显示模块计时模块是对1s的信号源进行秒计时,计时满后向上进位的设计思想。译码显示模块采 用的是数码管的动态扫描方式。2.3 控制模块 设置三个按键,一个作为功能控制信号,按键每次加一,加到三在归零。为0:计时功能; 为 1:闹

5、铃功能 ; 为 2:手动校对功能。一个按键选择是调整时间,还是分钟,假设长时间按住该键,可使秒信号清零,用于精确 调时。一个按键用于手动调整,每按一次,计数器加 1,如果长按,那么连续快速加 1;用于快速 调时和定时。第三局部 详细设计过程图 2 顶层模块3.1 分频模块该模块为任意分频计数器,在这里使用了两个分频模块,分别输出4Hz和1Khz的时钟信 号。功能:对输入时钟clock进行F_DIV倍分频后输出clk_out。其中F_DIV为分频系数, 分频系数范围为12An n=F_DIV_WIDTH假设要改变分频系数,改变参数F_DIV或F_DIV_WIDTH 到相应范围即可。假设分频系数为

6、偶数,那么输出时钟占空比为50%;假设分频系数为奇数,那么输出时钟占空比取决于输入时钟占空比和分频系数当输入为50%时,输出也是 50%。图 3 分频模块 div_4hz图 4 分频模块 div_1k定义变量为分频系数,假设位偶数,那么产生分频系数的一半个时钟周期为高电平,分频系数的一半个时钟周期为低电平;假设为奇数,那么相应地偏移一个。假设分频系数为偶数,那么输出时钟占空比为50%;假设分频系数为奇数,那么输出时钟占空比取决于输入时钟占空比和分频系数当输入为50%时,输出也是 50%。module div_4hz (clock,clk_out); /I/O口声明input clock;/输入

7、时钟output clk_out;/输出时钟/ 内部存放器reg clk_p_r;/ 上升沿输出时钟reg clk_n_r;/下降沿输出时钟regF_DIV_WIDTH - 1:0 count_p;/ 上升沿脉冲计数器regF_DIV_WIDTH - 1:0 count_n;/ 下降沿脉冲计数器/ 参数- 分频系数/ 分频系数 修改这里parameter F_DIV_WIDTH = 32;/ 分频计数器宽度wire full_div_p;/上升沿计数满标志wire half_div_p;/上升沿计数半满标志wire full_div_n;/下降沿计数满标志wire half_div_n; /

8、下降沿计数半满标志/ 判断计数标志位置位与否assign full_div_p = (count_p F_DIV - 1); assign half_div_p = (count_p 1) - 1);assign full_div_n = (count_n F_DIV - 1); assign half_div_n = (count_n 1) - 1);/ 时钟输出assign clk_out = (F_DIV = 1) ?clock : (F_DIV0 ? (clk_p_r & clk_n_r) : clk_p_r); / 上升沿脉冲计数 always (posedge clock)begi

9、nif(full_div_p)begincount_p = count_p + 1b1;if(half_div_p)clk_p_r = 1b0;elseclk_p_r = 1b1;endelsebegincount_p = 0; clk_p_r = 1b0;endend/ 下降沿脉冲计数 always (negedge clock) beginif(full_div_n)begincount_n = count_n + 1b1;if(half_div_n)clk_n_r = 1b0;elseclk_n_r = 1b1;endelsebegincount_n = 0;clk_n_r = 1b0;

10、endendendmodule3.2 显示模块该模块设计为时钟显示模块,一共 8 个共阳极数码管,显示格式为。整个时钟的工作应该是在 1Hz 信号的作用下进行, 这样每来一个时钟信号, 秒增加 1 秒, 当秒从 59 秒跳转到 00 秒时,分钟增加 1 分,同时当分钟从 59 分跳转到 00 分时,小时增加 1 小时,小时的范围为 023 时。由于分钟和秒钟显示的范围都是从 059,可以用一个 4 位的二进制码显示十位,用一个 四位的二进制码( BCD 码)显示个位;对于小时因为他的范围是从 023,同样可以用一个 4 位的二进制码显示十位,用一个 4位的二进制码( BCD 码)显示个位。 由

11、于动态扫描,需要一个频率较高的时钟信号用于刷新显示。送入显示的数上下 4 位别离开 来,分别用于显示十位和个位。图 5 显示模块 scan_ledmodule scan_led(clk_1k,dig,seg,hourh,hourl1,minh,minl1,sech,secl1);input clk_1k;input3:0 hourh,hourl1,minh,minl1,sech,secl1;output7:0dig;output7:0seg;reg7:0dig;reg7:0seg;reg3:0dataout_buf;reg2:0count;always (posedge clk_1k ) be

12、gincount=count+1b1;endalways (posedge clk_1k )begincase(count)3d0 :dataout_buf = secl1;3d1 :dataout_buf= sech;3d2 :dataout_buf= 4ha;3d3 :dataout_buf = minl1;3d4 :dataout_buf= minh;3d5 :dataout_buf = 4ha;3d6 :dataout_buf= hourl1;3d7 :dataout_buf = hourh;endcasecase(count)3d0 :dig = 8b1111_1110;3d1 :d

13、ig = 8b1111_1101;3d2 :dig = 8b1111_1011;3d3 :dig = 8b1111_0111;3d4 :dig = 8b1110_1111;3d5 :dig = 8b1101_1111;3d6 :dig = 8b1011_1111;3d7 :dig = 8b0111_1111;endcaseendalways(dataout_buf) begincase(dataout_buf)4h0:seg=8b0000_0011;4h1:seg=8b1001_1111;4h2:seg=8b0010_0101;4h3:seg=8b0000_1101; 4h4:seg=8b10

14、01_1001;4h5:seg=8b0100_1001;4h6:seg=8b0100_0001;4h7:seg=8b0001_1111;4h8:seg=8b0000_0001;4h9:seg=8b0000_1001;4ha:seg=8b1111_1101;endcaseendendmodule3.3 时钟控制模块该模块设计为多功能数字钟的控制模块。 各信号引脚功能定义为:mode功能控制信号;为0:计时功能; 为1:闹铃功能;为2:手动校对功能;turn :在手动校对时,选择是调整时间,还是分钟,假设长时间按住该键,可使秒信号清 零,用于精确调时;change:手动调整时,每按一次,计数器加1

15、,如果长按,那么连续快速加1;用于快速调 时和定时;hour,min, sec:时,分,秒显示信号;alert :扬声器驱动信号;用于产生闹铃音和报时音;闹铃音为持续 20秒的急促的“嘀 嘀嘀音,假设按住“ change键,可屏蔽该闹铃音;整点报时音为“嘀嘀嘀嘀嘟四短一长 音;LD_alert :接发光二极管,指示是否设置了闹钟功能;LD_hour:接发光二极管,指示当前调整的是小时信号;LD_min: 接发光二极管,指示当前调整的是分钟信号。mode按键每触发一次,定义一个变量 m自加,从0加到2;加满2,重新置为0。用case语 句产生 3 种模式。图 6 时钟模块 clock1modul

16、e clock(clk,clk_1k,mode,change,turn,alert,hourh,hourl1,minh,minl1,sech,secl1, LD_alert,LD_hour,LD_min);input clk,clk_1k,mode,change,turn;output alert,LD_alert,LD_hour,LD_min;output3:0 hourh,hourl1,minh,minl1,sech,secl1;reg7:0 hour,min,sec,hour1,min1,sec1,ahour,amin;reg1:0 m,fm,num1,num2,num3,num4;re

17、g1:0 loop1,loop2,loop3,loop4,sound;reg LD_hour,LD_min;reg clk_1Hz,clk_2Hz,minclk,hclk;reg alert1,alert2,ear;reg count1,count2,counta,countb;wire ct1,ct2,cta,ctb,m_clk,h_clk;always (posedge clk)beginclk_2Hz=clk_2Hz;if(sound=3) begin sound=0; ear=1; endelsebegin sound=sound+1; ear=0; endend / ear 信号用于

18、产生或屏蔽声音always (posedge clk_2Hz) /由 4HZ 的输入时钟产生 1HZ 的时基信号 clk_1Hz=clk_1Hz;always (n egedge mode) / modd言号控制系统在三种功能间的转换beginif(m=2)m=0;else m=m+1;endalways (negedge turn) /产/ 生 count1, count1 , count a , countb 四个信号fm=fm;alwaysbegincase(m)2: begin if(!fm)begin count1=!change; LD_min,LD_hour=2; end els

19、ebegin counta=!change; LD_min,LD_hour=1; end count2,countb=0;end1: begin if(!fm)begin count2=!change; LD_min,LD_hour=2; end elsebegin countb=!change; LD_min,LD_hour=1; end count1,counta=2b00;enddefault: count1,count2,counta,countb,LD_min,LD_hour=0; endcaseendalways (negedge clk) if(count2) begin if(

20、loop1=3) num1=1;elsebegin loop1=loop1+1; num1=0; end end else begin loop1=0; num1=0; end always (negedge clk) if(countb) begin if(loop2=3) num2=1;else begin loop2=loop2+1; num2=0; end endelse begin loop2=0; num2=0; end always (negedge clk) if(count1) begin if(loop3=3) num3=1;elsebegin loop3=loop3+1;

21、 num3=0; endendelse begin loop3=0; num3=0; end always (negedge clk) if(counta) begin if(loop4=3) num4=1;elsebegin loop4=loop4+1; num4=0; endendelse begin loop4=0; num4=0; end assign ct1=(num3&clk)|(!num3&m_clk); assign ct2=(num1&clk)|(!num1&count2);assign cta=(num4&clk)|(!num4&h_clk);assign ctb=(num

22、2&clk)|(!num2&countb); always (posedge clk_1Hz)if(!(secM8h59)|(!tum)&(!m)beginsec1=0; if(!(!turn)&(!m) minclk=1;endelse begin if(sec13:0=4b1001)endbegin sec13:0=4b0000; sec17:4=sec17:4+1; else sec13:0=sec13:0+1; minclk=0;endassign m_clk=minclk|count1;always (posedge ct1)beginif(min1=8h59) begin min1

23、=0; hclk=1; endelse beginif(min13:0=9)begin min13:0=0; min17:4=min17:4+1; endelse min13:0=min13:0+1; hclk=0;endendassign h_clk=hclk|counta;always (posedge cta) if(hour1=8h23) hour1=0;else if(hour13:0=9)begin hour17:4=hour17:4+1; hour13:0=0; end else hour13:0=hour13:0+1;always (posedge ct2) if(amin=8

24、h59) amin=0;else if(amin3:0=9)begin amin3:0=0; amin7:4=amin7:4+1; end else amin3:0=amin3:0+1;always (posedge ctb) if(ahour=8h23) ahour=0;else if(ahour3:0=9)begin ahour3:0=0; ahour7:4=ahour7:4+1; end else ahour3:0=ahour3:0+1;always if(min1=amin)&(hour1=ahour)&(amin|ahour)&(change) if(sec18h20) alert1=1;else alert1=0; else alert1=0; always case(m)3b00:beginhour=hour1;min=min1;sec=sec1;end3b01:beginhour=ahour;min=amin;sec=8hzz;end3b10:beginhour=hour1;min=min1;sec8h54)|(!(min1|sec1)if(sec18h54) alert2=ear&

温馨提示

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

评论

0/150

提交评论