基于VerilogHDL设计的定时器系统.docx
《基于VerilogHDL设计的定时器系统.docx》由会员分享,可在线阅读,更多相关《基于VerilogHDL设计的定时器系统.docx(19页珍藏版)》请在冰豆网上搜索。
![基于VerilogHDL设计的定时器系统.docx](https://file1.bdocx.com/fileroot1/2022-10/26/c07d9ce3-9eae-4aef-912c-44a6d0a8f7f6/c07d9ce3-9eae-4aef-912c-44a6d0a8f7f61.gif)
基于VerilogHDL设计的定时器系统
基于Verilog-HDL设计的定时器系统
基于VerilogHDL设计的数字时钟
设计报告
课题名称:
数字时钟设计
学校:
南通大学
学院:
电子信息学院
姓名:
杜轶群
学号:
0911002133
班级:
集成092
日期:
2012年6月25日
第一节引言......................................................3
1.1概述...........................................................3
1.2本设计的任务和主要功能.........................................3
第二节系统功能介绍...............................................3
2.1系统总述.......................................................3
2.2系统设计.......................................................42.3主要模块.......................................................4
2.3.1分频校时模块.................................................4
2.3.2半点整点报时模快.............................................5
2.3.3计数器模块...................................................5
2.3.4显示模块.....................................................8
第三节仿真验证...................................................9
3.1仿真...........................................................9
3.2设备选择.......................................................9
3.3引脚绑定......................................................10
3.4硬件验证......................................................10
第四节课程设计总结..............................................10
附录.............................................................11
块,半点整点报时模块,计数器模块和显示模块。
其中分频校时模块是对外部来的50Hz的频率进行转化。
半点整点报时模块则是在分钟显示为0和30的时候,分别亮红LED0和绿LED0。
计数器模块则是对时分秒的逻辑定义和计数。
显示模块则包括数码管译码和将OUT0到OUT6显示到数码管上。
设计时可将外部的时钟信号clock输入进分频模块,此时系统通过分频将输出控制信号div,以控制秒位。
而秒位产生的进位信号mt则能够控制分位。
分位的进位信号nt又能控制时位,这样就形成了电子时钟。
在计数的同时将时分秒每位输出送到译码器。
译码器模块可对输入的四位进行译码,在6个七段数码管上显示出来。
reset:
当该键为高时,校时为00:
00:
00;
key:
用key键快速的校时。
s1:
半点报时,半点时自动控制LED灯亮;
s2:
整点报时,整点时自动控制LED灯亮;
七段数码管用于显示定时数字。
2.3主要模块
2.3.1分频校时模块
系统所给clock是50MHZ,将其分频为1HZ,即周期为1S,用于计数。
当key键为1时,输出的div的频率增加到10倍,由此可以进行校时。
always@(posedgeclock)//分频校时
begin
if(key)
begin
if(count==2500000)begindiv<=1;count<=count+1;end
elseif(count==5000000)begindiv<=0;count<=0;end
elsecount<=count+1;
end
else
begin
if(count==25000000)begindiv<=1;count<=count+1;end
elseif(count==50000000)begindiv<=0;count<=0;end
elsecount<=count+1;
end
end
输出一个div信号对下面的计数模块进行控制。
2.3.2半点整点报时模块
always@(posedgediv)
begin
begin
if(min==30)//当半点时s1等于1,红LED0亮
s1<=1;
else
s1<=0;
end
begin
if(min==0)//当整点时s2等于1,绿LED0亮
s2<=1;
else
s2<=0;
end
end
2.3.3计数器模块
用分频模块中的div信号,对计数部分进行控制。
当sec达到59时,产生一个进位信号mt,来控制分钟部分,如果reset为1时,则对秒位进行清零。
//秒位计数
always@(posedgedivorposedgereset)
if(reset==1)
sec<=0;
else
begin
if(sec==59)
begin
sec<=0;//秒为60进制计数器
tun<=1;//每60秒产生一个进位信号tun
end
else
begin
sec<=sec+1;
tun<=0;//进位信号置0
end
end
assignmt=tun;//生成分的控制信号
用秒位模块中来的进位信号mt,对分位部分进行控制。
当min达到59时,产生一个进位信号nt,来控制时位部分,如果reset为1时,则对分位进行清零。
//分位计数
always@(posedgemtorposedgereset)
if(reset==1)
min<=0;
else
begin
if(min==59)//分钟为60进制计数器
begin
min<=0;
mod<=1;
s2<=mod;//每60分产生一个小时的进位
end
else
begin
min<=min+1;
mod<=0;
s2<=mod;//分钟向小时的进位信号置0
end
if(min==30)
s1<=1;
else
s1<=0;
end
assignnt=mod;//生成时的控制信号
用分位模块中来的进位信号nt,对时位部分进行控制。
如果reset为1时,则对时位进行清零。
//时位计数
always@(posedgentorposedgereset)
if(reset==1)
hou<=0;
else
begin
if(hou==24)//小时为24进制计数器
hou<=0;
else
hou<=hou+1;
end
2.3.4显示模块
通过译码显示,在clock或reset的上升沿时将信号输出到数码管上。
六个译码器,分别代表小时分钟秒数的高位和地位,hou2小时的高位为0~2,hou1小时的低位为0~4,min2分钟的高位为0~5,min1分钟的低位为0~9,sec2秒数的高位为0~5,sec2秒数的低位为0~9。
下面以小时的高位为例:
//译码输出模块
always@(posedgedivorposedgereset)
begin//数码管译码显示
case(sec1)
4'b0000:
out1<=~7'b0111111;//0,3F
4'b0001:
out1<=~7'b0000110;//1,06
4'b0010:
out1<=~7'b1011011;//2,5B
4'b0011:
out1<=~7'b1001111;//3,4F
4'b0100:
out1<=~7'b1100110;//4,66
4'b0101:
out1<=~7'b1101101;//5,6D
4'b0110:
out1<=~7'b1111101;//6,7D
4'b0111:
out1<=~7'b0000111;//7,07
4'b1000:
out1<=~7'b1111111;//8,7F
4'b1001:
out1<=~7'b1101111;//9,6F
default:
out1<=~7'b0111111;//0,3F
endcase
end
第三节仿真验证
3.1仿真
从这张图我们可以看到时钟从00:
00:
00,开始计时,当reset出现高电平时,时钟回零。
当reset不为高电平时,则正常计数。
3.2设备选择
3.3引脚绑定
3.4硬件验证
将verilog源程序文件下载到DE2开发板进行硬件验证,完成检测和调试。
截图如下:
第四节课程设计总结
两个星期的Verilog课程设计结束了。
在这两个星期的设计中,我学到了很多东西。
这次课程设计是第一次每人一道题目,一个班里的同学无一重复。
所以自从选过题目大家都开始了紧张的工作,在各论坛、图书馆、中文数据库查找资料后,最终确立了设计思路。
整个过程现在总结起来遇到了许多困难,但正是这些困难。
比如在计数模块的设计部分,出现过时钟不能显示和显示错误的问题,出现了两次,第一是因为外部输入的时钟信号clock没有成功的加到分频器上;第二是因为逻辑上的错位,进行复位是没有把寄存器里的值进行清零。
另外还有校数模块的功能的实现,在老师的指导之下,也终于完成了。
我选择了不同的方法去实现,比如分频的话因为输入时50Hz的信号,所以对分频器进行设置分频初值后将外部的信号转化为1Hz的信号div。
输出部分则要用到译码器,因为时钟模块的信号是数字,并不是对七段数码管的控制信号,这是我们就要注意这里用到的共阳极的七段数码管。
当然不止这些,在设计过程中和仿真过程中许多步骤都让我印象深刻、记忆犹新。
最终的设计成功让我的编程和使用Quartus软件的能力大为提高,这对于我来说是一笔宝贵的财富。
当今电子技术飞速发展,而其核心已日趋接近EDA设计,所以学好EDA设计对我们来说非常重要。
这次课程设计给我一个拓展的平台,值得欣慰的是当遇到了不同种类的问题,我学会了怎样解决问题、怎样寻找解决问题的方法。
参考文献
[1]张明《VerilogHDL实用教程》[M]成都:
电子科技大学出版社,1999
[2]HydeDC.BucknellHandbookonVerilogHDLComputerScienceDepartment,BucknellUniversityLewisburg,1995
[3]康华光《电子技术基础(数字