《实用多功能数字时钟设计verilog(共17页).doc》由会员分享,可在线阅读,更多相关《实用多功能数字时钟设计verilog(共17页).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 西安邮电大学 数字系统设计实验课程设计报告书2013- 2014 学年第 一 学期专业:自动化班级: 学号 姓名 实用多功能数字时钟设计1、 设计要求数字钟具有整点报时和校时功能。(1)以4位LERD数码管显示时、分,时为24进制。(2)时、分显示数字之间以小数点间隔,小数点以1Hz频率、50%占空比的亮、灭规律表示秒计时。(3)整点报时采用蜂鸣器实现。每当整点前控制蜂鸣器以低频鸣响4次,响1s、停1s,直到整点前一秒以高频响1s,整点时结束。(4)采用两个按键分别控制“校时”或“校分”。按下“校时”键时,时显示值以023循环变化;按下“校分”键时,分显示值以059
2、循环变化,但时显示值不能变化。2、 背景知识介绍(1)Verilog HDL简介Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的
3、具体控制和运行。Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。(2)Modelsim简介Modelsim仿真工具是Model公司开发的。它支持Verilog、VHDL以及他们的混合仿真,它可以将整个程序分步执行,使设
4、计者直接看到他的程序下一步要执行的语句,而且在程序执行的任何步骤任何时刻都可以查看任意变量的当前值,可以在Dataflow窗口查看某一单元或模块的输入输出的连续变化等,比quartus自带的仿真器功能强大的多,是目前业界最通用的仿真器之一。(3)Quartus工程说明创建工程时,路径中不允许有中文。选择芯片系列:Cyclone II选择芯片型号:EP2C8Q208C8其余直接下一步。(创建的工程文件名为:*.qpf文件)与工程设置:Assignments - Settings弹窗右上角:DeviceDevice and Pin Options - Configuration -Use conf
5、iguration device: EPCS1Device and Pin Options - Dual-Purpose Pins -nCEO : Use as regular I/O创建Verilog文件,和 Block Diagram文件。完成编译后,下载。编译:Processing - Start Compilation引脚分配:Assignments - Pin Planner下载程序:Tools - Programmer - Hardware Setup: 选择对应的下载方式Mode: JATG注意文件名后缀为:*.sof并勾选: Program/Configure连接下载器线,和U
6、SB电源线,点击“Start”下载。Progress:绿色100%,完成。该下载方式:掉电后消失,须重新下载。3、 硬件设计(1)主要部件电路图按键电路图 蜂鸣器电路图(2) 硬件配置 硬件搭建图引脚配置图4、 软件设计(1)Modelsim仿真1.主程序module led(clk,clr,miao,fen1,fen2,shi1,shi2,a,jiaos,jiaof,Ring,sel,seg);input clk,clr;input jiaos,jiaof,sel;output miao,fen1,fen2,shi1,shi2,seg;reg 3:0 fen1,fen2,shi1,shi2;
7、reg miao;reg 3:0 sfbz;output reg7:0 a;output reg Ring;output reg1:0 sel;output reg6:0 seg;always (posedge clk)begin if(clr)miao=0; else miao=miao;endalways (posedge miao or clr)beginif(clr)a=0;else if (a=8d59)a=0;elsea=a+1;endalways (posedge miao or clr)beginif(clr)fen1=0;else if(jiaof & fen14d9) fe
8、n1=fen1+1;else if(jiaof & fen1=4d9) fen1=0;else if(fen1=4d9 & a=8d59)fen1=0;else if (a=8d59 & (a+1)=8d60) fen1=fen1+1;else fen1=fen1;endalways (posedge miao or clr)beginif(clr)fen2=0;else if(jiaof & fen1=4d9 & fen25) fen2=fen2+1;else if(fen2=5 & fen1=9 & a=8d59)fen2=0;else if(fen1=9 & a=8d59)fen2=fe
9、n2+1;elsefen2=fen2;endalways (posedge miao or clr )beginif (clr)shi1=0;else if(jiaos & shi14d9) shi1=shi1+1;else if(jiaos & shi1=4d9) shi1=0;else if(shi1=8d3 & fen1=8d9 & fen2=8d5 & a=8d59 & shi2=4d2)beginshi1=0;shi2=0;endelse if( fen1=8d9 & fen2=8d5 & a=8d59 & shi1=8d9) shi1=0;else if( fen1=8d9 & f
10、en2=8d5 & a=8d59)shi1=shi1+1;else shi1=shi1;endalways (posedge miao or clr)beginif (clr)shi2=0;else if(jiaos & shi24d2)shi2=shi2+1;else if(shi1=8d3 & fen1=8d9 & fen2=8d5 & a=8d59 & shi2=2)shi2=0;else if( fen1=8d9 & fen2=8d5 & a=8d59 & shi1=8d9)shi2=shi2+1;else shi2=shi2;endalways(fen1 or fen2 or mia
11、o)if(fen1=8d9 & fen2=8d5)case (a) 8d51:Ring=1; 8d53:Ring=1; 8d55:Ring=1; 8d57:Ring=1; 8d59:Ring=1;default:Ring=1b0;endcaseelseRing=1b0;endmodule2.测试程序module ledtest1;reg clk,clr;wire 3:0 fen1,fen2,shi1,shi2;wire miao;wire Ring;wire 7:0 a;reg jiaos,jiaof;led u1(clk,clr,miao,fen1,fen2,shi1,shi2,a,jiao
12、s,jiaof,Ring);initialbegin#10 clk=1;#10 clr=1;#10 clr=1;#10 clr=0;#100 jiaof=0;#100 jiaos=0;# jiaof=1;# jiaos=1;#100 jiaof=0;#100 jiaos=0;clr=0;endalways #10 clk=clk;endmodule3.Modelsm程序仿真4.程序仿真波形图(2) QuartusII仿真1.主程序module led(clk,clr,miao,jiaos,jiaof,Ring,sel,seg);input clk,clr;input jiaos,jiaof;o
13、utput miao,seg,sel;reg 3:0 fen1,fen2,shi1,shi2;reg 21:0 div;reg miao,clkd;reg7:0seg;reg3:0sel,nsel;reg3:0sfbz;reg7:0 a;output reg Ring; always (posedge clk)beginif(clr) div=0;else if(div=21b) div=0;else div=div+1;endalways (posedge clk )beginif(clr)clkd=0;elseif(div=21b)clkd=clkd;else clkd=clkd;enda
14、lways (posedge clkd)begin if(clr)miao=0; else miao=miao;endalways (posedge miao or negedge clr)beginif(clr)a=0;else if (a=8d59)a=0;elsea=a+1;endalways (posedge miao or negedge clr)beginif(clr)fen1=0;else if(!jiaof & fen14d9) fen1=fen1+1;else if(!jiaof & fen1=4d9) fen1=0;else if(fen1=4d9 & a=8d59)fen
15、1=0;else if (a=8d59 & (a+1)=8d60) fen1=fen1+1;else fen1=fen1;endalways (posedge miao or negedge clr)beginif(clr)fen2=0;else if(!jiaof & fen1=4d9 & fen25) fen2=fen2+1;else if(!jiaof & fen1=4d9 & fen2=5) fen2=0;else if(fen2=5 & fen1=9 & a=8d59)fen2=0;else if(fen1=9 & a=8d59)fen2=fen2+1;elsefen2=fen2;e
16、ndalways (posedge miao or negedge clr )beginif (clr)shi1=0;else if(!jiaos &shi2=1 & shi14d9) shi1=shi1+1; else if(!jiaos &shi2=2& shi14d3) shi1=shi1+1;else if(!jiaos & shi1=4d9) shi1=0;else if(!jiaos & shi2=2& shi1=4d3) shi1=0;else if( fen1=8d9 & fen2=8d5 & a=8d59 & shi1=8d9) shi1=0;else if( fen1=8d
17、9 & fen2=8d5 & a=8d59)shi1=shi1+1;else shi1=shi1;endalways (posedge miao or negedge clr)beginif (clr)shi2=0;else if(!jiaos & shi24d2 &shi1=9)shi2=shi2+1;else if(!jiaos & shi2=4d2 & shi1=3)shi2=0;else if(shi1=8d3 & fen1=8d9 & fen2=8d5 & a=8d59 & shi2=2)shi2=0;else if( fen1=8d9 & fen2=8d5 & a=8d59 & s
18、hi1=8d9)shi2=shi2+1;else shi2=shi2;endalways(fen1 or fen2 or miao)beginif(fen1=8d9 & fen2=8d5)case (a) 8d51:Ring=1; 8d53:Ring=1; 8d55:Ring=1; 8d57:Ring=1; 8d59:Ring=1;default:Ring=1b0;endcaseelseRing=1b0;endalways(posedge clk or negedge clr)begin if(clr)sel=4b0000; else sel=nsel; end/*always(posedge
19、 clk)begin if(clr)seg=7b;end*/always(sel)begincase(sel) 4b0000: nsel=4b1000; 4b1000: nsel=4b0100; 4b0100: nsel=4b0010; 4b0010: nsel=4b0001; 4b0001: nsel=4b0000;default:nsel=4b0000;endcaseendalways(sel)begincase(sel)4b0010:sfbz=fen2;4b0001:sfbz=fen1;4b1000:sfbz=shi2;4b0100:sfbz=shi1;default:sfbz=4b00
20、00;endcaseendalways(sfbz)begincase(sfbz) 4b0000:seg=8b; 4b0001:seg=8b; 4b0010:seg=8b; 4b0011:seg=8b; 4b0100:seg=8b; 4b0101:seg=8b; 4b0110:seg=8b; 4b0111:seg=8b; 4b1000:seg=8b; 4b1001:seg=8b; default:seg=7b;endcaseendendmodule2.运行结果5、 课程设计心得体会xx:课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程”千里之行始于足
21、下”,通过这次课程设计,我深深体会到这句千古名言的真正含义我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。 通过这次课程设计,本人在多方面都有所提高。通过这次课程设计,综合运用本专业所学课程的理论和生产实际知识进行一次汽车尾灯设计工作的实际训练从而培养和提高学生独立工作能力,巩固与扩充了Verilog等课程所学的内容,掌握设计的方法和步骤,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。 xx:经过两周的实习,从刚开始拿到题目到后来做出题目,我学到了很多东西。同时我也认识到自己的不足,所学知识不能灵活的运用,部分知识还有所欠缺。
22、本次课程设计,我主要负责硬件部分,通过本次课程设计的编程和对编程过程中遇到的问题的思考.本次课程设计我们做的是数字钟,这项实验的重点在硬件部分,所以成功的关键就在于引脚的调试。刚开始所写的程序在硬件调试的正确的,但是在给芯片里烧程序的时候结果出现了错误,经过我们的检查和老师的指导,原来是时钟那块的程序编写有点错误,后来经过几次修改之后,终于正确的显示了,连接电路板之后,一次就成功了。经过本次课程设计,使我明白以后无论做什么事,一定要严谨,任何小细节都不能放过,有时候一个小问题都有可能是导致失败的原因。xxx:本次数字系统设计课程设计,我主要负责的是软件方面的编程。在开始做该项目之前,首先需要对
23、设计方案有一个全面的认识,把握整体与部分的关系,利用状态机确定相应的状态以及在相应状态下的系统输出控制,还有先态到下一状态的转换条件。此外也要考虑在非正常状态下的跳转,如校时、校分,确保数字时钟运行中的准确。在软件方面,我们组是由我和马若男两人来完成的,首先根据题目要求写出相应的主程序以实现计时、校时、响铃等功能,之后写出相应的测试程序以检测主程序是否可行。期间,我们还遇到一些问题,如数码管的接入方式,测试程序的准确性等,在与同一课题小组的共同讨论及老师的指导中解决了问题,每一次遇到问题、解决问题都是很重要的成长机会,我们能够从中学到更多。xxx:在这次课程设计中,我们组做的是实用多功能数字时
24、钟设计,我们分为软件和硬件两部分,我和另一个同学负责软件,我们需要对quartus ii软件和modelsim很熟悉,能够很熟练的应用这两个软件,针对课设题目对时钟设计的各方面功能的要求来编写程序,在编写程序时,首先要有个整体的设计,如:程序分为几个模块、分别要实现什么功能,如何编写最清楚等。整理好思路后,我们开始写程序,包括主程序以及测试程序,并通过编译和运行,保证程序的正确性。同时,在这次课程设计中,我还参与了部分硬件方面的工作,关于硬件方面,首先熟悉并掌握了下载流程和硬件引脚配置问题,将软硬件很好地结合在一起。后期系统调试以及纠错,需要适当调整程序逻辑以满足硬件对软件的契合度。总而言之,通过本次课设将已有的理论知识很好地实践,达到了学以致用的目的,完善了知识体系的构成。专心-专注-专业