2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  本科畢業(yè)設(shè)計(jì)(論文)</p><p>  Southwest Petroleum University </p><p>  Graduation Thesis</p><p>  Design a LED Chinese Character Rolling</p><p>  Display with VHDL<

2、/p><p>  Grade: 2004</p><p>  Name: Ren Xuebin</p><p>  Specialty: Telecommunications Engineering</p><p>  Instructor: Wang Zhangrui </p><p>  School of El

3、ectronic and Information Engineering</p><p><b>  2008-6</b></p><p><b>  摘 要</b></p><p>  本文對(duì)基于FPGA控制的LED漢字滾動(dòng)顯示器的設(shè)計(jì)方法進(jìn)行了探討。提出了兩個(gè)實(shí)現(xiàn)方案。并對(duì)其中一個(gè)方案作了詳細(xì)說(shuō)明。文中首先介紹了LE

4、D發(fā)光二極管點(diǎn)陣的控制原理;然后研究了在LED發(fā)光二極管點(diǎn)陣上滾動(dòng)顯示漢字的方法;最后,用VHDL語(yǔ)言程序設(shè)計(jì)了一個(gè)完整的LED漢字滾動(dòng)顯示器。</p><p>  本系統(tǒng)由掃描控制模塊、只讀存儲(chǔ)器ROM和FPGA外面的LED點(diǎn)陣顯示模塊、一個(gè)反相器和兩個(gè)4-16譯碼器構(gòu)成。其中:掃描控制模塊和只讀存儲(chǔ)器ROM集成在FPGA芯片內(nèi)部。兩個(gè)4-16譯碼器(74LS154)和一個(gè)反相器配合FPGA中的列掃描控制模塊共

5、同完成了兩塊16×16點(diǎn)陣顯示模塊的32列的掃描控制。FPGA定義的只讀存儲(chǔ)器ROM中保存了要顯示的漢字的數(shù)據(jù),并以16位的數(shù)據(jù)寬度輸出到LED陣顯示模塊的行端,配合列掃描控制共同完成漢字的滾動(dòng)顯示。</p><p>  本系統(tǒng)利用數(shù)字系統(tǒng)設(shè)計(jì)自動(dòng)化(EDA)技術(shù)實(shí)現(xiàn)了全硬件方式的LED點(diǎn)陣顯示。利用FPGA內(nèi)部的物理資源,將只讀存儲(chǔ)器ROM和主要功能模塊設(shè)計(jì)在FPGA內(nèi)部。充分顯示了EDA技術(shù)設(shè)計(jì)的靈

6、活性,同時(shí)也大大提高了系統(tǒng)的集成度和穩(wěn)定性。</p><p>  關(guān)鍵詞:FPGA; LED; EDA;動(dòng)態(tài)掃描</p><p><b>  Abstract</b></p><p>  This article discusses the designing method of FPGA controlled LED Chinese char

7、acter rolling display. This article also proposes two feasible plans and gives a detailed explanation to one of the plans. The article firstly introduces the LED control principle. Then the article studies rolled the dem

8、onstration Chinese character method on the LED light emitter diode lattice. Finally, I design a complete LED Chinese character rolling display with VHDL language program.</p><p>  This system is composed of

9、a scanning control module, a ROM, an LED plot array module, an inverter and two decoders, with the scanning control module and the ROM installed inside the FPGA chip. The two decoders and the inverter work with the out-s

10、canning control module in the FPGA to exercise 32-array scanning control of the two 16×16 dot-matrix display module. The FPGA-defined ROM preserves the data of the Chinese characters that will be displayed, and it s

11、ends the data, by way of a 16-bit data</p><p>  This system has realized the entire hardware way LED lattice demonstration using the number system design automation (EDA) technology. Using FPGA internal phys

12、ics resources, non-erasable storage ROM and major function module design in FPGA. It had demonstrated fully the EDA technical design's flexibility, simultaneously also greatly enhanced system's integration rate a

13、nd the stability.</p><p>  Keywords: FPGA; LED; EDA; Dynamic scanning</p><p><b>  目 錄</b></p><p><b>  1 緒 論1</b></p><p>  1.1 本設(shè)計(jì)的研究背景和研究目的1&l

14、t;/p><p>  1.2 研究?jī)?nèi)容及方法2</p><p>  1.3 設(shè)計(jì)的主要工作2</p><p><b>  2 設(shè)計(jì)方案3</b></p><p><b>  2.1 方案一3</b></p><p><b>  2.2 方案二3</b&g

15、t;</p><p>  2.3 方案比較4</p><p>  3 掃描控制模塊5</p><p>  3.1 LED點(diǎn)陣原理5</p><p>  3.2 漢字的存儲(chǔ)6</p><p>  3.3 漢字的顯示7</p><p>  3.4 滾動(dòng)速度的控制9</p>

16、<p>  3.5存儲(chǔ)模塊10</p><p>  3.5.1 使用參數(shù)化組件LPM_ROM來(lái)實(shí)現(xiàn)10</p><p>  3.5.2 用FPGA內(nèi)部的邏輯單元設(shè)計(jì)一個(gè)ROM12</p><p><b>  4 分頻電路13</b></p><p>  4.1 解決毛刺13</p>&l

17、t;p>  4.1.1 改變輸入信號(hào)消除毛刺13</p><p>  4.1.2 通過(guò)D觸發(fā)器消除毛刺14</p><p>  4.2 關(guān)鍵部分VHDL程序14</p><p>  5 按鍵掃描電路16</p><p>  5.1 直接式/矩陣式按鍵16</p><p>  5.2 鍵盤(pán)消抖電路18&

18、lt;/p><p>  5.2.1 比較法消鍵抖動(dòng)18</p><p>  5.2.2 積分法消鍵抖動(dòng)18</p><p>  6 FPGA的頂層設(shè)計(jì)19</p><p>  6.1 層次化設(shè)計(jì)的概念19</p><p>  6.1.1 模塊化19</p><p>  6.1.2 元件重用

19、19</p><p>  6.2 生成組件符號(hào)20</p><p>  6.3 調(diào)用組件符號(hào)20</p><p>  6.3.1 建立項(xiàng)目20</p><p>  6.3.2 定義輸入/輸出端口與聯(lián)線21</p><p><b>  7 結(jié)論23</b></p><

20、p><b>  7.1 總結(jié)23</b></p><p><b>  7.2 建議23</b></p><p><b>  謝 辭24</b></p><p><b>  參考文獻(xiàn)25</b></p><p>  附錄:系統(tǒng)各個(gè)模塊的VHDL

21、程序26</p><p><b>  1 緒 論</b></p><p>  1.1 本設(shè)計(jì)的研究背景和研究目的</p><p>  受到體育場(chǎng)館用LED顯示屏需求快速增長(zhǎng)的帶動(dòng),近年來(lái),中國(guó) LED顯示屏應(yīng)用逐步增多。目前,LED已經(jīng)廣泛應(yīng)用在銀行、火車站、廣告、體育場(chǎng)館之中。而隨著奧運(yùn)會(huì)、世博會(huì)的臨近,LED顯示屏將廣泛的應(yīng)用在體育場(chǎng)館以

