课程设计 用verilog实现简易数字钟.docx_第1页
课程设计 用verilog实现简易数字钟.docx_第2页
课程设计 用verilog实现简易数字钟.docx_第3页
课程设计 用verilog实现简易数字钟.docx_第4页
课程设计 用verilog实现简易数字钟.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

合肥工业大学电子科学与技术专业集成电路前端课程设计报告 设计题目:简易数字钟设计 姓名 学号 班级 电子科学与技术1班 日期 2010年12月6日模式:7按键7 PIO6 引脚7 change 4 3 4 t_hou 1 0 1 t_min时钟显示 hou2 PIO 39-36 84 83 78 77 hou1 35-32 76 75 74 73 min2 31-28 72 71 70 69 min1 27-24 68 67 52 51 sec2 23-20 50 49 48 47 sec1 19-16 42 41 40 39灯 at 47 106clock clock0 123(选择1Hz的信号)模式1 正常计时模式 at=0 灯灭模式2 手动较时模式 at=1 灯亮按建功能:change 控制数字钟在计时和手动调整两个状态之间转换 t_min 分钟手动调整按键 t_hou 小时手动调整按键 clock 标准1HZ时钟信号 中间变量 tun 秒到分的进位信号 mod 分到时的进位信号 mt 分钟的控制信号 上升沿触发 nt 时钟的控制信号 上升沿触发 输出 sec1 秒个位 sec2 秒十位 min1 分个位 min2 分十位 hou1 时个位 hou2 时十位 at 表示模式的变量 0为正常计时模式,1表示手动调整模式概述:要求:1设计一个能显示时、分、秒的简易数字钟。具有时间调整功能。2利用GW48PK2系统上的数码管显示时间。3 调整时间用的按键也使用GW48PK2系统上的按键。 目的:本次课程设计的目的是为了掌握FPGA技术的层次化设计方法,掌握ModelSim和Quartus的使用方法。步骤:用verilog语言在记事本编写程序,然后在ModelSim中仿真,查看波形,再用Quartus仿真,定义针脚,在面板上模拟。数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的寿命,因此得到广泛的应用。设计原理及框图数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路,具有时、分、秒计数显示功能,以24小时为计数循环,由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要加上校时功能。这次实验主要是要实现时钟的两种基本功能:计时和较准,时间计数由秒个位和秒十位计数器,分个位和分十位计数器及时个位和时十位计数器,和控制按键构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为24进制计数器.,然后需要把8位二进制数转变为译码管需要的8421码。 设计方案:这个实验总体分:秒、分、时三个模块,计时和较准两个模式标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲之一。“分计数器”也采用60进制计数器,每累计60分钟,发出一个时脉冲信号,该信号作为时计数器的时钟脉冲之一,时计数器采用24进制计时器,可实现对一天24小时的计时。译码显示电路将“时”、“分”、“秒”计数器的输出状态通过译码管显示。这们时钟的计时功能就实现了,秒模块是一个以1HZ的clock信号控制的60进制计数器,并同时产生分进位信号tun。always (posedge clock)begin if(sec=59) 当秒等于59时,如果处于计时模式时产生 begin 一个进位脉冲tun, 否则tun信号暂停 sec=0; if(at=0) tun=1; else tun=tun; end else 若秒不等于59,同样如果处于计时模式 begin 就使tun信号清0,否则tun信号暂停 sec=sec+1; if(at=0) tun=0; else tun=tun; endend分模块也是一个60进制计数器,并产生小时的进位信号mod,但要受到两个控制信号的控制一个是进位信号tun,另一个是t_min的按建信号。当at=0时,赋值 mt=tun当at=1时,赋值 mt=(!tun&t_min)|(tun&!t_min)always(posedge mt) begin if(min=59) 当min=59时, 如果处于计时模式,begin 则产生一进位信号mod,否则mod暂停 min=0; if(at=0) mod=1; else mod=mod; end else 当分不等于59,同样,begin 如果处于计时模式,则mod清0,否则mod暂停 min=min+1; if(at=0) mod=0;elsemod=mod; end end 时模块和分模块相似,是一个24进制计数器,受mod和t_hou信号控制,同理当at=0时,nt=mod当at=1时,nt=(!mod&t_hou)|(mod&!t_hou)always(posedge nt) begin if(hou=23) hou=0; else hou=hou+1; end这样就实现了计时模式时控制信号为进位信号,手动模式时控制信号为按键信号计时模式和手动调整模式互不干扰,各司其职,至此已实现时钟的功能已实现,而显示时间的译码管是4位二进制数,须要两个译码管分别显示十位和个位,所以要求出秒、分、时的个位和十位,用以下程序就可实现。always(sec) begin sec1=sec%10; sec2=sec/10; endalways(min) begin min1=min%10; min2=min/10; endalways(hou) begin hou1=hou%10; hou2=hou/10; end设计难点:本次实验的难点在于两个信号控制一个变量,由于在不同的always块中不能对同一个值赋值,所以如何综合进位信号和较准信号是重点。校时功能的实现当重新接通电源或走时出现误差时都需要对时间进行校正.通常,校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数或将频率较高的方波信号加到需要校正的计数单元的输入端,校正好后,再转入正常计时状态即可.首先我想的就是选择信号nt=(at&mod)|(!at&t_hou)当at=1时,nt取mod信号,即取进位信号当at=0时, nt取t_hou按键信号,即取较准信号在实验的时候才发现有个缺陷,就是当分钟为0时,即当mod信号为1的时候,按change键如果使at=0变到at=1,则会使nt信号从0变为1,出现上升沿,使小时加1,这样时钟不仅受到进位信号mod和较准按键t_hou的调节,还受到模式转换按键change键的影响,导致时钟不准确。这里由于仿真时,难以实现at在min=0时翻转,所以把mod信号为1的时间延长了,为了解决这个问题,我就把式子改为nt=(at=0)?(!at&mod):(!mod&t_hou)|(mod&!t_hou)这样当处于手动调整模式时,时钟还在继续计时,这会使较准时间不方便。为了解决这新出来的问题,我又把tun和mod产生信号的条件加一个if(at=0),就是让tun和mod在手动调整模式时暂停,在正常计时模式时正常产生进位脉冲,这样就解决了上面的调时时还在继续计时的问题。结果与分析:测试程序include clock0.vmodule test;reg t_min,t_hou,change;wire3:0 sec1,sec2,min1,min2,hou1,hou2;reg clock;always #50 clock=clock;always #20 t_min=t_min;always #30 t_hou=t_hou; initial begin t_min=0; t_hou=0;change=0;clock=0;#10000 change=1;#300 change=0;#10000 change=1;#300 change=0;#10000 change=1;#300 change=0;#10000 change=1; endclock0 m(.t_min(t_min),.t_hou(t_hou),.clock(clock),.change(change),.sec1(sec1),.sec2(sec2),.min1(min1),.min2(min2),.hou1(hou1),.hou2(hou2),.at(at);endmodule正常计时:秒走时正常计时:分走时正常计时:时走时这张图是23:59:59时的时候,此时at=0正常计时,此时若秒加1则秒、分、时都清0,实现一天的计时。当at=1,手动较准模式,按一下t_min键分钟加1,按一下t_hou键小时加1,手动较时成功。结论与心得:经过两个星期的设计与思考,最终实现了数字钟的模拟。期间遇到了许多问题,但最后都一一得到解决。现将心得体会总结如下:1,设计初期要考虑周到,否则后期改进很困难。应该在初期就多思考几个方案,进行比较认证,选择最合适的方案动手设计。总体设计在整个设计过程中非常重要,应该花较多的时间在上面。2,方案确定后,才开始设计。设计时,多使用已学的方法,如列真值表,化简表达式,要整体考虑,不可看一步,做一步。在整体设计都正确后,再寻求简化的方法。3,模块之间关系清楚,既利于自己修改,也利于与别人交流,如果程序杂乱无章连自己都看不懂,那还如何改进和扩展。4,很多难点的突破都来自于与同学的交流,交流使自己获得更多的信息,开拓了思路,因此要重视与别人的交流。5,应该有较好的理论基础,整个实验都是在理论的指导下完成了,设计过程中使用了许多理论课上学的内容,本次设计把理论应用到了实践中、同时通过设计,也加深了自己对理论知识的理解和掌握。这次实验虽然实现了要求的功能,但还有很多有待改进的方向:1,功能扩展:如万年历等;2,小时和分钟的较准开关是分开的,这样如果加上年、月、日之后按键就太多了,需改成不同模式下,同一个键分别较准分,时,年,月,日。附录:数字钟源代码module clock0(t_min,t_hou,clock,change,sec1,sec2,min1,min2,hou1,hou2,at);input t_min,t_hou,clock,change;output sec1,sec2,min1,min2,hou1,hou2,at;wire t_min,t_hou;reg5:0 sec,min,hou;reg tun,mod,at;reg3:0 sec1,sec2,min1,min2,hou1,hou2;wire mt,nt;initial begin at=0; tun=0; mod=0; min=0; hou=0; sec=0; sec1=0; sec2=0; min1=0; min2=0; hou1=0; hou2=0; endalways(posedge change) change 控制数字钟在计时和 begin 手动调整两个状态之间转换if(at=0) at=1; at是表示模式的变量 0为正常计 else 时模式,1表示手动调整模式 at=0; endalways (posedge clock) clock 标准1HZ时钟信号begin if(sec=59) begin sec=0; 秒为60进制计数器 if(at=0) tun=1; 如果处于计时模式,每60秒产生 else 一个分进位信号,否则tun信号暂停 tun=tun; end else begin sec=sec+1; if(at=0) tun=0; else tun=tun; end end assign mt=(at=0)?(!at&tun):(!tun&t_min)|(tun&!t_min); 生成分的控制信号, t_min为分钟手动调整按键always(posedge mt) begin if(min=59) 分钟为60进制计数器 begin min=0; if(at=0) mod=1; 如果处于计时模式,每60分产生一个 else 时进位信号,否则mod信号暂停 mod=mod; end else begin min=min+1; if(at=0) mod=0; else mod=mod; end end assign nt=(at=0)?(!at&mod):(!mod&t_hou)|(mod&!t_hou); 生成时的控制信号, t_hou为小时手动调整按键alway

温馨提示

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

评论

0/150

提交评论