EDA應用技術 第2版 課件 項目5 樂曲自動演奏電路編程下載_第1頁
EDA應用技術 第2版 課件 項目5 樂曲自動演奏電路編程下載_第2頁
EDA應用技術 第2版 課件 項目5 樂曲自動演奏電路編程下載_第3頁
EDA應用技術 第2版 課件 項目5 樂曲自動演奏電路編程下載_第4頁
EDA應用技術 第2版 課件 項目5 樂曲自動演奏電路編程下載_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目5樂曲自動演奏電路設計方案本項目基于FPGA設計樂曲演奏電路,能夠自動播放編寫好的音樂,通過硬件樂曲自動演奏電路設計,說明VHDL程序描述電路的方法,介紹VHDL程序順序執(zhí)行語句的使用方法。教學目標項目5樂曲自動演奏電路設計方案技能目標知識目標素質目標(1)能采用文本輸入法,用VHDL程序設計一般復雜的數字系統(tǒng)。(2)能將系統(tǒng)板的晶振頻率分為不同的頻率。(3)能將實際的數字系統(tǒng)需求轉化為數字電子系統(tǒng)硬件語言描述。(4)能基于FPGA在線調試VHDL程序。(5)能用蜂鳴器、數碼管、LED燈等元件設計數字系統(tǒng)的輸入與輸出。(1)熟悉VHDL程序順序語句的特點。(2)掌握順序賦值語句用法。(3)熟悉if順序描述語句的格式與用法。(4)熟悉case順序描述語句的格式與用法。(1)培養(yǎng)獲取新知識、新技能、新方法的能力。(2)培養(yǎng)在設計制作中發(fā)現問題、解決問題能力。(3)培養(yǎng)理性思維和科學精神。任務描述項目5樂曲自動演奏電路設計方案在QuartusPrime20.1軟件平臺上,用文本輸入方法設計“康定情歌”樂曲自動演奏電路,“康定情歌”簡譜,如圖5.1所示。音樂演奏的同時用數碼管顯示簡譜,音的高低用LED燈指示;用ModelSim-Altera2020.1仿真軟件仿真檢查設計結果;選用FPGA最小系統(tǒng)板、LED燈、數碼管、蜂鳴器等硬件資源進行硬件測試。圖5.1“康定情歌”簡譜設計方案項目5樂曲自動演奏電路設計方案樂曲自動演奏電路,就是按照樂曲的樂譜節(jié)拍依次輸出對應時間長短的音符的頻率。用VHDL程序設計樂曲自動演奏電路,即利用VHDL程序的平行執(zhí)行特點,設計二路控制電路,一路準確地控制輸出的頻率,控制音符音的高低;另一路準確地控制音符輸出的節(jié)拍,控制音符輸出時間的長短。1.音符頻率的產生項目5樂曲自動演奏電路設計方案從“康定情歌”簡譜中可知,該樂曲采用F調演奏,F調簡譜的音符與頻率的關系如表5.1所示。本設計基準時鐘選取5MHz。5MHz頻率通過帶預置數的13位2進制計數器分頻,產生頻率隨預置數變化的脈沖信號,由于該脈沖信號非等占空比,不具有驅動蜂鳴器的能力,故對此脈沖信號再次進行2分頻以推動蜂鳴器發(fā)聲。項目5樂曲自動演奏電路設計方案根據設計方案可控分頻器的分頻系數Tone=213-5000000/2f,f值為歌曲音符的頻率。根據各音符的頻率及計算公式可計算出F調各音符,基準頻率為5MHz時的分頻系數,如表5.2所示。2.樂曲節(jié)拍的控制項目5樂曲自動演奏電路設計方案一般樂曲的節(jié)拍是1/4拍的整數倍,若將1拍的時間定為0.8秒,則1/4拍的時長為0.2秒。若是占用時間較長的節(jié)拍(1/4拍的整數倍),則只需要將該音符連續(xù)輸出相應的次數即可。由此可知,計數時鐘信號可作為輸出音符快慢的控制信號,時鐘快時輸出節(jié)拍速度就快,演奏的速度也就快,時鐘慢時輸出節(jié)拍的速度就慢,演奏的速度自然降低。本設計采用5Hz的時鐘信號(周期為0.2秒)來控制樂曲節(jié)拍。3.歌曲樂譜的設置項目5樂曲自動演奏電路設計方案歌曲樂譜中各音符所需的節(jié)拍有長有短,若某個音符需停留3個時鐘節(jié)拍,只需連續(xù)3次輸出相同的分頻系數即可。因而,設置演奏歌曲的樂譜,就是根據歌曲樂譜的節(jié)拍存儲每個音符的分頻編碼個數。演奏歌曲的樂譜可以存儲在FPGA的LPM-ROM中,也可以直接用單元電路存儲,本設計采用單元電路存儲。設計流程項目5樂曲自動演奏電路設計方案VHDL的順序語句只能出現在進程(process)、過程(procedure)和函數(function)中,利用順序語句可以描述數字邏輯系統(tǒng)中的組合邏輯電路和時序邏輯電路。VHDL程序中常見的順序語句有:賦值語句、流程控制語句、wait語句、子程序調用語句、空操作語句、斷言語句、report語句等。項目5VHDL的順序語句1.順序賦值語句順序賦值語句是出現在進程、過程和函數中的賦值語句,有信號賦值語句和變量賦值語句。它們的格式如下:

