版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《在系統(tǒng)編程技術》項目設計報告</p><p> 課程名稱 在系統(tǒng)編程技術 </p><p> 任課教師 </p><p> 設計題目 樂曲硬件演奏電路 </p><p> 班 級
2、 </p><p> 姓 名 </p><p> 學 號 </p><p> 成 績 </p><p> 日 期
3、 </p><p><b> 樂曲硬件演奏電路</b></p><p><b> 題目分析</b></p><p> 經(jīng)過查閱相關的資料,我們可以知道,組成樂曲的每個音符的發(fā)音頻率值及其持續(xù)的時間是樂曲能連續(xù)演奏所需的兩個基本要素,所以我們要設計出類似于彈琴人手指的模塊,類似于琴鍵的模塊,類似于琴
4、弦或音調(diào)發(fā)生器的模塊,最后通過這三個模塊可以完成《梁?!窐非难葑?,與演奏發(fā)音相對應的簡譜碼也可以輸出顯示出來。</p><p><b> 設計方案</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模塊,演奏《梁祝》。在該模塊中設置了一個8位二進制計數(shù)器(計數(shù)最大值為138),作為音符數(shù)據(jù)ROM的地址發(fā)生器。這個計數(shù)器的計數(shù)頻率為4Hz,即每一計數(shù)值的停留時間為0
7、.25秒,恰為當全音符設為1秒時,四四拍的4分音符持續(xù)時間。</p><p> 2.對于模塊ToneTaba的功能描述:</p><p> 該模塊是樂曲簡譜碼對應的分頻預置數(shù)查找表電路,其中設置了樂曲的全部音符所對應的分頻置數(shù),每一音符的停留時間由音樂節(jié)拍和音調(diào)發(fā)生器模塊NoteTabs的CLK的輸入頻率決定,這些值由對應于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輸入信號的分頻比由預置數(shù)Tone決定。SPKOUT的輸出頻率將決定每一音符的音調(diào)。</p><p> 4.對于譯碼器模塊的功能描述:</p><p> 譯碼器模塊是一個七段譯碼器,作用是在硬件上顯示音頻的高低,用0到7分別對應空節(jié)拍、do、ri、mi、fa、suo、
10、la、xi,高音時,LED亮,數(shù)碼管顯示對應數(shù)字。</p><p><b> 圖2 頂層電路圖</b></p><p><b> 方案實現(xiàn)</b></p><p> 對于模塊NoteTabs的仿真及描述</p><p> 這個計數(shù)器的計數(shù)頻率為4Hz,即每一計數(shù)值的停留時間為0.25秒,恰為
11、當全音符設為1秒時,四四拍的4分音符持續(xù)時間,由此即可保證每個音符持續(xù)的時間如仿真波形圖所示。</p><p> 對于模塊ToneTaba的仿真及描述</p><p> 該模塊是樂曲簡譜碼對應的分頻預置數(shù)查找表電路,其中設置了樂曲的全部音符所對應的分頻置數(shù),對于不同的輸入,通過查表方式可以獲得不同的控制音調(diào)的預置數(shù)。</p><p> 對于模塊Speakera
12、的仿真及描述</p><p> 由CLK端輸入一具有較高頻率的信號,通過Speakera分頻后由SPKOUT輸出。由于直接從數(shù)控分頻器中出來的輸出信號是脈寬極窄的脈沖式信號。</p><p> 對于模塊Songer的仿真及描述</p><p> 《梁祝》樂曲簡譜如下:</p><p><b> 波形仿真圖如下:</b&
13、gt;</p><p> Songer模塊就是頂層設計文件,所有的模塊都由它調(diào)用。輸入了8Hz與12Hz的時鐘信號,然后由CODE1輸出了與演奏發(fā)音相對應的簡譜碼,HIGH1為高八度音標,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ā)音相對應的簡譜碼輸出顯示可由CODE1在數(shù)碼管5顯示;HIGH1為高八度音指示,可由發(fā)光管D
15、5指示,最后向目標芯片下載適配后的SOF邏輯設計文件。</p><p><b> 結(jié)論</b></p><p> 我的本次設計是基于FPGA的音樂硬件演奏電路的設計,實現(xiàn)了一個樂曲播放器,而且描述了其工作原理、設計思路及實現(xiàn)方法,并在QUARTUSП上選用目標芯片仿真實現(xiàn)了音樂硬件演奏電路的功能。通過本次設計實踐,證明了采用FPGA設計實現(xiàn)音樂硬件演奏電路的可行性
16、和可靠性,而且更改樂曲容易,可根據(jù)需要修改ROM中的音符數(shù)據(jù)文件,從而使電路實現(xiàn)任一曲子的播放。</p><p> 這種基于FPGA的音樂硬件演奏電路的設計與實現(xiàn),不僅通過VHDL層次化和模塊化設計方法,同時采用數(shù)控分頻和定制LPM-ROM的設計思想,更好的優(yōu)化了樂曲演奏數(shù)字電路的設計,在此基礎上不必變化頂層文件架構可隨意變更樂曲,提高了設計的靈活性、可靠性和可擴展性。</p><p>
17、<b> 課程總結(jié)</b></p><p> 通過本次課程設計,培養(yǎng)了我們綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題的能力,是對我們在實際工作能力的具體訓練和考察過程。</p><p> 回顧此次課程設計,從書籍,網(wǎng)絡不斷的尋找到設計思路,到完成整個設計,從理論到實踐,可以學到很多很多的的東西。對課本知識的進一步加深的同時學到了很多在書本上沒有學到過的知識
18、。通過這次課程設計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正提高自己的實際動手能力和獨立思考的能力。在設計的過程難免會遇到過各種各樣的問題,同時在設計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,通過這次課程設計之后,一定把以前所學過的知識重新溫故。</p><p> 這次課程設計終于順利完成了,
19、在設計中遇到的一些問題,最后在老師和同學的幫助下,終于解決了,從中學習到了很多。</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)的預置數(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;---硬件演奏電路頂層設計</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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設計--樂曲硬件演奏電路設計
- eda課程設計---樂曲硬件演奏電路的vhdl設計
- 樂曲硬件演奏電路的vhdl設計 eda課程設計
- eda樂曲硬件演奏電路設計
- eda樂曲硬件演奏電路設計
- 基于eda樂曲硬件演奏電路
- 樂曲演奏課程設計報告---樂曲演奏電路的設計
- eda_電子琴課程設計--樂曲演奏電路的設計
- 樂曲硬件演奏電路設計
- eda樂曲播放電路課程設計報告
- vhdl課程設計---樂曲演奏電路設計
- 基于eda技術的樂曲演奏電路設計
- 基于fpga的樂曲演奏電路設計課程設計
- eda課程設計硬件電子琴及自動演奏
- eda課程設計報告--樂曲發(fā)生器
- 樂曲演奏電路
- eda秒表電路課程設計
- 音樂樂曲演奏程序課程設計報告
- eda流水燈電路課程設計
- 用單片機演奏電子樂曲課程設計報告
評論
0/150
提交評論