版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計任務(wù)書</b></p><p> 題 目: 電子琴 </p><p> 初始條件: </p><p> 1.FPGA(CycloneII EP2C8Q208C8)。</p><p> 2.Quartus II。</p><p> 3.Ver
2、ilog/VHDL。</p><p> 要求完成的主要任務(wù): </p><p> 1.根據(jù)理論知識書寫課程設(shè)計報告。</p><p> 2.按照要求編寫程序,并仿真調(diào)試電路功能。</p><p><b> 設(shè)計要求:</b></p><p> 1.設(shè)計一個八音電子琴</p>
3、<p> 2.由鍵盤輸入控制音響</p><p><b> 3.可自動演奏樂曲</b></p><p><b> 參考文獻:</b></p><p> 1.VerilogHDL電路設(shè)計指導(dǎo)書. 華為. 2000.04 </p><p> 2.FPGA設(shè)計流程指南. 華為. 20
4、01.08</p><p> 3.可編程邏輯器件原理及應(yīng)用.朱明程.西安電子科技大學(xué)出版社</p><p> 4.數(shù)字電路EDA入門. 張亦華. 北京郵電大學(xué)出版社. 2003</p><p> 指導(dǎo)教師簽名: 年 月 日</p><p> 系主任(或責(zé)任教師)簽名
5、: 年 月 日</p><p><b> 摘要</b></p><p> 隨著基于FPGA的EDA技術(shù)的發(fā)展和應(yīng)用領(lǐng)域的擴大與深入,EDA技術(shù)在電子信息、通信、自動控制用計算機等領(lǐng)域的重要性日益突出。專用集成電路(ASIC)和用戶現(xiàn)場可編程門陣列(FPGA)的復(fù)雜度越來越高。數(shù)字通信、工業(yè)自動化控制等領(lǐng)域所用的數(shù)字電路
6、及系統(tǒng)其復(fù)雜程度也越來越高,特別是需要設(shè)計具有實時處理能力的信號處理專用集成電路,并把整個電子系統(tǒng)綜合到一個芯片上。設(shè)計并驗證這樣復(fù)雜的電路及系統(tǒng)已不再是簡單的個人勞動,而需要綜合許多專家的經(jīng)驗和知識才能夠完成。由于電路制造工藝技術(shù)進步非常迅速,電路設(shè)計能力趕不上技術(shù)的進步。在數(shù)字邏輯設(shè)計領(lǐng)域,迫切需要一種共同的工業(yè)標準來統(tǒng)一對數(shù)字邏輯電路及系統(tǒng)的描述,這樣就能把系統(tǒng)設(shè)計工作分解為邏輯設(shè)計(前端)和電路實現(xiàn)(后端)兩個互相獨立而又相關(guān)的
7、部分。由于邏輯設(shè)計的相對獨立性就可以把專家們設(shè)計的各種常用數(shù)字邏輯電路和系統(tǒng)部件建成宏單元(Megcell)或軟核(Soft-Core)庫供設(shè)計者引用,以減少重復(fù)勞動,提高工作效率。電路的實現(xiàn)則可借助于綜合工具和布局布線工具(與具體工藝技術(shù)有關(guān))來自動地完成。VHDL和Verilog HDL這兩種工業(yè)標準的產(chǎn)生順</p><p> 關(guān)鍵詞:FPGA、ASIC、VHDL/Verilog</p>&l
8、t;p><b> Abstract</b></p><p> With the FPGA-based EDA technology development and expansion of application fields with depth, EDA technology in the electronic information, communication, autom
9、atic control computer and other fields growing importance. Specific integrated circuit (ASIC) and field programmable gate arrays user (FPGA) complexity is increasing. Digital communications, industrial automation and con
10、trol and other areas used by digital circuits and systems are increasingly high degree of complexity, especially with r</p><p> Keywords: FPGA, ASIC, VHDL/Verilog</p><p><b> 目錄</b>
11、</p><p><b> 摘要i</b></p><p> Abstractii</p><p><b> 1.方案設(shè)計1</b></p><p><b> 1.1設(shè)計要求1</b></p><p><b> 1.2方案比較
12、1</b></p><p><b> 1.3方案論證2</b></p><p><b> 2.模塊設(shè)計3</b></p><p> 2.1頂層模塊設(shè)計3</p><p> 2.2數(shù)控分頻模塊設(shè)計4</p><p> 2.3音調(diào)發(fā)生器模塊設(shè)計6
13、</p><p> 2.4自動演奏模塊設(shè)計7</p><p><b> 3.軟件設(shè)計8</b></p><p> 3.1 Verilog HDL硬件描述語言概述8</p><p><b> 3.2模塊說明9</b></p><p> 3.3軟件實現(xiàn)過程10
14、</p><p> 4.仿真與調(diào)試13</p><p> 5.心得與體會15</p><p><b> 6.參考文獻16</b></p><p><b> 7.附錄17</b></p><p> 7.1 EP2C8Q208C8參數(shù)17</p>
15、<p> 7.2 模塊程序18</p><p><b> 1.方案設(shè)計</b></p><p><b> 1.1設(shè)計要求</b></p><p> 1.設(shè)計一個八音電子琴</p><p> 2.由鍵盤輸入控制音響</p><p><b>
16、3.可自動演奏樂曲</b></p><p><b> 1.2方案比較 </b></p><p> 方案一:用ASIC 實現(xiàn),這種電路很直觀,簡單方便。但應(yīng)用數(shù)字邏輯設(shè)計復(fù)雜,使用的器件復(fù)雜,體積不易控制,功耗較大。電路設(shè)計及維護不方便,而且電路的保密性和安全性不易保證,使設(shè)計的穩(wěn)定度和可靠性大大降低。</p><p> 方案
17、二:運用單片機實現(xiàn),這種設(shè)計方案思路直接,簡單可行,但是單片機的運行速度和時鐘頻率是設(shè)計的弊端,而且程序運行可能由于環(huán)境影響而不穩(wěn)定,同時要在外部設(shè)計存儲器件,使設(shè)計變得復(fù)雜。</p><p> 方案三:基于FPGA芯片設(shè)計,這種方案使設(shè)計思路變得清晰明了,設(shè)計時只需使用verilog語言描述出所需的電路模塊。再把電路代碼綜合后布局布線映射成電路網(wǎng)表。使其成為從語言到電路的轉(zhuǎn)換,方法簡便,思路清晰,并且芯片具有
18、豐富的資源滿足設(shè)計要求。采用現(xiàn)場可編程邏輯門陣列器件(FPGA)制作,將所有器件集成在一塊芯片上,體積大大減小,用verilog編程實現(xiàn)時更加方便,易于進行功能擴展,并可調(diào)試仿真,制作時間大大縮短。因此選擇第三種方案。</p><p><b> 1.3方案論證</b></p><p> 電路的樂曲演奏原理:組成樂曲的每個音符持續(xù)的時間(音長),頻率值(音調(diào))以及音
19、色(主要由演奏的樂器決定的)是樂曲能連續(xù)輸出悅耳聲音的基本要素,因此要使音響發(fā)出悅耳的樂曲聲就要控制輸出到音響的激勵信號的頻率的和各個頻率信號持續(xù)的時間。由于各種條件的的限制,本系統(tǒng)僅僅是通過控制音長和音調(diào)來實現(xiàn)多功能電子琴的設(shè)計,而音色由于受器件的類型和質(zhì)量的影響所以不易控制不在設(shè)計之內(nèi)。</p><p> 通過模式選擇電路可以選擇相應(yīng)的三種模式:按鍵演奏,自動播放音樂,按鍵輸入并回放音樂。按鍵演奏電路通過設(shè)
20、計分頻器輸出產(chǎn)生不同頻率給音響從而產(chǎn)生不同音階聲音;自動播放音樂電路可以通過設(shè)計ROM和一個程序計數(shù)器來實現(xiàn),有程序計數(shù)器來實現(xiàn)地址的選擇ROM中存儲的分頻數(shù),然后將分頻數(shù)輸入音響實現(xiàn)音樂播放功能;按鍵輸入并回放音樂電路是通過設(shè)計按鍵演奏電路,同時設(shè)計讀寫時鐘計數(shù)器作為選擇地址,通過對RAM的操作實現(xiàn)對輸入音樂的自動回放功能。由于設(shè)計合情合理,又有科學(xué)依據(jù),所以經(jīng)過科學(xué)論證該設(shè)計可以實現(xiàn)。</p><p>&l
21、t;b> 2.模塊設(shè)計</b></p><p> 本設(shè)計采用模塊化設(shè)計方法,由頂層模塊(top.v)、音階發(fā)生器模塊(tone.v)、數(shù)控分頻模塊(speaker.v)和自動演奏模塊(automusic.v)組成</p><p><b> 2.1頂層模塊設(shè)計</b></p><p> 整個多功能電子琴的設(shè)計分為幾個模塊
22、,系統(tǒng)是由底層設(shè)計到頂層設(shè)計的思想和方法。通過軟件編程和仿真對各個底層模塊設(shè)計即實現(xiàn),然后對底層模塊的連接實現(xiàn)頂層模塊的設(shè)計,這樣的設(shè)計具有巨大的設(shè)計優(yōu)勢,由于通過軟件編程設(shè)計特定的電路或模塊,而且該電路或模塊可以重用形成用戶的庫,通過軟件編程設(shè)計使程序編譯成具有形象封裝的功能器件,這些功能器件不僅可以從程序到器件相互裝換,還可以由各個功能器件聯(lián)接生成高密度集成器件,以及相應(yīng)的IP核。ALTERA公司為我們提供了功能齊全而且豐富的IP核
23、,這樣給設(shè)計帶來了巨大的方便,生成同時通過底層的設(shè)計到頂層設(shè)計模塊重用得到廣泛應(yīng)用,也提高了設(shè)計的效率和周期。避免了設(shè)計的重復(fù)進行,使得高集成度的電路開發(fā)變成現(xiàn)實。而且特定的IP核已經(jīng)成為知識產(chǎn)權(quán)加以保護。</p><p> 頂層模塊由樂曲自動演奏(automusic),音調(diào)發(fā)生器(tone)和數(shù)控分頻器(speaker)三個模塊組成。其中樂曲演奏部分又包括了鍵盤編碼。設(shè)置一個自動演奏/鍵盤輸入切換auto,即
24、當(dāng)auto=“0”時,選擇自動演奏音樂存儲器里面的樂曲,auto=“1”時,選擇鍵盤輸入的信號。系統(tǒng)RTL圖如圖1。</p><p> 圖1 系統(tǒng)RTL圖</p><p> 2.2數(shù)控分頻模塊設(shè)計</p><p> 數(shù)控分頻模塊(speaker.v)對時基脈沖進行分頻,得到與1、2、3、4、5、6、7七個音符對應(yīng)頻率。該模塊主要由三個Verilog語言alw
25、ays塊構(gòu)成。首先對FPGA的50MHz的時基脈沖進行分頻得到1MHz的脈沖,然后按照tone1輸入的分頻系數(shù)對1MHz的脈沖再次分頻,得到所需要的音符頻率。第三個always塊的作用是在音調(diào)輸出時再進行二分頻,將脈沖展寬,使揚聲器有足夠發(fā)聲功率。</p><p> 該模塊是通過音階對應(yīng)的頻率的計算得到各個對應(yīng)頻率的分頻的數(shù)值,然后將分頻的數(shù)值送給分頻器則會產(chǎn)生不同頻率的脈沖,然后將脈沖送給音響則會產(chǎn)生不同的音
26、階的聲音。輸出的脈沖是占空比為50%的方波,實際聽起來跟真實的電子琴聲音有些差異,這是因為跟實際的波形不完全一致造成的。實際的電子琴可能還含有一些其他的諧波成分,音色不一樣。</p><p> 下表說明了各個音頻對應(yīng)的頻率。</p><p> 表一:簡譜中的音名與頻率的關(guān)系</p><p> 在本設(shè)計中,只設(shè)計了中音的7個音再加上高音1,總共8個音。頻率f與分
27、頻系數(shù)tone1的關(guān)系為: (Hz),例如中音1,它的頻率是523.3Hz,它對應(yīng)的分頻系數(shù)為tone1=1000000/523.3=1910.9.在實際中取整數(shù)1910。這樣得到的頻率是523.6Hz。誤差為,這樣的誤差是很小的,可以忽略。由此可見設(shè)計的精度還是很高的。</p><p> 數(shù)控分頻器的音階產(chǎn)生流程圖如圖2所示。</p><p> 圖2 數(shù)控分頻流程圖</p&
28、gt;<p> 用QuartusII的RTL Viewer工具生成RTL圖,可看到其RTL圖如圖3所示。</p><p> 圖3 數(shù)控分頻RTL圖</p><p> 2.3音調(diào)發(fā)生器模塊設(shè)計</p><p> 音調(diào)發(fā)生器模塊(tone.v)的作用是產(chǎn)生獲得音階的分頻預(yù)置值。當(dāng)8位發(fā)聲控制輸入index中的某一位為高電平時,則對應(yīng)某一音階的數(shù)值
29、將在端口tone0輸出,該數(shù)值即為該音階的分頻預(yù)置值,分頻預(yù)置值控制數(shù)控分頻器來對1MHz的脈沖進行分頻,由此可得到每個音階對應(yīng)的頻率。例如輸入index=“00000001”,即對應(yīng)的按鍵是1,產(chǎn)生的分頻系數(shù)便是1910;code輸出對應(yīng)音階的LED燈點亮數(shù)目。</p><p> 該模塊主要由兩個always塊構(gòu)成,第一個完成從index到tone0的譯碼過程,另一個完成從index到code的譯碼。tone
30、0為分頻預(yù)置值,被送到數(shù)控分頻器模塊產(chǎn)生相應(yīng)頻率的音頻信號。音階與預(yù)置分頻系數(shù)的關(guān)系見下表。</p><p> 表二:分頻系數(shù)與音階的關(guān)系</p><p> Code為LED燈信號,全滅代表沒有鍵被按下,點亮1個代表生成了中音1,點亮2個代表生成了中音2,以此類推。設(shè)計的LED為低電平點亮的,code的某位為0,則該LED點亮。例如code=”11111110”,則最右邊的即第1個LE
31、D點亮。code與音階的關(guān)系見下表。</p><p> 表三:code與音階的關(guān)系</p><p> 2.4自動演奏模塊設(shè)計</p><p> 每個音符的持續(xù)時間則由樂曲的速度以及節(jié)拍數(shù)來確定的。所以,必須知道樂曲的速度和每個音符所對應(yīng)的節(jié)拍數(shù)才能控制音符的音長,而在這個設(shè)計中所演奏的樂曲的最短的音符為四分音符,全音符的持續(xù)時間為1秒,則一拍所應(yīng)該持續(xù)的時間應(yīng)
32、為0.25秒,則只需要一個4HZ的時鐘頻率即可產(chǎn)生四分音符的時長。通過編寫樂曲文件就可以讓系統(tǒng)知道現(xiàn)在應(yīng)該演奏哪個音符,而這個音符持續(xù)的時間是按樂曲文件中音符是按地址存放的,當(dāng)ROM工作時就按4Hz的頻率依次讀取音符,當(dāng)讀ROM的某個音符時就對應(yīng)發(fā)這個音符的音調(diào),持續(xù)時間為0.25秒。</p><p> 音樂存儲模塊的作用是產(chǎn)生8位發(fā)聲控制輸入index。當(dāng) auto為“0”時,由存儲在此模塊中的8位二進制數(shù)作
33、為發(fā)聲控制輸入,可自動演奏樂曲。模塊的Verilog程序中包括兩個always塊,首先是對時基脈沖進行分頻得到4Hz的脈沖,作為第第二個always塊的時鐘信號,它用來控制每個音階之間的停頓時間, 1/4=0.25s;第二個always塊是音樂的存儲,可根據(jù)需要編寫不同的樂曲。在本設(shè)計中存儲了一首《梁?!?。</p><p> 自動音樂播放的流程見圖4.</p><p> 圖4 自動音樂
34、播放流程圖</p><p><b> 3.軟件設(shè)計</b></p><p> 3.1 Verilog HDL硬件描述語言概述</p><p> Verilog HDL和VHDL一樣,是目前大規(guī)模集成電路設(shè)計中最具代表性、使用最廣泛的硬件描述語言之一。 作為硬件描述語言,Verilog HDL具有如下特點:1.由于該語言的特點使得代碼描述與
35、具體工藝的實現(xiàn)無關(guān),提高了設(shè)計的可重用性,便于設(shè)計的標準化。如果有C語言的編程經(jīng)驗的設(shè)計人員,只需短暫的時間就能學(xué)會和掌握Verilog HDL語言。2.它能夠在各個抽象層次的描述上對設(shè)計進行仿真驗證,所以它可以及時發(fā)現(xiàn)可能存在的錯誤設(shè)計,縮短了設(shè)計的周期,并保證整個了設(shè)計過程的完整性與正確性。3.它能夠在不同的抽象層次上,如系統(tǒng)級、行為級、RTL(Register Transfer Level)級也就是寄存器傳輸級、門級和開關(guān)級,對設(shè)
36、計系統(tǒng)進行精確而簡練的描述;因此,Verilog HDL可以作為學(xué)習(xí)HDL設(shè)計方法的入門和基礎(chǔ)。Verilog HDL的基本結(jié)構(gòu)是由模塊(module)構(gòu)成的,而每個模塊都對應(yīng)著硬件電路中各個邏輯實體。因此,每個模塊都有獨立的結(jié)構(gòu)或功能,以及用于與其它模塊之間相互通信端口。其所寫代碼主要是由以下幾部分組成:第一部分是代碼的注釋部分,第二部分是模塊定義行, 第三部</p><p> 本設(shè)計采用的是Verilog
37、HLD語言。</p><p><b> 3.2模塊說明</b></p><p><b> 1.頂層模塊</b></p><p><b> 文件名:top.v</b></p><p> 功 能:對各子模塊進行頂層映射。</p><p> 說
38、明:對automusic.v、speaker.v、tone.v幾個子模塊進行頂層映射。</p><p> 2.音樂自動播放模塊</p><p> 文件名:automusic.v</p><p> 功 能:對按鍵進行檢測產(chǎn)生index編碼,儲存一首曲子自動播放。</p><p> 說 明:通過對50MHz脈沖分頻得到一個4Hz的信號
39、作為節(jié)拍發(fā)生器。4Hz信號用來更新曲子存儲器地址,通過查地址得到譜子,從而達到自動播放音樂的效果。同時該模塊還負責(zé)鍵盤檢測的任務(wù),不同的按鍵被按下,就產(chǎn)生對應(yīng)的index編碼,送到后面的tone.v模塊。</p><p><b> 3.音調(diào)發(fā)生器模塊</b></p><p> 文件名:tone.v</p><p> 功 能:根據(jù)輸入的按
40、鍵編碼index,產(chǎn)生對應(yīng)的預(yù)分頻系數(shù)tone0。</p><p> 說 明:該模塊將鍵盤按鍵的編碼值index與分頻數(shù)tone0相對應(yīng)并且通過蜂鳴器播放器件輸出音樂。同樣還產(chǎn)生一個code編碼,用于LED顯示。編碼是通過always語句和case語句組合來完成的。</p><p><b> 數(shù)控分頻模塊</b></p><p> 文件
41、名:speaker.v</p><p> 功 能:根據(jù)輸入的分頻系數(shù)產(chǎn)生對應(yīng)的音頻信號,并驅(qū)動蜂鳴器發(fā)聲。</p><p> 說 明:系統(tǒng)時鐘是50MHz,直接分頻的話分頻系數(shù)會很大,不方便處理。所以進行兩次分頻。第一個always塊是一個固定分頻器,將50MHz分到1MHz,作為第二個分頻器的輸入時鐘信號。第二個always塊是一個可變分頻器,分頻系數(shù)為tone1端口輸入?yún)?shù),由
42、此來產(chǎn)生需要的頻率。</p><p><b> 3.3軟件實現(xiàn)過程</b></p><p> 1.在QuartusII中建立工程項目,項目存儲在事先建立的工程文件夾內(nèi)。 如圖5,圖6所示。</p><p><b> 圖5 新建工程</b></p><p> 圖6 新建工程(文件視圖)<
43、;/p><p> 2.建立工程后選擇編寫代碼的文件格式。新建文件見圖7。</p><p> 圖7 新建Verilog HDL文件</p><p> 3.文件編寫完成后保存,然后設(shè)置編譯的器件,我們選擇EP2C5Q208C8,無用管腳設(shè)置為三態(tài),同時設(shè)置為標準的I/O口。完成后可以選擇分步編譯,也可以選擇全編譯。全編譯分4個過程,Analysis &
44、Synthesis,Fitter,Assembler,TimeQuest Timing Analysis。每個過程都編譯完成后可以直觀的看到資源占用情況、引腳占用情況等。編譯見圖8,圖9。</p><p><b> 圖8 編譯工程</b></p><p><b> 圖9 編譯結(jié)果</b></p><p> 4.在
45、編譯完成后下載到板子實現(xiàn)前需要進行管腳分配。見圖10。</p><p><b> 圖10 管腳分配</b></p><p> 5.管腳分配完成后,需要再次進行全編譯,然后通過USB下載器通過JTAG或AS模式下載到芯片內(nèi)。見圖11。</p><p> 圖11 JTAG模式下載程序</p><p><b>
46、 4.仿真與調(diào)試</b></p><p> 仿真用的是的波形仿真工具,通過分析波形來驗證設(shè)計的邏輯是否正確,這種方式快捷、直觀。是仿真的基本方法。</p><p><b> 頂層模塊仿真圖</b></p><p> 圖12 頂層模塊仿真圖</p><p><b> 音階發(fā)生器仿真圖<
47、/b></p><p> 圖13 音階發(fā)生器仿真圖</p><p><b> 數(shù)控分頻模塊仿真圖</b></p><p> 圖14 數(shù)控分頻模塊仿真圖</p><p><b> 自動演奏模塊仿真圖</b></p><p> 圖15 自動演奏模塊仿真圖</
48、p><p> 從圖分析可知,仿真結(jié)果與設(shè)計預(yù)想一致。邏輯沒有錯誤,是正確的。</p><p> 本設(shè)計在FPGA實驗板上驗證通過,功能均得到實現(xiàn),效果良好。設(shè)計是成功的。實驗板搭載的FPGA芯片是EP2C8Q208C8,帶有蜂鳴器,按鍵,LED燈,數(shù)碼管,串口,視頻編碼解碼模塊,VGA接口,SD卡接口,SDRAM內(nèi)存芯片,EEPROM等豐富的資源。對初級學(xué)習(xí)應(yīng)用來說足夠了,還可以跑Nios
49、 II,完成高級功能應(yīng)用。</p><p> 該電子琴設(shè)計只用到FPGA芯片,按鍵,蜂鳴器等資源。由于板載的按鍵只有5個,所以在進行管腳分配時,只分配了8音中的4個音,還有一個鍵是控制自動播放的。按一下,播放編制好的《梁祝》,長按是暫停。BUTTON1到BUTTON4分別是中音1到中音4。實驗板如圖16所示。</p><p> 圖16 FPGA實驗板5.心得與體會</p>
50、<p> 通過對測試結(jié)果的分析,我們發(fā)現(xiàn)采用FPGA所設(shè)計的電子琴系統(tǒng)設(shè)計趨于簡單、開發(fā)時間短;外圍器件少,體積小,抗干擾能力強,可靠性高;系統(tǒng)維護起來更方便、快捷.尤其對于設(shè)計者來說,不需要考慮太多的硬件設(shè)計,只需要有自己的設(shè)計思路,編程實現(xiàn)再用燒到FPGA器件中進行測試就可以了。電子琴作為一種樂器,成本不是很高,因此有一定的生產(chǎn)價值。</p><p> 在這次FPGA課程設(shè)計之前,其實做過了單
51、片機關(guān)于蜂鳴器方面的實驗,上手起來還是很快的。按照要求,寫規(guī)范,確定實現(xiàn)方案,然后在逐一細化,一步一步按照要求去完成整個設(shè)計。本次設(shè)計到用QuartusII軟件,老師教學(xué)用的是ISE軟件,由于上學(xué)期學(xué)EDA課程時教材用的是QuartusII,自己也買了一塊FPGA實驗板,一開始用的就是QuartusII,所以這次依然用的是QuartusII,用起來習(xí)慣。軟件只是開發(fā)用的工具,掌握其中一種,其他的都大同小異。</p><
52、;p> 硬件軟件化應(yīng)該是今后的發(fā)展趨勢,ASIC固然有他先天的優(yōu)勢,但是現(xiàn)在的設(shè)計對效率、成本、功耗的要求越來越嚴格。高的時間效率,高的硬件利用效率,低的時間成本、低的經(jīng)濟成本,低能耗,都是推向市場、占領(lǐng)市場的至關(guān)要素。通過FPGA這種半定制化的解決方案,設(shè)計者可以快速的驗證設(shè)計的正確性、可行性。借鑒一些軟件的開發(fā)設(shè)計思想和手段來做硬件,將會解決很多以前難以解決的問題。比如硬件升級,漏洞修復(fù)。只需輕松更新一下FPGA的程序,硬件
53、上做很少改動、甚至不做改動。這樣可維護好,成本低廉。不用像ASIC那樣重新設(shè)計。</p><p> 這個課程設(shè)計同時培養(yǎng)了我的耐心和毅力,一個小小的錯誤就會導(dǎo)致結(jié)果出不來的情況,而對與錯誤的檢查是需要有足夠的耐心,由于這個課程設(shè)計也使我積累了一定的經(jīng)驗,相信這些經(jīng)驗在我以后的學(xué)習(xí)和工作中會有很大的作用。此課程設(shè)計也使我了解了VERILOG_HDL設(shè)計的方便和靈活性,這的確是我們跨入計算機硬件行業(yè)很好的一次鍛煉機
54、會。</p><p><b> 6.參考文獻</b></p><p> [1] VerilogHDL電路設(shè)計指導(dǎo)書. 華為. 2000.04 </p><p> [2] FPGA設(shè)計流程指南. 華為. 2001.08</p><p> [3] 可編程邏輯器件原理及應(yīng)用. 朱明程. 西安電子科技大學(xué)出版社. 200
55、4</p><p> [4] 數(shù)字電路EDA入門. 張亦華. 北京郵電大學(xué)出版社. 2003</p><p> [5] Xilinx、Altera公司產(chǎn)品手冊</p><p><b> 7.附錄</b></p><p> 7.1 EP2C8Q208C8參數(shù)</p><p> Number
56、 of Logic Elements8256</p><p> Number of Labs/clbs516</p><p> Total RAM Bits165888</p><p> Number of I/Os138</p><p> Voltage Supply1.15V ~ 1.25V</p><
57、;p> Mounting TypeSurface Mount</p><p> Operating Temperature0℃ ~ 85℃</p><p> Package/Case208-MQFP,208-PQFP</p><p> Lead Free Status/RoFS StatusContains lead/RoHS non-comp
58、liant</p><p> Other names544-1456</p><p><b> 7.2 模塊程序</b></p><p><b> 頂層模塊</b></p><p><b> /**</b></p><p> * 文件名:o
59、rgan.v</p><p> * 說 明:頂層模塊</p><p> * 作 者:何 梁</p><p> * 時 間:2013-6-10</p><p> * 版 本:1.0</p><p><b> */</b></p><p> modu
60、le organ(clk, key, auto, spkout,led);</p><p> inputclk;//50MHz時鐘</p><p> input[3:0]key;//按鍵</p><p> inputauto;//自動演奏</p><p> outputspkou
61、t;//音頻輸出</p><p> output[7:0]led;//LED指示燈</p><p> wire[7:0]_index;//模塊中間連接信號</p><p> wire[31:0]_tone;</p><p> wire_flag;</p><p>
62、 //----------------- 模塊例化調(diào)用 ---------------------//</p><p> automusicU1(clk, auto, key, _flag, _index);</p><p> toneU2(_index, _tone, led);</p><p> speakerU3(clk, _tone,
63、_flag, spkout);</p><p><b> endmodule</b></p><p><b> 2.音調(diào)發(fā)生器模塊</b></p><p><b> /**</b></p><p> * 文件名:tone.v</p><p>
64、 * 說 明:音調(diào)發(fā)生器模塊</p><p> * 作 者:何 梁</p><p> * 時 間:2013-6-10</p><p> * 版 本:1.0</p><p><b> */</b></p><p> module tone(index, tone0, cod
65、e);</p><p> input[7:0]index;</p><p> output[31:0]tone0;</p><p> output[7:0]code;</p><p> reg[31:0]tone0;</p><p> reg[7:0]code;&
66、lt;/p><p> //------------------- 根據(jù)index輸出分頻系數(shù) -------------------//</p><p> always @ (index) begin</p><p> case (index)</p><p> 8'b0000_0001:tone0 <= 1912; /
67、/code <= 8'b1111_1110;</p><p> 8'b0000_0010:tone0 <= 1730; //code <= 8'b1111_1100;</p><p> 8'b0000_0100:tone0 <= 1518;//code <= 8'b1111_1000;</p>
68、<p> 8'b0000_1000:tone0 <= 1432;//code <= 8'b1111_0000;</p><p> 8'b0001_0000:tone0 <= 1336;//code <= 8'b1110_0000;</p><p> 8'b0010_0000:tone0 <= 1
69、136;//code <= 8'b1100_0000;</p><p> 8'b0100_0000:tone0 <= 1012;//code <= 8'b1000_0000;</p><p> 8'b1000_0000:tone0 <= 956;//code <= 8'b0000_0000;</p&
70、gt;<p> default:tone0 <= 0;</p><p><b> endcase</b></p><p><b> end</b></p><p> //---------------- ---- 生成LED指示燈編碼 --------------------//</
71、p><p> always @ (index) begin</p><p> case (index)</p><p> 8'b0000_0001:code <= 8'b1111_1110;</p><p> 8'b0000_0010:code <= 8'b1111_1100;</p&
72、gt;<p> 8'b0000_0100:code <= 8'b1111_1000;</p><p> 8'b0000_1000:code <= 8'b1111_0000;</p><p> 8'b0001_0000:code <= 8'b1110_0000;</p><p>
73、; 8'b0010_0000:code <= 8'b1100_0000;</p><p> 8'b0100_0000:code <= 8'b1000_0000;</p><p> 8'b1000_0000:code <= 8'b0000_0000;</p><p> default:
74、code <= 8'b1111_1111;</p><p><b> endcase</b></p><p><b> end</b></p><p><b> endmodule</b></p><p><b> 3.自動演奏模塊</b
75、></p><p><b> /**</b></p><p> * 文件名:automusic.v</p><p> * 說 明:自動演奏模塊</p><p> * 作 者:何 梁</p><p> * 時 間:2013-6-11</p><p&g
76、t; * 版 本:1.0</p><p><b> */</b></p><p> module automusic(clk, auto, key, flag, index);</p><p> inputclk;</p><p> inputauto;</p><p
77、> input[3:0]key;</p><p> outputflag;</p><p> output[7:0]index;</p><p> reg[7:0]index1;//按鍵演奏編碼</p><p> reg[7:0]index2;//自動演奏編碼<
78、;/p><p> regauto;</p><p> reg[31:0]cnt_4Hz;</p><p> regclk_4Hz;//4Hz節(jié)拍</p><p> reg[31:0]music_addr;//曲子地址</p><p> assign ind
79、ex = auto ? index1: index2;//演奏 or 自動播放?</p><p> //--------------------- 分頻產(chǎn)生4Hz信號 --------------------//</p><p> always @ (posedge clk) begin</p><p> cnt_4Hz <= cnt_4Hz + 1&
80、#39;b1;</p><p> if (cnt_4Hz == 32'd100_000_000) begin</p><p> cnt_4Hz <= 32'b0;</p><p> clk_4Hz <= clk_4Hz^auto;</p><p><b> end</b></p&
81、gt;<p><b> end</b></p><p> //--------------------- 檢測按鍵并編碼 ------------------------//</p><p> always @ (key) begin</p><p> case (key)</p><p> 4
82、'b1110:index1 <= 8'b0001_0000;</p><p> 4'b1101:index1 <= 8'b0010_0000;</p><p> 4'b1011:index1 <= 8'b0100_0000;</p><p> 4'b0111:index1 <
83、;= 8'b1000_0000;</p><p> default: index1 <= 8'b0000_0000;</p><p><b> endcase</b></p><p><b> end</b></p><p> always @ (key)begi
84、n</p><p> case (key)</p><p> 4'b1110:flag <= 1'b1;</p><p> 4'b1101: flag <= 1'b1;</p><p> 4'b1011: flag <= 1'b1;</p><p&
85、gt; 4'b0111: flag <= 1'b1;</p><p> default:flag <= 1'b0;</p><p><b> endcase</b></p><p><b> end</b></p><p> //-----------
86、-------- 讀取保存的音樂節(jié)拍 -----------------------//</p><p> always @ (posedge clk_4Hz)begin</p><p> if (music_addr == 32'd64)</p><p> music_addr <= 32'd0;</p><p&g
87、t;<b> else</b></p><p> music_addr <= music_addr + 1'b1;</p><p> case (music_addr)</p><p> 0:index2<= 8'b00000011; </p><p> 1: index2&
88、lt;= 8'b00000011; </p><p> 2: index2<= 8'b00000011; </p><p> 3: index2<= 8'b00000011; </p><p> 4: index2<= 8'b00000101; </p><p> 5:
89、index2<= 8'b00000101; </p><p> 6: index2<= 8'b00000101; </p><p> 7: index2<= 8'b00000110; </p><p> 8: index2<= 8'b00010000; </p><p&
90、gt; 9: index2<= 8'b00010000; </p><p> 10:index2<= 8'b00010000; </p><p> 11:index2<= 8'b00100000; </p><p> 12:index2<= 8'b00000110; </p>
91、<p> 13:index2<= 8'b00010000; </p><p> 14:index2<= 8'b00000101; </p><p> 15:index2<= 8'b00000101; </p><p> 16:index2<= 8'b01010000; &
92、lt;/p><p> 17:index2<= 8'b01010000; </p><p> 18:index2<= 8'b01010000; </p><p> 19:index2<= 8'b00000000; </p><p> 20:index2<= 8'b0
93、1100000; </p><p> 21:index2<= 8'b01010000; </p><p> 22:index2<= 8'b00110000; </p><p> 23:index2<= 8'b01010000; </p><p> 24:index2<=
94、8'b00100000; </p><p> 25:index2<= 8'b00100000; </p><p> 26:index2<= 8'b00100000; </p><p> 27:index2<= 8'b00100000; </p><p> 28:index
95、2<= 8'b00100000; </p><p> 29:index2<= 8'b00100000; </p><p> 30:index2<= 8'b00100000; </p><p> 31:index2<= 8'b00100000; </p><p> 3
96、2:index2<= 8'b00100000; </p><p> 33:index2<= 8'b00100000; </p><p> 34:index2<= 8'b00100000; </p><p> 35:index2<= 8'b00110000; </p><
97、;p> 36:index2<= 8'b00000111; </p><p> 37:index2<= 8'b00000111; </p><p> 38:index2<= 8'b00000110; </p><p> 39:index2<= 8'b00000110; </p
98、><p> 40:index2<= 8'b00000101; </p><p> 41:index2<= 8'b00000101; </p><p> 42:index2<= 8'b00000101; </p><p> 43:index2<= 8'b0000011
99、0; </p><p> 44:index2<= 8'b00010000; </p><p> 45:index2<= 8'b00010000; </p><p> 46:index2<= 8'b00100000; </p><p> 47:index2<= 8'
100、;b00100000; </p><p> 48:index2<= 8'b00000011; </p><p> 49:index2<= 8'b00000011; </p><p> 50:index2<= 8'b00010000; </p><p> 51:index2&
101、lt;= 8'b00010000; </p><p> 52:index2<= 8'b00000110; </p><p> 53:index2<= 8'b00000101; </p><p> 54:index2<= 8'b00000110; </p><p> 55:
102、index2<= 8'b00010000; </p><p> 56:index2<= 8'b00000101; </p><p> 57:index2<= 8'b00000101; </p><p> 58:index2<= 8'b00000101; </p><
103、p> 59:index2<= 8'b00000101; </p><p> 60:index2<= 8'b00000101; </p><p> 61:index2<= 8'b00000101; </p><p> 62:index2<= 8'b00000101; </p&g
104、t;<p> 63:index2<= 8'b00000101;</p><p> default:index2 <= 8'b00000000;</p><p><b> endcase</b></p><p><b> end</b></p><p&
105、gt;<b> endmodule</b></p><p><b> 4.數(shù)控分頻模塊</b></p><p><b> /**</b></p><p> * 文件名:speaker.v</p><p> * 說 明:數(shù)控分頻模塊</p><
106、p> * 作 者:何 梁</p><p> * 時 間:2013-6-11</p><p> * 版 本:1.0</p><p><b> */</b></p><p> module speaker(clk, tone1, flag, spkout);</p><p>
107、; input[31:0]tone1;</p><p> inputclk;</p><p> inputflag;</p><p> outputspkout;</p><p> reg[31:0]cnt;</p><p> regclk_1MH
108、z;</p><p> reg[31:0]tonex;</p><p> reg_spkout;</p><p> regspkout;</p><p> //------------------- 產(chǎn)生1MHz預(yù)分頻時鐘 --------------------//</p><
109、p> always @ (posedge clk) begin</p><p> cnt <= cnt + 1'b1;</p><p> if (cnt == 32'd50) begin</p><p> cnt <= 32'b0;</p><p> clk_1MHz <= !clk_
110、1MHz;</p><p><b> end</b></p><p><b> end</b></p><p> //-------------------- 可變分頻器 ---------------------------//</p><p> always @ (posedge cl
111、k_1MHz) begin</p><p> tonex <= tonex + 1'b1;</p><p> if (tonex == tone1) begin</p><p> tonex <= 32'b0;</p><p> _spkout <= !_spkout;</p><
112、p><b> end</b></p><p><b> end</b></p><p> //-------------------- 音頻輸出開關(guān) ------------------------//</p><p> always @ (_spkout) begin</p><p>
113、; if (flag == 1'b1)</p><p> spkout <= _spkout;</p><p><b> else</b></p><p> spkout <= 0;</p><p><b> end</b></p><p>&l
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- fpga課程設(shè)計
- fpga課程設(shè)計
- fpga課程設(shè)計報告書
- fpga課程設(shè)計--交通燈設(shè)計
- fpga課程設(shè)計---基于fpga多功能電子鐘設(shè)計
- 基于fpga的數(shù)字時鐘課程設(shè)計
- fpga課程設(shè)計--簡易電子琴設(shè)計及fpga功能驗證
- fpga課程設(shè)計--簡易電子琴設(shè)計及fpga功能驗證
- fpga正交信號發(fā)生器課程設(shè)計
- 基于fpga的交通燈課程設(shè)計
- 基于fpga的數(shù)字鐘課程設(shè)計
- 基于fpga的異步電機課程設(shè)計
- 課程設(shè)計--基于fpga的數(shù)字鐘設(shè)計
- 課程設(shè)計-基于fpga的vga圖像顯示設(shè)計
- 基于fpga的交通燈設(shè)計課程設(shè)計
- fpga課程設(shè)計報告--基于fpga的fir濾波器的設(shè)計
- 基于fpga的異步電機課程設(shè)計
- eda課程設(shè)計---基于fpga的數(shù)字鐘設(shè)計
- 基于fpga的樂曲演奏電路設(shè)計課程設(shè)計
- fpga課程設(shè)計源碼-時鐘-樂曲-函數(shù)信號電路
評論
0/150
提交評論