eda多功能电子钟实习报告.docx

上传人:b****8 文档编号:29792089 上传时间:2023-07-27 格式:DOCX 页数:20 大小:253.75KB
下载 相关 举报
eda多功能电子钟实习报告.docx_第1页
第1页 / 共20页
eda多功能电子钟实习报告.docx_第2页
第2页 / 共20页
eda多功能电子钟实习报告.docx_第3页
第3页 / 共20页
eda多功能电子钟实习报告.docx_第4页
第4页 / 共20页
eda多功能电子钟实习报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

eda多功能电子钟实习报告.docx

《eda多功能电子钟实习报告.docx》由会员分享,可在线阅读,更多相关《eda多功能电子钟实习报告.docx(20页珍藏版)》请在冰豆网上搜索。

eda多功能电子钟实习报告.docx

eda多功能电子钟实习报告

 

数字电子技术课程设计报告——

多功能数字钟电路设计

 

专业班级:

姓名:

学号:

开课系室:

电工电子学教学中心

设计日期:

2010年8月23日~27日

设计题目:

多功能数字钟电路设计

一、设计任务及要求:

1.设计任务:

利用veriloghdl语言设计多功能数字钟,使其具有显示时—分—秒、整点报时、小时和分钟可调等基本功能。

2.设计要求:

设计一个多功能数字钟,要求显示格式为时—分—秒,整点报时,在整点前5秒LED开始按照1HZ的频率闪烁,过整点后,停止闪烁。

系统时钟选择时钟模块的50MHZ,要得到1HZ的时钟信号,必须对系统时钟进行分频。

调整时间的按键用按键模块的s1和s2,s1调节小时,每按下一次,小时增加一个小时,s2调整分钟,每按下一次,分钟增加一分钟。

另外用s8按键作为系统时钟复位,复位后全部显示00-00-00。

3.输出资源说明:

a)输入信号:

按键s1,s2,s8(s1按下时为0,松开时为1,其他按键类似)。

b)外部输入脉冲信号时钟源CP(50MHZ),经适当分频后供计数器使用。

c)输出8组显示译码信号(每组7个输出端),分别接到外部的7个七段数码管上,分别显示小时、分钟、秒,显示格式小时-分钟-秒。

d)输出一个高低电平信号,接到外部的1个指示整点的LED灯。

(输出高电平时,对应的LED灯亮)

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)分频器原理框图:

b)工作原理说明:

本模块为分频模块,输入端为clk(50MHZ)信号,通过if条件语句进行三次分频,分为clk1,clk1000,clk3,其中clk1为1HZ频率信号,clk1000为1KHZ频率信号,clk3为2HZ频率信号。

(二)、计数器及控制器设计方案:

a)计数器控制器原理框图

 

 

b)工作原理说明:

本模块既包含了控制模块又包含了计数模块,有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)

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;end

if(count12==50000)

beginclk1000=1;count12=0;end

elsebeginclk1000=0;count12=count12+1;end

if(count13==25000000)

beginclk3=1;count13=0;end

elsebeginclk3=0;count13=count13+1;end

end

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;

end

if(minute==59&&second>=56)//倒计时

begin

count2=1;

end

elsecount2=0;

end

elseif(!

s1)hour=hour+1;

elseif(!

s2)minute=minute+1;

elsebeginhour=23;minute=59;second=50;end

end

always@(posedgeclk3)

begin

if(count2==1)del=~del;

elsedel=0;

end

endmodule

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:

0]hour,minute,second;

output[7:

1]avg;

output[3:

1]sel;

reg[7:

1]avg;

reg[4:

1]t1;

reg[3:

1]sel;

always@(posedgeclk1000)

beginif(sel<8)

begin

case(sel)

3'b111:

t1=second%10;

3'b000:

t1=second/10;

3'b010:

t1=minute%10;

3'b011:

t1=minute/10;

3'b101:

t1=hour%10;

3'b110:

t1=hour/10;

default:

t1=1100;

endcase

sel<=sel+1;

end

elsesel=3'b000;

case(t1)

4'b0000:

avg=7'b1111110;

4'b0001:

avg=7'b0110000;

4'b0010:

avg=7'b1101101;

4'b0011:

avg=7'b1111001;

4'b0100:

avg=7'b0110011;

4'b0101:

avg=7'b1011011;

4'b0110:

avg=7'b1011111;

4'b0111:

avg=7'b1110000;

4'b1000:

avg=7'b1111111;

4'b1001:

avg=7'b1111011;

default:

avg=7'b0000001;

endcase

end

endmodule

c)Display模块仿真:

Figure10Display数码显示功能

从Figure7Display仿真图形可知,当系统时间设定为18时34分23秒时,sel[3..1]三位端口与avg[7..1]七位端口对应关系如下:

sel[3..1]端口

与avg[7..1]对应的显示量

000

“1111001”3

001

“1101101”2

010

“—”

011

“0110011”4

100

“1111001”3

101

“—”

110

“1111111”8

111

“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&&second>=56)count2=1;

elsecount2=0;

2.always@(posedgeclk3)

begin

if(count2==1)del=~del;

elsedel=0;

end

在初始设计程序的时候由于逻辑的混乱使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

按键开关S1

R16

调整小时

S2

按键开关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脉冲源

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1