EDA数字秒表课程设计Word文档格式.docx
《EDA数字秒表课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《EDA数字秒表课程设计Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
=COUNT+1;
0'
ENDIF;
ENDPROCESS;
ENDART;
(2)控制模块的VHDL源程序(
USECTRLIS
PORT(CLR,CLK,SP:
EN:
——CLR:
清零信号
CLK:
脉冲输入端
SP:
计数输入端
EN:
输出端
END;
ARCHITECTUREBEHAVEOFCTRLIS
CONSTANTS0:
STD_LOGIC_VECTOR(1DOWNTO0):
00"
CONSTANTS1:
01"
CONSTANTS2:
10"
CONSTANTS3:
11"
TYPESTATESIS(S0,S1,S2,S3);
——表达四个状态的位矢量
SIGNALCURRENT_STATE,NEXT_STATE:
STATES;
COM:
PROCESS(SP,CURRENT_STATE)——决定转换状态的进程
CASECURRENT_STATEIS
WHENS0=>
EN<
——选中状态为S0、EN='
IFSP='
NEXT_STATE<
=S1;
=S0;
WHENS1=>
——选中状态为S1、EN='
=S2;
WHENS2=>
——选中状态为S2、EN='
=S3;
WHENS3=>
——选中状态为S3、EN='
ENDCASE;
SYNCH:
PROCESS(CLK)——时序进程
IFCLR='
CURRENT_STATE<
ELSIFCLK'
EVENTANDCLK='
THEN
=NEXT_STATE;
ENDBEHAVE;
(3)计时模块的VHDL源程序
①十进制计数器的VHDL源程序——
USEcdu10IS
PORT(CLK:
——时钟信号
CLR:
——清零信号
——计数使能信号
CN:
OUTSTD_LOGIC;
——计数输出信号
COUNT10:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
——计数值
ENDcdu10;
ARCHITECTUREARTOFcdu10IS
SIGNALSCOUNT10:
BEGIN
COUNT10<
=SCOUNT10;
PROCESS(CLK,CLR,EN)
IF(CLR='
)THEN
SCOUNT10<
="
CN<
='
ELSIFRISING_EDGE(CLK)THEN——脉冲为上跳沿触发
IF(EN='
)THEN
IFSCOUNT10="
ELSE
=SCOUNT10+'
ENDIF;
ENDPROCESS;
②六进制计数器的VHDL源程序——
USEcdu6IS
COUNT6:
ENDcdu6;
ARCHITECTUREARTOFcdu6IS
SIGNALSCOUNT6:
COUNT6<
=SCOUNT6;
SCOUNT6<
ELSIFRISING_EDGE(CLK)THEN
IFSCOUNT6="
0101"
=SCOUNT6+'
③计时器的VHDL源程序——
USEcountIS
S_1MS:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
——毫秒计数值
S_10MS:
——十毫秒计数值
S_100MS:
——百毫秒计数值
S_1S:
——秒计数值
S_10S:
——十秒计数值
M_1MIN:
——分计数值
M_10MIN:
——十分计数值
HOUR:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
——小时计数值
ENDcount;
ARCHITECTUREARTOFcountIS
COMPONENTcdu10——元件例化
CLR:
EN:
CN:
COUNT10:
ENDCOMPONENTcdu10;
COMPONENTcdu6——元件例化
COUNT6:
ENDCOMPONENTcdu6;
SIGNALA,B,C,D,E,F,G,H:
STD_LOGIC;
U1:
cdu10PORTMAP(CLK,CLR,EN,A,S_1MS);
U2:
cdu10PORTMAP(A,CLR,EN,B,S_10MS);
U3:
cdu10PORTMAP(B,CLR,EN,C,S_100MS);
U4:
cdu10PORTMAP(C,CLR,EN,D,S_1S);
U5:
cdu6PORTMAP(D,CLR,EN,E,S_10S);
U6:
cdu10PORTMAP(E,CLR,EN,F,M_1MIN);
U7:
cdu6PORTMAP(F,CLR,EN,G,M_10MIN);
U8:
cdu10PORTMAP(G,CLR,EN,H,HOUR);
(4)显示模块的VHDL源程序
数据选择器的VHDL源程序(
USEMULXIS
PORT(CLK,CLR,EN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
——毫秒计数器
——十毫秒计数器
——百毫秒计数器
——秒计数器
——十秒计数器
——分计数器
——十分计数器
——小时计数器
OUTBCD:
——BCD码输出
SEG:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
——七段译码输出
ENDMULX;
ARCHITECTUREARTOFMULXIS
PROCESS(CLK)
1111"
ELSIFRISING_EDGE(CLK)THEN
IFEN='
IFCLK'
THEN——时钟上升沿触发输出各位数据
CASECOUNTIS
WHEN"
=>
OUTBCD<
=S_1MS;
SEG<
"
0001"
=S_10MS;
0010"
=S_100MS;
0011"
=S_1S;
0100"
=S_10S;
=M_1MIN;
0110"
=M_10MIN;
0111"
=HOUR;
01111111"
1000"
WHENOTHERS=>
00000000"
BCD七段译码驱动器的VHDL源程序
USEBCD7IS
PORT(BCD:
INSTD_LOGIC_VECTOR(3DOWNTO0);
——输入为4位二进制数,范围从0到9
LED:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
——7段译码输出
ENDBCD7;
ARCHITECTUREARTOFBCD7IS
LED<
1111110"
WHENBCD="
ELSE——0的7段译码(以下类推)
"
0110000"
1101101"
1111001"
0110011"
1011011"
1011111"
1110000"
1111011"
0000000"
——其他情况的输出
(5)顶层设计的的VHDL源程序
USEmbIS
PORT(SP:
CLK:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDmb;
ARCHITECTUREARTOFmbIS
COMPONENTCTRL
ENDCOMPONENT;
COMPONENTCB10
COMPONENTcount
CLR:
S_1MS:
S_10MS:
S_100MS:
S_1S:
S_10S:
M_1MIN:
M_10MIN:
HOUR:
ENDCOMPONENT;
COMPONENTBCD7
LED:
COMPONENTMULX
OUTBCD:
SEG:
SIGNALC,E:
SIGNALMS1_S,MS10_S,MS100_S:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALS1S_S,S10_S:
SIGNALMIN1_S,MIN10_S:
SIGNALH:
SIGNALBCD_S:
U0:
CTRLPORTMAP(CLR,CLK,SP,E);
CB10PORTMAP(CLK,C);
countPORTMAP(C,CLR,E,MS1_S,MS10_S,MS100_S,S1S_S,S10_S,MIN1_S,MIN10_S,H);
MULXPORTMAP(CLR,CLK,E,MS1_S,MS10_S,MS100_S,S1S_S,S10_S,MIN1_S,MIN10_S,H,BCD_S,SEG);
BCD7PORTMAP(BCD_S,LED);
CO<
=C;
EN<
=E;
OUTBCD<
=BCD_S;
设计原理图: