版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 2009—2010學(xué)年第二學(xué)期</p><p> 數(shù)字電子技術(shù)課程設(shè)計報告</p><p> 專業(yè)班級 自動化08—2班 </p><p> 姓 名 </p><p> 學(xué) 號 </p>
2、<p> 開課系室 電工電子學(xué)教學(xué)中心 </p><p> 設(shè)計日期 2010年8月23日~27日 </p><p> 設(shè)計題目:多功能數(shù)字鐘電路設(shè)計</p><p> 一、設(shè)計任務(wù)及要求:</p><p> 本次課程設(shè)計任務(wù)是設(shè)計一個多功能數(shù)字鐘。</p><p><b>
3、 具體要求是:</b></p><p> 1.鐘表的工作機理,整個鐘表的工作應(yīng)該是在1Hz信號的作用下進行,這樣每來一個時鐘信號,秒增加1秒,當(dāng)秒從59秒跳轉(zhuǎn)到00秒時,分鐘增加1分,同時當(dāng)分鐘從59分跳轉(zhuǎn)到00分時,小時增加1小時,但是需要注意的是,小時的范圍是從0~23時。</p><p> 2.小時-分鐘-秒鐘。</p><p> 3.整點報
4、時,在整點前5秒LED開始按照1HZ頻率閃爍,過整點后,停止閃爍。</p><p> 4.調(diào)整時間的按鍵用按鍵模塊的S1和S2,S1調(diào)節(jié)小時,每按下一次,小時增加一個小時,S2調(diào)整分鐘,每按下一次,分鐘增加一分鐘。另外用S8按鍵作為系統(tǒng)時鐘復(fù)位,復(fù)位后全部顯示00-00-00。</p><p> 二、設(shè)計原理與方案:</p><p> ?。ㄒ唬㈨攲釉O(shè)計方案:(
5、包括原理框圖及其工作原理說明等內(nèi)容)</p><p><b> 圖1 原理框圖</b></p><p> 工作原理說明:clk用于輸入50MHZ時鐘,s1用于給小時加1,s2用于給分鐘加1,s8用于復(fù)位。</p><p> 分頻器分出三個頻率的時鐘,clkout1輸出1HZ,clkout2輸出1千HZ,clkout1輸出2HZ。<
6、/p><p> 控制器輸入端口t1用于控制燈閃爍,輸出端口led接小燈,ss1、ss2、reset分別儲存s1、s2、s8的值并將其傳給計數(shù)器。</p><p> 計數(shù)器輸出端口shis表示小時的十位,shig表示小時的各位,mins表示分鐘的十位,ming表示分鐘的個位。secs表示秒的十位,secg表示秒的個位。</p><p> 顯示器輸出端口leds接七段
7、數(shù)碼管,wei接數(shù)碼管的控制端。</p><p> 當(dāng)clkout1出現(xiàn)上升沿時,秒執(zhí)行加1或進位操作,若秒進位,則分鐘執(zhí)行加1或進位操作,若分秒都進位,則小時進行加1或進位操作。小時進位前5秒,燈開始以1HZ頻率閃爍。按下s1時小時加1或進位,按下s2時分鐘加1或進位,若分鐘進位,小時同時進行加1或進位操作。</p><p><b> 整體仿真源文件:</b>&
8、lt;/p><p><b> 圖2整體仿真源文件</b></p><p> 說明:s1、s2、s8按下時為0,不按下時為1。當(dāng)s8按下時,全部歸0。當(dāng)s1按下時,小時假1,當(dāng)s2按下時,分鐘加1。輸入波形中剛開始s8為0,歸0。然后讓其運行一段時間,再讓s1為0,再過一段時間讓s2為0,再過一段時間讓s8為0。clk為脈沖信號,10ps一周期。</p>
9、<p><b> 輸出放大截圖:</b></p><p> 圖3 輸出仿真波形放大截圖第一部分</p><p> 圖4 輸出仿真波形放大截圖第二部分(燈的閃爍)</p><p> 說明:仿真時計數(shù)器控制器都是12分頻,燈閃爍是6分頻,顯示器是2分頻,因此能看到輸出的6個數(shù)碼管的值。并對其進行初步判斷。由于數(shù)碼管數(shù)值不易分辨,所
10、以不用全部看到,只看一部分即可。</p><p> ?。ǘ?、各個電路子模塊:</p><p><b> 1.分頻器設(shè)計方案</b></p><p> 設(shè)計思路:設(shè)計計數(shù)變量 cout1、cout2、cout3,每來一個脈沖加1。cout1加到50000000時歸0,同時clkout1加1,否則clkout1歸0。cout2到2500000
11、0時歸0,同時clkout2加1,否則clkout2歸0。cout3到25000000時歸0,同時clkout3加1,否則clkout3歸0。</p><p><b> 源程序:</b></p><p> module fenpin(clk,clkout1,clkout2,clkout3);</p><p> input clk;
12、 //下載時clk為50MHz</p><p> output clkout1,clkout2,clkout3; //clkout1輸出1赫茲,clkout2為1千赫茲,clkout3為2赫茲</p><p> reg clkout1,clkout2,clkout3;</p><p> integer cout1,c
13、out2,cout3; //cout1,cout2,cout3均為計數(shù)變量</p><p> always @(posedge clk )</p><p><b> begin</b></p><p> cout1 <= (cout1 == 32'd50000000) ? 32'd0 : (cout1 + 3
14、2'd1);</p><p> clkout1<= (cout1 == 32'd50000000) ? 1'd1 : 1'd0; //50000000分頻</p><p> cout3 <= (cout3 == 32'd25000000) ? 32'd0 : (cout3 + 32'd1);</p&
15、gt;<p> clkout3<= (cout3 == 32'd25000000) ? 1'd1 : 1'd0; //25000000分頻</p><p> cout2 <= (cout2 == 32'd50000) ? 32'd0 : (cout2 + 32'd1);</p><p> clkout2<
16、= (cout2 == 32'd50000) ? 1'd1 : 1'd0; //50000分頻</p><p><b> end</b></p><p><b> endmodule</b></p><p> //仿真時,改clkout1為12分頻,clkout2為2頻,clko
17、ut1為6分頻</p><p> //下載時,由于clk為50MHz,改clkout1為50000000分頻,輸出1赫茲,clkout2為50000分頻,輸出1千赫茲,clkout3為5000000分頻,輸出2赫茲</p><p><b> 分頻器仿真源文件:</b></p><p> 圖5 分頻器仿真源文件</p><
18、;p><b> 仿真輸出文件:</b></p><p> 圖6 頻器仿真輸出文件</p><p><b> 2.控制器設(shè)計方案</b></p><p> 控制器輸入端口t1用于控制燈閃爍,輸出端口led接小燈,ss1、ss2、reset分別儲存s1、s2、s8的值并將其傳給計數(shù)器</p><
19、;p> 設(shè)計思路: ss1、ss2、reset儲存s1、s2、s8的值傳給計數(shù)器執(zhí)行其他功能。這一部分由1赫茲進行驅(qū)動。led是燈,t1為1時led閃爍。這一部分由2赫茲進行驅(qū)動。</p><p><b> 源程序:</b></p><p> module kongzhi(clkout1,clkout3,s1,s2,s8,t1,led,ss1,ss2,re
20、set);</p><p> input clkout1,clkout3,s1,s2,s8,t1; // clkout1輸入1赫茲,clkout3輸入2赫茲,t1控制閃爍</p><p> output led,ss1,ss2,reset; //led是燈,ss1、ss2、reset儲存s1、s2、s8的值傳給計數(shù)器</p><p> reg led,ss1
21、,ss2,reset;</p><p> always@(posedge clkout1)</p><p><b> begin </b></p><p><b> reset=s8;</b></p><p><b> ss1=s1;</b></p>&l
22、t;p><b> ss2=s2;</b></p><p><b> end</b></p><p> always@(posedge clkout3)</p><p><b> begin </b></p><p> if(t1==1) led=~led;els
23、e if(t1==0) led=0;//當(dāng)t1=1時閃爍,否則不閃</p><p><b> end</b></p><p><b> endmodule</b></p><p><b> 控制器仿真源文件:</b></p><p> 圖7控制器仿真源文件</p
24、><p> 說明:clkout1的周期是clkout3的一倍。s1、s2、s3均有0和1出現(xiàn),t1之后為1</p><p> 控制器仿真輸出文件:</p><p> 圖8控制器仿真輸出文件</p><p> 說明:從圖中可以看出s1、s2、s3的值分別賦給了ss1、ss2、reset。Led在t1為1時閃爍。</p><
25、;p><b> 3.計時器設(shè)計方案</b></p><p> 計數(shù)器輸出端口shis表示小時的十位,shig表示小時的各位,mins表示分鐘的十位,ming表示分鐘的個位。secs表示秒的十位,secg表示秒的個位。</p><p> 設(shè)計思路:判斷ss1是否為0,若為0,小時加1或歸0。同時判斷ss2是否為0,若為0,則分鐘加1或歸0并進1。同時判斷re
26、set是否 為0,若為0,全部歸0。若不為 0則嵌套if語句判斷sec、min、shi的值并進行加1或歸0操作。當(dāng)59分54秒到59秒時讓t1為1,燈閃爍。其他時候t1為0,燈滅。</p><p> module jishu(clkout1,ss1,ss2,reset,shis,shig,mins,ming,secs,secg,t1);</p><p> input clkout1,s
27、s1,ss2,reset;// clkout1為1赫茲,ss1、ss2、reset是儲存的s1、s2、s8的值</p><p> output[1:0] shis;//小時的十位</p><p> output[3:0] shig;//小時的個位</p><p> output[2:0] mins;//分鐘的十位</p><p> o
28、utput[3:0] ming;//分鐘的個位</p><p> output[2:0] secs;//秒的十位</p><p> output[3:0] secg;//秒的個位</p><p> output t1;//返回閃爍的控制變量</p><p><b> reg t1;</b></p>
29、<p> reg[5:0] shi;//小時</p><p> reg[5:0] min, sec; //分鐘,秒</p><p> always@(posedge clkout1)</p><p><b> begin</b></p><p> if(ss1==0&&shi<2
30、4) shi=shi+1;//s1為0和shi小于23時,小時加1</p><p> if(ss1==0&&shi==24) shi=0; // s1為0和shi等于24時,小時變0 </p><p> if(ss2==0&&min<60) min=min+1;//s2為0和
31、min小于60時,分鐘加1</p><p> if(ss2==0&&min==60) begin min=0;t1=0; end// s2為0和min等于60時,分鐘變0 if(reset==0) begin shi=0;min=0;sec=0;t1=0;end //執(zhí)行復(fù)位功能</p><p> else if(sec==59) begin sec=
32、sec+5;//sec為59是sec歸0,判斷min的值是否為59</p><p> if(min==59) begin //若min=59,min歸0并判斷shi> 22</p><p> min=min+5;t1=0; </p><p> if(shi>22) shi=0;//若等于22,歸0</p><p> e
33、lse shi=shi+1;//若不等,shi加1</p><p><b> end</b></p><p> else begin min=min+1;end//若min不等于59,min加1</p><p><b> end</b></p><p> else begin sec
34、=sec+1;t1=0;end//若sec不為59,sec加1,令t1為0</p><p> if(min==59&&sec>54&&sec<60) t1=1;若整點前5秒,令t1為1,燈閃爍</p><p><b> end</b></p><p> assign shis=shi/10;/
35、/將小時的十位賦給shis</p><p> assign shig=shi%10;// 將小時的個位賦給shig</p><p> assign mins=min/10;//將分鐘的十位賦給mins</p><p> assign ming=min%10;// 將分鐘的個位賦給ming</p><p> assign secs=se
36、c/10;//將秒的十位賦給secs</p><p> assign secg=sec%10;// 將秒的個位賦給secg</p><p><b> endmodule</b></p><p><b> 計時器仿真源文件:</b></p><p> 圖9計時器仿真源文件</p>
37、<p> 說明:reset先為0,令其復(fù)位。運行一段時間之后先讓ss1加1,再讓ss2加1,clkout1始終有輸入。</p><p><b> 整體仿真圖:</b></p><p><b> 圖10 整體仿真圖</b></p><p> 說明:從圖中可以看出燈閃爍變量t1的變化,也可以看出小時shi加
38、1的變化,其他的在下面有放大圖。</p><p><b> 秒進位:</b></p><p> 圖11秒進位仿真截圖</p><p> 說明:從圖中可以看出秒十位secs為5,個位secg為9時,秒歸0,分鐘個位ming加1。</p><p><b> 分鐘進位:</b></p>
39、<p> 圖12分鐘進位仿真截圖</p><p> 說明:從圖中可以看出,分鐘59時(ming為9,mins為5時),分鐘歸0,小時加1</p><p><b> S1起作用</b></p><p> 圖13 s1起作用仿真截圖</p><p> 說明:從圖中可以看出ss1為0時,每過一個上升沿,
40、小時加1(shig加1或進位)</p><p><b> S2起作用:</b></p><p> 圖14 s2起作用仿真截圖</p><p> 說明:從圖中可以看出ss2為0后,分鐘開始加1或進位。(ming加1或進位)</p><p><b> S8起作用:</b></p>
41、<p> 圖15 s8起作用仿真截圖</p><p> 說明:s8為0時,reset為0,其余均為0(除輸入外)。</p><p> 4.顯示器設(shè)計方案:(包括設(shè)計思路及其工作原理)</p><p> 設(shè)計思路:1千赫茲輸入,用wei來確定數(shù)碼管的位置,分別給不同的數(shù)碼管賦不同的值。使數(shù)碼管從左到右依次顯示小時—分鐘—秒。</p>&
42、lt;p> module xianshi(clkout2,shis,shig,mins,ming,secs,secg,leds1,wei);</p><p> input clkout2;//clkout2為1千赫茲</p><p> input[1:0] shis; //小時的十位</p><p> input[3:0] shig; //小時的個位&
43、lt;/p><p> input[2:0] mins; //分鐘的十位</p><p> input[3:0] ming; //分鐘的個位</p><p> input[2:0] secs; //秒的十位</p><p> input[3:0] secg; //秒的個位</p><p> output[6:0]
44、leds1;//leds1為數(shù)碼管</p><p> reg[6:0] leds1;</p><p> output [2:0] wei; //wei表示數(shù)碼管的位置</p><p> reg[2:0] wei; </p><p> reg[3:0] a; //中間變量</p><p> alwa
45、ys@(posedge clkout2)</p><p><b> begin</b></p><p> if(wei==6) begin a=shis;//當(dāng)wei為6時,加1,第7號數(shù)碼管顯示小時的十位 </p><p><b> case(a)</b></p><p> 4'
46、d0:leds1=7'b0111111;</p><p> 4'd1:leds1=7'b0000110;</p><p> 4'd2:leds1=7'b1011011;</p><p> default:leds1=7'b1111110;</p><p><b> endcas
47、e </b></p><p> wei=wei+1;</p><p><b> end</b></p><p> else if(wei==5) begin a=shig; //當(dāng)wei為5時,加1,第6號數(shù)碼管顯示小時的個位</p><p><b> case(a)</b>
48、;</p><p> 4'd0:leds1=7'b0111111;</p><p> 4'd1:leds1=7'b0000110;</p><p> 4'd2:leds1=7'b1011011;</p><p> 4'd3:leds1=7'b1001111;</p&
49、gt;<p> 4'd4:leds1=7'b1100110;</p><p> 4'd5:leds1=7'b1101101;</p><p> 4'd6:leds1=7'b1111101;</p><p> 4'd7:leds1=7'b0000111;</p><
50、;p> 4'd8:leds1=7'b1111111;</p><p> 4'd9:leds1=7'b1101111;</p><p> default:leds1=7'b1111110;</p><p><b> endcase </b></p><p> wei=
51、wei+1;</p><p><b> end</b></p><p> else if(wei==4) begin leds1=7'b1000000;wei=wei+1;</p><p> //當(dāng)wei為4時,加1,第5號數(shù)碼管顯示橫杠</p><p><b> end</b>
52、;</p><p> else if(wei==3) begin a=mins; //當(dāng)wei為3時,加1,第4號數(shù)碼管顯示分鐘的十位</p><p><b> case(a)</b></p><p> 4'd0:leds1=7'b0111111;</p><p> 4'd1:led
53、s1=7'b0000110;</p><p> 4'd2:leds1=7'b1011011;</p><p> 4'd3:leds1=7'b1001111;</p><p> 4'd4:leds1=7'b1100110;</p><p> 4'd5:leds1=7'
54、;b1101101;</p><p> default:leds1=7'b1111110;</p><p><b> endcase </b></p><p> wei=wei+1;</p><p><b> end</b></p><p> else if
55、(wei==2) begin a=ming; //當(dāng)wei為2時,加1,第3號數(shù)碼管顯示分鐘的個位</p><p><b> case(a)</b></p><p> 4'd0:leds1=7'b0111111;</p><p> 4'd1:leds1=7'b0000110;</p>&
56、lt;p> 4'd2:leds1=7'b1011011;</p><p> 4'd3:leds1=7'b1001111;</p><p> 4'd4:leds1=7'b1100110;</p><p> 4'd5:leds1=7'b1101101;</p><p>
57、 4'd6:leds1=7'b1111101;</p><p> 4'd7:leds1=7'b0000111;</p><p> 4'd8:leds1=7'b1111111;</p><p> 4'd9:leds1=7'b1101111;</p><p> defaul
58、t:leds1=7'b1111110;</p><p><b> endcase </b></p><p> wei=wei+1;</p><p><b> end</b></p><p> else if(wei==1) begin leds1=7'b1000000;
59、wei=wei+1; </p><p> //當(dāng)wei為1時,加1,第2號數(shù)碼管顯示橫杠</p><p><b> end</b></p><p> else if(wei==0) begin a=secs; //當(dāng)wei為0時,加1,第1號數(shù)碼管顯示秒的十位</p><p><b> case(
60、a)</b></p><p> 4'd0:leds1=7'b0111111;</p><p> 4'd1:leds1=7'b0000110;</p><p> 4'd2:leds1=7'b1011011;</p><p> 4'd3:leds1=7'b1001
61、111;</p><p> 4'd4:leds1=7'b1100110;</p><p> 4'd5:leds1=7'b1101101;</p><p> default:leds1=7'b1111110;</p><p><b> endcase </b></p&g
62、t;<p> wei=wei+1;</p><p><b> end</b></p><p> else if(wei==7) begin a=secg; //當(dāng)wei為7時,加1,第0號數(shù)碼管顯示秒的個位</p><p><b> case(a)</b></p><p>
63、; 4'd0:leds1=7'b0111111;</p><p> 4'd1:leds1=7'b0000110;</p><p> 4'd2:leds1=7'b1011011;</p><p> 4'd3:leds1=7'b1001111;</p><p> 4'
64、;d4:leds1=7'b1100110;</p><p> 4'd5:leds1=7'b1101101;</p><p> 4'd6:leds1=7'b1111101;</p><p> 4'd7:leds1=7'b0000111;</p><p> 4'd8:leds
65、1=7'b1111111;</p><p> 4'd9:leds1=7'b1101111;</p><p> default:leds1=7'b1111110;</p><p><b> endcase</b></p><p> wei=wei+1;</p><
66、p><b> end end</b></p><p><b> endmodule</b></p><p><b> 數(shù)碼管仿真源文件:</b></p><p> 圖16數(shù)碼管仿真源文件</p><p> 說明:只輸入了一組值13時43分12秒</p&
67、gt;<p><b> 仿真輸出文件:</b></p><p> 圖17數(shù)碼管仿真文件</p><p> 說明:從圖中可以看出八個數(shù)碼管對應(yīng)的值。</p><p> wei=000時0號數(shù)碼管輸出1011011對應(yīng)秒的個位為2;</p><p> wei=001時1號數(shù)碼管輸出0000110對應(yīng)秒
68、的十位為1;</p><p> wei=010時2號數(shù)碼管輸出1000000對應(yīng)輸出“—”;</p><p> wei=011時3號數(shù)碼管輸出1001111對應(yīng)輸出分鐘的個位為3;</p><p> wei=100時4號數(shù)碼管輸出1100110對應(yīng)輸出分鐘的十位為4;</p><p> wei=101時5號數(shù)碼管輸出1000000對應(yīng)
69、輸出“—”;</p><p> wei=110時6號數(shù)碼管輸出1001111對應(yīng)輸出小時的個位為3;</p><p> wei=111時7號數(shù)碼管輸出0000110對應(yīng)輸出小時的十位為1;</p><p> 即輸出為“13—43—12”</p><p><b> 三、分析與討論:</b></p>&
70、lt;p> ?。ㄒ唬┱n程設(shè)計綜述:</p><p> 本次課程設(shè)計我總共進行了兩天,感覺整個程序就是一個精密的機器,由很多簡單的部件構(gòu)成,而我的任務(wù)就是仔細(xì)的設(shè)計部件組成機器,否則就很容易出錯。</p><p> 第一天上午我編寫了分頻程序和控制器程序,這兩個程序是最簡單的。分頻程序一個是輸出1赫茲,一個是輸出1千赫茲,另一個是輸出2赫茲??刂破魅齻€變量就是用來存儲三個按鍵的值,
71、還有就是控制閃爍。這一部分沒出現(xiàn)什么問題,就是出現(xiàn)了一些警告。</p><p> 警告1.Verilog HDL assignment warning at <location>: truncated with size <number> to match size of target (<number> </p><p> 原因:在HDL設(shè)計中對目
72、標(biāo)的位數(shù)進行了設(shè)定,如:reg[4:0] a;而默認(rèn)為32位, 要將位數(shù)裁定到合適的大小。 </p><p> 解決方案:如果結(jié)果正確,無須加以修正,如果不想看到這個警告,可以改變設(shè)定的位數(shù) 。</p><p> 2.Following 9 pins have nothing, GND, or VCC driving datain port -- changes to this con
73、nectivity may change fitting results </p><p> 原因:第9腳,空或接地或接上了電源。 </p><p> 解決方案:有時候定義了輸出端口,但輸出端直接賦‘0’,便會被接地,賦‘1’接電源。</p><p> 如果你的設(shè)計中這些端口就是這樣用的,那便可以不理會這些warning </p><p&g
74、t; 3.Found pins as undefined clocks and/or memory enables </p><p> 原因:是你作為時鐘的PIN沒有約束信息.可以對相應(yīng)的PIN做一下設(shè)定就行了。主要是指你的某些管腳在電路當(dāng)中起到了時鐘管腳的作用,比如flip-flop的clk 管腳,而此管腳沒有時鐘約束,因此QuartusII把“clk”作為未定義的時鐘。</p><p&
75、gt; 解決方案:clk應(yīng)該是時鐘,如果不是,最好改一個名字。</p><p> 4.Design contains <number> input pin(s) that do not drive logic </p><p> 原因:輸入引腳沒有驅(qū)動邏輯(驅(qū)動其他引腳),所有的輸入引腳需要有輸入邏輯。 </p><p> 解決方案:如果這種情況
76、是故意的,無須理會,如果非故意,輸入邏輯驅(qū)動。最好是輸入時鐘作為驅(qū)動邏輯。</p><p> 5.Can't analyze file -- file E://quartusii/*/*.v is missing </p><p> 原因:試圖編譯一個不存在的文件,該文件可能被改名或者刪除了。 </p><p> 解決方案:不管他,沒什么影響。<
77、/p><p> 6.Warning (10268): Verilog HDL information at lcd7106.v(63): Always Construct contains both blocking and non-blocking assignments </p><p> 原因: 一個always模塊中同時有阻塞和非阻塞的賦值 </p><p>
78、; 解決方案:最好是全部用阻塞賦值,或者全是非阻塞賦值。當(dāng)混合使用時,對同一變量必須全部用同一種賦值方式。</p><p> 第一天下午編寫計數(shù)器。計數(shù)器是最難編的一個程序,因為計數(shù)器才是真正起作用的部分。計數(shù)器的邏輯驅(qū)動是1赫茲。它的工作原理應(yīng)為:</p><p> 1.每過一秒,如果秒數(shù)小于59,秒數(shù)加1。如果是59秒,就讓秒數(shù)歸0并判斷分鐘。</p><p&
79、gt; 2.此時,如果分鐘數(shù)小于59,分鐘數(shù)加1。如果分鐘是59,就把分鐘歸0并判斷小時。</p><p> 3.此時,如果小時小于23, 小時進1。如果小時是23,就讓小時歸0。</p><p> 4.如果s1按下,小時加1。如果s2按下,分鐘加1。如果s8按下,全部歸0。</p><p> 5.如果是59分,在秒數(shù)為55到59之間讓燈以1Hz閃爍。<
80、;/p><p> 前三步的實現(xiàn)是采用嵌套if語句,最后一個功能是并列if語句。需要注意的是按按鍵時小時加1不能超過23,分鐘加1不能超過59,復(fù)位時秒數(shù)不能走。這樣,復(fù)位優(yōu)先級要高于走秒的優(yōu)先級,判斷按鍵s1s2按下時加1的方式,還要判斷其他條件。</p><p> 第三部分編寫好之后,就還差一個顯示模塊。這時候就可以進行仿真了,我把分頻器、控制器、計數(shù)器在頂層文件連接好進行仿真。這樣,程
81、序的輸出變?yōu)闊鬺ed、小時十位、小時個位、分鐘十位、分鐘個位、秒數(shù)十位、秒數(shù)個位,看波形就可以看到小時、分鐘、秒數(shù)、小燈的運行過程。經(jīng)過對波形的分析我發(fā)現(xiàn)兩個問題,第一是秒數(shù)、分鐘和小時會越過他們的界限。原因是我給它們賦了6位的值,如果不加限制,它們在運行時都可以達(dá)到63。增加了限制條件后一切正常。第二是燈閃爍時間太早,我把時間調(diào)整后,波形正常。</p><p> 下面就是顯示模塊。顯示模塊采用掃描方式給數(shù)碼管
82、輸出,因此是1千赫茲驅(qū)動。位置控制的變量從0開始每運行1次加1到7,再加1到0,數(shù)碼管輸出相應(yīng)的值。這一部分也還可以。</p><p> 最后是合成整個程序,編譯、分配管腳后進行下載。下載時除了兩個問題:第一,數(shù)碼管顯示的是倒的,時分秒都倒了。之后我把控制數(shù)碼管位置的變量重新賦值解決了這一問題。第二,燈閃爍是是54秒,說明我之前調(diào)整的是錯的,我又把它調(diào)回去,再下載就正確了。</p><p&g
83、t; ?。ǘ┤菀壮霈F(xiàn)的錯誤總結(jié)</p><p> 1.無法編譯,編譯按鈕呈灰色。</p><p> 原因:未打開工程。從新打開工程即可。</p><p> 2.Error: Top-level design entity "kongzhi" is undefined</p><p> 原因:module后的模塊名
84、與工程名不同,若只是對verilog文件進行編譯,可以將模塊名與工程名與verilog文件名改為一樣的。若要生成框圖,此時不應(yīng)該進行編譯。</p><p> 3.Error (10137): Verilog HDL Procedural Assignment error at kongzhi.v(15): illegal Procedural Assignment to nonregister data typ
85、e "led"</p><p> 原因:未把led賦給reg類型就在過程賦值語句中對其進行賦值。把led定義為reg類型即可。</p><p> 4.Error (10028): Can't resolve multiple constant drivers for net "reset" at kongzhi.v(11)</p&g
86、t;<p> 原因:當(dāng)一個模塊中有兩個過程賦值語句時,不能有同一變量在兩個語句中同時被賦值。也就是說,每一個變量只能有一個觸發(fā)電平。</p><p> 5.Error (10170): Verilog HDL syntax error at kongzhi.v(15) near text "="; expecting ")", or "?&qu
87、ot;, or binary operator, </p><p> Error (10112): Ignored module "kongzhi" at kongzhi.v(1) due to previous errors</p><p> 原因:雙擊后顯示那一條語句,在那條語句中缺少了一個end,或者是()的一邊,或者是if的判斷語句少了個=號,或者是少了其他
88、部分。</p><p> 6.Error (10171): Verilog HDL syntax error at kongzhi.v(20) near end of file ; expecting an identifier, or "endmodule", or a parallel statement</p><p> 原因:在模塊的最后缺少了一個endm
89、odule。加上后就可以了。</p><p> 7.Error (10206): Verilog HDL Module Declaration error at kongzhi.v(2): top module port "t1" is not found in the port list</p><p> 原因:t1端口在列表中未定義。</p>&l
90、t;p> 8.Error (10161): Verilog HDL error at kongzhi.v(1): variable "t1" is not declared</p><p> 原因:t1端口在端口列表中出現(xiàn)了但是未定義。</p><p> 9.Error (10231): Verilog HDL error at kongzhi.v(10):
91、 value cannot be assigned to input "clkout1"</p><p> 原因:輸入端口不能賦值,不能對其進行任何更改。</p><p> 10.Error (10219): Verilog HDL error at jishu.v(37): data type of left-hand side of Continuous Ass
92、ignment is "shis", but must be net type</p><p> 原因:assign語句中=號左端的不能是reg類型,如果左端是端口的話,不要給它定義其他類型。</p><p> 11.Error: Net "gdfx_temp0", which fans out to "xianshi:inst2|cl
93、kout2", cannot be assigned more than one value</p><p> 原因:框圖中輸入端口只能有一條連線,一個輸入端口或一個其他端口與其相連。</p><p> 12.Error: Width mismatch in wei[1..0] -- source is ""wei[2..0]" (ID xian
94、shi:inst2)"</p><p> 原因:輸出端口的位數(shù)和與其相連的端口不一致,最好將其改為一樣的名字。</p><p> 13.Error: Illegal name "s2" -- pin name already exists</p><p> 原因:s2端口已經(jīng)定義過,是s[2:0]就包含s0,s1,s2三個端口,如
95、果其他端口名字再命名為這三個名的話,就會出錯。</p><p> ?。ㄈ﹙erilog HDL總結(jié)</p><p> 1.多練習(xí),多總結(jié)。 使用verilog編程,練習(xí)很重要。每當(dāng)你遇到一個錯誤,試著去解決它,并將其歸納為一類問題。</p><p> 2.編程時以簡單為最好。復(fù)雜的程序編起來很困難,運行也不容易,程序能編的簡單就不要編的太復(fù)雜。這次實習(xí)時就有好
96、多程序把時分秒分為十位和個位再進行操作,費時費力出錯還很難改。</p><p> 3.變量不要設(shè)的太難理解,不同的變量應(yīng)該有一個容易理解的名字,最好是通用的,能讓大部分人明白的。</p><p> 4.使用寄存器變量時要注意位數(shù),不設(shè)置位數(shù)時默認(rèn)1位。</p><p> 5.下載前可以先進行仿真。仿真有兩種方式,一是分別對每個模塊進行仿真,另一種是先把前幾部分
97、連起來一起進行仿真,仿真完再連一個模塊進行仿真。我覺得第二種方法更好??梢宰屇憧吹秸麄€程序的運行情況。</p><p> 6.嵌套if結(jié)構(gòu)時要先分清優(yōu)先級。很多錯誤都是邏輯錯誤導(dǎo)致的。</p><p><b> ?。ㄋ模┙ㄗh</b></p><p> 1.理論課。實習(xí)剛開始時很多人對verilog還很生疏,怎么建工程都不知道,基本上是問一步
98、做一步。如果上過理論課的話,至少大家都會知道怎么開始,怎么結(jié)束。老師也可以在理論課上講一下別人曾經(jīng)犯過的錯誤,我們就可以少走彎路。而且老師如果在大屏幕上講verilog的話,因為不會所以同學(xué)們一定會好好聽,課堂效果會非常好。</p><p> 2.關(guān)于設(shè)計文檔。做程序不應(yīng)該離開文檔,剛開始設(shè)計時要有一個框圖表示你要見幾個模塊,每個模塊要用幾個端口,每個端口的名字是什么,代表什么意思。然后就是設(shè)計模塊的時候要有一
99、個總的計劃,列出各個條件的優(yōu)先級,各個語句執(zhí)行的優(yōu)先級,要輸入哪些信號。設(shè)計完之后要把輸入信號跟輸出信號存入一個固定的文件夾,供以后再進行分析。</p><p> 3.下載器的管理。我下載的時候人很少,下載器幾個人用完全沒有問題。最后一天的時候下載器前就擠滿了人。有些人還是在電腦上邊改邊下,不對了再改,再下載。這樣效率很低。應(yīng)該找一個做完的人在一臺電腦上專門管理下載器,每個人下完回去改,改完再回來下載,效率可以
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計--多功能數(shù)字鐘電路設(shè)計
- 數(shù)字鐘課程設(shè)計--多功能數(shù)字鐘的電路設(shè)計
- 課程設(shè)計--多功能數(shù)字鐘電路設(shè)計
- 數(shù)電課程設(shè)計--多功能數(shù)字鐘電路設(shè)計
- 多功能數(shù)字鐘電路課程設(shè)計
- 數(shù)電課程設(shè)計報告--多功能數(shù)字鐘電路設(shè)計
- 數(shù)字鐘課程設(shè)計--直流穩(wěn)壓電源和多功能數(shù)字鐘電路設(shè)計
- 數(shù)字電路課程設(shè)計(多功能數(shù)字鐘)
- 數(shù)字電路課程設(shè)計(多功能數(shù)字鐘)
- 電子技術(shù)課程設(shè)計---多功能數(shù)字鐘電路設(shè)計
- 課程設(shè)計---數(shù)字鐘電路設(shè)計
- 多功能數(shù)字鐘課程設(shè)計
- 課程設(shè)計-- 多功能 數(shù)字鐘
- 畢業(yè)設(shè)計 多功能數(shù)字鐘電路設(shè)計
- 課程設(shè)計--多功能數(shù)字鐘設(shè)計
- 數(shù)電課程設(shè)計報告-多功能數(shù)字鐘電路設(shè)計與制作
- 畢業(yè)設(shè)計 多功能數(shù)字鐘電路設(shè)計 (2)
- 數(shù)字鐘課程設(shè)計---多功能數(shù)字鐘的設(shè)計與制作
- 課程設(shè)計---多功能電子數(shù)字鐘
- eda課程設(shè)計——多功能數(shù)字鐘
評論
0/150
提交評論