ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:1.31MB ,
资源ID:516969      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-516969.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(EDA数字时钟VerilogHDL.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

EDA数字时钟VerilogHDL.docx

1、EDA数字时钟VerilogHDLEDA课程设计报告一、实验任务实验目的1.深入了解基于EDA工具的复杂时序逻辑电路的设计。2.理解并熟练利用EDA工具进行综合设计。3.熟练掌握芯片烧录的流程及步骤。4.掌握Verilog HDL 语言的语法规范及时序电路描述方法。5.掌握多个数码管动态扫描与键盘扫描的显示原理及设计方法。实验要求设计一个带闹钟功能的24 小时数字钟,它包括以下几个组成部分: 显示屏,由4 个七段数码管组成,用于显示当前时间(时:分)或设置的闹钟时间; 数字键 09,用于输入新的时间或新的闹钟时间; TIME(时间)键,用于确定新的时间设置; ALARM(闹钟)键,用于确定新的

2、闹钟时间设置,或显示已设置的闹钟时间; 扬声器,在当前时钟时间与闹钟时间相同时,发出蜂鸣声。基本要求(1) 计时功能:这是本计时器设计的基本功能,每隔一秒计时一次,并在显示屏上显示当前时间。(2) 闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声。(3) 设置新的计时器时间:用户用数字键09输入新的时间,然后按TIME键确认。发挥部分(1) 设置新的闹钟时间:用户用数字键“0”“9”输入新的时间,然后按“ALARM”键确认。(2) 显示所设置的闹钟时间:在正常计时显示状态下,用户直接按下“ALARM”键,则已设置的闹钟时间将显示在显示屏上。二、设计思路硬件部分本次数字时钟的设计主

3、要在NC-EDA-2000C实验箱上完成,应用的芯片为Altara公司的EP1K10TC1003芯片。该芯片具有低内核电压、低功耗的特点。芯片内门电路高达1万门,内部使用RAM作电路结构,速度高达几百MHZ,其输出可用管脚已全部开放,位于芯片的四周,用户可以根据自己的要求和芯片本身的功能自己任意定义管脚。同时为了体现实验箱的可扩展性,在芯片的两边各有一个34脚的IDE插口,可以通过数据排线与其它应用模块相连接。除了主芯片外,主要包括三大部分:八个数码管组成的显示部分、44键盘构成的按键输入部分。以及其他输入或输出部分,如:TIME键、“ALARM”键、时钟信号、蜂鸣器等。8位7段数码管:采用2

4、个进口共阴高红7段数码管组成,其连接管脚位选信号在数码管的左边由连接孔SEL0、SEL1、SEL2与其它模块连接。数码管显示的设计示意图如下:八位数码管显示设计示意图44键盘: 44键盘主要是通过编程实现0F的输入,也可以作为一个控制键。在其上方的连接孔R1、R2、R3、R4控制横向4位;C1、C2、C3、C4纵向4位。键盘输入设计示意图如下:44键盘输入设计示意图 软件部分软件主要应用软件quartus,使用Verilog HDL语言来编写程序。在老师所给的keyscan的基础上加入计时部分、设置部分(时间的设置和闹钟的设置)以及闹铃部分。a)计时部分always(posedge clkl)

5、 /计时过程beginhour=Hour;minute=Minute; if(reset) begin hour=0;minute=0;second=0;end else if(second=59) if(minute=59) if(hour =23) begin second=0;minute=0;hour=0;end else begin second=0;minute=0;hour=hour+1;end else begin second=0;minute=minute+1;end else second=second+1;end其中,clkl为1Hz的时钟信号,当每遇到一个时钟信号的上

6、升沿时,秒钟就加1秒;当加到59时,分钟就加1,秒钟自动回到0重新计时;当分钟加到59时,时钟就加1,然后分钟回到0;当计时到23:59:59时,则回到00:00:00再进入计时。reset为清零信号,高电平有效。b)设置部分always (posedge clkh) begin if(w=1)/设置时间 begin Hour=num1*10+num2; Minute=num3*10+num4; end else if(p=1) /设置闹钟 begin Ahour=num1*10+num2; Aminute=num3*10+num4; end end将按下的键值存在num1、num2、num3