變量名:=表達式;

信號名<=表達式;變量賦值具有局部特征,它的賦值是立即發(fā)生的。信號賦值具有全局特征,它可以作為一個設計實體內部各單元之間數據傳送的載體,還可通過信號進行實體間通信。信號在順序語句中的賦值發(fā)生在一個進程結束或子程序調用完成以后,信號的賦值有一定的延時。項目5VHDL的順序語句【例5.1】變量賦值和信號賦值的應用項目5VHDL的順序語句信號“scnt”與變量“vcnt”都從0開始加1計數,但是信號計數輸出“sigcnt”值比變量計數輸出“varcnt”值延遲一個時鐘周期。相當于信號賦值是通過寄存器賦值,而變量賦值是直接賦值。2.流程控制語句流程控制語句通過對條件的判斷來決定執(zhí)行哪一條或幾條語句,常用的流程控制語句有if語句、case語句、loop語句等。(1)if語句if語句是通過對分支條件的判斷決定執(zhí)行哪個分支的順序語句。if語句的常用格式有以下三種。①單分支if語句。單分支if語句格式如下:If條件判斷表達式then

順序執(zhí)行語句;endif;當程序執(zhí)行到單分支if語句時,如果if的判斷條件為真,則if語句所包含的順序執(zhí)行語句將被執(zhí)行;否則,不做任何操作。項目5VHDL的順序語句【例5.2】單分支if語句的應用項目5VHDL的順序語句在組合電路中使用單分支if語句,從“in_a”到“out_a”產生的是鎖存器;在時序電路中使用單分支if語句,從“in_b”到“out_b”產生的是寄存器。②兩分支if語句。兩分支if語句格式:If條件判斷表達式then

順序執(zhí)行語句1;else

順序執(zhí)行語句2;Endif;當if條件成立時,程序執(zhí)行then和else之間的順序執(zhí)行語句;當if語句的條件不成立時,程序執(zhí)行else和endif之間的順序執(zhí)行語句,即根據所指定的條件是否滿足,程序可以選擇兩條不同的執(zhí)行路徑,可以看成是一個二選一數選擇器。項目5VHDL的順序語句【例5.3】兩分支if語句的應用項目5VHDL的順序語句從兩分支if語句寄存器傳輸級綜合效果圖中可知,兩分支if語句是一個二選一數據選擇器。③多分支if語句。多分支if語句的格式:if條件判斷表達式1then

順序語句1;elsif條件判斷表達式2then

順序語句2; …elsif條件判斷表達式nthen

順序語句n;else

順序語句n+1;endif;項目5VHDL的順序語句沒有else分支的格式:if條件判斷表達式1then

順序語句1;elsif條件判斷表達式2then

順序語句2; …elsif條件判斷表達式nthen

順序語句n;endif;多分支if語句執(zhí)行多選擇控制功能,允許在一個語句中出現多重條件,即條件嵌套。當滿足所設置的多個條件之一時,就執(zhí)行該條件后的順序執(zhí)行語句。【例5.4】多分支if語句的應用項目5VHDL的順序語句從多分支if語句寄存器傳輸級綜合效果圖中可知,輸出“out_a”的多分支if語句最后加了else分支,沒有產生鎖存器;輸出“out_b”的多分支if語句最后沒有加else分支,產生了鎖存器,而且前面還產生了一個3輸入的“或門”等資源消耗。(2)case語句case語句的格式如下:case判斷表達式iswhen選擇項值1=>順序語句1;when選擇項值2=>順序語句2;

