基于EDA樂曲硬件演奏電路_第1頁
基于EDA樂曲硬件演奏電路_第2頁
基于EDA樂曲硬件演奏電路_第3頁
基于EDA樂曲硬件演奏電路_第4頁
基于EDA樂曲硬件演奏電路_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、沈陽工程學(xué)院課程設(shè)計(論文) 1 目目 錄錄 摘摘 要要.i abstract .ii 第第 1 1 章章 引引 言言 .1 1.1eda 技術(shù)及發(fā)展歷史.1 第第 2 2 章章 vhdlvhdl 語言及其應(yīng)用語言及其應(yīng)用 .2 2.1 vhdl 的應(yīng)用.2 第第 3 3 章章 樂曲硬件演奏電路樂曲硬件演奏電路 .4 3.1 基本要求 .4 3.2 原理描述 .4 3.3 樂曲硬件演奏電路的層次化設(shè)計方案 .5 3.3.1 音樂節(jié)拍發(fā)生器 notetabs.5 3.3.2 音符譯碼電路 tonetaba 模塊.11 3.3.3 數(shù)控分頻模塊(speakera)設(shè)計 .13 3.4 樂曲硬件演奏

2、電路的頂層設(shè)計和仿真 .16 結(jié)結(jié) 論論 .19 參考文獻(xiàn)參考文獻(xiàn) .20 致致 謝謝 .21 附錄附錄 .22 沈陽工程學(xué)院課程設(shè)計(論文) 1 第第 1 1 章章 引 言 1.1eda 技術(shù)及發(fā)展歷史技術(shù)及發(fā)展歷史 隨著計算機(jī)業(yè)的發(fā)展,從 80 年代中期計算機(jī)應(yīng)用進(jìn)入各個領(lǐng)域。在這種 背景下,87、88 年由美國 accel technologies inc 推出了第一個應(yīng)用于電子線 路設(shè)計軟件包tango,這個軟件包開創(chuàng)了電子設(shè)計自動化(eda)的先 河。這個軟件包現(xiàn)在看來比較簡陋,但在當(dāng)時給電子線路設(shè)計帶來了設(shè)計方法 和方式的革命,人們紛紛開始用計計算機(jī)來設(shè)計電子線路,直到今天在國內(nèi)許

3、 多科研單位還在使用這個軟件包。 隨著電子業(yè)的飛速發(fā)展,tango 日益顯示出其不適應(yīng)時代發(fā)展需要的弱 點。為了適應(yīng)科學(xué)技術(shù)的發(fā)展,protel technology 公司以其強(qiáng)大的研發(fā)能力推 出了 protel for dos 作為 tango 的升級版本,從此 protel 這個名字在業(yè)內(nèi)日 益響亮。 中國科學(xué)院 eda 中心是中國科學(xué)院根據(jù)其“面向國家戰(zhàn)略需求、面向世界 科技前沿”的新時期辦院方針,面對中國 ic 設(shè)計產(chǎn)業(yè)發(fā)展對技術(shù)和人才的迫切 需求,于 2001 年 11 月經(jīng)中國科學(xué)院批準(zhǔn)設(shè)立的非法人事業(yè)機(jī)構(gòu)。是中國科學(xué) 院全院集成電路設(shè)計領(lǐng)域科研與教育的網(wǎng)絡(luò)化公共平臺,是中國科學(xué)院

4、該領(lǐng)域 對外戰(zhàn)略合作的代表機(jī)構(gòu),面向全國開展技術(shù)服務(wù)。 沈陽工程學(xué)院課程設(shè)計(論文) 2 第第 2 2 章章 vhdl 語言及其應(yīng)用 20 世紀(jì) 80 年代美國國防部開發(fā) very high speed integrated circuit vhsic,用于描述集成電路的結(jié)構(gòu)和功能。此后,硬件描述語言向標(biāo)準(zhǔn)化方向 發(fā)展,1987 年成為 ieee standard 1076,稱為 vhdl 語言。它也是美國國防部 標(biāo)準(zhǔn)(mil-std-454l)。1993 年該標(biāo)準(zhǔn)增修為 ieee1164 標(biāo)準(zhǔn)。1996 年,再 次加入電路合成的標(biāo)準(zhǔn)程序和規(guī)格,成為 ieee1076.3 標(biāo)準(zhǔn)。vhdl 的英

