EDA课程设计秒表.docx
《EDA课程设计秒表.docx》由会员分享,可在线阅读,更多相关《EDA课程设计秒表.docx(8页珍藏版)》请在冰豆网上搜索。
EDA课程设计秒表
郑州航空工业管理学院
EDA课程设计报告
题目:
秒表
指导教师:
姓名
学号
EDA课程设计报告
一、设计任务
秒表设计
基本功能:
1、四位数码管显示秒表,计时范围:
00-00至59-99,前两位单位是秒。
2、有一个开始计时、一个停止计时、一个复位按键。
其他要求:
1.晶振为12MHz
2.采用CPLD器件为ALTERA的EPM7064SL-44
3.采用数码管显示
二、设计方案
基于CPLD的数字秒表设计,应用Verilog语言编写源程序,用QuartusⅡ对程序编译、仿真。
最终下载至已焊接组合好的电路中应用。
实物元件清单:
印制电路板一块
电阻(1KΩ的4个,10KΩ的7个,220Ω的11个)
三极管4个
芯片ALTERA的EPM7064SL-44基对应插槽1对
按键3个
数码管(共阴极)1个
晶振1个
下载线,电源线若干
电路原理图:
核心控制部分:
功率放大显示部分:
电路工作原理:
印制板电路主要分为两部分,即核心控制部分和数码显示部分。
通过QuartusⅡ软件将源程序下载至电路芯片中,接通电源,由晶振提供震源,在数码显示部分(功率放大部分)显示数字秒表,通过三个按键来控制秒表显示状态。
三、设计程序
系统总体框图
数字秒表主要有分频器、计数模块、功能控制模块、势能控制模块和显示输出模块组成。
系统框图下图所示(只显示程序部分)。
各部分源程序及说明
(一)分频模块
设计所用晶振提供12MHz的震源,通过分频将其转化为要求的100Hz,程序如下:
moduleint_div(clock,clk_out);
//I/O口声明
inputclock;//输入时钟
outputclk_out;//输出时钟
//内部寄存器
regclk_p_r;//上升沿输出时钟
regclk_n_r;//下降沿输出时钟
reg[F_DIV_WIDTH-1:
0]count_p;//上升沿脉冲计数器
reg[F_DIV_WIDTH-1:
0]count_n;//下降沿脉冲计数器
//参数--分频系数
parameterF_DIV=120000;//分频系数<<<<-----修改这里
parameterF_DIV_WIDTH=32;//分频计数器宽度
wirefull_div_p;//上升沿计数满标志
wirehalf_div_p;//上升沿计数半满标志
wirefull_div_n;//下降沿计数满标志
wirehalf_div_n;//下降沿计数半满标志
//判断计数标志位置位与否
assignfull_div_p=(count_passignhalf_div_p=(count_p<(F_DIV>>1)-1);
assignfull_div_n=(count_nassignhalf_div_n=(count_n<(F_DIV>>1)-1);
//时钟输出
assignclk_out=(F_DIV==1)?
clock:
(F_DIV[0]?
(clk_p_r&clk_n_r):
clk_p_r);
//上升沿脉冲计数
always@(posedgeclock)
begin
if(full_div_p)
begin
count_p<=count_p+1'b1;
if(half_div_p)
clk_p_r<=1'b0;
else
clk_p_r<=1'b1;
end
else
begin
count_p<=0;
clk_p_r<=1'b0;
end
end
//下降沿脉冲计数
always@(negedgeclock)
begin
if(full_div_n)
begin
count_n<=count_n+1'b1;
if(half_div_n)
clk_n_r<=1'b0;
else
clk_n_r<=1'b1;
end
else
begin
count_n<=0;
clk_n_r<=1'b0;
end
end
endmodule
(二)计数模块
计数模块中,时钟信号是100Hz作为秒表的百分秒输入,百分秒为100进制计数器,其进位输出作为秒的计数时钟,秒为60进制计数器。
控制信号控制计数器的开始、停止和至零。
(三)数码显示模块:
moduledecl7s(d,seg);//模块名decl7s
input[3:
0]d;//输入4位二进制码
output[7:
0]seg;//七段译码输出
reg[7:
0]seg_r;//定义数码管输出寄存器
assignseg=seg_r;//输出数码管译码结果
always@(d)
begin
case(d)//七段译码
4'h0:
seg_r=8'hc0;//显示0
4'h1:
seg_r=8'hf9;//显示1
4'h2:
seg_r=8'ha4;//显示2
4'h3:
seg_r=8'hb0;//显示3
4'h4:
seg_r=8'h99;//显示4
4'h5:
seg_r=8'h92;//显示5
4'h6:
seg_r=8'h82;//显示6
4'h7:
seg_r=8'hf8;//显示7
4'h8:
seg_r=8'h80;//显示8
4'h9:
seg_r=8'h90;//显示9
4'ha:
seg_r=8'h88;//显示a
4'hb:
seg_r=8'h83;//显示b
4'hc:
seg_r=8'hc6;//显示c
4'hd:
seg_r=8'ha1;//显示d
4'he:
seg_r=8'h86;//显示e
4'hf:
seg_r=8'h8e;//显示f
endcase
end
endmodule
同时通过控制信号示系统处在不同的功能状态:
系统时间运行状态,系统时间至零状态,时钟正常显示状态。
利用功能转换信号实现3个功能状态之间的转换,并产生相应的控制信号去控制显示输出模块不同状态的正确显示。
九.遇到问题的解决方案
1.焊接时,由于三极管的管脚距离太近,焊接时很容易管脚发生连焊,于是我们通过把电烙铁侧拿、只用一个角与三极管和焊锡接触,以此来避免出现管脚相连的现象发生。
2.焊好后,JTAG接口无法正常下载程序(经检查,是当时焊接时,烙铁温度过高,导致一个管脚的焊盘脱落,不导电所致),于是通过先把芯片放在别人的能下载的电路板上下载程序,然后再放到我们的电路板上,结果表明:
下载好程序的芯片放在本电路上,能够正常工作。
4.编译通过后,下载到硬件上之后,发现承租并没有达到预期的效果。
如显示乱序而没有规律等等,当加入适当的选通信号或者脉冲后发现问题得到了解决,所以必须在实践中不断修改已得到正确结论。
5.高电平有效还是低电平有效,这是一个非常容易忽视的问题,有时就知道这个端口要控制信号但不考虑好什么电平有效,造成错误,使得使能端或者清零端的出现错误控制信号。
并且到底是脉冲控制,还是边沿控制一定要清楚。
在实验时候可以避免一些不必要的麻烦。
6.引脚重复使用也是一个问题,有时候输出信号必须输出到一个特定的引脚。
而输出来自两路信号,这时候必须加入一个选择器件选择输出信号输出。
在实际调试的时候我们必须耐心思考,遇到问题针对问题出现的原因认真思考以解决问题。
十.总结
这是一次综合性很强的实验,从最初的模型规划,到具体功能的实现,再到电路的连接,直至最后的电路调试,每一个环节都让我加深了对实际问题的思考,同时也让我动手能力有了很大的提高。
这次最大的收获就是学会了很系统地去解决一个实际问题,学会了巧妙运用模块化的思想。
在整个电路设计与实现中,最成功的地方就是有条理地将功能细化,分成一个一个小的功能来实现。
没做好一个小功能实现的电路,就将其集成为一块具有此功能的芯片,这样,在之后的电路连接中就只要将这块芯片接入即可,最后就这样一级一级地将电路集成,最后生成的电子钟电路就只是一块芯片,只要加一些其他外部控制开关与显示电路就能实现此多功能电子钟的各功能。
在这个过程中,我更深刻地体会从分立元件到中下规模集成电路再到大规模集成电路的组成过程。
同时也更加深入地了解了Quarter2这一软件的更多的功能。
更重要的是在此过程中,我学会了独立思考,遇到问题一步一步去研究与解决解决,对于电路出现的问题不急于拆线,而是一部分一部分地对其应有的功能进行调试,对问题进行各个击破。
总而言之,这次实验让我觉得受益匪浅,不再觉得学无所用。
实验所解决的问题与生活紧密相连,从而将平时学书本上的理论与实践很好地结合起来,最终当做出成品时,有很大的成就感。