22、及道路交通指示中,LED顯示屏在體育廣場(chǎng)中的應(yīng)用將出現(xiàn)快速增長(zhǎng)。</p><p>  2007年,中國(guó)LED顯示屏市場(chǎng)需求額為49.5億元,比2006年增長(zhǎng)22.2%,這其中全彩顯示屏需求額達(dá)到21.1億元,占整體市場(chǎng)的42.6%,雙色顯示屏的需求額位于第二位,需求額為18.3億元,占整體市場(chǎng)的40%,單色顯示屏需求額為10.1億元。</p><p>  2008年奧運(yùn)會(huì)的召開(kāi)將會(huì)直接推動(dòng)

23、體育場(chǎng)用屏幕數(shù)量的快速增加,同時(shí),由于奧運(yùn)會(huì)用屏對(duì)LED顯示屏的質(zhì)量要求也較高,因此,高端屏幕的使用比例也將會(huì)增加,數(shù)量和質(zhì)量的提高帶動(dòng)LED顯示屏市場(chǎng)的增長(zhǎng)。除了體育場(chǎng)館之外,奧運(yùn)會(huì)和世博會(huì)等重大活動(dòng)召開(kāi)的另一直接推動(dòng)領(lǐng)域就是廣告領(lǐng)域國(guó)內(nèi)外的廣告公司必然會(huì)看好奧運(yùn)會(huì)和世博會(huì)帶來(lái)的商機(jī),因此必然會(huì)增加廣告用屏的數(shù)量來(lái)提高自身收入,從而促進(jìn)了廣告用屏市場(chǎng)的發(fā)展。</p><p>  奧運(yùn)會(huì)和世博會(huì)等重大活動(dòng)的召開(kāi)必

24、然會(huì)伴隨著很多大型活動(dòng),政府、新聞媒體和各種組織都可能會(huì)在奧運(yùn)會(huì)和世博會(huì)之間舉辦各種相關(guān)活動(dòng),某些活動(dòng)可能需要大屏LED,這些需求直接帶動(dòng)顯示屏市場(chǎng)。</p><p>  目前,國(guó)內(nèi)從事LED顯示屏生產(chǎn)的企業(yè)眾多,同時(shí),受到外資企業(yè)LED顯示屏價(jià)格過(guò)高的影響,在中國(guó)LED顯示屏市場(chǎng)上多以本土企業(yè)為主。目前,本土LED顯示屏生產(chǎn)企業(yè)除供應(yīng)國(guó)內(nèi)需求外,還不斷把產(chǎn)品出口到國(guó)外市場(chǎng)。而近年來(lái),受到成本壓力的影響,國(guó)際上一

25、些知名的LED顯示屏企業(yè)也逐步把 生產(chǎn)基地移到了中國(guó),如巴可在北京設(shè)立了顯示屏生產(chǎn)基地,Lighthouse在惠州也擁有生產(chǎn)基地,Daktronics、萊茵堡都在國(guó)內(nèi)設(shè)立了生產(chǎn)工廠。隨著國(guó)際LED顯示屏生產(chǎn)大廠不斷把生產(chǎn)基地轉(zhuǎn)移至國(guó)內(nèi), 加之國(guó)內(nèi)眾多的LED顯示屏本土企業(yè),中國(guó)正在成為全球LED顯示屏的主要生產(chǎn)基地。</p><p>  因此研究研究LED漢字滾動(dòng)顯示屏的設(shè)計(jì)方法具有重要的理論和現(xiàn)實(shí)意義。<

26、/p><p>  1.2 研究?jī)?nèi)容及方法</p><p>  采用傳統(tǒng)方法設(shè)計(jì)的漢字滾動(dòng)顯示器,通常需要使用單片機(jī)、存儲(chǔ)器和制約邏輯電路來(lái)進(jìn)行PCB(印制電路板)板級(jí)的系統(tǒng)集成。盡管這種方案有單片機(jī)軟件的支持較為靈活,但是由于受硬件資源的限制,未來(lái)對(duì)設(shè)計(jì)的變更和升級(jí),總是難以避免要付出較多研發(fā)經(jīng)費(fèi)和較長(zhǎng)投放市場(chǎng)周期的代價(jià)。</p><p>  隨著電子設(shè)計(jì)自動(dòng)化(EDA

27、)技術(shù)的進(jìn)展,基于可編程ASIC器件的數(shù)字電子系統(tǒng)設(shè)計(jì)的完整方案越來(lái)越受到人們的重視,并且以EDA技術(shù)為核心、的能在可編程ASIC器件上進(jìn)行系統(tǒng)芯片集成的新設(shè)計(jì)方法,也正在快速地取代基于PCB板的傳統(tǒng)設(shè)計(jì)方式。</p><p>  如何使用EDA工具設(shè)計(jì)電子系統(tǒng)是人們普遍關(guān)心的問(wèn)題。在EDA工具軟件QuartusII的支持下,本設(shè)計(jì)通過(guò)了編譯、適配和軟件仿真驗(yàn)證。最后載入硬件系統(tǒng)證明了它的正確性。</p&g

28、t;<p>  1.3 設(shè)計(jì)的主要工作</p><p>  本設(shè)計(jì)需要利用EDA工具軟件QuartusII編寫(xiě)并調(diào)試系統(tǒng)的VHDL程序。并且每一個(gè)模塊都在這個(gè)軟件下進(jìn)行了仿真。系統(tǒng)的VHDL程序編好過(guò)后先在實(shí)驗(yàn)室的EDA實(shí)驗(yàn)箱上下載調(diào)試,成功過(guò)后再根據(jù)電路焊接相應(yīng)的電路板。最好將程序下載到制好的電路上驗(yàn)證。</p><p><b>  2 設(shè)計(jì)方案</b>

29、;</p><p><b>  2.1 方案一</b></p><p>  本文系統(tǒng)的LED點(diǎn)陣模塊,共由16×32=512個(gè)LED發(fā)光二極管組成。如何在該點(diǎn)陣模塊上顯示漢字是本文設(shè)計(jì)的關(guān)鍵技術(shù)。本文系統(tǒng)設(shè)計(jì)是采用一種32路動(dòng)態(tài)分時(shí)掃描技術(shù)來(lái)實(shí)現(xiàn)的。具體方法是,將8個(gè)8×8數(shù)組的顯示模塊組合成兩個(gè)16行16列的掃描結(jié)構(gòu)并將其串聯(lián)(如圖2.1所示)。

