eda多功能电子钟实习报告Word文件下载.docx
《eda多功能电子钟实习报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《eda多功能电子钟实习报告Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
七段LED数码管显示(8个)
输出显示译码
50MHz
倒计时指示灯LED
CLK
S1
Figure1多功能数字钟控制器结构框图
根据如上说明,本设计的主要任务和设计要求是:
1、按照现代数字系统的Top-Down模块化设计方法,提出简易洗衣机控制电路设计系统的整体设计方案,并进行正确的功能划分,分别提出并实现控制器、计数器、输出译码等模块化子系统的设计方案。
2、在Quartus的EDA设计环境中,采用原理图和Verilog语言混合输入的方法,完成系统的顶层设计、各子系统的模块化设计。
分别完成各个基于Verilog语言实现的子模块(包括分频器、计数器、主控制器、扫描显示译码四部分)的逻辑功能仿真,并对顶层设计进行功能仿真。
3、在2步的基础上,用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。
观察实验结果是否与自己的编程思想一致。
二、设计原理与方案:
设计多功能数字钟首先要知道钟表的工作原理,整个钟表的工作应该是在1HZ的信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,但是需要注意的是,小时的范围是从0-23。
在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0-59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位,对于小时因为它的范围是从0-23,所以可以用一个2位的二进制码显示十位,用4位二进制码(BCD)显示个位。
Figure2我的多功能数字钟控制器结构框图
(一)、分频器设计方案:
a)分频器原理框图:
Clk/50MHZ
Clk1/1HZ
Clk1000/1KHZ
Clk3/2HZ
分频器
b)工作原理说明:
本模块为分频模块,输入端为clk(50MHZ)信号,通过if条件语句进行三次分频,分为clk1,clk1000,clk3,其中clk1为1HZ频率信号,clk1000为1KHZ频率信号,clk3为2HZ频率信号。
(二)、计数器及控制器设计方案:
a)计数器控制器原理框图
本模块既包含了控制模块又包含了计数模块,有4个输入端分别为clk1,s1,s2,s8,clk3,它们的作用分别是输入1HZ频率信号,调整小时信号,调整分钟信号,2HZ频率信号。
有4个输出端分别为del,hour,minute,second,它们的作用分别是控制灯,输出当前系统时间(小时-分钟-秒)。
在s1,s2,s8,都为1(即按键弹起时),程序块自动执行时钟计时功能;
当s1按下(即s1为0)时,hour(控制小时)加1,当s2按下(即s2为0)时,minute(控制分钟)加1;
当系统时间大于23-59-55时,指示灯开始闪烁。
(三)、数码显示器设计方案:
a)
译码扫描显示器
时间输入
七段LED数码管
Display原理框图
b)Display原理说明:
本模块有4个输入端口clk1000,hour[5..0],minute[5..0]和second[5..0],它们分别接收来至分频模块的1KHZ频率和来至计数控制模块的hour[5..0],minute[5..0],second[5..0]信息,有2个输出端口avg[7..1]和sel[3..1],avg[7..1]的七位端口分别接七段数码管的a、b、c、d、e、f、g七个端口,sel[3..1]的三位端口分别接三八译码器的三位输入端口;
sel[3..1]在000~111之间按照1KHZ的频率不断循环,通过三八译码器控制的8个数码管从右向左分别点亮,由于数码管扫描频率较高,人眼无法分辨数码管的亮灭,从视觉上我们看到8位数码管都是亮的。
sel[3..1]的三位选通端口与显示时间格式对应关系如下:
sel[3..1]端口
与avg[7..1]对应的显示量
000
“秒的个位”
001
“秒的十位”
010
“—”
011
“分的个位”
100
“分的十位”
101
110
“时的个位”
111
“时的十位”
三、电路设计、仿真与实现:
Figure3电路设计全程图
符号说明:
1.clk,clk1,clk1000,clk3:
分别为50MHZ,1HZ,1KHZ,2HZ的频率信号;
2.count11,count12,count13:
分频计数变量;
3.s1,s2,s8:
控制输入端,作用分别为调整小时,分钟,复位;
4.hour,minute,second:
时间变量;
5.del:
led整点报时闪烁灯;
6.avg:
数码管七段码输出端;
7.sel:
3-8译码器的三位选通端;
(一)、分频设计实现:
a)分频器原理图
b)分频程序:
modulefenpin(clk,clk1,clk1000,clk3);
inputclk;
outputclk1,clk1000,clk3;
regclk1,clk1000,clk3,del;
reg[31:
0]count11,count12,count13;
always@(posedgeclk)
beginif(count11==50000000)
beginclk1=1;
count11=0;
end
elsebeginclk1=0;
count11=count11+1;
if(count12==50000)
beginclk1000=1;
count12=0;
elsebeginclk1000=0;
count12=count12+1;
if(count13==25000000)
beginclk3=1;
count13=0;
elsebeginclk3=0;
count13=count13+1;
endmodule
c)仿真波形:
Figure4分频功能仿真
Figure4图中标注的clk为50MHZ的频率信号,时间周期为20ns,占空比为50%,分频输出信号虽然达到了分频的要求,但占空比却远远低于50%,在本次实习中没有反作用,如有要求非常严格的设计,则需要对信号分频程序进行调整。
(二)、计数控制设计实现:
a)计数器及控制器原理图:
b)控制计数程序:
modulecounter(clk1,clk3,s1,s2,s8,hour,minute,second,del);
inputclk1,s1,s2,s8,clk3;
outputdel;
output[5:
0]hour,minute,second;
regdel;
reg[5:
0]hour,minute,second,count2;
always@(posedgeclk1)
beginif(s1&
&
s2&
s8)
begin
second=second+1;
if(!
(60-second))//判断秒
beginminute=minute+1;
second=0;
end
if(!
(60-minute))//判断分
beginhour=hour+1;
if(hour==24)hour=0;
minute=0;
if(minute==59&
second>
=56)//倒计时
count2=1;
elsecount2=0;
elseif(!
s1)hour=hour+1;
s2)minute=minute+1;
elsebeginhour=23;
minute=59;
second=50;
always@(posedgeclk3)
begin
if(count2==1)del=~del;
elsedel=0;
c)仿真波形图:
Figure5计时功能仿真
从仿真波形图可以看出当s1,s2,s8均为高电平时,每过1秒(即clk1出现一次高电平)second自动加1,计时功能正常运行。
Figure6复位功能
从仿真波形图可知:
当按下s8(复位键)之前,时间为16时33分44秒,按下复位键后时间自动归零,重新从0时0分0秒开始计时。
Figure7时间调整功能
从Figure4时间调整功能仿真图可知,在时间调整前(s2按下)系统时间为16时34分19秒,s2按下后,时间自动调整为16时35分19秒,分钟加1;
s1按下前时间为16时35分21秒,按下后时间自动调整为17时35分21秒,小时加1;
Figure8LED灯整点报时功能
从Figure5LED整点报时功能仿真图可知,当时间达到16时59分55秒时,LED指示灯开始按照1HZ的频率闪烁,过整点后,停止闪烁,系统时间调整为17时整。
Figure924时自动归零功能
从Figure924时自动归零功能可知,当系统时间为23时59分59秒时,过一秒钟,系统时钟回归零,重新计时!
(三)、数码显示设计实现:
a)Display输出显示器原理图
b)Display程序:
moduledisplay(clk1000,avg,hour,minute,second,sel);
inputclk1000;
input[5:
output[7:
1]avg;
output[3:
1]sel;
reg[7:
reg[4:
1]t1;
reg[3:
always@(posedgeclk1000)
beginif(sel<
8)
begin
case(sel)
3'
b111:
t1=second%10;
b000:
t1=second/10;
b010:
t1=minute%10;
b011:
t1=minute/10;
b101:
t1=hour%10;
b110:
t1=hour/10;
default:
t1=1100;
endcase
sel<
=sel+1;
elsesel=3'
b000;
case(t1)
4'
b0000:
avg=7'
b1111110;
b0001:
b0110000;
b0010:
b1101101;
b0011:
b1111001;
b0100:
b0110011;
b0101:
b1011011;
b0110:
b1011111;
b0111:
b1110000;
b1000:
b1111111;
b1001:
b1111011;
b0000001;
c)Display模块仿真:
Figure10Display数码显示功能
从Figure7Display仿真图形可知,当系统时间设定为18时34分23秒时,sel[3..1]三位端口与avg[7..1]七位端口对应关系如下:
“1111001”3
“1101101”2
“0110011”4
“1111001”3
“1111111”8
“0110000”1
在数码管上显示为:
18-34-23
(四)、FitDesign结果;
实际DownLoad及测试结果
Figure11多功能电子钟综合全图
在将整合程序下载进FPGA开发板前,需将所有程序模块都转化为图形模块存入图形文件库后,新建blockdiagram,调出图形模块文件进行连接,连接编译完毕后,进行管脚分配,如下(各管脚功能下附件1):
Figure12管脚分配图
仿真波形:
Download下载调试结果:
下载调试结果符合波形仿真结果,符合设计要求。
四、分析与讨论:
1.总结:
短短几天的实习已经结束了,在这次的实习中更进一步掌握了利用Veriloghdl语言进行电路设计、仿真与综合,学习了如何利用该语言进行模块化、分层次设计,更加熟练的掌握了Quartus软件的使用方法。
在这次的实习中同时遇到不少的问题:
有显示问题,还有指示灯闪烁的问题。
显示的问题是:
当将程序下载到FPGA开发板上后,时间显示的顺序和正常的电子表显示顺序是相反的,显示顺序相反说明利用3-8译码器对8个数码管进行选通时,选通的顺序是相反的,只需将case下的条件翻转过来即可。
指示灯的问题是:
开始的时候指示灯一直亮,没有闪烁的情况出现,源程序中控制闪烁的条件有两条:
1.if(minute==59&
=56)count2=1;
elsecount2=0;
2.always@(posedgeclk3)
在初始设计程序的时候由于逻辑的混乱使del在符合条件的情况下为1,认为只要符合条件就亮,忽略了闪烁的问题,而闪烁的关键还在于“del=~del;
”句,由于设置了二分频程序,所以在上面的always@(posedgeclk1)语句运行一次的时候,always@(posedgeclk3)语句运行2次,也就是有每当count2传递一个数给always@(posedgeclk3)的时候,always@(posedgeclk3)要对该数使用两次,而count2在这2次中不变,要变的只能是del(从0—1—0—1—0—1—……)可以从中发现del下次的值总是与上次相反,于是可以用取反语句进行操作来解决该问题!
在对顶层文件进行全编译的时候出现了Error:
Widthmismatchinport"
hour[5..0]"
ofinstance"
inst2"
andtypedisplay--sourceis"
"
hour[4..0]"
(IDcounter:
inst1)"
这个问题,通过对字面的理解可知是由于输入输出hour的位数不配套引起的问题当修改counter文件中hour[4:
0]为hour[5:
0]的时候,问题得到解决,需要注意的是:
当修改了管脚的位数后需要重新编译,重新构造图形模块。
纵使有很多问题,但最终都被解决了,虽然有的问题是和同学讨论解决的,但还是很高兴的。
在这些错误中也透露了自己对现有知识掌握的不牢固,对很多概念仍处于朦胧状态。
通过这几天的实习,虽然有点累,但实习完后发现自己对以前学过的东西掌握的更牢固了,而且在实习中还弥补了一些自己欠缺的知识,掌握了对于像多功能钟这种现代数字系统的Top-Down模块化设计方法。
模块化设计方法的优点在于其简洁性,但是在最终电路确定下来之前应尽量减少模块间的联系,如果模块间重叠使用的层次过多,在修改或增加或减少一个变量的情况下,会引起其他模块的未知变化。
2.建议
i.如果能开一门关于VerilogHDL语言的课程就好了,让大家能够很好的掌握这门语言,好多知识通过自学是很难意识到的,就像这次实习有些同学设计的程序出错就是一个点的问题,如果设计时注意了,也就不会出现这种问题。
相信如果有老师专门教授这门课,大家的水平会更好。
ii.我认为应该建立一个数电实验数据库,数据库内存放一些题目,就像计算机等级考试题库一样,课程设计时,大家的题目不一样(起码自己所在班级内不一样),应该会减少那些偷懒的同学,强迫他们学习。
iii.增加实习时的指导老师,我们一个专业才一位老师,老师的负担很大,同学们的问题也不能得到及时解决。
iv.更改实习的时间,中间休息了一个月回来后好多知识都忘记了,即使复习也没刚考完试那会掌握的熟练。
附件1(管脚分配图):
端口名
使用模块信号
对应FPGA管脚
说明
按键开关S1
R16
调整小时
按键开关S2
P14
调整分钟
RST
按键开关S8
M15
复位
LED
LED模块D1
L14
整点倒计时
LEDAG0
数码管模块A段
N4
时间显示
LEDAG1
数码管模块B段
G4
LEDAG2
数码管模块C段
H4
+LEDAG3
数码管模块D段
L5
LEDAG4
数码管模块E段
L4
LEDAG5
数码管模块F段
K4
LEDAG6
数码管模块G段
K5
SEL0
数码管选择位1
M4
8个数码管的选择位
SEL1
数码管选择位2
F3
SEL2
数码管选择位3
F4
CP
脉冲源
J3
50MHZ脉冲源