版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)任務(wù)書(shū)</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í)書(shū)寫(xiě)課程設(shè)計(jì)報(bào)告。</p><p> 2.按照要求編寫(xiě)程序,并仿真調(diào)試電路功能。</p><p><b> 設(shè)計(jì)要求:</b></p><p> 1.設(shè)計(jì)一個(gè)八音電子琴</p>
3、<p> 2.由鍵盤輸入控制音響</p><p><b> 3.可自動(dòng)演奏樂(lè)曲</b></p><p><b> 參考文獻(xiàn):</b></p><p> 1.VerilogHDL電路設(shè)計(jì)指導(dǎo)書(shū). 華為. 2000.04 </p><p> 2.FPGA設(shè)計(jì)流程指南. 華為. 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)域的擴(kuò)大與深入,EDA技術(shù)在電子信息、通信、自動(dòng)控制用計(jì)算機(jī)等領(lǐng)域的重要性日益突出。專用集成電路(ASIC)和用戶現(xiàn)場(chǎng)可編程門陣列(FPGA)的復(fù)雜度越來(lái)越高。數(shù)字通信、工業(yè)自動(dòng)化控制等領(lǐng)域所用的數(shù)字電路
6、及系統(tǒng)其復(fù)雜程度也越來(lái)越高,特別是需要設(shè)計(jì)具有實(shí)時(shí)處理能力的信號(hào)處理專用集成電路,并把整個(gè)電子系統(tǒng)綜合到一個(gè)芯片上。設(shè)計(jì)并驗(yàn)證這樣復(fù)雜的電路及系統(tǒng)已不再是簡(jiǎn)單的個(gè)人勞動(dòng),而需要綜合許多專家的經(jīng)驗(yàn)和知識(shí)才能夠完成。由于電路制造工藝技術(shù)進(jìn)步非常迅速,電路設(shè)計(jì)能力趕不上技術(shù)的進(jìn)步。在數(shù)字邏輯設(shè)計(jì)領(lǐng)域,迫切需要一種共同的工業(yè)標(biāo)準(zhǔn)來(lái)統(tǒng)一對(duì)數(shù)字邏輯電路及系統(tǒng)的描述,這樣就能把系統(tǒng)設(shè)計(jì)工作分解為邏輯設(shè)計(jì)(前端)和電路實(shí)現(xiàn)(后端)兩個(gè)互相獨(dú)立而又相關(guān)的
7、部分。由于邏輯設(shè)計(jì)的相對(duì)獨(dú)立性就可以把專家們?cè)O(shè)計(jì)的各種常用數(shù)字邏輯電路和系統(tǒng)部件建成宏單元(Megcell)或軟核(Soft-Core)庫(kù)供設(shè)計(jì)者引用,以減少重復(fù)勞動(dòng),提高工作效率。電路的實(shí)現(xiàn)則可借助于綜合工具和布局布線工具(與具體工藝技術(shù)有關(guān))來(lái)自動(dòng)地完成。VHDL和Verilog HDL這兩種工業(yè)標(biāo)準(zhǔn)的產(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è)計(jì)1</b></p><p><b> 1.1設(shè)計(jì)要求1</b></p><p><b> 1.2方案比較
12、1</b></p><p><b> 1.3方案論證2</b></p><p><b> 2.模塊設(shè)計(jì)3</b></p><p> 2.1頂層模塊設(shè)計(jì)3</p><p> 2.2數(shù)控分頻模塊設(shè)計(jì)4</p><p> 2.3音調(diào)發(fā)生器模塊設(shè)計(jì)6
13、</p><p> 2.4自動(dòng)演奏模塊設(shè)計(jì)7</p><p><b> 3.軟件設(shè)計(jì)8</b></p><p> 3.1 Verilog HDL硬件描述語(yǔ)言概述8</p><p><b> 3.2模塊說(shuō)明9</b></p><p> 3.3軟件實(shí)現(xiàn)過(guò)程10
14、</p><p> 4.仿真與調(diào)試13</p><p> 5.心得與體會(huì)15</p><p><b> 6.參考文獻(xiàn)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è)計(jì)</b></p><p><b> 1.1設(shè)計(jì)要求</b></p><p> 1.設(shè)計(jì)一個(gè)八音電子琴</p><p> 2.由鍵盤輸入控制音響</p><p><b>
16、3.可自動(dòng)演奏樂(lè)曲</b></p><p><b> 1.2方案比較 </b></p><p> 方案一:用ASIC 實(shí)現(xiàn),這種電路很直觀,簡(jiǎn)單方便。但應(yīng)用數(shù)字邏輯設(shè)計(jì)復(fù)雜,使用的器件復(fù)雜,體積不易控制,功耗較大。電路設(shè)計(jì)及維護(hù)不方便,而且電路的保密性和安全性不易保證,使設(shè)計(jì)的穩(wěn)定度和可靠性大大降低。</p><p> 方案
17、二:運(yùn)用單片機(jī)實(shí)現(xiàn),這種設(shè)計(jì)方案思路直接,簡(jiǎn)單可行,但是單片機(jī)的運(yùn)行速度和時(shí)鐘頻率是設(shè)計(jì)的弊端,而且程序運(yùn)行可能由于環(huán)境影響而不穩(wěn)定,同時(shí)要在外部設(shè)計(jì)存儲(chǔ)器件,使設(shè)計(jì)變得復(fù)雜。</p><p> 方案三:基于FPGA芯片設(shè)計(jì),這種方案使設(shè)計(jì)思路變得清晰明了,設(shè)計(jì)時(shí)只需使用verilog語(yǔ)言描述出所需的電路模塊。再把電路代碼綜合后布局布線映射成電路網(wǎng)表。使其成為從語(yǔ)言到電路的轉(zhuǎn)換,方法簡(jiǎn)便,思路清晰,并且芯片具有
18、豐富的資源滿足設(shè)計(jì)要求。采用現(xiàn)場(chǎng)可編程邏輯門陣列器件(FPGA)制作,將所有器件集成在一塊芯片上,體積大大減小,用verilog編程實(shí)現(xiàn)時(shí)更加方便,易于進(jìn)行功能擴(kuò)展,并可調(diào)試仿真,制作時(shí)間大大縮短。因此選擇第三種方案。</p><p><b> 1.3方案論證</b></p><p> 電路的樂(lè)曲演奏原理:組成樂(lè)曲的每個(gè)音符持續(xù)的時(shí)間(音長(zhǎng)),頻率值(音調(diào))以及音
19、色(主要由演奏的樂(lè)器決定的)是樂(lè)曲能連續(xù)輸出悅耳聲音的基本要素,因此要使音響發(fā)出悅耳的樂(lè)曲聲就要控制輸出到音響的激勵(lì)信號(hào)的頻率的和各個(gè)頻率信號(hào)持續(xù)的時(shí)間。由于各種條件的的限制,本系統(tǒng)僅僅是通過(guò)控制音長(zhǎng)和音調(diào)來(lái)實(shí)現(xiàn)多功能電子琴的設(shè)計(jì),而音色由于受器件的類型和質(zhì)量的影響所以不易控制不在設(shè)計(jì)之內(nèi)。</p><p> 通過(guò)模式選擇電路可以選擇相應(yīng)的三種模式:按鍵演奏,自動(dòng)播放音樂(lè),按鍵輸入并回放音樂(lè)。按鍵演奏電路通過(guò)設(shè)
20、計(jì)分頻器輸出產(chǎn)生不同頻率給音響從而產(chǎn)生不同音階聲音;自動(dòng)播放音樂(lè)電路可以通過(guò)設(shè)計(jì)ROM和一個(gè)程序計(jì)數(shù)器來(lái)實(shí)現(xiàn),有程序計(jì)數(shù)器來(lái)實(shí)現(xiàn)地址的選擇ROM中存儲(chǔ)的分頻數(shù),然后將分頻數(shù)輸入音響實(shí)現(xiàn)音樂(lè)播放功能;按鍵輸入并回放音樂(lè)電路是通過(guò)設(shè)計(jì)按鍵演奏電路,同時(shí)設(shè)計(jì)讀寫(xiě)時(shí)鐘計(jì)數(shù)器作為選擇地址,通過(guò)對(duì)RAM的操作實(shí)現(xiàn)對(duì)輸入音樂(lè)的自動(dòng)回放功能。由于設(shè)計(jì)合情合理,又有科學(xué)依據(jù),所以經(jīng)過(guò)科學(xué)論證該設(shè)計(jì)可以實(shí)現(xiàn)。</p><p>&l
21、t;b> 2.模塊設(shè)計(jì)</b></p><p> 本設(shè)計(jì)采用模塊化設(shè)計(jì)方法,由頂層模塊(top.v)、音階發(fā)生器模塊(tone.v)、數(shù)控分頻模塊(speaker.v)和自動(dòng)演奏模塊(automusic.v)組成</p><p><b> 2.1頂層模塊設(shè)計(jì)</b></p><p> 整個(gè)多功能電子琴的設(shè)計(jì)分為幾個(gè)模塊
22、,系統(tǒng)是由底層設(shè)計(jì)到頂層設(shè)計(jì)的思想和方法。通過(guò)軟件編程和仿真對(duì)各個(gè)底層模塊設(shè)計(jì)即實(shí)現(xiàn),然后對(duì)底層模塊的連接實(shí)現(xiàn)頂層模塊的設(shè)計(jì),這樣的設(shè)計(jì)具有巨大的設(shè)計(jì)優(yōu)勢(shì),由于通過(guò)軟件編程設(shè)計(jì)特定的電路或模塊,而且該電路或模塊可以重用形成用戶的庫(kù),通過(guò)軟件編程設(shè)計(jì)使程序編譯成具有形象封裝的功能器件,這些功能器件不僅可以從程序到器件相互裝換,還可以由各個(gè)功能器件聯(lián)接生成高密度集成器件,以及相應(yīng)的IP核。ALTERA公司為我們提供了功能齊全而且豐富的IP核
23、,這樣給設(shè)計(jì)帶來(lái)了巨大的方便,生成同時(shí)通過(guò)底層的設(shè)計(jì)到頂層設(shè)計(jì)模塊重用得到廣泛應(yīng)用,也提高了設(shè)計(jì)的效率和周期。避免了設(shè)計(jì)的重復(fù)進(jìn)行,使得高集成度的電路開(kāi)發(fā)變成現(xiàn)實(shí)。而且特定的IP核已經(jīng)成為知識(shí)產(chǎn)權(quán)加以保護(hù)。</p><p> 頂層模塊由樂(lè)曲自動(dòng)演奏(automusic),音調(diào)發(fā)生器(tone)和數(shù)控分頻器(speaker)三個(gè)模塊組成。其中樂(lè)曲演奏部分又包括了鍵盤編碼。設(shè)置一個(gè)自動(dòng)演奏/鍵盤輸入切換auto,即
24、當(dāng)auto=“0”時(shí),選擇自動(dòng)演奏音樂(lè)存儲(chǔ)器里面的樂(lè)曲,auto=“1”時(shí),選擇鍵盤輸入的信號(hào)。系統(tǒng)RTL圖如圖1。</p><p> 圖1 系統(tǒng)RTL圖</p><p> 2.2數(shù)控分頻模塊設(shè)計(jì)</p><p> 數(shù)控分頻模塊(speaker.v)對(duì)時(shí)基脈沖進(jìn)行分頻,得到與1、2、3、4、5、6、7七個(gè)音符對(duì)應(yīng)頻率。該模塊主要由三個(gè)Verilog語(yǔ)言alw
25、ays塊構(gòu)成。首先對(duì)FPGA的50MHz的時(shí)基脈沖進(jìn)行分頻得到1MHz的脈沖,然后按照tone1輸入的分頻系數(shù)對(duì)1MHz的脈沖再次分頻,得到所需要的音符頻率。第三個(gè)always塊的作用是在音調(diào)輸出時(shí)再進(jìn)行二分頻,將脈沖展寬,使揚(yáng)聲器有足夠發(fā)聲功率。</p><p> 該模塊是通過(guò)音階對(duì)應(yīng)的頻率的計(jì)算得到各個(gè)對(duì)應(yīng)頻率的分頻的數(shù)值,然后將分頻的數(shù)值送給分頻器則會(huì)產(chǎn)生不同頻率的脈沖,然后將脈沖送給音響則會(huì)產(chǎn)生不同的音
26、階的聲音。輸出的脈沖是占空比為50%的方波,實(shí)際聽(tīng)起來(lái)跟真實(shí)的電子琴聲音有些差異,這是因?yàn)楦鷮?shí)際的波形不完全一致造成的。實(shí)際的電子琴可能還含有一些其他的諧波成分,音色不一樣。</p><p> 下表說(shuō)明了各個(gè)音頻對(duì)應(yīng)的頻率。</p><p> 表一:簡(jiǎn)譜中的音名與頻率的關(guān)系</p><p> 在本設(shè)計(jì)中,只設(shè)計(jì)了中音的7個(gè)音再加上高音1,總共8個(gè)音。頻率f與分
27、頻系數(shù)tone1的關(guān)系為: (Hz),例如中音1,它的頻率是523.3Hz,它對(duì)應(yīng)的分頻系數(shù)為tone1=1000000/523.3=1910.9.在實(shí)際中取整數(shù)1910。這樣得到的頻率是523.6Hz。誤差為,這樣的誤差是很小的,可以忽略。由此可見(jiàn)設(shè)計(jì)的精度還是很高的。</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è)計(jì)</p><p> 音調(diào)發(fā)生器模塊(tone.v)的作用是產(chǎn)生獲得音階的分頻預(yù)置值。當(dāng)8位發(fā)聲控制輸入index中的某一位為高電平時(shí),則對(duì)應(yīng)某一音階的數(shù)值
29、將在端口tone0輸出,該數(shù)值即為該音階的分頻預(yù)置值,分頻預(yù)置值控制數(shù)控分頻器來(lái)對(duì)1MHz的脈沖進(jìn)行分頻,由此可得到每個(gè)音階對(duì)應(yīng)的頻率。例如輸入index=“00000001”,即對(duì)應(yīng)的按鍵是1,產(chǎn)生的分頻系數(shù)便是1910;code輸出對(duì)應(yīng)音階的LED燈點(diǎn)亮數(shù)目。</p><p> 該模塊主要由兩個(gè)always塊構(gòu)成,第一個(gè)完成從index到tone0的譯碼過(guò)程,另一個(gè)完成從index到code的譯碼。tone
30、0為分頻預(yù)置值,被送到數(shù)控分頻器模塊產(chǎn)生相應(yīng)頻率的音頻信號(hào)。音階與預(yù)置分頻系數(shù)的關(guān)系見(jiàn)下表。</p><p> 表二:分頻系數(shù)與音階的關(guān)系</p><p> Code為L(zhǎng)ED燈信號(hào),全滅代表沒(méi)有鍵被按下,點(diǎn)亮1個(gè)代表生成了中音1,點(diǎn)亮2個(gè)代表生成了中音2,以此類推。設(shè)計(jì)的LED為低電平點(diǎn)亮的,code的某位為0,則該LED點(diǎn)亮。例如code=”11111110”,則最右邊的即第1個(gè)LE
31、D點(diǎn)亮。code與音階的關(guān)系見(jiàn)下表。</p><p> 表三:code與音階的關(guān)系</p><p> 2.4自動(dòng)演奏模塊設(shè)計(jì)</p><p> 每個(gè)音符的持續(xù)時(shí)間則由樂(lè)曲的速度以及節(jié)拍數(shù)來(lái)確定的。所以,必須知道樂(lè)曲的速度和每個(gè)音符所對(duì)應(yīng)的節(jié)拍數(shù)才能控制音符的音長(zhǎng),而在這個(gè)設(shè)計(jì)中所演奏的樂(lè)曲的最短的音符為四分音符,全音符的持續(xù)時(shí)間為1秒,則一拍所應(yīng)該持續(xù)的時(shí)間應(yīng)
32、為0.25秒,則只需要一個(gè)4HZ的時(shí)鐘頻率即可產(chǎn)生四分音符的時(shí)長(zhǎng)。通過(guò)編寫(xiě)樂(lè)曲文件就可以讓系統(tǒng)知道現(xiàn)在應(yīng)該演奏哪個(gè)音符,而這個(gè)音符持續(xù)的時(shí)間是按樂(lè)曲文件中音符是按地址存放的,當(dāng)ROM工作時(shí)就按4Hz的頻率依次讀取音符,當(dāng)讀ROM的某個(gè)音符時(shí)就對(duì)應(yīng)發(fā)這個(gè)音符的音調(diào),持續(xù)時(shí)間為0.25秒。</p><p> 音樂(lè)存儲(chǔ)模塊的作用是產(chǎn)生8位發(fā)聲控制輸入index。當(dāng) auto為“0”時(shí),由存儲(chǔ)在此模塊中的8位二進(jìn)制數(shù)作
33、為發(fā)聲控制輸入,可自動(dòng)演奏樂(lè)曲。模塊的Verilog程序中包括兩個(gè)always塊,首先是對(duì)時(shí)基脈沖進(jìn)行分頻得到4Hz的脈沖,作為第第二個(gè)always塊的時(shí)鐘信號(hào),它用來(lái)控制每個(gè)音階之間的停頓時(shí)間, 1/4=0.25s;第二個(gè)always塊是音樂(lè)的存儲(chǔ),可根據(jù)需要編寫(xiě)不同的樂(lè)曲。在本設(shè)計(jì)中存儲(chǔ)了一首《梁?!?。</p><p> 自動(dòng)音樂(lè)播放的流程見(jiàn)圖4.</p><p> 圖4 自動(dòng)音樂(lè)
34、播放流程圖</p><p><b> 3.軟件設(shè)計(jì)</b></p><p> 3.1 Verilog HDL硬件描述語(yǔ)言概述</p><p> Verilog HDL和VHDL一樣,是目前大規(guī)模集成電路設(shè)計(jì)中最具代表性、使用最廣泛的硬件描述語(yǔ)言之一。 作為硬件描述語(yǔ)言,Verilog HDL具有如下特點(diǎn):1.由于該語(yǔ)言的特點(diǎn)使得代碼描述與
35、具體工藝的實(shí)現(xiàn)無(wú)關(guān),提高了設(shè)計(jì)的可重用性,便于設(shè)計(jì)的標(biāo)準(zhǔn)化。如果有C語(yǔ)言的編程經(jīng)驗(yàn)的設(shè)計(jì)人員,只需短暫的時(shí)間就能學(xué)會(huì)和掌握Verilog HDL語(yǔ)言。2.它能夠在各個(gè)抽象層次的描述上對(duì)設(shè)計(jì)進(jìn)行仿真驗(yàn)證,所以它可以及時(shí)發(fā)現(xiàn)可能存在的錯(cuò)誤設(shè)計(jì),縮短了設(shè)計(jì)的周期,并保證整個(gè)了設(shè)計(jì)過(guò)程的完整性與正確性。3.它能夠在不同的抽象層次上,如系統(tǒng)級(jí)、行為級(jí)、RTL(Register Transfer Level)級(jí)也就是寄存器傳輸級(jí)、門級(jí)和開(kāi)關(guān)級(jí),對(duì)設(shè)
36、計(jì)系統(tǒng)進(jìn)行精確而簡(jiǎn)練的描述;因此,Verilog HDL可以作為學(xué)習(xí)HDL設(shè)計(jì)方法的入門和基礎(chǔ)。Verilog HDL的基本結(jié)構(gòu)是由模塊(module)構(gòu)成的,而每個(gè)模塊都對(duì)應(yīng)著硬件電路中各個(gè)邏輯實(shí)體。因此,每個(gè)模塊都有獨(dú)立的結(jié)構(gòu)或功能,以及用于與其它模塊之間相互通信端口。其所寫(xiě)代碼主要是由以下幾部分組成:第一部分是代碼的注釋部分,第二部分是模塊定義行, 第三部</p><p> 本設(shè)計(jì)采用的是Verilog
37、HLD語(yǔ)言。</p><p><b> 3.2模塊說(shuō)明</b></p><p><b> 1.頂層模塊</b></p><p><b> 文件名:top.v</b></p><p> 功 能:對(duì)各子模塊進(jìn)行頂層映射。</p><p> 說(shuō)
38、明:對(duì)automusic.v、speaker.v、tone.v幾個(gè)子模塊進(jìn)行頂層映射。</p><p> 2.音樂(lè)自動(dòng)播放模塊</p><p> 文件名:automusic.v</p><p> 功 能:對(duì)按鍵進(jìn)行檢測(cè)產(chǎn)生index編碼,儲(chǔ)存一首曲子自動(dòng)播放。</p><p> 說(shuō) 明:通過(guò)對(duì)50MHz脈沖分頻得到一個(gè)4Hz的信號(hào)
39、作為節(jié)拍發(fā)生器。4Hz信號(hào)用來(lái)更新曲子存儲(chǔ)器地址,通過(guò)查地址得到譜子,從而達(dá)到自動(dòng)播放音樂(lè)的效果。同時(shí)該模塊還負(fù)責(zé)鍵盤檢測(cè)的任務(wù),不同的按鍵被按下,就產(chǎn)生對(duì)應(yīng)的index編碼,送到后面的tone.v模塊。</p><p><b> 3.音調(diào)發(fā)生器模塊</b></p><p> 文件名:tone.v</p><p> 功 能:根據(jù)輸入的按
40、鍵編碼index,產(chǎn)生對(duì)應(yīng)的預(yù)分頻系數(shù)tone0。</p><p> 說(shuō) 明:該模塊將鍵盤按鍵的編碼值index與分頻數(shù)tone0相對(duì)應(yīng)并且通過(guò)蜂鳴器播放器件輸出音樂(lè)。同樣還產(chǎn)生一個(gè)code編碼,用于LED顯示。編碼是通過(guò)always語(yǔ)句和case語(yǔ)句組合來(lái)完成的。</p><p><b> 數(shù)控分頻模塊</b></p><p> 文件
41、名:speaker.v</p><p> 功 能:根據(jù)輸入的分頻系數(shù)產(chǎn)生對(duì)應(yīng)的音頻信號(hào),并驅(qū)動(dòng)蜂鳴器發(fā)聲。</p><p> 說(shuō) 明:系統(tǒng)時(shí)鐘是50MHz,直接分頻的話分頻系數(shù)會(huì)很大,不方便處理。所以進(jìn)行兩次分頻。第一個(gè)always塊是一個(gè)固定分頻器,將50MHz分到1MHz,作為第二個(gè)分頻器的輸入時(shí)鐘信號(hào)。第二個(gè)always塊是一個(gè)可變分頻器,分頻系數(shù)為tone1端口輸入?yún)?shù),由
42、此來(lái)產(chǎn)生需要的頻率。</p><p><b> 3.3軟件實(shí)現(xiàn)過(guò)程</b></p><p> 1.在QuartusII中建立工程項(xiàng)目,項(xiàng)目存儲(chǔ)在事先建立的工程文件夾內(nèi)。 如圖5,圖6所示。</p><p><b> 圖5 新建工程</b></p><p> 圖6 新建工程(文件視圖)<
43、;/p><p> 2.建立工程后選擇編寫(xiě)代碼的文件格式。新建文件見(jiàn)圖7。</p><p> 圖7 新建Verilog HDL文件</p><p> 3.文件編寫(xiě)完成后保存,然后設(shè)置編譯的器件,我們選擇EP2C5Q208C8,無(wú)用管腳設(shè)置為三態(tài),同時(shí)設(shè)置為標(biāo)準(zhǔn)的I/O口。完成后可以選擇分步編譯,也可以選擇全編譯。全編譯分4個(gè)過(guò)程,Analysis &
44、Synthesis,Fitter,Assembler,TimeQuest Timing Analysis。每個(gè)過(guò)程都編譯完成后可以直觀的看到資源占用情況、引腳占用情況等。編譯見(jiàn)圖8,圖9。</p><p><b> 圖8 編譯工程</b></p><p><b> 圖9 編譯結(jié)果</b></p><p> 4.在
45、編譯完成后下載到板子實(shí)現(xiàn)前需要進(jìn)行管腳分配。見(jiàn)圖10。</p><p><b> 圖10 管腳分配</b></p><p> 5.管腳分配完成后,需要再次進(jìn)行全編譯,然后通過(guò)USB下載器通過(guò)JTAG或AS模式下載到芯片內(nèi)。見(jiàn)圖11。</p><p> 圖11 JTAG模式下載程序</p><p><b>
46、 4.仿真與調(diào)試</b></p><p> 仿真用的是的波形仿真工具,通過(guò)分析波形來(lái)驗(yàn)證設(shè)計(jì)的邏輯是否正確,這種方式快捷、直觀。是仿真的基本方法。</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> 自動(dòng)演奏模塊仿真圖</b></p><p> 圖15 自動(dòng)演奏模塊仿真圖</
48、p><p> 從圖分析可知,仿真結(jié)果與設(shè)計(jì)預(yù)想一致。邏輯沒(méi)有錯(cuò)誤,是正確的。</p><p> 本設(shè)計(jì)在FPGA實(shí)驗(yàn)板上驗(yàn)證通過(guò),功能均得到實(shí)現(xiàn),效果良好。設(shè)計(jì)是成功的。實(shí)驗(yàn)板搭載的FPGA芯片是EP2C8Q208C8,帶有蜂鳴器,按鍵,LED燈,數(shù)碼管,串口,視頻編碼解碼模塊,VGA接口,SD卡接口,SDRAM內(nèi)存芯片,EEPROM等豐富的資源。對(duì)初級(jí)學(xué)習(xí)應(yīng)用來(lái)說(shuō)足夠了,還可以跑Nios
49、 II,完成高級(jí)功能應(yīng)用。</p><p> 該電子琴設(shè)計(jì)只用到FPGA芯片,按鍵,蜂鳴器等資源。由于板載的按鍵只有5個(gè),所以在進(jìn)行管腳分配時(shí),只分配了8音中的4個(gè)音,還有一個(gè)鍵是控制自動(dòng)播放的。按一下,播放編制好的《梁?!罚L(zhǎng)按是暫停。BUTTON1到BUTTON4分別是中音1到中音4。實(shí)驗(yàn)板如圖16所示。</p><p> 圖16 FPGA實(shí)驗(yàn)板5.心得與體會(huì)</p>
50、<p> 通過(guò)對(duì)測(cè)試結(jié)果的分析,我們發(fā)現(xiàn)采用FPGA所設(shè)計(jì)的電子琴系統(tǒng)設(shè)計(jì)趨于簡(jiǎn)單、開(kāi)發(fā)時(shí)間短;外圍器件少,體積小,抗干擾能力強(qiáng),可靠性高;系統(tǒng)維護(hù)起來(lái)更方便、快捷.尤其對(duì)于設(shè)計(jì)者來(lái)說(shuō),不需要考慮太多的硬件設(shè)計(jì),只需要有自己的設(shè)計(jì)思路,編程實(shí)現(xiàn)再用燒到FPGA器件中進(jìn)行測(cè)試就可以了。電子琴作為一種樂(lè)器,成本不是很高,因此有一定的生產(chǎn)價(jià)值。</p><p> 在這次FPGA課程設(shè)計(jì)之前,其實(shí)做過(guò)了單
51、片機(jī)關(guān)于蜂鳴器方面的實(shí)驗(yàn),上手起來(lái)還是很快的。按照要求,寫(xiě)規(guī)范,確定實(shí)現(xiàn)方案,然后在逐一細(xì)化,一步一步按照要求去完成整個(gè)設(shè)計(jì)。本次設(shè)計(jì)到用QuartusII軟件,老師教學(xué)用的是ISE軟件,由于上學(xué)期學(xué)EDA課程時(shí)教材用的是QuartusII,自己也買了一塊FPGA實(shí)驗(yàn)板,一開(kāi)始用的就是QuartusII,所以這次依然用的是QuartusII,用起來(lái)習(xí)慣。軟件只是開(kāi)發(fā)用的工具,掌握其中一種,其他的都大同小異。</p><
52、;p> 硬件軟件化應(yīng)該是今后的發(fā)展趨勢(shì),ASIC固然有他先天的優(yōu)勢(shì),但是現(xiàn)在的設(shè)計(jì)對(duì)效率、成本、功耗的要求越來(lái)越嚴(yán)格。高的時(shí)間效率,高的硬件利用效率,低的時(shí)間成本、低的經(jīng)濟(jì)成本,低能耗,都是推向市場(chǎng)、占領(lǐng)市場(chǎng)的至關(guān)要素。通過(guò)FPGA這種半定制化的解決方案,設(shè)計(jì)者可以快速的驗(yàn)證設(shè)計(jì)的正確性、可行性。借鑒一些軟件的開(kāi)發(fā)設(shè)計(jì)思想和手段來(lái)做硬件,將會(huì)解決很多以前難以解決的問(wèn)題。比如硬件升級(jí),漏洞修復(fù)。只需輕松更新一下FPGA的程序,硬件
53、上做很少改動(dòng)、甚至不做改動(dòng)。這樣可維護(hù)好,成本低廉。不用像ASIC那樣重新設(shè)計(jì)。</p><p> 這個(gè)課程設(shè)計(jì)同時(shí)培養(yǎng)了我的耐心和毅力,一個(gè)小小的錯(cuò)誤就會(huì)導(dǎo)致結(jié)果出不來(lái)的情況,而對(duì)與錯(cuò)誤的檢查是需要有足夠的耐心,由于這個(gè)課程設(shè)計(jì)也使我積累了一定的經(jīng)驗(yàn),相信這些經(jīng)驗(yàn)在我以后的學(xué)習(xí)和工作中會(huì)有很大的作用。此課程設(shè)計(jì)也使我了解了VERILOG_HDL設(shè)計(jì)的方便和靈活性,這的確是我們跨入計(jì)算機(jī)硬件行業(yè)很好的一次鍛煉機(jī)
54、會(huì)。</p><p><b> 6.參考文獻(xiàn)</b></p><p> [1] VerilogHDL電路設(shè)計(jì)指導(dǎo)書(shū). 華為. 2000.04 </p><p> [2] FPGA設(shè)計(jì)流程指南. 華為. 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)品手冊(cè)</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> * 說(shuō) 明:頂層模塊</p><p> * 作 者:何 梁</p><p> * 時(shí) 間: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時(shí)鐘</p><p> input[3:0]key;//按鍵</p><p> inputauto;//自動(dòng)演奏</p><p> outputspkou
61、t;//音頻輸出</p><p> output[7:0]led;//LED指示燈</p><p> wire[7:0]_index;//模塊中間連接信號(hào)</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、 * 說(shuō) 明:音調(diào)發(fā)生器模塊</p><p> * 作 者:何 梁</p><p> * 時(shí) 間: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.自動(dòng)演奏模塊</b
75、></p><p><b> /**</b></p><p> * 文件名:automusic.v</p><p> * 說(shuō) 明:自動(dòng)演奏模塊</p><p> * 作 者:何 梁</p><p> * 時(shí) 間: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;//自動(dòng)演奏編碼<
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 自動(dòng)播放?</p><p> //--------------------- 分頻產(chǎn)生4Hz信號(hào) --------------------//</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> //--------------------- 檢測(cè)按鍵并編碼 ------------------------//</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、-------- 讀取保存的音樂(lè)節(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> * 說(shuō) 明:數(shù)控分頻模塊</p><
106、p> * 作 者:何 梁</p><p> * 時(shí) 間: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ù)分頻時(shí)鐘 --------------------//</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> //-------------------- 音頻輸出開(kāi)關(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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- fpga課程設(shè)計(jì)
- fpga課程設(shè)計(jì)
- fpga課程設(shè)計(jì)報(bào)告書(shū)
- fpga課程設(shè)計(jì)--交通燈設(shè)計(jì)
- fpga課程設(shè)計(jì)---基于fpga多功能電子鐘設(shè)計(jì)
- 基于fpga的數(shù)字時(shí)鐘課程設(shè)計(jì)
- fpga課程設(shè)計(jì)--簡(jiǎn)易電子琴設(shè)計(jì)及fpga功能驗(yàn)證
- fpga課程設(shè)計(jì)--簡(jiǎn)易電子琴設(shè)計(jì)及fpga功能驗(yàn)證
- fpga正交信號(hào)發(fā)生器課程設(shè)計(jì)
- 基于fpga的交通燈課程設(shè)計(jì)
- 基于fpga的數(shù)字鐘課程設(shè)計(jì)
- 基于fpga的異步電機(jī)課程設(shè)計(jì)
- 課程設(shè)計(jì)--基于fpga的數(shù)字鐘設(shè)計(jì)
- 課程設(shè)計(jì)-基于fpga的vga圖像顯示設(shè)計(jì)
- 基于fpga的交通燈設(shè)計(jì)課程設(shè)計(jì)
- fpga課程設(shè)計(jì)報(bào)告--基于fpga的fir濾波器的設(shè)計(jì)
- 基于fpga的異步電機(jī)課程設(shè)計(jì)
- eda課程設(shè)計(jì)---基于fpga的數(shù)字鐘設(shè)計(jì)
- 基于fpga的樂(lè)曲演奏電路設(shè)計(jì)課程設(shè)計(jì)
- fpga課程設(shè)計(jì)源碼-時(shí)鐘-樂(lè)曲-函數(shù)信號(hào)電路
評(píng)論
0/150
提交評(píng)論