




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、. . . . 摘要根據(jù)國家發(fā)改委與專業(yè)教學(xué)委員會對教育機(jī)構(gòu)的要求,為培養(yǎng)適應(yīng)我國21世紀(jì)國民經(jīng)濟(jì)發(fā)展的電子設(shè)計(jì)人才;同時(shí)基于國家教委面向21世紀(jì)電工電子課程體系改革和電工電子工科教學(xué)基地建設(shè)兩項(xiàng)教學(xué)改革研究成果。要求高等本科在校學(xué)生能夠自己動手完成簡單的數(shù)字器件設(shè)計(jì)。本次設(shè)計(jì)在自己手動焊接簡易的PFGA板子上實(shí)現(xiàn),并且在QusrtusII 9.0上利用VHDL設(shè)計(jì)數(shù)控分頻器電路,利用數(shù)控分頻原理設(shè)計(jì)音樂硬件演奏電路,并制定LPM-ROM存儲音樂數(shù)據(jù),以“梁?!睒非鸀槔?,將音樂數(shù)據(jù)存儲到LPM-ROM,就達(dá)到了已純硬件的手段來實(shí)現(xiàn)樂曲演奏的效果,只要修改LPM-ROM所存儲的音樂數(shù)據(jù),將其轉(zhuǎn)換
2、為其他的音樂數(shù)據(jù),再重新制定LPM-ROM,在連接到程序中就可以實(shí)現(xiàn)其他與取得演奏。本次設(shè)計(jì)采用的FPGA主芯片位ALTERA公司的FLEX系列的EPF10K10LC84-4。由于板子是自己手動在萬用板上焊接的所以只焊接了必要的外設(shè)如蜂鳴器和LED。關(guān)鍵詞FPGA;音樂播放器;QuartusII;VHDL;17 / 18目錄摘要I第一章 前言21.1關(guān)于EDA技術(shù)21.2 關(guān)于VHDL21.3 關(guān)于EDA工具31.4 有關(guān)本次課程設(shè)計(jì)3第二章設(shè)計(jì)實(shí)現(xiàn)42.1音樂演奏電路原理42.1.1音符頻率的獲得42.1.2樂曲節(jié)奏的控制52.1.3樂譜發(fā)生器52.1.4樂曲演奏電路原理框圖52.2音樂硬件
3、演奏電路的設(shè)計(jì)實(shí)現(xiàn)52.2.1各個(gè)模塊的功能簡介52.2.2music模塊62.3地址發(fā)生器模塊82.3.1地址發(fā)生器的VHDL設(shè)計(jì)82.3.2波形仿真92.4分頻預(yù)置數(shù)模塊92.4.1分頻預(yù)置數(shù)模塊的VHDL設(shè)計(jì)92.4.2波形仿真102.5十六進(jìn)制模塊112.5.1十六進(jìn)制模塊的VHDL設(shè)計(jì)112.5.2波形仿真112.6數(shù)控分頻模塊122.6.1數(shù)控分頻模塊的VHDL設(shè)計(jì)122.6.2 波形仿真132.7分頻模塊132.8頂層模塊15結(jié)論17參考文獻(xiàn)18第一章 前言1.1關(guān)于EDA技術(shù)隨著科學(xué)技術(shù)的進(jìn)步,電子器件和電子系統(tǒng)設(shè)計(jì)方法日新月異,電子設(shè)計(jì)自動化(Electronics Desi
4、gn Automation,EDA)技術(shù)正是適應(yīng)了現(xiàn)代電子產(chǎn)品設(shè)計(jì)的要求,吸收了多學(xué)科最新成果而形成的一門新技術(shù)?,F(xiàn)如今掌握EDA技術(shù)是電子信息類專業(yè)的學(xué)生、工程技術(shù)人員所必備的基本能力和技能。傳統(tǒng)電子電路的設(shè)計(jì),首先要對系統(tǒng)進(jìn)行分析,然后按功能對系統(tǒng)進(jìn)行劃分,接下來就要選擇特定芯片,焊接成PCB電路板,最后對成品PCB電路板進(jìn)行調(diào)試。這樣的設(shè)計(jì)沒有靈活性可言,搭成的系統(tǒng)需要的芯片種類多且數(shù)目大,而且對于電路圖的設(shè)計(jì)和電路板的設(shè)計(jì)都需要很大的工作量,工作難度也很高。然而,隨著可編程器件和EDA技術(shù)的發(fā)展,傳統(tǒng)設(shè)計(jì)的劣勢被克服,采用可編程邏輯器件基于芯片的設(shè)計(jì)方法,期間的部邏輯和引腳可以由設(shè)計(jì)者
5、自行決定,大大提高了設(shè)計(jì)的靈活性,提高了工作效率;同時(shí),將系統(tǒng)集成在一個(gè)芯片上的設(shè)計(jì),使系統(tǒng)具有體積小、功耗低、可靠性高等特點(diǎn)。EDA技術(shù)的發(fā)展大致經(jīng)歷了三個(gè)階段:20世紀(jì)70年代的CAD(計(jì)算機(jī)輔助設(shè)計(jì))階段、20世紀(jì)80年代的CAE(計(jì)算機(jī)輔助工程)階段、20世紀(jì)90年代后的EDA(電子設(shè)計(jì)自動化)階段。以下主要介紹第三個(gè)階段。EDA技術(shù)即電子設(shè)計(jì)自動化技術(shù),它是以可編程邏輯器件(PLD)為載體,以硬件描述語言(HDL)為主要的描述方式,以EDA軟件為主要的開發(fā)軟件的電子設(shè)計(jì)過程。它主要采用“自頂向下”的設(shè)計(jì)方法,設(shè)計(jì)流程主要包括:設(shè)計(jì)輸入、綜合、仿真、適配、下載。EDA技術(shù)主要有以下特征
6、:(1)高層綜合的理論和方法取得進(jìn)展,從而將EDA設(shè)計(jì)層次由RT級提高到了系統(tǒng)級,并推出了相應(yīng)的系統(tǒng)級綜合優(yōu)化工具,大大縮短了復(fù)雜ASIC的設(shè)計(jì)周期。(2)采用硬件描述語言來描述10萬門以上的設(shè)計(jì),并形成了VHDL和Verilog-HDL兩種標(biāo)準(zhǔn)硬件描述語言。(3)采用平面規(guī)劃技術(shù)對邏輯綜合和物理版圖設(shè)計(jì)聯(lián)合管理,做到在邏輯設(shè)計(jì)綜合早期階段就考慮到物理設(shè)計(jì)信息的影響。(4)可測性綜合設(shè)計(jì)。(5)為帶有嵌入式IP核的ASIC設(shè)計(jì)提供軟、硬件協(xié)同設(shè)計(jì)工具。(6)建立并行設(shè)計(jì)工具框架結(jié)構(gòu)的集成化設(shè)計(jì)環(huán)境,以適應(yīng)當(dāng)今ASIC規(guī)模大而復(fù)雜、數(shù)字與模擬電路并存、硬件與軟件設(shè)計(jì)并存、產(chǎn)品上市速度快等特點(diǎn)???/p>
7、而言之,EDA技術(shù)的出現(xiàn),給電子信息產(chǎn)業(yè)帶來了革命性的變革。1.2關(guān)于VHDLVHDL是一種硬件描述語言,它可以對電子電路和系統(tǒng)的行為進(jìn)行描述,基于這種描述,結(jié)合相關(guān)的軟件工具,可以得到所期望的實(shí)際電路與系統(tǒng)。使用VHDL語言描述的電路,可以進(jìn)行綜合和仿真。然而,值得注意的是,盡管所有VHDL代碼都是可仿真的,但并不是所有代碼都能綜合。VHDL被廣泛使用的基本原因在于它是一種標(biāo)準(zhǔn)語言,是與工具和工藝無關(guān)的,從而可以方便地進(jìn)行移植和重用。VHDL兩個(gè)最直接的應(yīng)用領(lǐng)域是可編程邏輯器件(PLD)和專用集成電路(ASIC),其中可編程邏輯器件包括復(fù)雜可編程邏輯器件(CPLD)和現(xiàn)場可編程門陣列(FPG
8、A)。關(guān)于VHDL最后要說明的是:與常規(guī)的順序執(zhí)行的計(jì)算機(jī)程序不同,VHDL從根本上講是并發(fā)執(zhí)行的。在VHDL中,只有在進(jìn)程(PROCESS)、函數(shù)(FUNCTION)和過程(PROCEDURE)部的語句才是順序執(zhí)行的。1.3EDA工具目前有多種EDA工具支持采用VHDL進(jìn)行電路綜合、仿真以與實(shí)現(xiàn)。比較常見的是Altera公司的Quartus開發(fā)平臺和Xilinx公司的ISE開發(fā)平臺。這些平臺中使用的綜合工具和仿真工具通常由專業(yè)的EDA廠商提供。本次設(shè)計(jì)中所使用的平臺正是Quartus7.2,它是Altera公司提供的一套集成了編譯、布局布線和仿真工具在的綜合開發(fā)環(huán)境。它能完成從代碼輸入到編譯
9、到仿真再到物理實(shí)現(xiàn)的全部設(shè)計(jì)流程。1.4有關(guān)于本次課程設(shè)計(jì)本次課程設(shè)計(jì)要求使用EDA工具,設(shè)計(jì)實(shí)現(xiàn)簡易音樂演奏器,理解音名與頻率的關(guān)系與數(shù)控分頻原理,經(jīng)過對整體進(jìn)行模塊化分析、編程、綜合、仿真與最終下載,完整實(shí)現(xiàn)簡易音樂器的播放功能。我們知道,與利用單片機(jī)來實(shí)現(xiàn)樂曲演奏相比,以純硬件完成樂曲演奏電路的邏輯要復(fù)雜得多,如果不借助于功能強(qiáng)大的EDA工具與硬件描述語言,僅憑傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡單的演奏電路也難以實(shí)現(xiàn)。在后面的章節(jié)中會詳細(xì)介紹利用EDA技術(shù)實(shí)現(xiàn)簡易音樂演奏器的過程。第二章 設(shè)計(jì)實(shí)現(xiàn)2.1音樂演奏電路原理先介紹一下硬件電路的發(fā)聲原理。聲音的頻譜圍約在幾十到幾千赫茲,若能利用程序來
10、控制FPGA某個(gè)引腳輸出一定頻率的矩形波,接上揚(yáng)聲器就能發(fā)出相應(yīng)頻率的聲音。樂曲中的每一音符對應(yīng)著一個(gè)確定的頻率,要想FPGA發(fā)出不同音符的音調(diào),實(shí)際上只要控制它輸出相應(yīng)音符的頻率即可。樂曲都是由一連串的音符組成,因此按照樂曲的樂譜依次輸出這些音符所對應(yīng)的頻,就可以在揚(yáng)聲器上連續(xù)地發(fā)出各個(gè)音符的音調(diào)。而要準(zhǔn)確地演奏出一首樂曲,僅僅讓揚(yáng)聲器能夠發(fā)生是不夠的,還必須準(zhǔn)確地控制樂曲的節(jié)奏,即樂曲中每個(gè)音符的發(fā)生頻率與其持續(xù)時(shí)間是樂曲能夠連續(xù)演奏的兩個(gè)關(guān)鍵因素。2.1.1音符頻率的獲得多個(gè)不同頻率的信號可通過對某個(gè)基準(zhǔn)頻率進(jìn)行分頻器獲得。由于各個(gè)音符的頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將計(jì)
11、算機(jī)得到的分頻系數(shù)四舍五入取整。若基準(zhǔn)頻率過低,則分頻系數(shù)過小,四舍五入取整后的誤差較大。若基準(zhǔn)頻率過高,雖然可以減少頻率的相對誤差,但分頻結(jié)構(gòu)將變大。實(shí)際上應(yīng)該綜合考慮這兩個(gè)方面的因素,在盡量減少誤差的前提下,選取合適的基準(zhǔn)頻率。本文中選取750KHz的基準(zhǔn)頻率。由于現(xiàn)有的高頻時(shí)鐘脈沖信號的頻率為12MHz,故需先對其進(jìn)行16分頻,才能獲得750KHz的基準(zhǔn)頻率。對基準(zhǔn)頻率分頻后的輸出信號是一些脈寬極窄的尖脈沖信號(占空比=1/分頻系數(shù))。為提高輸出信號的驅(qū)動能力,以使揚(yáng)聲器有足夠的功率發(fā)音,需要再通過一個(gè)分頻器將原來的分頻器的輸出脈沖均衡為對稱方波(占空比=1/2),但這時(shí)的頻率將是原來的
12、1/2。表1中各音符的分頻系數(shù)就是從750KHz的基準(zhǔn)頻率二分頻得到的375KHz頻率基礎(chǔ)上計(jì)算得到的。由于最大分頻系數(shù)是1274,故分頻器采用11位二進(jìn)制計(jì)數(shù)器能滿足要求,樂曲中的休止符,只要將分頻系數(shù)設(shè)為0,即初始值=211-1=2047,此時(shí)揚(yáng)聲器不會發(fā)聲。表2-1 各個(gè)音符的頻率與其對應(yīng)的分頻系數(shù)(基準(zhǔn)頻率375KHz)音符名頻 率(Hz)分頻系數(shù)計(jì)數(shù)初值音符名頻 率(Hz)分頻系數(shù)計(jì)數(shù)初值休止符37500002047中音4796.1784681579低音1294.3491274773中音5882.3534251622低音2330.3961135912中音6989.4463
13、791668低音3370.9210111036中音71136.3633301717低音4386.5989701077高音11175.5493191728低音5394.7379501197高音21353.7902771770低音6495.3767571290高音31512.0972481799低音7555.566751372高音41609.4422331814中音1588.6976371410高音51802.8842081839中音2638.845871480高音62027.0271851862中音3742.5745051542高音72272.72716518822.1.2樂曲節(jié)奏的控制本文中的
14、梁祝樂曲,最小的節(jié)拍為1/4拍,若將1拍的時(shí)間定為1秒,則只需要提供一個(gè)4Hz的時(shí)鐘頻率即可產(chǎn)生1/4拍的時(shí)長(0.25秒),對于其它占用時(shí)間較長的節(jié)拍(必為1/4拍的整數(shù)倍)則只需要將該音符連續(xù)輸出相應(yīng)的次數(shù)即可。計(jì)數(shù)時(shí)鐘信號作為輸出音符快慢的控制信號,時(shí)鐘快時(shí)輸出節(jié)拍速度就快,演奏的速度也就快,時(shí)鐘慢時(shí)輸出節(jié)拍的速度就慢,演奏的速度自然降低。2.1.3樂譜發(fā)生器本文將樂譜中的音符數(shù)據(jù)存儲在LPM-ROM中,如“梁?!睒非械牡谝粋€(gè)音符為“3”,此音在邏輯中停留了4個(gè)時(shí)鐘節(jié)拍,即1秒的時(shí)間,相應(yīng)地,音符“3”就要在LPM-ROM中連續(xù)的四個(gè)地址上都存儲。當(dāng)一個(gè)4Hz的時(shí)鐘來時(shí),相應(yīng)地就從LP
15、M-ROM中輸出一個(gè)音符數(shù)據(jù)。2.1.4樂曲演奏電路原理框圖當(dāng)一個(gè)4Hz的時(shí)鐘脈沖來到時(shí),樂譜發(fā)生器模塊輸出一個(gè)音符數(shù)據(jù)給分頻系數(shù)模塊,分頻系數(shù)模塊輸出此音符相應(yīng)的分頻系數(shù),將分頻系數(shù)送給數(shù)控分頻器模塊,當(dāng)12MHz的時(shí)鐘脈沖來到時(shí),數(shù)控分頻器就根據(jù)分頻系數(shù)輸出相應(yīng)的頻率(即此音符所對應(yīng)的發(fā)生頻率)給揚(yáng)聲器,揚(yáng)聲器就可發(fā)出對應(yīng)音符的聲音來.連續(xù)的4Hz的時(shí)鐘脈沖就將樂譜發(fā)生器里所存儲的音符數(shù)據(jù)一個(gè)接一個(gè)的送給了分頻系數(shù)模塊,再經(jīng)過數(shù)控分頻模塊,最后揚(yáng)聲器一個(gè)接一個(gè)的發(fā)出音符數(shù)據(jù)所對應(yīng)的聲音來。曲子也就流暢的播放出來了。2.2音樂硬件演奏電路的設(shè)計(jì)實(shí)現(xiàn)音樂硬件演奏電路主要是用VHDL語言來設(shè)計(jì),
16、并利用QuartusII軟件工具來編譯、測試和仿真。2.2.1各個(gè)模塊的功能簡介根據(jù)頂層原理圖,共分為music模塊、地址發(fā)生器模塊、分頻預(yù)置數(shù)模塊、十六進(jìn)制模塊、數(shù)控分頻模塊這五個(gè)模塊。music模塊存放樂曲中的音符數(shù)據(jù),地址發(fā)生器模塊作為music模塊中所定制的音符數(shù)據(jù)ROM的地址發(fā)生器,分頻預(yù)置數(shù)模塊提供分頻預(yù)置數(shù)即給數(shù)控分頻模塊提供計(jì)數(shù)初值,十六進(jìn)制模塊對12MHz的時(shí)鐘脈沖進(jìn)行16分頻,得到750KHz的頻率,給數(shù)控分頻模塊提供時(shí)鐘脈沖。數(shù)控分頻模塊根據(jù)分頻預(yù)置數(shù)輸出各個(gè)音符所對應(yīng)的頻率。2.2.2music模塊Music模塊存放樂曲中的音符數(shù)據(jù),它是利用LPM-ROM來實(shí)現(xiàn)的,將樂
17、譜中相應(yīng)的音符放在一個(gè)連續(xù)的地址上。它首先是編寫音符數(shù)據(jù)文件,將樂譜中相應(yīng)的音符存放在一個(gè)連續(xù)的地址上。因?yàn)?拍的時(shí)間定為1秒,提供的是4Hz的時(shí)鐘頻率(即1/4拍的整數(shù)倍),則需將這個(gè)音符存儲在相應(yīng)次數(shù)的連續(xù)幾個(gè)地址上。然后對音符數(shù)據(jù)進(jìn)行ROM定制,最后對定制好的ROM文件進(jìn)行測試和仿真。圖2-1 音符數(shù)據(jù)文件形成ROM中的配置數(shù)據(jù)(初始化數(shù)據(jù))文件的方法如下:在QuartusII中編輯.mif文件。首先在File菜單下的New菜單上選擇Memory Initialization File命令,進(jìn)入編輯器,然后在空格處輸入以上格式的數(shù)據(jù)文件。如46位置處為9,表示46為地址,9為該地址中的數(shù)
18、據(jù)。這樣每讀到一個(gè)地址,即可輸出其相應(yīng)的數(shù)據(jù)。文件編輯好后,保存時(shí)取文件名為“c.mif”,存盤的路徑為“工程文件夾下”。LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY c ISPORT(address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);clock: IN STD_LOGIC := '1'q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END c;ARCHITECTURE SYN OF c ISSIG
19、NAL sub_wire0: STD_LOGIC_VECTOR (3 DOWNTO 0);COMPONENT altsyncramGENERIC (clock_enable_input_a: STRING;clock_enable_output_a: STRING;init_file: STRING;intended_device_family: STRING;lpm_hint: STRING;lpm_type: STRING;numwords_a: NATURAL;operation_mode: STRING;outdata_aclr_a: STRING;outdata_reg_a: STR
20、ING;widthad_a: NATURAL;width_a: NATURAL;width_byteena_a: NATURAL);PORT (clock0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT;BEGINq <= sub_wire0(3 DOWNTO 0);altsyncram_component : altsyncramGENERIC MAP (clock_enable_input_a => &
21、quot;BYPASS",clock_enable_output_a => "BYPASS",init_file => "c.mif",intended_device_family => "FLEX",lpm_hint => "ENABLE_RUNTIME_MOD=NO",lpm_type => "altsyncram",numwords_a => 256,operation_mode => "ROM",outdata_ac
22、lr_a => "NONE",outdata_reg_a => "CLOCK0",widthad_a => 8,width_a => 4,width_byteena_a => 1)PORT MAP (clock0 => clock,address_a => address,q_a => sub_wire0);END SYN;定制的基本步驟如下:1)進(jìn)入QuartusII,選菜單 tools->megawizard plug-in manager,選擇“creat a new”,然后按“next”鍵,進(jìn)
23、入圖3所示界面。選擇LPM-ROM;最后在browse下的欄中鍵入路徑與輸出文件名:“f:FPGA_musicc.vhd”,注意后綴vhd小寫。2)單擊“next”鍵,將出現(xiàn)圖4所示的界面,選擇ROM數(shù)據(jù)位寬度為4,地址線寬為8,即設(shè)置此ROM能存儲8位二進(jìn)制數(shù)據(jù)共64個(gè),然后進(jìn)入圖5所示的窗口。3)通過在圖5所示窗口的“browse”鈕,找到ROM中的加載文件路徑和文件名:“f:FPGA_musicc.mif”,注意ROM元件的inclock是地址鎖存時(shí)鐘。4)在QuartusII中打開已定制的ROM文件。將它設(shè)置為工程,并確定目標(biāo)器件,進(jìn)行測試。2.3地址發(fā)生器模塊地址發(fā)生器模塊設(shè)置了一個(gè)
24、8位二進(jìn)制計(jì)數(shù)器(計(jì)數(shù)最大值為138),作為音符數(shù)據(jù)ROM的地址發(fā)生器。每來一個(gè)時(shí)鐘脈沖信號(Clk),8位二進(jìn)制計(jì)數(shù)器就計(jì)數(shù)一次,ROM文件中的地址也就隨著遞增,音符數(shù)據(jù)ROM中的音符也就一個(gè)接一個(gè)連續(xù)的取出來了。2.3.1地址發(fā)生器的VHDL設(shè)計(jì)這個(gè)計(jì)數(shù)器的計(jì)數(shù)頻率選為4Hz,即每一計(jì)數(shù)值的停留時(shí)間為0.25秒,恰為當(dāng)全音符設(shè)為1秒,四四拍的4分音符持續(xù)時(shí)間。例如,地址發(fā)生器在以下的VHDL邏輯描述中,“梁祝”樂曲的第一個(gè)音符為“3”,此音在邏輯中停留了4個(gè)時(shí)鐘節(jié)拍,即1秒時(shí)間。那么相應(yīng)隨著程序4中的計(jì)數(shù)器按4Hz的時(shí)鐘頻率作加法計(jì)數(shù)時(shí),即隨地址遞增時(shí),將從音符數(shù)據(jù)ROM中將連續(xù)取出4個(gè)音
25、符“3”通過toneindex3.0端口輸向分頻預(yù)置數(shù)模塊。這樣梁祝樂曲中的音符就一個(gè)接一個(gè)的通過toneindex3.0端口輸向分頻預(yù)置數(shù)模塊。程序如下Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity notetabs is Port( clk : in std_logic;Toneindex : out std_logic_vector(3 downto 0); End;Architecture one of notetabs is Component c Port(address
26、: in std_logic_vector(7 downto 0);clock : in std_logic;q : out std_logic_vector(3 downto 0); End component; Signal counter : std_logic_vector(7 downto 0); Begin Cnt8 : process(clk) Begin If counter="11111111"then counter<="00000000" Elsif(clk'event and clk='1')then
27、 counter<=counter+1; End if; End process; U1 : c port map(address=>counter,q=>toneindex,clock=>clk);End;2.3.2波形仿真將所編寫的地址發(fā)生器模塊的程序設(shè)為工程,選用FLEX10K中的EPF10K10LC84-4為目標(biāo)芯片進(jìn)行仿真。仿真結(jié)果如下圖:圖2-2 地址發(fā)生器模塊的仿真波形圖程序的功能是每來一個(gè)時(shí)鐘,地址值遞增1,并將這個(gè)地址上所存儲的音符數(shù)據(jù)輸出。從圖中可以看到,當(dāng)Clk來了一個(gè)時(shí)鐘脈沖,輸出相應(yīng)地址上的音符3, 地址值遞增1;接下來的三個(gè)時(shí)鐘脈沖來時(shí),輸出
28、也是音符3,地址連續(xù)遞增3次;再下一個(gè)脈沖來時(shí),輸出為音符5等等都符合模塊中的音符數(shù)據(jù)文件中的地址/數(shù)據(jù)表。這個(gè)仿真波形圖證明了程序?qū)崿F(xiàn)了地址發(fā)生器模塊的功能。2.4分頻預(yù)置數(shù)模塊分頻預(yù)置數(shù)模塊是樂曲簡譜碼對應(yīng)的分頻預(yù)置數(shù)查表電路。它提供了每個(gè)音符所對應(yīng)的分頻預(yù)置數(shù),即給數(shù)控分頻模塊提供計(jì)數(shù)初值,這里以“梁?!睒非鸀槔谐隽嗽谶@個(gè)樂曲中所用到的13個(gè)音符的分頻預(yù)置數(shù)。2.4.1分頻預(yù)置數(shù)模塊的VHDL設(shè)計(jì)在這個(gè)模塊的VHDL邏輯描述中設(shè)置了“梁?!睒非腥恳舴鶎?yīng)的分頻預(yù)置數(shù),共13個(gè),每一音符的停留時(shí)間由音樂節(jié)拍和地址發(fā)生器模塊的時(shí)鐘(Clk)的輸入頻率決定,在此為4Hz。這13個(gè)值的
29、輸出由程序3的4位輸入值index3.0確定。輸向程序中index3.0的值又由地址發(fā)生器模塊的輸出toneindex3.0的輸出值和持續(xù)時(shí)間決定。程序如下:Library ieee;Use ieee.std_logic_1164.all;Entity tonetaba is Port( index : in std_logic_vector(3 downto 0); code : out std_logic_vector(3 downto 0); high : out std_logic;tone : out std_logic_vector(10 downto 0);End;Archite
30、cture one of tonetaba isBegin Search : process(index) Begin Case index is When "0000"=>tone<=""code<="0000"high<='0'-2047,休止符 When "0001"=>tone<=""code<="0001"high<='0'-773,低音1 When "0010"=&
31、gt;tone<=""code<="0010"high<='0'-912,低音2 When "0011"=>tone<=""code<="0011"high<='0'-1036,低音3, When "0101"=>tone<=""code<="0101"high<='0'-1197,低音5 When "0110&q
32、uot;=>tone<=""code<="0110"high<='0'-1290,低音6 When "0111"=>tone<=""code<="0111"high<='0'-1372,低音7 When "1000"=>tone<=""code<="0001"high<='1'-1410,中音1 When "
33、1001"=>tone<=""code<="0010"high<='1'-1480,中音2 When "1010"=>tone<=""code<="0011"high<='1'-1542,中音3 When "1100"=>tone<=""code<="0101"high<='1'-1622,中音5 When
34、"1101"=>tone<=""code<="0110"high<='1'-1668,中音6 When "1111"=>tone<=""code<="0001"high<='1'-1728,高音1 When others => null; End case; End process;End;End;2.4.2 波形仿真將所編寫的分頻預(yù)置數(shù)模塊的程序設(shè)為工程,仿真選用的目標(biāo)芯片是EPF10K1
35、0LC84-4。仿真結(jié)果如下圖:圖2-3 分頻預(yù)置數(shù)模塊的仿真波形圖模塊的功能是輸出各個(gè)音符所對應(yīng)的分頻預(yù)置數(shù),由上面的仿真波形圖可看到當(dāng)index是“0000”,tone輸出為2047,即休止符的分頻預(yù)置數(shù);當(dāng)index是“0101”時(shí), tone輸出為1197即低音5的分頻預(yù)置數(shù);當(dāng)index是“1111”時(shí), tone輸出為1728即高音1的分頻預(yù)置數(shù)等等其它狀態(tài)時(shí),tone分別輸出相應(yīng)音符的分頻預(yù)置數(shù)。這個(gè)仿真波形圖證明了程序?qū)崿F(xiàn)了模塊的功能。2.5十六進(jìn)制模塊由其clk端輸入一具有較高頻率的信號(這里是12MHz)的信號,通過分頻后由cout輸出。這里是對12MHz的信號進(jìn)行16分頻
36、得到750KHz的信號。750KHz的時(shí)鐘脈沖信號是給數(shù)控分頻模塊提供時(shí)鐘信號。2.5.1十六進(jìn)制模塊的VHDL設(shè)計(jì)用以下的VHDL邏輯描述來實(shí)現(xiàn)十六進(jìn)制模塊的功能。Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entityt16 is port( clk : in std_logic; cout : out std_logic);endt16;architecture shiliu oft16 is begin process(clk) variable cqi : std_logic_vec
37、tor(3 downto 0); begin if cqi>"1111" then cqi:="0000" elsif clk'event and clk='1' then cqi:=cqi+1; end if; if cqi="1111"then cout<='1' else cout<='0' end if; end process;end shiliu;2.5.2 波形仿真將程序設(shè)為工程,選用目標(biāo)芯片為EPF10K10LC84-4對程序進(jìn)行編譯和仿真。仿真
38、結(jié)果如下圖:圖2-4 十六進(jìn)制仿真波形圖此模塊的功能是對輸入的時(shí)鐘脈沖信號的頻率進(jìn)行16分頻。從仿真波形圖上可以看到cout輸出一個(gè)脈沖,此時(shí)的Clk剛好來第16個(gè)脈沖,即cout的頻率是Clk頻率的16分之一。可見所編寫的程序?qū)崿F(xiàn)了模塊的功能。2.6 數(shù)控分頻模塊音符的頻率由數(shù)控分頻模塊獲得,這是一個(gè)數(shù)控分頻電路。它是由一個(gè)初值可變的加法計(jì)數(shù)器構(gòu)成。該計(jì)數(shù)器的模為2047,當(dāng)計(jì)數(shù)器記滿時(shí),計(jì)數(shù)器產(chǎn)生一個(gè)溢出信號FULL,此溢出信號就是用作發(fā)音的頻率信號。在計(jì)數(shù)器的輸入端給定不同的初值,而此預(yù)置數(shù)就是表1中的計(jì)數(shù)初值,就可得到不同音符的發(fā)音頻率信號。它計(jì)滿時(shí)所需要的計(jì)數(shù)初值可由下式來表示。計(jì)數(shù)
39、初值(Tone)=2047-分頻系數(shù)而分頻系數(shù)又可有下式來求:分頻系數(shù)=基準(zhǔn)頻率/音符的發(fā)生頻率低音時(shí)Tone值小,分頻系數(shù)大,溢出信號周期長,揚(yáng)聲器發(fā)出的聲音低,Tone隨音樂的樂譜變化大,自動控制分頻比,實(shí)現(xiàn)了數(shù)控分頻,發(fā)生信號的頻率與音調(diào)Tone成正比。這就是利用數(shù)控分頻器自動演奏音樂的原理。52.6.1 數(shù)控分頻模塊的VHDL設(shè)計(jì)其時(shí)鐘(Clk)端輸入的是在十六進(jìn)制模塊里對12MHz的信號進(jìn)行16分頻得到的750KHz,750KHz的信號根據(jù)分頻預(yù)置數(shù)模塊中所提供的計(jì)數(shù)初值,分別得出相應(yīng)音符頻率的兩倍值。此時(shí)從數(shù)控分頻器中出來的輸出信號是脈寬極窄的脈沖式信號,為了有利于驅(qū)動揚(yáng)聲器,需另
40、加一個(gè)D觸發(fā)器以均衡其占空比,這時(shí)的頻率就變?yōu)樵瓉淼?/2,剛好就是相應(yīng)音符的頻率。數(shù)控分頻模塊中對Clk輸入信號的分頻比由11位預(yù)置數(shù)tone10.0決定。Fout的輸出頻率將決定每一個(gè)音符的音調(diào),這樣,分頻計(jì)數(shù)器的預(yù)置值tone10.0與Fout的輸出頻率就有了對應(yīng)關(guān)系。例如在分頻預(yù)置數(shù)模塊中若取tone10.0=1036,將發(fā)出音符為“3”音的信號頻率。程序3如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pulse is port ( clk : in std_logi
41、c; d : in std_logic_vector(10 downto 0); fout : out std_logic );end;architecture ONE of pulse is signal full : std_logic;begin p_reg: process(clk) variablet11,cnt111 : std_logic_vector(10 downto 0); begin if clk'event and clk = '1' then t111:= 2046 - d; ift11 =t111 then t11 := "&quo
42、t; full <= '1' else t11:=t11 + 1; full <= '0' end if; end if; end process p_reg ; p_div: process(full) variablet2 : std_logic; begin if full'event and full = '1' then t2 := nott2; ift2 = '1' then fout <= '1' else fout <= '0' end if; end
43、 if; end process p_div ;end;2.6.2 波形仿真將以上程序設(shè)為當(dāng)前工程,選用FLEX10K中的EPF10K10LC84-4為目標(biāo)芯片對程序進(jìn)行編譯和仿真。仿真結(jié)果圖如下圖。圖2-5 數(shù)控分頻模塊的仿真波形圖此模塊的功能是根據(jù)初始值d的值,對輸入時(shí)鐘信號Clk的頻率進(jìn)行分頻,得到想要的音符的發(fā)聲頻率。在這個(gè)仿真波形圖中,d的值設(shè)為6c0(即高音1的分頻預(yù)置數(shù)1728),Clk的頻率為750KHz,F(xiàn)out輸出的脈沖信號的周期為848.587us(即1178.43Hz),接近高音1的發(fā)聲頻率。由表1中可知高音1的分頻系數(shù)為319,即對輸入時(shí)鐘Clk進(jìn)行319次分頻就可得
44、高音1的發(fā)聲頻率。因此這個(gè)程序?qū)崿F(xiàn)了模塊的功能。2.7分頻模塊 由于系統(tǒng)需要4hz的頻率和25Mhz的輸入由于只用一塊25M晶振所以需要將25Mhz分頻成為4hz,有如下兩段代碼:-分配器-*庫定義、 包定義*library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-*實(shí)體定義*Entity clk25Mhz_4khz isgeneric(duty:integer:=3125 );-類屬參數(shù)說明語句-端口說明 port(clkin_25Mh:ins
45、td_logic;-時(shí)鐘輸入clkout_4khz: out std_logic-分頻輸出 );end clk25Mhz_4khz;-*構(gòu)造體定義*Architecture div6250 of clk25Mhz_4khz is constant period : integer:=6250;-常數(shù)定義,分頻數(shù) signal count : integer range 0 to period-1;-信號定義,計(jì)數(shù)作用 beginprocess(clkin_25Mh)-進(jìn)程,由clk這個(gè)信號啟動 beginif rising_edge(clkin_25Mh) then -上升沿驅(qū)動,還有另一種寫
46、法,見其他例程 if count<duty thenclkout_4khz<='0'count<=count+1;elsif count<period-1 then clkout_4khz<='1'count<=count+1;elsecount<=0;end if;end if;end process;end div6250;-分配器-*庫定義、 包定義*library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_
47、LOGIC_UNSIGNED.ALL;-*實(shí)體定義*Entity clk4khz_4hz isgeneric(duty:integer:=500 );-類屬參數(shù)說明語句-端口說明 port(clkin_4khz:instd_logic;-時(shí)鐘輸入clkout_4hz: out std_logic-分頻輸出 );end clk4khz_4hz;-*構(gòu)造體定義*Architecture div1000 of clk4khz_4hz is constant period : integer:=1000;-常數(shù)定義,分頻數(shù) signal count : integer range 0 to perio
48、d-1;-信號定義,計(jì)數(shù)作用 beginprocess(clkin_4khz)-進(jìn)程,由clk這個(gè)信號啟動 beginif rising_edge(clkin_4khz) then -上升沿驅(qū)動,還有另一種寫法,見其他例程 if count<duty thenclkout_4hz<='0'count<=count+1;elsif count<period-1 then clkout_4hz<='1'count<=count+1;elsecount<=0;end if;end if;end process;end div1000;由于分頻程序過于簡單且分頻后結(jié)果單一,就不再進(jìn)行波形仿真。2.8頂層文件程序如下:Library ieee;Use ieee.std_logic_1164.all;Entity songer is Port( clk25mhz : in std_logic; Clk4hz: in std_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. 人人文庫網(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄭州亞歐交通職業(yè)學(xué)院《文化地理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江中醫(yī)藥大學(xué)濱江學(xué)院《應(yīng)用文體翻譯》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025至2031年中國擺動導(dǎo)纜架行業(yè)投資前景及策略咨詢研究報(bào)告
- 中南林業(yè)科技大學(xué)《閱讀教學(xué)中的文本解讀》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025至2031年中國女裝棉拉架低腰內(nèi)褲行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國冷拉模具行業(yè)投資前景及策略咨詢研究報(bào)告
- 06【初中】【帶班育人方略】依托Z型發(fā)展模式育“三感”攀登者
- 2025至2030年中國鉤型拉緊把手?jǐn)?shù)據(jù)監(jiān)測研究報(bào)告
- 照明配電改造施工方案
- 2025至2030年中國紙機(jī)托輥數(shù)據(jù)監(jiān)測研究報(bào)告
- 1000m3液化石油氣球罐設(shè)計(jì)課程設(shè)計(jì)
- GB/T 9061-2006金屬切削機(jī)床通用技術(shù)條件
- GB/T 7554-1987電報(bào)用五單位數(shù)字保護(hù)碼
- GB/T 32788.5-2016預(yù)浸料性能試驗(yàn)方法第5部分:樹脂含量的測定
- GB/T 19447-2013熱交換器用銅及銅合金無縫翅片管
- 醫(yī)院患者壓力性損傷情況登記表
- GA/T 959-2011機(jī)動車區(qū)間測速技術(shù)規(guī)范
- 圓錐曲線中非對稱問題的處理課件
- 《中國少先隊(duì)歌》歌詞帶拼音
- 垃圾分類科普課件
- 精益六西格瑪綠帶課件
評論
0/150
提交評論