7、、num4中,再通过w和p即所谓的TIME(时间)键与ALARM(闹钟)键将输入的数值赋给初始时间或闹钟时间。c)闹铃部分 always (posedge clkh)/闹钟响beginif(hour=Ahour)&(minute=Aminute) ds=1; else ds=0;end当设置的闹钟时间(时:分)与当前的时间(时:分)相等时,则闹铃发出响声;ds信号可以接在蜂鸣器上或者发光二极管上。本次设计的完整程序已附在报告的最后。整体程序编译无误。程序中涉及的变量名称及其对应的变量意义:引脚配置图三、完成情况在这次实验过程中我们完成了24小时数字时钟的设计。时钟的显示屏为七段数码管。显示出的

8、时间格式为小时、分钟、秒钟(如图1)。时钟含有闹钟,可以在程序中设置闹钟时间,在实际时间和闹钟时间相吻合时蜂鸣器响。图2中的二极管亮即可说明,在闹钟时间可以输出高电平,该输出接在蜂鸣器上即可使蜂鸣器响。本次设计的闹钟为响1分钟自动关闭。图3中二极管熄灭。图1 时间显示图2 闹钟响(体现为发光二极管发光)图3 发光二极管熄灭(本次设计的闹钟为响1分钟自动关闭)四、总结与收获在实验设计的过程中,我们首先尝试了树上和老师上课时所讲的例程,在熟悉软件和设计流程后开始了数字时钟的设计。在设计数字时钟时,我们先分设计出来时钟的自动计数显示,实现了24小时时钟。之后实验了4*4键盘,实现了键盘输入值的扫描读

9、取。最后设计了闹钟部分,包括设置闹钟时间和到时间闹铃响。我们通过本次实验深入了解基于EDA工具的复杂时序逻辑电路的设计,理解并熟练利用quartus进行Verilog HDL语言的设计。掌握了建立工程项目,编译调试程序,下载程序的流程和步骤。在应用的过程中掌握了数码管和键盘扫描的原理和方法。并且对Verilog HDL语言的语法规则和几种常用语句有了更深入的理解。实验过程中通过合作的方式,小组成员积极讨论,对不同的语句进行了对比,最终确定了本次实验的完整程序。这次完成的数字时钟只是EDA实验箱中可以实现的众多功能之一,我们也认识到Verilog HDL语言可以实现的设计还有很多,本次实验激发了

10、我们对Verilog HDL语言的兴趣,也让我们认识到课堂的学习是有限的,想更加深入学习Verilog HDL语言,还要在今后的学习中多多自学,勤加练习。五、完整程序module zonghe (clkl,clkh,reset,q,w,p,kr,kc,a,b,c,d,e,f,g,sa,sb,sc,ds); input clkl,clkh,reset; /计数时钟脉冲、扫描频率脉冲与复位信号 input q,w,p; /启动设置的控制信号、设置时间的控制信号及设置闹钟的控制信号 inout 3:0kr; /4*4键盘的行输入/输出信号 inout 3:0kc; /4*4键盘的列输入/输出信号 o

11、utput a,b,c,d,e,f,g,sa,sb,sc,ds; /LED的7个片选信号与3个位选信号 reg a,b,c,d,e,f,g,sa,sb,sc,ds; reg 3:0kr,kc; reg 6:0 display ; reg 2:0 dcount,kcount; reg 3:0keyr,keyc; reg kflag1,kflag2; reg 6:0 buff7 ; reg 3:0 shiwei1,gewei1,shiwei2,gewei2,shiwei3,gewei3; reg5:0 hour,minute,second,Ahour,Aminute,Hour,Minute; /储

