EDA课程设计数字钟Word格式文档下载.docx
《EDA课程设计数字钟Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《EDA课程设计数字钟Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
对minute模块进行仿真为:
对hour模块进行仿真:
对deled字符译码模块仿真
该模块将字符转换成数码管相应的段码以便数码管能显示为人们习惯的字符。
三、管脚分配:
四、AHDL源程序:
1:
counter,tdf
SUBDESIGNcounter
(
CLK:
INPUT;
CLKOUT:
OUTPUT;
)
VARIABLE
count1[3..0]:
DFF;
count2[3..0]:
SS:
DFF;
BEGIN
count1[].clk=clk;
count2[].clk=clk;
SS.CLK=CLK;
SS=B"
0"
;
IF
COUNT1[]==B"
0111"
AND
COUNT2[]==B"
1000"
then
SS=B"
1"
ENDIF;
IFcount1[]==B"
1001"
THEN
count1[]=B"
0000"
ELSE
count1[].d=count1[].q+1;
THEN
IFcount2[]==B"
count2[]=B"
ELSE
count2[].d=count2[].q+1;
ENDif;
ELSE
count2[].d=count2[].q;
clkout=ss;
END;
2:
counter1.tdf
SUBDESIGNcounter1
3:
link
SUBDESIGNlink
--CLK,RESET:
G[3..0],H[3..0]:
BEGIN
G[3..0]=B"
1111"
H[3..0]=B"
4:
Second.tdf%秒钟模块60进制%
SUBDESIGNSecond
CLK,RESET:
A[3..0],B[3..0],CKMIN:
count1[3..0]:
count2[3..0]:
SS:
count1[].clrn=RESET;
count2[].clrn=RESET;
SS.CLK=CLK;
SS.CLRN=RESET;
IFCOUNT1[]==B"
COUNT2[]==B"
0101"
ENDIF;
a[3..0]=count1[];
b[3..0]=count2[];
CKMIN=SS;
END;
5:
Minute.tdf%分钟模块60进制%
SUBDESIGNMinute
CKMIN,RESET,SETMIN:
A[3..0],B[3..0],CKHOUR:
count3:
count1[].clk=CKMINOR!
SETMIN;
count2[].clk=CKMINOR!
count3.clk=CKMINOR!
count3.clrn=RESET;
count3=B"
AND
COUNT3=B"
IFcount1[]==B"
then
count1[].d=count1[].q+1;
IFcount2[]==B"
count2[].d=count2[].q+1;
count2[].d=count2[].q;
a[3..0]=count1[];
CKHOUR=count3;
6:
Hour.tdf%小时模块24进制%
SUBDESIGNHour
CKHOUR,RESET,SETHOUR:
A[3..0],B[1..0]:
count1[3..0]:
count2[1..0]:
count1[].clk=CKHOUROR!
SETHOUR;
count2[].clk=CKHOUROR!
IFcount2[]<
B"
10"
IFcount1[]==B"
count2[].d=count2[].q+1;
count2[].d=count2[].q;
ELSIFcount2[]==B"
IFcount1[]==B"
0011"
count1[]=B"
count2[]=B"
00"
count1[].d=count1[].q+1;
count2[].d=count2[].q;
ENDIF;
b[1..0]=count2[];
7、Sel_clock.tdf%显示扫描模块%
SUBDESIGNSEL_clock
A[3..0],B[3..0],C[3..0]:
D[3..0],E[3..0],F[1..0]:
CKDSP,G[3..0],H[3..0]:
OUT[3..0],SEL[2..0]:
OUTPUT;
COUNT[2..0]:
count[].clk=CKDSP;
IFCOUNT[]==B"
111"
COUNT[]=B"
000"
count[].d=count[].q+1;
IFCOUNT[]==B"
out[3..0]=A[3..0];
ELSIFCOUNT[]==B"
001"
out[3..0]=B[3..0];
ELSIFCOUNT[]==B"
010"
out[3..0]=G[3..0];
011"
out[3..0]=C[3..0];
100"
out[3..0]=D[3..0];
101"
out[3..0]=H[3..0];
110"
out[3..0]=E[3..0];
out[1..0]=F[1..0];
out[3..2]=B"
SEL[2..0]=COUNT[];
8:
Alert.tdf%报时模块%
SUBDESIGNalert
CKSP1,CKSP2,DAIN[7..0]:
SPEAK,LAMP[7..0]:
s:
ss:
MACHINEOFBITS(lamp[7..0])
WITHSTATES(
s0=B"
00000001"
s1=B"
00000010"
s2=B"
00000100"
s3=B"
00001000"
s4=B"
00010000"
s5=B"
00100000"
s6=B"
01000000"
s7=B"
10000000"
);
IFdain[7..0]==B"
00000000"
SS.clk=cksp2;
s.clk=cksp1;
s.d=!
s.q;
speak=s.q;
CASEssIS
WHENs0=>
ss=s1;
WHENs1=>
ss=s2;
WHENs2=>
ss=s3;
WHENs3=>
ss=s4;
WHENs4=>
ss=s5;
WHENs5=>
ss=s6;
WHENs6=>
ss=s7;
WHENs7=>
ss=s0;
WHENOTHERS=>
ss=s0;
ENDCASE;
ELSE
SS=S0;
SPEAK=GND;
9:
deled%字符译码器%
subdesigndeled
num[3..0]:
input;
a,b,c,d,e,f,g:
output;
begin
table
num[3..0]=>
a,b,c,d,e,f,g;
h"
1,1,1,1,1,1,0;
0,1,1,0,0,0,0;
2"
1,1,0,1,1,0,1;
3"
1,1,1,1,0,0,1;
4"
0,1,1,0,0,1,1;
5"
1,0,1,1,0,1,1;
6"
1,0,1,1,1,1,1;
7"
1,1,1,0,0,0,0;
8"
1,1,1,1,1,1,1;
9"
1,1,1,1,0,1,1;
a"
1,1,1,0,1,1,1;
b"
0,0,1,1,1,1,1;
c"
1,0,0,1,1,1,0;
d"
0,1,1,1,1,0,1;
e"
1,0,0,1,1,1,1;
endtable;
end;
五、一点体会:
我感觉自己编写功能模块这一步不容易跨过去,但只要你进去了你就会觉得里面风光无限好,感觉到编写功能模块也就不过如此(这是相对来说的)。
Link模块简练,实用,在以后可以好好利用。
附、数码管显示原理:
共阴极的字形码表
如显示0时数码管对应八段为3FH即0,0,1,1,1,1,1,1->
dp,g,f,e,d,c,b,a也就是a,b,c,d,e,f全亮,g,dp不亮,这样就形成了“0”字型。
其它字型类似。