30、其行輸入端與FPGA內(nèi)的只讀存儲(chǔ)器ROM的16位數(shù)據(jù)輸出端口相連;32個(gè)列控制端與兩個(gè)4-16譯碼器A、B的輸出相連;而譯碼器A、B的輸入端和片選信號(hào)又與FPGA內(nèi)的列掃描控制模塊的輸出端口scan4-scan0相連。圖2.1為方案的結(jié)構(gòu)框圖。</p><p><b>  2.2 方案二</b></p><p>  VHDL程序設(shè)計(jì)的是硬件,他和編程語(yǔ)言的最大區(qū)別是它

31、可以“并發(fā)執(zhí)行”。本設(shè)計(jì)可以將LED顯示屏要的顯示內(nèi)容抽象成一個(gè)二維數(shù)組(數(shù)組中的‘1’對(duì)映點(diǎn)陣顯示屏上面的亮點(diǎn)),用VHDL語(yǔ)言設(shè)計(jì)一個(gè)進(jìn)程將這個(gè)數(shù)組動(dòng)態(tài)顯示在LED顯示屏上,再利用另一個(gè)進(jìn)程對(duì)這個(gè)數(shù)組按一定頻率進(jìn)行數(shù)據(jù)更新,更新的方式可以有多種。因?yàn)閮蓚€(gè)進(jìn)程是同時(shí)進(jìn)行的(并發(fā)執(zhí)行),如果對(duì)數(shù)組中的漢字?jǐn)?shù)據(jù)按滾動(dòng)的方式更新,則可實(shí)現(xiàn)漢字的滾動(dòng)顯示。圖2.2為該方案的原理圖。</p><p><b> 

32、 2.3 方案比較</b></p><p>  方案一很容易實(shí)現(xiàn),而且占用FPGA的資源較少。但是由于其實(shí)現(xiàn)方式的局限性,該方案只能實(shí)現(xiàn)漢字的滾動(dòng)顯示。方案二中將LED點(diǎn)陣抽象成了一個(gè)二維數(shù)組??梢栽O(shè)計(jì)一些比較復(fù)雜的算法來(lái)控制這個(gè)數(shù)組,使設(shè)計(jì)的系統(tǒng)不但可以滾動(dòng)顯示漢字,還可以擴(kuò)展一些其它的顯示效果。但是方案二中對(duì)數(shù)組的處理部分對(duì)FPGA芯片的資源消耗太大學(xué)校實(shí)驗(yàn)室里的EPF10K10LC84-4芯片只

33、有576個(gè)邏輯單元遠(yuǎn)遠(yuǎn)不夠設(shè)計(jì)要求。所以最終選擇方案一。</p><p><b>  3 掃描控制模塊</b></p><p>  3.1 LED點(diǎn)陣原理</p><p>  以下為8×8點(diǎn)陣LED外觀及引腳圖及其等效電路,只要其對(duì)應(yīng)的X、Y軸順向偏壓,即可使LED發(fā)亮。例如如果想使左上角LED點(diǎn)亮,則Y0=1,X0=0即可。應(yīng)用時(shí)限

34、流電阻可以放在X軸或Y軸。</p><p>  點(diǎn)陣LED掃描法介紹</p><p>  點(diǎn)陣LED一般采用掃描式顯示,實(shí)際運(yùn)用分為三種方式: </p><p><b> ?。?)點(diǎn)掃描</b></p><p><b> ?。?)行掃描</b></p><p><b&g

35、t; ?。?)列掃描</b></p><p>  若使用第一種方式,其掃描頻率必須大于16×64=1024Hz,周期小于1ms即可。若使用第二和第三種方式,則頻率必須大于16×8=128Hz,周期小于7.8ms即可符合視覺(jué)暫留要求。此外一次驅(qū)動(dòng)一列或一行(8顆LED)時(shí)需外加驅(qū)動(dòng)電路提高電流,否則LED亮度會(huì)不足。</p><p><b>  3.

36、2 漢字的存儲(chǔ)</b></p><p>  用動(dòng)態(tài)分時(shí)掃描技術(shù)使LED點(diǎn)陣模塊顯示圖像,需要進(jìn)行兩步工作。第一步是獲得數(shù)據(jù)并保存,即在存貯器中建立漢字?jǐn)?shù)據(jù)庫(kù)。第二步是在掃描模塊的控制下,配合行掃描的次序正確地輸出這些數(shù)據(jù)。獲得圖像數(shù)據(jù)的步驟是,先將要顯示的每一幅圖像畫(huà)在一個(gè)如圖3.3所示的被分成16×16共256個(gè)小方格的矩形框中,再在有筆劃下落處的小方格里填上“1”,無(wú)筆劃處填上“0”,這

37、樣就形成了與這個(gè)漢字所對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)在該矩形框上的分布,再將此分布關(guān)系以32×16的數(shù)據(jù)結(jié)構(gòu)組成64個(gè)字節(jié)的數(shù)據(jù),并保存在只讀存貯器ROM中。以這種方式將若干個(gè)漢字的數(shù)據(jù)貯存在存貯器內(nèi),就完成了圖像數(shù)據(jù)庫(kù)的建立工作。</p><p>  然后,依次對(duì)多漢字抽取像素信息,并按序排隊(duì)存放起來(lái),便可得到一個(gè)待顯示數(shù)據(jù)序列。將這個(gè)序列存到ROM中進(jìn)一步通過(guò)尋址的方法來(lái)控制該數(shù)據(jù)序列的釋放過(guò)程,就可實(shí)現(xiàn)在LED

38、 發(fā)光二極管點(diǎn)陣上滾動(dòng)顯示多漢字信息的目的。</p><p>  由圖3.4可知,某一時(shí)刻能在顯示數(shù)據(jù)序列中定位待顯示數(shù)據(jù)的地址指針可用下式計(jì)算:</p><p>  addr=n+m    (式3.1)</p><p><b>  3.3 漢字的顯示</b></p&

39、gt;<p>  第二步工作的步驟是:先在掃描模塊的控制下,由地址線確定每次由ROM送出某一列的16個(gè)LED所要顯示的漢字的控制字節(jié)數(shù)據(jù),同時(shí)由掃描模塊輸出的5位掃描碼經(jīng)兩個(gè)4-16譯碼器解碼后決定相應(yīng)的某一列可以被點(diǎn)亮,而另外31列都不能被點(diǎn)亮。該狀態(tài)持續(xù)約0.4毫秒后,就接著進(jìn)行下一行的掃描。當(dāng)完成了一次32行的掃描后,也就完成了一幀畫(huà)面的顯示。重復(fù)上述過(guò)程不斷修改ROM的地址區(qū)間的起始地址,轉(zhuǎn)向下一幅畫(huà)面的數(shù)據(jù)傳送和

