基于verilog数字秒表的设计实现Word文件下载.docx
- 文档编号:15407825
- 上传时间:2022-10-30
- 格式:DOCX
- 页数:19
- 大小:133.25KB
基于verilog数字秒表的设计实现Word文件下载.docx
《基于verilog数字秒表的设计实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于verilog数字秒表的设计实现Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
六位BCD七段数码管显示读数,两个按钮开关(一个按钮使秒表复位,另一个按钮控制秒表的启动/暂停)。
3.设计原理
秒表的逻辑结构较简单,它主要由四进制计数器、十六进制计数器、分频器、数据选择器、和显示译码器等组成。
在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需有一个启动信号和一个清零信号,以便秒表能随意停止、启动以及清零复位。
秒表有共有6个输出显示,其中6个显示输出数据,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应;
6个计数器的输出全都为BCD码输出,这样便与同显示译码器连接。
利用一块芯片完成除时钟源,按键和显示器之外的所有数字电路功能。
所有数字逻辑功能都在CPLD器件上用Verilog语言实现。
这样设计具有体积小,设计周期短,调试方便,故障率地和修改升级容易等特点。
本设计采用依次采用以下设计方法:
1)按键输入缓存,键盘消抖设计;
2)分频产生0.01秒信号,产生100HZ的时钟信号设计;
3)数码管动态扫描显示设计;
4)3-8译码器显示(译码)设计;
5)流水线式计数方法设计。
4.设计原理框图
秒表计时器设计原理框图,如图4-1所示。
图4-1秒表计时器设计原理框图
根据设计原理框图4-1,以及设计的要求及目的,可以将VerilogHDL语言设计的秒表计时程序分为四大模块:
1)按键输入缓存,按键消抖模块;
2)分频产生100HZ的时钟信号模块;
3)数码管动态扫描显示驱动模块;
4)计时处理部模块。
5.软件设计
5.1按键输入缓存,按键消抖模块
常在按键较少时可用硬件方法消除抖动,一般采用RS触发器作为常用的消抖电路,如果按键较多时,常用软件消除抖动。
在EDA的设计应用中,软件消抖的方法即可使用
RS
触发器进行消抖,也可通过检测按键按下的时间进行消抖。
5.1.1按键输入缓存,按键消抖程序:
always@(posedgecount[16])
begin
key_inner<
=key;
end
always@(posedgekey_inner[0])
key_flag=~key_flag;
5.1.2键盘消抖工作原理:
设置输入信号key[1:
0],设置一个模值为
4
的控制计数器key_inner,判断计数寄存器count的第16位的上升沿,检测到key_inner为高电平。
由于计数寄存器的位数为18位。
则说明在0.01s内可以检测到4次高电平。
在人工按键key=‘1’时,key_inner为‘1’,如连续
次检测到高电平则key_inner一直为‘1’。
次以上检测到高电平key_inner依旧为‘1’,也一直输出高电平。
这就确保了当按键信号持续高电平0.01s
以上按键信号才有效。
抖动期间的高电平持续时间不足以输出高电平。
如没有连续
次以上检测到高电平,则
key_inner为‘0’。
再判断
key_inner的上升沿(按键按下为下降沿,弹起为上升沿),每当key_inner[0]出现一次上升沿(按键按下并弹起),key_flag将取反一次(设置key_flag的初值为‘0’)。
5.2分频产生100HZ的时钟信号模块
5.2.1分频产生100HZ的时钟信号程序:
always@(posedgeclk)
if(count==249999)
begin
clk_100hz<
=~clk_100hz;
count<
=0;
end
else
count<
=count+1;
分频原理图,如图5-1所示。
图5-1分频原理图
5.2.2分频原理:
由于开发板的输入频率为50MHZ的时钟信号,说明1s产生个时钟信号。
每个时钟信号持续的时间为s,由于秒表计时器的最小单位为0.01s,所以要将50MHZ的时钟信号进行分频,得到100HZ的时钟信号,即0.01s。
5.3数码管动态扫描显示驱动模块
5.3.1数码管动态扫描显示驱动程序:
always@(posedgecount[15])
count3b=count3b+1;
case(count3b)
3'
d5:
dis_dat=hour[3:
0];
d4:
dis_dat=hour[7:
4];
d3:
dis_dat=hour[11:
8];
d2:
dis_dat=hour[15:
12];
d1:
dis_dat=hour[19:
16];
d0:
dis_dat=hour[23:
20];
default:
dis_dat=4'
bxxxx;
endcase
sel=count3b;
always@(dis_dat)
case(dis_dat)
0 :
seg=8'
b1100_0000;
//显示“0”
1 :
b1111_1001;
//显示“1”
2 :
b1010_0100;
//显示“2”
3 :
b1011_0000;
//显示“3”
4 :
b1001_1001;
//显示“4”
5 :
b1001_0010;
//显示“5”
6 :
b1000_0010;
//显示“6”
7 :
b1111_1000;
//显示“7”
8 :
b1000_0000;
//显示“8”
9 :
b1001_0000;
//显示“9”
default:
seg=8'
bxxxxxxxx;
5.3.2数码管动态扫描显示原理:
数码管动态扫描显示表,如表5-1所示。
表5-1数码管动态扫描显示表
六位数码管
xxxx
hour
23:
20
19:
16
15:
11:
8
7:
4
3:
count3b
5
3
2
1
dis_dat
0-9
由于数码管显示一共有6位,计数寄存器共有18位,则判断计数寄存器的第15位的上升沿即可。
则在每0.01s内判断数码管显示判断8次。
每判断一次,确定一次一只七位数码管的显示数字。
由于在0.01s内六只数码管会发生数值上的变化,共有6只数码管,所以只需要判断8次就能确定秒表计时器0.01s秒内的变化。
将hour显示的值赋给显示数据寄存器dis_dat,再判断dis_dat的值,来确定每只数码管显示的数值。
5.4计时处理部模块
5.4.1计时处理程序:
always@(posedgeclk_100hz)
if(~key_inner[1]&
&
key_flag==1)
hour=24'
h0;
elseif(!
key_flag)
begin
hour[3:
0]=hour[3:
0]+1;
if(hour[3:
0]==4'
ha)
hour[3:
0]=4'
hour[7:
4]=hour[7:
4]+1;
if(hour[7:
4]==4'
begin
hour[7:
4]=4'
hour[11:
8]=hour[11:
8]+1;
if(hour[11:
8]==4'
begin
hour[11:
8]=4'
hour[15:
12]=hour[15:
12]+1;
if(hour[15:
12]==4'
h6)
begin
hour[15:
12]=4'
hour[19:
16]=hour[19:
16]+1;
if(hour[19:
16]==4'
begin
hour[19:
16]=4'
hour[23:
20]=hour[23:
20]+1;
end
if(hour[23:
20]==4'
20]=4'
end
end
end
end
5.4.2计时处理原理:
计时器处理流程框图,如图5-2所示。
图5-2计时器处理流程框图
判断复位键用key_flag为启动/暂停的切换标志,判断key_flag是否为‘1’,为‘1’说明计数暂停,为‘0’说明计数开始;
key_inner[1]是输入信号端,按键未按下时,key_inner[1]为‘1’,按下后为‘0’,~key_inner[1]判断为‘1’,则说明,在程序暂停的情况下,控制按键可使秒表计时器清零。
百秒位,十秒位,秒位是十进制计数,十秒位,分位,十分位是6进制计数。
6.实验设计原理图
实验设计原理图,如图6-1所示。
图6-1实验设计原理图
实验设计有三个输入位,key[1:
0]为手动输入端,key[0]为启动/暂停控制键,key[1]是复位控制键。
clk是时钟输入端。
输出分为sel[2:
0]为数码管的位选,实验中共有6只数码管,则可以选择8位的位选。
seg[7:
0]是数码管的段选,将每一位的数字进行显示。
7.心得体会
在将近两周的学习时间内,大致了解了利用VerilogHDL硬件描述语言来编写简单的程序代码。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 verilog 数字 秒表 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)