EDA数字钟设计报告.docx
《EDA数字钟设计报告.docx》由会员分享,可在线阅读,更多相关《EDA数字钟设计报告.docx(14页珍藏版)》请在冰豆网上搜索。
EDA数字钟设计报告
湖南机电职业技术学院
实训报告
实训课题EDA设计技术及应用
班级电子0903班
小组第15小组
姓名湛虎刘慧
指导老师曾荣周
2011年06月11日
目录
1、设计要求
2、设计原理
3、数字钟各模块的VHDL程序
4、仿真波形图
5、数字钟顶层结构
6、总结
1.数字钟设计要求
(1)具有正确的时、分、秒计时功能。
(2)计时结果要求用6个数码管分别显示时、分、秒的十位和各位。
有校时功能。
当SB键按下时,时计数器以秒脉冲的速度递增,并按60min循环,及计时倒数到59min后再回00。
当sa按键按下时,时计数器以秒脉冲的速度递增,并按24h循环,即计数器到23h后再回00。
(3)利用扬声器整点报时。
当计数到达59’50”时开始报时,在59’50”52”54”56”58”时鸣叫,鸣叫声频为500Hz;到达59’60”时为最后一声整点报时,频率为1kHz。
2.设计原理
明确了数字钟的功能要求,就可以对数字钟按照功能进行模块划分。
下图是它的顶层电路原理图。
CLKK和三个FEN10共同构成分频器模块。
CLKK模块产生1KHz和500Hz两种频率信号,1KHz,的信号再经三个FEN10模块分频成为1Hz的方波信号。
1Hz信号作为秒脉冲送入60进制计数器CNT60进行秒计时,满60s产生一个进位信号co,它和1Hz信号经过2选1数据选择器21MUX由sb键控制选择其一送入分计数器进行计数。
即按下sb,将1Hz秒脉冲信号选送到分计数器,从而实现快速校分功能;正常状态下,sb键弹起,则将满60s产生的进位信号co作为时钟计数,实现正常计时功能,当分计数器计满60分时,将其进位信号送至时计数器。
3.数字钟各模块的VHDL程序及仿真波形图
(1)六十进制BCD码计数器的源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt60IS
PORT(clk,clr:
INSTD_LOGIC;
ten,one:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
co:
OUTSTD_LOGIC);
ENDcnt60;
ARCHITECTUREarcOFcnt60IS
SIGNALcin:
STD_LOGIC;
BEGIN
PROCESS(clk,clr)
VARIABLEcnt0:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFclr='1'THEN
cnt0:
="0000";
ELSIFclk'EVENTANDclk='1'THEN
IFcnt0="1000"THEN
cnt0:
=cnt0+1;cin<='1';
ELSIFcnt0="1001"THEN
cin<='0';cnt0:
="0000";
ELSEcnt0:
=cnt0+1;cin<='0';
ENDIF;
ENDIF;
one<=cnt0;
ENDPROCESS;
PROCESS(clk,clr,cin)
VARIABLEcnt1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFclr='1'THEN
cnt1:
="0000";
ELSIFclk'EVENTANDclk='1'THEN
IFcin='1'THEN
IFcnt1="0101"THEN
cnt1:
="0000";co<='1';
ELSEcnt1:
=cnt1+1;co<='0';
ENDIF;
ENDIF;
ELSEcnt1:
=cnt1;
ENDIF;
ten<=cnt1;
ENDPROCESS;
ENDarc;
(
2)二十四进制计数器的VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt24IS
PORT(clk,clr:
INSTD_LOGIC;
ten,one:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
co:
OUTSTD_LOGIC);
ENDcnt24;
ARCHITECTUREarcOFcnt24IS
SIGNALt10:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALo1:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALcin:
STD_LOGIC;
BEGIN
ten<=t10;
one<=o1;
p1:
PROCESS(clk,clr)
BEGIN
IFclr='1'THEN
o1<="0000";
ELSIFclk'EVENTANDclk='1'THEN
IF(o1="1001")OR(t10="0010"ANDo1="0011")THEN
o1<="0000";cin<='0';
ELSIFo1="1000"THEN
o1<=o1+1;cin<='1';
ELSEo1<=o1+1;cin<='0';
ENDIF;
ENDIF;
ENDPROCESSp1;
p2:
PROCESS(cin,clk,clr)
BEGIN
IFclr='1'THEN
t10<="0000";
ELSIFclk'EVENTANDclk='1'THEN
IF(t10="0010"ANDo1="0011")THEN
t10<="0000";co<='1';
ELSEco<='0';
ENDIF;
IFcin='1'THEN
t10<=t10+1;
(3)整点报时模块ZDBS的VHDL程序源
libraryieee;
useieee.std_logic_1164.all;
entityzdbsis
port(clk:
instd_logic;
tenm,onem,tens,ones:
instd_logic_vector(3downto0);
q500,qlk:
outstd_logic);
endzdbs;
architecturebehavofzdbsis
begin
process(clk)
begin
ifclk'eventandclk='1'then
iftenm="0101"andonem="1001"andtens="0101"then
ifones="0000"orones="0010"or
ones="0100"or
ones="0110"orones="1000"then
q500<='1';
else
q500<='0';
endif;
endif;
iftenm="0000"andonem="0000"andtens="0000"then
qlk<='1';
endif;
endif;
endprocess;
endbehav;
(4)MUX24_4模块的程序源
libraryieee;
useieee.std_logic_1164.all;
entitymux24_4is
port(sel:
instd_logic_vector(2downto0);
tenh,oneh:
instd_logic_vector(3downto0);
tenm,onem:
instd_logic_vector(3downto0);
tens,ones:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(3downto0));
endmux24_4;
architecturebehavofmux24_4is
begin
process(sel)
begin
caseselis
when"000"=>q<=ones;
when"001"=>q<=tens;
when"011"=>q<=onem;
when"100"=>q<=tenm;
when"110"=>q<=oneh;
when"111"=>q<=tenh;
whenothers=>q<="1111";
endcase;
endprocess;
endbehav;
(5)片选信号SEL模块的源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityselis
port(clk:
instd_logic;
q:
outstd_logic_vector(2downto0));
endsel;
architecturearcofselis
begin
process(clk)
variablecnt:
std_logic_vector(2downto0);
begin
ifclk'eventandclk='1'then
cnt:
=cnt+1;
endif;
q<=cnt;
endprocess;
endarc;
(6)十分频模块FEN10的源程序
libraryieee;
useieee.std_logic_1164.all;
entityfen10is
port(clk:
instd_logic;
q:
outstd_logic);
endfen10;
architecturearcoffen10is
begin
process(clk)
variablecnt:
integerrange0to9;
begin
ifclk'eventandclk='1'then
ifcnt<9then
cnt:
=cnt+1;
q<='0';
elsecnt:
=0;
q<='1';
endif;
endif;
endprocess;
endarc;
(7)分频器CLKK模块的VHDL源程
libraryieee;
useieee.std_logic_1164.all;
entityclkkis
port(clk:
instd_logic;
clk500,clk1k:
outstd_logic);
endclkk;
architecturebehavofclkkis
signalx:
std_logic;
begin
process(clk)
variablecnt:
integerrange0to1999;
begin
ifclk'eventandclk='1'then
ifcnt<1999then
cnt:
=cnt+1;
elsecnt:
=0;
x<=notx;
endif;
endif;
clk1k<=x;
endprocess;
process(x)
variabley:
std_logic;
begin
ifx'eventandx='1'then
y:
=noty;
endif;
clk500<=y;
endprocess;
endbehav;
(8)BCD/7段译码器的VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdispIS
PORT(d:
INSTD_LOGIC_VECTOR(3DOWNTO0);
q:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDdisp;
ARCHITECTUREbehavOFdispIS
BEGIN
PROCESS(d)
BEGIN
CASEdIS
WHEN"0000"=>q<="0111111";
WHEN"0001"=>q<="0000110";
WHEN"0010"=>q<="1011011";
WHEN"0011"=>q<="1001111";
WHEN"0100"=>q<="1100110";
WHEN"0101"=>q<="1101101";
WHEN"0110"=>q<="1111101";
WHEN"0111"=>q<="0100111";
WHEN"1000"=>q<="1111111";
WHEN"1001"=>q<="1101111";
WHENOTHERS=>q<="0000000";
ENDCASE;
ENDPROCESS;
ENDbehav;
(9)扫描控制SCAM模块的VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYscanIS
PORT(sel:
INSTD_LOGIC_VECTOR(2DOWNTO0);
led6:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
ENDscan;
ARCHITECTUREbehavOFscanIS
BEGIN
PROCESS(sel)
BEGIN
CASEselIS
WHEN"000"=>led6<="111110";
WHEN"001"=>led6<="111101";
WHEN"011"=>led6<="111011";
WHEN"100"=>led6<="110111";
WHEN"110"=>led6<="101111";
WHEN"111"=>led6<="011111";
WHENOTHERS=>led6<="111111";
ENDCASE;
ENDPROCESS;
ENDbehav;
(10)二选一多路选择器模块源程序:
libraryieee;
useieee.std_logic_1164.all;
entitymux21is
port(a,b,s:
instd_logic;
y:
outstd_logic);
endmux21;
architecturearofmux21is
begin
process(a,b,s)
begin
ifs='0'then
y<=a;
else
y<=b;
endif;
endprocess;
endar;
4.数字钟仿真波形图
Cnt24
4.数字钟顶层结构
5.数字钟的顶层结构:
明确了数字钟的功能要求,就可以对数字钟按照功能进行模块划分。
下图是它的顶层电路原理图。
CLKK和三个FEN10共同构成分频器模块。
CLKK模块产生1KHz和500Hz两种频率信号,1KHz,的信号再经三个FEN10模块分频成为1Hz的方波信号。
1Hz信号作为秒脉冲送入60进制计数器CNT60进行秒计时,满60s产生一个进位信号co,它和1Hz信号经过2选1数据选择器21MUX由sb键控制选择其一送入分计数器进行计数。
即按下sb,将1Hz秒脉冲信号选送到分计数器,从而实现快速校分功能;正常状态下,sb键弹起,则将满60s产生的进位信号co作为时钟计数,实现正常计时功能,当分计数器计满60分时,将其进位信号送至时计数器。
五.总结
通过这次设计,进一步加深了对EDA的了解,使我对它有了更加浓厚的兴趣。