5、文全 名是 very-high-speed integrated circuit hardwaredescription language,誕生于 1982 年。1987 年底,vhdl 被 ieee 和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言 。自 ieee 公布了 vhdl 的標(biāo)準(zhǔn)版本,ieee-1076(簡稱 87 版)之后,各 eda 公司相繼推出了自己的 vhdl 設(shè)計環(huán)境,或宣布自己的設(shè)計工具可以和 vhdl 接口。此后 vhdl 在電子設(shè)計領(lǐng)域得到了廣泛的接受,并逐步取代了 原有的非標(biāo)準(zhǔn)的硬件描述語言。1993 年,ieee 對 vhdl 進(jìn)行了修訂,從更高 的抽象層次和系統(tǒng)描述能力上擴(kuò)

6、展 vhdl 的內(nèi)容,公布了新版本的 vhdl, 即 ieee 標(biāo)準(zhǔn)的 1076-1993 版本,(簡稱 93 版)?,F(xiàn)在,vhdl 和 verilog 作 為 ieee 的工業(yè)標(biāo)準(zhǔn)硬件描述語言,又得到眾多 eda 公司的支持,在電子工程 領(lǐng)域,已成為事實上的通用硬件描述語言。有專家認(rèn)為,在新的世紀(jì)中, vhdl 于 verilog 語言將承擔(dān)起大部分的數(shù)字系統(tǒng)設(shè)計任務(wù)。 從宏觀的角度看,vhdl 的語法構(gòu)成了程序的各組成部分;微觀上看 vhdl 的語法是各種語句的運(yùn)用細(xì)節(jié)。本章在 vhdl 的特性之后,從這兩個 角度簡要介紹 vhdl 的語法基礎(chǔ)。 硬件描述語言 hdl(hardware d

7、escription language)誕生于 1962 年。 hdl 是用形式化的方法描述數(shù)字電路和設(shè)計數(shù)字邏輯系統(tǒng)的語言。主要用于描 述離散電子系統(tǒng)的結(jié)構(gòu)和行為。與 sdl(software description language)相 似,經(jīng)歷了從機(jī)器碼(晶體管和焊接)、匯編(網(wǎng)表)、到高級語言(hdl) 的過程。 2.1 vhdl 的應(yīng)用的應(yīng)用 vhdl 主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多 具有硬件特征的語句外,vhdl 的語言形式和描述風(fēng)格與句法是十分類似于一 般的計算機(jī)高級語言。vhdl 的程序結(jié)構(gòu)特點是將一項工程設(shè)計,或稱設(shè)計實 沈陽工程學(xué)院課程設(shè)計(論文

8、) 3 體(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部(或稱可是部分, 及端口)和內(nèi)部(或稱不可視部分),既涉及實體的內(nèi)部功能和算法完成部分。 在對一個設(shè)計實體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計就 可以直接調(diào)用這個實體。這種將設(shè)計實體分成內(nèi)外部分的概念是 vhdl 系統(tǒng)設(shè) 計的基本點。 vhdl 是一種標(biāo)準(zhǔn)的硬件電路設(shè)計語言,目前已成為廣大電路設(shè)計人員設(shè) 計數(shù)字系統(tǒng)首選的開發(fā)工具?;?vhdl 硬件電路語言的編程與實際應(yīng)用技巧, vhdl 硬件電路語言在微機(jī)、通信、編碼、存儲器以及電子電路等方面的具體 設(shè)計應(yīng)用,具有實際的指導(dǎo)意義。 關(guān)于用 vhdl 和原理圖輸入進(jìn)行

9、cpld/fpga 設(shè)計的粗略比較:在設(shè)計中, 如果采用原理圖輸入的設(shè)計方式是比較直觀的。你要設(shè)計的是什么,你就直接 從庫中調(diào)出來用就行了。這樣比較符合人們的習(xí)慣。但是這樣做需要設(shè)計人員 要在兩方面有較高的素質(zhì): 但是當(dāng)你采用 vhdl 等高級語言來設(shè)計時這些問題都會得到較好的解決。 由于在使用 vhdl 等高級語言時,有專用的工具來實現(xiàn)將語言描述的電路功能 轉(zhuǎn)換為實際的電路所以你就用不著對底層的電路很熟悉,也用不著對 cpld/fpga 的結(jié)構(gòu)很熟悉(因為有專用的工具針對你的描述采用相應(yīng)的器件哦) 。當(dāng)你要換器件時,你只需要將原來設(shè)計好的 vdhl 文件在新器件的設(shè)計工具 中再次實現(xiàn)就行了。

10、 沈陽工程學(xué)院課程設(shè)計(論文) 4 第第 3 3 章章 樂曲硬件演奏電路樂曲硬件演奏電路 3.1 基本要求基本要求 利用 fpga,設(shè)計一個樂曲硬件演奏電路。樂曲的 12 平均率規(guī)定:每 2 個 八度(如簡譜中的中音 1 與高音 1)之間的頻率相差 1 倍。在 2 個八度音之間, 又可分為 12 個半音,每 2 個半音的頻率比為 122。另外,音符 a 的頻率為 440hz,音符 b 到 c 之間,e 到 f 之間為半音,其余為全音。由此可以計算出 簡譜中從低音 l 至高音 1 之間每個音符的頻率。設(shè)計音符查找表電路模塊,時 鐘模塊,數(shù)控分頻器模塊,音樂節(jié)拍產(chǎn)生模塊電路。 3.2 原理描述原理

11、描述 產(chǎn)生音樂的兩個因素是音樂頻率和音樂的持續(xù)時間,以純硬件完成演奏電 路比利用微處理器來實現(xiàn)樂曲演奏要復(fù)雜的多,如果不憑借 eda 工具和硬件描 述語言,憑借傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡單的演奏電路也難以實現(xiàn)。樂曲 硬件演奏電路系統(tǒng)主要有數(shù)控分頻器和樂曲存儲模塊組成。數(shù)控分頻器對 fpga 的基準(zhǔn)頻率進(jìn)行分頻,得到與各個音階對應(yīng)的頻率輸出。樂曲存儲模塊產(chǎn)生節(jié) 拍控制和音階選擇信號,即在此模塊中可存放一個樂曲曲譜真值表,由一個計 數(shù)器來控制此真值表的輸出,而由計數(shù)器的計數(shù)時鐘信號作為樂曲節(jié)拍控制信 號。樂曲演奏電路的結(jié)構(gòu)框圖如下: 沈陽工程學(xué)院課程設(shè)計(論文) 5 時鐘電路 查符查表電路 音樂

12、節(jié)拍 產(chǎn)生電路 數(shù)控分頻器 基準(zhǔn)時鐘 模式選擇 圖 3.1 樂曲演奏電路結(jié)構(gòu)框圖 3.3 樂曲硬件演奏電路的層次化設(shè)計方案樂曲硬件演奏電路的層次化設(shè)計方案 樂曲硬件演奏電路的設(shè)計主要就是由三個部分組成的,首先為了實現(xiàn)音樂 的演奏必須得得到音階的頻率和節(jié)拍,這主要就是由音樂節(jié)拍發(fā)生器和數(shù)控分 頻模塊完成的,完了就是譯碼查表電路是由音符譯碼電路模塊產(chǎn)生的,樂曲硬 件演奏電路可分為三個模塊,音樂節(jié)拍發(fā)生器模塊,音符譯碼電路模塊,數(shù)控 分頻模塊。 3.3.1 音樂節(jié)拍發(fā)生器音樂節(jié)拍發(fā)生器 notetabs 該模塊將利用 fpga 的片內(nèi) pom 存放樂曲簡譜真值表,該計數(shù)器的計數(shù)頻 率為 4hz,即每

13、一個數(shù)值的停留時間為 0.25s,也就是每個節(jié)拍是 0.25s,每個 節(jié)拍的頻率也是 4hz,隨著 notetabs 中計數(shù)器按 4hz 的時鐘頻率做加法計數(shù)時, 樂符數(shù)據(jù)叫輸向音符譯碼電路 tonetaba,所以所存的樂曲就自然的演奏起來。 其 vhdl 源程序如下: library ieee; use ieee.std_logic_1164.all; 沈陽工程學(xué)院課程設(shè)計(論文) 6 entity notetabs is port ( clk : in std_logic; toneindex : out integer range 0 to 15 ); end; architecture

14、 one of notetabs is signal counter : integer range 0 to 138; begin cnt8 : process(clk) begin if counter = 138 then counter = 0; elsif (clkevent and clk = 1) then counter toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex

15、toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex

16、toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex

17、toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex

18、toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex

19、toneindex toneindex toneindex toneindex toneindex toneindex null; end case; end process; end; 隨著頻率記數(shù)器預(yù)置數(shù)記數(shù)法開始記數(shù),得到了音節(jié)的輸出頻率和節(jié)拍, 每 0.25s 為一個周期,頻率為 4hz,音階隨著基準(zhǔn)頻率分頻得到的頻率從低音 依次到高音。 沈陽工程學(xué)院課程設(shè)計(論文) 11 仿真波形如下: 圖 3.2 音樂節(jié)拍發(fā)生器防真波形 原器件符號: 圖 3.3 音樂發(fā)生器元件符號 3.3.2 音符譯碼電路音符譯碼電路 tonetaba 模塊模塊 音符譯碼電路即音調(diào)發(fā)生器實際上是一個翻譯電路,根據(jù)

20、輸入為數(shù)控分頻 模塊提供所發(fā)音符頻率的初始值,而此數(shù)控分頻模塊入口的停留時間即為此音 符的節(jié)拍數(shù),以 vhdl 程序中僅設(shè)置了“梁?!睒非恳舴鶎?yīng)的音符頻 率的初始值。 /clk_4hz: 用于控制音長(節(jié)拍)的時鐘頻率; /clk_6mhz: 用于產(chǎn)生各種音階頻率的基準(zhǔn)頻率; /speaker: 用于激勵揚(yáng)聲器的輸出信號,本例中為方波信號; /high, med, low:分別用于顯示高音、中音和低音音符,各驅(qū)動一個數(shù) 碼管來顯示。 其 vhdl 源程序如下: library ieee; use ieee.std_logic_1164.all; 沈陽工程學(xué)院課程設(shè)計(論文) 12 en