…when選擇項值n=>順序語句n;whenothers=>順序語句n+1;endcase;當執(zhí)行case語句時,首先計算判斷表達式的值,然后根據條件句中與之相同的選擇值對應的順序語句執(zhí)行,最后結束case語句。選擇項可以是一個值,也可以是多個用“值|值|值”表示的值,還可用“值to值”約束一個范圍,但選擇項不能有重復。項目5VHDL的順序語句使用case語句注意點:①條件句中的“=>”是操作符,它相當于if語句中的“then”。②條件句中的選擇值,必須在“判斷表達式”的取值范圍之內。③case語句中每一條語句的選擇值只能出現一次。④除非所有條件句中的選擇值能完全覆蓋case語句表達式的取值,否則最末一個條件句中的選擇值,必須用“others”表示,它代表已給的所有條件句中未能列出的其他可能的取值。關鍵詞“others”只能出現一次,且只能作為最后一條件取值。⑤與if語句相比,if語句是有序的,先處理最起始、最優(yōu)先的條件,后處理次優(yōu)先的條件。case語句是無序的,所有表達式的值都并行處理。項目5VHDL的順序語句【例5.5】case語句與多分支if語句的差別項目5VHDL的順序語句使用case語句從輸入到輸出“out_a”是一個數據選擇器,只有一個數據選擇器的延時。多分支if語句從輸入到輸出“out_b”由多級級連的二選一數據選擇器組成,等級最低的if分支從輸入到輸出要經過多級二選一數據選擇器的延時。(3)loop語句loop語句的功能是循環(huán)執(zhí)行一條或多條順序語句,主要有for循環(huán)、while循環(huán)和條件跳出等三種形式。①for/loop語句。for/loop語句格式如下:[標號]:for循環(huán)變量in循環(huán)變量的范圍loop

順序語句;endloop[標號];for循環(huán)語句中的循環(huán)變量是一個臨時變量,是loop語句的局部變量,不必事先定義,由loop語句自動定義,它只能作為賦值源,不能被賦值。在同一loop語句中不能再使用與此變量同名的標識符。循環(huán)變量的循環(huán)范圍從循環(huán)變量的初值開始,每執(zhí)行一次,就改變一次,直到循環(huán)變量范圍的終值。項目5VHDL的順序語句【例5.6】for/loop語句的應用項目5VHDL的順序語句例5.6VHDL程序是16位偶校驗電路。從仿真結果可知,輸入第1個“data”值的所有位中有4個1,校驗結果“xoro”為“0”,與偶校驗位相同,輸入的“data”值中有偶數個“1”;輸入第2個“data”值的所有位中有5個1,校驗結果“xoro”為“1”,與偶校驗位不相同,輸入的“data”值中有奇數個“1”。同理,可分析圖中其它輸入數值的偶校驗。②while/loop語句。while/loop語句格式如下:[標號]:while條件loop

順序處理語句;endloop[標號];在while/loop語句中,沒有給出循環(huán)次數的范圍,而給出了循環(huán)執(zhí)行順序語句的條件,沒有自動遞增循環(huán)變量的功能。如果循環(huán)控制條件為真,則進行循環(huán),否則結束循環(huán)。因而需要在順序處理語句中有修改循環(huán)條件的語句,使循環(huán)條件不滿足,從而結束循環(huán)。項目5VHDL的順序語句【例5.7】while/loop語句的應用項目5VHDL的順序語句例5.7的VHDL程序是16位奇校驗電路。從仿真結果可知,輸入第1個“data”值的所有位中有4個1,校驗結果“xoro”為“1”,與奇校驗位相同,說明輸入的“data”值中有偶數個“1”;輸入第2個“data”值的所有位中有5個1,校驗結果“xoro”為“0”,與奇校驗位不相同,說明輸入的“data”值中有奇數個“1”;同理,可分析圖中其它輸入數值的奇校驗。③條件跳出循環(huán)。循環(huán)語句中的next與exit語句,用來結束循環(huán)或跳出循環(huán)。next語句用于控制內循環(huán)的結束,其格式為:next[標號][when條件];exit語句用于結束loop循環(huán)狀態(tài),其格式為:exit[標號][when條件];next語句與exit語句具有相似的語句格式和跳轉功能,它們都是loop語句的內部循環(huán)控制語句。next語句是跳向loop語句的起始點,而exit語句是跳向loop語句的終點。項目5VHDL的順序語句3.wait語句wait語句的功能是把一個進程掛起,直到滿足等待的條件成立才重新開始進程的執(zhí)行,含wait語句的進程,process后不能加敏感信號,否則是非法的。wait語句使用形式通常有waiton(敏感信號列表)、waituntil(判斷條件表達式)和waitfor(時間)等三種形式。項目5VHDL的順序語句(1)waiton語句waiton語句的使用格式為:processbegin

