1、基于verilog数字秒表的设计实现生产实习报告生产实习报告班级:通信13-2班姓名:闫振宇学号:1306030222成绩:电子与信息工程学院信息与通信工程系基于 verilog 数字秒表的设计实现1.概述硬件描述语言 HDL ( HardwareDescription Langyage) 是一种用形式化方法来描述数字 电路和系统的语言。 数字电路系统的设计这里用这种语言可以从上层倒下层逐层描述自设 计思想用一系列分层的模块来表示极其复杂的数字系统,然后用 EDA 工具逐层验证,把 其中需要为具体物理电路的模块组合由自动综合工具转换到门级电路网表。 Verilog HDL 是一种硬件描述语言,
2、 用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。 被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。 数字系统 能够按层次描述, 并可在相同描述中显式地进行时序建模。 使用 VERILOG 进行系统设计 时采用的是从顶至下的设计, 自顶向下的设计是从系统机开始巴西同划分为若干个基本单 元,然后再把每个单元划分为下一层的基本单元,这样下去直到可以直接用 EDA 元件库 中的基本元件来实现为止。2.设计目的及要求a.有源晶振频率: 50MHZ ;b.测试计时范围: 00 00” 00 59 ,59显”示9的9 最长时间为 59 分 59 秒;c.数字秒表的计时精度
3、是 10ms;d.显示工作方式:六位 BCD 七段数码管显示读数,两个按钮开关(一个按钮使秒表 复位,另一个按钮控制秒表的启动 /暂停)。3.设计原理 秒表的逻辑结构较简单,它主要由四进制计数器、十六进制计数器、分频器、数据选 择器、和显示译码器等组成。在整个秒表中最关键的是如何获得一个精确的 100HZ 计时 脉冲,除此之外,整个秒表还需有一个启动信号和一个清零信号,以便秒表能随意停止、 启动以及清零复位。秒表有共有 6个输出显示,其中 6个显示输出数据,分别为百分之一秒、 十分之一秒、 秒、十秒、分、十分,所以共有 6 个计数器与之相对应; 6 个计数器的输出全都为 BCD 码输出,这样便
4、与同显示译码器连接。利用一块芯片完成除时钟源, 按键和显示器之外的所有数字电路功能。 所有数字逻辑 功能都在 CPLD 器件上用 Verilog 语言实现。这样设计具有体积小,设计周期短,调试方便,故障率地和修改升级容易等特点。本设计采用依次采用以下设计方法:1) 按键输入缓存,键盘消抖设计;2) 分频产生0.01秒信号,产生100HZ的时钟信号设计;3) 数码管动态扫描显示设计;4) 3-8译码器显示(译码)设计;5) 流水线式计数方法设计。4.设计原理框图秒表计时器设计原理框图,如图4-1所示。图4-1秒表计时器设计原理框图根据设计原理框图4-1,以及设计的要求及目的,可以将 Verilo
5、g HDL语言设计的秒 表计时程序分为四大模块:1) 按键输入缓存,按键消抖模块;2) 分频产生100HZ的时钟信号模块;3) 数码管动态扫描显示驱动模块;4) 计时处理部模块。5.软件设计5.1按键输入缓存 , 按键消抖模块 常在按键较少时可用硬件方法消除抖动,一般采用 RS 触发器作为常用的消抖电路, 如果按键较多时,常用软件消除抖动。在 EDA 的设计应用中,软件消抖的方法即可使 用 RS 触发器进行消抖,也可通过检测按键按下的时间进行消抖。5.1.1按键输入缓存,按键消抖程序:always(posedge count16)beginkey_inner=key;endalways(pos
6、edge key_inner0)beginkey_flag=key_flag;end5.1.2键盘消抖工作原理:设置输入信号key1:0,设置一个模值为4的控制计数器key_inner,判断计数寄存器 cou nt的第16位的上升沿,检测到key_i nner为高电平。由于计数寄存器的位数为 18位。 则说明在0.01s内可以检测到4次高电平。在人工按键key= 1,key_inner为1,如连续4次检测到高电平则key_inner直 为。4次以上检测到高电平key_inner依旧为 1,也一直输出高电平。这就确保了当按 键信号持续高电平 0.01s 以上按键信号才有效。抖动期间的高电平持续时
7、间不足以输出高 电平。如没有连续4次以上检测到高电平,贝U key_inner为 0再判断 key_inner 的上升沿(按键按下为下降沿,弹起为上升沿),每当 key_inner0 出现一次上升沿 (按键按下并弹起) , key_flag 将取反一次 (设置 key_flag 的初值为 0)。 5.2分频产生100HZ的时钟信号模块5.2.1分频产生100HZ的时钟信号程序:always(posedge clk)beg inif(cou nt=249999)beg inclk_100hz=clk_100h z;coun t=0;endelsecoun t=co un t+1;end分频原理图
8、,如图5-1所示。clklOGhz图5-1分频原理图5.2.2分频原理:由于开发板的输入频率为50MHZ的时钟信号,说明1s产生5 107个时钟信号。每个时钟信号持续的时间为爲S,由于秒表计时器的最小单位为0.01S所以要将50MHZ的时钟信号进行5 105分频,得到100HZ的时钟信号,即0.01s。5.3数码管动态扫描显示驱动模块5.3.1数码管动态扫描显示驱动程序:always(posedge coun t15)beg incou nt3b=cou nt3b+1; case(co un t3b) 3d5:dis_dat=hour3:0; 3d4:dis_dat=hour7:4; 3d3:
9、dis_dat=hour11:8;3d2:dis_dat=hour15:12;3d1:dis_dat=hour19:16;3d0:dis_dat=hour23:20; default:dis_dat=4bxxxx;endcasesel=co un t3b;endalways(dis_dat)beg inseg = 8b1100_0000;显示“ 0” seg = 8b1111_1001;显示 “1” seg = 8b1010_0100;/显示“ 2” seg = 8b1011_0000;/显示“ 3” seg = 8b1001_1001;/显示“ 4” seg = 8b1001_0010;/显
10、示“ 5” seg = 8b1000_0010;/显示“ 6”case(dis_dat)01234567: seg = 8b1111_1000;显示“ 7”8: seg = 8b1000_0000;/显示“ 8”9: seg = 8b1001_0000;/显示 “9”default:seg = 8bxxxxxxxx;endcaseend532数码管动态扫描显示原理:数码管动态扫描显示表,如表5-1所示。表5-1数码管动态扫描显示表六位数码管xxxxxxxxxxxxxxxxxxxxxxxxhour23:2019:1615:1211:87:43:0coun t3b543210dis dat0-90
11、-90-90-90-90-9由于数码管显示一共有6位,计数寄存器共有18位,则判断计数寄存器的第15位的上升沿即可。则在每0.01s内判断数码管显示判断8次。每判断一次,确定一次一只七位 数码管的显示数字。由于在0.01s内六只数码管会发生数值上的变化,共有 6只数码管, 所以只需要判断8次就能确定秒表计时器0.01s秒内的变化。将hour显示的值赋给显示数据寄存器 dis_dat,再判断dis_dat的值,来确定每只数码 管显示的数值。5.4计时处理部模块5.4.1计时处理程序:always(posedge clk_100hz)beg inif(key_i nn er1&key_flag=1
12、)beg inhour=24h0;endelse if(!key_flag)beginhour3:0=hour3:0+1;if(hour3:0=4ha)beginhour3:0=4h0;hour7:4=hour7:4+1;if(hour7:4=4ha)beginhour7:4=4h0; hour11:8=hour11:8+1; if(hour11:8=4ha) beginhour11:8=4h0; hour15:12=hour15:12+1; if(hour15:12=4h6) beginhour15:12=4h0; hour19:16=hour19:16+1; if(hour19:16=4h
13、a) beginhour19:16=4h0; hour23:20=hour23:20+1; end if(hour23:20=4h6)hour23:20=4h0;endendendendendend542 计时处理原理:判断复位键用key_flag为启动/暂停的切换标志,判断key_flag是否为,为说明 计数暂停,为 0说明计数开始;key_i nn er1是输入信号端,按键未按下时,key_i nn er1 为,按下后为Qkey_inner1判断为,则说明,在程序暂停的情况下,控制按键可 使秒表计时器清零。百秒位,十秒位,秒位是十进制计数,十秒位,分位,十分位是 6进制计数。6.实验设计原
14、理图实验设计原理图,如图6-1所示。led onkey1.Oelksel2.O X;Iseg7-.O 乂inst图6-1实验设计原理图实验设计有三个输入位,key1:0为手动输入端,key0为启动/暂停控制键,key1是 复位控制键。clk是时钟输入端。输出分为sel2:0为数码管的位选,实验中共有 6只数码 管,则可以选择8位的位选。seg7:0是数码管的段选,将每一位的数字进行显示。7心得体会在将近两周的学习时间内,大致了解了利用 Verilog HDL硬件描述语言来编写简单的程序代码。并对所编写的程序结合开发板得以实现, 对所编写的程序进行仿真得到了理论值,结合开发板得到了实际结果。在学
15、习的过程中,要了解一种新语言,要了解这种语言 的语法结构,书写格式,特殊语句实现的操作等。在老师的指导下,在比较紧的时间内学 习了 FPGA利用Verilog语言编写程序的流程以及 QuartusH软件的使用方法及操作。学到 了很多的知识,也看到了软件的强大的功能。在整个的学习过程中,有过疑问,在编写中 出现了很多的错误,但经过想老师请教,与同学讨论,都得以解决。本实验使用 Verilog语言编写秒表计时器的程序,实验中将程序分为四个模块,按键输入缓存,按键消抖模块, 分频产生100HZ的时钟信号模块,数码管动态扫描显示驱动模块,计时处理部模块。按 照模块的划分对程序进行编写,经四个模块连通起
16、来实现秒表计时的功能。希望有机会做 到更多有趣的实验,丰富自己,让自己学到更多的知识。参考文献1陈耀省.Verilog 秒表设计.2012 : 15 17.2大彬哥.基于Verilog HDL的数字计时器的设计.2013 : 11.附件:module led_on(input1:0key, /输入信号input clk, /输入频率为 50MHZ 的时钟output reg 2:0sel, /数码管位选output reg 7:0seg, /数码管段选output en /3-8 译码器使能);reg2:0count3b;reg3:0dis_dat; /定义显示数据寄存器reg18:0coun
17、t; /定义计数寄存器reg23:0hour; /定义现在时刻寄存器reg clk_100hz; /50MHZ 的时钟信号 500000 分频,得到 100HZ 的时钟信号reg key_flag; /启动 /暂停的切换标志reg1:0key_inner;assign en=0;/(1)按键输入缓存 ,按键消抖设置always(posedge count16)/在0.01s内,扫描2的2次方,可以检测到 4次高电平 beginkey_inner=key;endalways(posedge key_inner0)beginkey_flag=key_flag;end/(2)0.01 秒信号产生部分
18、,产生 100HZ 的时钟信号always(posedge clk)beginif(count=249999)begin clk_100hz=clk_100hz;count=0;endelsecount=count+1;end/(3)数码管动态扫描显示部分2的 6次方always(posedge count15) /时序逻辑,由于有 6 个数码管,则在一秒内扫描begin count3b=count3b+1;case(count3b)3d5:dis_dat=hour3:0;3d4:dis_dat=hour7:4;3d3:dis_dat=hour11:8;3d2:dis_dat=hour15:1
19、2;3d1:dis_dat=hour19:16;3d0:dis_dat=hour23:20;default:dis_dat=4bxxxx;endcasesel=count3b;endalways(dis_dat)begincase(dis_dat)0 : seg = 8b1100_0000;显示 “ 0”1: seg = 8b1111_1001;显示 “1”2: seg = 8b1010_0100;/显示 “ 2”3: seg = 8b1011_0000;显示 “ 3”4: seg = 8b1001_1001;/显示 “ 4”5: seg = 8b1001_0010;/显示 “ 5”6: se
20、g = 8b1000_0010;/显示 “ 6”7: seg = 8b1111_1000;显示 “ 7”8: seg = 8b1000_0000;/显示 “ 8”9: seg = 8b1001_0000;/显示 “9”default:seg = 8bxxxxxxxx;endcaseend/(4)计时处理部分always(posedge clk_100hz) /计时处理beginif(key_inner1&key_flag=1) / 判断是否复位键,beginhour=24h0;endelse if(!key_flag)beginhour3:0=hour3:0+1;if(hour3:0=4ha)
21、beginhour3:0=4h0;hour7:4=hour7:4+1;if(hour7:4=4ha)beginhour7:4=4h0;hour11:8=hour11:8+1;if(hour11:8=4ha)beginhour11:8=4h0;hour15:12=hour15:12+1;if(hour15:12=4h6)beginhour15:12=4h0;hour19:16=hour19:16+1;if(hour19:16=4ha)beginhour19:16=4h0;hour23:20=hour23:20+1; endif(hour23:20=4h6)hour23:20=4h0;endendendendendendendmodule
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1