版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《在系統(tǒng)編程技術(shù)》項目設(shè)計報告</p><p> 課程名稱 在系統(tǒng)編程技術(shù) </p><p> 任課教師 </p><p> 設(shè)計題目 樂曲硬件演奏電路 </p><p> 班 級
2、 </p><p> 姓 名 </p><p> 學(xué) 號 </p><p> 成 績 </p><p> 日 期
3、 </p><p><b> 樂曲硬件演奏電路</b></p><p><b> 題目分析</b></p><p> 經(jīng)過查閱相關(guān)的資料,我們可以知道,組成樂曲的每個音符的發(fā)音頻率值及其持續(xù)的時間是樂曲能連續(xù)演奏所需的兩個基本要素,所以我們要設(shè)計出類似于彈琴人手指的模塊,類似于琴鍵的模塊,類似于琴
4、弦或音調(diào)發(fā)生器的模塊,最后通過這三個模塊可以完成《梁?!窐非难葑?,與演奏發(fā)音相對應(yīng)的簡譜碼也可以輸出顯示出來。</p><p><b> 設(shè)計方案</b></p><p><b> 模塊劃分如下圖:</b></p><p><b> 頂層實體描述如下:</b></p><p
5、><b> 圖1 電路原理框圖</b></p><p> 該主系統(tǒng)由三個模塊:Songer頂層文件、div分頻器、譯碼器組成。且Songer頂層文件還包括3個子文件分別是NoteTabs,ToneTaba和Speakera,此外,我們還需建立一個名為“music”的LPM_ROM模塊與NoteTabs模塊連接。</p><p> 1.對于模塊NoteTab
6、s的功能描述:</p><p> 該模塊的功能就是定義音符數(shù)據(jù)ROM“music”隨著該模塊中的計數(shù)器控制時鐘頻率速率作加法計數(shù)時,即地址值遞增時,音符數(shù)據(jù)ROM中的音符數(shù)據(jù)。將從ROM中通過ToneIndex[3..0]端口輸向ToneTaba模塊,演奏《梁?!?。在該模塊中設(shè)置了一個8位二進(jìn)制計數(shù)器(計數(shù)最大值為138),作為音符數(shù)據(jù)ROM的地址發(fā)生器。這個計數(shù)器的計數(shù)頻率為4Hz,即每一計數(shù)值的停留時間為0
7、.25秒,恰為當(dāng)全音符設(shè)為1秒時,四四拍的4分音符持續(xù)時間。</p><p> 2.對于模塊ToneTaba的功能描述:</p><p> 該模塊是樂曲簡譜碼對應(yīng)的分頻預(yù)置數(shù)查找表電路,其中設(shè)置了樂曲的全部音符所對應(yīng)的分頻置數(shù),每一音符的停留時間由音樂節(jié)拍和音調(diào)發(fā)生器模塊NoteTabs的CLK的輸入頻率決定,這些值由對應(yīng)于ToneTaba的4位輸入值Index[3..0]確定,最多有
8、16種可選值。輸向ToneTaba中Index[3..0]的值ToneIndex[3..0]的輸出值與持續(xù)的時間由模塊NoteTabs決定。</p><p> 3.對于模塊Speakera的功能描述:</p><p> 該模塊是一個數(shù)控分頻器,音符的頻率可由此模塊獲得。由CLK端輸入一具有較高頻率的信號,通過Speakera分頻后由SPKOUT輸出。由于直接從數(shù)控分頻器中出來的輸出信號
9、是脈寬極窄的脈沖式信號。為了利用驅(qū)動揚聲器,需加一個D觸發(fā)器以均衡其占空比,頻率將是原來的1/2。Speakera對CLK輸入信號的分頻比由預(yù)置數(shù)Tone決定。SPKOUT的輸出頻率將決定每一音符的音調(diào)。</p><p> 4.對于譯碼器模塊的功能描述:</p><p> 譯碼器模塊是一個七段譯碼器,作用是在硬件上顯示音頻的高低,用0到7分別對應(yīng)空節(jié)拍、do、ri、mi、fa、suo、
10、la、xi,高音時,LED亮,數(shù)碼管顯示對應(yīng)數(shù)字。</p><p><b> 圖2 頂層電路圖</b></p><p><b> 方案實現(xiàn)</b></p><p> 對于模塊NoteTabs的仿真及描述</p><p> 這個計數(shù)器的計數(shù)頻率為4Hz,即每一計數(shù)值的停留時間為0.25秒,恰為
11、當(dāng)全音符設(shè)為1秒時,四四拍的4分音符持續(xù)時間,由此即可保證每個音符持續(xù)的時間如仿真波形圖所示。</p><p> 對于模塊ToneTaba的仿真及描述</p><p> 該模塊是樂曲簡譜碼對應(yīng)的分頻預(yù)置數(shù)查找表電路,其中設(shè)置了樂曲的全部音符所對應(yīng)的分頻置數(shù),對于不同的輸入,通過查表方式可以獲得不同的控制音調(diào)的預(yù)置數(shù)。</p><p> 對于模塊Speakera
12、的仿真及描述</p><p> 由CLK端輸入一具有較高頻率的信號,通過Speakera分頻后由SPKOUT輸出。由于直接從數(shù)控分頻器中出來的輸出信號是脈寬極窄的脈沖式信號。</p><p> 對于模塊Songer的仿真及描述</p><p> 《梁?!窐非喿V如下:</p><p><b> 波形仿真圖如下:</b&
13、gt;</p><p> Songer模塊就是頂層設(shè)計文件,所有的模塊都由它調(diào)用。輸入了8Hz與12Hz的時鐘信號,然后由CODE1輸出了與演奏發(fā)音相對應(yīng)的簡譜碼,HIGH1為高八度音標(biāo),SPKOUT輸出樂曲。</p><p><b> 硬件測試及說明</b></p><p> 電路的頂層文件管腳分配圖如下:</p><
14、;p><b> 圖3管腳分配圖</b></p><p> 選擇實驗電路模式1,先將引腳鎖定,使CLK12MHz與clock9相連接,接受12MHz時鐘頻率即用短路冒在clock9接“12MHz”;CLK8Hz與clock2相連接,接受4Hz頻率;發(fā)音輸出SPKOUT接Speaker;與演奏發(fā)音相對應(yīng)的簡譜碼輸出顯示可由CODE1在數(shù)碼管5顯示;HIGH1為高八度音指示,可由發(fā)光管D
15、5指示,最后向目標(biāo)芯片下載適配后的SOF邏輯設(shè)計文件。</p><p><b> 結(jié)論</b></p><p> 我的本次設(shè)計是基于FPGA的音樂硬件演奏電路的設(shè)計,實現(xiàn)了一個樂曲播放器,而且描述了其工作原理、設(shè)計思路及實現(xiàn)方法,并在QUARTUSП上選用目標(biāo)芯片仿真實現(xiàn)了音樂硬件演奏電路的功能。通過本次設(shè)計實踐,證明了采用FPGA設(shè)計實現(xiàn)音樂硬件演奏電路的可行性
16、和可靠性,而且更改樂曲容易,可根據(jù)需要修改ROM中的音符數(shù)據(jù)文件,從而使電路實現(xiàn)任一曲子的播放。</p><p> 這種基于FPGA的音樂硬件演奏電路的設(shè)計與實現(xiàn),不僅通過VHDL層次化和模塊化設(shè)計方法,同時采用數(shù)控分頻和定制LPM-ROM的設(shè)計思想,更好的優(yōu)化了樂曲演奏數(shù)字電路的設(shè)計,在此基礎(chǔ)上不必變化頂層文件架構(gòu)可隨意變更樂曲,提高了設(shè)計的靈活性、可靠性和可擴(kuò)展性。</p><p>
17、<b> 課程總結(jié)</b></p><p> 通過本次課程設(shè)計,培養(yǎng)了我們綜合運用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題的能力,是對我們在實際工作能力的具體訓(xùn)練和考察過程。</p><p> 回顧此次課程設(shè)計,從書籍,網(wǎng)絡(luò)不斷的尋找到設(shè)計思路,到完成整個設(shè)計,從理論到實踐,可以學(xué)到很多很多的的東西。對課本知識的進(jìn)一步加深的同時學(xué)到了很多在書本上沒有學(xué)到過的知識
18、。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。</p><p> 這次課程設(shè)計終于順利完成了,
19、在設(shè)計中遇到的一些問題,最后在老師和同學(xué)的幫助下,終于解決了,從中學(xué)習(xí)到了很多。</p><p><b> 附錄</b></p><p> 1.對于模塊NoteTabs的VHDL語言描述</p><p> LIBRARY IEEE; ----NoteTabs模塊</p><p> USE IEEE.STD_LO
20、GIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY NoteTabs IS</p><p> PORT ( clk : IN STD_LOGIC;</p><p> ToneIndex: OUT STD_LOGIC_VECTOR (3 DOWN
21、TO 0));</p><p><b> END;</b></p><p> ARCHITECTURE one OF NoteTabs IS</p><p> COMPONENT MUSIC</p><p> PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);<
22、/p><p> inclock : IN STD_LOGIC;</p><p> q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));</p><p> END COMPONENT;</p><p> SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0);</p>
23、;<p><b> BEGIN</b></p><p> CNT8 : PROCESS(clk,Counter)</p><p><b> BEGIN</b></p><p> IF Counter=138 THEN Counter<="00000000";</p>
24、;<p> ELSIF (clk'EVENT AND clk='1')THEN Counter<=Counter+1;END IF;</p><p> END PROCESS;</p><p> u1 : MUSIC PORT MAP(address=>Counter,q=>ToneIndex,inclock=>clk);
25、</p><p><b> END;</b></p><p> 2.對于模塊ToneTaba的VHDL語言描述</p><p> LIBRARY IEEE; ---ToneTaba模塊</p><p> USE IEEE.STD_LOGIC_1164.ALL; </p><p> EN
26、TITY ToneTaba IS </p><p> PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; </p><p> CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; </p><p> HIGH : OUT STD_LOGIC; </p>&
27、lt;p> Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) ); </p><p><b> END; </b></p><p> ARCHITECTURE one OF ToneTaba IS </p><p><b> BEGIN </b></p>&
28、lt;p> Search : PROCESS(Index) </p><p><b> BEGIN </b></p><p> CASE Index IS -- 譯碼電路,查表方式,控制音調(diào)的預(yù)置數(shù) </p><p> WHEN "0000" => Tone<="111111111
29、11" ; CODE<="0000"; HIGH <='0';-- 2047</p><p> WHEN "0001" => Tone<="01100000101" ; CODE<="0001"; HIGH <='0';-- 773; </p>
30、<p> WHEN "0010" => Tone<="01110010000" ; CODE<="0010"; HIGH <='0';-- 912; </p><p> WHEN "0011" => Tone<="10000001100" ; C
31、ODE<="0011"; HIGH <='0';--1036; </p><p> WHEN "0101" => Tone<="10010101101" ; CODE<="0101"; HIGH <='0';--1197; </p><p>
32、 WHEN "0110" => Tone<="10100001010" ; CODE<="0110"; HIGH <='0';--1290; </p><p> WHEN "0111" => Tone<="10101011100" ; CODE<=&qu
33、ot;0111"; HIGH <='0';--1372; </p><p> WHEN "1000" => Tone<="10110000010" ; CODE<="0001"; HIGH <='1';--1410; </p><p> WHEN &quo
34、t;1001" => Tone<="10111001000" ; CODE<="0010"; HIGH <='1';--1480; </p><p> WHEN "1010" => Tone<="11000000110" ; CODE<="0011&quo
35、t;; HIGH <='1';--1542; </p><p> WHEN "1100" => Tone<="11001010110" ; CODE<="0101"; HIGH <='1';--1622; </p><p> WHEN "1101"
36、; => Tone<="11010000100" ; CODE<="0110"; HIGH <='1';--1668; </p><p> WHEN "1111" => Tone<="11011000000" ; CODE<="0001"; HIGH &l
37、t;='1';--1728; </p><p> WHEN OTHERS => NULL; </p><p> END CASE; </p><p> END PROCESS; </p><p><b> END; </b></p><p> 3.對于模塊Spe
38、akera的VHDL語言描述</p><p> LIBRARY IEEE;---Speakera模塊</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><
39、;p> ENTITY Speakera IS</p><p> PORT ( clk : IN STD_LOGIC;</p><p> Tone: IN STD_LOGIC_VECTOR (10 DOWNTO 0);</p><p> Spks: OUT STD_LOGIC );</p><p><b> END;&
40、lt;/b></p><p> ARCHITECTURE one OF Speakera IS</p><p> SIGNAL PreCLK,FullSpkS : STD_LOGIC;</p><p><b> BEGIN</b></p><p> DivideCLK : PROCESS(clk)</
41、p><p> VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0);</p><p><b> BEGIN</b></p><p> PreCLK<='0';</p><p> IF Count4>11 THEN PreCLK <='
42、1';Count4 :="0000";</p><p> ELSIF clk'EVENT AND clk ='1' THEN Count4:=Count4+1;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p
43、> GenSpkS : PROCESS(PreCLK,Tone)</p><p> VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0);</p><p><b> BEGIN</b></p><p> IF PreCLK'EVENT AND PreCLK = '1
44、39; THEN</p><p> IF Count11 = 16#7FF# THEN Count11 :=Tone;FullSpkS<='1';</p><p> ELSE Count11 :=Count11+1;FullSpks<='0';END IF;</p><p><b> END IF;<
45、/b></p><p> END PROCESS;</p><p> DelaySpks : PROCESS(FullSpkS)</p><p> VARIABLE Count2 : STD_LOGIC;</p><p><b> BEGIN</b></p><p> IF Ful
46、lSpkS'EVENT AND FullSpkS='1' THEN Count2 :=NOT Count2;</p><p> IF Count2='1' THEN SpkS<='1';</p><p> ELSE SpkS<='0';END IF;</p><p><b&
47、gt; END IF;</b></p><p> END PROCESS;</p><p><b> END;</b></p><p> 4.對于模塊MUSIC生成的VHDL語言</p><p> LIBRARY ieee;</p><p> USE ieee.std_l
48、ogic_1164.all;</p><p> LIBRARY altera_mf;</p><p> USE altera_mf.all;</p><p> ENTITY MUSIC IS</p><p><b> PORT</b></p><p><b> (</b&
49、gt;</p><p> address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);</p><p> inclock: IN STD_LOGIC ;</p><p> q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0)</p><p><b> );</b&
50、gt;</p><p> END MUSIC;</p><p> ARCHITECTURE SYN OF music IS</p><p> SIGNAL sub_wire0: STD_LOGIC_VECTOR (3 DOWNTO 0);</p><p> COMPONENT altsyncram</p><p&
51、gt;<b> GENERIC (</b></p><p> address_aclr_a: STRING;</p><p> init_file: STRING;</p><p> intended_device_family: STRING;</p><p> lpm_hint: STRIN
52、G;</p><p> lpm_type: STRING;</p><p> numwords_a: NATURAL;</p><p> operation_mode: STRING;</p><p> outdata_aclr_a: STRING;</p><p> outdata_reg_
53、a: STRING;</p><p> widthad_a: NATURAL;</p><p> width_a: NATURAL;</p><p> width_byteena_a: NATURAL</p><p><b> );</b></p><p><b>
54、; PORT (</b></p><p> clock0: IN STD_LOGIC ;</p><p> address_a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);</p><p> q_a: OUT STD_LOGIC_VECTOR (3 DOWNTO 0)</p><p><
55、b> );</b></p><p> END COMPONENT;</p><p><b> BEGIN</b></p><p> q <= sub_wire0(3 DOWNTO 0);</p><p> altsyncram_component : altsyncram</
56、p><p> GENERIC MAP (</p><p> address_aclr_a => "NONE",</p><p> init_file => "F:/lijinshan0905075006/yuequyanzou/yuequyanzou.mif",</p><p> int
57、ended_device_family => "Cyclone",</p><p> lpm_hint => "ENABLE_RUNTIME_MOD=NO",</p><p> lpm_type => "altsyncram",</p><p> numwords_a => 2
58、56,</p><p> operation_mode => "ROM",</p><p> outdata_aclr_a => "NONE",</p><p> outdata_reg_a => "UNREGISTERED",</p><p> width
59、ad_a => 8,</p><p> width_a => 4,</p><p> width_byteena_a => 1</p><p><b> )</b></p><p> PORT MAP (</p><p> clock0 => inclock,&l
60、t;/p><p> address_a => address,</p><p> q_a => sub_wire0</p><p><b> );</b></p><p><b> END SYN;</b></p><p> 5.對于模塊Songer的VH
61、DL語言描述</p><p> LIBRARY IEEE;---硬件演奏電路頂層設(shè)計</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> ENTITY songer IS</p><p> PORT ( CLK12MHZ : IN STD_LOGIC; ---音調(diào)頻率信號</p
62、><p> CLK8HZ : IN STD_LOGIC; ---節(jié)拍頻率信號</p><p> CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);</p><p> ---簡譜碼輸出顯示</p><p> HIGH1 : OUT STD_LOGIC; ---高八度指示<
63、;/p><p> SPKOUT : OUT STD_LOGIC ); ---聲音輸出</p><p><b> END;</b></p><p> ARCHITECTURE one OF Songer IS</p><p> COMPONENT NoteTabs</p><p> PO
64、RT ( clk : IN STD_LOGIC;</p><p> ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));</p><p> END COMPONENT ;</p><p> COMPONENT ToneTaba</p><p> PORT (Index : IN STD
65、_LOGIC_VECTOR (3 DOWNTO 0);</p><p> CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);</p><p> HIGH : OUT STD_LOGIC;</p><p> Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0));</p><
66、p> END COMPONENT;</p><p> COMPONENT Speakera</p><p> PORT (clk : IN STD_LOGIC;</p><p> Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);</p><p> Spks : OUT STD_LOGIC
67、);</p><p> END COMPONENT ;</p><p> SIGNAL Tone : STD_LOGIC_VECTOR (10 DOWNTO 0);</p><p> SIGNAL ToneIndex : STD_LOGIC_VECTOR (3 DOWNTO 0);</p><p><b> BEGIN<
68、;/b></p><p> u1: NoteTabs PORT MAP (clk=>CLK8HZ,ToneIndex=>ToneIndex);</p><p> u2: ToneTaba PORT MAP (Index=>ToneIndex,Tone=>Tone,CODE=>CODE1,HIGH=>HIGH1);</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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計--樂曲硬件演奏電路設(shè)計
- eda課程設(shè)計---樂曲硬件演奏電路的vhdl設(shè)計
- 樂曲硬件演奏電路的vhdl設(shè)計 eda課程設(shè)計
- eda樂曲硬件演奏電路設(shè)計
- eda樂曲硬件演奏電路設(shè)計
- 基于eda樂曲硬件演奏電路
- 樂曲演奏課程設(shè)計報告---樂曲演奏電路的設(shè)計
- eda_電子琴課程設(shè)計--樂曲演奏電路的設(shè)計
- 樂曲硬件演奏電路設(shè)計
- eda樂曲播放電路課程設(shè)計報告
- vhdl課程設(shè)計---樂曲演奏電路設(shè)計
- 基于eda技術(shù)的樂曲演奏電路設(shè)計
- 基于fpga的樂曲演奏電路設(shè)計課程設(shè)計
- eda課程設(shè)計硬件電子琴及自動演奏
- 樂曲演奏電路
- eda課程設(shè)計報告--樂曲發(fā)生器
- eda秒表電路課程設(shè)計
- 音樂樂曲演奏程序課程設(shè)計報告
- eda流水燈電路課程設(shè)計
- 用單片機演奏電子樂曲課程設(shè)計報告
評論
0/150
提交評論