順序語句1;順序語句2;

…順序語句n;waiton信號[,信號];endprocess;waiton語句后的信號也可以稱為敏感信號,如果信號發(fā)生變化,則執(zhí)行,否則進程處于掛起狀態(tài)。waiton語句有些綜合工具不支持。3.wait語句項目5VHDL的順序語句(2)waituntil語句waituntil語句的使用格式為:processbegin

順序語句1;順序語句2;

…順序語句n;waituntil條件判斷表達式;endprocess;當進程執(zhí)行到waituntil語句時進程被掛起,若條件判斷表達式為真,則進程將被啟動。waituntil語句中,條件判斷表達式隱式地建立了一個敏感信號量表。wait語句的功能是把一個進程掛起,直到滿足等待的條件成立才重新開始進程的執(zhí)行,含wait語句的進程,process后不能加敏感信號,否則是非法的。wait語句使用形式通常有waiton(敏感信號列表)、waituntil(判斷條件表達式)和waitfor(時間)等三種形式。3.wait語句項目5VHDL的順序語句(3)waitfor語句waitfor語句的格式為:processbegin

順序語句1;順序語句2;

…順序語句n;waitfor時間t(一定要以時間為單位);endprocess;waitfor時間語句的功能是把進程掛起時間t后再起動進程,waitfor語句一般用于VHDL程序的測試文件中,綜合工具一般不支持。wait語句的功能是把一個進程掛起,直到滿足等待的條件成立才重新開始進程的執(zhí)行,含wait語句的進程,process后不能加敏感信號,否則是非法的。wait語句使用形式通常有waiton(敏感信號列表)、waituntil(判斷條件表達式)和waitfor(時間)等三種形式。項目5樂曲自動演奏電路編程下載編程下載的目的是將設計所生成的文件通過計算機下載到目標器件,驗證設計是否滿足實際要求或能否在實際中應用。樂曲自動演奏電路硬件測試基于EP4CE6E22C8-FPGA最小系統(tǒng)板,采用共陰數碼顯示音符的簡譜值,用3LED表示發(fā)出音符不同八度音,用蜂鳴器發(fā)聲。項目5樂曲自動演奏電路編程下載1.樂曲自動演奏電路控制模塊基于FPGA利用VHDL程序設計完成的樂曲自動演奏電路輸入輸出端口,如圖5.14所示。【clk】為系統(tǒng)時鐘信號輸入端,與FPGA最小系統(tǒng)板所提供的50MHz時鐘信號相連接【smg[6..0]】為簡譜顯示信號輸出端【led[2..0]】為高低音指示信號輸出端【speaker】為音頻信號輸出端硬件電路連接圖5.14樂曲自動演奏電路輸入輸出端口項目5樂曲自動演奏電路編程下載2.輸出電路輸出用3LED表示發(fā)出音符不同八度音,用數碼管顯示音符的簡譜值,用蜂鳴器發(fā)聲。樂曲自動演奏電路輸出原理圖,如圖5.15所示。圖5.15樂曲自動演奏電路輸出原理圖項目5樂曲自動演奏電路編程下載圖5.16樂曲自動演奏電路輸出PCB圖2.輸出電路輸出用3LED表示發(fā)出音符不同八度音,用數碼管顯示音符的簡譜值,用蜂鳴器發(fā)聲。樂曲自動演奏電路輸出PCB圖,如圖5.16所示。項目5樂曲自動演奏電路編程下載圖5.17樂曲自動演奏電路輸出模塊實物圖2.輸出電路輸出用3LED表示發(fā)出音符不同八度音,用數碼管顯示音符的簡譜值,用蜂鳴器發(fā)聲。樂曲自動演奏電路輸出模塊實物圖,如圖5.17所示。項目5樂曲自動演奏電路編程下載3.各元件連接表示發(fā)出音符不同八度音的3LED,顯示音符的簡譜值的數碼管,發(fā)聲元器件蜂鳴器與EP4CE6E22C8-FPGA最小系統(tǒng)板的20×2雙排直插針連接原理圖,如圖5.18所示。圖5.18樂曲自動演奏電路各元件連接原理圖項目5樂曲自動演奏

溫馨提示

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

評論

0/150

提交評論