版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 電子線路設(shè)計(jì)報(bào)告</b></p><p> (數(shù)字鐘及汽車尾燈)</p><p> 題目:數(shù)字鐘與汽車尾燈</p><p> 院系:電子與信息工程系</p><p><b> 班級:</b></p><p><b> 姓名:&
2、lt;/b></p><p><b> 學(xué)號:</b></p><p><b> 試驗(yàn)號:</b></p><p><b> 指導(dǎo)老師:</b></p><p><b> 2009.6.24</b></p><p>
3、 【實(shí)驗(yàn)?zāi)康摹?①掌握可編程邏輯器件的應(yīng)用開發(fā)技術(shù)——設(shè)計(jì)輸入、編譯、仿真和器件編程;</p><p> ?、谑煜ひ环NEDA軟件——MAX+PlusⅡ的使用;</p><p> ?、壅莆誚erilog設(shè)計(jì)方法;</p><p> ?、苷莆辗帜K分層次的設(shè)計(jì)方法;</p><p> ?、萦肰erilog完成一個多功能數(shù)字鐘和汽車尾燈控制的設(shè)計(jì)。
4、</p><p> 【實(shí)驗(yàn)原理】 采用分模塊分層次的設(shè)計(jì)方法,用Verilog語言由頂層模塊逐層向下設(shè)計(jì),頂層模塊調(diào)用底層模塊來完成相應(yīng)的功能。完成電路的編譯與適配后進(jìn)行電路的仿真實(shí)驗(yàn),在仿真結(jié)果滿足實(shí)驗(yàn)要求的情況下進(jìn)行電路的配置,即將生成的*.sof文件下載到開發(fā)板上,驗(yàn)證實(shí)驗(yàn)結(jié)果。</p><p><b> 【實(shí)驗(yàn)開發(fā)環(huán)境】</b></p>&l
5、t;p> ①開發(fā)軟件:MAX+PlusⅡ,其開發(fā)流程為設(shè)計(jì)輸入、編譯、仿真、和編程與驗(yàn)證。</p><p> ②開發(fā)語言:Verilog,一種專門為ASIC設(shè)計(jì)而開發(fā)的,通常用于寄存器傳輸級(RTL)門電路級的描述,是一種相對低級的描述語言。</p><p> ?、蹖?shí)驗(yàn)板:EDA Pro2K實(shí)驗(yàn)開發(fā)系統(tǒng),是一種基于CPLD可編程邏輯器件的開發(fā)板。</p><p
6、><b> 【實(shí)驗(yàn)?zāi)K設(shè)計(jì)】</b></p><p> 多功能數(shù)字鐘系統(tǒng)組成</p><p> 圖1 多功能數(shù)字鐘系統(tǒng)組成框圖</p><p> 由上面的設(shè)計(jì)框圖容易看出,數(shù)字鐘部分的實(shí)驗(yàn)由主體電路和擴(kuò)展電路組成,其中主體電路主要是完成小時、分鐘、秒的顯示,通過分頻器得到秒脈沖,通過秒計(jì)數(shù)器完成60進(jìn)制的計(jì)數(shù),然后用譯碼電路完成秒
7、在數(shù)碼管上的顯示,分鐘和小時顯示的實(shí)現(xiàn)與秒類似,主要是脈沖不同而已,其中小時又分為12進(jìn)制和24進(jìn)制;擴(kuò)展電路是用來完成計(jì)時之外的一些附加功能,比如定時控制、仿電臺報(bào)時、自動報(bào)整點(diǎn)時數(shù)、觸摸報(bào)整點(diǎn)時數(shù)等。其詳細(xì)設(shè)計(jì)將在下面逐一提到。</p><p><b> 各模塊的設(shè)計(jì)及仿真</b></p><p> 數(shù)字鐘主體電路頂層模塊</p><p&g
8、t; 圖2 數(shù)字鐘主體電路的層次結(jié)構(gòu)圖</p><p> 數(shù)字鐘主體電路頂層模塊由三部分組成,小時計(jì)數(shù)器、分計(jì)數(shù)器和秒計(jì)數(shù)器,分計(jì)數(shù)器和秒計(jì)數(shù)器是60進(jìn)制的,用8位BCD碼表示,高4位為6進(jìn)制,0、1、2、3、4、5、0、1…這樣顯示;低4位為10進(jìn)制,0、1、2、3、4、5、6、7、8、9、0、1…這樣顯示。小時計(jì)數(shù)器用12進(jìn)制和24進(jìn)制同時計(jì)時,12進(jìn)制為01、02、03、04、05、06、07、08、0
9、9、10、12、01、02…這樣顯示;24進(jìn)制為00、01、02、03、04、05、06、07、08、09、10、12、13、14、15、16、17、18、19、20、21、22、23、00、01…這樣顯示。</p><p> ② 6進(jìn)制計(jì)數(shù)器的設(shè)計(jì)及仿真</p><p> 在沒計(jì)數(shù)到5之前,每來一個CP脈沖計(jì)數(shù)就加1,到5時變?yōu)?.</p><p> ?、?,V
10、erilog代碼:</p><p> //counter6.v 6進(jìn)制計(jì)數(shù)器</p><p> module counter6(Q,nCR,EN,CP);</p><p> input CP,nCR,EN; //時鐘CP、清零nCR、使能EN</p><p> output[3:0] Q;</p><p>
11、 reg[3:0] Q;</p><p> always@(posedge CP or negedge nCR)</p><p><b> begin</b></p><p> if(~nCR) Q<=4'b0000; //異步清零</p><p> else if(~EN) Q<=Q;&
12、lt;/p><p> else if(Q==4'b0101) Q<=4'b0000; //計(jì)數(shù)到5時賦值為0</p><p> else Q<=Q+1'b1; //未計(jì)數(shù)到5時在時鐘來時加1</p><p><b> end</b></p><p><b> endm
13、odule</b></p><p><b> ?、颍抡娼Y(jié)果:</b></p><p> 圖3 6進(jìn)制計(jì)數(shù)器仿真截圖</p><p> 由仿真截圖可以看出在CP的上升沿來臨時輸出Q的值加1,計(jì)數(shù)到5時變?yōu)?</p><p> 0,繼續(xù)計(jì)數(shù),完成了6進(jìn)制計(jì)數(shù)器的功能。仿
14、真結(jié)果與實(shí)驗(yàn)的預(yù)期結(jié)果吻合,</p><p> 說明此模塊是成功的。</p><p><b> Ⅲ,模塊符號圖:</b></p><p> ③ 10進(jìn)制計(jì)數(shù)器的設(shè)計(jì)及仿真</p><p> ?、?,Verilog代碼:</p><p> //counter10.v 10進(jìn)制計(jì)數(shù)器</
15、p><p> module counter10(Q,nCR,EN,CP);</p><p> input CP,nCR,EN; //時鐘CP、清零nCR、使能EN</p><p> output[3:0]Q;</p><p> reg[3:0]Q;</p><p> always@(posedge CP or
16、negedge nCR)</p><p><b> begin</b></p><p> if(~nCR) Q<=4'b0000; //異步清零</p><p> else if(~EN) Q<=Q;</p><p> else if(Q==4'b1001) Q<=4'
17、b0000; //計(jì)數(shù)到9時賦值為0</p><p> else Q<=Q+1'b1; //未計(jì)數(shù)到9時在時鐘來時加1</p><p><b> end</b></p><p><b> endmodule</b></p><p><b> Ⅱ,仿真結(jié)果:<
18、;/b></p><p> 圖4 10進(jìn)制計(jì)數(shù)器仿真截圖</p><p> 由仿真截圖可以看出在CP的上升沿來臨時輸出Q的值加1,計(jì)數(shù)到9時變?yōu)?</p><p> 0,繼續(xù)計(jì)數(shù),完成了10進(jìn)制計(jì)數(shù)器的功能。仿真結(jié)果與實(shí)驗(yàn)的預(yù)期結(jié)果吻合,</p><p> 說明此模塊是成功的。</p&g
19、t;<p><b> ?、?,模塊符號圖:</b></p><p> ?、?60進(jìn)制計(jì)數(shù)器的設(shè)計(jì)及仿真</p><p><b> 模塊結(jié)構(gòu)圖如下</b></p><p> 圖5 60進(jìn)制計(jì)數(shù)器的層次結(jié)構(gòu)</p><p> ?、?,Verilog代碼:</p><p
20、> //counter60.v 60進(jìn)制計(jì)數(shù)器</p><p> module counter60 (Cnt,nCR,EN,CP);</p><p> input nCR,EN,CP; //時鐘CP、清零nCR、使能EN</p><p> output [7:0] Cnt; </p><p> wire [7 :0] C
21、nt;</p><p><b> wire ENP;</b></p><p> counter10 UC0 (Cnt[3:0],nCR,EN,CP); //低4位調(diào)用10進(jìn)制計(jì)數(shù)器</p><p> counter6 UC1(Cnt[7:4],nCR,ENP,CP);//高4位調(diào)用6進(jìn)制計(jì)數(shù)器</p><p>
22、assign ENP=(Cnt[3:0]==4'h9);//低位計(jì)到9時向高位發(fā)送使能信號</p><p><b> endmodule</b></p><p><b> ?、?,仿真結(jié)果:</b></p><p> 圖6 60進(jìn)制計(jì)數(shù)器仿真截圖_1</p><p> 圖7 60進(jìn)制
23、計(jì)數(shù)器仿真截圖_2</p><p> 由仿真截圖可以看出在CP的上升沿來臨時輸出Q的值加1,計(jì)數(shù)到59時為 </p><p> 0,繼續(xù)計(jì)數(shù),完成了60進(jìn)制計(jì)數(shù)器的功能。仿真結(jié)果與實(shí)驗(yàn)的預(yù)期結(jié)果吻合,</p><p> 說明此模塊是成功的。</p><p><b> ?、?,模塊符號圖:<
24、/b></p><p> ?、?12進(jìn)制計(jì)數(shù)器的設(shè)計(jì)及仿真</p><p> Ⅰ,Verilog代碼:</p><p> //counter12.v 12進(jìn)制計(jì)數(shù)器</p><p> module counter12(CntH,CntL,nCR,EN,CP);</p><p> input CP,nCR
25、,EN; //時鐘CP、清零nCR、使能EN</p><p> output[3:0] CntH,CntL;//高4位和低4為輸出</p><p> reg[3:0] CntH,CntL;</p><p> always@(posedge CP or negedge nCR)</p><p><b> begin</
26、b></p><p> if(~nCR) {CntH,CntL}<=8'h00; //異步清零</p><p> else if(~EN) {CntH,CntL}<={CntH,CntL};</p><p> else if((CntH>1)||((CntH==1)&&(CntL>=2)))</p&
27、gt;<p> {CntH,CntL}<=8'h01;//非法計(jì)數(shù)情況均置數(shù)為8'h01</p><p> else if((CntH==0)&&(CntL==9))</p><p> {CntH,CntL}<=8'h10;//到9時變?yōu)?0</p><p> else if((CntH==1
28、)&&CntL<2) //11與12 的計(jì)數(shù)</p><p><b> begin </b></p><p> CntH<=CntH;</p><p> CntL<=CntL+1'b1; </p><p><b> end</b></p>
29、;<p><b> else</b></p><p><b> begin</b></p><p> CntH<=CntH; //其它情況低位加1計(jì)數(shù)</p><p> CntL<=CntL+1'b1;</p><p><b> end</
30、b></p><p><b> end</b></p><p><b> endmodule</b></p><p><b> ?、?,仿真結(jié)果:</b></p><p> 圖8 12進(jìn)制計(jì)數(shù)器仿真截圖</p><p> 由仿真截圖可以看出
31、在CP的上升沿來臨時輸出Q的值加1,計(jì)數(shù)到12時為</p><p> 01,繼續(xù)計(jì)數(shù),完成了12進(jìn)制計(jì)數(shù)器的功能。仿真結(jié)果與實(shí)驗(yàn)的預(yù)期結(jié)果吻合,</p><p> 說明此模塊是成功的。</p><p><b> Ⅲ,模塊符號圖:</b></p><p> ?、?4進(jìn)制計(jì)數(shù)器的設(shè)計(jì)及仿真</p><
32、;p> Ⅰ,Verilog代碼:</p><p> //counter24.v 24進(jìn)制計(jì)數(shù)器</p><p> module counter24(CntH,CntL,nCR,EN,CP);</p><p> input CP,nCR,EN; //時鐘CP、清零nCR、使能EN</p><p> output[3:0] C
33、ntH,CntL; //高4位和低4為輸出</p><p> reg[3:0] CntH,CntL;</p><p> always@(posedge CP or negedge nCR)</p><p><b> begin</b></p><p> if(~nCR) {CntH,CntL}<=8'
34、;h00;//異步清零</p><p> else if(~EN) {CntH,CntL}<={CntH,CntL};</p><p> else if((CntH>2)||(CntL>9)||((CntH==2)&&(CntL>=3)))</p><p> {CntH,CntL}<=8'h00; //非法
35、計(jì)數(shù)情況均置數(shù)為00</p><p> else if((CntH==2)&&CntL<3) //20,21,22,23的計(jì)數(shù)</p><p><b> begin </b></p><p> CntH<=CntH;</p><p> CntL<=CntL+1'b1;&
36、lt;/p><p><b> end</b></p><p> else if(CntL==9)//低位為9時,高位加1,低位置4'b0000 </p><p><b> begin</b></p><p> CntH<=CntH+1'b1;</p
37、><p> CntL<=4'b0000;</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> CntH<=CntH; //其它情況
38、低位正常計(jì)數(shù)</p><p> CntL<=CntL+1'b1;</p><p><b> end</b></p><p><b> end</b></p><p><b> endmodule</b></p><p><b&
39、gt; Ⅱ,仿真結(jié)果:</b></p><p> 圖9 24進(jìn)制計(jì)數(shù)器仿真截圖</p><p> 由仿真截圖可以看出在CP的上升沿來臨時輸出Q的值加1,計(jì)數(shù)到23時為</p><p> 00,繼續(xù)計(jì)數(shù),完成了24進(jìn)制計(jì)數(shù)器的功能。仿真結(jié)果與實(shí)驗(yàn)的預(yù)期結(jié)果吻合,</p><p> 說明此模塊是成功的。</p>
40、<p><b> Ⅲ,模塊符號圖:</b></p><p> ?、叻诸l模塊的設(shè)計(jì)與仿真</p><p> ?、?,Verilog代碼:</p><p> //Divided_Frequency.v 分頻模塊產(chǎn)成1Hz與512Hz的脈沖</p><p> module Divided_Frequency
41、 (_1HzOut,_512HzOut,nCR,_1024HzIN);</p><p> input _1024HzIN,nCR;</p><p> output _1HzOut,_512HzOut; //輸出1Hz與512Hz</p><p> supply1 Vdd;</p><p> wire[11:0] Q;</p&g
42、t;<p> wire EN1,EN2;</p><p> counter10 DU0(Q[3:0],nCR,Vdd,_1024HzIN);</p><p> counter10 DU1(Q[7:4],nCR,EN1,_1024HzIN);</p><p> counter10 DU2(Q[11:8],nCR,EN2,_1024HzIN);//
43、3次調(diào)用10進(jìn)制</p><p> assign EN1=(Q[3:0]==4'h9);</p><p> assign EN2=(Q[7:4]==4'h9)&&(Q[3:0]==4'h9);</p><p> assign _1HzOut=Q[11];//最高位為1.024Hz</p><p>
44、 assign _512HzOut=Q[0];//最低位為512Hz</p><p><b> endmodule</b></p><p><b> Ⅱ,仿真結(jié)果:</b></p><p> 圖10 分頻模塊1Hz輸出(最下的)仿真截圖</p><p> 圖11 分頻模塊512Hz輸出
45、(倒數(shù)第二的)仿真截圖</p><p> 由上圖可以看出512Hz的輸出脈沖符合要求,周期是1024Hz的兩倍,1Hz的脈沖輸出由于是1024Hz的1000倍,在仿真圖上無法準(zhǔn)確驗(yàn)證,只能猜想大概是對的,者還需將程序下載到開發(fā)板上來驗(yàn)證,而且由于我在開始的設(shè)計(jì)師想調(diào)用更多的模塊,所以1Hz脈沖的產(chǎn)生有些誤差。其它的從仿真來看與設(shè)計(jì)相吻合。</p><p><b> ?、螅K符
46、號圖:</b></p><p> ?、?選1選擇器的設(shè)計(jì)與仿真</p><p> Ⅰ,Verilog代碼:</p><p> //_2to1MUX.v 2選1選擇器</p><p> module _2to1MUX (OUT,SEL,X,Y);</p><p> input[7:0] X,Y; /
47、/兩輸入變量</p><p> input SEL;</p><p> output[7:0] OUT;</p><p> assign OUT=SEL?X:Y;</p><p><b> endmodule</b></p><p><b> ?、颍抡娼Y(jié)果:</b>
48、</p><p> 圖12 2選1選擇器仿真截圖</p><p> 由上圖可以清晰地看出,當(dāng)SEL為高電平時輸出OUT為X的值,當(dāng)SEL為低電平時輸出OUT 為Y的值,仿真結(jié)果與設(shè)計(jì)預(yù)期結(jié)果相吻合,說明此模塊的設(shè)計(jì)是成功的。</p><p><b> ?、?,模塊符號圖:</b></p><p> ?、?比特比較器的
49、設(shè)計(jì)與仿真</p><p> ?、?,Verilog代碼:</p><p> //_4bitcomparator.v 4比特比較器</p><p> module _4bitcomparator (EQU,AMORPM,AMORPMCLOCK,A,B);</p><p> input[3:0]A,B;</p><p
50、> input AMORPM,AMORPMCLOCK;//顯示的上下午與鬧鐘設(shè)置的上下午</p><p> output EQU;</p><p> assign EQU=((A==B)&&(AMORPM==AMORPMCLOCK));</p><p><b> endmodule</b></p>&
51、lt;p><b> ?、?,仿真結(jié)果:</b></p><p> 圖13 4比特比較器仿真截圖</p><p> 有上面的仿真圖可以看出當(dāng)A=B且AMORPM=AMORPMCLOCK是,輸出EQU會有一個高電平輸出,當(dāng)兩者有一個不滿足條件時,EQU為低電平時。此模塊用于下面的鬧鐘模塊,當(dāng)設(shè)置的時間與當(dāng)前時間相等時,EQU會有一個高電平輸出。仿真結(jié)果與設(shè)計(jì)相吻
52、合,說明此模塊是成功的。</p><p><b> ?、螅K符號圖:</b></p><p> ⑩仿電臺報(bào)時模塊的設(shè)計(jì)與仿真</p><p> ?、?,Verilog代碼:</p><p> // Radio.v 仿電臺報(bào)時</p><p> module Radio (ALARM_Rad
53、io,Minute,Second,_1024HzIN,_512Hz);</p><p> input _1024HzIN,_512Hz;</p><p> input[7:0] Minute,Second;</p><p> output ALARM_Radio;</p><p> reg ALARM_Radio;</p>
54、<p> always@(Minute or Second)</p><p> if(Minute==8'h59)</p><p> case(Second)</p><p><b> 8'h51,</b></p><p><b> 8'h53,</b>
55、;</p><p><b> 8'h55,</b></p><p> 8'h57: ALARM_Radio=_512Hz;//在每個小時的59分51,53,55, 57秒的//時候發(fā)出4聲512Hz的低/音</p><p> 8'h59: ALARM_Radio=_1024HzIN;//在每個小時的59分59秒時發(fā)
56、1024Hz</p><p><b> //的一聲高音</b></p><p> default: ALARM_Radio=1'b0;//其它情況在此模塊下不發(fā)出聲音</p><p><b> endcase</b></p><p> else ALARM_Radio=1'b
57、0; //其它情況在此模塊下不發(fā)出聲音</p><p><b> endmodule</b></p><p><b> ?、颍抡娼Y(jié)果:</b></p><p> 圖14 仿電臺報(bào)時仿真截圖</p><p> 有上面的仿真可以清楚地看出,在某小時的59分51,53,55,57秒的時候,ALA
58、RM_Radio發(fā)出了四聲512Hz的低音,在59分59秒的時候發(fā)出了一聲1024Hz的高音,仿真結(jié)果與設(shè)計(jì)預(yù)期相符,說明此模塊是成功的。</p><p><b> ?、?,模塊符號圖:</b></p><p> 鬧鐘模塊的設(shè)計(jì)與仿真</p><p> 鬧鐘設(shè)模塊設(shè)計(jì)框圖如下:</p><p> 圖15 鬧鐘設(shè)定模
59、塊框圖</p><p> 由以上框圖很容易用Verilog語言實(shí)現(xiàn)鬧鐘功能。</p><p> ?、?,Verilog代碼:</p><p><b> //Bell.v </b></p><p> module Bell (ALARM_Clock,Set_Hr,Set_Min,Hour,Minute,Second,S
60、etHrkey,</p><p> SetMinkey,AMORPM,AMORPMCLOCK,_1024HzIN,_512Hz,_1Hz,CtrlBell);</p><p> output ALARM_Clock;</p><p> output[7:0] Set_Hr,Set_Min;//設(shè)定的鬧鐘的小時與分鐘</p><p>
61、wire ALARM_Clock;</p><p> wire[7:0] Set_Hr,Set_Min;</p><p> input _1024HzIN,_512Hz,_1Hz;</p><p> input SetHrkey,SetMinkey;//設(shè)定鬧鐘的小時與分鐘的按鍵</p><p> input CtrlBell; //
62、鬧鈴控制,CtrlBel=1時,鬧鐘在設(shè)定的時刻發(fā)出鬧鈴</p><p> input AMORPM;//主時鐘的上下午標(biāo)志</p><p> wire AMORPM;</p><p> input AMORPMCLOCK;//鬧鐘的上下午標(biāo)志</p><p> wire AMORPMCLOCK;</p><p&g
63、t; input[7:0] Hour,Minute,Second; //主時鐘的小時,分鐘,秒</p><p> supply1 Vdd;</p><p> wire HrH_EQU,HrL_EQU,MinH_EQU,MinL_EQU;</p><p> wire Time_EQU;</p><p> counter60 SU1(S
64、et_Min,Vdd,SetMinkey,_1Hz); </p><p> counter12 SU2(Set_Hr[7:4],Set_Hr[3:0],Vdd,SetHrkey,_1Hz);</p><p> //鬧鐘小時與分鐘的設(shè)定</p><p> _4bitcomparator SU4(HrH_EQU,AMORPM,AMORPMCLOCK,Set_Hr[
65、7:4],Hour[7:4]); </p><p> //比較主時鐘與鬧鐘的小時高4位是否相等</p><p> _4bitcomparator SU5(HrL_EQU,AMORPM,AMORPMCLOCK,Set_Hr[3:0],Hour[3:0]);</p><p> //比較主時鐘與鬧鐘的小時低4位是否相等</p><p> _
66、4bitcomparator SU6(MinH_EQU,AMORPM,AMORPMCLOCK,Set_Min[7:4],Minute[7:4]);</p><p> //比較主時鐘與鬧鐘的分鐘高4位是否相等</p><p> _4bitcomparator SU7(MinL_EQU,AMORPM,AMORPMCLOCK,Set_Min[3:0],Minute[3:0]);</p&
67、gt;<p> //比較主時鐘與鬧鐘的分鐘低4位是否相等</p><p> assign Time_EQU=(HrH_EQU && HrL_EQU && MinH_EQU && MinL_EQU);</p><p><b> //時間相等</b></p><p> assig
68、n ALARM_Clock=CtrlBell?(Time_EQU && (((Second[0]==1'b1)&&_512Hz)||((</p><p> Second[0]==1'b0)&&_1024HzIN))): 1'b0;</p><p> //若兩時間相等則發(fā)出高低音交錯的鬧鈴1024HzIN和512Hz
69、</p><p><b> Endmodule</b></p><p><b> Ⅱ,仿真結(jié)果:</b></p><p> 圖16 鬧鐘模塊仿真截圖</p><p> 由以上的仿真截圖可以清晰地看出當(dāng)主時鐘與鬧鐘設(shè)定的時間相等時,ALARM_Clock會輸出1024HzIN和512Hz高低
70、交錯的脈沖,且會持續(xù)1分鐘,這與設(shè)計(jì)預(yù)期相符,說明此模塊是成功的。</p><p><b> Ⅲ,模塊符號圖:</b></p><p> 自動整點(diǎn)報(bào)時模塊的設(shè)計(jì)與仿真</p><p> 此模塊的設(shè)計(jì)思想為利用case語句將所有小時都包含進(jìn)去,并且在相應(yīng)小時的case通過賦值語句將相應(yīng)應(yīng)該響的聲數(shù)定義好,從而實(shí)現(xiàn)了幾點(diǎn)報(bào)幾時的功能,考慮到要
71、與整點(diǎn)報(bào)時的聲音區(qū)分開來故選擇了在偶數(shù)秒響。具體如下:</p><p> ?、?,Verilog代碼:</p><p> //Complete_auto.v</p><p> module Complete_auto (ALARM_Complete_auto,Hour,Minute,Second,_512Hz);</p><p> inp
72、ut[7:0] Hour,Minute,Second;</p><p> input _512Hz;</p><p> output ALARM_Complete_auto;</p><p> reg ALARM_Complete_auto;</p><p> always@(Minute or Second)</p>
73、<p> if(Minute==8'h00)</p><p> case(Hour)</p><p> 8'h01:ALARM_Complete_auto=(Second==8'h02)&&_512Hz;</p><p><b> //1點(diǎn)是響1下</b></p><
74、p> 8'h02:ALARM_Complete_auto=(Second==8'h02||Second==8'h04)&&_512Hz;</p><p><b> //2點(diǎn)是響2下</b></p><p> 8'h03:ALARM_Complete_auto=(Second==8'h02||Secon
75、d==8'h04||Second==8'h 06)&&_512Hz;</p><p><b> //3點(diǎn)是響3下</b></p><p> 8'h04:ALARM_Complete_auto=(Second==8'h02||Second==8'h04||Second==8'h 06||Second==
76、8'h08)&&_512Hz;</p><p><b> //4點(diǎn)是響4下</b></p><p> 8'h05:ALARM_Complete_auto=(Second==8'h02||Second==8'h04||Second==8'h 06||Second==8'h08||Second==8
77、9;h10)&&_512Hz;</p><p><b> //5點(diǎn)是響5下</b></p><p> 8'h06:ALARM_Complete_auto=(Second==8'h02||Second==8'h04||Second==8'h 06||Second==8'h08||Second==8'h1
78、0 ||Second==8'h12)&&_512Hz;</p><p><b> //6點(diǎn)是響6下</b></p><p> 8'h07:ALARM_Complete_auto=(Second==8'h02||Second==8'h04||Second==8'h 06||Second==8'h08||
79、Second==8'h10||Second==8'h12||Second==8'h14)&&_512Hz;</p><p><b> //7點(diǎn)是響7下</b></p><p> 8'h08:ALARM_Complete_auto=(Second==8'h02||Second==8'h04||Secon
80、d==8'h 06||Second==8'h08||Second==8'h10||Second==8'h12||Second==8'h14||Second==8'h16)&&_512Hz;</p><p><b> //8點(diǎn)是8下</b></p><p> 8'h09:ALARM_Comple
81、te_auto=(Second==8'h02||Second==8'h04||Second==8'h 06||Second==8'h08||Second==8'h10||Second==8'h12||Second==8'h14||Second==8'h16||Second==8'h18)&&_512Hz;</p><p>&l
82、t;b> //9點(diǎn)是響9下</b></p><p> 8'h10:ALARM_Complete_auto=(Second==8'h02||Second==8'h04||Second==8'h 06||Second==8'h08||Second==8'h10||Second==8'h12||Second==8'h14||Secon
83、d==8'h16||Second==8'h18 ||Second==8'h20)&&_512Hz;</p><p> //10點(diǎn)是響10下</p><p> 8'h11:ALARM_Complete_auto=(Second==8'h02||Second==8'h04||Second==8'h 06||Second
84、==8'h08||Second==8'h10||Second==8'h12||Second==8'h14||Second==8'h16||Second==8'h18||Second==8'h20||Second==8'h22)&&_512Hz;</p><p> //11點(diǎn)是響11下</p><p> 8&
85、#39;h12:ALARM_Complete_auto=(Second==8'h02||Second==8'h04||Second==8'h 06||Second==8'h08||Second==8'h10||Second==8'h12||Second==8'h14||Second==8'h16||Second==8'h18||Second==8'h20||
86、Second==8'h22||Second==8'h24)&&_512Hz;</p><p> //12點(diǎn)是響12下</p><p><b> endcase</b></p><p> else ALARM_Complete_auto=1'b0;</p><p><b&
87、gt; endmodule</b></p><p><b> ?、颍抡娼Y(jié)果:</b></p><p> 圖17 自動整點(diǎn)報(bào)時仿真(7點(diǎn)時)截圖</p><p> 圖18 自動整點(diǎn)報(bào)時仿真(11點(diǎn)時)截圖</p><p> 由以上仿真的截圖可以看出,隨便選取兩個整點(diǎn)時刻7點(diǎn)和11點(diǎn)ALARM_Co
88、mplete_auto都輸出了相應(yīng)的脈沖,7點(diǎn)時每隔一秒就會有512Hz的脈沖輸出,相當(dāng)于是響了7下,11點(diǎn)時也如此,有兩仿真圖可以看出仿真結(jié)果與實(shí)驗(yàn)預(yù)期相符得很好,說明該模塊是成功的。</p><p><b> ?、螅K符號圖:</b></p><p> 觸摸報(bào)時模塊設(shè)計(jì)(未成功故不能仿真)</p><p> 對于此模塊,我設(shè)想的思路與
89、自動整點(diǎn)報(bào)時相似,在按鍵按下時,啟動另一個時鐘,而此時鐘的秒是以0開始計(jì)數(shù)的,故可調(diào)用自動整點(diǎn)報(bào)時來完成功能。</p><p> 在此就不把代碼附上去了。</p><p><b> 模塊符號圖:</b></p><p><b> 主時鐘模塊的設(shè)計(jì)</b></p><p> 主時鐘模塊主要完成
90、小時、分鐘和秒的計(jì)時,調(diào)節(jié)分鐘與小時,12和24進(jìn)制時間的切換等功能。Verilog代碼如下:</p><p> //top_clock.v</p><p> module top_clock(Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey,_12OR24);</p><p> input _1Hz,nCR,Ad
91、jMinkey,AdjHrkey,_12OR24;</p><p> output[7:0] Hour,Minute,Second;</p><p> wire[7:0] Hour,Minute,Second;</p><p> wire[7:0] Hour_12,Hour_24;</p><p> supply1 Vdd;</
92、p><p> wire MinCP,HrCP;</p><p> counter60 UT1(Second,nCR,Vdd,_1Hz);</p><p> counter60 UT2(Minute,nCR,Vdd,~MinCP);</p><p> counter12 UT3(Hour_12[7:4],Hour_12[3:0],nCR,V
93、dd,~HrCP);</p><p> counter24 UT4(Hour_24[7:4],Hour_24[3:0],nCR,Vdd,~HrCP); //完成12進(jìn)制和24</p><p><b> //進(jìn)制的計(jì)數(shù)</b></p><p> _2to1MUX MU0(Hour,_12OR24,Hour_24,Hour_12);//選擇顯
94、示的進(jìn)制小時</p><p> assign MinCP=AdjMinkey?_1Hz:(Second==8'h59);</p><p> assign HrCP=AdjHrkey?_1Hz:({Minute,Second}==16'h5959);</p><p><b> endmodule</b></p>
95、<p><b> 模塊符號圖:</b></p><p> 完整模塊(頂層模塊)的設(shè)計(jì)</p><p> //Complete_top_Clock.v </p><p> module Complete_top_Clock(LED_Hr,LED_Min,LED_Sec,ALARM,AMORPM,AMORPMCLOCK,_102
96、4HzIN,</p><p> AdjHrkey,AdjMinkey, ALARM_Ctrl_Byhand,_12OR24,CtrlBell,Mode,nCR);</p><p> input _1024HzIN;</p><p> input nCR;</p><p> output[7:0] LED_Hr,LED_Min,LED_
97、Sec;</p><p> output AMORPM;</p><p> output AMORPMCLOCK;</p><p> wire[7:0] LED_Hr,LED_Min,LED_Sec;</p><p> wire _512Hz,_1Hz;</p><p> wire _nCR;</p&g
98、t;<p> input AdjMinkey,AdjHrkey,_12OR24,ALARM_Ctrl_Byhand;</p><p> //input SetHrkey,SetMinkey;</p><p> wire[7:0] Hour,Minute,Second;</p><p> wire[7:0] Set_Hr,Set_Min;<
99、/p><p> wire[7:0] Minute_Byhand,Second_Byhand;</p><p> supply0 _0;</p><p> supply1 _1;</p><p> wire[7:0] Hour_temp,Minute_temp,Second_temp;</p><p> wire
100、ALARM_Radio;</p><p> wire ALARM_Clock;</p><p> wire ALARM_Complete_auto,ALARM_Complete_Byhand;</p><p> output ALARM;</p><p> input CtrlBell;</p><p> i
101、nput Mode;</p><p> assign AMORPM=(Hour==8'h12)?(~AMORPM):AMORPM;</p><p> assign AMORPMCLOCK=(Set_Hr==8'h12)?(~AMORPMCLOCK):AMORPMCLOCK;</p><p> Divided_Frequency U0(_1Hz,
102、_512Hz,nCR,_1024HzIN);</p><p> //調(diào)用分頻模塊產(chǎn)生1Hz和512Hz的脈沖</p><p> top_clock U1(Hour,Minute,Second,_1Hz,nCR,((~Mode)&&AdjMinkey),((~Mode)&&AdjHrkey),_12OR24);</p><p>&l
103、t;b> //調(diào)用主時鐘模塊</b></p><p> Radio U2(ALARM_Radio,Minute,Second,_1024HzIN,_512Hz);</p><p><b> //調(diào)用仿電臺報(bào)時</b></p><p> Bell U3(ALARM_Clock,Set_Hr,Set_Min,Hour,Mi
104、nute,Second,(Mode&&AdjHrkey),(Mode&&AdjMinkey),</p><p> AMORPM,AMORPMCLOCK,_1024HzIN,_512Hz,_1Hz,CtrlBell);</p><p><b> //調(diào)用鬧鐘模塊</b></p><p> Complete_a
105、uto U4(ALARM_Complete_auto,Hour,Minute,Second,_512Hz);</p><p> //調(diào)用自動整點(diǎn)報(bào)時模塊</p><p> //Complete_Byhand U5(_1Hz,ALARM_Ctrl_Byhand,Minute_Byhand,_nCR);</p><p> //Complete_Byhand U5
106、(Hour,Second,_512Hz,ALARM_Ctrl_Byhand,ALARM_Complete_Byhand);</p><p> //Complete_Byhand U5 (Hour,_512Hz,ALARM_Ctrl_Byhand,ALARM_Complete_Byhand);</p><p> assign ALARM=(ALARM_Radio||ALARM_Clock
107、||ALARM_Complete_auto);</p><p><b> //最終蜂鳴器輸出</b></p><p> _2to1MUX MU0(LED_Hr,Mode,Set_Hr,Hour);</p><p> _2to1MUX MU1(LED_Min,Mode,Set_Min,Minute);</p><p>
108、; _2to1MUX MU2(LED_Sec,Mode,8'h00,Second);//選擇顯示主時鐘還是設(shè)定的鬧鐘時間</p><p><b> Endmodule</b></p><p><b> 模塊符號圖:</b></p><p><b> 引腳分配</b></p>
109、<p><b> 【汽車尾燈】</b></p><p> 汽車尾燈實(shí)際上是一個簡單的狀態(tài)機(jī),利用狀態(tài)機(jī)的方法設(shè)計(jì)如下:</p><p> Ⅰ,Verilog代碼:</p><p> // car_light.v 汽車尾燈模塊</p><p> module car_light(CP,brake,
110、right,left,back,l1,l2,l3,l4,l5,l6,sta);</p><p> input CP,brake,right,left,back;</p><p> output l1,l2,l3,l4,l5,l6;</p><p> output [3:0]sta;</p><p> reg l1,l2,l3,l4,l
111、5,l6;</p><p> reg [3:0] sta,c;</p><p><b> reg ba;</b></p><p> always@(posedge CP)</p><p><b> begin</b></p><p> if (brake)</
112、p><p><b> begin</b></p><p> if (right) //右轉(zhuǎn)彎剎車</p><p><b> begin</b></p><p> l1<=1; l2<=1; l3<=1;</p><p> if(c==4'h0)
113、 begin l4<=1; l5<=0; l6<=0; c<=c+4'h1; end </p><p> if(c==4'h1) begin l4<=0; l5<=1; l6<=0; c<=c+4'h1; end</p><p> if(c>=4'h2) begin l4<=0; l5<=
114、0; l6<=1; c<=4'h0; end</p><p> sta<=4'h5;</p><p><b> end</b></p><p> else if (left) //左轉(zhuǎn)彎剎車</p><p><b> begin</b></p>
115、<p> l4<=1; l5<=1; l6<=1;</p><p> if(c==4'h0) begin l1<=0; l2<=0; l3<=1; c<=c+4'h1; end </p><p> if(c==4'h1) begin l1<=0; l2<=1; l3<=0; c<=c
116、+4'h1; end</p><p> if(c>=4'h2) begin l1<=1; l2<=0; l3<=0; c<=4'h0; end</p><p> sta<=4'h6;</p><p><b> end</b></p><p> e
117、lse //剎車</p><p><b> begin</b></p><p> l1<=1; l2<=1; l3<=1; l4<=1; l5<=1; l6<=1;</p><p> sta<=4'h2;</p><p><b> end</b&
118、gt;</p><p><b> end</b></p><p><b> else </b></p><p><b> begin </b></p><p> if (right) //右轉(zhuǎn)彎</p><p><b> begin&
119、lt;/b></p><p> l1<=0; l2<=0; l3<=0;</p><p> if(c==4'h0) begin l4<=1; l5<=0; l6<=0; c<=c+4'h1; end </p><p> if(c==4'h1) begin l4<=0; l5<=
120、1; l6<=0; c<=c+4'h1; end</p><p> if(c>=4'h2) begin l4<=0; l5<=0; l6<=1; c<=4'h0; end</p><p> sta<=4'h3;</p><p><b> end</b><
121、/p><p> else if (left) //左轉(zhuǎn)彎</p><p><b> begin</b></p><p> l4<=0; l5<=0; l6<=0;</p><p> if(c==4'h0) begin l1<=0; l2<=0; l3<=1; c<=
122、c+4'h1; end </p><p> if(c==4'h1) begin l1<=0; l2<=1; l3<=0; c<=c+4'h1; end</p><p> if(c>=4'h2) begin l1<=1; l2<=0; l3<=0; c<=4'h0; end</p>
123、<p> sta<=4'h4;</p><p><b> end</b></p><p> else if (back) //倒車</p><p><b> begin</b></p><p><b> ba<=~ba;</b><
124、/p><p> sta<=4'h7;</p><p> if (ba) begin l1<=1; l2<=1; l3<=1; l4<=1; l5<=1; l6<=1; end</p><p> else begin l1<=0; l2<=0; l3<=0; l4<=0; l5<=0;
125、l6<=0; end</p><p><b> end</b></p><p><b> else</b></p><p> begin //正常</p><p> sta<=4'h1; l1<=0; l2<=0; l3<=0; l4<=0; l
126、5<=0; l6<=0;</p><p><b> end</b></p><p><b> end</b></p><p><b> end</b></p><p><b> endmodule</b></p><
127、p><b> Ⅱ,仿真結(jié)果:</b></p><p> 圖19 汽車尾燈仿真截圖</p><p> 由以上的仿真截圖可以清楚地看出,①為右轉(zhuǎn)彎剎車,②為左轉(zhuǎn)彎剎車,③為剎車,④為右轉(zhuǎn)彎,⑤為左轉(zhuǎn)彎,⑥倒車。在各種情況下,仿真結(jié)果與實(shí)驗(yàn)結(jié)果均相符,說明模塊是成功的。</p><p><b> Ⅲ,模塊符號圖:</b
128、></p><p><b> ?、?,引腳分配</b></p><p><b> 【實(shí)驗(yàn)總結(jié)與心得】</b></p><p> 通過本次試驗(yàn)讓我了解和掌握了VerilogHDL硬件語言,并且實(shí)地操作應(yīng)用在FPGA上,讓我獲益匪淺。在實(shí)際操作編程的過程中,我發(fā)現(xiàn)很多東西都得學(xué)會轉(zhuǎn)換,不能死搬硬套的去使用任何一門語言或
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車尾燈課程設(shè)計(jì)
- 汽車尾燈課程設(shè)計(jì)
- 汽車尾燈課程設(shè)計(jì)
- 汽車尾燈課程設(shè)計(jì)
- 汽車尾燈課程設(shè)計(jì)
- 汽車尾燈數(shù)字電子課程設(shè)計(jì)報(bào)告
- 汽車尾燈課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)--汽車車尾燈
- 汽車尾燈課程設(shè)計(jì)vhdl
- 汽車尾燈控制課程設(shè)計(jì)
- protel課程設(shè)計(jì) 汽車尾燈
- 汽車尾燈課程設(shè)計(jì) (2)
- protel課程設(shè)計(jì) 汽車尾燈
- 汽車尾燈控制課程設(shè)計(jì)
- 汽車尾燈設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 汽車尾燈課程設(shè)計(jì)---汽車尾燈控制器的設(shè)計(jì)與制作
- 課程設(shè)計(jì)---汽車尾燈設(shè)計(jì)論文
- 數(shù)字課程設(shè)計(jì)----汽車尾燈控制設(shè)計(jì)方案
- 數(shù)字邏輯課程設(shè)計(jì)----汽車尾燈控制電路
- 關(guān)于汽車尾燈的課程設(shè)計(jì)
評論
0/150
提交評論