12、存当前时间的时分秒、闹钟的时分及设置的时间的时分 always(posedge clkh) /累加两个计数值 begin dcount=dcount+1; kcount=kcount+1; end always (posedge clkh) /扫描键盘 begin if(kcount=0) begin kr=4b1111; kc=4b0000; end else if(kcount=1) begin keyr=kr; kr=4bZZZZ; end else if(kcount=2) begin kr=4b0000; kc=4b1111; end else if(kcount=3) begin

13、keyc=kc;kc=4bZZZZ; end end always(posedge clkh) /改变键的标志位 begin if(kcount=4 & keyr=4b1111) kflag1=0; else if(kcount=4) kflag1=1; kflag2=kflag1; end always(posedge clkh) / 获取相应按键按下的结果 begin if(kcount=5) if(keyr=4b1110) case (keyc) 4b1110:buff7=7b0111111; /在LED上显示0 4b1101:buff7=7b0000110; /在LED上显示1 4b1

14、011:buff7=7b1011011; /在LED上显示2 4b0111:buff7=7b1001111; /在LED上显示3 default :buff7=buff7; /无变化 endcase else if (keyr=4b1101) case (keyc) 4b1110:buff7=7b1100110; /在LED上显示4 4b1101:buff7=7b1101101; /在LED上显示5 4b1011:buff7=7b1111101; /在LED上显示6 4b0111:buff7=7b0000111; /在LED上显示7 default :buff7=buff7; / 无变化 en

15、dcase else if(keyr=4b1011) case (keyc) 4b1110:buff7=7b1111111; / 在LED上显示8 4b1101:buff7=7b1101111; / 在LED上显示9 4b1011:buff7=7b1110111; /在LED上显示a 4b0111:buff7=7b1111100; /在LED上显示b default :buff7=buff7; / 无变化 endcase else if(keyr=4b0111) case (keyc) 4b1110:buff7=7b0111001; /在LED上显示c 4b1101:buff7=7b10111

16、10; /在LED上显示d 4b1011:buff7=7b1111001; /在LED上显示e 4b0111:buff7=7b1110001; / 在LED上显示f default:buff7=buff7; /无变化 endcase end always(posedge clkh) /显示过程 begin sa=dcount0; /将dcount赋给LED的三个片选信号 sb=dcount1; sc=dcount2; shiwei1=hour/10; gewei1=hour%10; shiwei2=minute/10; gewei2=minute%10; shiwei3=second/10;

17、gewei3=second%10; if(dcount=3b111)/判断位选dcount的值,并将此位上的值输出到数码管 case(shiwei1) /在第一数码管上显示时钟的十位 4b0000: display = 7b0111_111; 4b0001: display= 7b0000_110; 4b0010: display = 7b1011_011; 4b0011: display = 7b1001_111; 4b0100: display = 7b1100_110; 4b0101: display = 7b1101_101; 4b0110: display = 7b1111_101;

18、 4b0111: display = 7b0000_111; 4b1000: display = 7b1111_111; 4b1001: display = 7b1101_111; default: display = 7b0000_000; endcase if(dcount=3b000) /在第二个数码管上显示时钟的个位 case(gewei1) 4b0000: display = 7b0111_111; 4b0001: display = 7b0000_110; 4b0010: display = 7b1011_011; 4b0011: display = 7b1001_111; 4b0

19、100: display = 7b1100_110; 4b0101: display = 7b1101_101; 4b0110: display = 7b1111_101; 4b0111: display = 7b0000_111; 4b1000: display = 7b1111_111; 4b1001: display = 7b1101_111; default: display = 7b0000_000; endcase if(dcount=3b001) /在第三个数码管上显示分钟的十位 case(shiwei2) 4b0000: display = 7b0111_111; 4b0001

