基于verilog的数字秒表的设计实现_第1页
基于verilog的数字秒表的设计实现_第2页
基于verilog的数字秒表的设计实现_第3页
基于verilog的数字秒表的设计实现_第4页
基于verilog的数字秒表的设计实现_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字秒表的设计实现数字秒表的设计实现 团队成员 董婷团队成员 董婷 詹磊詹磊 胡胡 鹏鹏 一 测试要求测试要求 1 有源晶振频率 24MHZ 2 测试计时范围 00 00 00 59 59 99 显示的最长时间 为 59 分 59 秒 3 数字秒表的计时精度是 10ms 4 显示工作方式 a 用八位数码管显示读数 b 用两个按钮开关 一个按钮使秒表复位 另 一个按钮控制秒表的启动 暂停 二 设计要求设计要求 1 设计出符合设计要求的解决方案 2 利用软件对各单元电路及整体电路进行仿真 3 在开发板上实现设计 5 撰写设计报告 三 秒表功能键秒表功能键 1 power 秒表电源键 2 Reset 秒表复位清零键 3 run stop 秒表启动 停止键 四 实验原理实验原理 1 实验设计原理 1 秒表的逻辑结构较简单 它主要由十进制计数器 六进 制计数器 分频器 数据选择器 和显示译码器等组成 在整个秒 表中最关键的是如何获得一个精确的 100HZ 计时脉冲 除此之外 整个秒表还需有一个启动信号和一个清零信号 以便秒表能随意停 止 启动以及清零复位 2 秒表有共有 8 个输出显示 其中 6 个显示输出数据 分 别为百分之一秒 十分之一秒 秒 十秒 分 十分 所以共有 6 个计数器与之相对应 另外两个为间隔符 显示 8 个计数器 的输出全都为 BCD 码输出 这样便与同显示译码器连接 3 可定义一个 24 位二进制的寄存器 hour 用于存放 8 个 计数器的输出 寄存器从高位到低位每连续 4 位为一组 分别存放 百分之一秒 十分之一秒 间隔符 秒 十秒 间隔符 分 十分 由频率信号输出端输出频率为 100HZ 的时钟信号 输入到百分之一 秒模块的时钟端 clk 百分之一秒模块为 100 进制的计数器 当计 数到 1001 时 百分之一秒模块清零 同时十分之一秒模块加 1 十分之一秒模块也为 100 进制的计数器 当计数到 1001 时 十分之一秒模块清零 同时秒模块加 1 以此类推 直到分模块计 数到 59 进 59 4 为了消除按键消抖问题 定义寄存器 key inner 来存储按键 key 的输入信号 key flag 作为启动 暂停的转换标志 key inner 0 出现一个下降沿时 key flag 取反一次 当 key flag 为 0 时计数器启动 1 时计数器暂停 当 key flag 为 1 同时 key inner 1 为 9 时 计数器清零 5 定义 18 位寄存器 count 用于存放分频和扫描用的计数值 24MHZ 的时钟信号 240000 分频 得到 100HZ 的时钟信号 而计数器 已 24MHZ 的时钟信号 218分频扫描 8 个七段译码器 2 实验设计方案 利用一块芯片完成除时钟源 按键和显示器之外的所有数字 电路功能 所有数字逻辑功能都在 CPLD 器件上用 Verilog 语言实现 这样设计具有体积小 设计周期短 调试方便 故障率地和修改升 级容易等特点 本设计采用依次进行消抖 分频 数码管动态扫描 显示 译码 和计数流水线的设计方法 3 实验原理框图 秒表原理框图秒表原理框图 扫描 显示 分频 24Mhz Reg 1 0 计数 100hz 五 软件设计与仿真五 软件设计与仿真 1 秒表计数单位与对应输出信号 hour 3 0 百分之一秒 hour 7 4 十分之一秒 hour 11 8 秒 Hour 15 12 十秒 Hour 19 16 分 hour 23 20 十分 2 秒表总程序 module dapeng clk 24M dig seg ena key input 1 0 key input clk 24M 输入频率为 24MHZ 的时钟 output 2 0 dig 数码管位选 output 7 0 seg 数码管段选 output ena 3 8 译码器使能 reg 2 0 dig count3b reg 7 0 seg reg 3 0 disp dat 定义显示数据寄存器 reg 18 0 count 定义计数寄存器 reg 23 0 hour 定义现在时刻寄存器 reg clk100 24MHZ 的时钟信号 240000 分频 得到 100HZ 的 时钟信号 reg key flag 启动 暂停的切换标志 reg 1 0 key inner assign ena 0 按键输入缓存 always posedge count 16 begin key inner key end always negedge key inner 0 begin key flag key flag end 0 01 秒信号产生部分 产生 100HZ 的时钟信号 always posedge clk 24M begin if count 119999 begin clk100 clk100 count 0 end else count count 1 b1 end 数码管动态扫描显示部分 always posedge count 10 begin count3b count3b 1 case count3b 3 d7 disp dat hour 3 0 3 d6 disp dat hour 7 4 3 d5 disp dat 4 ha 3 d4 disp dat hour 11 8 3 d3 disp dat hour 15 12 3 d2 disp dat 4 ha 3 d1 disp dat hour 19 16 3 d0 disp dat hour 23 20 default disp dat 4 bxxxx endcase dig count3b end always disp dat begin case disp dat 4 h0 seg 8 hc0 4 h1 seg 8 hf9 4 h2 seg 8 ha4 4 h3 seg 8 hb0 4 h4 seg 8 h99 4 h5 seg 8 h92 4 h6 seg 8 h82 4 h7 seg 8 hf8 4 h8 seg 8 h80 4 h9 seg 8 h90 4 ha seg 8 hbf default seg 8 bxxxxxxxx endcase end 计时处理部分 always posedge clk100 计时处理 begin if key inner 1 end else if key flag begin hour 3 0 hour 3 0 1 if hour 3 0 4 ha begin hour 3 0 4 h0 hour 7 4 hour 7 4 1 if hour 7 4 4 ha begin hour 7 4 4 h0 hour 11 8 hour 11 8 1 if hour 11 8 4 ha begin hour 11 8 4 h0 hour 15 12 hour 15 12 1 if hour 15 12 4 h6 begin hour 15 12 4 h0 hour 19 16 hour 19 16 1 if hour 19 16 4 ha begin hour 19 16 4 h0 hour 23 20 hour 23 20 1 end if hour 23 20 4 h6 hour 23 20 4 h0 end end end end end end endmodule 2 1 计数时的仿真波形 2 2 清零时的仿真波形 2 3 暂停时的仿真波形 3 电路原理图的生成 4 电路图的生成 六 硬件实现六 硬件实现 1 用 QUARTUS II 软件对程序进行编译 并下载到硬件 FPGA 板子上进行硬件实现 板子上 6 个计数器与百分之一秒 十分之一 秒 秒 十秒 分 十分相对应 并且开始 00 00 00 59 59 99 的计数 用两个数码管显示 用于分与十秒的间隔 十分之一秒与秒的间隔 2 Run stop 和 Reset 功能键由 FPGA 板子上的开关栏的 key 0 和 key 1 代替 按一下 key 0 键 数码管上的时间停止计时 然后 按下 key 1 键 数码管上时间清零复位为 00 00 00 接着再按 一下 key 0 键 数码管重新开始计时 七七 关于老师提问关于老师提问 1 定义 18 位寄存器 reg 18 0 count 用于存放分频和扫描用 的计数值 原因是 24MHZ 的时钟信号 240000 分频 得到 100HZ 的时 钟信号 我们程序采用计数满后取反的原理 所以计数器最多需计 数 240000 262144 故而定义 count 为 reg 18 0 18 2 2 按键消抖动部分 always posedge count 16 所给时钟 上升沿有效 每次上升沿读取按键值赋给寄存器 key inner 来存储 按键 key 的输入信号 key flag 作为启动 暂停的转换标志 key inner 0 出现一个下降沿时 key flag 取反一次 当 key flag 为 0 时计数器启动 1 时计数器暂停 0 00273s 30ms 24000000 2 16 所以在计时精度为 0 01s 内 连续检测 4 次就是在 0ms 30ms 60ms 90ms 处都检测到 0 才算是有按键输入 其他情况 均为抖动 八 心得体会八 心得体会 经过这次的实验 让我们对 Verilog HDL 语言掌握程度加深了 对 QuartusII 这个软件的使用也相对开始来说更加熟悉 经过实验 对课上的知识有了进一步的熟悉 当然 试验期间也存在许多问题 刚开始写程序时常因 Verilog HDL 语言的不熟悉 常出现综合错误的问题 有时程序虽 然编译没有错误 但下到板子上时 却显示有误 还需要经过多次 的调试 总的来说 只要仔细检查 并经常使用该语言后 就会在 很大程度上避免诸如语法错误等非逻辑问题 在定义寄存器用于计 数功能时 最好先赋初值 对于复杂的逻辑功能的电路实现 可以 采用分模块的方法 以便检查程序的正误 而对于功能较简单的电 路设计 只需要一个模

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论