当前位置:文档之家› 数字系统设计与verilog HDL课程设计

数字系统设计与verilog HDL课程设计

数字系统设计与verilog HDL课程设计设计题目:实用多功能数字钟专业:电子信息科学与技术班级:0313410学号:031341025姓名:杨存智指导老师:黄双林摘要本课程设计利用QuartusII软件Verilog VHDL语言的基本运用设计一个多功能数字钟,经分析采用模块化设计方法,分别是顶层模块、alarm、alarm_time、counter_time、clk50mto1、led、switch、bitel、adder、sound_ddd、sound_ddd_du模块,再进行试验设计和软件仿真调试,分别实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能。

单个模块调试达到预期目标,再将整体模块进行试验设计和软件仿真调试,已完全达到分块模式设计功能,并达到设计目标要求。

关键字:多功能数字钟、Verilog、模块、调试、仿真、功能目录1.课程设计的目的及任务............................................................. 错误!未定义书签。

1.1 课程设计的目的 (3)1.2 课程设计的任务与要求 (4)2.课程设计思路及其原理 (4)3.QuartusII软件的应用 (5)3.1工程建立及存盘 (5)3.2工程项目的编译 (5)3.3时序仿真 (6)4.分模块设计、调试、仿真与结果分析 (7)4.1 clk50mto1时钟分频模块 (7)4.2 adder加法器模块 (7)4.3 hexcounter16 进制计数器模块 (7)4.4 counter_time 计时模块 (8)4.5 alarm闹铃模块 (8)4.6 sound_ddd嘀嘀嘀闹铃声模块 (9)4.7 sound_ddd_du嘀嘀嘀—嘟声音模块 (9)4.8 alarm_time闹钟时间设定模块 (10)4.9 bitsel将输出解码成时分秒选择模块 (10)4.10 switch去抖模块 (11)4.11 led译码显示模块 (11)4.12 clock顶层模块 (12)5.实验总结 (13)5.1调试中遇到的问题及解决的方法 (13)5.2实验中积累的经验 (14)5.3心得体会 (14)6.参考文献 (14)1.1 课程设计的目的通过课程设计的锻炼,要求学生掌握V erilog HDL语言的一般设计方法,掌握VerilogHDL语言的基本运用,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,基于实践、源于实践,实践出真知,实践检验真理,培养学生的创新精神。

掌握现代数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。

1.2 课程设计的任务与要求用Verilog HDL语言设计一个多功能的数字钟,具有下述功能:(1)计时功能。

包括时、分、秒的计时;(2)定时与闹钟功能:能在设定的时间发出闹铃音;(3)校时功能。

对时、分和秒能手动调整以校准时间;(4)整点报时功能;每逢整点,产生“嘀嘀嘀嘀一嘟”四短一长的报时音。

2.课程设计思路及其原理数字计时器要实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能,所有功能都基于计时功能。

因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为50MHZ,通过分频获得所需脉冲频率1Hz。

得到1hz脉冲后,要产生计时模块,必须需要加法器来进行加法,因此需要一个全加器,此实验中设计一个八位全加器来满足要求。

数字电路设计中,皆采用二进制加法,为实现实验中时分秒的最大功能,本实验中采用十六进制加法器,再进行BCD码进行转换来实现正常时钟显示。

为产生秒位,设计一个模60计数器,利用加法器对1HZ的脉冲进行秒计数,产生秒位;为产生分位,通过秒位的进位产生分计数脉冲,分位也由模60计数器构成;为产生时位,用一个模24计数器对分位的进位脉冲进行计数。

整个数字计时器的计数部分共包括六位:时十位、时个位、分十位、分个位、秒十位和秒个位。

基本的计时模块完成之后,整点报时、清零、校时、LED显示、闹铃模块可以相互实现,其中,闹铃模块与计时模块的显示相互并行。

清零功能是通过控制计数器清零端的电平高低来实现的。

只需使清零开关按下时各计数器的清零端均可靠接入有效电平(本实验中是低电平),而清零开关断开时各清零端均接入无效电平即可。

保持功能是通过逻辑门控制秒计数器输入端的1Hz脉冲实现的。

正常情况下,开关不影响脉冲输入即秒正常计数,当按下开关后,使脉冲无法进入计数端,从而实现计时保持功能。

要进行闹钟功能,是否进行闹钟模块nowmode,当选择00表示即使模块,10闹钟模式,01手动调整模式。

当选择闹铃模块之后,是否是整点报时闹铃还是闹钟闹铃,又需要设置一个选择模块alarmout,当00模式时不开启闹铃,01进行闹铃模式,10进行整点报时模块。

整点报时是本实验中的sound_ddd_du模块(详见附录中程序清单),sound_ddd_du模块与计时模块有点类似,但整点报时模块中不要分时分秒计数,可直接利用1hz的分频计数至时位进位时的数值,开启ddd_du闹铃。

闹钟报时功能。

在计时电路走到设定的时间时闹铃报时功能会被启动,通过与ddd产生电路进行逻辑组合,使得在达到闹铃时,发出ddd。

闹铃模块和校正模块中,需要选择闹铃调时Alarmode还是Checkmode校时模块,因此需要利用bitsel模块进行选择。