20、: display = 7b0000_110; 4b0010: display = 7b1011_011; 4b0011: display = 7b1001_111; 4b0100: display = 7b1100_110; 4b0101: display = 7b1101_101; 4b0110: display = 7b1111_101; 4b0111: display = 7b0000_111; 4b1000: display = 7b1111_111; 4b1001: display = 7b1101_111; default: display = 7b0000_000; endca

21、se if(dcount=3b010) /在第四个数码管上显示分钟的个位 case(gewei2) 4b0000: display = 7b0111_111; 4b0001: display = 7b0000_110; 4b0010: display = 7b1011_011; 4b0011: display = 7b1001_111; 4b0100: display = 7b1100_110; 4b0101: display = 7b1101_101; 4b0110: display = 7b1111_101; 4b0111: display = 7b0000_111; 4b1000: di

22、splay = 7b1111_111; 4b1001: display = 7b1101_111; default: display = 7b0000_000; endcase if(dcount=3b011) /在第五个数码管上显示秒钟的十位 case(shiwei3) 4b0000: display = 7b0111_111; 4b0001: display = 7b0000_110; 4b0010: display = 7b1011_011; 4b0011: display = 7b1001_111; 4b0100: display = 7b1100_110; 4b0101: displ

23、ay = 7b1101_101; 4b0110: display = 7b1111_101; 4b0111: display = 7b0000_111; 4b1000: display = 7b1111_111; 4b1001: display = 7b1101_111; default: display = 7b0000_000; endcase if(dcount=3b100) /在第六个数码管上显示秒钟的个位 case(gewei3) 4b0000: display = 7b0111_111; 4b0001: display = 7b0000_110; 4b0010: display =

24、 7b1011_011; 4b0011: display = 7b1001_111; 4b0100: display = 7b1100_110; 4b0101: display = 7b1101_101; 4b0110: display = 7b1111_101; 4b0111: display = 7b0000_111; 4b1000: display = 7b1111_111; 4b1001: display = 7b1101_111; default: display = 7b0000_000; endcase if(dcount=3b101) display =7b1000_000;

25、/在第七个数码管上显示“” if(dcount=3b110) display =buff7; /在第八个数码管上显示按下的键值endalways (posedge clkh) /将display中存的值赋给LED的七个片选信号 begin a=display0; b=display1; c=display2; d=display3; e=display4; f=display5; g=display6; end always(posedge clkl) /计时过程 clkl的频率为1Hzbeginhour=Hour;minute=Minute; /将设置的时间(时、分)赋给hour和minut

26、e if(reset) begin hour=0;minute=0;second=0; end /当reset为1时,将时间清零即为00:00:00 else /正常计时 if(second=59) if(minute=59) if(hour =23) begin second=0;minute=0;hour=0;end else begin second=0;minute=0;hour=hour+1;end else begin second=0;minute=minute+1;end else second=second+1;endinteger i; /记录按键按下的次数reg 3:0n

27、um1,num2,num3,num4; /储存按键的键值always (posedge clkh)/储存按下的键值begin if(q=1)/启动设置 begin i=0; if(keyc!=4b1111) i=i+1; /当有键按下时,i自动加1 if(i=1) /将第一个按下的按键值存入num1 begin case (keyr,keyc) 4b1110_1110:num1=0; 4b1110_1101:num1=1; 4b1110_1011:num1=2; 4b1110_0111:num1=3; 4b1101_1110:num1=4; 4b1101_1101:num1=5; 4b1101

28、_1011:num1=6; 4b1101_0111:num1=7; 4b1011_1110:num1=8; 4b1011_1101:num1=9; default:num1=num1; endcase end if(i=2) /将第二个按下的按键值存入num2 begin case (keyr,keyc) 4b1110_1110:num2=0; 4b1110_1101:num2=1; 4b1110_1011:num2=2; 4b1110_0111:num2=3; 4b1101_1110:num2=4; 4b1101_1101:num2=5; 4b1101_1011:num2=6; 4b1101_0111:num2=7; 4b1011_1110:num2=8; 4b1011_1101:num2

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2