40、顯示。如此進(jìn)行,就可以在LED點(diǎn)陣模塊上滾動(dòng)顯示ROM中存儲(chǔ)的漢字。</p><p>  關(guān)鍵部分VHDL程序:</p><p>  process(reset_n,clk_scan) --掃描信號(hào)的輸出</p><p><b>  begin</b></p><p>  if(reset_n='0'

41、;)then</p><p><b>  cnt<=31;</b></p><p>  elsif(rising_edge(clk_scan))then</p><p>  if(cnt=cnt'high)then</p><p><b>  cnt<=0;</b></p&

42、gt;<p><b>  else</b></p><p>  cnt<=cnt+1;</p><p><b>  end if;</b></p><p>  if(cnt =cnt'high-1)then</p><p>  flag_scan<='1&#

43、39;;</p><p><b>  else</b></p><p>  flag_scan<='0';</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  

44、end process;</p><p>  process(reset_n,clk_scan,cnt)</p><p><b>  begin</b></p><p>  if(reset_n='0')then</p><p>  scan<="ZZZZZ";<

45、;/p><p>  elsif(rising_edge(clk_scan))then</p><p>  case cnt is</p><p>  when 0 => scan <= "00000";</p><p>  when 1 => scan <= "00001";<

46、/p><p><b>  ……</b></p><p>  when 30 => scan <= "11110";</p><p>  when 31 => scan <= "11111";</p><p>  when others => scan &l

47、t;= "ZZZZZ";</p><p><b>  end case;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  ----------------------------------</p

48、><p>  process(reset_n,clk_scan,cnt,x) --列數(shù)據(jù)的輸出</p><p>  variable index:integer range 0 to L_SZ;</p><p><b>  begin</b></p><p>  if(reset_n='0')t

49、hen</p><p>  data<="0000000000000000";</p><p>  elsif(rising_edge(clk_scan))then</p><p>  index:=((cnt+x) mod L_SZ);</p><p>  data<=ledsj(index);</p&

50、gt;<p><b>  end if;</b></p><p>  end process;</p><p>  3.4 滾動(dòng)速度的控制</p><p>  將LED點(diǎn)陣看成一個(gè)滑窗。通過(guò)這個(gè)“滑窗”每次能“看到”32個(gè)存儲(chǔ)單元(2個(gè)漢字長(zhǎng)度)的信息。只讀存儲(chǔ)器ROM中鏈?zhǔn)降拇娣帕巳舾蓚€(gè)漢字的點(diǎn)陣信息,“滑窗”在這若干個(gè)漢字點(diǎn)陣

51、信息上面滑動(dòng),我們通過(guò)“滑窗”看到的就是漢字的滾動(dòng)顯示。</p><p>  在用VHDL編程的時(shí)候,可以定義一個(gè)變量x作為“滑窗”在ROM上的起始地址,設(shè)計(jì)一個(gè)進(jìn)程按一定的頻率對(duì)x進(jìn)行累加,再設(shè)計(jì)一個(gè)進(jìn)程將以x為起始地址的長(zhǎng)度為32的ROM中的區(qū)域動(dòng)態(tài)顯示在LED點(diǎn)陣中。顯然x累加的速度決定了漢字的滾動(dòng)速度。</p><p>  關(guān)鍵部分的VHDL程序:</p><p

52、>  process(reset_n,clk_scan,flag_scan) --x的控制進(jìn)程</p><p>  variable cntx:integer range 0 to 50;</p><p><b>  begin</b></p><p>  if(reset_n='0')then<

53、/p><p><b>  cntx:=0;</b></p><p><b>  x<=0;</b></p><p>  elsif(rising_edge(clk_scan))then</p><p>  if(flag_scan='1')then</p><p

54、>  if(cntx=n×8 or cntx=cntx'high)then --通過(guò)n來(lái)控制cntx的計(jì)數(shù)范圍</p><p><b>  cntx:=0;</b></p><p><b>  else</b></p><p>  cntx:=cntx+1;</p><p>

55、;<b>  end if;</b></p><p>  if(cntx=n×8)then --通過(guò)n來(lái)控制x的增加</p><p>  if(x=x'high)then</p><p><b>  x<=0;</b></p><p><b

56、>  else</b></p><p><b>  x<=x+1;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  end if;</b>&

57、lt;/p><p><b>  end if;</b></p><p>  end process;</p><p>  此進(jìn)程根據(jù)定義的信號(hào)n來(lái)控制x遞增的速度,n由外部的按鍵控制。n的范圍為0~7代表了漢字的不同的滾動(dòng)速度。當(dāng)n為0時(shí)漢字滾動(dòng)的速度最快,n為7時(shí)LED點(diǎn)陣上顯示的漢字靜止。</p><p><b&g

58、t;  3.5存儲(chǔ)模塊</b></p><p>  3.5.1 使用參數(shù)化組件LPM_ROM來(lái)實(shí)現(xiàn)</p><p>  為提高系統(tǒng)的集成度,本設(shè)計(jì)將點(diǎn)陣顯示的圖像數(shù)據(jù)庫(kù)建立在EPF10K10的片內(nèi)ROM中。Flex10k10中共有3個(gè)嵌入式數(shù)組塊(EAB),每塊大小均為2k,可構(gòu)成2048×1,1024×2,512×4,256×8等4種類

59、型RAM/ROM中的任意一種。更大容量的內(nèi)存可由多個(gè)EAB組合在一起。例如兩個(gè)256×8的ROM塊可組成一個(gè)256×16的ROM,兩個(gè)512×4的ROM塊可組合成一個(gè)512×8的ROM,如果需要,可以將所有的EAB級(jí)聯(lián)成一個(gè)RAM/ROM。級(jí)聯(lián)是QuartusII軟件自動(dòng)完成的。</p><p>  本設(shè)計(jì)可以選擇2048×16的結(jié)構(gòu),用來(lái)構(gòu)成一個(gè)能保存128個(gè)漢

60、字的只讀存儲(chǔ)器ROM。在FPGA中建立片內(nèi)只讀存儲(chǔ)器ROM,是通過(guò)使用美國(guó)Altera公司的EDA工具軟件QuartusII,并調(diào)用其中的參數(shù)化組件LPM_ROM來(lái)實(shí)現(xiàn)的。具體步驟是,首先在MAXPLUSII的圖形編輯器中雙擊空白處,便會(huì)出現(xiàn)如圖3.5所示的“Symbol”對(duì)話框。點(diǎn)擊該對(duì)話框的“Mega Wizard Plug-In Manager”按鈕,并在出現(xiàn)的對(duì)話框中選擇storage ->LPM_ROM,就會(huì)出現(xiàn)如圖3.

61、6所示的“Mega Wizard Plug-InManager-LMP ROM” 系列對(duì)話框。在該系列對(duì)話框中設(shè)置輸出數(shù)據(jù)線寬度為11,存儲(chǔ)單元的數(shù)量為2048。并完成相應(yīng)的配置環(huán)節(jié)就獲得了要求的256字節(jié)的只讀存儲(chǔ)器ROM。只讀存儲(chǔ)器ROM中的初始化數(shù)據(jù)就是本系統(tǒng)的漢字?jǐn)?shù)據(jù)庫(kù)數(shù)據(jù)。</p><p>  該初始化數(shù)據(jù)的建立是在上述的LMP_ROM設(shè)計(jì)過(guò)程中通過(guò)指定一個(gè)后綴名為.mif的初始化文件來(lái)實(shí)現(xiàn)的。該文件是

62、設(shè)計(jì)者事先在文本編輯器中建立的,其VHDL格式和關(guān)鍵代碼示意如下:</p><p>  WIDTH=16;———數(shù)據(jù)線的寬度為16位</p><p>  DEPTH=2048;———有2048個(gè)字節(jié)存儲(chǔ)單元,對(duì)應(yīng)11根地址線寬度</p><p>  ADDRESS RADIX=HEX;———以16進(jìn)制表示</p><p>  DATA RAD

63、IX = HEX;</p><p>  CONTENTBEGIN</p><p>  00 : 2f;———以16進(jìn)制表示的ROM內(nèi)的各字節(jié)單元的地址和保存的數(shù)據(jù)</p><p><b>  01 : 6c;</b></p><p><b>  02 : f8;</b></p><

64、;p><b>  ……</b></p><p><b>  fd : ee;</b></p><p><b>  fe : 72;</b></p><p><b>  ff : 00;</b></p><p><b>  END;</

65、b></p><p>  3.5.2 用FPGA內(nèi)部的邏輯單元設(shè)計(jì)一個(gè)ROM</p><p>  本系統(tǒng)也可以定義一個(gè)常數(shù)數(shù)組來(lái)存儲(chǔ)漢字信息。數(shù)組的下標(biāo)對(duì)映ROM的地址。下面是一個(gè)容量為L(zhǎng)_SZ×16的ROM內(nèi)存的例子,常數(shù)L_SZ決定了ROM的地址空間, ROM的每一個(gè)數(shù)據(jù)單元存儲(chǔ)16位數(shù)據(jù),可以很方便的驅(qū)動(dòng)16×16的LED點(diǎn)陣。定義這個(gè)ROM的時(shí)侯必須初始化

66、全部存儲(chǔ)單元。</p><p>  type array_2 is array(0 to L_SZ)of std_logic_vector(15 downto 0);</p><p>  constant ledsj:array_2:=(</p><p>  ("0010000000000000"),</p><p>  

67、("0010001111111111"),</p><p><b>  ……</b></p><p><b>  ……</b></p><p>  ("0010001000000000"),</p><p>  ("0000000000000000&

68、quot;));</p><p>  兩種方案存儲(chǔ)漢字信息,以及輸出數(shù)據(jù)驅(qū)動(dòng)LED點(diǎn)陣的原理和相差不大,第一種方案是利用了FPGA芯片中的嵌入式數(shù)組塊,可以生成大容量的ROM來(lái)存儲(chǔ)較多的漢字信息。第二中方案生成的ROM容量受到了FPGA芯片內(nèi)部邏輯單元數(shù)量的限制,但是它的操作性更好。由于本系統(tǒng)只是驗(yàn)證可行性的一個(gè)設(shè)計(jì),不需要建立大的字庫(kù)所以采用第二種方案。</p><p><b>

69、;  4 分頻電路</b></p><p><b>  4.1 解決毛刺</b></p><p>  FPGA與單片機(jī)相比,一個(gè)非常明顯的優(yōu)勢(shì)就在于它的高速性。但是因?yàn)楹芏嗤鈬骷尿?qū)動(dòng)需要低頻的時(shí)鐘(若時(shí)鐘頻率太高,則鍵盤(pán)掃描容易出錯(cuò),數(shù)碼管會(huì)閃爍和不穩(wěn)定等),所以需要用到分頻電路。</p><p>  該電路主要包含有一個(gè)計(jì)數(shù)器

