版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計任務(wù)書</b></p><p> 設(shè)計題目1:數(shù)碼管顯示數(shù)字鐘設(shè)計</p><p> 院(系)分管領(lǐng)導(dǎo): 教研室主任: 指導(dǎo)教師: </p><p> 2017年 6月 23日</p><p> 學(xué)生姓名</p><p&
2、gt; 課程名稱EDA技術(shù)課程設(shè)計專業(yè)班級</p><p> 地 點起止時間2017年6月19日— 6月23日</p><p> 設(shè)計內(nèi)容硬件設(shè)計及樣品制作</p><p> 設(shè)計參數(shù)1、具有時、分、秒,計數(shù)顯示功能,以24小時循環(huán)計時;2、具有清零,調(diào)節(jié)小時、分鐘功能;3、具有整點報時功能,整點報時的同時LED花樣顯示。</p><p&g
3、t; 設(shè)計進(jìn)度2017年6月19日—20日 查閱資料,確定設(shè)計方案2017年6月21日—22日 程序設(shè)計和硬件調(diào)試2017年6月23日 撰寫課程設(shè)計報告,答辯</p><p> 設(shè)計成果設(shè)計說明書一份(不少于2000字);樣品一套。</p><p> 參考資料周潤景等,基于Quartus II的FPGA/CPLD數(shù)字系統(tǒng)設(shè)計實例,電子工業(yè)出版社,2010夏宇聞,Verilog數(shù)字系統(tǒng)設(shè)計
4、教程(第二版),北京航空航天大學(xué)出版社,2014</p><p> 說明1.本表應(yīng)在每次實施前由指導(dǎo)教師填寫一式2份,審批后所在系(部)和指導(dǎo)教師各留1份。2.多名學(xué)生共用一題的,在設(shè)計內(nèi)容、參數(shù)、要求等方面應(yīng)有所區(qū)別。3.若填寫內(nèi)容較多可另紙附后。</p><p><b> 目 錄</b></p><p><b> 第1章
5、引言1</b></p><p> 第2章 電路原理2</p><p> 第3章 程序設(shè)計3</p><p> 3.1 頂層模塊設(shè)計3</p><p> 3.2 時鐘分頻模塊設(shè)計3</p><p> 3.3 按鍵驅(qū)動模塊設(shè)計4</p><p> 3.4 時鐘計數(shù)
6、模塊設(shè)計4</p><p> 3.5 整點報時模塊5</p><p> 3.6 LED燈花樣顯示模塊7</p><p> 3.7 數(shù)碼管顯示模塊設(shè)計7</p><p> 第4章 調(diào)試、測試分析及結(jié)果10</p><p><b> 4.1 調(diào)試10</b></p>
7、<p> 4.2 測試分析10</p><p><b> 4.3 結(jié)果12</b></p><p><b> 第5章 小結(jié)13</b></p><p><b> 參考文獻(xiàn)14</b></p><p> 附錄 電路圖及程序15</p>
8、<p><b> 引言</b></p><p> EDA是電子設(shè)計自動化(Electronic Design Automation)的縮寫,在20世紀(jì)60年代中期從計算機(jī)輔助設(shè)計(CAD)、計算機(jī)輔助制造(CAM)、計算機(jī)輔助測試(CAT)和計算機(jī)輔助工程(CAE)的概念發(fā)展而來的。</p><p> EDA技術(shù)就是以計算機(jī)為工具,設(shè)計者在EDA軟件
9、平臺上,用硬件描述語言VHDL或者Verilog HDL完成設(shè)計文件,然后由計算機(jī)自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術(shù)的出現(xiàn),極大地提高了電路設(shè)計的效率和可操作性,減輕了設(shè)計者的勞動強(qiáng)度。</p><p> Verilog HDL是一種硬件描述語言,以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖
10、、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。</p><p> 此次課程設(shè)計我們運用QuartusⅡ這個軟件,使用Verilog HDL語言進(jìn)行編程。</p><p> 數(shù)字鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的鐘表。與機(jī)械鐘相比具有更高的準(zhǔn)確性和直觀性,具有更長的使用壽命,已得到廣泛的使用。數(shù)字鐘的設(shè)計方法有許多種,例如可用中小規(guī)模集成電路組成電子鐘,也可以利用專用的電
11、子鐘芯片配以顯示電路及其所需要的外圍電路組成電子鐘,還可以利用單片機(jī)來實現(xiàn)電子鐘等等。這些方法都各有其特點,其中利用單片機(jī)實現(xiàn)的電子鐘具有編程靈活,以便于功能的擴(kuò)展。</p><p> 本次課程設(shè)計要求利用EDA技術(shù),設(shè)計一個數(shù)碼管顯示數(shù)字鐘的樣品,數(shù)字鐘要求具備以下功能:</p><p> 1、具有時、分、秒,計數(shù)顯示功能,以24小時循環(huán)計時;</p><p>
12、; 2、具有清零,調(diào)節(jié)小時、分鐘功能;</p><p> 3、具有整點報時功能,整點報時的同時LED花樣顯示。</p><p><b> 電路原理</b></p><p> 數(shù)碼管顯示數(shù)字鐘設(shè)計,運用到8位數(shù)碼管,要求其中6位數(shù)碼管動態(tài)顯示,分別顯示時、分、秒的計數(shù),同時對時間進(jìn)行設(shè)置,數(shù)字鐘的總體功能按照要求可以分為基本的數(shù)字時鐘顯示
13、(具有時、分、秒,計數(shù)顯示功能,以24小時循環(huán)計時)、手動校準(zhǔn)(具有清零,調(diào)節(jié)小時、分鐘功能)、整點報時、LED燈花樣顯示四大部分。其總體功能設(shè)計框圖如圖2.1所示:</p><p><b> 程序設(shè)計</b></p><p> 其中,“時鐘分頻模塊”用于對芯片晶振提供的時鐘信號進(jìn)行分頻,然后給其他模塊分配需要的時鐘頻率。按鍵輸入的信號經(jīng)過按鍵去抖后傳送給“時鐘計
14、數(shù)模塊”。正常計數(shù)時,“時鐘計數(shù)模塊”將處理好的時、分、秒數(shù)據(jù)實時傳送給“數(shù)碼管顯示模塊”,當(dāng)有來自“按鍵驅(qū)動模塊”的信號時,改變相應(yīng)的時、分、秒計數(shù)器中的值,實現(xiàn)調(diào)整時間的作用?!皵?shù)碼管顯示模塊”實時將“時鐘計數(shù)模塊”的數(shù)據(jù)轉(zhuǎn)換成數(shù)碼管動態(tài)顯示信號進(jìn)行顯示。最后,加上一個“整點報時”模塊和“LED燈花樣顯示模塊”經(jīng)過時鐘分頻信號,傳遞給“數(shù)碼管顯示模塊”,實現(xiàn)所需功能。數(shù)字鐘設(shè)計原理如圖3.1所示:</p><p&
15、gt;<b> 頂層模塊設(shè)計</b></p><p> 頂層模塊設(shè)計如附錄圖3所示,其RTL電路圖如附錄圖4所示。</p><p> 頂層模塊包含四個輸入:系統(tǒng)時鐘輸入“clk”,秒設(shè)置信號“sset”,分鐘設(shè)置信號“mmset”,小時設(shè)置信號“hset”。一個8位的段選數(shù)碼管顯示值輸出“seg”,一個8位的片選數(shù)碼管顯示哪一個數(shù)碼管輸出“dig”,將輸出給數(shù)碼
16、管進(jìn)行動態(tài)顯示?!皶r鐘分頻模塊”電路符號名為“int _ div”,“按鍵驅(qū)動模塊”電路符號名慰“an _ jian”,“時鐘計數(shù)模塊”內(nèi)部采用三格計數(shù)器級聯(lián)的方式分別驅(qū)動時、分、秒計數(shù),秒計數(shù)器和分計數(shù)器均為60進(jìn)制計數(shù)器,小時計數(shù)器為24進(jìn)制計數(shù)器,電路符號名分別為兩個“ji _ shu _ 60”和一個“ji _ shu _ 24”。</p><p><b> 時鐘分頻模塊設(shè)計</b>
17、;</p><p> “時鐘分頻模塊”直接使用老師上課所給的分頻程序,加入兩個分頻模塊,與“時鐘計數(shù)模塊”和“按鍵驅(qū)動模塊”進(jìn)行連接。</p><p><b> 按鍵驅(qū)動模塊設(shè)計</b></p><p> 按鍵驅(qū)動模塊使用原理圖方法設(shè)計,采用在按鍵信號傳輸過程中串聯(lián)觸發(fā)器實現(xiàn)按鍵去抖,保證觸發(fā)器兩次觸發(fā)的間隔遠(yuǎn)大于按鍵抖動的時間,而遠(yuǎn)小于
18、人動作反應(yīng)的時間。另外因為實例用獨立按鍵按下后是低電平,所以在觸發(fā)器后面串聯(lián)一個非門,使其變?yōu)楦唠娖接行А8戒泩D1所示為按鍵驅(qū)動模塊原理圖,圖3.2所示為按鍵驅(qū)動模塊封裝而成的電路元件。該模塊包括四個輸入,時鐘信號clk,秒設(shè)置輸入s _ in,分鐘設(shè)置輸入m _ in,小時設(shè)置輸入h _ in;三個輸出,秒設(shè)置輸出s _ out,分鐘設(shè)置輸出m _ out,小時設(shè)置輸出h _ out。</p><p> 從該
19、模塊的原理圖可以看出,時、分、秒三個按鍵的去抖原理完全一樣,這里提取小時輸入和輸出進(jìn)行仿真驗證,得到的結(jié)果如圖4.1所示,每一個時鐘上升沿h _ out的值都保持和h _ in的值相反,該設(shè)計能夠達(dá)到預(yù)期設(shè)計要求。</p><p><b> 時鐘計數(shù)模塊設(shè)計</b></p><p> 如附錄圖2所示?!皶r鐘計數(shù)模塊”內(nèi)部采用三個計數(shù)器級聯(lián)的方式分別驅(qū)動時、分、秒計
20、數(shù),秒計數(shù)器和分鐘計數(shù)器均為60進(jìn)制計數(shù)器,小時計數(shù)器為24進(jìn)制計數(shù)器,為方便驅(qū)動數(shù)碼管,三個計數(shù)器的輸出均為兩位的十進(jìn)制數(shù)據(jù)。秒調(diào)整信號通過一個或門和秒進(jìn)位信號一起驅(qū)動分鐘計數(shù)器;小時調(diào)整和分鐘調(diào)整同理。</p><p> 60進(jìn)制計數(shù)器主要Verilog HDL代碼如下:</p><p><b> begin </b></p><p>
21、 if(!rst) //0</p><p><b> begin </b></p><p> q1<=0; q2<=0; </p><p><b> end </b></p><p><b> else</b></
22、p><p> begin q1[3:0]=q1[3:0]+1; co<=0;</p><p> if(q1[3:0]>9) begin q1[3:0]=0;</p><p> q2[3:0]=q2[3:0]+1;</p><p> if(q2[3:0]>5) begin q2[3:0]=0; co&
23、lt;=1;end</p><p><b> end</b></p><p> else q1=q1; </p><p> end </p><p><b> end</b></p><p> 24進(jìn)制計數(shù)器主要Ve
24、rilog HDL代碼如下:</p><p><b> begin </b></p><p><b> co=0;</b></p><p> q1[3:0]=q1[3:0]+1;</p><p> if(q1[3:0]>9) begin q1[3:0]=0; q2[3:0]=q
25、2[3:0]+1; end </p><p> if(q1==4)if(q2==2) begin q1=0;q2=0; end </p><p><b> end</b></p><p> 如圖4.2所示該模塊中60進(jìn)制模塊與24進(jìn)制模塊的仿真波形,60進(jìn)制模塊設(shè)置qs0、qs1分別為個位、
26、十位,個位計數(shù)到9之后清零,十位計數(shù)到5之后清零,24進(jìn)制模塊設(shè)置qh0、qh1分別為個位、十位,個位計數(shù)到9之后清零,十位計數(shù)到2之后清零。</p><p><b> 整點報時模塊</b></p><p> 整點報時模塊的設(shè)計思路是當(dāng)數(shù)字鐘計數(shù)到一個整點時間時,蜂鳴器開始響鳴。蜂鳴器的封裝設(shè)計如圖3.3所示,程序設(shè)計為一段樂譜,主要Verilog HDL代碼如下
27、:</p><p> always @(posedge clk_4Hz) </p><p><b> begin</b></p><p><b> case(j)</b></p><p> 'd1:origin='d4916; //low</p>
28、<p> 'd2:origin='d6168;</p><p> 'd3:origin='d7281;</p><p> 'd4:origin='d7791;</p><p> 'd5:origin='d8730;</p><p> 'd6:origi
29、n='d9565;</p><p> 'd7:origin='d10310;</p><p> 'd8:origin='d010647; //middle</p><p> 'd9:origin='d011272;</p><p> 'd10:origin='d
30、011831;</p><p> 'd11:origin='d012087;</p><p> 'd12:origin='d012556;</p><p> 'd13:origin='d012974;</p><p> 'd14:origin='d013346;</
31、p><p> 'd15:origin='d13516; //high</p><p> 'd16:origin='d13829;</p><p> 'd17:origin='d14108;</p><p> 'd18:origin='d11535;</p>&
32、lt;p> 'd19:origin='d14470;</p><p> 'd20:origin='d14678;</p><p> 'd21:origin='d14864;</p><p> default:origin='d011111;</p><p> endcas
33、e </p><p><b> end</b></p><p> always @(posedge clk_4Hz) //樂譜</p><p><b> begin</b></p><p> if(len==63)</p><p><b
34、> len=0;</b></p><p><b> else</b></p><p> len=len+1;</p><p><b> case(len)</b></p><p> 0:j=3;1:j=3;2:j=3;3:j=3;4:j=5;5:j=5;6:j=5;7:j
35、=6;8:j=8;9:j=8;10:j=8;11:j=6;12:j=6;13:j=6;14:j=6;15:j=12;16:j=12;17:j=12;18:j=15;19:j=15;20:j=15;21:j=15;22:j=15;23:j=9;24:j=9;25:j=9;26:j=927:j=9;28:j=9;29:j=9;30:j=9;31:j=9;32:j=9;33:j=9;34:j=10;35:j=7;36:j=7;37:j=6;3
36、8:j=6;39:j=5;40:j=5;41:j=5;42:j=6;43:j=8;44:j=8;45:j=9;46:j=9;47:j=3;48:j=3;49:j=8;50:j=8;51:j=8;52:j=5;53:j=5;54:j=8;55:j=5;56:j=5;57:j=5;58:j=5;59:j=5;60:j=5;61:j=5;62:j=5;63:j=5;</p><p> endcase
37、 </p><p><b> end</b></p><p> LED燈花樣顯示模塊</p><p> LED燈花樣顯示模塊是與整點報時模塊同時工作,當(dāng)蜂鳴器響鳴時LED燈閃爍。該模塊設(shè)計思路較為簡單,只需在時分秒的時鐘輸出端接入一個以低電平驅(qū)動的LED鄧即可實現(xiàn)。</p><p><b>
38、 數(shù)碼管顯示模塊設(shè)計</b></p><p> 數(shù)碼管動態(tài)顯示的原理是利用人眼的視覺停留,依次點亮每個數(shù)碼管的位選信號,當(dāng)?shù)谝粋€數(shù)碼管被點亮?xí)r,將段選信號變?yōu)榈谝粋€數(shù)碼管要顯示的信息,當(dāng)?shù)诙€數(shù)碼管被點亮?xí)r,將段選信號變?yōu)榈诙€數(shù)碼管要顯示的信息,以此類推,循環(huán)掃描。當(dāng)循環(huán)掃描一次所有數(shù)碼管所用的時間在人眼能反應(yīng)出圖像變化的時間(約為0.02秒)之內(nèi)時,人自然就會在視覺上看到完整的圖像,而不會感到閃
39、爍。</p><p> “數(shù)碼管顯示模塊”的作用就是將6位10進(jìn)制的時間數(shù)據(jù)BCD碼轉(zhuǎn)化成供數(shù)碼管動態(tài)顯示的位選和段選數(shù)據(jù)。該模塊在Verilog HDL語言描述下的主要段落如下:</p><p> always @(posedge clk_1k) </p><p><b> begin</b></p>&l
40、t;p> case(count) //選擇掃描顯示數(shù)據(jù)</p><p> 3'd0:disp_dat = d0;//第一個數(shù)碼管</p><p> 3'd1:disp_dat = d1;//第二個數(shù)碼管</p><p> 3'd2:disp_dat = 4'hf;//第三個數(shù)碼管</p
41、><p> 3'd3:disp_dat = d2;//第四個數(shù)碼管</p><p> 3'd4:disp_dat = d3;//第五個數(shù)碼管</p><p> 3'd5:disp_dat = 4'hf;//第六個數(shù)碼管</p><p> 3'd6:disp_dat = d4;//d[7:
42、4];//第七個數(shù)碼管</p><p> 3'd7:disp_dat = d5;//d[3:0];//第八個數(shù)碼管</p><p><b> endcase</b></p><p> case(count)//選擇數(shù)碼管顯示位</p><p> 3'd0:dig_r =
43、8'b01111111;//選擇第一個數(shù)碼管顯示</p><p> 3'd1:dig_r = 8'b10111111;//選擇第二個數(shù)碼管顯示</p><p> 3'd2:dig_r = 8'b11011111;//選擇第三個數(shù)碼管顯示</p><p> 3'd3:dig_r = 8'b111
44、01111;//選擇第四個數(shù)碼管顯示</p><p> 3'd4:dig_r = 8'b11110111;//選擇第五個數(shù)碼管顯示</p><p> 3'd5:dig_r = 8'b11111011;//選擇第六個數(shù)碼管顯示</p><p> 3'd6:dig_r = 8'b11111101;//
45、選擇第七個數(shù)碼管顯示</p><p> 3'd7:dig_r = 8'b11111110;//選擇第八個數(shù)碼管顯示</p><p><b> endcase</b></p><p><b> end</b></p><p> 如圖3.4所示是“數(shù)碼管顯示模塊”的封裝圖,
46、輸入包括時鐘信號“clk”,復(fù)位信號“clr”;數(shù)碼管顯示數(shù)據(jù)BCD碼輸入,由低位到高位依次為“d0”、“d1”、“d2”、“d3”、“d4”、“d5”。輸出包括:一個8位的段選數(shù)碼管顯示值輸出“seg”,一個8位的片選數(shù)碼管顯示哪一個數(shù)碼管輸出“dig”。 </p><p> 調(diào)試、測試分析及結(jié)果</p><p><b> 調(diào)試</b></p>
47、<p> 調(diào)試使用的是睿智FPGA開發(fā)板,開發(fā)板采用核心板與接口板分離的方式,核心板上除FPGA,各類存儲器以及用戶擴(kuò)展PACK外,還有按鍵、LED及電源插座等。因為有用戶擴(kuò)展PACK,核心板完全可以脫離接口板而單獨使用,通過PACK,用于自己的設(shè)計或電子設(shè)計大賽,擴(kuò)展性很好。接口板上集成了最常用和最經(jīng)典外圍接口,所有的外設(shè)經(jīng)過精心分配及設(shè)計,不需要進(jìn)行任何跳線設(shè)置,實驗時非常方便!總之,睿智開發(fā)板是完全站在用戶的角度精心
48、設(shè)計開發(fā),簡約不簡單!同時,睿智FPGA開發(fā)板的配套光盤提供相當(dāng)豐富的實驗代碼及各種參考文獻(xiàn)。</p><p><b> 測試分析</b></p><p> 按鍵驅(qū)動模塊波形仿真分析:</p><p> 時、分、秒三個按鍵的去抖原理完全一樣,這里提取小時輸入和輸出進(jìn)行波形仿真驗證,每一個時鐘上升沿h _ out的值都保持和h _ in的值
49、相反,該設(shè)計能夠達(dá)到預(yù)期設(shè)計要求。按鍵所綁的開關(guān)在開發(fā)板上是S1、S2、S3,分別控制小時進(jìn)位、分鐘進(jìn)位、秒清零。</p><p> 60進(jìn)制和24進(jìn)制模塊(時、分、秒模塊)波形仿真分析:</p><p> 這里提取60進(jìn)制模塊與24進(jìn)制模塊的仿真波形,60進(jìn)制模塊設(shè)置qs0、qs1分別為個位、十位,個位計數(shù)到9之后清零,十位計數(shù)到5之后清零,24進(jìn)制模塊設(shè)置qh0、qh1分別為個位、
50、十位,個位計數(shù)到9之后清零,十位計數(shù)到2之后清零。該設(shè)計能夠達(dá)到預(yù)期設(shè)計效果。</p><p><b> 結(jié)果</b></p><p><b> 小結(jié)</b></p><p> 在此次課程設(shè)計中,遇到的問題主要有以下幾個方面:</p><p> ?。?)由于Verilog HDL這門語言對自己
51、來說屬于一個從未接觸過的東西,所以學(xué)習(xí)起來比較困難。此次課程設(shè)計選擇的課題是數(shù)碼管顯示數(shù)字鐘,開始是資料的搜集與設(shè)計思路的理清,再有了一定的基礎(chǔ)之后,開始對整個大的模塊進(jìn)行分模塊分析設(shè)計。</p><p> ?。?)在實驗的過程中,遇到了許多的問題,首先發(fā)現(xiàn)自己對軟件的運用上存在的一些問題,如剛開始的時候沒有生成功能網(wǎng)表,導(dǎo)致最后運行出錯;還有沒有選功能仿真的時候,波形出現(xiàn)了一些毛刺和延時。</p>
52、<p> (3)設(shè)計60進(jìn)制計數(shù)器和24進(jìn)制計數(shù)器也發(fā)生了一些問題,原本的設(shè)計思路是將個位數(shù)字與十位數(shù)字分別拆開,用進(jìn)位信號控制輸出,但發(fā)現(xiàn)在連接蜂鳴器模塊時,進(jìn)位信號延時太短,導(dǎo)致秒計數(shù)器計數(shù)計到59以后分鐘計數(shù)器進(jìn)位但蜂鳴器和LED燈沒有反應(yīng),手動按鍵卻可以控制蜂鳴器報警和LED燈閃爍。</p><p> 實驗過程中,遇到的小問題不計其數(shù),在多方努力之下,問題基本解決,這里就不一一列舉??偨Y(jié)出
53、的寶貴經(jīng)驗就是要多看書,學(xué)會自己解決問題,一般的問題在看書找資料之后基本都能解決;還有就是一定要細(xì)心,這樣可以避免很多不必要的麻煩。</p><p> 對于這一個課程,我依然屬于半懂不懂的狀態(tài),在今后的學(xué)習(xí)中,對老師的建議就是可以在剛開始上課的時候就可以給同學(xué)布置一些小的作業(yè),然后可以讓同學(xué)慢慢接觸一下軟件,學(xué)一點淺顯的編程,這樣在最后寫大作業(yè)的時候就不會感覺無從下手,以便起到一個循序漸進(jìn)的作用。</p&
54、gt;<p><b> 參考文獻(xiàn)</b></p><p> 1、周潤景等,基于Quartus II的FPGA/CPLD數(shù)字系統(tǒng)設(shè)計實例,電子工業(yè)出版社,2010</p><p> 2、夏宇聞,Verilog數(shù)字系統(tǒng)設(shè)計教程(第二版),北京航空航天大學(xué)出版社,2014</p><p><b> 附錄 電路圖及程序&
55、lt;/b></p><p><b> 時鐘分頻模塊</b></p><p> module int_div(clock,clk_out);</p><p> inputclock;//輸入時鐘</p><p> outputclk_out;//輸出時鐘</p><
56、;p><b> //內(nèi)部寄存器</b></p><p> reg clk_p;//上升沿輸出時鐘</p><p> reg clk_n;//下降沿輸出時鐘</p><p> reg[F_WIDTH - 1:0] count_p;//上升沿脈沖計數(shù)器</p><p> reg[F_
57、WIDTH - 1:0] count_n;//下降沿脈沖計數(shù)器</p><p> //參數(shù)--分頻系數(shù)</p><p> parameter F_DIV = 48000000;//分頻系數(shù)<<<<-----修改這里</p><p> parameter F_WIDTH = 32; //分頻計數(shù)器寬度</p><
58、;p> wire full_p;//上升沿計數(shù)滿標(biāo)志</p><p> wire half_p;//上升沿計數(shù)半滿標(biāo)志</p><p> wire full_n;//下降沿計數(shù)滿標(biāo)志</p><p> wire half_n;//下降沿計數(shù)半滿標(biāo)志</p><p> //判斷計數(shù)標(biāo)志位置位與否&
59、lt;/p><p> assign full_p = (count_p < F_DIV - 1);</p><p> assign half_p = (count_p < (F_DIV>>1) - 1);</p><p> assign full_n = (count_n < F_DIV - 1);</p><p&
60、gt; assign half_n = (count_n < (F_DIV>>1) - 1);</p><p><b> //時鐘輸出</b></p><p> assignclk_out = (F_DIV == 1) ? </p><p> clock : (F_DIV[0] ? (clk_p & clk_
61、n) : clk_p);</p><p><b> //上升沿脈沖計數(shù)</b></p><p> always @(posedge clock)</p><p><b> begin</b></p><p> if(full_p)</p><p><b>
62、 begin</b></p><p> count_p <= count_p + 1'b1;</p><p> if(half_p)</p><p> clk_p <= 1'b0;</p><p><b> else</b></p><p> cl
63、k_p <= 1'b1;</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> count_p <= 0;</p><p> c
64、lk_p <= 1'b0;</p><p><b> end</b></p><p><b> end</b></p><p><b> //下降沿脈沖計數(shù)</b></p><p> always @(negedge clock)</p>&
65、lt;p><b> begin</b></p><p> if(full_n)</p><p><b> begin</b></p><p> count_n <= count_n + 1'b1;</p><p> if(half_n)</p><p
66、> clk_n<= 1'b0;</p><p><b> else</b></p><p> clk_n <= 1'b1;</p><p><b> end</b></p><p><b> else</b></p>&
67、lt;p><b> begin</b></p><p> count_n <= 0;</p><p> clk_n<= 1'b0;</p><p><b> end</b></p><p><b> end</b></p>&l
68、t;p><b> endmodule</b></p><p><b> 按鍵驅(qū)動模塊</b></p><p> 附錄圖1 按鍵驅(qū)動模塊原理圖</p><p><b> 時鐘計數(shù)模塊</b></p><p> 60進(jìn)制計數(shù)器模塊(控制分鐘、秒)</p>
69、<p> module ji_shu_60(clk,q1,q2,co,rst);</p><p> output [3:0]q1,q2;</p><p> output co;</p><p> input clk,rst;</p><p> reg [3:0]q1=0,q2=0;</p><p&g
70、t;<b> reg co;</b></p><p> always @(posedge clk or negedge rst )</p><p><b> begin </b></p><p> if(!rst) //0</p><p><b> begin </b
71、></p><p> q1<=0; q2<=0; </p><p><b> end </b></p><p><b> else</b></p><p> begin q1[3:0]=q1
72、[3:0]+1; co<=0;</p><p> if(q1[3:0]>9) begin q1[3:0]=0;</p><p> q2[3:0]=q2[3:0]+1;</p><p> if(q2[3:0]>5) begin q2[3:0]=0; co<=1;end</p><p><b>
73、; end</b></p><p> else q1=q1; </p><p> end </p><p><b> end</b></p><p> //assign co=(({q2,q1}==8'b01011001) ? 1:0);&
74、lt;/p><p> endmodule </p><p> 24進(jìn)制計數(shù)器模塊(控制小時)</p><p> module ji_shu_24(clk,q1,q2);</p><p> output [3:0]q1,q2;input clk;</p><p> reg [3:0]q1=0,q2=0;reg
75、 co;</p><p> always @(posedge clk )</p><p><b> begin </b></p><p> co=0;q1[3:0]=q1[3:0]+1;</p><p> if(q1[3:0]>9) </p><p> begin q1[3:0]
76、=0;q2[3:0]=q2[3:0]+1; end </p><p> if(q1==4)if(q2==2) </p><p> begin q1=0;q2=0; end</p><p><b> end</b></p><p> endmodule </p><p><b&
77、gt; 整點報時模塊</b></p><p> module buffer_music ( audio , sys_CLK ,button);</p><p> output audio; input sys_CLK; input button;</p><p> reg [23:0] counter4Hz,counter1MHz
78、,counter6MHz;</p><p> reg [13:0] count,origin;</p><p> reg audiof;</p><p> reg clk_6MHz,clk_4Hz;</p><p> reg clk_1MHz;</p><p> reg [4:0] j;&l
79、t;/p><p> reg [7:0] len;</p><p> //assign audio=audiof ; //控制開關(guān)</p><p> assign audio= button? audiof : 1'b1 ;//控制開關(guān)</p><p> always @(posedge sys_CLK)
80、 //6MHz分頻 開發(fā)板晶振為50MHz </p><p><b> begin</b></p><p> if(counter6MHz==4)</p><p><b> begin</b></p><p> counter6MHz=0;</p><p>
81、 clk_6MHz=~clk_6MHz;</p><p><b> end</b></p><p><b> else</b></p><p><b> begin</b></p><p> counter6MHz=counter6MHz+1;</p>&
82、lt;p><b> // end</b></p><p><b> end</b></p><p><b> end</b></p><p><b> // </b></p><p> always @(posedge sys_CLK)
83、 //4Hz分頻 </p><p><b> begin</b></p><p> // if(counter4Hz==2500000) </p><p> if(counter4Hz==6250000) //50M/4/2</p><p><b>
84、; begin</b></p><p> counter4Hz=0;</p><p> clk_4Hz=~clk_4Hz;</p><p><b> end</b></p><p><b> else</b></p><p><b> beg
85、in</b></p><p> counter4Hz=counter4Hz+1;</p><p><b> end</b></p><p><b> end</b></p><p> always @(posedge clk_6MHz)</p><p>&
86、lt;b> begin</b></p><p> if(count==16383) </p><p><b> begin</b></p><p> count=origin;</p><p> audiof=~audiof;</p><p><b>
87、 end</b></p><p><b> else</b></p><p> count=count+1;</p><p><b> end</b></p><p> always @(posedge clk_4Hz) </p><p>&l
88、t;b> begin</b></p><p><b> case(j)</b></p><p> 'd1:origin='d4916; //low</p><p> 'd2:origin='d6168;</p><p> 'd3:origin='
89、;d7281;</p><p> 'd4:origin='d7791;</p><p> 'd5:origin='d8730;</p><p> 'd6:origin='d9565;</p><p> 'd7:origin='d10310;</p><
90、p> 'd8:origin='d010647; //middle</p><p> 'd9:origin='d011272;</p><p> 'd10:origin='d011831;</p><p> 'd11:origin='d012087;</p><p>
91、; 'd12:origin='d012556;</p><p> 'd13:origin='d012974;</p><p> 'd14:origin='d013346;</p><p> 'd15:origin='d13516; //high</p><p>
92、39;d16:origin='d13829;</p><p> 'd17:origin='d14108;</p><p> 'd18:origin='d11535;</p><p> 'd19:origin='d14470;</p><p> 'd20:origin=
93、39;d14678;</p><p> 'd21:origin='d14864;</p><p> default:origin='d011111;</p><p> endcase </p><p><b> end</b></p><p>
94、; always @(posedge clk_4Hz) //樂譜</p><p><b> begin</b></p><p> if(len==63)</p><p><b> len=0;</b></p><p><b> else</b></p>
95、<p> len=len+1;</p><p><b> case(len)</b></p><p> 0:j=3;1:j=3;2:j=3;3:j=3;4:j=5;5:j=5;6:j=5;7:j=6;8:j=8;9:j=8;10:j=8;11:j=6;12:j=6;13:j=6;14:j=6;15:j=12;16:j=12;17:j=12;18:j=
96、15;19:j=15;20:j=15;21:j=15;22:j=15;23:j=9;24:j=9;25:j=9;26:j=927:j=9;28:j=9;29:j=9;30:j=9;31:j=9;32:j=9;33:j=9;34:j=10;35:j=7;36:j=7;37:j=6;38:j=6;39:j=5;40:j=5;41:j=5;42:j=6;43:j=8;44:j=8;45:j=9;46:j=9;47:j=3;48:j=3;49:
97、j=8;50:j=8;51:j=8;52:j=5;53:j=5;54:j=8;55:j=5;56:j=5;57:j=5;58:j=5;59:j=5;60:j=5;61:j=5;62:j=5;63:j=5;</p><p> endcase </p><p><b> end</b></p><p><b>
98、 endmodule</b></p><p><b> 數(shù)碼管顯示模塊</b></p><p> module scan_led(clk_1k,d0,d1,d2,d3,d4,d5,dig,seg); //模塊名scan_led</p><p> input clk_1k; //輸入時鐘</p>
99、<p> input[3:0] d0,d1,d2,d3,d4,d5;//輸入要顯示的數(shù)據(jù)</p><p> output[7:0]dig; //數(shù)碼管選擇輸出引腳</p><p> output[7:0] seg; //數(shù)碼管段輸出引腳</p><p> reg[7:0] seg_r;/
100、/定義數(shù)碼管輸出寄存器</p><p> reg[7:0] dig_r;//定義數(shù)碼管選擇輸出寄存器</p><p> reg[3:0] disp_dat;//定義顯示數(shù)據(jù)寄存器</p><p> reg[2:0]count; //定義計數(shù)寄存器</p><p> assign dig =
101、dig_r;//輸出數(shù)碼管選擇</p><p> assign seg = seg_r;//輸出數(shù)碼管譯碼結(jié)果</p><p> always @(posedge clk_1k) //定義上升沿觸發(fā)進(jìn)程</p><p><b> begin</b></p><p> count
102、 <= count + 1'b1;</p><p><b> end</b></p><p> always @(posedge clk_1k) </p><p><b> begin</b></p><p> case(count) //選擇
103、掃描顯示數(shù)據(jù)</p><p> 3'd0:disp_dat = d0;//第一個數(shù)碼管</p><p> 3'd1:disp_dat = d1;//第二個數(shù)碼管</p><p> 3'd2:disp_dat = 4'hf;//第三個數(shù)碼管</p><p> 3'd3:disp_dat
104、 = d2;//第四個數(shù)碼管</p><p> 3'd4:disp_dat = d3;//第五個數(shù)碼管</p><p> 3'd5:disp_dat = 4'hf;//第六個數(shù)碼管</p><p> 3'd6:disp_dat = d4;//d[7:4];//第七個數(shù)碼管</p><p>
105、; 3'd7:disp_dat = d5;//d[3:0];//第八個數(shù)碼管</p><p><b> endcase</b></p><p> case(count)//選擇數(shù)碼管顯示位</p><p> 3'd0:dig_r = 8'b01111111;//選擇第一個數(shù)碼管顯示<
106、/p><p> 3'd1:dig_r = 8'b10111111;//選擇第二個數(shù)碼管顯示</p><p> 3'd2:dig_r = 8'b11011111;//選擇第三個數(shù)碼管顯示</p><p> 3'd3:dig_r = 8'b11101111;//選擇第四個數(shù)碼管顯示</p>&l
107、t;p> 3'd4:dig_r = 8'b11110111;//選擇第五個數(shù)碼管顯示</p><p> 3'd5:dig_r = 8'b11111011;//選擇第六個數(shù)碼管顯示</p><p> 3'd6:dig_r = 8'b11111101;//選擇第七個數(shù)碼管顯示</p><p> 3
108、'd7:dig_r = 8'b11111110;//選擇第八個數(shù)碼管顯示</p><p><b> endcase</b></p><p><b> end</b></p><p> always @(disp_dat)</p><p><b> begin&
109、lt;/b></p><p> case(disp_dat)//七段譯碼</p><p> 4'h0:seg_r = 8'hc0;//顯示0</p><p> 4'h1:seg_r = 8'hf9;//顯示1</p><p> 4'h2:seg_r = 8
110、9;ha4;//顯示2</p><p> 4'h3:seg_r = 8'hb0;//顯示3</p><p> 4'h4:seg_r = 8'h99;//顯示4</p><p> 4'h5:seg_r = 8'h92;//顯示5</p><p> 4'
111、;h6:seg_r = 8'h82;//顯示6</p><p> 4'h7:seg_r = 8'hf8;//顯示7</p><p> 4'h8:seg_r = 8'h80;//顯示8</p><p> 4'h9:seg_r = 8'h90;//顯示9</p>
112、<p> 4'ha:seg_r = 8'h88;//顯示a</p><p> 4'hb:seg_r = 8'h83;//顯示b</p><p> 4'hc:seg_r = 8'hc6;//顯示c</p><p> 4'hd:seg_r = 8'ha1;/
113、/顯示d</p><p> 4'he:seg_r = 8'h86;//顯示e</p><p> 4'hf:seg_r = 8'hbf;//8'h8e;//顯示f</p><p><b> endcase</b></p><p><b> end<
溫馨提示
- 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ù)字鐘課程設(shè)計---led數(shù)碼顯示鐘的設(shè)計
- 適用多功能數(shù)字鐘(eda技術(shù)課程設(shè)計)
- eda數(shù)字鐘課程設(shè)計
- 數(shù)字鐘--eda課程設(shè)計
- eda數(shù)字鐘課程設(shè)計
- 數(shù)碼管顯示控制器 數(shù)字電子技術(shù)課程設(shè)計
- 單片機(jī)課程設(shè)計--用數(shù)碼管設(shè)計的可調(diào)式數(shù)字鐘
- eda課程設(shè)計報告---數(shù)字鐘設(shè)計
- 數(shù)字鐘eda課程設(shè)計報告
- eda課程設(shè)計報告--數(shù)字鐘
- 數(shù)碼管顯示課程設(shè)計報告
- plc數(shù)碼管顯示課程設(shè)計
- eda課程設(shè)計——多功能數(shù)字鐘
- 數(shù)字電子技術(shù)課程設(shè)計--數(shù)字鐘
- 電子技術(shù)課程設(shè)計 數(shù)字鐘設(shè)計
- 數(shù)碼管學(xué)號滾動顯示課程設(shè)計
- 課程設(shè)計---單只數(shù)碼管循環(huán)顯示設(shè)計
- 數(shù)字電子技術(shù)課程設(shè)計--數(shù)字鐘設(shè)計報告
- eda課程設(shè)計---基于fpga的數(shù)字鐘設(shè)計
- eda課程數(shù)字鐘設(shè)計報告
評論
0/150
提交評論