基于VHDL的数字钟设计及其仿真.docx
- 文档编号:13925015
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:14
- 大小:630.12KB
基于VHDL的数字钟设计及其仿真.docx
《基于VHDL的数字钟设计及其仿真.docx》由会员分享,可在线阅读,更多相关《基于VHDL的数字钟设计及其仿真.docx(14页珍藏版)》请在冰点文库上搜索。
基于VHDL的数字钟设计及其仿真
基于VHDL的数字钟设计及其仿真
结构化设计元件例化配置原理图
一引言
所谓数字钟是指利用电子电路构成的计时器,相对机械钟而言,数字钟能达到准确计时,
同时能对该种进行调整。
当然,在此基础上还能够实现整点报时,定时报闹等功能。
设计过程采用系统设计的方法,先分析任务得到系统要求,然后进行总体设计,划分子
系统,然后进行详细设计,决定各个功能子系统的VHDL程序,最后进行调试仿真。
通过此次设计,对基于VHDL的结构化描述有深刻理解,为今后的集成电路设计打下坚实的基础。
二设计任务和要求
对于时钟,最基本的要求应具有时分秒的计数功能。
对于秒必须满足每满60s,分要记
一个数,并且秒重新从零计起;对于分必须满足60min,小时要记一个数,并且分重新从零
计起,对于时满24后也应重新从零计起。
此外当数字中走慢或走快时,还应能予以调整。
所以要求设计的数字中电路应具有以下功能:
1.具有十分秒计数功能,并进行十进制数字显示。
2.能分别进行时分的手动校正。
三工作原理
时钟信号的频率有振荡器产生,由于技术最小单位为1s,所以时钟信号经分频器后输
出频率为1Hz的秒脉冲elk;而校准信号的频率应高于1Hz,若取0.5,则时钟信号经另一个分频器后输出频率为2Hz的校准信号脉冲clk1。
当无校准信号作用,即校分信号xf、校时信号xs为高电平,整个电路处于正常计数的
工作状态时分秒计数器采用同步计数方式其时钟脉冲端均接有分频器输出的时钟信号elk.。
en为使能端,高电平有效。
三个计数器的复位端elr置入数据控制端Id都接高电平,故其置入端d[7…0]失效,且各计数器输出端分别接译码显示电路。
当有校准信号时,不妨假设只有校分信号,即xf=O、xf=1,则在二选一数据选择器的控
制下,分计数器的en端将始终接高电平,即分计数器将独立于秒计数器自行独立计数,但其结果仍影响到时计数器,因为此时没有校时信号。
同理,当只有校时信号或同时具有校时、校分信号,情况同上述分析一样。
四各个模块的VHDL仿真图以及计数部分校正仿真图
(图一、无时间调整下数字钟的仿真运行图)
(图二、利用xs信号校对时间的小时数的仿真结果图)
六十进制计数电路模块对应的仿真波形如下图所示了,elk为时钟脉冲,clr为复位端,
en为使能控制端,Id位并行置数输入端,ql、qh和co分别为六十进制计数器的个位十位和进位输出,由仿真波形可以看出,个位ql每从0—9计10个数,十位qh计一个数,当qh
每计到5时,进位co输出一个脉冲,说明计数器没来60个elk时钟脉冲,进位co产生一
个脉冲,实现六十进制计数。
(图四、带有异步清零和置数功能的60进制计数器元件仿真图)
二分频电路所对应的仿真波形如下图所示,clr为复位端,elk为2Hz时钟脉冲,当clr
为1时,二分频电路有效,cnt=2clk,实现了分频作用。
一
VAMISCZMMB]l>Qht.MOMtMlCr*450*4t(NMt血叶MOQh*
cMi
r、
1
1
jyyYyyyyqrjwmwir_rui
(图五、对时钟的二倍分频元件仿真图)
2选1数据选择器模块对应的仿真波形如下图所示,有仿真波形可以看出,当选择输入
(图六、2选1数据选择元件仿真图)
TSOOttiXHOmOh*
11*
I50AntHGriISOOn2000m
■O_■—d*一X
■MwuimuuuinnnnniuiiL
(图七、D触发器元件仿真图)
二十四进制计数电路模块对应的仿真波形如下图所示,有仿真波形可以看出,计数器每
来24个elk时钟脉冲,进位co产生一个脉冲,实现了二十四进制计数。
五整个过程各个模块VHDL源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycounteris
port(clk:
instd_logic;
xf:
instd_logic;
xs:
instd_logic;
co3:
outstd_logic;
d1,d2,d3:
instd」ogic_vector(7downto0);qh1,ql1,qh2,ql2,qh3,ql3:
outstd」ogic_vector(3downto0));
endcounter;
architecturert1ofcounteriscomponentcnt2
port(clr:
instd_logic;
clk:
instd_logic;cnt:
bufferstd_logic);
endcomponent;
componentd_ff
port(d:
std_logic;clk:
std」ogic;
q:
outstd」ogic);
endcomponent;
componentmux21
port(a,b,s:
instd_logic;
y:
outstd_logic);
endcomponent;
componentcon24v
port(clk,en,clr,ld:
instd_logic;
d:
instd_logic_vector(7downto0);
co:
outstd_logic;
qh,ql:
bufferstd_logic_vector(3downto0));
endcomponent;
componentcon60v
port(clk,en,clr,ld:
instd_logic;
d:
instd_logic_vector(7downto0);
co:
outstd_logic;
qh,ql:
bufferstd_logic_vector(3downto0));
endcomponent;
componentand21
port(a,b:
instd_logic;
y:
outstd」ogic);
endcomponent;
signalvcc,cnt,q1,q2:
std_logic;
signaly1_mux21,y_and,y2_mux21,co1,co2:
std_logic;
signalqh1_con60v,ql1_con60v,qh2_con60v:
std」ogic_vector(3downto0);
signalql2_con60v,qh3_con24v,ql3_con24v:
std」ogic_vector(3downto0);
begin
vcc<='1';
comp1:
cnt2portmap(vcc,clk,cnt);
comp2:
d_ffportmap(xf,clk,q1);
comp3:
d_ffportmap(xs,clk,q2);
comp4:
mux21portmap(vcc,co1,q1,y1_mux21);
comp5:
and21portmap(co1,co2,y_and);
comp6:
mux21portmap(vcc,y_and,q2,y2_mux21);
comp7:
con60vportmap(cnt,vcc,vcc,vcc,d1,co1,qh1_con60v,ql1_con60v);qh1<=qh1_con60v;
ql1<=ql1_con60v;
comp8:
con60vportmap(cnt,y1_mux21,vcc,vcc,d2,co2,qh2_con60v,ql2_con60v);qh2<=qh2_con60v;
ql2<=ql2_con60v;
comp9:
con24vportmap(cnt,y2_mux21,vcc,vcc,d3,co3,qh3_con24v,ql3_con24v);qh3<=qh3_con24v;
ql3<=ql3_con24v;
endrt1;
cnt21
libraryieee;
useieee.std」ogic_1164.all;
entitycnt2is
port(clr:
instd_logic;
clk:
instd_logic;
cnt:
bufferstd_logic);
endcnt2;
architectureoneofcnt2is
begin
process(clr,clk)
begin
if(clr='0')thencnt<='1';
elsif(clk'eventandclk='0')then
if(cnt='1')thencnt<='0';
elsecnt<='1';
endif;
endif;
endprocess;
endone;
configurationcon_cnt2ofcnt2is
forone
endfor;
endcon_cnt2;
cnt2
con24v
libraryieee;
useieee.std」ogic_1164.all;
useieee.std_logic_unsigned.all;
entitycon24vis
port(clk:
instd_logic;
en:
instd_logic;
clr:
instd_logic;
ld:
instd_logic;
d:
instd_logic_vector(7downto0);
co:
outstd_logic;
qh:
bufferstd_logic_vector(3downto0);
ql:
bufferstd_logic_vector(3downto0));
endcon24v;
architecturebhv1ofcon24vis
begin
co<='1'when(qh="0010"andql="0011"anden='1')else'O';
process(clk,clr,ld)
begin
if(clr='O')then
qh<="0000";
ql<="0000";
elsif(clk'eventandclk='1')thenif(ld='0')then
qh<=d(7downto4);
ql<=d(3downto0);
elsif(en='1')then
if(qh="0010"andql="0011")thenql<="0000";
qh<="OOOO";
else
ql<=ql+'1';
if(ql<9)then
ql<=ql+1;
elseql<="0000";
if(qh<2)thenqh<=qh+1;
elseqh<="OOOO";
endif;
endif;
endif;
endif;
endif;
endprocess;
endbhv1;
configurationcon_con24vofcon24vis
forbhv1
endfor;
endcon_con24v;
con24v
con60v
libraryieee;
useieee.std」ogic_1164.all;
useieee.std_logic_unsigned.all;
entitycon60vis
port(clk:
instd_logic;
en:
instd_logic;
clr:
instd_logic;
ld:
instd_logic;
d:
instd_logic_vector(7downto0);
co:
outstd_logic;
qh:
bufferstd_logic_vector(3downto0);
ql:
bufferstd_logic_vector(3downto0));
endcon60v;
architecturebhv2ofcon60vis
begin
co<='1'when(qh="0101"andql="1001"anden='1')else'0';process(clk,clr,ld)
begin
if(clr='0')then
qh<="0000";
ql<="0000";
elsif(clk'eventandclk='1')then
if(ld='0')then
qh<=d(7downto0);
ql<=d(3downto0);
elsif(en='1')then
if(ql<9)thenql<=ql+1;
elseql<="0000";
if(qh<5)thenqh<=qh+1;
elseqh<="0000";
endif;
endif;
endif;
endif;
endprocess;
endbhv2;
configurationcon_con60vofcon60vis
forbhv2
endfor;
endcon_con60v;
con60v
d_ff
libraryieee;
useieee.std」ogic_1164.all;
entityd_ffis
port(d:
instd_logic;
clk:
instd_logic;
q:
outstd_logic);
endd_ff;
architecturebhv3ofd_ffis
begin
process(clk)
begin
if(clk'eventandclk='1')then
q<=d;
endif;
endprocess;
endbhv3;
configurationcon_d_ffofd_ffis
forbhv3
endfor;
endcon_d_ff;
d_ff
mux21
libraryieee;
useieee.std」ogic_1164.all;
entitymux21is
port(a,b,s:
instd_logic;y:
outstd_logic);
endmux21;
architecturebhv4ofmux21is
begin
y<=awhens='0'elseb;
endbhv4;
configurationcon_mux21ofmux21isforbhv4
endfor;
endcon_mux21;
mux21
and21
libraryieee;
useieee.std」ogic_1164.all;
entityand21is
port(a,b:
instd_logic;
y:
outstd」ogic);
endand21;
architectureand21_archofand21isbegin
y<=aandb;
endand21_arch;
configurationcon_and21ofand21isforand21_arch
endfor;
endcon_and21;
and21
六总结
本次通过数字钟实现的例子展现了VHDL在灵活性,层次化设计方法的优点。
程序中
设计了五种元件,采用配置的方式分别将其实体和结构体相连结。
再通过元件的例化,端口
VHDL语言具有很强的电路描述和建模能力,能
映射把实现数字钟的整个电路图。
说明了从多个层次对数字系统进行建模与描述。
附:
数字时钟的的具体电路图
-闻tt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 数字 设计 及其 仿真