70、模塊和一個(gè)譯碼輸出模塊,該電路是通過(guò)計(jì)數(shù)器模塊實(shí)現(xiàn)分頻的。比如要從12MHz的全局時(shí)鐘得到100Hz的時(shí)鐘,必須進(jìn)行120000倍分頻。但是這么大的分頻需要仿真時(shí)間很久。仿真是一般采用小的分頻來(lái)替代,真正下載到電路上時(shí),就需要采用120000分頻了。</p><p>  值的注意的是譯碼器的輸入采用了寄存器鎖存輸出,這是為了消除毛刺。多輸入的組合邏輯電路中,默寫(xiě)輸入信號(hào)在理想情況下應(yīng)該同時(shí)發(fā)生變化,但由于延遲路徑

71、不同造成這些輸入信號(hào)發(fā)生變化的時(shí)間有微小差別(門(mén)延遲時(shí)間量級(jí)),這是得到的是輸出信號(hào)就會(huì)有毛刺,這些毛刺有可能會(huì)給下一級(jí)電路帶來(lái),使得整個(gè)系統(tǒng)運(yùn)行不穩(wěn)定。因此,為保證系統(tǒng)的穩(wěn)健性,一般情況下,都應(yīng)該給輸出信號(hào)去毛刺,使之變得干凈。在設(shè)計(jì)中,譯碼的輸入是計(jì)數(shù)器的輸出,計(jì)數(shù)器各級(jí)輸出延遲是不一樣的,因此譯碼器輸出clk_scan信號(hào)波形就會(huì)有毛刺(如圖4.1)。</p><p>  4.1.1 改變輸入信號(hào)消除毛刺&

72、lt;/p><p>  為了消除毛刺帶來(lái)的影響,可以設(shè)法使得組合邏輯電路的輸入每一時(shí)刻只有一個(gè)發(fā)生變化。對(duì)于本電路可以把計(jì)數(shù)器從二進(jìn)制碼計(jì)數(shù)器改為格雷碼計(jì)數(shù)器。格雷碼計(jì)數(shù)器的特點(diǎn)是相鄰的計(jì)數(shù)值只有一位不相同,即每次計(jì)數(shù)值改變時(shí),只有一位信號(hào)會(huì)發(fā)生變化。這一點(diǎn)就可以保證沒(méi)有毛刺產(chǎn)生。</p><p>  4.1.2 通過(guò)D觸發(fā)器消除毛刺</p><p>  把有毛刺的信號(hào)

73、通過(guò)時(shí)鐘采樣,即通過(guò)一個(gè)D觸發(fā)器也可以消除毛刺。本設(shè)計(jì)就是使用這種方法。這種方法的缺點(diǎn)是信號(hào)通過(guò)一個(gè)D觸發(fā)器后,就延遲了一個(gè)時(shí)鐘周期。對(duì)于本設(shè)計(jì)這種延遲是允許的,然而在有些電路中延遲是不允許的。該電路的仿真結(jié)果如圖4.2所示。</p><p>  4.2 關(guān)鍵部分VHDL程序</p><p>  process(clk) --計(jì)數(shù)

74、模塊</p><p>  begin </p><p>  if(rising_edge(clk))then</p><p>  if(cntx=480)then</p><p><b>  cntx<=0;</b></p><p><b>  else</b&

