基于eda的電子琴設計_第1頁
基于eda的電子琴設計_第2頁
基于eda的電子琴設計_第3頁
基于eda的電子琴設計_第4頁
基于eda的電子琴設計_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、EDA電子琴設計2009-07-11 09:07目錄前    言 3一、設計要求 3二、設計目的 3三、硬件電路的設計 31、電子琴整體電路 31.1手動/自動演奏模塊 41.2音調(diào)發(fā)生器模塊 41.3數(shù)控分頻模塊 5四、程序設計 51、手動/自動演奏模塊的設計 62、音調(diào)發(fā)生器模塊的設計 73、數(shù)控分頻模塊的設計 7五、組裝調(diào)試下載 7六、心得體會 9七、參考文獻 9附錄1 10附錄2 11前    言EDA技術是電子設計的發(fā)展趨勢,利用EDA工具可以代替設計者完成電子系統(tǒng)設計中的大部分工作。EDA工具從數(shù)字系統(tǒng)設計的單一領域,發(fā)展到今天,應用范圍已涉

2、及模擬、微波等多個領域,可以實現(xiàn)各個領域電子系統(tǒng)設計的測試、設計方針和布局布線等。設計者只要完成對電子系統(tǒng)的功能描述,就可以利用計算機和工具,進行設計處理,最終得到設計結(jié)果。采用可編程邏輯器件通過對器件內(nèi)部的設計來實現(xiàn)系統(tǒng)功能,是一種基于芯片的設計方法。設計者可以根據(jù)定義器件的內(nèi)部邏輯很引出端,將電路板設計的大部分工作放在芯片的設計中進行,通過對芯片設計實現(xiàn)數(shù)字系統(tǒng)的邏輯功能。用硬件描述語言進行電路與系統(tǒng)的設計是當前EDA技術的重要特征。硬件描述語言的突出優(yōu)點是:語言的公開可利用性;設計與工藝的無關性;寬范圍的描述能力;便于組織大規(guī)模系統(tǒng)的設計;便于設計的復用和繼承等。目前常用的IEEE標準硬

3、件描述語言有VHDL和Verilog-HDL。一、設計要求    基于傳統(tǒng)數(shù)字頻率計的測量精度將隨被測信號頻率的下降而下降,在實用中有較大的局限性,而等精度頻率計不但具有較高的測量精度,而且在整個測頻區(qū)域內(nèi)保持恒定的測試精度。本系統(tǒng)設計的基本指標如下:1 對于頻率測試功能,測頻范圍為0.1-50MHZ;對于測頻全域相對誤差恒為百萬分之一。2 對于脈寬測試功能,測試范圍為0.1us-1s,二、設計目的熟悉Quartus 2軟件的使用。熟悉EDA實驗開發(fā)系統(tǒng)的基本使用。學習VHDL基本單元電路的設計應用。進一步掌握EDA的多層次設計方法。學習音樂發(fā)生器的設計。三、硬件電路的設計

4、1、電子琴整體電路(見附錄1)本設計由手動/自動演奏模塊、音調(diào)發(fā)生器、數(shù)控分頻器3個模塊組成。手動/自動演奏模塊的作用是實現(xiàn)手動和自動演奏音樂的控制。音調(diào)發(fā)生器tone的作用是產(chǎn)生獲得音階的預置值。數(shù)控分頻模塊spreker對時基鐘脈沖進行分頻,得到與1,2,3,4,5,6,7,七個音符對應的頻率。這3個模塊如下:1.1手動/自動演奏模塊1.2音調(diào)發(fā)生器模塊1.3數(shù)控分頻模塊四、程序設計(見附錄2)流程圖(如下圖1)                         

5、 圖11、手動/自動演奏模塊的設計在automusic中設置了9位二進制計數(shù)器,作為音符數(shù)據(jù)ROM的地址發(fā)生器。這個計數(shù)器的計數(shù)頻率選為4HZ,即每一計數(shù)值的停留時間為0.25秒,恰為全音符設為1秒時,四四拍的4分音符持續(xù)時間。例如,automusic在以下的VHDL邏輯描述中,“梁?!睒非牡谝粋€音符為“3”,此音在邏輯中停留了4個時鐘節(jié)拍,即1秒時間,相應地,所對應的“3”音符分頻預置數(shù)值為1036,在speaker的輸入端停留了1秒。隨著tone中的計數(shù)器按4HZ的時鐘速率作加法計數(shù)時,即隨地址值遞增時,音符數(shù)據(jù)ROM中的音符數(shù)據(jù)將從ROM中通過index3.0端口輸向tone模塊,樂曲

