EDA技术课程设计数码管显示数字钟设计.docx
- 文档编号:26782856
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:22
- 大小:117.74KB
EDA技术课程设计数码管显示数字钟设计.docx
《EDA技术课程设计数码管显示数字钟设计.docx》由会员分享,可在线阅读,更多相关《EDA技术课程设计数码管显示数字钟设计.docx(22页珍藏版)》请在冰豆网上搜索。
EDA技术课程设计数码管显示数字钟设计
课程设计任务书
设计题目1:
数码管显示数字钟设计
学生姓名
课程名称
EDA技术课程设计
专业班级
地点
起止时间
2017年6月19日—6月23日
设计内容
硬件设计及样品制作
设计参数
1、具有时、分、秒,计数显示功能,以24小时循环计时;
2、具有清零,调节小时、分钟功能;
3、具有整点报时功能,整点报时的同时LED花样显示。
设计进度
1.2017年6月19日—20日查阅资料,确定设计方案
2.2017年6月21日—22日程序设计和硬件调试
3.2017年6月23日撰写课程设计报告,答辩
设计成果
1.设计说明书一份(不少于2000字);
2.样品一套。
参考资料
1.周润景等,基于QuartusII的FPGA/CPLD数字系统设计实例,电子工业出版社,2010
2.夏宇闻,Verilog数字系统设计教程(第二版),北京航空航天大学出版社,2014
说明
1.本表应在每次实施前由指导教师填写一式2份,审批后所在系(部)和指导教师各留1份。
2.多名学生共用一题的,在设计内容、参数、要求等方面应有所区别。
3.若填写内容较多可另纸附后。
院(系)分管领导:
教研室主任:
指导教师:
2017年6月23日
第1章引言
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪60年代中期从运算机辅助设计(CAD)、运算机辅助制造(CAM)、运算机辅助测试(CAT)和运算机辅助工程(CAE)的概念进展而来的。
EDA技术确实是以运算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL或VerilogHDL完成设计文件,然后由运算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直相当于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的显现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
VerilogHDL是一种描述语言,以来描述硬件的结构和行为的语言,用它能够表示逻辑电路图、,还能够表示数字逻辑系统所完成的逻辑功能。
这次课程设计咱们运用QuartusⅡ那个软件,利用VerilogHDL语言进行编程。
数字钟是一种用数字电路技术实现时、分、秒计时的钟表。
与机械钟相较具有更高的准确性和直观性,具有更长的利用寿命,已取得普遍的利用。
数字钟的设计方式有许多种,例如可用中小规模集成电路组成电子钟,也能够利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还能够利用单片机来实现电子钟等等。
这些方式都各有其特点,其中利用单片机实现的电子钟具有编程灵活,以便于功能的扩展。
本次课程设计要求利用EDA技术,设计一个数码管显示数字钟的样品,数字钟要求具有以下功能:
一、具有时、分、秒,计数显示功能,以24小时循环计时;
二、具有清零,调剂小时、分钟功能;
3、具有整点报时功能,整点报时的同时LED花腔显示。
第2章电路原理
数码管显示数字钟设计,运用到8位数码管,要求其中6位数码管动态显示,别离显示时、分、秒的计数,同时对时刻进行设置,数字钟的整体功能依照要求能够分为大体的数字时钟显示(具有时、分、秒,计数显示功能,以24小时循环计时)、手动校准(具有清零,调剂小时、分钟功能)、整点报时、LED灯花腔显示四大部份。
其整体功能设计框图如图所示:
数码管显示数字钟
数字时钟显示
手动校准
整点报时
LED灯花样显示
图数字钟总体功能设计框图
第3章程序设计
其中,“时钟分频模块”用于对芯片晶振提供的时钟信号进行分频,然后给其他模块分派需要的时钟频率。
按键输入的信号通过按键去抖后传送给“时钟计数模块”。
正常计数时,“时钟计数模块”将处置好的时、分、秒数据实时传送给“数码管显示模块”,当有来自“按键驱动模块”的信号时,改变相应的时、分、秒计数器中的值,实现调整时刻的作用。
“数码管显示模块”实时将“时钟计数模块”的数据转换成数码管动态显示信号进行显示。
最后,加上一个“整点报时”模块和“LED灯花腔显示模块”通过时钟分频信号,传递给“数码管显示模块”,实现所需功能。
数字钟设计原理如下图:
时钟分频模块
按键驱动模块
时钟计数模块
整点报时模块
LED灯花样显示模块
数码管显示模块
图数字钟设计原理图
3.1顶层模块设计
顶层模块设计如附录图3所示,其RTL电路图如附录图4所示。
顶层模块包括四个输入:
系统时钟输入“clk”,秒设置信号“sset”,分钟设置信号“mmset”,小时设置信号“hset”。
一个8位的段选数码管显示值输出“seg”,一个8位的片选数码管显示哪个数码管输出“dig”,将输出给数码管进行动态显示。
“时钟分频模块”电路符号名为“int_div”,“按键驱动模块”电路符号名慰“an_jian”,“时钟计数模块”内部采纳三格计数器级联的方式别离驱动时、分、秒计数,秒计数器和分计数器均为60进制计数器,小时计数器为24进制计数器,电路符号名别离为两个“ji_shu_60”和一个“ji_shu_24”。
3.2时钟分频模块设计
“时钟分频模块”直接利用教师上课所给的分频程序,加入两个分频模块,与“时钟计数模块”和“按键驱动模块”进行连接。
3.3按键驱动模块设计
图按键驱动模块封装而成的电路元件
按键驱动模块利用原理图方式设计,采纳在按键信号传输进程中串联触发器实现按键去抖,保证触发器两次触发的距离远大于按键抖动的时刻,而远小于人动作反映的时刻。
另外因为实例用独立按键按下后是低电平,因此在触发器后面串联一个非门,使其变成高电平有效。
附录图1所示为按键驱动模块原理图,图所示为按键驱动模块封装而成的电路元件。
该模块包括四个输入,时钟信号clk,秒设置输入s_in,分钟设置输入m_in,小时设置输入h_in;三个输出,秒设置输出s_out,分钟设置输出m_out,小时设置输出h_out。
从该模块的原理图能够看出,时、分、秒三个按键的去抖原理完全一样,那个地址提取小时输入和输出进行仿真验证,取得的结果如下图,每一个时钟上升沿h_out的值都维持和h_in的值相反,该设计能够达到预期设计要求。
3.4时钟计数模块设计
如附录图2所示。
“时钟计数模块”内部采纳三个计数器级联的方式别离驱动时、分、秒计数,秒计数器和分钟计数器均为60进制计数器,小时计数器为24进制计数器,为方便驱动数码管,三个计数器的输出均为两位的十进制数据。
秒调整信号通过一个或门和秒进位信号一路驱动分钟计数器;小时调整和分钟调整同理。
60进制计数器要紧VerilogHDL代码如下:
begin
if(!
rst)//0
begin
q1<=0;q2<=0;
end
else
beginq1[3:
0]=q1[3:
0]+1;co<=0;
if(q1[3:
0]>9)beginq1[3:
0]=0;
q2[3:
0]=q2[3:
0]+1;
if(q2[3:
0]>5)beginq2[3:
0]=0;co<=1;end
end
elseq1=q1;
end
end
24进制计数器要紧VerilogHDL代码如下:
begin
co=0;
q1[3:
0]=q1[3:
0]+1;
if(q1[3:
0]>9)beginq1[3:
0]=0;q2[3:
0]=q2[3:
0]+1;end
if(q1==4)if(q2==2)beginq1=0;q2=0;end
end
如下图该模块中60进制模块与24进制模块的仿真波形,60进制模块设置qs0、qs1别离为个位、十位,个位计数到9以后清零,十位计数到5以后清零,24进制模块设置qh0、qh1别离为个位、十位,个位计数到9以后清零,十位计数到2以后清零。
3.5整点报时模块
整点报时模块的设计思路是当数字钟计数到一个整点时刻时,蜂鸣器开始响鸣。
蜂鸣器的封装设计如下图,程序设计为一段乐谱,要紧VerilogHDL代码如下:
图蜂鸣器封装模块
always@(posedgeclk_4Hz)
begin
case(j)
'd1:
origin='d4916;//low
'd2:
origin='d6168;
'd3:
origin='d7281;
'd4:
origin='d7791;
'd5:
origin='d8730;
'd6:
origin='d9565;
'd7:
origin='d10310;
'd8:
origin='d010647;//middle
'd9:
origin='d011272;
'd10:
origin='d011831;
'd11:
origin='d012087;
'd12:
origin='d012556;
'd13:
origin='d012974;
'd14:
origin='d013346;
'd15:
origin='d13516;//high
'd16:
origin='d13829;
'd17:
origin='d14108;
'd18:
origin='d11535;
'd19:
origin='d14470;
'd20:
origin='d14678;
'd21:
origin='d14864;
default:
origin='d011111;
endcase
end
always@(posedgeclk_4Hz)//乐谱
begin
if(len==63)
len=0;
else
len=len+1;
case(len)
0:
j=3;1:
j=3;2:
j=3;3:
j=3;4:
j=5;5:
j=5;6:
j=5;7:
j=6;8:
j=8;9:
j=8;10:
j=8;11:
j=6;12:
j=6;13:
j=6;14:
j=6;15:
j=12;16:
j=12;17:
j=12;18:
j=15;19:
j=15;20:
j=15;21:
j=15;22:
j=15;23:
j=9;24:
j=9;25:
j=9;26:
j=927:
j=9;28:
j=9;29:
j=9;30:
j=9;31:
j=9;32:
j=9;33:
j=9;34:
j=10;35:
j=7;36:
j=7;37:
j=6;38:
j=6;39:
j=5;40:
j=5;41:
j=5;42:
j=6;43:
j=8;44:
j=8;45:
j=9;46:
j=9;47:
j=3;48:
j=3;49:
j=8;50:
j=8;51:
j=8;52:
j=5;53:
j=5;54:
j=8;55:
j=5;56:
j=5;57:
j=5;58:
j=5;59:
j=5;60:
j=5;61:
j=5;62:
j=5;63:
j=5;
endcase
end
3.6LED灯花腔显示模块
LED灯花腔显示模块是与整点报时模块同时工作,当蜂鸣器响鸣时LED灯闪烁。
该模块设计思路较为简单,只需在时分秒的时钟输出端接入一个以低电平驱动的LED邓即可实现。
3.7数码管显示模块设计
数码管动态显示的原理是利用人眼的视觉停留,依次点亮每一个数码管的位选信号,当第一个数码管被点亮时,将段选信号变成第一个数码管要显示的信息,当第二个数码管被点亮时,将段选信号变成第二个数码管要显示的信息,以此类推,循环扫描。
当循环扫描一次所有数码管所用的时刻在人眼能反映出图像转变的时刻(约为秒)之内时,人自然就会在视觉上看到完整的图像,而可不能感到闪烁。
“数码管显示模块”的作用确实是将6位10进制的时刻数据BCD码转化成供数码管动态显示的位选和段选数据。
该模块在VerilogHDL语言描述下的要紧段落如下:
always@(posedgeclk_1k)
begin
case(count)//选择扫描显示数据
3'd0:
disp_dat=d0;//第一个数码管
3'd1:
disp_dat=d1;//第二个数码管
3'd2:
disp_dat=4'hf;//第三个数码管
3'd3:
disp_dat=d2;//第四个数码管
3'd4:
disp_dat=d3;//第五个数码管
3'd5:
disp_dat=4'hf;//第六个数码管
3'd6:
disp_dat=d4;//d[7:
4];//第七个数码管
3'd7:
disp_dat=d5;//d[3:
0];//第八个数码管
endcase
case(count)//选择数码管显示位
3'd0:
dig_r=8'b01111111;//选择第一个数码管显示
3'd1:
dig_r=8'b;//选择第二个数码管显示
3'd2:
dig_r=8'b;//选择第三个数码管显示
3'd3:
dig_r=8'b;//选择第四个数码管显示
3'd4:
dig_r=8'b;//选择第五个数码管显示
3'd5:
dig_r=8'b;//选择第六个数码管显示
3'd6:
dig_r=8'b;//选择第七个数码管显示
3'd7:
dig_r=8'b;//选择第八个数码管显示
endcase
end
如下图是“数码管显示模块”的封装图,输入包括时钟信号“clk”,复位信号“clr”;数码管显示数据BCD码输入,由低位到高位依次为“d0”、“d1”、“d2”、“d3”、“d4”、“d5”。
输出包括:
一个8位的段选数码管显示值输出“seg”,一个8位的片选数码管显示哪个数码管输出“dig”。
图数码管显示模块
第4章调试、测试分析及结果
4.1调试
调试利用的是睿智FPGA开发板,开发板采纳核心板与接口板分离的方式,核心板上除FPGA,各类存储器和用户扩展PACK外,还有按键、LED及电源插座等。
因为有效户扩展PACK,核心板完全能够离开接口板而单独利用,通过PACK,用于自己的设计或电子设计大赛,扩展性专门好。
接口板上集成了最经常使用和最经典外围接口,所有的外设通过精心分派及设计,不需要进行任何跳线设置,实验时超级方便!
总之,睿智开发板是完全站在用户的角度精心设计开发,简约不简单!
同时,睿智FPGA开发板的配套光盘提供相当丰硕的实验代码及各类参考文献。
4.2测试分析
按键驱动模块波形仿真分析:
图波形仿真结果
时、分、秒三个按键的去抖原理完全一样,那个地址提取小时输入和输出进行波形仿真验证,每一个时钟上升沿h_out的值都维持和h_in的值相反,该设计能够达到预期设计要求。
按键所绑的开关在开发板上是S一、S二、S3,别离操纵小时进位、分钟进位、秒清零。
60进制和24进制模块(时、分、秒模块)波形仿真分析:
图波形仿真结果
那个地址提取60进制模块与24进制模块的仿真波形,60进制模块设置qs0、qs1别离为个位、十位,个位计数到9以后清零,十位计数到5以后清零,24进制模块设置qh0、qh1别离为个位、十位,个位计数到9以后清零,十位计数到2以后清零。
该设计能够达到预期设计成效。
4.3
图按下S3,秒清零,LED1亮
图按下S2,分钟进位,LED2亮,蜂鸣器响
结果
图按下S1,小时进位,LED3亮
图整点报时,蜂鸣器响1minute
第5章小结
在这次课程设计中,碰到的问题要紧有以下几个方面:
(1)由于VerilogHDL这门语言对自己来讲属于一个从未接触过的东西,因此学习起来比较困难。
这次课程设计选择的课题是数码管显示数字钟,开始是资料的搜集与设计思路的理清,再有了必然的基础以后,开始对整个大的模块进行分模块分析设计。
(2)在实验的进程中,碰到了许多的问题,第一发觉自己对软件的运用上存在的一些问题,如刚开始的时候没有生成功能网表,致使最后运行犯错;还有无选功能仿真的时候,波形显现了一些毛刺和延时。
(3)设计60进制计数器和24进制计数器也发生了一些问题,本来的设计思路是将个位数字与十位数字别离拆开,用进位信号操纵输出,但发此刻连接蜂鸣器模块时,进位信号延时太短,致使秒计数器计数计到59以后分钟计数器进位但蜂鸣器和LED灯没有反映,手动按键却能够操纵蜂鸣器报警和LED灯闪烁。
实验进程中,碰到的小问题不可胜数,在多方尽力之下,问题大体解决,那个地址就不一一列举。
总结出的宝贵体会确实是要多看书,学会自己解决问题,一样的问题在看书找资料以后大体都能解决;还有确实是必然要细心,如此能够幸免很多没必要要的麻烦。
关于这一个课程,我仍然属于半懂不懂的状态,在尔后的学习中,对教师的建议确实是能够在刚开始上课的时候就能够够给同窗布置一些小的作业,然后能够让同窗慢慢接触一下软件,学一点浅显的编程,如此在最后写大作业的时候就可不能感觉无从下手,以便起到一个循序渐进的作用。
参考文献
一、周润景等,基于QuartusII的FPGA/CPLD数字系统设计实例,电子工业出版社,2020
二、夏宇闻,Verilog数字系统设计教程(第二版),北京航空航天大学出版社,2021
附录电路图及程序
1.时钟分频模块
moduleint_div(clock,clk_out);
inputclock;//输入时钟
outputclk_out;//输出时钟
//内部寄放器
regclk_p;//上升沿输出时钟
regclk_n;//下降沿输出时钟
reg[F_WIDTH-1:
0]count_p;//上升沿脉冲计数器
reg[F_WIDTH-1:
0]count_n;//下降沿脉冲计数器
//参数--分频系数
parameterF_DIV=;//分频系数<<<<-----修改这里
parameterF_WIDTH=32;//分频计数器宽度
wirefull_p;//上升沿计数满标志
wirehalf_p;//上升沿计数半满标志
wirefull_n;//下降沿计数满标志
wirehalf_n;//下降沿计数半满标志
//判定计数标志位置位与否
assignfull_p=(count_p assignhalf_p=(count_p<(F_DIV>>1)-1); assignfull_n=(count_n assignhalf_n=(count_n<(F_DIV>>1)-1); //时钟输出 assignclk_out=(F_DIV==1)? clock: (F_DIV[0]? (clk_p&clk_n): clk_p); //上升沿脉冲计数 always@(posedgeclock) begin if(full_p) begin count_p<=count_p+1'b1; if(half_p) clk_p<=1'b0; else clk_p<=1'b1; end else begin count_p<=0; clk_p<=1'b0; end end //下降沿脉冲计数 always@(negedgeclock) begin if(full_n) begin count_n<=count_n+1'b1; if(half_n) clk_n<=1'b0; else clk_n<=1'b1; end else begin count_n<=0; clk_n<=1'b0; end end endmodule 2.按键驱动模块 附录图1按键驱动模块原理图 3.时钟计数模块 3.160进制计数器模块(操纵分钟、秒) moduleji_shu_60(clk,q1,q2,co,rst); output[3: 0]q1,q2; outputco; inputclk,rst; reg[3: 0]q1=0,q2=0; regco; always@(posedgeclkornegedgerst) begin if(! rst)//0 begin q1<=0;q2<=0; end else beginq1[3: 0]=q1[3: 0]+1;co<=0; if(q1[3: 0]>9)beginq1[3: 0]=0; q2[3: 0]=q2[3: 0]+1; if(q2[3: 0]>5)beginq2[3: 0]=0;co<=1;end end elseq1=q1; end end //assignco=(({q2,q1}==8'b01011001)? 1: 0); endmodule 3.224进制计数器模块(操纵小时) moduleji_shu_24(clk,q1,q2); output[3: 0]q1,q2;inputclk; reg[3: 0]q1=0,q2=0;regco; always@(posedgeclk) begin co=0;q1[3: 0]=q1[3: 0]+1; if(q1[3: 0]>9) beginq1[3: 0]=0;q2[3: 0]=q2[3: 0]+1;end if(q1==4)if(q2==2) beginq1=0;q2=0;end end 附录图2时钟计数模块内部原理图 endmodule 4.整点报时模块 modulebuffer_music(audio,sys_CLK,button); outputaudio;inputsys_CLK;inputbutton; reg[23: 0]counter4Hz,counter1MHz,counter6MHz; reg[13: 0]count,origin; regaudiof; regclk_6MHz,clk_4Hz; regclk_1MHz; reg[4: 0]j; reg[7: 0]len; //assignaudio=audiof;//操纵开关 assignaudio=button? audiof: 1'b1;//操纵开关 always@(posedgesys_CLK)//6MHz分频开发板晶振为50MHz begin if(counter6MHz==4) begin counter6MHz=0; clk_6MHz=~clk_6MHz; end else begin counter6MHz=counter6MHz+1; //end end end // always@(posedgesys_CLK)//4Hz分频 begin //if(counter4Hz==2500000) if(counter4Hz==6250000)//50M/4/2 begin counter4Hz=0; clk_4Hz=~clk_4Hz; end else begin counter4Hz=counter4Hz+1; e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 技术 课程设计 数码管 显示 数字 设计