21、tity tonetaba is port ( index : in integer range 0 to 15; code : out integer range 0 to 15; high : out std_logic; tone : out integer range 0 to 16#7ff# ); end; architecture one of tonetaba is begin search : process(index) begin case index is - 譯碼電路,查表方式,控制音調(diào)的預(yù)置 數(shù) when 0 = tone = 2047; code = 0; high

22、 tone = 773; code = 1; high tone = 912; code = 2; high tone = 1036; code = 3; high tone = 1197; code = 5; high tone = 1290; code = 6; high tone = 1372; code = 7; high tone = 1410; code = 1; high tone = 1480; code = 2; high tone = 1542; code = 3; high tone = 1622; code = 5; high tone = 1668; code = 6

23、; high tone = 1728; code = 1; high null; end case; end process; end; 在源程序中 index 是音樂節(jié)拍發(fā)生器輸出的音符數(shù)據(jù);tone 是為數(shù)控分頻 模塊提供的音符頻率的初始值,為方便測試,特設(shè)置了一個音名代碼顯示輸出 code 和音高指示信號 hugh 可以通過數(shù)碼管或 led 來顯示樂曲演奏時對應(yīng)的音 沈陽工程學(xué)院課程設(shè)計(論文) 13 符和高音名。code 輸出對應(yīng)該音階簡譜的顯示數(shù)碼 1,high 輸出為高電平,指 示音階為高,high 輸出為低電平時,則指示音階為中音。低音時,tone 值小, 分頻比大,進(jìn)位信號 s

24、pks 的周期長。 圖 3.4 音符譯碼電路仿真波形 圖 3.5 音樂譯碼器元件符號 3.3.3 數(shù)控分頻模塊(數(shù)控分頻模塊(speakera)設(shè)計)設(shè)計 數(shù)控分頻模塊設(shè)計采用了預(yù)置數(shù)記數(shù)法分頻,從而得到各個音階所產(chǎn)生的 頻率輸出。所謂預(yù)置數(shù)記數(shù)就是先預(yù)置個數(shù),然后用休止符數(shù)減去預(yù)置數(shù)就是 分頻數(shù),然后用基準(zhǔn)頻率除以分頻數(shù)就是該音階的頻率。 數(shù)控分頻器對 fpga 的基準(zhǔn)頻率進(jìn)行分頻,得到與各個音階對應(yīng)的頻率輸 出。數(shù)控分頻模塊是 11 位的加法計數(shù)器構(gòu)成。當(dāng)計數(shù)器計滿是,產(chǎn)生一個進(jìn) 位信號 fullspks,該信號就是用作發(fā)音的頻率信號。在即使器的預(yù)置端給定不 同的初始值,其輸出將產(chǎn)生不同的

25、頻率信號,頻率信號初值 tone 就是前級音 符譯碼電路的輸出。低音時,tone 值小,分頻比大,進(jìn)位信號 spks 的周期長, 揚(yáng)聲器發(fā)出的聲音低,tone 隨音樂的樂譜而變化,自動控制分頻比,從而實現(xiàn) 數(shù)控分頻,發(fā)生信號的頻率與 tone 成正比,這就是利用數(shù)控分頻器演奏音樂 沈陽工程學(xué)院課程設(shè)計(論文) 14 的原理。 通過分頻后其進(jìn)位信號 fullspjks 是一周期脈沖信號,為有利于驅(qū)動揚(yáng)聲 器,在音調(diào)輸出時再進(jìn)行 2 分頻,將脈沖展寬,使之占空比為 50%,揚(yáng)聲器這 樣就有足夠的發(fā)聲功率。 其 vhdl 源程序如下: library ieee; use ieee.std_logic

26、_1164.all; entity speakera is port ( clk : in std_logic; tone : in integer range 0 to 16#7ff#; spks : out std_logic ); end; architecture one of speakera is signal preclk : std_logic; signal fullspks : std_logic; begin divideclk : process(clk) variable count4 : integer range 0 to 15; begin preclk 11

27、then preclk = 1; count4 := 0; elsif clkevent and clk = 1 then count4 := count4 + 1; end if; end process; genspks : process(preclk, tone) variable count11 : integer range 0 to 16#7ff#; begin - 11 位可預(yù)置計數(shù)器 if preclkevent and preclk = 1 then 沈陽工程學(xué)院課程設(shè)計(論文) 15 if count11 = 16#7ff# then count11 := tone; f

28、ullspks = 1; else count11 := count11 + 1; fullspks = 0; end if; end if; end process; delayspks : process(fullspks) variable count2 : std_logic; begin - 將輸出再進(jìn)行 2 分頻,將脈沖展寬,以使揚(yáng)聲器有足夠 功率發(fā)音 if fullspksevent and fullspks = 1 then count2 := not count2; if count2 = 1 then spks = 1; else spksclk8hz, toneindex

29、=toneindex); u2:tonetaba port map (index=toneindex, tone=tone,code=code1,high=high1); u3 : speakera port map(clk=clk12mhz,tone=tone, spks=spkout ); end; 頂層模塊仿真波形如下: 圖 3.8 頂層模塊仿真波形 圖 3.9 頂層元件符號 沈陽工程學(xué)院課程設(shè)計(論文) 18 沈陽工程學(xué)院課程設(shè)計(論文) 19 目目 錄錄 摘摘 要要.i abstract .ii 第第 1 1 章章 引引 言言 .1 1.1 基本要求 .1 1.2 原理描述 .1 第

30、第 2 2 章章 樂曲硬件演奏電路的層次化設(shè)計方案樂曲硬件演奏電路的層次化設(shè)計方案 .3 2.1 音樂節(jié)拍發(fā)生器 notetabs.3 2.2 音符譯碼電路 tonetaba 模塊.9 2.3 數(shù)控分頻模塊(speakera)設(shè)計.11 2.4 樂曲硬件演奏電路的頂層設(shè)計和仿真 .14 結(jié)結(jié) 論論 .16 致致 謝謝 .17 參考文獻(xiàn)參考文獻(xiàn) .18 附附 錄錄 .19 21 第第 4 4 章章 引引 言言 4.1 基本要求基本要求 利用 fpga,設(shè)計一個樂曲硬件演奏電路。演奏時可選擇鍵盤輸入樂曲或者 已存入的樂曲,并配以一個小揚(yáng)聲器。樂曲的 12 平均率規(guī)定:每 2 個八度音 (如簡譜中的

31、中音 1 與高音 1)之間的頻率相差 1 倍。在 2 個八度音之間,又可 分為 12 個半音,每 2 個半音的頻率比為 12/2。另外,音符 a(簡譜中的低音 6) 的頻率為 440hz,音符 b 到 c 之間、e 到 f 之間為半音,其余為全音。由此可 以計算出簡譜中從低音 l 至高音 1 之間每個音符的頻率。設(shè)計音符查找表電路 模塊,時鐘模塊,數(shù)控分頻器模塊,音樂節(jié)拍產(chǎn)生模塊電路。任意選擇歌曲進(jìn) 行設(shè)計。 4.2 原理描述原理描述 產(chǎn)生音樂的兩個因素是音樂頻率和音樂的持續(xù)時間,以純硬件完成演奏電 路比利用微處理器來實現(xiàn)樂曲演奏要復(fù)雜的多,如果不憑借 eda 工具和硬件描 述語言,憑借傳統(tǒng)的

32、數(shù)字邏輯技術(shù),即使最簡單的演奏電路也難以實現(xiàn)。樂曲 硬件演奏電路系統(tǒng)主要有數(shù)控分頻器和樂曲存儲模塊組成。數(shù)控分頻器對 fpga 的基準(zhǔn)頻率進(jìn)行分頻,得到與各個音階對應(yīng)的頻率輸出。樂曲存儲模塊產(chǎn)生節(jié) 拍控制和音階選擇信號,即在此模塊中可存放一個樂曲曲譜真值表,由一個計 數(shù)器來控制此真值表的輸出,而由計數(shù)器的計數(shù)時鐘信號作為樂曲節(jié)拍控制信 號。樂曲演奏電路的結(jié)構(gòu)框圖如下: 數(shù)控分頻 器電路 基準(zhǔn)時鐘 音符查表 電路 音樂節(jié)拍 發(fā)生電 路 手動輸入 圖 1.1 樂曲演奏電路的結(jié)構(gòu)框圖 時鐘電路 模式選擇 22 23 第第 5 5 章章 樂曲硬件演奏電路的層次化設(shè)計方案樂曲硬件演奏電路的層次化設(shè)計方案

33、 5.1 音樂節(jié)拍發(fā)生器音樂節(jié)拍發(fā)生器 notetabs 該模塊將利用 fpga 的片內(nèi) pom 存放樂曲簡譜真值表,該計數(shù)器的計數(shù)頻率 為 4hz,即每一個數(shù)值的停留時間為 0.25s,隨著 notetabs 中計數(shù)器按 4hz 的 時鐘頻率做加法計數(shù)時,樂符數(shù)據(jù)叫輸向音符譯碼電路 tonetaba,所以所存的 樂曲就自然的演奏起來。 其 vhdl 源程序如下: library ieee; use ieee.std_logic_1164.all; entity notetabs is port ( clk : in std_logic; toneindex : out integer ran

34、ge 0 to 15 ); end; architecture one of notetabs is signal counter : integer range 0 to 138; begin cnt8 : process(clk) begin if counter = 138 then counter = 0; elsif (clkevent and clk = 1) then counter toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex

35、 toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex

36、 toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex

37、 toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex

38、 toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex

39、 toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex toneindex null; end case; end process; end; 27 圖 2.1 音樂節(jié)拍發(fā)生器元件符號圖 仿真圖如下: 圖2.2音樂節(jié)拍發(fā)生器仿真輸出波形 5.2 音符譯碼電路音符譯碼電路 tonetaba 模塊模塊 音符譯碼電路即音調(diào)發(fā)生器實際上是一個查表電路,放置 21 個音樂簡譜對 應(yīng)的頻率表,根據(jù)該表為數(shù)控分頻模塊提供所發(fā)音符頻率的初始值,而此數(shù)控 分頻模塊入口的停留時間即為此音符的節(jié)拍數(shù),以 vhd

40、l 程序中僅設(shè)置了“梁祝” 樂曲全部音符所對應(yīng)的音符頻率的初始值。 其 vhdl 源程序如下: library ieee; use ieee.std_logic_1164.all; entity tonetaba is port ( index : in integer range 0 to 15; code : out integer range 0 to 15; high : out std_logic; tone : out integer range 0 to 16#7ff# ); end; architecture one of tonetaba is begin search :

41、process(index) begin 28 case index is - 譯碼電路,查表方式,控制音調(diào)的預(yù) 置數(shù) when 0 = tone = 2047; code = 0; high tone = 773; code = 1; high tone = 912; code = 2; high tone = 1036; code = 3; high tone = 1197; code = 5; high tone = 1290; code = 6; high tone = 1372; code = 7; high tone = 1410; code = 1; high tone = 14

42、80; code = 2; high tone = 1542; code = 3; high tone = 1622; code = 5; high tone = 1668; code = 6; high tone = 1728; code = 1; high null; end case; end process; end; 在源程序中 index 是音樂節(jié)拍發(fā)生器輸出的音符數(shù)據(jù);tone 是為數(shù)控分頻 模塊提供的音符頻率的初始值,為方便測試,特設(shè)置了一個音名代碼顯示輸出 code 和音高指示信號 hugh 可以通過一個數(shù)碼管或 led 來顯示樂曲演奏時對應(yīng) 的音符和高音名。code 輸出對應(yīng)該音階簡譜的顯示數(shù)碼 1,high 輸出為高電平, 指示音階為高,high 輸出為低電平時則指示音階為中音。 圖 2.3 音符譯碼器元件符號圖 仿真圖如下: 29 圖 2.4 音符譯碼器仿真輸出波形 2.3 數(shù)控分頻模塊數(shù)控分頻模塊(speakera)設(shè)計設(shè)計 數(shù)控分頻器對 fpga 的基準(zhǔn)頻率進(jìn)行分頻,得到

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論