6、就開始連續(xù)自然地演奏起來了。Index27.0是手動音符輸入端,8位分別對應do,re,mi,fa,sol,la,si,!do八個音符。auto是自動/手動播放控制端,當auto為0時實現(xiàn)自動演奏功能,為1時則是手動輸入樂曲。2、音調(diào)發(fā)生器模塊的設計音符的持續(xù)時間須根據(jù)樂曲的速度及每個音符的節(jié)拍數(shù)來確定,該模塊tone的功能首先是為speaker提供決定所發(fā)音符的分頻預置數(shù),而此數(shù)在speaker輸入口停留的時間即為此音符飛節(jié)拍值。模塊tone是樂曲簡譜碼對應的分頻預置數(shù)查表電路,其中設置了“梁?!睒非恳舴鶎姆诸l預置數(shù),共13個,每一個音符的停留時間由音樂節(jié)拍和音調(diào)發(fā)生器模塊tone

7、的clk的輸入頻率決定,在此為4HZ。這13個值的輸出由對應于tone的4為index3.0確定,而index3.0最多有16種可選值。輸向tone中index3.0的值index03.0的輸出值與持續(xù)的時間由模塊tone決定。3、數(shù)控分頻模塊的設計音符的頻率可以由speaker獲得,這是一個數(shù)控分頻器。數(shù)控分頻模塊spreker對時基鐘脈沖進行分頻,得到與1,2,3,4,5,6,7,七個音符對應的頻率。由其clk端輸入一具有較高頻率(12MHZ)的信號,通過speaker分頻后由spks輸出,由于直接從數(shù)控分頻器中出來的輸出信號是脈寬極窄的脈沖式信號,為了有利于驅(qū)動揚聲器,需另加一個D觸發(fā)器

8、以均衡其占空比,但這時的頻率將是原來的1/2。speaker對clk輸入信號的分頻比由11位預置數(shù)tone10.0決定。spks的輸出頻率將決定每一音符的音調(diào),這樣,分頻計數(shù)器的預置值tone10.0與spks的輸出頻率,就有了對應關系。例如在tone模塊中若取tone10.0=1036,將發(fā)音符為“3”音的信號頻率。五、組裝調(diào)試下載EDA實驗箱的芯片是:EP1C3T144C8。1、引腳配置程序整體組裝的方法有兩種:一種是用VHDL語言編寫頂層文件,將各個模塊的程序組裝起來,另一種是用用Quarus II軟件將各個模塊的程序轉(zhuǎn)化成硬件原理圖。我采用的是第二種方法,第二種方法比較直觀,且易于實現(xiàn)

9、。組裝完成后就對程序進行編譯,下載到實驗箱。2、組裝調(diào)試下載過程中遇到的問題1、 連接好硬件圖后,編譯有錯誤。原因是原理圖不能連接到所對應的模塊的程序。解決辦法:將各個模塊的程序放到所建立的原理圖的工程里面。2、 編譯有錯誤。原因是建立的ROM的address與speaker中用到的信號count0的長度不相對應。解決辦法:將ROM中的address的長度改成與count0長度一致的。3、 編譯完成后,自動演奏的樂曲音調(diào)不對(變調(diào)了)。原因是我建立的ROM中輸入數(shù)據(jù)錯了。解決辦法:對照簡譜,將輸錯的譜改過來。4、 手動彈奏的sol,la兩按鍵發(fā)出的音調(diào)相同。原因是在音調(diào)發(fā)生器中缺少了1116這

10、一分頻預置數(shù)值。解決辦法:在音調(diào)發(fā)生器tone中的分頻預置數(shù)這一程序段中添加分頻預置數(shù)值為1116的語句。5、 選樂曲困難。不知道要選怎么樣的樂曲,電子琴演奏出來的樂曲才不會變調(diào)。通過向老師咨詢,我們選樂曲最好是選四拍的沒有低音的樂曲。后面就選了“北京的金山上”和“梁?!边@兩首樂曲。六、心得體會    課程設計是一項重要的實習學科之一,我們要正確的面對這項任務,把它做好做的精細,以達到鍛煉人的目的,所以說一份好的心得體會是經(jīng)過認真經(jīng)歷之后才能做出來的!做了三周的課程設計,有很多的心得體會,有關于專業(yè)知識方面的,也有關于人與人之間關系方面的。    在著三