75、gt;</p><p>  cntx<=cntx+1;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  ----------------------

76、----------</p><p>  process(cnt,clk) --譯碼輸出</p><p>  begin </p><p>  if(rising_edge(clk))then --寄存器鎖存輸出,以消除毛刺</p><p>  if(

77、cnt>=cnt'high/2)then</p><p>  clk_scan<='1';</p><p><b>  else</b></p><p>  clk_scan<='0';</p><p><b>  end if;</b>&l

78、t;/p><p><b>  end if;</b></p><p>  end process;</p><p>  圖4.3為分頻電路生成的元件符號(hào)。</p><p><b>  5 按鍵掃描電路</b></p><p>  5.1 直接式/矩陣式按鍵</p>

79、<p>  數(shù)字系統(tǒng)中,常用的按鍵有直接式和矩陣式兩種。直接式按鍵十分簡(jiǎn)單,一端接地,一端接FPGA的I/O口(設(shè)為輸入)。當(dāng)按鍵按下時(shí),此接口為高電平,通過(guò)對(duì)I/O口電平的檢測(cè)就可知按鍵是否按下。其優(yōu)點(diǎn)是簡(jiǎn)單、易行,連接方便,但每個(gè)按鍵要占用一個(gè)I/O口,如果系統(tǒng)中需要很多按鍵,那么用這種方法會(huì)占用大量的I/O口。而矩陣式鍵盤(pán)控制比直接式按鍵要麻煩得多,但其優(yōu)點(diǎn)也是很明顯的,即節(jié)省I/O口。設(shè)矩陣式鍵盤(pán)有m行n列,則鍵盤(pán)上有

80、(m×n)個(gè)按鍵,而它只需要占用(m+n)個(gè)I/O口。當(dāng)需要很多按鍵時(shí),用矩陣式鍵盤(pán)顯然比直接式按鍵要合理得多。</p><p>  上圖是一個(gè)4×4的矩陣鍵盤(pán)的原理圖。它有4行4列共8條線,每個(gè)按鍵都連著一條行線和列線。以按鍵0為研究對(duì)象,按鍵0的行線連著PC4并且通過(guò)一個(gè)下拉電阻接地(下拉就是將不確定的信號(hào)通過(guò)一個(gè)電阻嵌位在低電平,下拉反之);其列線接著PC3。將PC3~PC0設(shè)為輸出,P

81、C4~PC7設(shè)為輸入。當(dāng)PC2~PC0輸出為0,而PC3輸出為1,當(dāng)按鍵0按下時(shí),因?yàn)镻C7~PC5沒(méi)有輸入,會(huì)由于下拉作用穩(wěn)定在低電平,而PC4則由于與PC3接通而呈現(xiàn)高電平。也就是說(shuō),當(dāng)PC3~PC0為0001時(shí),當(dāng)1鍵按下時(shí),PC7~PC4讀到的電平值為0010。如果3鍵按下那么PC7~PC4讀到的電平值就是0100。以此類推,可以列出一張行列電平值與按鍵的對(duì)映關(guān)系表。</p><p>  從表中可以看出,

82、pc3~pc0的輸出在任意時(shí)刻總是只有一條線為1,其它線均為0.這很容易理解,若pc3~pc0的輸入在同一時(shí)刻有多于一條線為1,則無(wú)法判斷究竟是那個(gè)鍵按下。例如PC3~PC2同時(shí)為1,當(dāng)按鍵0或者按鍵4被按下,PC7~PC4讀到的值都是0001,這樣根本無(wú)法判斷究竟是按鍵0,還是按鍵4被按下。</p><p>  因?yàn)闊o(wú)法預(yù)計(jì)什么時(shí)候有鍵按下,也無(wú)法預(yù)測(cè)究竟是那一列上的鍵被按下,所以只能對(duì)鍵盤(pán)的列線(PC3~PC

83、0)進(jìn)行掃描,同時(shí)讀取鍵盤(pán)行線(PC7~PC0)的電平值。如表7.2所列,PC3~PC0按下述的4中組合依次輸出,不斷循環(huán):</p><p>  本系統(tǒng)用到的按鍵只有3個(gè):復(fù)位按鍵,控制n增大和減小的兩個(gè)按鍵。顯然選擇直接式按鍵的方案。</p><p>  5.2 鍵盤(pán)消抖電路</p><p>  鍵盤(pán)的按鍵閉合與釋放瞬間,輸入的信號(hào)會(huì)有毛刺。如果不進(jìn)行消抖處理,系

84、統(tǒng)會(huì)將這些毛刺誤以為是用戶的另一次輸入,導(dǎo)致系統(tǒng)的誤操作。</p><p>  5.2.1 比較法消鍵抖動(dòng)</p><p>  也叫計(jì)數(shù)法,本設(shè)計(jì)就是采用這種方法。這個(gè)方法很好理解它比較若干個(gè)時(shí)鐘周期讀取的數(shù)據(jù),當(dāng)每一次比較都相同時(shí)我們認(rèn)為收到了一個(gè)穩(wěn)定的鍵值,否則認(rèn)為是過(guò)渡態(tài)即毛刺。</p><p>  5.2.2 積分法消鍵抖動(dòng)</p><p

85、>  用一個(gè)增減計(jì)數(shù)器,當(dāng)輸入信號(hào)為'1'時(shí)計(jì)數(shù)器遞增計(jì)數(shù)直到計(jì)數(shù)器全'1'停止計(jì)數(shù),否則計(jì)數(shù)器遞減計(jì)數(shù)直到全'0'停止計(jì)數(shù)。那么計(jì)數(shù)器 的MSB即為輸入信號(hào)的去抖信號(hào)。你也可以用時(shí)鐘再加上一個(gè)速度較慢的使能來(lái)對(duì)輸入信號(hào)計(jì)數(shù)。顯然計(jì)數(shù)器的位數(shù)要求與要去抖的抖動(dòng)脈沖寬度的對(duì)數(shù)關(guān)系。</p><p>  6 FPGA的頂層設(shè)計(jì)</p><p&g

86、t;  6.1 層次化設(shè)計(jì)的概念</p><p>  層次化設(shè)計(jì)的示意圖如圖6.1所示。</p><p>  從圖中可以看出,層次化設(shè)計(jì)的核心思想有兩個(gè),一是模塊化,二是元件重用。</p><p><b>  6.1.1 模塊化</b></p><p>  可以將一個(gè)大系統(tǒng)劃分為幾個(gè)子模塊,而這些子模塊有分別由更小的模塊

87、組成,如此往下,直至不可再分。這些是自頂向下的設(shè)計(jì)方法。圖6.1中,頂層文件所描述的實(shí)體A由B、C、D三個(gè)實(shí)體組成,而實(shí)體B和實(shí)體C又分別由實(shí)體E、F和實(shí)體F、G構(gòu)成。每個(gè)實(shí)體都可以看成上一層實(shí)體中的一個(gè)模塊或組件,系統(tǒng)就像搭積木一樣一層一層地構(gòu)建。</p><p>  6.1.2 元件重用</p><p>  同一個(gè)元件可以被不同的設(shè)計(jì)實(shí)體調(diào)用,也可以被同一個(gè)實(shí)體多次調(diào)用。圖6.1中,實(shí)

