EDA
課程設(shè)計(jì)
姓名:
學(xué)號(hào):
班級(jí):自動(dòng)化
設(shè)計(jì)題目
多功能數(shù)字鐘電路設(shè)計(jì)
設(shè)計(jì)任務(wù)及要求
多功能數(shù)字鐘應(yīng)該具有的功能有:顯示時(shí)—分—秒、小時(shí)和分鐘可調(diào)等基本功能。整個(gè)鐘表的工作應(yīng)該是在1Hz信號(hào)的作用下進(jìn)行,這樣每來一個(gè)時(shí)鐘信號(hào),秒增加1秒,當(dāng)秒從59秒跳轉(zhuǎn)到00秒時(shí),分鐘增加1分,同時(shí)當(dāng)分鐘從59分跳轉(zhuǎn)到00分時(shí),小時(shí)增加1小時(shí),小時(shí)的范圍為0~23時(shí)。
在實(shí)驗(yàn)中為了顯示的方便,由于分鐘和秒鐘顯示的范圍都是從0~59,所以可以用一個(gè)3位的二進(jìn)制碼顯示十位,用一個(gè)四位的二進(jìn)制碼(BCD碼)顯示個(gè)位,對(duì)于小時(shí)因?yàn)樗姆秶菑?~23,所以可以用一個(gè)2位的二進(jìn)制碼顯示十位,用一個(gè)4位的二進(jìn)制碼(BCD碼)顯示個(gè)位。
實(shí)驗(yàn)中由于七段碼管是掃描的方式
顯示,所以雖然時(shí)鐘需要的是1Hz時(shí)鐘信號(hào),但是掃描需要一個(gè)比較高頻率的信號(hào),因此為了得到準(zhǔn)確的1Hz信號(hào),必須對(duì)輸入的系統(tǒng)時(shí)鐘50Mhz進(jìn)行分頻。
調(diào)整時(shí)間的按鍵用按鍵模塊的S1和S2,S1調(diào)節(jié)小時(shí),每按下一次,小時(shí)增加一個(gè)小時(shí);S2調(diào)整分鐘,每按下一次,分鐘增加一分鐘。另外用S8按鍵作為系統(tǒng)時(shí)鐘復(fù)位,復(fù)位后全部顯示00—00—00。
三.基于Verilog
HDL語言的電路設(shè)計(jì)、仿真與綜合(一)頂層模塊
本程序采用結(jié)構(gòu)化設(shè)計(jì)方法,將其分為彼此獨(dú)立又有一定聯(lián)系的三個(gè)模塊,如圖1所示:
圖1:頂層結(jié)構(gòu)框圖
(二)子模塊
1.分頻器
分頻器的作用是對(duì)50Mhz的系統(tǒng)時(shí)鐘信號(hào)進(jìn)行分頻,得到頻率為1000hz的信號(hào),作為顯示器的輸入信號(hào)。
源程序如下:
module
fenpin(input
CP,output
CPout);
reg
CPout;
reg
[31:0]
Cout;
reg
CP_En;
always
@(posedge
CP)
//將50MHz分頻為1kHz
begin
Cout
<=
(Cout
==
32'd50000)
?
32'd0
:
(Cout
+
32'd1);
CP_En
<=
(Cout
==
32'd50000)
?
1'd1
:
1'd0;
CPout
<=
CP_En;
end
endmodule
功能仿真波形如圖2所示(以五分頻為例):
2.控制器和計(jì)數(shù)器
控制器的作用是,調(diào)整小時(shí)和分鐘的值,并能實(shí)現(xiàn)清零功能。計(jì)數(shù)器的作用是實(shí)現(xiàn)分鐘和秒鐘滿60進(jìn)1,小時(shí)則由23跳到00。當(dāng)?shù)竭_(dá)59分55秒的時(shí)候,LED燈會(huì)閃爍來進(jìn)行報(bào)時(shí)。因?yàn)榭刂破骱陀?jì)數(shù)器的驅(qū)動(dòng)信號(hào)頻率均為1Hz,故從分頻器輸出的信號(hào)進(jìn)入控制器后,要進(jìn)行二次分頻,由1Khz變?yōu)?Hz。
if(Clk_En)
begin
if(R1==1)
begin
if(Hour<24)
Hour=Hour+1;
if(Hour==24)
begin
Hour=0;
end
R1=0;
end
if(R2==1)
begin
if(Minute<60)
Minute=Minute+1;
if(Minute==60)
begin
Minute=0;
if(Hour<24)
Hour=Hour+1;
if(Hour==24)
begin
Hour=0;
End
end
R2=0;
end
if(Second<60)
Second=Second+1;
if(Second==60)
begin
Second=0;
if(Minute<60)
Minute=Minute+1;
源程序如下:
module
kongzhiqi(CPout,S1,S2,RET,Hour,Minute,Second,LED);
input
CPout,S1,S2,RET;
output
[5:0]
Hour;
output
[5:0]
Minute;
output
[5:0]
Second;
output
LED;
reg
[5:0]
Hour;
reg
[5:0]
Minute;
reg
[5:0]
Second;
reg
R1;
reg
R2,R8,LED;
reg
[10:0]
Cout;
reg
Clk_En;
always@(posedge
CPout)
begin
if(S1==0)
begin
R1=1;
end
if(S2==0)
begin
R2=1;
end
if(RET==0)
begin
R8=1;
end
Cout=(Cout==32'd1000)?32'd0:(Cout
+
32'd1);
Clk_En=(Cout==32'd1000)?1'd1:1'd0;
LED=1;
end
else
LED=0;
if(R8==1)//清零
begin
Hour=0;
Minute=0;
Second=0;
R8=0;
end
end
end
endmod
if(Minute==60)
begin
Minute=0;
if(Hour<24)
Hour=Hour+1;
if(Hour==24)
begin
Hour=0;
end
end
end
if((Minute==59)&&(Second>55))
begin
if(LED==1)
LED=0;
else
功能仿真波形如圖3所示:
3.顯示器
顯示器的作用是將時(shí)—分—秒的值在數(shù)碼管上依次顯示出來。從分頻器輸出的1Khz的信號(hào)作為數(shù)碼管的掃描信號(hào)。SEL
表示三個(gè)數(shù)碼管選擇位,它的取值表示八個(gè)數(shù)碼管,從左至右依次是111~000。LEDGA表示七段數(shù)碼管,它的取值決定特定位數(shù)上顯示的數(shù)字。
源程序如下:
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
default:
Led
=
7'b0000_000;
endcase
if(SEL==3'b100)
Led=7'b1000_000;
if(SEL==3'b011)
case(shiwei2)
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
module
xianshi(CPout,Hour,Minute,Second,SEL,LEDAG);
input
CPout;
input
Hour,Minute,Second;
output
SEL,LEDAG;
reg
[2:0]
SEL;
reg
[6:0]
Led;
reg
[3:0]
shi1,ge1,shi2,ge2,shi3,ge3;
always
@(posedge
CPout)
begin
shiwei1=Hour/10;
gewei1=Hour%10;
shiwei2=Minute/10;
gewei2=Minute%10;
shiwei3=Second/10;
gewei3=Second%10;
if(SEL==3'b110)
case(shiwei1)
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
default:
Led
=
7'b0000_000;
endcase
if(SEL==3'b101)
case(gewei1)
default:
Led
=
7'b0000_000;
endcase
if(SEL==3'b111)
case(gewei3)
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
default:
Led
=
7'b0000_000;
endcase
SEL
=
SEL
+
3'd1;
end
assign
LEDAG=Led;
endmodule
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
default:
Led
=
7'b0000_000;
endcase
if(SEL==3'b010)
case(gewei2)
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
default:
Led
=
7'b0000_000;
endcase
if(SEL==3'b001)
Led=7'b1000_000;
if(SEL==3'b000)
case(shiwei3)
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
總結(jié)體會(huì)
這次課程設(shè)計(jì)雖然只有短短的四天,但我的收獲卻很大。通過這次實(shí)習(xí),我掌握了EDA設(shè)計(jì)的基本流程(即設(shè)計(jì)輸入—編譯—調(diào)試—仿真—下載),領(lǐng)會(huì)了自頂而下結(jié)構(gòu)化設(shè)計(jì)的優(yōu)點(diǎn),并具備了初步的EDA程序設(shè)計(jì)能力。
我感覺,這個(gè)程序最難的地方在于頂層模塊的設(shè)計(jì),因?yàn)轫攲幽K需要將各個(gè)子模塊按照電路原理有機(jī)地結(jié)合起來,這需要扎實(shí)的理論功底,而這正是我所欠缺的。相比而言,子模塊的設(shè)計(jì)就容易多了,因?yàn)閂erilog語言和C語言有很多相似之處,只要明白了實(shí)驗(yàn)原理,就不難完成,水平的高下只體現(xiàn)在程序的簡(jiǎn)潔與否。Verilog源程序的編寫很容易出現(xiàn)錯(cuò)誤,這就需要耐心的調(diào)試。因?yàn)楹芏嗲闆r下,一長(zhǎng)串的錯(cuò)誤往往是由一個(gè)不經(jīng)意的小錯(cuò)誤引起的。當(dāng)程序?qū)艺{(diào)屢錯(cuò)的時(shí)候,最好和其他同學(xué)溝通交流一下,他們不經(jīng)意的一句話,就可能給我啟發(fā),使問題迎刃而解。
這次實(shí)習(xí),給我感觸最深的還是行為態(tài)度問題。人的能力有大有小,但只要端正態(tài)度,不拋棄,不放棄,任何人都能取得令自己滿意的成績(jī)。在此,我由衷的感謝在這次課程設(shè)計(jì)中給了我巨大幫助的老師和同學(xué)們!