闹钟只设定时和分,基本模块Alarmode与正常计时电路里的校时校分电路相同。

本实验中为节省按键,闹钟时间调节键复用正常调时的校时校分开关,为使设定闹铃与正常计时中调节时间按键互不影响,额外用一个闹钟使能键,按下该键后进入闹钟设定界面,此时校时校分开关用于调节闹钟时间,对正常计时没有影响;恢复使能键后校分校时键用于对数字钟进行时间调节,对设定的闹钟时间没有影响。

校分校时checkmode功能基本原理是通过逻辑门电路控制分计数器的计数脉冲,当校分校时开关断开时,计数脉冲由低位计数器提供;当按下校分校时开通时,既可以手动触发出发式开关给进位脉冲,也可以有恒定的1Hz脉冲提供恒定的进位信号,计数器在此脉冲驱动下可快速计数。

为实现可靠调时,采用防抖动开关(由D触发器实现)克服开关接通或断开过程中产生的一串脉冲式振动。

当全部功能实现之后,要完成数字钟的全部输出,需要一个LED显示模块。

最后,将所有程序进行调试,在clock顶层模块中可以实现全部功能。

3.QuartusII软件的应用3.1工程建立及存盘1.打开QuartusⅡ,单击“File”菜单,选择File→New Project Wizard,对话框如下:分别输入项目的工作路径、项目名和实体名,单击Finish。

图3.12.单击“File”菜单,选择New,弹出小对话框,双击“VHDL File",即选中了文本编辑方式。

在出现的“Vhdl1.vhd”文本编辑窗中键入VHDL程序,输入完毕后,选择File→Save As,即出现“Save As”对话框。

选择自己建立好的存放本文件的目录,然后在文件名框中键入文件名,按“Save”按钮。

3.建立工程项目,在保存VHDL文件时会弹出是否建立项目的小窗口,点击“Yes”确定。

即出现建立工程项目的导航窗口,点击“Next”,最后在出现的屏幕中分别键入新项目的工作路径、项目名和实体名。

注意,原理图输入设计方法中,存盘的原理图文件名可以是任意的,但VHDL程序文本存盘的文件名必须与文件的实体名一致,输入后,单击“Finish”按钮。

3.2工程项目的编译单击工具条上的编译符号开始编译,并随着进度不断变化屏幕,编译成功,完成后的屏幕如图3.2所示:图3.23.3时序仿真建立波形文件:选择File→New,在New窗中选中“Other File”标签。

在出现的屏幕中选择“Vector Waveform File”项出现一新的屏幕,在assignment中选择seting,将timing选择function功能仿真,再在processing中建立网格。

在出现的新屏幕中,双击“Name”下方的空白处,弹出“Insert Nod or Bus”对话框,单击该对话框的“Node Finder……”。

在屏幕中的Filter中选择Pins,单击“List”。

而后,单击“>>”,所有输入/输出都被拷贝到右边的一侧,这些正是我们希望的各个引脚,也可以只选其中的的一部分,根据实际情况决定。

然后单击屏幕右上脚的“OK”。

在出现的小屏幕上单击“OK”。

设定仿真时间宽度。

选择Edit → End time,选项,在End time选择窗中选择适当的仿真时间域,以便有足够长的观察时间。

波形文件存盘。

选择File→Save as选项,直接存盘即可。

运行仿真器。

在菜单中选择项,直到出现,仿真结束。

图3.4 编辑过程的仿真波形4.分模块设计、调试、仿真与结果分析4.1 clk50mto1时钟分频模块实验中使用的振荡频率源为50MHZ,通过分频获得所需脉冲频率1Hz。

在counter_1hz==50000000时,输出信号清零,若未达到则继续加一。

为实验观察方便,在单个模块的显示中,本处clock输入为1ps周期信号,得到clk50to1输出结果如图4.1所示,完全符合实验要求。

图4.1 clk50mto1时钟分频模块4.2 adder加法器模块本实验中adder采用8位全加器,out=in1+in2,带进位。

图4.2 adder加法器模块实验中数字钟时分秒最大计数为59,带进位8位全加器完全符合实验要求,如图4.2所示,77加62等于139,76加上93等于169。

4.3 hexcounter16 进制计数器模块经过分频后,输出脉冲频率为1hz,即周期为1s,通过16进制计数器,将其转化为16进制数字。

16进制采用4位二进制,因此寄存器长度为四位。

当set高电平有效时,将数据送给counter计数器,carrtbit清零,如若counter计数器达到16进制中max即15时,counter清零,而carrtbit置高电平有效。

如若set一直处于低电平,则counter计数器自加一进行计数,carrtbit清零。

图4.3 hexcounter 16进制计数器模块调试试验结果如图4.3所示,set一直处于低电平状态下,当datout计数置3后再加一即清零,而carrybit置一,再来一个脉冲上升沿又回来置数,符合十六进制计数器。

4.4 counter_time 计时模块时钟能够产生时间前提是对秒脉冲计数产生形成的,每个计时器的时钟,由前级进位和自增脉冲相加得到,为了形成时分秒,需要对秒进位信号进行计数从而产生分,对分进位信号进行计数产生时信号。

相关主题