《EDA模电子时钟设计》由会员分享,可在线阅读,更多相关《EDA模电子时钟设计(26页珍藏版)》请在金锄头文库上搜索。
1、苏州科技学院EDA电子综合设计苏州科技学院天平学院EDA电子综合设计院 系: 专 业: 班 级: 学 号: 姓 名: 第一部分:设计说明1.1设计任务设计一款数字电子时钟,具体要求如下:1:输入条件:50MHz时钟,2个输入按键;2:功能实现:具有显示时、分、秒功能;采用LED数码管显示;具有闹钟与对时功能,对时精确到分,闹钟设置与对时采用按键作为输入信号。3:采用altera公司的quartusII软件进行编程与仿真,设计语言可以选择VerilogHDL或VHDL。1.2目的与意义训练综合运用学过的数字电子技术、数字系统设计技术(HDL硬件设计)和计算机编程及电路相关基本知识,培养独立设计比
2、较复杂数字系统设计能力。通过综合设计,力争掌握使用EDA工具设计数字系统电路的基本方法,包括原理方案的确定、详细设计中的编程与仿真等一系列过程,为以后进行工程实践问题的研究打下设计基础。时钟,自从它发明的那天起,就成为人类的朋友,但随着社会的进步,科技的的发展,人们对它的功能又提出了新的要求,怎样让时钟更好的为人民服务,怎样让我们的老朋 友焕发青春呢?这就要求人们不断设计出新型时钟。现代社会,守时已不仅关系到一个人的职业生涯,还成了衡量一个人道德的标准。时钟为人们提供了科学利用时间规律的依据,然而,普通的机械钟表与半机械钟表对于忙碌的生活显然早已不太适应,设计一款高精度数字时钟势在必行。本课题
3、将通过对目前市场上的数字电子钟的研究,利用EDA技术设计一款高精度数字式电子钟,使人们可以得到精确时间显示,帮助人们合理安排时间,方便人们的生活。第二部分 原理方案设计设计一个多功能数字时钟,具有时分、秒计数显示、闹钟功能。能够利用按键实现对闹钟时间的设定并在当前显示时间到时后能够进行闹钟提示。能够利用按键实现“较时”、“较分”功能,随时对数码管的显示进行校正和校对。数字中系统主要由系统时钟,三个功能按键(mode,turn,change),FPGA,数码管和蜂鸣器部分组成。分频模块计时模块闹钟模块显示模块控制模块蜂鸣器图1多功能数字时钟整体模块图2.1分频模块方案设计分频模块用于为系统的实现
4、提供稳定的工作频率和计时信号源,产生分频为1HZ频率的信号作为计时模块的信号源。分频算法设计:定义变量并根据需要得到的分频信号设定计数值,对该变量进行加或减计数,每到达一次计数值点,将该变量清零或重置,并且对输出信号取一次反,即可以得到所需的分频信号。在这里使用任意分频计数器。定义变量并且设定一个上限值,每次加计数到该上限值时,输出该计数值的最高位。2.2显示模块计时模块是对1s的信号源进行秒计时,计时满后向上进位的设计思想。译码显示模块采用的是数码管的动态扫描方式。2.3控制模块设置三个按键,一个作为功能控制信号,按键每次加一,加到三在归零。为0:计时功能; 为1:闹铃功能; 为2:手动校对
5、功能。 一个按键选择是调整时间,还是分钟,若长时间按住该键,可使秒信号清零,用于精确调时。 一个按键用于手动调整,每按一次,计数器加1,如果长按,则连续快速加1;用于快速调时和定时。第三部分 详细设计过程图2 顶层模块3.1分频模块3.1.1模块功能描述该模块为任意分频计数器,在这里使用了两个分频模块,分别输出4Hz和1Khz的时钟信号。功能:对输入时钟clock进行F_DIV倍分频后输出clk_out。其中F_DIV为分频系数,分频系数范围为12n (n=F_DIV_WIDTH)若要改变分频系数,改变参数F_DIV或F_DIV_WIDTH到相应范围即可。若分频系数为偶数,则输出时钟占空比为5
6、0%;若分频系数为奇数,则输出时钟占空比取决于输入时钟占空比和分频系数(当输入为50%时,输出也是50%)。图3 分频模块div_4hz图4 分频模块div_1k3.1.2模块设计思想定义变量为分频系数,若位偶数,则产生分频系数的一半个时钟周期为高电平,分频系数的一半个时钟周期为低电平;若为奇数,则相应地偏移一个。3.1.3设计关键知识点若分频系数为偶数,则输出时钟占空比为50%;若分频系数为奇数,则输出时钟占空比取决于输入时钟占空比和分频系数(当输入为50%时,输出也是50%)。module div_4hz (clock,clk_out); /I/O口声明inputclock;/输入时钟ou
7、tputclk_out;/输出时钟/内部寄存器regclk_p_r;/上升沿输出时钟reg clk_n_r;/下降沿输出时钟regF_DIV_WIDTH - 1:0 count_p;/上升沿脉冲计数器regF_DIV_WIDTH - 1:0 count_n;/下降沿脉冲计数器/参数-分频系数parameter F_DIV = 12500000;/分频系数-修改这里parameter F_DIV_WIDTH = 32; /分频计数器宽度wire full_div_p;/上升沿计数满标志wire half_div_p;/上升沿计数半满标志wire full_div_n;/下降沿计数满标志wire
8、half_div_n;/下降沿计数半满标志/判断计数标志位置位与否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);/时钟输出assignclk_out = (F_DIV = 1) ? clock : (F_DIV0 ? (clk_p_r & clk_n_r) : clk_p_r);/上升沿脉冲计数always (posedge clock
9、)beginif(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显示模块3.2.1模块功能描述该模块设计为时钟显示模块,一共8个共阳极数码管,显示格式为XX.XX.XX。3.2.2模块设计思想整个时钟的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为023时。由于分钟和秒钟显示的范围都是从059,可以用一个4位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位;对于小时因为他的范围是从023,同样可以用一个4位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。3.2.3设计
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、gin count=count+1b1;endalways (posedge clk_1k )begin case(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
13、= 8b1111_1110; 3d1 : dig = 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=8b1001_1001;4h5:seg=8b0100_1001;4h6:seg=8b0100_