课程设计--多功能数字钟电路设计

上传人:aa****6 文档编号:38380390 上传时间:2018-05-01 格式:DOC 页数:27 大小:351.50KB
返回 下载 相关 举报
课程设计--多功能数字钟电路设计_第1页
第1页 / 共27页
课程设计--多功能数字钟电路设计_第2页
第2页 / 共27页
课程设计--多功能数字钟电路设计_第3页
第3页 / 共27页
课程设计--多功能数字钟电路设计_第4页
第4页 / 共27页
课程设计--多功能数字钟电路设计_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《课程设计--多功能数字钟电路设计》由会员分享,可在线阅读,更多相关《课程设计--多功能数字钟电路设计(27页珍藏版)》请在金锄头文库上搜索。

1、2009200920102010 学年第二学期学年第二学期数字电子技术课程设计报告数字电子技术课程设计报告专业班级 自动化 082 班 姓 名 学 号 0805 开课系室 电工电子学教学中心 设计日期 2010 年 8 月 23 日27 日 08 级自动化专业数字电子技术课程设计报告第 1 页设计题目:多功能数字钟电路设计设计题目:多功能数字钟电路设计一、设计任务及要求:一、设计任务及要求:本次课程设计任务是设计一个多功能数字钟。具体要求是:1.钟表的工作机理,整个钟表的工作应该是在 1Hz 信号的作用下进行,这样每来一个时钟信号,秒增加 1 秒,当秒从 59 秒跳转到 00 秒时,分钟增加

2、1 分,同时当分钟从59 分跳转到 00 分时,小时增加 1 小时,但是需要注意的是,小时的范围是从 023 时。2.小时分钟秒钟。3.整点报时,在整点前 5 秒 LED 开始按照 1HZ 频率闪烁,过整点后,停止闪烁。4.调整时间的按键用按键模块的 S1 和 S2,S1 调节小时,每按下一次,小时增加一个小时,S2 调整分钟,每按下一次,分钟增加一分钟。另外用 S8 按键作为系统时钟复位,复位后全部显示 000000。08 级自动化专业数字电子技术课程设计报告第 2 页二、设计原理与方案:二、设计原理与方案:(一) 、顶层设计方案:(包括原理框图及其工作原理说明等内容)08 级自动化专业数字

3、电子技术课程设计报告第 3 页图 1 原理框图工作原理说明:clk 用于输入 50MHZ 时钟,s1 用于给小时加 1,s2 用于给分钟加1,s8 用于复位。分频器分出三个频率的时钟,clkout1 输出 1HZ,clkout2 输出 1 千 HZ,clkout1 输出2HZ。控制器输入端口 t1 用于控制灯闪烁,输出端口 led 接小灯,ss1、ss2、reset 分别储存s1、s2、s8 的值并将其传给计数器。计数器输出端口 shis 表示小时的十位,shig 表示小时的各位,mins 表示分钟的十位,ming 表示分钟的个位。secs 表示秒的十位,secg 表示秒的个位。显示器输出端口

4、 leds 接七段数码管,wei 接数码管的控制端。当 clkout1 出现上升沿时,秒执行加 1 或进位操作,若秒进位,则分钟执行加 1 或进位操作,若分秒都进位,则小时进行加 1 或进位操作。小时进位前 5 秒,灯开始以 1HZ 频率闪烁。按下 s1 时小时加 1 或进位,按下 s2 时分钟加 1 或进位,若分钟进位,小时同时进行加 1 或进位操作。整体仿真源文件:08 级自动化专业数字电子技术课程设计报告第 4 页图 2 整体仿真源文件说明:s1、s2、s8 按下时为 0,不按下时为 1。当 s8 按下时,全部归 0。当 s1 按下时,小时假 1,当 s2 按下时,分钟加 1。输入波形中

5、刚开始 s8 为 0,归 0。然后让其运行一段时间,再让 s1 为 0,再过一段时间让 s2 为 0,再过一段时间让 s8 为 0。clk 为脉冲信号,10ps 一周期。输出放大截图:图 3 输出仿真波形放大截图第一部分08 级自动化专业数字电子技术课程设计报告第 5 页图 4 输出仿真波形放大截图第二部分(灯的闪烁)说明:仿真时计数器控制器都是 12 分频,灯闪烁是 6 分频,显示器是 2 分频,因此能看到输出的 6 个数码管的值。并对其进行初步判断。由于数码管数值不易分辨,所以不用全部看到,只看一部分即可。(二) 、各个电路子模块:1.分频器设计方案设计思路:设计计数变量 cout1、co

6、ut2、cout3,每来一个脉冲加 1。cout1 加到时归 0,同时 clkout1 加 1,否则 clkout1 归 0。cout2 到时归 0,同时 clkout2 加 1,否则 clkout2 归0。cout3 到时归 0,同时 clkout3 加 1,否则 clkout3 归 0。源程序:module fenpin(clk,clkout1,clkout2,clkout3);input clk; /下载时 clk 为 50MHzoutput clkout1,clkout2,clkout3; /clkout1 输出 1 赫兹,clkout2 为 1 千赫兹,clkout3 为 2 赫兹r

