基于verilog数字钟设计报告_第1页
基于verilog数字钟设计报告_第2页
基于verilog数字钟设计报告_第3页
基于verilog数字钟设计报告_第4页
基于verilog数字钟设计报告_第5页
免费预览已结束,剩余15页可下载查看

付费下载

下载本文档

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

文档简介

1 课程设计目标课程设计目标 1 熟悉并掌握 verilog 硬件描述语言 2 熟悉 quartus 软件开发环境 3 学会设计大中规模的数字电路 并领会其中的设计思想 二 课程设计实现的功能二 课程设计实现的功能 1 设计一个数码管实时显示时 分 秒的数字时钟 24 小时显示模式 2 可以调节小时 分钟 3 能够进行 24 小时和 12 小时的显示切换 4 可以设置任意时刻闹钟 并且有开关闹钟功能 5 有整点报时功能 几点钟 LED 灯闪亮几下 6 有复位按键 复位后时间从零开始计时 但闹钟设置时间不变 3 设计原理 设计原理 1 总原理框图 总原理框图 是 是 2 各个子模块设计 各个子模块设计 计计 数数 模模 块块 译码显示模块译码显示模块 分频模块分频模块 设置闹钟小时设置闹钟小时 分钟校正分钟校正 小时校正小时校正 模式选择模块模式选择模块 设置闹钟分钟设置闹钟分钟 复位复位 是否到闹钟时间是否到闹钟时间 切换切换 12 进制显示进制显示 输出闹钟信号输出闹钟信号 到达整点到达整点输出整点报时信号输出整点报时信号 1 分频模块 分频模块 分频模块的作用主要是要获得各种频率的时钟信号 输入信号为 50MHZ 的信号 要想获得 1HZ 的信号作为秒脉冲计时 则要对 50MHZ 信号分频 通过计数的方式 当计数从 0 开始到 24 999999 时 1HZ 信号取反一次 计数又从 0 开始 如此循环 就可以得到 1HZ 脉冲信号 对于其他信号也是如此 只是计数值不一样 得到的分频 信号不同 部分代码如下 always posedge 50MHZ or negedge nCR begin if nCR begin Q1 32 d24999999 begin Q1 32 d0 1HZ 1HZ end else begin Q1 Q1 1 d1 end 2 计数模块 计数模块 秒计数 在 1HZ 脉冲下进行秒计时 当计时达到 59 秒后 在下一个脉冲来临变 0 并发出一个脉冲信号 可供下面分钟计数作为输入脉冲信号计时 分钟计数 在输入脉冲下 分钟开始计时 当计时达到 59 后 在下一个脉冲来临 变 0 并发出一个脉冲 供小时计数的输入脉冲新号 小时计数 脉冲信号来临时 计数加 1 达到 23 后在下一个脉冲的作用下清零 从新计时 如果有复位信号 则时分秒全部清零 部分代码如下 module second cp reset mode flag BT2 SH SL co input cp reset BT2 input 3 0 mode flag output co 1 b0 输出脉冲信号输出脉冲信号 reg co output 3 0 SL SH 输出秒计时的十位 各位输出秒计时的十位 各位 reg 3 0 SH SL reg 7 0 cnt always posedge cp or negedge reset begin if reset begin 有复位 清零有复位 清零 cnt 8 d0 SH 4 d0 SL 4 d0 end else if mode flag 4 b0010 SH 4 d0 SL 4 d0 end if cnt 8 d59 计时达到计时达到 59 下一个脉冲下从新计时 下一个脉冲下从新计时 begin cnt 8 d0 SH 4 d0 SL 4 d0 co 1 b1 end else begin co 1 b0 cnt cnt 8 d1 SL cnt 10 秒十位秒十位 SH cnt 10 秒各位秒各位 end end end endmodule 分计时和小时计时代码和上述类似 不再举出 second u4 1HZ reset mode flag Keydone2 SH24 SL24 co1 minute u5 co11 reset MH24 ML24 co2 hour u6 co22 reset HH24 HL24 3 模式选择模块 模式选择模块 同过一个模式档按键 MODE 按一下产生对应一种模式 mode flag 并且可以循 环 在不同的模式下可以进行不同的操作 其中 mode flag 4 0000 为正常显示计时 mode flag 4 0001 为小时调钟模式 mode flag 4 00010 为分钟调钟模 mode flag 4 0011 为闹钟小时设置模式 mode flag 4 0100 为闹钟分钟设置模式 模式产生 模式产生 module mode MODE mode flag input MODE output 3 0 mode flag reg 3 0 mode flag always negedge MODE begin 如果检测到有按键按下如果检测到有按键按下 mode flag mode flag 4 b1 模式值加模式值加 1 if mode flag 4 b0101 到最后一个模式后返回第一的模式到最后一个模式后返回第一的模式 mode flag 2 b0 nd Endmodule 模式选择 模式选择 module mode choose mode flag BT2 250ms co1 co2 set co2 co11 co22 co111 co222 input 3 0 mode flag 输入模式方式 响应对应操作输入模式方式 响应对应操作 input BT2 250ms co1 co2 set co2 调节按钮 时钟信号 正常计时分钟脉调节按钮 时钟信号 正常计时分钟脉 冲信号 冲信号 正常计时小时脉冲信号 闹钟设置分钟进位信号 正常计时小时脉冲信号 闹钟设置分钟进位信号 output co11 co22 co111 co222 分钟脉冲信号 小时脉冲信号 闹钟设分钟脉冲信号 小时脉冲信号 闹钟设 置分钟脉冲信号 闹钟设置小时脉冲信号 置分钟脉冲信号 闹钟设置小时脉冲信号 supply1 Vdd reg co11 co22 co111 co222 always mode flag begin case mode flag 4 b0001 begin if BT2 co22 250ms 小时调钟模式 有按键 则脉冲为小时调钟模式 有按键 则脉冲为 250ms else begin co22 co2 没有按键 正常计时没有按键 正常计时 co11 co1 end end 4 b0010 begin if BT2 begin co11 250ms 小时调钟模式 有按键 则脉冲为 250ms co22 co2 end else begin co11 co1 没有按键 正常计时没有按键 正常计时 co22 co2 end end 4 b0011 begin co22 co2 co11 co1 if BT2 co222 250ms 闹钟小时设置信号闹钟小时设置信号 else co222 set co2 end 4 b0100 begin co22 co2 co11 co1 if BT2 co111 250ms 闹钟分钟设置信号闹钟分钟设置信号 else co111 Vdd end default begin co11 co1 co22 co2 end endcase end endmodule 4 任意闹钟模块 任意闹钟模块 一 设置闹钟一 设置闹钟 当对应于闹钟设置模式 mode flag 4 0011 和 4 b0100 时 有设置 信号输入时 则开始设置 对应代码 module set naozhong co111 co222 set HH set HL set MH set ML co2 input co111 co222 闹钟分钟 小时设置信号闹钟分钟 小时设置信号 output 3 0 set HH set HL set MH set ML 输出相应的闹钟设置时间输出相应的闹钟设置时间 supply1 Vdd output co2 minute co111 Vdd set MH set ML co2 hour co222 Vdd set HH set HL endmodule 二 闹钟响应二 闹钟响应 当正常计时达到闹钟设置得时间后 通过比较二者之间的时间 相等 则产生一个闹钟允许响应信号 在闹钟开关打开和闹钟允许响应信号同时满足 的情况下 则产生闹钟响应信号 并送到相应的闹钟设备 LED 灯 如果闹钟档处于关 闭状态 则不会产生闹钟响应信号 响应代码如下 module naozhong Alarm ctr 1HZ set HH set HL set MH set ML HH24 HL24 MH24 ML24 nao signal input Alarm ctr 1HZ input 3 0 set HH set HL set MH set ML input 3 0 HH24 HL24 MH24 ML24 output nao signal reg signal reg nao signal reg 16 0 Q 计数 调节闹钟响应时间长度 always posedge 1HZ begin if signal end 未达到 不产生 else if signal signal 1 b0 end end else begin signal 1 b0 nao signal 1 b0 end end endmodule 5 整点报时模块 整点报时模块 检测分钟和秒钟计数是否都达到了 59 然后再下一个秒脉冲的 作用下发出整点报时信号 送到 LED 并开始计数 计数达到报时信号响应次数后 终止报时信号 部分代码如下 always posedge 500ms begin if SH 10 SL 8 d59 bao 1 b1 end 允许报时允许报时 else if Q1 10 HH HL 产生报时信号产生报时信号 Q1 Q1 bao signal 响一次计数加一响一次计数加一 end else if Q1 10 HH HL 报时次数达到整点时数 终止信号报时次数达到整点时数 终止信号 bao 1 b0 else begin bao signal 1 b0 end End 6 12 24 小时切换模块 小时切换模块 将 24 小时切换成 12 小时 并存入相应的寄存器 如果 拨上切换显示档 则切换显示 相应代码如下 module hour12 24 HH24 HL24 HH12 HL12 input 3 0 HH24 HL24 output 3 0 HH12 HL12 reg 3 0 HH12 HL12 always HH24 or HL24 begin if HH24 10 HL24 12 begin HH12 HH24 HL12 13 HL12 19 HL12 HL24 4 d8 end else begin HH12 HH24 4 d1 HL12 HL24 4 d2 end end endmodule 7 译码显示模块 译码显示模块 一 一 数码管显示 通过传入响应的 4 位十进制数 运用 case 语句转换输出相应的 8 位二进制显示码 送入数码管显示 代码如下 module SEG7 LUT oSEG1 iDIG input 3 0 iDIG 输入要显示的数 output 7 0 oSEG1 reg 7 0 oSEG wire 7 0 oSEG1 always iDIG begin case iDIG 4 h0 oSEG 8 b00111111 4 h1 oSEG 8 b00000110 4 h2 oSEG 8 b01011011 4 h3 oSEG 8 b01001111 4 h4 oSEG 8 b01100110 4 h5 oSEG 8 b01101101 4 h6 oSEG 8 b01111101 4 h7 oSEG 8 b00000111 4 h8 oSEG 8 b01111111 4 h9 oSEG 8 b01101111 endcase end assign oSEG1 oSEG 由于是共阴极数码管 低电平显示 所以取反 Endmodule 二 LED 显示 module display LED s out s int input 3 0 s int output 3 0 s out reg 3 0 s out wire 3 0 s out1 always s int begin case s int 4 h0 s out 4 b0000 4 h1 s out 4 b0001 4 h2 s out 4 b0010 4 h3 s out 4 b0011 4 h4 s out 4 b0100 4 h5 s out 4 b0101 4 h6 s out 4 b0110 4 h7 s out 4 b0111 4 h8 s out 4 b1000 4 h9 s out 4 b1001 endcase end assign s out1 s out Endmodule 设计过程常见问题 设计过程常见问题 1 要注意编写程序的过程中 begin 和 end 配对问题 类似于 C 语言中的括号匹配问题 在编写计数模块时编译不通过 最后检查出是缺少一个 end 结束符号 经修改后编译通过 2 Verilog HDL 语言编写时的语法问题 在最初的计时模块的程序设计中 将小时 分 钟的调节信号放在了另外的一个 always 语句块中 编译无法通过 经查阅资料 在 Verilog HDL 语言的编写中应该注意不同的 always 语句块不可以对同一个变量进行操作 即一个变量不可以经过两个 always 语句块操作 将对小时和分钟调节信号的操作与计时放 在同一个语句块中 编译通过 3 数码管刚开始时显示于实际计数不一样 主要是由译码错误造成的原因 数码管一开 始不变化 说明计数没有进行 是由于分钟的输入脉冲信号错误引起 心得体会心得体会 这次的课程设计结束了 在这次的设计中我学会了很多东西 首先是对 Verilog HDL 语言的设计思想有了深入理解 将这种自顶向下的设计理念运用于实践中 设计多功能数 字钟 突出了 Verilog HDL 作为硬件描述语言的良好可读性和可移植性 对上学期所学的 而理论知识有了深刻的理解 其次是对 Verilog HDL 语言的语法熟悉 在这次的课程设计中 我学习到很多 Verilog HDL 语言的语法知识 比如在两个不同的语句块中不能对同一个变量进行操作 比如在用 Verilog HDL 语言中编写程序时要注意 begin 和 end 语句的匹配问题 在使用 Verilog HDL 语言时不可以使用中文注释等等 对于这种语言的学习也有了很大的帮助 最后是设计作品时的设计逻辑和设计思想 在选择不同的系统方案时要综合考虑 选 择最优方案 各个模块的实现也要考虑综合情况而制定出最符合实际情况的实现方案 方 案间要进行对比 实践 最终确定 在这次的课程设计中我不仅学习到有关程序编写以及设计方面的逻辑思维 对系统功 能的实现也有了较为深入的了解 对各模块的调试等也学习到不少东西 总之 从这次设 计中学到很多东西 也巩固了我的理论学习 附代码 附代码 总模块 module clock clk reset MODE Alarm ctr BT2 H12 24 DSH DSL DMH DML DHH DHL dian bao signa l nao signal input clk 50MHz input reset MODE Alarm ctr BT2 H12 24 复位键 模式选择按钮 闹钟开关档 调节按 钮 12 24 小时切换档 output 7 0 DMH DML DHH DHL 4 个数码管显示输入信号 output dian bao signal nao signal 时分间隔点 报时信号 闹钟信号 output 3 0 DSH DSL 秒钟输出信号 wire 3 0 SH SL MH ML HH HL wire 3 0 LED mode wire 3 0 HH12 HL12 HH24 HL24 MH24 ML24 SH24 SL24 wire 3 0 set HH set HL set MH set ML wire 1HZ 10ms 250ms 500ms wire Keydone1 wire Keydone2 wire co1 co11 co111 co2 co22 co222 set co2 wire 3 0 mode flag assign dian 1 b0 devide f u1 1HZ 10ms 250ms 500ms reset clk 分频 得到 4 种不同频率的时钟信 号 key press u2 10ms MODE Keydone1 模式档按钮去抖动 key press u20 10ms BT2 Keydone2 调节按钮去除抖动 mode u3 Keydone1 mode flag 通过模式按钮产生不同模式 second u4 1HZ reset mode flag Keydone2 SH24 SL24 co1 秒计时 minute u5 co11 reset MH24 ML24 co2 分计时 hour u6 co22 reset HH24 HL24 小时计时 SEG7 LUT u7 DML ML 4 个数码管显示 SEG7 LUT u8 DMH MH SEG7 LUT u9 DHL HL SEG7 LUT u10 DHH HH display LED u11 DSL SL LED 灯显示秒或模式灯 display LED u12 DSH SH mode choose u13 mode flag Keydone2 250ms co1 co2 set co2 co11 co22 co111 co222 选 择模式进行不同操作 hour12 24 u14 HH24 HL24 HH12 HL12 12 24 小时切换 boshi u15 HH HL MH ML SH SL 1HZ bao signal 整点报时 set naozhong u16 co111 co222 set HH set HL set MH set ML set co2 设置闹钟时间 Naozhong u17 Alarm ctr 500ms set HH set HL set MH set ML HH24 HL24 MH24 ML24 nao signal 任意闹钟响应 LUT mode u18 mode flag H12 24 HH12 HL12 HH24 HL24 MH24 ML24 set HH set HL set MH set ML MH ML HH HL 通过模式选择数码管显示 LED mode u19 mode flag SH24 SL24 SH SL 模式选择 LED 灯显示 Endmodule 分频模块 分频模块 module devide f 1HZ 10ms 250ms 500ms nCR 50MHZ input 50MHZ nCR output 1HZ 10ms 250ms 500ms reg 1HZ 10ms 250ms 500ms reg 31 0 Q1 Q2 Q3 Q4 always posedge 50MHZ or negedge nCR begin if nCR begin Q1 32 d0 Q2 32 d0 Q3 32 d0 Q4 32 d24999999 begin Q1 32 d249999 begin Q2 32 d6299999 begin Q4 32 d12499999 begin Q3 32 d0 500ms 500ms end else begin Q1 Q1 1 d1 Q2 Q2 1 d1 Q3 Q3 1 d1 Q4 Q4 1 d1 end end endmodule 计时模块 计时模块 module second cp reset mode flag BT2 SH SL co input cp reset BT2 input 3 0 mode flag output co 1 b0 reg co output 3 0 SL SH reg 3 0 SH SL reg 7 0 cnt always posedge cp or negedge reset begin if reset begin SL 4 b0 SH 4 b0 cnt 8 b0 end else if mode flag 4 b0010 SH 4 b0 cnt 8 b0 end else begin if cnt 8 d59 begin cnt 8 d0 SH 4 d0 SL 4 d0 co 1 b1 end else begin co 1 b0 cnt cnt 8 d1 SL cnt 10 SH cnt 10 end end end endmodule module minute cp reset MH ML co input cp reset output co 1 b0 output 3 0 ML MH reg 3 0 MH ML reg 7 0 cnt reg co always posedge cp or negedge reset begin if reset begin ML 4 b0 MH 4 b0 cnt 8 b0 end else begin if cnt 8 d59 begin cnt 8 d0 MH 4 d0 ML 4 d0 co 1 b1 end else begin co 1 b0 cnt cnt 8 d1 ML cnt 10 MH cnt 10 end end end endmodule module hour cp reset HH HL input cp reset output 3 0 HL HH reg 3 0 HH HL reg 7 0 cnt always posedge cp or negedge reset begin if reset begin HL 4 b0 HH 4 b0 cnt 8 b0 end else begin if cnt 8 d23 begin cnt 8 d0 HH 4 d0 HL 4 d0 end else begin cnt cnt 8 d1 HL cnt 10 HH cnt 10 end end end Endmodule 模式选择模块 模式选择模块 module key press 10ms KEY Keydone input KEY 10ms output Keydone reg dout1 dout2 dout3 always posedge 10ms begin dout1 KEY dout2 dout1 dout3 dout2 end assign Keydone dout1 dout2 dout3 endmodule module mode MODE mode flag input MODE output 3 0 mode flag reg 3 0 mode flag always negedge MODE begin mode flag mode flag 4 b1 if mode flag 4 b0101 mode flag 2 b0 end endmodule module LED mode mode flag SH24 SL24 SH SL input 3 0 mode flag input 3 0 SH24 SL24 output 3 0 SH SL reg 3 0 SH SL always mode flag begin case mode flag 4 b0000 begin SH SH24 SL SL24 end 4 b0001 begin SH 4 b0000 SL 4 b0001 end 4 b0010 begin SH 4 b0000 SL 4 b0010 end 4 b0011 begin SH 4 b0000 SL 4 b0100 end 4 b0100 begin SH 4 b0000 SL 4 b1000 end default begin SH SH24 SL SL24 end endcase end endmodule Module LUT mode mode flag H12 24 HH12 HL12 HH24 HL24 MH24 ML24 set HH set HL set MH set ML MH ML HH HL input 3 0 HH12 HL12 HH24 HL24 MH24 ML24 input 3 0 set HH set HL set MH set ML input 3 0 mode flag input H12 24 output 3 0 MH ML HH HL reg 3 0 MH ML HH HL always mode flag or H12 24 begin case mode flag 4 b0011 4 b0100 begin HH set HH HL set HL MH set MH ML set ML end default begin if H12 24 begin HH HH12 HL HL12 MH MH24 ML ML24 end else begin HH HH24 HL HL24 MH MH24 ML ML24 end end endcase end endmodule module mode choose mode flag BT2 250ms co1 co2 set co2 co11 co22 co111 co222 input 3 0 mode flag input BT2 250ms co1 co2 set co2 output co11 co22 co111 co222 supply1 Vdd reg co11 co22 co111 co222 always mode flag begin case mode flag 4 b0001 begin if BT2 co22 250ms else begin co22 co2 co11 co1 end end 4 b0010 begin if BT2 begin co11 250ms co22 co2 end else begin co11 co1 co22 co2 end end 4 b0011 begin co22 co2 co11 co1 if BT2 co222 250ms else co222 set co2 end 4 b0100 begin co22 co2 co11 co1 if BT2 co111 250ms else co111 Vdd end default begin co11 co1 co22 co2 end endcase end endmodule 闹钟模块闹钟模块 module set naozhong co111 co222 set HH set HL set MH set ML co2 input co111 co222 output 3 0 set HH set HL set MH set ML supply1 Vdd output co2 minute co111 Vdd set MH set ML co2 hour co222 Vdd set HH set HL endmodule modulenaozhong Alarm ctr 1HZ set HH set HL set MH set ML HH24 HL24 MH24 ML24 nao signal input Alarm ctr 1HZ input 3 0 set HH set HL set MH set ML input 3 0 HH24 HL24 MH24 ML24 output nao signal reg signal reg nao signal reg 16 0 Q always posedge 1HZ begin if signal else signal 1 b0 end else if signal signal 1 b0 end end else begin signal 1 b0 nao signal 1 b0 end end endmodule 12 24 小时切换模块 小时切换模块 module hour12 24 HH24 HL24 HH12 HL12 input 3 0 HH24 HL24 output 3 0 HH12 HL12 reg 3 0 HH12 HL12 reg flag always HH24 or HL24 be

温馨提示

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

评论

0/150

提交评论