88、體F分別被實(shí)體B和實(shí)體C調(diào)用,而實(shí)體G則被實(shí)體C調(diào)用了2次。組件重用不但大大減輕了設(shè)計(jì)者的工作量,而且使程序更結(jié)構(gòu)化和具有更高的可讀性。</p><p>  6.2 生成組件符號(hào)</p><p>  欲將上述的各個(gè)模塊作為上一層設(shè)計(jì)實(shí)體中的組件,就必須把他們先生成組件符號(hào)。具體做法是:在QuartusII中為VHDL語(yǔ)言程序分別建立項(xiàng)目;在編譯、仿真通過(guò),證實(shí)邏輯功能正確后,在File菜單

89、下選擇Create/Update項(xiàng)中的Create Symbol Files for Current File即可(如圖6.2)。</p><p>  QuartusII會(huì)自動(dòng)為此實(shí)體生成一個(gè)后綴為.bsf的組件符號(hào)文件,以后就可以在圖形編輯器中調(diào)用此組件了。</p><p>  6.3 調(diào)用組件符號(hào)</p><p>  6.3.1 建立項(xiàng)目</p>

90、<p>  新建一個(gè)頂層檔的項(xiàng)目將上述的各個(gè)模塊在QuartusII的圖形編輯器中調(diào)用已經(jīng)生成的組件符號(hào)(如圖6.3)。</p><p>  6.3.2 定義輸入/輸出端口與聯(lián)線</p><p>  組件中的輸入/輸出端口需要添加輸入/輸出引腳,做法是:在圖6.3對(duì)話框中的pin里選擇Input即可添加輸入引腳;選擇Output即可添加輸出引腳。輸入/輸出引腳上都有一個(gè)名字,左鍵

91、雙擊它即可輸入用戶自定的名字。如果要連接兩個(gè)組件的端口,</p><p>  左鍵雙擊它即可輸入用戶自定的名字。如果要連接兩個(gè)組件的端口,就將鼠標(biāo)移到其中一個(gè)端口上,這時(shí)鼠標(biāo)指示符會(huì)自動(dòng)變?yōu)椤笆毙?;然后按下鼠?biāo)左鍵并拖動(dòng)到第2個(gè)端口,松開(kāi)鼠標(biāo)即畫(huà)好一條線。以圖6.4的關(guān)系構(gòu)成頂層設(shè)計(jì),并編譯下載到FPGA中,即完成了一個(gè)基于FPGA的LED點(diǎn)陣顯示系統(tǒng)的全部設(shè)計(jì)。</p><p><

92、;b>  7 結(jié)論</b></p><p><b>  7.1 總結(jié)</b></p><p>  本設(shè)計(jì)基于EDA技術(shù),以全硬件的方式實(shí)現(xiàn)了LED漢字滾動(dòng)顯示器。主要完成了以下工作:</p><p><b>  對(duì)時(shí)鐘信號(hào)的分頻</b></p><p><b>  對(duì)按鍵

93、的消抖動(dòng)處理</b></p><p>  用FPGA實(shí)現(xiàn)只讀存儲(chǔ)器</p><p><b>  對(duì)LED點(diǎn)陣的控制</b></p><p>  由于采用了先進(jìn)的EDA技術(shù),使得系統(tǒng)在具有極高的集成度和穩(wěn)定性的同時(shí),還體現(xiàn)出比傳統(tǒng)設(shè)計(jì)方法更大的靈活性,和更高的設(shè)計(jì)效率。</p><p><b>  7

94、.2 建議</b></p><p>  由于現(xiàn)有實(shí)驗(yàn)條件的限制,系統(tǒng)的實(shí)現(xiàn)選擇了本文2.1所提的方案。該方案雖然實(shí)現(xiàn)簡(jiǎn)單,但是它的實(shí)現(xiàn)原理是直接將存放在ROM中的信息顯示出來(lái)。不能改變這些信息。</p><p>  對(duì)于本文2.2所提出的方案雖然沒(méi)有采用,但是筆者認(rèn)為它是這是一個(gè)很具創(chuàng)新的方法。它將LED點(diǎn)陣完全抽象成了一個(gè)二維數(shù)組,對(duì)這個(gè)數(shù)組進(jìn)行的所有操作直接反映到LED點(diǎn)陣

95、上。因此,設(shè)計(jì)者可以設(shè)計(jì)出很多復(fù)雜的方法來(lái)操作數(shù)組,使得LED點(diǎn)陣除了能夠滾動(dòng)顯示外還能增加其他的顯示效果。但是在FPGA中對(duì)數(shù)組的處理全部是通過(guò)硬件來(lái)實(shí)現(xiàn)的,所以該方案對(duì)邏輯單元的消耗是十分驚人的。筆者認(rèn)為可以考慮采用單片機(jī)或DSP來(lái)實(shí)現(xiàn)該方案的運(yùn)算部分,然后在聯(lián)合FPGA構(gòu)成整個(gè)系統(tǒng)的設(shè)計(jì)。</p><p><b>  謝 辭</b></p><p>  四年的大

96、學(xué)生活不知不覺(jué)中就要結(jié)束了,在這段難忘的生活中,有我許多美好的回憶。在這份大學(xué)的最后一頁(yè)里,我要感謝的人很多。</p><p>  首先要感謝我的學(xué)校,感謝在這四年中交給我的做人道理,讓我從一個(gè)懵懂的高中生變成一個(gè)成熟的青年。還要感謝王章瑞教授,因?yàn)楫厴I(yè)設(shè)計(jì)是在王章瑞的悉心指導(dǎo)下完成的。王老師淵博的專業(yè)知識(shí),嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,精益求精的工作作風(fēng)對(duì)我影響深遠(yuǎn)。他的循循善誘的教導(dǎo)和不拘一格的思路給予我無(wú)盡的啟迪,他的嚴(yán)

97、謹(jǐn)細(xì)致、一絲不茍的作風(fēng),將一直是我工作、學(xué)習(xí)中的榜樣。還要感謝的是在做畢業(yè)設(shè)計(jì)期間所有和我一起討論過(guò)的同學(xué),使我對(duì)所學(xué)的知識(shí)掌握得更加牢固。當(dāng)然,還要感謝寢室的兄弟們?cè)谖彝瓿烧撐牡倪^(guò)程中給予我的幫助和鼓勵(lì),也是他們陪我度過(guò)這四年的生活。此外我還要特別感謝許多網(wǎng)絡(luò)上的不知名的朋友,他們豐富的實(shí)踐經(jīng)驗(yàn)和熱心、耐心的教導(dǎo)讓我少走了許多彎路。最后要感謝的就是我的父母、朋友,對(duì)于他們我更是有千言萬(wàn)語(yǔ),還是匯聚成一句話:感謝你們一直都伴隨著我。&l

