版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)說明書1 引言22 VHDL及QuartusII軟件簡介32.1 EDA簡介32.2 硬件描述語言VHDL32.3軟件介紹43 簡易樂曲演奏器設(shè)計(jì)及仿真53.1原理描述53.1.1音名與頻率的關(guān)系53.1.2可變分頻器53.1.3節(jié)拍發(fā)生器原理73.2樂曲演奏電路各模塊設(shè)計(jì)83.3 樂曲演奏電路的子結(jié)構(gòu)83.3.1 音調(diào)發(fā)生器模塊83.3.2音調(diào)編碼器電路模塊113.3.3分頻器電路模塊143.3.4 手動自動選擇模塊163.3.6 數(shù)控分頻器模塊203.4 頂層程序及仿真223.4.1 頂層程序223.4.2 頂層原理仿真圖243.5 硬件下載及實(shí)現(xiàn)24總結(jié)27參考文獻(xiàn)281 引言V
2、HDL語言是一種用于電路設(shè)計(jì)的高級語言。它在80年代的后期出現(xiàn)。最初是由美國國防部開發(fā)出來供美軍用來提高設(shè)計(jì)的可靠性和縮減開發(fā)周期的一種使用范圍較小的設(shè)計(jì)語言 。隨著EDA技術(shù)的高速發(fā)展,電子系統(tǒng)的設(shè)計(jì)技術(shù)和工具發(fā)生了深刻的變化,大規(guī)??删幊踢壿嬈骷﨏PLDFPGA的出現(xiàn),給設(shè)計(jì)人員帶來了諸多方便。利用它進(jìn)行產(chǎn)品開發(fā),不僅成本低、周期短、可靠性高,而且具有完全的知識產(chǎn)權(quán)。突出了其作為硬件描述語言的良好的可讀性、可移植性和易讀性等優(yōu)點(diǎn)。本文基于FPGA開發(fā)系統(tǒng),在QuartusII 7.2軟件平臺上,完成了簡易多功能信號發(fā)生器電路的設(shè)計(jì)和與仿真,并下載到試驗(yàn)箱進(jìn)行硬件實(shí)現(xiàn)。首先,本文介紹了Qua
3、rtusII 7.2軟件的基本使用方法和VHDL硬件描述語言的特點(diǎn),采用VHDL 硬件描述語言描述簡易信號發(fā)生器,完成對電路的功能仿真。在設(shè)計(jì)過程中,重點(diǎn)探討了簡易信號發(fā)生器設(shè)計(jì)思路和功能模塊劃分。然后,初步探討了電路邏輯綜合的原理,該軟件對簡易多功能信號發(fā)生器電路進(jìn)行了邏輯綜合。最后,使用EDA實(shí)驗(yàn)開發(fā)系統(tǒng)進(jìn)行電路的下載和驗(yàn)證。驗(yàn)證結(jié)果表明設(shè)計(jì)的簡易簡易信號發(fā)生器完成了預(yù)期的功能。簡易多功能信號發(fā)生器是信號發(fā)生器的一種,在生產(chǎn)實(shí)踐和科研領(lǐng)域中有著廣泛的應(yīng)用。在研制、生產(chǎn)、測試和維修各種電子元件、部件以及整機(jī)設(shè)備時,都需要有信號源,由它產(chǎn)生不同頻率不同波形的電壓、電流信號并加到被測器件或設(shè)備上
4、,用其他儀器觀察、測量被測儀器的輸出響應(yīng),以分析確定它們的性能參數(shù)。信號發(fā)生器是電子測量領(lǐng)域中最基本、應(yīng)用最廣泛的一類電子儀器。它可以產(chǎn)生多種波形信號,如正弦波,三角波,方波和鋸齒波等,因而廣泛用于通信、雷達(dá)、導(dǎo)航、宇航等領(lǐng)域。本設(shè)計(jì)是采用VHDL來實(shí)現(xiàn)的簡易樂曲演奏器。它能實(shí)現(xiàn)自動演奏已存歌曲和手動演奏簡易樂曲。且要求實(shí)現(xiàn)如下功能:(1)通過按鍵輸入來控制音響聲音 ;(2)演奏時可以通過按鍵選擇是手動演奏還是自動演奏,手動演奏是通過按鍵進(jìn)行簡易樂曲的演奏,自動演奏則是演奏已存入的固定樂曲;(3保存四首自動演奏的樂曲,自動演奏的樂曲能重復(fù)播放并且能選擇播放;(4)進(jìn)行手動演奏和自動演奏時,數(shù)碼
5、管上要同時能顯示演奏樂曲的樂譜;(5)自動播放時,設(shè)置低速,中速,快速控制鍵,能實(shí)現(xiàn)樂曲不同速度的播放。2 VHDL及QuartusII軟件簡介2.1 EDA簡介EDA是電子設(shè)計(jì)自動化(Electronic Design Automation)的縮寫,在20世紀(jì)60年代中期從計(jì)算機(jī)輔助設(shè)計(jì)(CAD)、計(jì)算機(jī)輔助制造(CAM)、計(jì)算機(jī)輔助測試(CAT)和計(jì)算機(jī)輔助工程(CAE)的概念發(fā)展而來的。EDA技術(shù)就是以計(jì)算機(jī)為工具,設(shè)計(jì)者在EDA軟件平臺上,用硬件描述語言HDL完成設(shè)計(jì)文件,然后由計(jì)算機(jī)自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映射
6、和編程下載等工作。EDA技術(shù)的出現(xiàn),極大地提高了電路設(shè)計(jì)的效率和可操作性,減輕了設(shè)計(jì)者的勞動強(qiáng)度。 利用EDA工具,電子設(shè)計(jì)師可以從概念、算法、協(xié)議等開始設(shè)計(jì)電子系統(tǒng),大量工作可以通過計(jì)算機(jī)完成,并可以將電子產(chǎn)品從電路設(shè)計(jì)、性能分析到設(shè)計(jì)出IC版圖或PCB版圖的整個過程的計(jì)算機(jī)上自動處理完成?,F(xiàn)在對EDA的概念或范疇用得很寬。包括在機(jī)械、電子、通信、航空航天、化工、礦產(chǎn)、生物等各個領(lǐng)域,都有EDA的應(yīng)用。2.2 硬件描述語言VHDL硬件描述語言(HDL)是一種用于設(shè)計(jì)硬件電子系統(tǒng)的計(jì)算機(jī)語言,它用軟件編程的方式來描述電子系統(tǒng)的邏輯功能、電路結(jié)構(gòu)和連接形式,與傳統(tǒng)的門級描述方式相比,它更適合大規(guī)
7、模系統(tǒng)的設(shè)計(jì)。例如一個32位的加法器,利用圖形輸入軟件需要輸人500至1000個門,而利用VHDL語言只需要書寫一行“A=B+C” 即可。而且 VHDL語言可讀性強(qiáng),易于修改和發(fā)現(xiàn)錯誤。早期的硬件描述語言,如ABEL、HDL、AHDL,由不同的EDA廠商開發(fā),互不兼容,而且不支持多層次設(shè)計(jì),層次間翻譯工作要由人工完成。為了克服以上不足,1985年美國國防部正式推出了高速集成電路硬件描述語言VHDL,1987年IEEE采納VHDL為硬件描述語言標(biāo)準(zhǔn)(IEEE-STD-1076)。VHDL是一種全方位的硬件描述語言,包括系統(tǒng)行為級。寄存器傳輸級和邏輯門多個設(shè)計(jì)層次,支持結(jié)構(gòu)、數(shù)據(jù)流和行為三種描述形
8、式的混合描述,因此VHDL幾乎覆蓋了以往各種硬件俄語言的功能,整個自頂向下或由下向上的電路設(shè)計(jì)過程都可以用VHDL來完成。VHDL還具有以下優(yōu)點(diǎn):(1)VHDL的寬范圍描述能力使它成為高層進(jìn)設(shè)計(jì)的核心,將設(shè)計(jì)人員的工作重心提高到了系統(tǒng)功能的實(shí)現(xiàn)與調(diào)試,而花較少的精力于物理實(shí)現(xiàn)。(2)VHDL可以用簡潔明確的代碼描述來進(jìn)行復(fù)雜控制邏輯設(shè)計(jì),靈活且方便,而且也便于設(shè)計(jì)結(jié)果的交流、保存和重用。(3)VHDL的設(shè)計(jì)不依賴于特定的器件,方便了工藝的轉(zhuǎn)換。(4)VHDL是一個標(biāo)準(zhǔn)語言,為眾多的EDA廠商支持,因此移植性好。美國于1981年提出了一種新的、標(biāo)準(zhǔn)化的HDL,稱之為VHSIC(Very High
9、 Speed Integrated Circuit) Hardware Description Language,簡稱VHDL。這是一種用形式化方法來描述數(shù)字電路和設(shè)計(jì)數(shù)字邏輯系統(tǒng)的語言。設(shè)計(jì)者可以利用這種語言來描述自己的設(shè)計(jì)思想,然后利用電子設(shè)計(jì)自動化工具進(jìn)行仿真,再自動綜合到門電路,最后用PLD實(shí)現(xiàn)其功能。2.3軟件介紹Quartus II 是Altera公司的綜合性PLD開發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完
10、整PLD設(shè)計(jì)流程。 Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設(shè)計(jì)流程外,提供了完善的用戶圖形界面設(shè)計(jì)方式。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點(diǎn)。 Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。對第三方EDA工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個階段使用熟悉的第三方EDA工具。 此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結(jié)合,可以方便地實(shí)現(xiàn)各種DSP應(yīng)用系統(tǒng);支持
11、Altera的片上可編程系統(tǒng)(SOPC)開發(fā),集系統(tǒng)級設(shè)計(jì)、嵌入式軟件開發(fā)、可編程邏輯設(shè)計(jì)于一體,是一種綜合性的開發(fā)平臺。 Maxplus II 作為Altera的上一代PLD設(shè)計(jì)軟件,由于其出色的易用性而得到了廣泛的應(yīng)用。Altera在Quartus II 中包含了許多諸如SignalTap II、Chip Editor和RTL Viewer的設(shè)計(jì)輔助工具,集成了SOPC和HardCopy設(shè)計(jì)流程,并且繼承了Maxplus II 友好的圖形界面及簡便的使用方法。 Altera Quartus II 作為一種可編程邏輯的設(shè)計(jì)環(huán)境, 由于其強(qiáng)大的設(shè)計(jì)能力和直觀易用的接口,越來越受到數(shù)字系統(tǒng)設(shè)計(jì)者
12、的歡迎。3 簡易樂曲演奏器設(shè)計(jì)及仿真3.1原理描述3.1.1音名與頻率的關(guān)系樂譜中從低音1到高音1之間每個音名的頻率如表3-1所示:表3-1 簡譜中的音名與頻率的關(guān)系音名頻率(Hz)音名頻率(Hz)音名頻率(Hz)低音1261中音1523高音11046低音2294中音2578高音21175低音3330中音3659高音31318低音4349中音4698高音41397低音5392中音5784高音51568低音6440中音6880高音61760低音7440中音7988高音719763.1.2可變分頻器1. 基準(zhǔn)頻率的選取各音名所對應(yīng)的頻率可由一頻率較高的基準(zhǔn)頻率進(jìn)行整數(shù)分頻得到,所以實(shí)際產(chǎn)生各音名頻
13、率為近似的整數(shù)值。這是由于音階頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將得到的分頻系數(shù)四舍五入取整,若基準(zhǔn)頻率過低,則由于分頻系數(shù)過小,四舍五入取整后的誤差較大,若基準(zhǔn)頻率過高,雖然誤碼差較小,但分頻結(jié)構(gòu)將變大,實(shí)際的設(shè)計(jì)應(yīng)綜合考慮兩方面的因素,在盡量減小頻率差的前提下取舍合適的基準(zhǔn)頻率。本次設(shè)計(jì)選擇10MHz作為基準(zhǔn)頻率。2. 分頻系數(shù)A、公用二進(jìn)制的計(jì)數(shù)容量N及初始值的選取D(1) 分頻系數(shù)的選取 首先將10MHz的基準(zhǔn)頻率進(jìn)行10分頻,得到1MHz的基準(zhǔn)頻率,分頻系數(shù)A1MHz音名頻率,此分頻系數(shù)可由計(jì)數(shù)器實(shí)現(xiàn)。為得到對稱方波,可將分頻系數(shù)A分解為:分頻系數(shù)A=分頻系數(shù)n×
14、;2。即先進(jìn)行分頻系數(shù)n的分頻,得到不對稱方波,然后再2分頻得到對稱方波。(2) 公用二進(jìn)制的計(jì)數(shù)容量N的選取n分頻可由n進(jìn)制計(jì)數(shù)器實(shí)現(xiàn)。n進(jìn)制計(jì)數(shù)器可用復(fù)位法或置位法實(shí)現(xiàn),由于加載初始值d的置位法可有效地減少設(shè)計(jì)所占用的可編程邏輯器件資源,因此,此次設(shè)計(jì)采用置位法。低音1的分頻數(shù)n為最大,其值為1275,應(yīng)取公用二進(jìn)制計(jì)數(shù)器的計(jì)數(shù)容量N大與“最大分頻系數(shù)n”,故本次設(shè)計(jì)的公用二進(jìn)制計(jì)數(shù)器應(yīng)該設(shè)計(jì)為十一位二進(jìn)制加法計(jì)數(shù)器,其計(jì)數(shù)最大容量為2048,計(jì)數(shù)的最大值N為2047,可滿足本次設(shè)計(jì)中所有音名對音頻系數(shù)的要求。(3) 初始值的選取D初始值D = 計(jì)數(shù)最大值N - 分頻系數(shù)n此次設(shè)計(jì)中應(yīng)用的
15、各音名對應(yīng)的分頻系數(shù)值及初始值如表所示:表3-2各音名對應(yīng)的分頻系數(shù)值及初始值音符初始值對應(yīng)音譜區(qū)別高中低音020470011091112119621312893141331415140951614796171541718156912916212210166832111689421217285213176362141794123. 丟手絹的音符譜為:5,5,5,5,5,5,3,3,5,5,5,5,5,5,3,3,5,5,3,3,2,2,3,3,5,5,5,5,0,0,0,0,5,5,5,5,5,5,3,3,6,6,6,6,5,5,5,5,3,3,5,5,3,3,2,2,1,1,1,1,2,2,
16、2,2,3,3,3,3,5,5,5,5,3,3,2,2,1,1,2,2,3,3,3,3,0,0,0,0,6,6,5,5,6,6,5,5,2,2,3,3,5,5,5,5,6,6,5,5,6,6,5,5,2,2,2,2,3,3,3,3,1,1,1,1,0,0,0,0賣報(bào)歌的音符譜為:5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,5,5,6,6,5,3,2,2,3,3,5,5,5,5,5,5,3,3,5,5,3,2,1,1,3,3,2,2,2,2,3,3,3,3,2,2,2,2,6,6,1,1,2,2,2,2,6,6,6,6,6,6,5,5,3,3,6,6,5,5,5,5,5,
17、5,3,3,2,2,3,3,5,5,5,5,0,0,0,0,5,5,3,3,2,2,3,3,5,5,3,3,2, 3,3,6,6,1,1,2,2,3,3,1,1,1,1,0,0,0,水調(diào)歌頭的音符譜為:8,8,8,13,5,6,8,8,8,8,8,8,8,8,8,8,8,8,6,9,9,9,9,9,10,10,8,6,10,10,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,6,9,9,9,9,9,9,9,9,9,8,8,8,6,5,5,6,8,8,8,8,8,8,8,8,8,8,8,8,6,5,5,6,9,9,9,9,9,9,9,9,9,10,10,8,6,10,1
18、0,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,5,5,7,7,6,6,8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,0,10,10,10,9,10,10,8,8,11,11,12,11,10,10,9,8,9,9,9,9,9,12,13,12,9,9,9,9,9,9,9,9,10,10,10,9,10,10,8,8,11,11,12,11,10,10,9,8,9,9,9,9,9,12,13,12,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,6,5,5,6,8,8,8,
19、8,8,8,8,8,8,8,8,8,6,5,5,6,9,9,9,9,9,9,9,9,9,10,10,8,6,10,10,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,8,9,9,9,9,9,9,9,9,9,5,5,7,7,6,7,8,8,8,8,8,8,8,8,8娃娃臉的音符譜為:5,6,5,6,5,6,5,6,4,5,4,5,4,5,4,5,3,4,3,4,3,4,3,4,5,5,5,5,3,3,2,2,2,2,2,1,14,14,1,1,2,2,12,12,3,3,3,3,5,5,4,4,3,3,1,1,12,12,5,6,5,6,5,6,5,6,4,5,4,5,
20、4,5,4,5,3,4,3,4,3,4,3,4,5,5,5,5,3,3,2,2,2,2,2,2,2,2,3,3,3,3,2,2,1,1,1,1,1,1,0,03.1.3節(jié)拍發(fā)生器原理該演奏電路的最小節(jié)拍為1拍,將一拍的時長定為0.25s,則只需要再提供一個4Hz的時鐘頻率即可產(chǎn)生一拍的時長。為了能達(dá)到演奏時能循環(huán)進(jìn)行,則需設(shè)置一個時長計(jì)數(shù)器,當(dāng)樂曲演奏完時,保證能自動從頭開始演奏。3.2樂曲演奏電路各模塊設(shè)計(jì)本次設(shè)計(jì)樂曲演奏電路結(jié)構(gòu)方框圖如圖3-1所示:基準(zhǔn)時鐘10MHz功能拓展手動輸入FPGA時鐘電路數(shù)控分頻器電路音樂節(jié)拍產(chǎn)生電路音調(diào)編碼電路4Hz10MHz揚(yáng)聲器數(shù)碼管圖3-1樂曲演奏電路結(jié)
21、構(gòu)方框圖3.3 樂曲演奏電路的子結(jié)構(gòu)頂層結(jié)構(gòu)所包含的模塊分別有音調(diào)發(fā)生器模塊、音調(diào)編碼器模塊、分頻器模塊、手動自動選擇模塊及數(shù)控分頻器模塊。3.3.1 音調(diào)發(fā)生器模塊1. 音調(diào)發(fā)生器模塊在此模塊中設(shè)置了一個整形計(jì)數(shù)器,這個計(jì)數(shù)器的計(jì)數(shù)頻率選為4Hz,即每一計(jì)數(shù)值的停留時間為0.25s,恰好為當(dāng)全音符設(shè)為1s時,四四拍的4分音符的持續(xù)時間。在此音樂發(fā)生模塊中添加了手動選擇播放歌曲的功能,當(dāng)選則端口x=“00”時播放丟手絹,x=“01”時播放賣報(bào)歌,x=“10”時播放水調(diào)歌頭,當(dāng)x=“11”時播放娃娃臉。音調(diào)發(fā)生器模塊VHDL源程序如下:library ieee;use ieee.std_logi
22、c_1164.all; entity notetaba isport(clk:in std_logic;x: in std_logic_vector(1 downto 0);note:out integer range 0 to 15);end;architecture bhv of notetaba istype va is array(0 to 127 ) of integer range 0 to 15;type vb is array(0 to 125 ) of integer range 0 to 15;type vc is array(0 to 295 ) of integer r
23、ange 0 to 15;type vd is array(0 to 109 ) of integer range 0 to 15;constant memory1:va:=(5,5,5,5,5,5,3,3,5,5,5,5,5,5,3,3,5,5,3,3,2,2,3,3,5,5,5,5,0,0,0,0,5,5,5,5,5,5,3,3,6,6,6,6,5,5,5,5,3,3,5,5,3,3,2,2,1,1,1,1,2,2,2,2,3,3,3,3,5,5,5,5,3,3,2,2,1,1,2,2,3,3,3,3,0,0,0,0,6,6,5,5,6,6,5,5,2,2,3,3,5,5,5,5,6,6,
24、5,5,6,6,5,5,2,2,2,2,3,3,3,3,1,1,1,1,0,0,0,0);constant memory2:vb:=(5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,5,5,6,6,5,3,2,2,3,3,5,5,5,5,5,5,3,3,5,5,3,2,1,1,3,3,2,2,2,2,3,3,3,3,2,2,2,2,6,6,1,1,2,2,2,2,6,6,6,6,6,6,5,5,3,3,6,6,5,5,5,5,5,5,3,3,2,2,3,3,5,5,5,5,0,0,0,0,5,5,3,3,2,2,3,3,5,5,3,3,2, 3,3,6,6,1,1,2,2,
25、3,3,1,1,1,1,0,0,0,0);constant memory3:vc:=(8,8,8,13,5,6,8,8,8,8,8,8,8,8,8,8,8,8,6,9,9,9,9,9,10,10,8,6,10,10,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,6,9,9,9,9,9,9,9,9,9,8,8,8,6,5,5,6,8,8,8,8,8,8,8,8,8,8,8,8,6,5,5,6,9,9,9,9,9,9,9,9,9,10,10,8,6,10,10,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,8,8,8,9,9,9,9,9,9,9,
26、9,9,9,9,5,5,7,7,6,6,8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,0,10,10,10,9,10,10,8,8,11,11,12,11,10,10,9,8,9,9,9,9,9,12,13,12,9,9,9,9,9,9,9,9,10,10,10,9,10,10,8,8,11,11,12,11,10,10,9,8,9,9,9,9,9,12,13,12,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,6,5,5,6,8,8,8,8,8,8,8,8,8,8,8,8,6,5,5,6,9,9,9,9,9,9,9,9,9,10,10,8,6,10,1
27、0,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,8,9,9,9,9,9,9,9,9,9,5,5,7,7,6,7,8,8,8,8,8,8,8,8,8);constant memory4:vd:=(5,6,5,6,5,6,5,6,4,5,4,5,4,5,4,5,3,4,3,4,3,4,3,4,5,5,5,5,3,3,2,2,2,2,2,1,14,14,1,1,2,2,12,12,3,3,3,3,5,5,4,4,3,3,1,1,12,12,5,6,5,6,5,6,5,6,4,5,4,5,4,5,4,5,3,4,3,4,3,4,3,4,5,5,5,5,3,3,2,2,2,2
28、,2,2,2,2,3,3,3,3,2,2,1,1,1,1,1,1,0,0);signal counter1:integer range 0 to 354;signal counter2:integer range 0 to 120;signal counter3:integer range 0 to 295;signal counter4:integer range 0 to 109; beginprocess(clk,counter1,counter2,counter3,counter4,x)beginif(x="00") then if counter1=354 the
29、ncounter1<=0; elsif clk'event and clk='1' then counter1<=counter1+1; end if; note<=memory1(counter1); elsif(x="01") then if counter2=120 thencounter2<=0; elsif clk'event and clk='1' then counter2<=counter2+1; end if; note<=memory2(counter2); elsif(
30、x="10") then if counter3=295 thencounter3<=0; elsif clk'event and clk='1' then counter3<=counter3+1; end if; note<=memory3(counter3); elsif(x="11") then if counter4=109 thencounter4<=0; elsif clk'event and clk='1' then counter4<=counter4+1;
31、end if; note <=memory4 (counter4); end if; end process;end;2. 音調(diào)發(fā)生器模塊的仿真圖圖3-2 音調(diào)發(fā)生器模塊的仿真波形圖通過仿真圖可以清楚的看到,時鐘clk由0開始計(jì)數(shù),每計(jì)一次數(shù)輸出toneindex的值隨之發(fā)生一定的變化,只不過根據(jù)樂譜的不同,輸出的變化也不盡相同。例如在本次設(shè)計(jì)中,自第1個時鐘上升沿來臨到第4個時鐘上升沿,輸出toneindex “1”。于是根據(jù)樂譜的不同就輸出不同的音符,作為音調(diào)編碼器的輸入。然后把輸出toneindex輸入到音調(diào)編碼器模塊,進(jìn)行下一步編碼工作。于是,由仿真圖可以知道本模塊輸出的即為演奏
32、音樂的音符譜,說明該程序正確,可以生成邏輯器件。3. 音調(diào)發(fā)生器模塊生成的邏輯器件圖3-3 音調(diào)發(fā)生器電路模塊生成器件3.3.2音調(diào)編碼器電路模塊1. 音調(diào)編碼器模塊該編碼模塊的作用為將輸入的音符數(shù)據(jù)翻譯為音樂產(chǎn)生模塊的所需要的分頻系數(shù),并且顯示音符的數(shù)字碼型和高音階,通過對照表3-2各音名對應(yīng)的分頻系數(shù)值及初始值,根據(jù)輸入得到初始值,從而得到分頻系數(shù)以便進(jìn)行分頻,得到所需的頻率。音調(diào)編碼器模塊的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity tonetaba isport(index:in integer range 0 to
33、15;code:buffer integer range 0 to 15;code1:out integer range 0 to 15;digit : out std_logic_vector(6 downto 0);tone:out integer range 0 to 2047);end;architecture bhv of tonetaba isbeginprocess(index)begin case index iswhen 0=>tone<=2047;code<=0;code1<=0;when 1=>tone<=1091;code<=1
34、;code1<=0;when 2=>tone<=1196;code<=2;code1<=0;when 3=>tone<=1289;code<=3;code1<=0;when 4=>tone<=1331;code<=4;code1<=0;when 5=>tone<=1409;code<=5;code1<=0; when 6=>tone<=1479;code<=6;code1<=0;when 7=>tone<=1541;code<=7;code1<=
35、0;when 8=>tone<=1569;code<=1;code1<=1;when 9=>tone<=1621;code<=2;code1<=1;when 10=>tone<=1668;code<=3;code1<=1;when 11=>tone<=1689;code<=4;code1<=1; when 12=>tone<=1728;code<=5;code1<=1;when 13=>tone<=1763;code<=6;code1<=1; when
36、 14=>tone<=1794;code<=7;code1<=1;when others=>NULL;end case;case code iswhen 0=>digit <= "1111110"when 1=>digit <= "0110000"when 2=>digit <= "1101101"when 3=>digit <= "1111001"when 4=>digit <= "0110011"whe
37、n 5=>digit <= "1011011"when 6=>digit <= "1011111"when 7=>digit <= "1110000"when others=> null;end case;end process;end ;2. 音調(diào)編碼器模塊的仿真圖圖3-4 音調(diào)發(fā)生器模塊的仿真波形圖在此程序中index為音樂節(jié)拍產(chǎn)生模塊輸出的音符數(shù)據(jù),經(jīng)過翻譯后將tone輸出到數(shù)控分頻模塊為其提供分頻系數(shù)的初始值,code為數(shù)碼管顯示的字符數(shù),應(yīng)用模式5,所以直接輸出音符的二進(jìn)制值,cod
38、e1為高音階指示信號,當(dāng)code1為是說明輸出為高音階的音符。通過仿真圖可以清楚地看到結(jié)果。3. 音調(diào)編碼器模塊生成的邏輯器件圖3-5 音調(diào)發(fā)生器電路模塊生成器件3.3.3分頻器電路模塊1. 分頻器模塊以及拓展功能(控制播放速度快慢)該編碼模塊的作用為將10MHZ的時鐘信號分頻出4HZ的時鐘信號,從而實(shí)現(xiàn)只用一個時鐘信號控制電路。分頻器模塊的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity fenpin isport(clk:in std_logic ; s:in std_logic_vector(1 downto 0); clko
39、ut:buffer std_logic);end ;architecture bhv of fenpin issignal clkout1 : std_logic; signal clkout2 : std_logic;signal clkout3 : std_logic;beginprocess(clk)variable temp1 :integer range 0 to 1500000;variable temp2 :integer range 0 to 1500000;variable temp3 :integer range 0 to 1500000;beginif (clk'
40、event and clk='1') thentemp1:=temp1+1;if temp1=1250000 thenclkout1<=not clkout1;temp1:=0;end if;end if;if (clk'event and clk='1') thentemp2:=temp2+1;if temp2=1500000 thenclkout2<=not clkout2;temp2:=0;end if;end if;if (clk'event and clk='1' )thentemp3:=temp3+1;if
41、 temp3=1000000 thenclkout3<=not clkout3;temp3:=0;end if;end if;end process;process(s,clkout,clkout1,clkout2,clkout3)begincase s iswhen "00" =>clkout<=clkout1;when "01" =>clkout<= clkout2;when "11"=> clkout <= clkout3;when others => null;end case;
42、end process;end bhv;2. 分頻器模塊的仿真圖圖3-6 分頻器模塊的仿真波形圖在此程序中clk為輸入的10MHZ時鐘信號,經(jīng)過2.5M分頻得到4HZ的時鐘信號。3. 分頻器模塊生成的邏輯器件圖3-7 分頻器電路模塊生成器件3.3.4 手動自動選擇模塊1. 手動自動選擇模塊根據(jù)設(shè)計(jì)的要求,該簡易樂曲演奏器能實(shí)現(xiàn)手動或自動演奏樂曲的功能。于是,可通過一個按鍵cs來進(jìn)行自動與手動的選擇,當(dāng)cs按下時,樂曲自動演奏,其他情況下均為手動演奏樂曲,即可以通過按下其他的按鍵(與cs相連的按鍵除外)來控制不同的音符。與此同時,還需要一個復(fù)位信號rst來控制該演奏器是否工作,當(dāng)rst為1時,停
43、止演奏,為0時,可以演奏。以上提到的手動與自動的選擇只能在rst為0時有效。手動自動選擇模塊的VHDL源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity bmux isport(d1,d2:in integer range 0 to 15;cs,rst:in std_logic;q:out integer range 0 to 15); end;architecture bhv of bmux isbegin process(cs,rst)variable key :std_logic
44、_vector( 6 downto 0);beginkey := conv_std_logic_vector(d2,7);if rst='1' then q<=0;elsecase cs iswhen '0'=>q<=d1; when '1'=>q<=d2; when others=>q<=d1;end case;end if;end process;end;2. 手動自動選擇模塊的仿真圖圖3-8 分頻器模塊的仿真波形圖此仿真圖中輸入cs代表手動自動演奏的選擇端,輸入rst代表整體復(fù)位端,輸入d1、d2分
45、別代表手動和自動演奏的音符,q為輸出端,由此仿真圖可清楚的看到當(dāng)rst=1時,不論選擇的是手動還是自動,輸出都為零,達(dá)到了整體復(fù)位的功能;當(dāng)rst=0且cs=1時,自動演奏樂曲,因?yàn)閝與d2的值相同;當(dāng)rst=0且cs=0時,手動演奏樂曲,因?yàn)檫@時的q與d1的值相同,從而也達(dá)到了演奏方式選擇的功能。3. 手動自動選擇模塊生成的邏輯器件圖3-9 分頻器電路模塊生成器件3.3.5 手動輸入音符1.手動輸入音符該模塊通過7個手動控制端(0 to 6)來控制輸出7的音符(1 2 3 4 5 6 7)。手動輸入音符的VHDL源程序:library ieee;use ieee.std_logic_1164
46、.all;entity hand is port(k:in std_logic_vector(6 downto 0); q1:out integer range 0 to 15); end;architecture bhv of hand is beginsearch:process(k) begin case k is when"0000001"=>q1<=1; when"0000010"=>q1<=2; when"0000100"=>q1<=3; when"0001000"=
47、>q1<=4; when"0010000"=>q1<=5; when"0100000"=>q1<=6; when"1000000"=>q1<=7; when others=>q1<=0; end case; end process;end;2.手動輸入音符的仿真波形圖圖3-10手動輸入音符仿真圖在此仿真圖中,當(dāng)cs=1時,開始手動輸入音符,由d2段輸入,控制輸出1,2,3,4,5,6,7。3.手動輸入音符生成的邏輯器件如圖圖3-11手動輸入音符生成的模塊3.3.6 數(shù)控分頻器
48、模塊1. 數(shù)控分頻器模塊的功能該模塊的clk端輸入一個具有較高頻率(本實(shí)驗(yàn)為10MHz)的信號,通過分頻后由spks輸出。由于直接從數(shù)控分頻器中出來的輸出信號是脈寬極窄的脈沖信號,為了便于驅(qū)動喇叭,需另加一個D觸發(fā)器均衡其占空比,也即作二分頻處理。分頻器對clk輸入信號的分頻比由11位預(yù)置數(shù)tone10.0決定。spks的輸出頻率將決定每一音符的音調(diào),這樣分頻計(jì)數(shù)器的預(yù)置數(shù)tone10.0與spks的輸出頻率就有了對應(yīng)關(guān)系。數(shù)控分頻器模塊的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity speak isport(clk:in st
49、d_logic;tone:in integer range 0 to 2047;spks:out std_logic);end;architecture bhv of speak issignal preclk:std_logic;signal fullspks:std_logic;beginprocess(clk)variable count4:integer range 0 to 15;beginpreclk<='0'if count4>10 thenpreclk<='1'count4:=0;elsif clk'event and
50、clk='1' thencount4:=count4+1;end if;end process;process(preclk,tone)variable count11:integer range 0 to 2047;beginif preclk'event and preclk='1' thenif count11=2047 thencount11:=tone;fullspks<='1'elsecount11:=count11+1;fullspks<='0'end if;end if;end process;
51、process(fullspks)variable count2:std_logic;beginif fullspks'event and fullspks='1' thencount2:=not count2;if count2='1' thenspks<='1'elsespks<='0'end if;end if;end process;end;2. 數(shù)控分頻器模塊的仿真圖圖3-12 數(shù)控分頻器模塊的仿真波形圖在此仿真圖中,輸入clk是一個頻率較大的時鐘信號,輸入tone代表著某個音符的分頻初始值,輸出sp
52、ks則代表將輸入clk先經(jīng)過10次分頻,再經(jīng)過(預(yù)置數(shù)終值2048-tone)次分頻,最終再進(jìn)行二分頻處理,而這個信號的頻率就是我們需要演奏的音譜的頻率,根據(jù)頻率的不同,從而能通過喇叭聽到不同的聲音,實(shí)現(xiàn)音樂的播放。3. 數(shù)控分頻器模塊生成的邏輯器件圖3-13 數(shù)控分頻器電路模塊生成器件3.4 頂層程序及仿真3.4.1 頂層程序?qū)⒏鱾€模塊組合起來,進(jìn)行編譯、下載,從而實(shí)現(xiàn)整體功能。它將音調(diào)發(fā)生器模塊、音調(diào)編碼器模塊、分頻器模塊、手動輸入音符、手動自動選擇模塊及數(shù)控分頻器模塊連接起來。頂層的VHDL源程序:library ieee; use ieee.std_logic_1164.all; en
53、tity top1 is port ( clk : in std_logic ; cs,rst : in std_logic; x : in std_logic_vector(1 downto 0); s : in std_logic_vector(1 downto 0); k : in std_logic_vector( 6 downto 0); code:buffer integer range 0 to 15; code1:out integer range 0 to 15; digit : out std_logic_vector(6 downto 0); spkout: out st
54、d_logic ); end top1;architecture one of top1 is component notetaba is port(clk:in std_logic; x : in std_logic_vector(1 downto 0); note:out integer range 0 to 15 ); end component; component bmux is port(d1,d2:in integer range 0 to 15; cs,rst:in std_logic; q:out integer range 0 to 15); end component; component tonetaba port(index:in integer range 0 to 15; code:buffer integer range 0 to 15; code1:out integer range 0 to 15; digit : out std_logic_vector(6 do
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 考級樂理課件教學(xué)課件
- 幼兒乘機(jī)課件教學(xué)課件
- 2024年乙方接受房產(chǎn)抵債具體協(xié)議
- 2024供應(yīng)鏈管理運(yùn)輸合同
- 2024年度專利申請成果轉(zhuǎn)化許可合同
- 2024年度搬廠工程安全監(jiān)督合同
- 2024年度市場營銷策劃執(zhí)行合同
- 04版無人機(jī)研發(fā)與銷售合同
- 2024年度文化藝術(shù)品收藏與展覽合同
- 2024年度無人機(jī)采購與租賃合同
- 快遞主管崗位職責(zé)
- 2024下半年四川省廣元市直屬事業(yè)單位招聘104人歷年公開引進(jìn)高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
- 市政道路施工工程重難點(diǎn)分析及對策
- 2024年渤海船舶職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案解析
- 《行政復(fù)議法》講座課件-2024鮮版
- 外國新聞傳播史 課件 第十九章 非洲其他代表性國家的新聞傳播事業(yè)
- JTJ034-2000 公路路面基層施工技術(shù)規(guī)范
- 小班數(shù)學(xué)活動《分類》課件
- 《娛樂場所管理?xiàng)l例》課件
- 渣土車掛靠合同
- 《小動物眼科學(xué)》課件
評論
0/150
提交評論