《verilogHDL课设(数字钟)》由会员分享,可在线阅读,更多相关《verilogHDL课设(数字钟)(26页珍藏版)》请在金锄头文库上搜索。
1、课程设计(报告)任务书(理 工 科 类)、课程设计(报告)题目: 实时时钟电路的设计 、课程设计(论文)工作内容一、课程设计目标 硬件描述语言是一门技术性、应用性很强的学科,实验课教学是它的一个极为重要的环节。不论理论学习还是实际应用,都离不开实验课教学。如果不在切实认真地抓好学生的实践技能的锻炼上下功夫,单凭课堂理论课学习,势必出现理论与实践脱节、学习与应用脱节的局面。HDL项目设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及时序逻辑、组合逻辑、声光输出的,具有实用性、趣味性的小系统设计,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对分析、解决实际的数字电路问题
2、进一步加深认识,为今后能够独立进行某些数字应用系统的开发设计工作打下一定的基础。二、课程设计任务与要求(1)设计一个数码管实时显示时、分、秒的数字时钟(24小时显示模式);(2)为了演示方便,应具有分钟、小时快进功能;(3)时、分、秒设置功能(选作)。三、课程设计考核 平时20%;验收40%;报告40%摘 要数字钟是人们日常生活中经常使用的计时工具,本次的课程设计是基于Verilog HDL的多功能数字钟,完成时、分、秒的显示功能。设计利用Verilog HDL语言自顶向下的设计理念,突出其作为硬件描述语言的良好的可读性、可移植性以及易于理解等优点。通过Quartus II 5.0和Model
3、Sim SE 6.1f软件完成仿真、综合。程序下载到FPGA芯片后,可用于实际的数字钟显示中。此次设计的逻辑结构主要由分频器、计数器和译码显示器三个模块构成。分频模块将50Mhz系统基准时钟分频产生两路时钟信号,一路是1HZ的数字钟计时工作频率,一路是数码管动态显示的扫描频率;计时模块对1HZ的时钟信号进行计时,分为时、分、秒三个部分;译码显示模块采用动态扫描的方式完成数码管的显示。最后通过主模块调用三个子模块函数完成整个设计。【关键词】硬件描述语言 FPGA 数字钟 动态显示ABSTRACTThe digital clock is often used in Peoples Daily li
4、fe of the course, the timing tool design is based on the multi-function digital clock Verilog HDL, complete, minutes and seconds display function. Design Verilog HDL language using the top-down design concept, the hardware description language as the good readability and portability and easy to unde
5、rstand, etc. Through the Quartus II 5.0 and ModelSim SE 6.1 f software simulation, and comprehensive. Download to FPGA chips can be used after the actual, digital clock shows.The design of the logic structure consists mainly of prescaler, counter and decoding display three modules. 50Mhz system freq
6、uency module will produce benchmark clock clock signal, two 1HZ way is the digital clock frequency, dynamic display of digital tube is scanning. Timer modules for 1HZ clock signal timing, when into three parts, minutes and seconds, Decode display module USES dynamic scanning of the digital display.
7、Through the main module calling three modules function complete the whole design.【Key words】Hardware description language FPGA A digital clock Dynamic display目录第一章 系统设计6第一节 课题目标及总体方案6第二节 系统模块实现方案对比及实现7一、分频模块实现方案7二、计时模块实现方案9三、译码显示模块的实现16第三节 系统及各模块方框图说明19第二章 结果与讨论22第一节 调试现象及解决分析22一、编写程序过程中出现的语法问题22二、方
8、案实现过程中出现的问题22第二节 相关数据分析24第三节 系统整体实现24心得体会25参考文献26附 录27第一章 系统设计第一节 课题目标及总体方案目前,电子系统向集成化、大规模和高速度等方向发展,以硬件描述语言和逻辑综合为基础的自顶向下的电路设计方法得到迅猛发展。本次设计课题目标完成是基于Verilog HDL语言的多功能数字钟的设计,通过数码管实时显示时、分、秒,具有小时和分钟快进功能。设计遵循Verilog HDL语言的设计理念,代码具有良好的可读性和易理解性。系统主要分三个模块实现,分别是分频模块、计数模块、译码显示模块。分频模块用来提供计时电路工作时钟(1HZ)和数码管动态显示的扫
9、描频率(200HZ500HZ),计数模块是对1s信号源进行秒、分、时的计时,译码显示模块是通过控制信号控制八个数码管的位选、段选来实现对译码后的计时信号进行动态显示。主函数通过调用三个子模块来实现整体的系统功能。第二节 系统模块实现方案对比及实现一、分频模块实现方案分频模块用于为系统的实现提供稳定的工作频率和计时信号源,要求产生两路不同频率的信号,分频为1HZ频率的信号作为计时模块的信号源,200HZ的信号用于数码管动态显示的扫描频率。方案一:定义变量并根据需要得到的分频信号设定计数值,对该变量进行加或减计数,每到达一次计数值点,将该变量清零或重置,并且对输出信号取一次反,即可以得到所需的分频
10、信号。parameter C_COUNT=25d500_00_000;/定义变量C_COUNT并给该变量设定计数值点always (posedge clock) beginif(counter=0)begincounter=C_COUNT;/减计数到0后对该变量进行重置clkdiv=clkdiv; /对输出信号取反一次endelsecounter=counter-1; /对变量减计数end方案二:定义变量并且设定一个上限值,每次加计数到该上限值时,输出该计数值的最高位parameter DIV_SIZE=25;always(posedge clock)counter=counter+1;ass
11、ign clkdiv=counterDIV_SIZE-1;方案比较:方案二能够产生准确的1HZ的频率且在程序实现上较为简单,但在产生数码管动态显示的扫描频率时可调度不如方案一,即在调节200HZ-500HZ范围内的频率时DIV_SIZE变量的值不便于计算;方案一实现分频信号的设计思路简单易懂,且变量值易于计算和调节。故采用方案一。分频模块的实现: module clkgen (clock,clkdiv,clk500);input clock;output clkdiv;output clk500;reg 31:0 counter1;reg clkdiv;reg clk500;reg 31:0
12、counter0;parameter C_COUNT0=25d500_00_000;/变量0用于产生1HZ的信号parameter C_COUNT1=25d100_000;/变量1用于产生500HZ的信号/*产生1HZ频率的信号*/always (posedge clock)beginif(counter0=0)begincounter0=C_COUNT0;clkdiv=clkdiv;endelsecounte0=counter0-1;end/*产生500HZ频率的信号*/always (posedge clock)beginif(counter1=0)begincounter1=C_COUN
13、T1;clk500=clk500;endelsecounter1=counter1-1;endendmodule在该程序段中,只要更改变量counter的值,就可以改变输出频率。适当调节counter1的值,使得数码管动态显示在一个最佳的显示状态。变量counter的计算方法是:已知所需要的频率,根据公式(counter值=系统基准频率/所需频率)即可求得变量值。二、计时模块实现方案 计时模块是对1s的信号源进行秒计时,计时满后向上进位的设计思想 方案一:计时采用十进制数计时,然后分别对时、分、秒三个数进行取余数、取除数,分别得到三个数的高位和低位always(posedge clkdiv or negedge reset)begin if(!reset)/判断是否为复位信号 begin cnth=8d0; /将小时信号清零 hH=cnth/10; /取除操作求得小时信号的高位 hL=cnth%10; /取余操作求得小时信号的低位 cntm=8d0; mH=cntm/10; mL=cntm%10; cnts=8d0; sH=cnts/10; sL=cnts%10; end else begin if(cnts=59) /判断秒钟信号是否计满 begin begin cnts=8d0; /秒信号清零