南京邮电大学VHDL设计报告数字时钟设计数码管学号滚动显示Word格式.docx

上传人:b****5 文档编号:19526560 上传时间:2023-01-07 格式:DOCX 页数:22 大小:340.54KB
下载 相关 举报
南京邮电大学VHDL设计报告数字时钟设计数码管学号滚动显示Word格式.docx_第1页
第1页 / 共22页
南京邮电大学VHDL设计报告数字时钟设计数码管学号滚动显示Word格式.docx_第2页
第2页 / 共22页
南京邮电大学VHDL设计报告数字时钟设计数码管学号滚动显示Word格式.docx_第3页
第3页 / 共22页
南京邮电大学VHDL设计报告数字时钟设计数码管学号滚动显示Word格式.docx_第4页
第4页 / 共22页
南京邮电大学VHDL设计报告数字时钟设计数码管学号滚动显示Word格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

南京邮电大学VHDL设计报告数字时钟设计数码管学号滚动显示Word格式.docx

《南京邮电大学VHDL设计报告数字时钟设计数码管学号滚动显示Word格式.docx》由会员分享,可在线阅读,更多相关《南京邮电大学VHDL设计报告数字时钟设计数码管学号滚动显示Word格式.docx(22页珍藏版)》请在冰豆网上搜索。

南京邮电大学VHDL设计报告数字时钟设计数码管学号滚动显示Word格式.docx

3.2小组成员

(程序设计)

(调试及改进)

3.3课题内容

要求学生设计一个时钟,并输出到数码管显示时,分,秒。

3.4方案设计

3.4.1设计思路:

选用6组数码管,分别显示小时数的十位、个位,分钟数的十位、个位,秒数的十位、个位。

选用6个计数器来分别产生这6位数。

因此需设计3个模10计数器来产生小时、分钟、秒的个位上的0~9,2个模6计数器来产生分钟、秒的十位上的0~5,1个模3计数器来产生时钟的十位上的0~2。

采用外部时钟作为秒钟的计数时钟,然后上一级的进位信号作为下一级的时钟信号。

各位上计数上产生的数字通过译码显示在7段数码管上。

3.4.2系统原理图

秒个位译码显示

秒十位译码显示

分个位译码显示

分十位译码显示

时个位译码显示

时十位

译码显示

3.4.3各模块算法框图

(a)符号说明

(1)hou1:

小时数十位

(2)hou2:

小时数个位

(3)min1:

分钟数十位

(4)min2:

分钟数个位

(5)sec1:

秒数十位

(6)sec2:

秒数个位

(b)各模块算法框图

(1)秒钟计数器部分:

(2)分钟计数器部分:

(3)时针计数器部分:

3.5设计实现

时序仿真图及分析:

仿真波形部分图形如上所示。

Led1~led6分别对应hou1~sec2,在该波形中,第一个clk周期内led6管显示4,下一个clk上升沿时,led6变成5,接下来随着clk上升沿,led6依次显示6、7、8、9,在此期间,led5始终显示1,当第6个clk上升沿来临时,led5变成2,同时led6从9变成0。

此部分波形表示时钟从00:

00:

14一直计数到00:

26。

符合课题要求。

实验

(二)

3.1综合题课题名称

数码管学号滚动显示

(调试及改进)

要求学生在六个数码管滚动显示自己的学号(六位),每隔一定时间循环移位一次,学号为奇数则左移,学号为偶数则右移。

间隔时间可由开关选择1秒、2秒、3秒、4秒。

3.4方案设计:

(1)利用动态扫描数码管及人眼的视觉暂留效应,通过引入一个高频时钟来做扫描时钟,同时分频该时钟,产生1Hz分频,即产生出1秒时钟。

(2)设置一个移位时间计数器,来表征移位时间,利用之前产生的1Hz分频的计数操作,来产生不同的移位时间,即1s、2s、3s、4s,同时进行标记位移位操作。

(3)设置一个动态扫描变量,每个扫描时钟上升沿时,该变量进行移位操作,扫描0到flag(flag小于等于5),完成数码管的动态扫描。

(4)设置另一个标记位变量flag1,当flag等于5时,flag1取代flag,来表征当前扫描最前端。

随后定义变量j,j=(flag1-cnt)mod6,完成flag=5之后的循环移位操作。

3.4.2系统原理图:

1hz

J=(flag1-cnt)mod6

3.5各模块算法:

3.5.1符号说明:

(1)Count:

计数变量

(2)Mtcnt:

移位时间计数信号

(3)Flag:

标记位(0~5)

(4)Flag1:

标记位(可以大于5)

(5)Cnt:

扫描位

(6)Dire:

方向选择信号

3.5.2各模块算法框图

(1)1Hz分频

NY

(2)移位操作

1Hz

(3)动态扫描

20Hz

(4)扫描显示

3.6设计特点

利用高频扫描信号带来的视觉暂留来实现动态扫描,通过标记位与移位的同步操作及扫描位的逐次跟踪,实现动态扫描,达到循环效果。

3.7时序仿真图及分析:

设置dire=0,mode=00,即每一秒数字右移,部分仿真波形图如下:

如图,图中第2个clk(20Hz)上升沿来临时,clk1s(1Hz)迎来上升沿,flag和flag1分别加一,由4变成5,表明当前标记到第6个数码管,scan信号从001000到000001到100000再到001000,实现循环选管,从seg7信号可以看出,当前数码管显示010606。

如图,5.47s时clk1s上升沿来临,和上图clk1s上升沿来临时相隔1s,符合仿真时设置mode=00,即1s移位操作。