7、eg clkout1,clkout2,clkout3;integer cout1,cout2,cout3; /cout1,cout2,cout3 均为计数变量always (posedge clk )begincout1 22min=min+5;t1=0; if(shi22) shi=0;/若等于 22,归 0else shi=shi+1;/若不等,shi 加 1endelse begin min=min+1;end/若 min 不等于 59,min 加 1endelse begin sec=sec+1;t1=0;end/若 sec 不为 59,sec 加 1,令 t1 为 0if(min=5

8、9而默认为 32 位, 要将位 数裁定到合适的大小。 解决方案:如果结果正确,无须加以修正,如果不想看到这个警告,可以改变设定的位数 。 2.Following 9 pins have nothing, GND, or VCC driving datain port - changes to this connectivity may change fitting results 原因:第 9 脚,空或接地或接上了电源。 解决方案:有时候定义了输出端口,但输出端直接赋0,便会被接地,赋1接电源。如果你的设计中这些端口就是这样用的,那便可以不理会这些 warning 3.Found pins a

9、s undefined clocks and/or memory enables 原因:是你作为时钟的 PIN 没有约束信息.可以对相应的 PIN 做一下设定就行了。主 要是指你的某些管脚在电路当中起到了时钟管脚的作用,比如 flip-flop 的 clk 管脚,而此管脚 没有时钟约束,因此 QuartusII 把“clk”作为未定义的时钟。 解决方案:clk 应该是时钟,如果不是,最好改一个名字。 4.Design contains input pin(s) that do not drive logic 原因:输入引脚没有驱动逻辑(驱动其他引脚),所有的输入引脚需要有输入逻辑。 解决方案:

10、如果这种情况是故意的,无须理会,如果非故意,输入逻辑驱动。最好是输入 时钟作为驱动逻辑。 5.Cant analyze file - file E:/quartusii/*/*.v is missing 原因:试图编译一个不存在的文件,该文件可能被改名或者删除了。 解决方案:不管他,没什么影响。 6.Warning (10268): Verilog HDL information at lcd7106.v(63): Always Construct contains both blocking and non-blocking assignments 原因: 一个 always 模块中同时有阻

11、塞和非阻塞的赋值 解决方案:最好是全部用阻塞赋值,或者全是非阻塞赋值。当混合使用时,对同一08 级自动化专业数字电子技术课程设计报告第 25 页变量必须全部用同一种赋值方式。第一天下午编写计数器。计数器是最难编的一个程序,因为计数器才是真正起作用的 部分。计数器的逻辑驱动是 1 赫兹。它的工作原理应为:1.每过一秒,如果秒数小于 59,秒数加 1。如果是 59 秒,就让秒数归 0 并判断分钟。2.此时,如果分钟数小于 59,分钟数加 1。如果分钟是 59,就把分钟归 0 并判断小 时。3.此时,如果小时小于 23, 小时进 1。如果小时是 23,就让小时归 0。4.如果 s1 按下,小时加 1

12、。如果 s2 按下,分钟加 1。如果 s8 按下,全部归 0。5如果是 59 分,在秒数为 55 到 59 之间让灯以 1Hz 闪烁。前三步的实现是采用嵌套 if 语句,最后一个功能是并列 if 语句。需要注意的是按按键 时小时加 1 不能超过 23,分钟加 1 不能超过 59,复位时秒数不能走。这样,复位优先级要 高于走秒的优先级,判断按键 s1s2 按下时加 1 的方式,还要判断其他条件。第三部分编写好之后,就还差一个显示模块。这时候就可以进行仿真了,我把分频器、 控制器、计数器在顶层文件连接好进行仿真。这样,程序的输出变为灯 led、小时十位、小 时个位、分钟十位、分钟个位、秒数十位、秒

13、数个位,看波形就可以看到小时、分钟、秒 数、小灯的运行过程。经过对波形的分析我发现两个问题,第一是秒数、分钟和小时会越 过他们的界限。原因是我给它们赋了 6 位的值,如果不加限制,它们在运行时都可以达到 63。增加了限制条件后一切正常。第二是灯闪烁时间太早,我把时间调整后,波形正常。下面就是显示模块。显示模块采用扫描方式给数码管输出,因此是 1 千赫兹驱动。位 置控制的变量从 0 开始每运行 1 次加 1 到 7,再加 1 到 0,数码管输出相应的值。这一部分 也还可以。最后是合成整个程序,编译、分配管脚后进行下载。下载时除了两个问题:第一,数 码管显示的是倒的,时分秒都倒了。之后我把控制数码

14、管位置的变量重新赋值解决了这一 问题。第二,灯闪烁是是 54 秒,说明我之前调整的是错的,我又把它调回去,再下载就正 确了。 (二)容易出现的错误总结 1.无法编译,编译按钮呈灰色。 原因:未打开工程。从新打开工程即可。 2.Error: Top-level design entity “kongzhi“ is undefined 原因:module 后的模块名与工程名不同,若只是对 verilog 文件进行编译,可以将模块 名与工程名与 verilog 文件名改为一样的。若要生成框图,此时不应该进行编译。 3.Error (10137): Verilog HDL Procedural Ass

15、ignment error at kongzhi.v(15): illegal Procedural Assignment to nonregister data type “led“ 原因:未把 led 赋给 reg 类型就在过程赋值语句中对其进行赋值。把 led 定义为 reg 类 型即可。 4.Error (10028): Cant resolve multiple constant drivers for net “reset“ at kongzhi.v(11) 原因:当一个模块中有两个过程赋值语句时,不能有同一变量在两个语句中同时被赋 值。也就是说,每一个变量只能有一个触发电平。 5

16、.Error (10170): Verilog HDL syntax error at kongzhi.v(15) near text “=“; expecting “)“, or “?“, or binary operator, Error (10112): Ignored module “kongzhi“ at kongzhi.v(1) due to previous errors 原因:双击后显示那一条语句,在那条语句中缺少了一个 end,或者是()的一边,或 者是 if 的判断语句少了个=号,或者是少了其他部分。08 级自动化专业数字电子技术课程设计报告第 26 页6.Error (10171): Verilog HDL syntax error at kongzhi.v(20) near e

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号