EDA计数器设计Word下载.docx

上传人:b****5 文档编号:21422563 上传时间:2023-01-30 格式:DOCX 页数:14 大小:317.84KB
下载 相关 举报
EDA计数器设计Word下载.docx_第1页
第1页 / 共14页
EDA计数器设计Word下载.docx_第2页
第2页 / 共14页
EDA计数器设计Word下载.docx_第3页
第3页 / 共14页
EDA计数器设计Word下载.docx_第4页
第4页 / 共14页
EDA计数器设计Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

EDA计数器设计Word下载.docx

《EDA计数器设计Word下载.docx》由会员分享,可在线阅读,更多相关《EDA计数器设计Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

EDA计数器设计Word下载.docx

instd_logic;

----------------------时钟脉冲

clk1:

---------------------数码管选通时钟脉冲

md1:

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

0为计时,1为闹钟

md2:

instd_logic_vector(1downto0);

---10为时校正(定时),01为分校正(定时)

speak:

outstd_logic;

-------------------闹钟0

dout:

outstd_logic_vector(6downto0);

--数码管七段码输出

selout:

outstd_logic_vector(2downto0));

---数码管选通输出

endclock;

architectureoneofclockis

signalsel:

std_logic_vector(2downto0);

--------模6计数信号(数码管选通输入)

signalhou1:

std_logic_vector(3downto0);

-------小时十位

signalhou2:

-------小时个位

signalmin1:

-------分钟十位

signalmin2:

-------分钟个位

signalseth1:

------定时小时十位

signalseth2:

------定时小时个位

signalsetm1:

------定时分钟十位

signalsetm2:

------定时分钟个位

signalsec1:

-------秒十位

signalsec2:

-------秒个位

signalh1:

------输出小时十位

signalh2:

------输出小时个位

signalm1:

------输出分钟十位

signalm2:

------输出分钟个位

signals1:

------输出秒十位

signals2:

------输出秒个位

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

begin

----------------------------------------------模6计数(数码管选通)

choice:

process(clk1)

ifclk1'

eventandclk1='

1'

then

ifsel="

101"

sel<

="

000"

;

else

=sel+1;

endif;

endif;

endprocesschoice;

selout<

=sel;

-----------------------------------------------小时十位

h110:

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

ifclk'

eventandclk='

if(hou1="

0010"

andhou2="

0011"

)and(min1="

0101"

andmin2="

1001"

)and

(sec1="

andsec2="

)then

hou1<

0000"

elsifhou1="

andhou2="

andmd1='

0'

andmd2="

10"

thenhou1<

elsif(hou2="

and(min1="

)and(sec1="

and

sec2="

))or(hou2="

=hou1+1;

endprocessh110;

-----------------------------------------------小时个位

h220:

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

(sec1="

hou2<

elsifhou2="

sec2="

elsif(hou2="

)or(hou1="

hou2<

elsif((min1="

))or

(md1='

=hou2+1;

endprocessh220;

-----------------------------------------------分钟十位

m110:

process(clk,min2,sec1,sec2,md1,md2)

if(min1="

)then

min1<

elsifmin1="

andmin2="

and(md1='

01"

)then

elsif(min2="

and(sec1="

))or(min2="

and

md1='

=min1+1;

endprocessm110;

----------------------------------------------分钟个位

m220:

process(clk,sec1,sec2,md1,md2)

ifmin2="

min2<

elsifmin2="

elsif(sec1="

)or(md1='

=min2+1;

endprocessm220;

---------------------------------------------秒十位

s110:

process(clk,sec1,sec2)

if(sec1="

sec1<

elsifsec2="

then

=sec1+1;

endprocesss110;

--------------------------------------------秒个位

s220:

process(clk,sec2)

ifsec2="

sec2<

elsesec2<

=sec2+1;

endprocesss220;

-------------------------------------------时间设置小时部分

sethour1:

process(clk,seth2)

ifseth1="

andseth2="

seth1<

elsifseth2="

=seth1+1;

endprocesssethour1;

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

sethour2:

process(clk,md1,md2,seth1)

if(seth1="

)orseth2="

seth2<

elsifmd1='

eth2<

=seth2+1;

endprocesssethour2;

-------------------------------------------时间设置分钟部分

setmin1:

process(clk,setm1,setm2)

ifsetm1="

andsetm2="

setm1<

elsifsetm2="

=setm1+1;

endprocesssetmin1;

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

setmin2:

process(clk,md1,md2,setm2)

ifsetm2="

setm2<

=setm2+1;

endprocesssetmin2;

--------------------------------------------闹铃

speaker:

process(clk1,hou1,hou2,min1,min2)

ifseth1=hou1andseth2=hou2andsetm1=min1andsetm2=min2then

if(sec2="

orsec2="

orsec2="

0100"

0110"

1000"

)then

speak<

='

elsespeak<

endprocessspeaker;

-------------------------------------------数码管显示

disp:

process(sel,md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2)

ifsel="

caseh1is

when"

=>

dout<

0111111"

0001"

0000110"

1011011"

whenothers=>

1000000"

endcase;

elsifsel="

100"

caseh2is

1001111"

1100110"

1101101"

1111101"

0111"

0000111"

1111111"

1101111"

whenothers=>

endcase;

011"

casem1is

elsifsel="

010"

casem2is

elsifsel="

001"

cases1is

cases2is

endif;

ifmd1='

then---------------计时时间显示和设置模式

h1<

=hou1;

h2<

=hou2;

m1<

=min1;

m2<

=min2;

s1<

=sec1;

s2<

=sec2;

else-------------闹铃时间显示和设置模式

=seth1;

=seth2;

=setm1;

=setm2;

1111"

endprocessdisp;

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

end;

三、仿真结果

我们将上述VHDL程序通过Max+PlusII进行编译仿真,仿真结果符合我们设计所预想的功能。

仿真结果见下图。

图1:

正常计时(md1=0,时钟模式)

(所指处,sel值为0,选通数码管秒个位,dout七段码输出sec2,即2)

图2:

分钟校正(md1=0,时钟模式)

(所指处,sel值为3,选通数码管分钟十位,dout七段码输出min1,即3)

图3:

小时校正(md1=0,时钟模式)

(所指处,sel值为4,选通数码管小时个位,dout七段码输出hou2,即8)

图4:

分钟定时(md1=1,闹钟模式)

(所指处,sel值为3,选通数码管分钟十位,dout七段码输出setm1,即2)

图5:

小时定时(md1=1,闹钟模式)

(所指处,sel值为4,选通数码管小时个位,dout七段码输出seth2,即6)

四、结论与收获

在整个设计过程中,通过查阅相关资料,我们一步步建立了对EDA设计的理解。

通过解决在编程、调试以及仿真过程中的种种问题,也加深了我们对软件设计环境的熟悉程度。

通过仿真,我们也感性地认识到了曾经忽视的问题,比如器件间信号传递的时延以及产生毛刺会对电路功能实现的影响。

而最让我们印象深刻的是一点是,在编程当中,虽然某些程序的结构获得的效果以及软件仿真的结果是一致的,但在实际硬件实现是却会有很大的不同。

而这一切,都让我们获益良多。

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

当前位置:首页 > PPT模板 > 动态背景

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

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