11、周里學到了很多在書本上所沒有學到過的知識。通過這次設計,進一步加深了對EDA的了解,讓我對它有了更加濃厚的興趣。特別是當每一個子模塊編寫調(diào)試成功時,心里特別的開心。但是在編寫頂層文件的程序時,遇到了不少問題,特別是各元件之間的連接,以及信號的定義,總是有錯誤,在細心的檢查下,終于找出了錯誤和警告,排除困難后,程序編譯就通過了,心里終于舒了一口氣。在波形仿真時,也遇到了一點困難,想要的結(jié)果不能在波形上得到正確的顯示,后來,在數(shù)十次的調(diào)試之后,才出現(xiàn)正確的結(jié)果。其次,在連接各個模塊的時候一定要注意各個輸入、輸出引腳的線寬,因為每個線寬是不一樣的,只要讓各個線寬互相匹配,才能得出正確的結(jié)果,否則,出

12、現(xiàn)任何一點小的誤差就會導致整個文件系統(tǒng)的編譯出現(xiàn)錯誤提示,在器件的選擇上也有一定的技巧,只有選擇了合適當前電路所適合的器件,編譯才能得到完滿成功。通過這次課程設計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。這次課程設計帶給我們的不只是知識,更多的需要我們在課程設計結(jié)束后根據(jù)自己的情況去感悟,去反思,勤時自勉,有更多的收獲。我們組一共有兩個人,我們共同努力,各顯所能最終完成了這次的課程設計。當然,這中間有老師和其他同學的幫助與支持,在這里對給過我?guī)椭乃型?/p>

13、學和指導老師表示忠心的感謝!七、參考文獻1、黃仁欣編著,EDA技術實用教程  清華大學出版社2、EDA/SOPC技術實驗講義  杭州康芯電子有限公司附錄1附錄2自動/手動演奏模塊的設計library ieee; use ieee.std_logic_1164.all; entity automusic is Port ( clk,auto : in std_logic; -系統(tǒng)時鐘4HZ;鍵盤輸入/自動演奏       index2 : in std_logic_vector(7 downto 0); -鍵盤輸入信號    

14、   index0 : out std_logic_vector(3 downto 0);-音符信號輸出 end automusic;architecture behavioral of automusic is component musicport(address:in integer range 0 to 279;      clock:in std_logic;            q:out std_logic_vector(3 downto 0);end component;sig

15、nal count0:integer range 0 to 279;-change signal index1: std_logic_vector (3 DOWNTO 0);signal index11: std_logic_vector (3 DOWNTO 0);begin mm:process(clk,count0) -此進程完成自動演奏部分曲的地址累加 begin if clk'event and clk='1' then if count0=279 then count0<=0; else count0<=count0+1; end if; end

16、if; end process; search :process(index2)    -此進程完成音符到音符的分頻系數(shù)譯碼,音符的顯示,高低音階begincase index2 iswhen "00000001" => index11<="0001" -773when "00000010" => index11<="0010" -912when "00000100" => index11<="0011" -1036wh

17、en "00001000" => index11<="0100" -1116when "00010000" => index11<="0101" -1197when "00100000" => index11<="0110" -1290when "01000000" => index11<="0111" -1372when "10000000" => index1

18、1<="1000" -1410when  others  => index11<="0000" -2047end case;end process;SEL:process(index11,index1)beginIF auto='1' then index0 <= index1;elseindex0 <= index11;end if;end process; u1 : music port map(address=>count0 , q=>index1, clock=>

19、clk);END;音調(diào)發(fā)生器的設計library ieee;use ieee.std_logic_1164.all;entity tone isport(index:in std_logic_vector(3 downto 0); -音符輸入信號      code : out std_logic_vector(3 downto 0); -音符顯示信號       high0 : out std_logic; -高低音顯示信號      tone0:out std_logic_vector(10 down

20、to 0); -音符的分頻系數(shù)  end;architecture behavioral of tone isbegin  search:process(index)   begin    case index is    -譯碼電路,查表方式,控制音調(diào)的預置數(shù)-1480when others=>NULL;    end case;  end process;end;數(shù)控分頻器模塊的設計library IEEE; use ieee.std_logic_1164.all; use ;

21、0;             use ;entity speaker is Port ( clk1 : in std_logic;       tone1 : in integer range 0 to 2047;       spks : out std_logic); end speaker;architecture behavioral of speaker is signal preclk,fullspks:std_logic; begin divideclk:pro

22、cess(clk1)       variable count4:integer range 0 to 15;  begin    preclk <='0'    if count4 >11 then preclk <='1'count4:=0;    elsif clk1'event and clk1='1' then count4:=count4+1;    end if;  end process;genspks:process(preclk,tone1)variable count11:integer range 0 to 2047;begin  if preclk'event and preclk ='1' then    if count11=2047 then    &#

溫馨提示

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

評論

0/150

提交評論