VHD语言数字时钟实验设计.docx
- 文档编号:4164616
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:14
- 大小:248.96KB
VHD语言数字时钟实验设计.docx
《VHD语言数字时钟实验设计.docx》由会员分享,可在线阅读,更多相关《VHD语言数字时钟实验设计.docx(14页珍藏版)》请在冰豆网上搜索。
VHD语言数字时钟实验设计
河南农业大学
课程设计报告
设计题目:
VHD语言实现数字钟实验报告
学院:
理学院
专业:
电子信息科学与技术
学号:
08
班级:
07级电科
(2)班
姓名:
贾秋峰
电子邮件
日期:
2011年01月
成绩:
指导教师:
河南农业大学
理学院
课程设计任务书
学生姓名贾秋峰指导教师贾树恒林爱英
学生学号08专业电子信息科学与技术
题目VHD语言实现数字钟实验报告
任务与要求
一、设计实验说明:
1、数字时钟主要由:
分频器、扫描显示译码器、六十进制计数器(或十进制计数器与6进制计数器组成)、六十进制计数器(或十进制计数器与6进制计数器组成)、十二进制计数器(或二十四进制计数器)电路组成。
在整个时钟中最关键的是如何获得一个精确的1HZ计时脉冲,
2、数字时钟显示由时(12或24进制任选)、分(60进制)、秒(60进制)组成,利用扫描显示译码电路在六个数码管显示。
二、数字时钟组成及功能:
1、分频率器:
用来产生1HZ计时脉冲;
2、十二或二十四进制计数器:
对时进行计数
3、六十进制计数器:
对分和秒进行计数;
4、六进制计数器:
分别对秒十位和分十位进行计数;
5、十进制计数器:
分别对秒个位和分个位进行计数;
6、扫描显示译码器:
完成对7字段数码管显示的控制;
三、系统硬件要求:
1、时钟信号为5MHz;2、FPGA芯片型号EPM7128LC84—15、EP1K30TC144—3或EP1K100QC208—3(根据实验箱上FPGA芯片具体选择);3、8个7段扫描共阴级数码显示管;4、按键开关(清零、启动、保持);
四、硬件实现
将时序仿真正确的文件下载到实验箱中的EPM7128LC84—15、EP1K30TC144—3或EP1K100QC208—3中,通过合适的管脚分配,将相应的管脚连接起来,验证设计是否完成设计要求;
五、要求
1、精确显示时、分、秒。
2、数字时钟要求:
具有对时、分、秒置数功能(利用秒脉冲置数或利用拨码开关、键盘直接置数);3、能够完成整点报时功能。
(选作)
开始日期年月日完成日期年月日
课程设计所在单位理学院电子科学系
VHD语言实现数字钟实验报告
一.实验目的
在MAX+plusII软件平台上,熟练运用VHDL语言。
完成数字时钟设计的软件编程、编译、综合、仿真。
使用EDA实验箱,实现数字时钟的硬件功能。
了解数字时钟的攻击你工作原理。
学习掌握数字时钟的设计方法,会设计比较复杂的数值时钟系统。
二.设计要求
1、精确显示时、分、秒;数字时钟要求:
具有对时、分、秒置数功能(利用秒脉冲置数或利用拨码开关、键盘直接置数);能够完成整点报时功能。
(选作)
2、数字时钟主要由:
分频器、扫描显示译码器、六十进制计数器(或十进制计数器与6进制计数器组成)、六十进制计数器(或十进制计数器与6进制计数器组成)、十二进制计数器(或二十四进制计数器)电路组成。
在整个时钟中最关键的是如何获得一个精确的1HZ计时脉冲。
三、系统硬件要求
(1)、时钟信号为5MHz;
(2)、FPGA芯片型号EPM7128LC84—15、EP1K30TC144—3或EP1K100QC208—3(根据实验箱上FPGA芯片具体选择);
(3)、8个7段扫描共阴级数码显示管;
(4)、按键开关(清零、启动、保持);
四、实验原理
1、本实验运用VHD语言设计时钟计数器,理解其内部原理与模块设计
数字时钟组成及功能:
(1)、分频率器:
用来产生1HZ计时脉冲;
(2)、十二或二十四进制计数器:
对时进行计数
(3)、六十进制计数器:
对分和秒进行计数;
(4)、六进制计数器:
分别对秒十位和分十位进行计数;
(5)、十进制计数器:
分别对秒个位和分个位进行计数;
(6)、扫描显示译码器:
完成对7字段数码管显示的控制;
实验原理图如下:
图9-1()
2、CPLD设计过程
设计输入
数字钟
对4MHz时钟做4000000分频产生秒时钟,以秒时钟为时基做秒、分、时计数电路,将各计数值经7段译码在5只LED数码管上显示出来。
程序设计的顶层图如下:
五、实验步骤
1.单元电路设计
第一部分数字钟
(1)4MHz分频器gate4
通过编程实现,设晶振产生的信号为4MHz,要求输出1Hz时钟信号,则分频
数为4M,需要22位计数器。
用VHD语言设计的文本文件如下:
libraryieee;
usegate4is
port(
CLK:
instd_logic;
sgate:
outstd_logic;
slock:
outstd_logic
);
endgate4;
architecturearc_gate4ofgate4is
signalcount:
std_logic_vector(21downto0);
signaloc:
std_logic;
begin
process
begin
waituntilclk'eventandclk='1';
if(count<3999999)then
count<=count+1;
oc<='0';
else
count<=(others=>'0');
oc<='1';
endif;
endprocess;
slock<=oc;
process
begin
waituntilclk'eventandclk='1';
sgate<=oc;
endprocess;
endarchitecturearc_gate4;
其仿真波形如下:
形成符号如下:
(2)分·秒计时m60采用VHD语言十进制设计的文本文件如下:
libraryieee;
usem60is
port(
CLK:
instd_logic;
CR:
instd_logic;
EN:
instd_logic;
QL:
outstd_logic_vector(3downto0);
QH:
outstd_logic_vector(3downto0);
OC:
outstd_logic
);
endm60;
architecturebehavofm60is
signalcouL:
std_logic_vector(3downto0);
signalcouH:
std_logic_vector(3downto0);
begin
process(CLK,CR,EN)
begin
ifCR='0'then
couL<="0000";
couH<="0000";
elsifclk'eventandclk='1'then
ifEN='1'then
if(couL=9andcouH=5)then
couL<="0000";
couH<="0000";
elsifcouL=9then
couL<="0000";
couH<=couH+1;
else
couL<=couL+1;
endif;
endif;
endif;
endprocess;
process(couL,couH)
begin
if(couL=9andcouH=5)then
OC<='1';
else
OC<='0';
endif;
endprocess;
QL<=couL;
QH<=couH;
endarchitecturebehav;
其仿真波形如下:
形成符号如下:
(3)时计时counter12同样是采用VHD语言二进制设计的文本文件如下:
:
libraryieee;
usecounter12is
port(
CLK:
instd_logic;
EN:
instd_logic;
CR:
instd_logic;
Q:
outstd_logic_vector(3downto0);
OC:
outstd_logic
);
endcounter12;
architecturearc_counter12ofcounter12is
signalcount:
std_logic_vector(3downto0);
begin
process(CR,CLK,EN)
begin
ifCR='0'then
count<=(others=>'0');
elsifclk'eventandclk='1'then
ifEN='1'andcount<11then
count<=count+1;
elsifEN='1'andcount=11then
count<="0000";
endif;
endif;
endprocess;
process(count)
begin
ifcount=11then
OC<='1';
else
OC<='0';
endif;
endprocess;
Q<=count;
endarchitecturearc_counter12;
其仿真波形如下:
形成符号如下
(4)7段译码器seg_7
用VHD语言文本输入法设计的7段译码器如下:
libraryieee;
useseg_7is
port(dat:
instd_logic_vector(3downto0);
a,b,c,d,e,f,g:
outstd_logic);
endseg_7;
architecturearcofseg_7is
signaltmp:
std_logic_vector(6downto0);
begin
process(dat)
begin
casedatis
when"0000"=>tmp<="0000001";
when"0001"=>tmp<="1001111";
when"0010"=>tmp<="0010010";
when"0011"=>tmp<="0000110";
when"0100"=>tmp<="1001100";
when"0101"=>tmp<="0100100";
when"0110"=>tmp<="0100000";
when"0111"=>tmp<="0001111";
when"1000"=>tmp<="0000000";
when"1001"=>tmp<="0000100";
when"1010"=>tmp<="0001000";
when"1011"=>tmp<="1100000";
when"1100"=>tmp<="0110001";
when"1101"=>tmp<="1000010";
when"1110"=>tmp<="0110000";
when"1111"=>tmp<="0111000";
whenothers=>null;
endcase;
endprocess;
a<=tmp(6);
b<=tmp(5);
c<=tmp(4);
d<=tmp(3);
e<=tmp
(2);
f<=tmp
(1);
g<=tmp(0);
endarc;
生成图形如下:
2.编译
单元电路单个编译,对应的文件为MAX+plus中的
4M分频
分·秒计时
时计时
7段译码器
编译通过。
3.仿真形成符号
都通过编译的单元电路,仿真生成对应的仿真文件为:
4M分频
分·秒计时
时计时
7段译码器
并且建立符号,符号名称即为相应的文件名称
建立核心模块:
仿真如下:
5.选好器件,锁定引脚
新建gdf格式文件,选定之前弄好的器件,搭接好电路图为:
根据下列表格锁定管脚,如上图的红色字体表示已锁定管脚。
表1
管脚
LED
a
b
c
d
e
f
g
秒个位
60
61
63
64
65
67
68
秒十位
69
70
73
74
75
76
77
分个位
79
80
81
4
5
6
8
分十位
9
10
11
12
15
16
17
小时个位
18
20
21
22
24
25
27
表2
状态指示
O1
O2
O3
O4
O5
O6
O7
O8
管脚
50
51
52
54
55
56
57
58
6.下载
编译通过后,选OPTIONS/SELECTDEVICE/MAX7000S/epm7128slc84-6.再选OPTIONS/HARDWARESETUP/ByteBlaster(MV)在点击PROGRAM下载到实验板上成功。
得到数字钟从59秒进1分,59分进1小时,并且基本没有时差。
7、调试排除故障
在建立单元单元电路时基本没有出现故障。
但在弄中心模块时,发现仿真出错。
把counter12模块的CLK接了M60的的同一触发信号。
后来询问同学知道时计数的时钟信号需由分秒计数的输出进位给定。
六、实验总结和心得体会
此次实验,通过用MAX+PLUS2运行环境编译,在由电路完成数字钟变成全由VHD语言实现数字钟中。
逐渐熟悉及了解MAX+PLUS2运行环境。
做到每个程序编译仿真正确。
及掌握了整个单元VHD语言设计,编译,仿真,下载的全过程。
在这次实验过程中我深刻体会到这门学问的重要性,也知道自己所学的现有知识远远不够实验的需要。
开始试验的时候感觉很吃力,因为原来没有认真系统的学习这门课程的缘故,很多东西都似懂非懂的,还常常出错。
后来经过老师的认真讲解和我们自己不断编程和仿真,我们逐渐的开始了解这门课程,满满就开始对它有了兴趣。
然后再兴趣的驱使下,我们不断学习不断深入,最总学到了很多,也完成了老师交给的任务,取得了一些实验成果。
在虽然在实验设计和实现过程中出现很多困难和不解的问题,但在老师的悉心指导和认真讲解下,我们收获很多并且顺利的完成了实验。
这次实验更加坚定了我学好这门课程的信心,我会继续努力地!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHD 语言 数字 时钟 实验设计