98、t;/p><p>  現(xiàn)在即將揮別我的學(xué)校、老師、同學(xué),還有我四年的大學(xué)生活,雖然依依不舍,但是對(duì)未來(lái)的路,我充滿了信心。最后,感謝在大學(xué)期間認(rèn)識(shí)我和我認(rèn)識(shí)的所有人,有你們伴隨,才有我大學(xué)生活的豐富多彩,絢麗多姿!</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 求是科技.CPLD/FPGA應(yīng)用開(kāi)發(fā)技術(shù)與工程實(shí)際.北京:人

99、民郵電出版社,2005</p><p>  [2] 齊洪喜等.VHDL電路設(shè)計(jì)使用教程.北京:清華大學(xué)出版社,2004</p><p>  [3] 黃任.VHDL入門(mén)·解惑·經(jīng)典實(shí)例·經(jīng)驗(yàn)總結(jié).北京:北京航空航天大學(xué)出版社,2005</p><p>  [4] 鄭亞民等.可編程邏輯器件開(kāi)發(fā)軟件QuartusⅡ.北京:國(guó)防工業(yè)出版社,20

100、06</p><p>  [5] 楊曉慧,楊永健.基于FPGA的EDA/SOPC技術(shù)與VHDL.北京:國(guó)防工業(yè)出版社,2007</p><p>  [6] 王彥主.基于FPGA的工程設(shè)計(jì)與應(yīng)用.西安:西安電子科技大學(xué)出版社,2007</p><p>  [7] 李洪偉, 袁斯華.基于Quartus Ⅱ的FPGA/CPLD設(shè)計(jì).北京:電子工業(yè)出版社,2006</

101、p><p>  [8] 王開(kāi)軍,姜宇柏等. 面向CPLD/FPGA的VHDL設(shè)計(jì).北京:機(jī)械工業(yè)出版社,2007</p><p>  [9] 王道憲.CPLD/FPGA可編程邏輯器件應(yīng)用與開(kāi)發(fā).北京:國(guó)防工業(yè)出版社,2004</p><p>  [10] 羅朝霞, 高書(shū)莉.CPLD/FPGA設(shè)計(jì)及應(yīng)用.北京:人民郵電出版社,2007</p><p&g

102、t;  [11] 褚振勇,翁木云.FPGA設(shè)計(jì)及應(yīng)用.西安:西安電子科技大學(xué)出版社,2002,2007</p><p>  [12] David R.Coehl The VHDL handbook.Kluwer Academic Pubishers,1989</p><p>  附錄:系統(tǒng)各個(gè)模塊的VHDL程序</p><p><b>  分頻模塊程序:&

103、lt;/b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p

104、>  entity fenpin is</p><p><b>  port(</b></p><p>  clk:in std_logic;--輸入的500KHz信號(hào)</p><p>  clk_scan:out std_logic; --800hz的點(diǎn)陣動(dòng)態(tài)掃描信號(hào)</p><p>  cl

105、k_key:out std_logic;--1KHz的鍵盤(pán)掃描信號(hào)</p><p>  reset_n:in std_logic</p><p><b>  );</b></p><p>  end fenpin;</p><p>  architecture abc of fenpin is</p>

106、<p><b>  begin</b></p><p>  process(reset_n,clk)--產(chǎn)生clk_scan和clk_key信號(hào)</p><p>  --下載用下面這兩條語(yǔ)句</p><p>  variable cnt_scan:integer range 0 to 300;</p>&l

107、t;p>  variable cnt_key:integer range 0 to 480;</p><p>  --仿真用下面這兩條語(yǔ)句</p><p>  --variable cnt_scan:integer range 0 to 30;</p><p>  --variable cnt_key:integer range 0 to 24;</

108、p><p><b>  begin</b></p><p>  if(reset_n='0')then</p><p>  cnt_scan:=0;</p><p>  cnt_key:=0;</p><p>  elsif(rising_edge(clk))then</p>

109、;<p>  if(cnt_scan=cnt_scan'high)then</p><p>  cnt_scan:=0;</p><p><b>  else</b></p><p>  cnt_scan:=cnt_scan+1;</p><p><b>  end if;</b&g

110、t;</p><p>  if(cnt_key=cnt_key'high)then</p><p>  cnt_key:=0;</p><p><b>  else</b></p><p>  cnt_key:=cnt_key+1;</p><p><b>  end if;&l

111、t;/b></p><p>  if(cnt_scan>(cnt_scan'high/2))then</p><p>  clk_scan<='1';</p><p><b>  else</b></p><p>  clk_scan<='0';</p

112、><p><b>  end if;</b></p><p>  if(cnt_key>(cnt_key'high/2))then</p><p>  clk_key<='1';</p><p><b>  else</b></p><p> 

113、 clk_key<='0';</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p><b>  end abc;</b></p>

114、<p><b>  掃描模塊程序:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  use ieee.std_logic_un

115、signed.all;</p><p>  entity mnscan is</p><p><b>  port(</b></p><p>  clk_scan:in std_logic;</p><p>  scan:out std_logic_vector(4 downto 0);</p><p

116、>  data:out std_logic_vector(15 downto 0);</p><p>  dis_n:out std_logic_vector(6 downto 0); --不需要小數(shù)點(diǎn)(7位)</p><p>  key1,key2:in std_logic;</p><p>  reset_n:in std_logic</p>

117、;<p><b>  );</b></p><p>  end mnscan;</p><p>  architecture abc of mnscan is</p><p>  constant L_SZ:integer:=223;</p><p>  constant L_DZ:integer:=31;

118、</p><p>  signal cnt:integer range 0 to L_DZ; --和點(diǎn)陣屏的列一樣大</p><p>  signal n:integer range 0 to 7;--控制速度</p><p>  signal flag_scan:std_logic;</p><p> 

119、 signal x:integer range 0 to L_SZ;</p><p>  --創(chuàng)建一個(gè)可以存儲(chǔ)2唯數(shù)據(jù)的數(shù)據(jù)類型 array_2</p><p>  type array_2 is array(0 to L_SZ)of std_logic_vector(15 downto 0);</p><p>  constant ledsj:array_2:=(

120、</p><p>  ("1111111111111111"),</p><p>  ("0000001000000000"),</p><p><b>  ……</b></p><p>  ("0000011000000000"),</p>&l

121、t;p>  ("0010001000000000")</p><p><b>  );</b></p><p><b>  begin</b></p><p>  process(reset_n,clk_scan) --cnt計(jì)數(shù)及flag_scan的產(chǎn)生<

122、;/p><p><b>  begin</b></p><p>  if(reset_n='0')then</p><p><b>  cnt<=31;</b></p><p>  elsif(rising_edge(clk_scan))then</p><p&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論