99分钟定时器的VHDL设计Word格式文档下载.docx
- 文档编号:3645903
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:20
- 大小:515.15KB
99分钟定时器的VHDL设计Word格式文档下载.docx
《99分钟定时器的VHDL设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《99分钟定时器的VHDL设计Word格式文档下载.docx(20页珍藏版)》请在冰点文库上搜索。
2.小数分频的基本原理
小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。
如设计一个分频系数为10.1的分频器时,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为:
F=(9×
10+1×
11)/(9+1)=10.1
3.系统功能概述
本系统是一个基于FPGA的半整数分频器,具有以下功能:
有一个5MHz的时钟源,通过半整数分频器后电路中可以产生的是一个2MHz的时钟信号
二.系统设计方案和程序设计
1.系统设计方案
由于分频比为2.5,因此采用小数分频。
分频系数为N-0.5的分频器,其电路可由一个异或门、一个模N计数器和二分频器组成。
下图给出了通用半整数分频器电路组成。
由于分频比为2.5则本实验中先要设计一个模3的计数器,然后建立模三计数器的元件,再利用原理图设计完成分频器的设计
2.VHDL程序设计
模七计数器VHDL程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycounter7is
port(clk,rst,en:
instd_logic;
qa,qb,qc:
outstd_logic);
endcounter7;
architecturebehavioralofcounter7is
signalcount:
std_logic_vector(2downto0);
begin
process(clk,rst)
if(rst='
1'
)then
count(2downto0)<
="
000"
;
elsif(clk'
eventandclk='
if(en='
if(count="
110"
)thencount<
elsecount<
=count+1;
endif;
endprocess;
qa<
=count(0);
qb<
=count
(1);
qc<
=count
(2);
endbehavioral;
3.模七计数器仿真波形图
图1模七计数器仿真波形图
4.输入、输出接口说明
表1输入、输出接口
接口
名称
类型
(输入/输出)
结构图上
的信号名
引脚号
说明
INCLK
IN
inclock
2
系统时钟7MHz
OUTCLK
OUT
outclk
3
系统输出
Q
q
4
5.模七计数器元件图
图2模七计数器元件图
6.半整数分频器原理图
图3半整数分频器原理图
7.半整数分频器仿真波形图
图4半整数分频器仿真波形图
三.课程设计总结
通过本次实习我学会了如何操作max2软件来编辑计数器程序,画出了利用计数器原理的分频器原理图,掌握了利用max2软件绘制原理图和程序编程的方法,同时还学会了用max2软件来形象的仿真计数器和分频器的波形,以及器件的波形图。
在软件的实际操作过程中通过具体的方法结合图形将从书上学到的理论知识进行分析实践,从而更好的理解和掌握了如何用软件设计图形和实际仿真的方法,以及max2软件应用方面的知识,为以后的实践积累了宝贵的经验,打下了坚实的基础。
四.参考文献
[1]谭会生,张昌凡.EDA技术及应用.西安:
西安电子科技大学出版社,2006,12.
[2]潘松,王国栋编著.VHDL实用教程.成都:
电子科技大学出版社,2006.
[3]徐志军,徐光辉编著.CPLD/FPGA的开发与应用.北京:
电子工业出版社.2002.
[4]杨晓慧,杨永健.基于FPGA的EDA/SOPC技术与VHDL.北京:
国防工业出版社,2007,7.
[5]王诚,吴继华等,ALTERAFPGA/CPLD设计(基础篇).北京:
人民邮电出版社,2008,12.
[6]陈雪松,滕立中编著.VHDL入门与应用.北京:
人民邮电出版社.2000.
[7]张凤祥.第22届全国计算机新科技与计算机教育学术会议论文集.北京:
科学教育出版社,2011.
1.系统设计任务
通过设计,定时器可以整体清零;
可以定时最高到99MIN;
以秒速度递增至预定时间,以秒速度递减至零。
2.系统功能概述
本系统是一个99分钟的定时器,具有以下功能:
具有整体清零(reset)功能,定时99分钟。
以秒速度递增至99分钟停止,启动报警(cout)5秒钟。
具有置位(cn)控制,即cn高电平时,clk脉冲上升沿到来,计数加一;
cn低电平时,置位结束,进入倒计时阶段,以秒速度使输出计数减一至零结束,并同时报警(cout)5秒钟。
时钟信号提供秒信号(1HZ);
四位数码管静态显示,高位high(3downto0)显示分,低位low(3downto0)显示秒
1.系统设计方案
图1系统设计框图
通过记数器控制中心输入秒信号,并输出两个四位的BCD码,可分别来表示各位与十位,也可整体复位清零。
通过该记数器实现以秒速度递增至清零,该记数器以秒的速度递增至99来实现置位,而以秒的速度递减至零以实现定时功能。
当以秒速度递增至99分钟停止,启动报警(cout)5秒钟。
cn低电平时,置位结束,进入倒计时阶段,以秒速度使输出计数减一至零结束时也同时报警(cout)5秒钟。
通过二选一选择器对个位和十位进行扫描输出,并将输出送到译码器,通过译码器对输入的四位BCD码进行七段码编译,然后输出到数码管。
Aaa控制计数模块,是该定时器的核心部分.res为复位端,用来清零,采用异步复位方式;
cn用于置位,高电平有效。
cout端将在定时结束时产生高电平。
Low和high为四位BCD码输出端口,可用于显示。
当cn有效时,clk脉冲上升沿到来,计数加1;
当cn为低电平时,置位结束,进入计时阶段,每1个时钟周期发出一个脉冲,使输出记数减1,直到记时结束,令cout位为高电平为止。
该模块的源程序如下:
entityaaais
port(cn,res,clk:
instd_logic;
cout:
outstd_logic;
flow,fhigh,mlow,mhigh:
outstd_logic_vector(3downto0));
endaaa;
architectureartofaaais
signalfdisplow,fdisphigh,mdisplow,mdisphigh:
std_logic_vector(3downto0);
--定义信号分别表示分钟和秒钟的十位和个位
begin
process(clk,cn,res)
if(res='
0'
)then
mdisplow<
0000"
mdisphigh<
fdisplow<
fdisphigh<
cout<
='
--res低电平执行复位
elsif(clk'
ifcn='
then
ifmdisplow<
9then
mdisplow<
=mdisplow+1;
--秒钟个位数小于9时执行计数加1
cout<
elsifmdisplow="
1001"
andmdisphigh<
5then
mdisphigh<
=mdisphigh+1;
--秒钟十位进位加1
elsifmdisphigh="
0101"
andfdisplow<
fdisplow<
=fdisplow+1;
--满59秒后分钟个位加1
elsiffdisplow="
andfdisphigh<
fdisphigh<
=fdisphigh+1;
--满9分59秒后分钟十位加1
1000"
andfdisphigh="
then
--计时至99分停止
--计时停止cout变为高电平
elsifcn='
then--cn为0进入倒计时
ifmdisplow>
0then
=mdisplow-1;
--秒钟减1
andmdisphigh>
=mdisphigh-1;
--个位0时十位减1
andfdisplow>
=fdisplow-1;
--分减1
andfdisphigh>
=fdisphigh-1;
--分减10
elsiffdisphigh="
andfdisplow="
andmdisphigh="
andmdisplow="
--倒计时结束cout变为高电平
endif;
endprocess;
mhigh<
=mdisphigh;
mlow<
=mdisplow;
fhigh<
=fdisphigh;
flow<
=fdisplow;
endart;
Aaa控制计数模块仿真波形图:
图2Aaa控制计数模块仿真波形图
器件仿真图:
图3器件仿真图
译码器disp是对四位BCD码进行七段码译码,其输出Q0~Q6分别接数码管各段进行显示输出,它的操作源程序如下:
entitydispis
port(a:
instd_logic_vector(3downto0);
p:
outstd_logic_vector(6downto0));
enddisp;
architecturedisp_arcofdispis
process(a)
caseais
when"
=>
p<
0111111"
0001"
0000110"
0010"
1011011"
0011"
1001111"
0100"
1100110"
1101101"
0110"
1111101"
0111"
0000111"
1111111"
1101111"
--七段译码器显示0—9
whenothers=>
0000000"
endcase;
enddisp_arc;
译码器disp仿真波形图如图三:
图4译码器disp仿真波形图
器件仿真图如图四:
图5器件仿真图
报警器模块主要功能是计数定时器以秒速度递增至99分钟停止时启动报警(cout)5秒钟。
倒计时阶段,计时器以秒速度使输出计数减一至零结束时也同时报警(cout)5秒钟。
它的操作源程序如下:
entitycou5is
port(clk,reset,en:
speak:
endcou5;
architecturebehaviorofcou5is
signalcount:
--定义计数信号
process(reset,clk)
ifreset='
oren='
count(2downto0)<
speak<
--有复位信号或始能端低电平时输出0
else
if(clk'
count<
--有时钟上升沿计数加1,报警信号speak高电平
ifcount="
101"
--5秒之后停止报警speak为0
endbehavior;
报警器模块仿真波形图:
图6报警器模块仿真波形图
图7器件仿真
根据定时器要实现的功能对以上程序进行元件例化,例化程序如下:
定时器例化程序
entitydsqis
port(sna,resa,clka,resb,clkb:
myimal:
outstd_logic_vector(6downto0);
--秒钟个位译码输出
myimah:
--秒钟十位译码输出
fyimal:
--分钟个位译码输出
fyimah:
--分钟十位译码输出
baoj:
outstd_logic
);
endentitydsq;
architectureartofdsqis
componentaaais
endcomponentaaa;
--aaa控制模块
componentdispis
endcomponentdisp;
--译码模块
componentcou5is
endcomponentcou5;
--报警模块
signals1,s2,s3,s4:
signals5:
std_logic;
u1:
aaaportmap(sna,resa,clka,s5,s1,s2,s3,s4);
u2:
dispportmap(s1,fyimal);
u3:
dispportmap(s2,fyimah);
u4:
dispportmap(s3,myimal);
u5:
dispportmap(s4,myimah);
u6:
cou5portmap(clkb,resb,s5,baoj);
--各模块通过位置关联
endarchitectureart;
定时器仿真波形图:
图8定时器仿真波形图
图9器件仿真图
3.输入、输出接口说明
(输入/出)
结构图上的信号名
I0
sna
计数控制模块Aaa置位控制端
CLK
clka
系统时钟1Hz
clkb
I1
resa
计数控制模块Aaa复位控制端
I2
resb
报警模块复位控制端
Q0..6
myimal
译码器对秒钟的个位译码输出
Q7..12
myimah
译码器对秒钟的十位译码输出
Q13..18
0UT
fyimal
译码器对分钟的个位译码输出
Q19..24
fyimah
译码器对分钟的十位译码输出
Q25
baoj
报警模块输出端接报警器
通过上一个实验“基于FPGA的半整数分频器设计”的实际操作经验,我又试着做了一个定时器,在这个试验的实际操作过程中,我分别设计了Aaa控制计数模块、译码器disp、报警器等模块用来共同实现定时器的功能。
在对各个模块和例化程序进行仿真地过程中,通过仿真波形图来分析判断程序设计的正确性。
在全部的操作过程中尽管有很多不懂的知识点,但是在同学间的相互交流下,大部分都得到了有效的解决,加深了我对理论知识的理解,增强了实际动手用max2软件编程和仿真的能力,不仅让我积累了宝贵的经验,更为了我以后的实际工作做了很好的铺垫。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 99 分钟 定时器 VHDL 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)