随着clk1s上升沿来临,flag不变,仍为5,作为循环扫描的标记位,flag1加一,变成6。

此时,scan从000010变成000001变成100000再变成000010,循环选管。

当前数码管显示401063。

和上图相比,学号010634时隔1s向右移位一次,变为601060,符合题目要求。

如需实现左移操作,只要设dire=1即可。

如需实现2s、3s、4s移位操作,只需设mode=01、10、11即可。

四、实验总结

这次设计,由于理论知识的不足,一开始的时候有些手忙脚乱,不知从何入手,在查阅了许多资料后有了一定的了解,实验的设计也慢慢有了雏形。

这次实验设计,使我掌握了用硬件描述语言进行高速集成电路设计的基本技能。

通过设计程序与实际仿真,熟悉了QuartusⅡ的设计与仿真环境。

VHDL语言与其他语言语法类似,但是执行方式存在很大的不同,各进程间并发执行是这门语言的一大特色。

这次实验结束了,在这次实践中除了学会一些技能之外,还深切的体会到人与人之间相互协调合作、交流思想是十分重要的。

在今后的工作中,我一定要戒骄戒躁,态度端正,要永远记住并深刻执行一句话:

态度决定一切。

通过这次毕业设计我明白学习是一个长期积累的过程,在往后的工作、生活中都应该不断的学习,努力提高自己的知道层次和综合素质。

附录一:

源程序(实验一)

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityshizhongis

port(clk:

instd_logic;

led1:

outstd_logic_vector(6downto0);

led2:

led3:

led4:

led5:

led6:

outstd_logic_vector(6downto0));

endshizhong;

architecturemainofshizhongis

signalhou1:

std_logic_vector(3downto0);

signalhou2:

signalmin1:

signalmin2:

signalsec1:

signalsec2:

begin

-------------------------------------------------

h110:

process(clk,hou2,min1,min2,sec1,sec2)

ifclk'

eventandclk='

1'

then

if(hou1="

0010"

andhou2="

0011"

)and(min1="

0101"

andmin2="

1001"

)and(sec1="

andsec2="

)then

hou1<

="

0000"

;

elsif(hou2="

and(min1="

))then

=hou1+1;

endif;

endprocessh110;

-----------------------------------------------

h220:

process(clk,min1,min2,sec1,sec2,hou1)

hou2<

elsifhou2="

elsif((min1="

=hou2+1;

endprocessh220;

m110:

process(clk,min2,sec1,sec2)

if(min1="

)then

min1<

elsif(min2="

and(sec1="

))then

=min1+1;

endprocessm110;

----------------------------------------------

m220:

process(clk,sec1,sec2)

ifmin2="

)then

min2<

elsif(sec1="

=min2+1;

endprocessm220;

---------------------------------------------

s110:

process(clk)

if(sec1="

sec1<

elseifsec2="

then

=sec1+1;

endprocesss110;

--------------------------------------------

s220:

ifsec2="

sec2<

elsesec2<

=sec2+1;

endprocesss220;

-------------------------------------------

disp:

process(hou1,hou2,min1,min2,sec1,sec2)

casehou1is

when"

=>

LED1<

0111111"

0001"

0000110"

1011011"

whenothers=>

1000000"

endcase;

casehou2is

LED2<

1001111"

0100"

1100110"

1101101"

0110"

1111101"

0111"

0000111"

1000"

1111111"

1101111"

whenothers=>

casemin1is

LED3<

casemin2is

LED4<

casesec1is

LED5<

casesec2is

LED6<

endprocessdisp;

------------------------------------------

endmain;

附录二

源程序(实验二):

----------------------------------------------------------------

entitynumberis

port(clk:

---------------------------------------------------时钟信号,20Hz

mode:

instd_logic_vector(1downto0);

--------------------------控制信号,用于选择模式

dire:

---------------------------------------------方向信号,1为向左,0为向右

seg7:

-------------------------7段显示控制信号(abcdefg)

scan:

outstd_logic_vector(5downto0));

----------------------数码管地址选择信号

endnumber;

architecturemainofnumberis

signalmtcnt:

integerrange0to3;

-----------------------------------------移位时间计数器

signalflag:

integerrange0to5;

-------------------------------------------位置标记

signalflag1:

integerrange0to255;

signalcnt:

signaldata:

integerrange0to9;

signalclk1s:

std_logic;

---------------------------------------------------------------------------------1Hz分频,即1s

variablecount:

ifcount=9thenclk1s<

=notclk1s;

count:

=0;

elsecount:

=count+1;

endif;

endprocess;

------------------------------------------------------------------------模式选择

casemodeis

when"

00"

mtcnt<

01"

=1;

10"

=2;

11"

=3;

whenothers=>

null;

endcase;

------------------------------------------------------------------------------移位标记

process(clk1s)

ifclk1s'

eventandclk1s='

ifcount=mtcntthen

ifflag<

5then

flag<

=flag+1;

endif;

flag1<

=flag1+1;

----------------------------------------------------------------------------------数码管动态扫描计数

ifcnt=flagthen

cnt<

else

cnt<

=cnt+1;

----------------------------------------------------------------------------------数码管动态扫描

process(cnt,dire,flag1)

variablej:

integerrange0to6;

j:

=(flag1-cnt)mod6;

casedireis

when'

----------------------------------------------------------------左移

casecntis

when0=>

scan<

000001"

when1=>

000010"

when2=>

000100"

when3=>

001000"

when4=>

s

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

当前位置:首页 > PPT模板 > 可爱清新

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

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