EDA實(shí)驗(yàn)講義(2010版)_第1頁(yè)
EDA實(shí)驗(yàn)講義(2010版)_第2頁(yè)
EDA實(shí)驗(yàn)講義(2010版)_第3頁(yè)
EDA實(shí)驗(yàn)講義(2010版)_第4頁(yè)
EDA實(shí)驗(yàn)講義(2010版)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、EDA實(shí)驗(yàn)講義林連冬 編著電子工程學(xué)院2010丁開(kāi)慧S-213EDA實(shí)驗(yàn)講義目錄一、EDA實(shí)驗(yàn)系統(tǒng)概述二、實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)一、基本邏輯電路的設(shè)計(jì)實(shí)驗(yàn)二、組合邏輯電路 實(shí)驗(yàn)三、VHDL與原理圖混合方式設(shè)計(jì)電路(樂(lè)曲演奏電路)實(shí)驗(yàn)四、數(shù)字電子表實(shí)驗(yàn)五、有限狀態(tài)機(jī)的VHDL語(yǔ)言設(shè)計(jì)方法(交通燈控制器)實(shí)驗(yàn)六、序列檢測(cè)器一、EDA實(shí)驗(yàn)講義概述EDA技術(shù)概述 :現(xiàn)代電子設(shè)計(jì)技術(shù)的核心是EDA(Electronic Design Automation)技術(shù)。EDA技術(shù)就是依賴功能強(qiáng)大的計(jì)算機(jī),在EDA工具軟件上,對(duì)以硬件描述語(yǔ)言HDL(Hardware Description Language)為系統(tǒng)邏輯描述

2、手段完成的設(shè)計(jì)文件,自動(dòng)地完成邏輯編譯、邏輯化簡(jiǎn)、邏輯分割、邏輯綜合、結(jié)構(gòu)綜合(布局布線),以及邏輯優(yōu)化和仿真測(cè)試,直至實(shí)現(xiàn)既定的電子線路系統(tǒng)功能。EDA 技術(shù)使得設(shè)計(jì)者的工作僅限于利用軟件的方式,即利用硬件描述語(yǔ)言和EDA軟件來(lái)完成對(duì)系統(tǒng)硬件功能的實(shí)現(xiàn)。 一個(gè)完整的、典型的EDA設(shè)計(jì)流程既是自頂向下設(shè)計(jì)方法的具體實(shí)施途徑,也是EDA工具軟件本身的組成結(jié)構(gòu)。本實(shí)驗(yàn)以MAXPLUSII做為主要設(shè)計(jì)工具,并結(jié)合實(shí)驗(yàn)箱上的硬件電路設(shè)計(jì)實(shí)驗(yàn)課程,講解如何用EDA技術(shù)進(jìn)行數(shù)字電路的設(shè)計(jì)。一、CPLD/FPGA可編程器件的設(shè)計(jì)過(guò)程框圖 可編程器件的設(shè)計(jì)過(guò)程與單片機(jī)的開(kāi)發(fā)過(guò)程類(lèi)似,同樣包括程序的編輯、編譯適

3、配、仿真調(diào)試及下載實(shí)現(xiàn)的幾個(gè)部分,具體流程如下圖所示。 CPLD/FPGA設(shè)計(jì)過(guò)程圖NONOyes層次化設(shè)計(jì)圖形輸入文本輸入C盤(pán)建目錄建立項(xiàng)目文件選擇器編譯仿真分析管腳分配重新編譯下載或編譯驗(yàn)證邏輯正確yes設(shè)計(jì)正確形成下載文件設(shè)計(jì)輸入設(shè)計(jì)實(shí)現(xiàn) 設(shè)計(jì)生成 硬件下載 二、硬件安裝及使用說(shuō)明 本實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng)在出廠時(shí)以按用戶要求配備好了相關(guān)的主芯片適配器、編程電纜、實(shí)驗(yàn)指導(dǎo)書(shū)、連接導(dǎo)線及相關(guān)軟件。II、III、IV型實(shí)驗(yàn)箱均自帶開(kāi)關(guān)電源,用戶只需接入220V電源即可。本實(shí)驗(yàn)裝置無(wú)須添加其它設(shè)備,僅須與計(jì)算機(jī)連接便可進(jìn)行所有實(shí)驗(yàn)。硬件安裝及使用中需要注意的幾個(gè)實(shí)驗(yàn)步驟如下:1、 打開(kāi)實(shí)驗(yàn)箱,檢查并核實(shí)

4、設(shè)備完好及附件齊全;2、 檢查下載編程電纜標(biāo)識(shí):不同公司的編程電纜是不同的,如Altera公司的編程電纜出廠時(shí)標(biāo)有Altera字Lattice公司的電纜有兩種:一種是數(shù)字器件編程電纜,標(biāo)有Lattice字樣;另一種是模擬芯片編程電纜,其上標(biāo)有PAC字樣,其它廠家類(lèi)似。使用時(shí)一定要注意編程電纜不能混用,否則程序不能正確下載。同一廠家的CPLD/FPGA芯片的下載電纜是一樣的。3、 安裝下載編程電纜:確保安裝的下載編程電纜與當(dāng)前實(shí)驗(yàn)箱上適配器芯片相一致,然后將其25針的接插頭連接到計(jì)算機(jī)的并行口上,另一端連接到實(shí)驗(yàn)箱的JTAG編程座上,并確保電纜兩端接觸良好。注意,IV型實(shí)驗(yàn)箱上有兩個(gè)編程接口,標(biāo)

5、有DIGATAL字樣、一個(gè)是模擬芯片接口,標(biāo)有ANALOG字樣,注意不要接錯(cuò)。I、II、III型實(shí)驗(yàn)箱均只有一個(gè)數(shù)字芯片編程接口,位于實(shí)驗(yàn)箱的左上角。4、 開(kāi)啟實(shí)驗(yàn)箱電源,電源指示燈亮。本電源為五伏開(kāi)關(guān)電源,有短路和自恢復(fù)等功能。如電源指示燈不亮,請(qǐng)檢查是否已接入220V電源或其它原因所致。5、 硬件安裝結(jié)束,打開(kāi)實(shí)驗(yàn)箱電源,此時(shí)便可進(jìn)行軟件編程下載。程序正常下載時(shí),其編程接口下邊的狀態(tài)指示燈處于閃爍狀態(tài),如不能正確下載,請(qǐng)檢查是硬件問(wèn)題還是軟件設(shè)置問(wèn)題?6、 實(shí)驗(yàn)時(shí)嚴(yán)禁帶電接插,以防損壞電路芯片。如有異常請(qǐng)及時(shí)切斷電源并排除故障。三、軟件簡(jiǎn)介及安裝(一) Max+plus 教學(xué)軟件是免費(fèi)的,

6、軟件支持VHDL語(yǔ)言的所有功能,安裝時(shí)你需要到Altera公司的網(wǎng)頁(yè)去申請(qǐng)一個(gè)授權(quán)軟件(軟件安裝部分有詳細(xì)說(shuō)明),本授權(quán)文件或來(lái)自于代理商(即License.dat文件)只有在你的軟件中安裝了License.dat文件以后方可啟動(dòng)使用此Maxplus 軟件。教學(xué)軟件支持多種設(shè)計(jì)輸入(原理圖編輯、符號(hào)法編輯、VHDL語(yǔ)言編輯、波形編輯)、功能仿真和時(shí)序分析。(二) 軟件安裝 該設(shè)計(jì)軟件運(yùn)行在Windows95/98操作系統(tǒng)下,計(jì)算機(jī)配置最好不低586(CPU/200M、內(nèi)存/32M、硬盤(pán)/2G)的機(jī)器。軟件的安裝步驟如下;(1) 將光盤(pán)插入計(jì)算機(jī)光驅(qū),假定您光驅(qū)號(hào)為E;(2) 打開(kāi)光驅(qū)E: Ma

7、x+plus 9.5fullsetup.exe文件; (3) 點(diǎn)擊運(yùn)行setup.exe文件;(4) 按Next,并選擇yes 接受協(xié)議;(5) 選擇適當(dāng)?shù)陌惭b方式(一般選擇默認(rèn)安裝即可),并按下Next。(6) 單擊Browse按鈕,選擇安裝路徑(假設(shè)為d:),按下Next,直到安裝完成。這時(shí)該軟件自動(dòng)在d:生成Max+plus 等文件。(7) 將光盤(pán)隨即附送的LICENSE.DAT 文件拷貝至安裝后的D Max+plus 軟件包根目錄下即可。注意:LICENSE.DAT文件來(lái)自于Altera網(wǎng)站授權(quán)或代理商授權(quán)。(8) 點(diǎn)擊Windows程序組下的altera Max+plus 9.5圖標(biāo)

8、,啟動(dòng)本軟件,注意:第一次啟動(dòng)軟件會(huì)有幾個(gè)對(duì)話框口,提示沒(méi)有安裝License文件或軟件狗,并附有其公司網(wǎng)址及如何申請(qǐng)License授權(quán)文件等說(shuō)明。(9) 選擇并點(diǎn)擊OptionsLicense setup 菜單,單擊License setup,使用Browse瀏覽器指出License.dat文件所在路徑。即拷貝License.dat文件后的路徑d: Max+plus License.dat。(10) 單擊ok 按鈕確認(rèn)即可,至此你已經(jīng)成功的完成了整個(gè)軟件的安裝。注意:本安裝過(guò)程以其9.5版本為例介紹的,其它如10.0等版本安裝過(guò)程類(lèi)似.實(shí)驗(yàn)一、基本邏輯電路的設(shè)計(jì) (1)實(shí)驗(yàn)?zāi)康?:熟悉利用M

9、AXPLUSII的原理圖輸入方法設(shè)計(jì)簡(jiǎn)單組合電路的思想,掌握層次化設(shè)計(jì)的方法,并通過(guò)一個(gè)1位全加器的設(shè)計(jì)把握利用EDA軟件進(jìn)行電子線路設(shè)計(jì)的詳細(xì)流程。學(xué)會(huì)對(duì)實(shí)驗(yàn)箱上的FPGA/CPLD進(jìn)行編程下載,硬件仿真驗(yàn)證自己的設(shè)計(jì)項(xiàng)目。(2)實(shí)驗(yàn)原理:一個(gè)一位全加器可以由兩個(gè)一位的半加器組成。在實(shí)際的設(shè)計(jì)中我們可以先設(shè)計(jì)兩個(gè)半加器作為元件然后再在一個(gè)更高的原理圖設(shè)計(jì)層次里調(diào)用之。(3)實(shí)驗(yàn)設(shè)備:EDA IV型實(shí)驗(yàn)箱。(4)實(shí)驗(yàn)步驟 : 步驟1 :為本項(xiàng)工程設(shè)計(jì)建立文件夾。 任何一項(xiàng)設(shè)計(jì)都是一項(xiàng)工程(Project),都必須首先為此工程建立一個(gè)放置此工程相關(guān)的文件的文件夾,此文件夾將被EDA軟件默認(rèn)為工作

10、庫(kù)。一般不同的設(shè)計(jì)項(xiàng)目最好放在相應(yīng)的文件夾中,一個(gè)設(shè)計(jì)項(xiàng)目可以包含多個(gè)設(shè)計(jì)文件。 假設(shè)本設(shè)計(jì)的文件夾名為MY_PRJCT,路徑為D:MY_PRJCT(注意:MAXPLUSII不支持中文,所以項(xiàng)目名稱(chēng)和路徑都應(yīng)以英文命名) 。 步驟2 :輸入設(shè)計(jì)項(xiàng)目和存盤(pán)a) 打開(kāi)MAXPLUSII,選擇菜單“File” “New”在彈出的對(duì)話框中選擇“Graphic Editor file”,按“OK”后打開(kāi)原理圖編輯器。b) 在新打開(kāi)的窗口出雙擊鼠標(biāo)左鍵,打開(kāi)元件庫(kù),添加元件。c) 選擇菜單“File” “Save As” ,將文件取名為:h_adder.gdf(文件名不能以數(shù)字和中文開(kāi)頭),并存到D:MY

11、_PRJCT 下。并完成原理圖設(shè)計(jì)(原理圖如下圖)。AND2 NOT XNOR INPUT OUTPUTd) 將設(shè)計(jì)項(xiàng)目設(shè)置成當(dāng)前工程文件(Project) 編譯、仿真和測(cè)試只針對(duì)當(dāng)前工程文件,所以想要編譯某一項(xiàng)目前應(yīng)先將其設(shè)為當(dāng)前工程文件。方法見(jiàn)下圖。e) 選擇目標(biāo)器件并編譯 。 為了獲得與目標(biāo)器件對(duì)應(yīng)的、精確的時(shí)序仿真文件,在對(duì)文件編譯前必須選定最后實(shí)現(xiàn)本項(xiàng)目的目標(biāo)器件,菜單命令如下“Assign” “Device”。在彈出的對(duì)話框中做如下設(shè)定。(Device Family:ACEX1k Device: EP1K100QC208-3)開(kāi)始編譯:選擇菜單“MAX+plusII” “Compi

12、ler” “Start”,編譯結(jié)果如下。 f) 時(shí)序仿真 接下來(lái)應(yīng)該測(cè)試設(shè)計(jì)項(xiàng)目的正確性,即進(jìn)行仿真,具體步驟如下:(1)建立波形文件。選擇菜單“File” “New ” “Waveform Editer file” ,打開(kāi)波形編輯器。(2)輸入信號(hào)節(jié)點(diǎn)。在上圖所示的波形編輯窗的上方選擇菜單“Node” “Enter Node from SNF” “List”這時(shí)在左列表框?qū)⒘谐鲈撛O(shè)計(jì)的所有信號(hào)節(jié)點(diǎn)。利用“=”按鈕選中需要觀察的信號(hào)節(jié)點(diǎn),然后單擊“OK”。(3)設(shè)置波形參量。 參量1 :“Option” “Snap to Grid” 參量2 :“File” “End Time” ,如可選34u

13、s(34微秒)以便有足夠長(zhǎng)的觀察時(shí)間 (4)加上輸入信號(hào)。(如下圖) (5)波形文件存盤(pán)。以默認(rèn)名字存盤(pán)即可,執(zhí)行仿真命令前必須先執(zhí)行保存操作。 (6)運(yùn)行仿真器。選擇主菜單“MAX+plusII” “Simulator ” “Start” (7)觀察仿真結(jié)果。如果不符合設(shè)計(jì)預(yù)案則更改設(shè)計(jì),再重新仿真,直至達(dá)到設(shè)計(jì)要求。 (8)包裝元件入庫(kù)。 重新打開(kāi)半加器設(shè)計(jì)文件h_adder.gdf ,選擇菜單“File” “Create Default Symbol”選項(xiàng)將當(dāng)前文件變成一個(gè)包裝好的單一元件(Symbol),并被放置在工程指定的目錄中以備后用。g) 引腳鎖定。 如果以上的仿真測(cè)試正確無(wú)誤,

14、就應(yīng)該將設(shè)計(jì)編程下載到選定的目標(biāo)器件中去作硬件測(cè)試,以便了解設(shè)計(jì)項(xiàng)目的正確性。這就需要進(jìn)行引腳鎖定和編程下載兩個(gè)步驟。選定菜單“Max+plusII” “Floorplan Editor”鎖定引腳。如下圖(注意鎖定引腳后一定要重新編譯一次,并且引腳最好分配到標(biāo)有I/O的端口,引腳的分布情況和實(shí)驗(yàn)箱上芯片周?chē)囊_分布一樣)h) 編程下載。(1)下載方式設(shè)定?!癕ax+plusII” “Programmer” “Options” “Hardware Setup” “ByteBlaster(MV)”。 此編程方式對(duì)應(yīng)計(jì)算機(jī)的并口下載通道。 (2)添加下載文件?!癑TAG”->“multi-D

15、evice JTAG Chain Setup.” “Select Programming File”->選擇擴(kuò)展名為“*.sof”的文件,單擊確定-“add”-“ok”。 (3)下載。如下圖所示單擊“Configure”按鈕,到此為止,完整的設(shè)計(jì)流程已經(jīng)結(jié)束。VHDL文本輸入的設(shè)計(jì)可參考這一流程。 i) 設(shè)計(jì)頂層文件 可以將前面的工作看成是完成了一個(gè)底層元件的設(shè)計(jì),并被包裝入庫(kù)。現(xiàn)在利用已經(jīng)設(shè)計(jì)好的半加器,完成頂層項(xiàng)目全加器的設(shè)計(jì),步驟可參考以上設(shè)計(jì)流程:(原理圖如下)(j)設(shè)計(jì)流程歸納。步驟1:建立工作庫(kù)文件夾步驟6:?jiǎn)?dòng)編譯步驟7:建立仿真波形文件步驟5:選擇目標(biāo)器件步驟4:將設(shè)計(jì)項(xiàng)

16、目設(shè)置成Project步驟3:存盤(pán),注意原理圖/文本取名步驟2:輸入設(shè)計(jì)項(xiàng)目原理圖/VHDL代碼步驟8:仿真測(cè)試和波形分析步驟11:硬件測(cè)試步驟9:引腳鎖定并編譯步驟10:編程下載/配置五、實(shí)驗(yàn)過(guò)程與分析1、分別畫(huà)出半加器和全加器的原理圖2、寫(xiě)出加法器的各個(gè)端口延遲數(shù)據(jù)表;3、寫(xiě)出全加器硬件測(cè)試結(jié)果(用真值表的形式給出答案)。六、實(shí)驗(yàn)結(jié)果總結(jié):1、思考題目:設(shè)計(jì)一個(gè)四位的全加器,并實(shí)驗(yàn)驗(yàn)證。在實(shí)驗(yàn)報(bào)告中給出此設(shè)計(jì)的原理圖及適當(dāng)?shù)恼f(shuō)明;實(shí)驗(yàn)二、組合邏輯電路一、實(shí)驗(yàn)?zāi)康?1.掌握組合邏輯電路的設(shè)計(jì)方法.2.掌握組合邏輯的靜態(tài)測(cè)試方法.3.加深理解FPGA設(shè)計(jì)的過(guò)程,掌握用VHDL語(yǔ)言設(shè)計(jì)數(shù)字電路的

17、方法。二、實(shí)驗(yàn)原理:1. 將與4位二進(jìn)制數(shù)相對(duì)應(yīng)的BCD編碼的內(nèi)容顯示在一位七段數(shù)碼管上。2采用掃描顯示的原理, 在8個(gè)數(shù)碼管上同時(shí)顯示BCD譯碼器的輸出結(jié)果。點(diǎn)亮一個(gè)七段數(shù)碼管,用譯碼器就可以了。但是當(dāng)需要點(diǎn)亮多個(gè)七段數(shù)碼管的時(shí)候,由于FPGA的I/O口不能夠提供足夠大的驅(qū)動(dòng)電流去點(diǎn)亮多個(gè)七段數(shù)碼管,因此只能利用掃描顯示電路來(lái)實(shí)現(xiàn)掃描顯示。三、實(shí)驗(yàn)設(shè)備:1.輸入信號(hào)接撥碼開(kāi)關(guān).2.輸出信號(hào)接七段數(shù)碼管顯示電路。3.主芯片: EP1K100QC208-3。四、實(shí)驗(yàn)步驟:1.七段數(shù)碼管顯示器:(1).原理及原理圖: 為了能以十進(jìn)制數(shù)碼直觀地顯示數(shù)字系統(tǒng)的運(yùn)行數(shù)據(jù),目前廣泛地使用了七段字符顯示器或

18、稱(chēng)做七段數(shù)碼管。這種字符顯示器由七段可發(fā)光的線段拼合而成。常見(jiàn)的七段字符顯示器有半導(dǎo)體數(shù)碼管和液晶顯示器兩種。本實(shí)驗(yàn)中用到的是半導(dǎo)體數(shù)碼管。這種數(shù)碼管的每個(gè)線段都是一個(gè)發(fā)光二極管(Light Emitting Diode,簡(jiǎn)稱(chēng)LED),因而也把它叫做LED數(shù)碼管或LED七段顯示器。(2).管腳圖:程序一:數(shù)碼管的靜態(tài)顯示電路(完成BCD譯碼器功能)- *LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;-*ENTITY Seg7 isPORT

19、(NUMIN : IN STD_LOGIC_VECTOR(3 DOWNTO 0);SELOUT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);SEGOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END Seg7;-*ARCHITECTURE a OF Seg7 ISSIGNAL NUM : STD_LOGIC_VECTOR( 3 DOWNTO 0);SIGNAL SEG: STD_LOGIC_VECTOR( 6 DOWNTO 0);BEGIN Connection : BlockBeginSELOUT <= "000&qu

20、ot;SEGOUT(6 DOWNTO 0) <= SEG;SEGOUT(7) <= '1'NUM<=NUMIN;End Block Connection;SEVEN_SEGMENT : BlockBegin-gfedcbaSEG <= "0111111" WHEN NUM = 0 ELSE"0000110" WHEN NUM = 1 ELSE"1011011" WHEN NUM = 2 ELSE"1001111" WHEN NUM = 3 ELSE"1100110&

21、quot; WHEN NUM = 4 ELSE"1101101" WHEN NUM = 5 ELSE"1111101" WHEN NUM = 6 ELSE"0000111" WHEN NUM = 7 ELSE"1111111" WHEN NUM = 8 ELSE"1101111" WHEN NUM = 9 ELSE"1110111" WHEN NUM = 10 ELSE"1111100" WHEN NUM = 11 ELSE"0111001&qu

22、ot; WHEN NUM = 12 ELSE"1011110" WHEN NUM = 13 ELSE"1111001" WHEN NUM = 14 ELSE"1110001" WHEN NUM = 15 ELSE"0000000"End Block SEVEN_SEGMENT;END a; 2、利用掃描顯示的原理設(shè)計(jì)多位數(shù)碼管的顯示驅(qū)動(dòng)電路,要求將開(kāi)關(guān)輸入的二進(jìn)制數(shù)字信號(hào)譯成BCD編碼后在八個(gè)數(shù)碼管上同時(shí)顯示出來(lái),例程參考程序2,注意理解如何使用計(jì)數(shù)器進(jìn)行分頻電路的設(shè)計(jì)。例程2:LIBRARY IEEE;USE I

23、EEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Seg7_Dsp isPORT( CP: IN STD_LOGIC; SEGOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); SELOUT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);NUMIN: IN STD_LOGIC_VECTOR(3 DOWNTO 0);END Seg7_Dsp;ARCHITECTURE a OF Seg7_Dsp ISSIGNAL NUM

24、 : STD_LOGIC_VECTOR( 3 DOWNTO 0);SIGNAL SEG: STD_LOGIC_VECTOR( 6 DOWNTO 0);SIGNAL SEL: STD_LOGIC_VECTOR( 5 DOWNTO 0);BEGINConnection : BlockBeginSELOUT <= SEL; SEGOUT(6 DOWNTO 0) <= SEG;SEGOUT(7) <= '1'NUM <= NUMIN;End Block Connection;Free_Counter : Block- 計(jì)數(shù)器 - 產(chǎn)生掃描信號(hào) Signal Q:

25、 STD_LOGIC_VECTOR(24 DOWNTO 0);SignalS : STD_LOGIC_VECTOR(2 DOWNTO 0);BeginPROCESS (CP)- 計(jì)數(shù)器計(jì)數(shù) BeginIF CP'Event AND CP='1' thenQ <= Q+1;END IF;END PROCESS;S <= Q(15 DOWNTO 13);SEL <= "000" WHEN S=0 ELSE"001" WHEN S=1 ELSE"010" WHEN S=2 ELSE"011

26、" WHEN S=3 ELSE"100" WHEN S=4 ELSE"101";End Block Free_Counter;SEVEN_SEGMENT : Block- Binary Code -> Segment 7 CodeBegin -gfedcbaSEG <= "0111111" WHEN NUM = 0 ELSE "0000110" WHEN NUM = 1 ELSE "1011011" WHEN NUM = 2 ELSE"1001111"

27、WHEN NUM = 3 ELSE"1100110" WHEN NUM = 4 ELSE"1101101" WHEN NUM = 5 ELSE"1111101" WHEN NUM = 6 ELSE "0000111" WHEN NUM = 7 ELSE "1111111" WHEN NUM = 8 ELSE"1101111" WHEN NUM = 9 ELSE"1110111" WHEN NUM = 10 ELSE"1111100" W

28、HEN NUM = 11 ELSE"0111001" WHEN NUM = 12 ELSE"1011110" WHEN NUM = 13 ELSE"1111001" WHEN NUM = 14 ELSE"1110001" WHEN NUM = 15 ELSE"0000000"End Block SEVEN_SEGMENT;END a;四、 實(shí)驗(yàn)結(jié)果總結(jié):1、計(jì)算例程2掃描信號(hào)的頻率大小并說(shuō)明選擇該頻率作掃描信號(hào)的原因(設(shè)基頻為5MHZ)。2、寫(xiě)出計(jì)算掃描頻率的公式。3、參考例程3-2改寫(xiě)程序,用

29、8個(gè)數(shù)碼管做顯示輸出。并在報(bào)告中給出修改后的代碼(需標(biāo)注清楚修改例程代碼的地方)。實(shí)驗(yàn)三 VHDL與原理圖混合方式設(shè)計(jì)電路(樂(lè)曲演奏電路)一、實(shí)驗(yàn)原理樂(lè)曲演奏廣泛用于自動(dòng)答錄裝置、手機(jī)鈴聲、集團(tuán)電話、及智能儀器儀表設(shè)備。在EDA開(kāi)發(fā)平臺(tái)上利用VHDL語(yǔ)言設(shè)計(jì)數(shù)控分頻器電路,利用數(shù)控分頻的原理設(shè)計(jì)樂(lè)曲硬件演奏電路,并定制LPM-ROM存儲(chǔ)音樂(lè)數(shù)據(jù),以“梁祝”樂(lè)曲為例,將音樂(lè)數(shù)據(jù)存儲(chǔ)到LPM-ROM,就達(dá)到了以純硬件的手段來(lái)實(shí)現(xiàn)樂(lè)曲的演奏效果。只要修改LPM-ROM所存儲(chǔ)的音樂(lè)數(shù)據(jù),將其換成其他樂(lè)曲的音樂(lè)數(shù)據(jù),再重新定制LPM-ROM,連接到程序中就可以實(shí)現(xiàn)其它樂(lè)曲的演奏。3.1 音樂(lè)演奏電路原理

30、先介紹一下硬件電路的發(fā)聲原理。聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來(lái)控制FPGA某個(gè)引腳輸出一定頻率的矩形波,接上揚(yáng)聲器就能發(fā)出相應(yīng)頻率的聲音。樂(lè)曲中的每一音符對(duì)應(yīng)著一個(gè)確定的頻率,要想FPGA發(fā)出不同音符的音調(diào),實(shí)際上只要控制它輸出相應(yīng)音符的頻率即可。樂(lè)曲都是由一連串的音符組成,因此按照樂(lè)曲的樂(lè)譜依次輸出這些音符所對(duì)應(yīng)的頻,就可以在揚(yáng)聲器上連續(xù)地發(fā)出各個(gè)音符的音調(diào)。而要準(zhǔn)確地演奏出一首樂(lè)曲,僅僅讓揚(yáng)聲器能夠發(fā)生是不夠的,還必須準(zhǔn)確地控制樂(lè)曲的節(jié)奏,即樂(lè)曲中每個(gè)音符的發(fā)生頻率及其持續(xù)時(shí)間是樂(lè)曲能夠連續(xù)演奏的兩個(gè)關(guān)鍵因素。3.2 音符頻率的獲得 多個(gè)不同頻率的信號(hào)可通過(guò)對(duì)某個(gè)基準(zhǔn)頻率進(jìn)

31、行分頻器獲得。由于各個(gè)音符的頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將計(jì)算機(jī)得到的分頻系數(shù)四舍五入取整。若基準(zhǔn)頻率過(guò)低,則分頻系數(shù)過(guò)小,四舍五入取整后的誤差較大。若基準(zhǔn)頻率過(guò)高,雖然可以減少頻率的相對(duì)誤差,但分頻結(jié)構(gòu)將變大。實(shí)際上應(yīng)該綜合考慮這兩個(gè)方面的因素,在盡量減少誤差的前提下,選取合適的基準(zhǔn)頻率。本文中選取750KHz的基準(zhǔn)頻率。由于現(xiàn)有的高頻時(shí)鐘脈沖信號(hào)的頻率為12MHz,故需先對(duì)其進(jìn)行16分頻,才能獲得750KHz的基準(zhǔn)頻率。對(duì)基準(zhǔn)頻率分頻后的輸出信號(hào)是一些脈寬極窄的尖脈沖信號(hào)(占空比=1/分頻系數(shù))。為提高輸出信號(hào)的驅(qū)動(dòng)能力,以使揚(yáng)聲器有足夠的功率發(fā)音,需要再通過(guò)一個(gè)分頻器將

32、原來(lái)的分頻器的輸出脈沖均衡為對(duì)稱(chēng)方波(占空比=1/2),但這時(shí)的頻率將是原來(lái)的1/2。由于最大分頻系數(shù)是1274,故分頻器采用11位二進(jìn)制計(jì)數(shù)器能滿足要求,樂(lè)曲中的休止符,只要將分頻系數(shù)設(shè)為0,即初始值=211-1=2047,此時(shí)揚(yáng)聲器不會(huì)發(fā)聲。3.3 樂(lè)曲節(jié)奏的控制 梁祝樂(lè)曲,最小的節(jié)拍為1/4拍,若將1拍的時(shí)間定為1秒,則只需要提供一個(gè)4Hz的時(shí)鐘頻率即可產(chǎn)生1/4拍的時(shí)長(zhǎng)(0.25秒),對(duì)于其它占用時(shí)間較長(zhǎng)的節(jié)拍(必為1/4拍的整數(shù)倍)則只需要將該音符連續(xù)輸出相應(yīng)的次數(shù)即可。 計(jì)數(shù)時(shí)鐘信號(hào)作為輸出音符快慢的控制信號(hào),時(shí)鐘快時(shí)輸出節(jié)拍速度就快,演奏的速度也就快,時(shí)鐘慢時(shí)輸出節(jié)拍的速度就慢,

33、演奏的速度自然降低。3.4 樂(lè)譜發(fā)生器本實(shí)驗(yàn)將樂(lè)譜中的音符數(shù)據(jù)存儲(chǔ)在LPM-ROM中,如“梁?!睒?lè)曲中的第一個(gè)音符為“3”,此音在邏輯中停留了4個(gè)時(shí)鐘節(jié)拍,即1秒的時(shí)間,相應(yīng)地,音符“3”就要在LPM-ROM中連續(xù)的四個(gè)地址上都存儲(chǔ)。當(dāng)一個(gè)4Hz的時(shí)鐘來(lái)時(shí),相應(yīng)地就從LPM-ROM中輸出一個(gè)音符數(shù)據(jù)。3.5 樂(lè)曲演奏電路原理框圖 當(dāng)一個(gè)4Hz的時(shí)鐘脈沖來(lái)到時(shí),樂(lè)譜發(fā)生器模塊輸出一個(gè)音符數(shù)據(jù)給分頻系數(shù)模塊,分頻系數(shù)模塊輸出此音符相應(yīng)的分頻系數(shù),將分頻系數(shù)送給數(shù)控分頻器模塊,當(dāng)12MHz的時(shí)鐘脈沖來(lái)到時(shí),數(shù)控分頻器就根據(jù)分頻系數(shù)輸出相應(yīng)的頻率(即此音符所對(duì)應(yīng)的發(fā)生頻率)給揚(yáng)聲器,揚(yáng)聲器就可發(fā)出對(duì)應(yīng)

34、音符的聲音來(lái).連續(xù)的4Hz的時(shí)鐘脈沖就將樂(lè)譜發(fā)生器里所存儲(chǔ)的音符數(shù)據(jù)一個(gè)接一個(gè)的送給了分頻系數(shù)模塊,再經(jīng)過(guò)數(shù)控分頻模塊,最后揚(yáng)聲器一個(gè)接一個(gè)的發(fā)出音符數(shù)據(jù)所對(duì)應(yīng)的聲音來(lái)。曲子也就流暢的播放出來(lái)了.綜上所述,得到樂(lè)曲演奏電路的原理框圖如圖3-1所示圖3-1二、實(shí)驗(yàn)內(nèi)容:根據(jù)頂層原理圖,共分為地址發(fā)生器模塊、分頻預(yù)置數(shù)模塊、數(shù)控分頻模塊這三個(gè)模塊。而music模塊是存放樂(lè)曲中的音符數(shù)據(jù),在我們的頂層原理圖中并沒(méi)有顯示出來(lái),地址發(fā)生器模塊作為music模塊中所定制的音符數(shù)據(jù)ROM的地址發(fā)生器,分頻預(yù)置數(shù)模塊提供分頻預(yù)置數(shù)即給數(shù)控分頻模塊提供計(jì)數(shù)初值。數(shù)控分頻模塊根據(jù)分頻預(yù)置數(shù)輸出各個(gè)音符所對(duì)應(yīng)的頻率

35、。3.2.1 地址發(fā)生器的VHDL設(shè)計(jì)地址發(fā)生器模塊設(shè)置了一個(gè)8位二進(jìn)制計(jì)數(shù)器(計(jì)數(shù)最大值為138),作為音符數(shù)據(jù)ROM的地址發(fā)生器。每來(lái)一個(gè)時(shí)鐘脈沖信號(hào)(Clk),8位二進(jìn)制計(jì)數(shù)器就計(jì)數(shù)一次,ROM文件中的地址也就隨著遞增,音符數(shù)據(jù)ROM中的音符也就一個(gè)接一個(gè)連續(xù)的取出來(lái)了。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NoteTabs ISPORT (clk: IN STD_LOGIC; ToneIndex:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);E

36、ND;ARCHITECTURE one OF NoteTabs ISCOMPONENT MUSIC_ROMPORT (address: IN STD_LOGIC_VECTOR(7 DOWNTO 0); inclock: IN STD_LOGIC; q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT;SIGNAL Counter: STD_LOGIC_VECTOR (7 DOWNTO 0);BEGINCNT8: PROCESS(clk,Counter)BEGINIF Counter=138 THEN Counter<="00000

37、000"ELSIF (clk'EVENT AND clk='1') THEN Counter<=Counter+1;END IF;END PROCESS; u1:MUSIC_ROM PORT MAP(address=>Counter,q=>ToneIndex,inclock=>clk);END one;程序的功能是每來(lái)一個(gè)時(shí)鐘,地址值遞增1,并將這個(gè)地址上所存儲(chǔ)的音符數(shù)據(jù)輸出。當(dāng)Clk來(lái)了一個(gè)時(shí)鐘脈沖,輸出相應(yīng)地址上的音符3,地址值遞增1;接下來(lái)的三個(gè)時(shí)鐘脈沖來(lái)時(shí),輸出也是音符3,地址連續(xù)遞增3次;再下一個(gè)脈沖來(lái)時(shí),輸出為音符5等等都符

38、合模塊中的音符數(shù)據(jù)文件中的地址/數(shù)據(jù)表。3.2.2 分頻預(yù)置數(shù)模塊的VHDL設(shè)計(jì)模塊的功能是輸出各個(gè)音符所對(duì)應(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ù)。library ieee;use ieee.std_logic_1164.all;entity tonetaba isport(index: in std_logic_vector(3 downto

39、 0); code: out std_logic_vector(3 downto 0); high: out std_logic; tone: out std_logic_vector(10 downto 0);end entity tonetaba;architecture one of tonetaba isbeginsearch:process(index)begincase index iswhen"0000"=>tone<="11111111111"code<="0000"high<='0&#

40、39;-2047;when"0001"=>tone<="01100000101"code<="0001"high<='0'- 773;when"0010"=>tone<="01110010000"code<="0010"high<='0'- 912;when"0011"=>tone<="10000001100"code<="001

41、1"high<='0'-1036;when"0101"=>tone<="10010101101"code<="0101"high<='0'-1197;when"0110"=>tone<="10100001010"code<="0110"high<='1'-1290;when"0111"=>tone<="10101011100

42、"code<="0111"high<='1'-1372;when"1000"=>tone<="10110000010"code<="0001"high<='1'-1410;when"1001"=>tone<="10111001000"code<="0010"high<='1'-1480;when"1010"=>to

43、ne<="11000000110"code<="0011"high<='1'-1542;when"1100"=>tone<="11001010110"code<="0101"high<='1'-1622;when"1101"=>tone<="11010000100"code<="0110"high<='1'-1668;whe

44、n"1111"=>tone<="11011000000"code<="0001"high<='1'-1728;when others=>null;end case;end process;end one;3.2.3數(shù)控分頻模塊的VHDL設(shè)計(jì)其時(shí)鐘(Clk)端輸入的是12MHz的信號(hào),從數(shù)控分頻器中出來(lái)的輸出信號(hào)是脈寬極窄的脈沖式信號(hào),為了有利于驅(qū)動(dòng)揚(yáng)聲器,需另加一個(gè)D觸發(fā)器以均衡其占空比,這時(shí)的頻率就變?yōu)樵瓉?lái)的1/2,剛好就是相應(yīng)音符的頻率。數(shù)控分頻模塊中對(duì)Clk輸入信號(hào)的分頻比由11位預(yù)

45、置數(shù)tone10.0決定。Fout的輸出頻率將決定每一個(gè)音符的音調(diào),這樣,分頻計(jì)數(shù)器的預(yù)置值tone10.0與Fout的輸出頻率就有了對(duì)應(yīng)關(guān)系。例如在分頻預(yù)置數(shù)模塊中若取tone10.0=1036,將發(fā)出音符為“3”音的信號(hào)頻率。程序如下:use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speakera isport(clk: in std_logic; tone: in std_logic_vector(10 downto 0); spks: out std_logic);end entity speake

46、ra;architecture one of speakera issignal preclk,fullspks: std_logic;begindivideclk: process(clk)variable count4: std_logic_vector(3 downto 0);beginpreclk<='0'if count4>11 then preclk<='1'count4:="0000"elsif clk'event and clk='1' then count4:=count4+1;en

47、d if;end process;genspks: process(preclk,tone)-11variable count11: std_logic_vector(10 downto 0);beginif preclk'event and preclk='1'thenif count11=16#7ff#then count11:=tone;fullspks<='1'else count11:=count11+1;fullspks<='0'end if;end if;end process;delayspks: proces

48、s(fullspks)variable count2: std_logic;beginif fullspks'event and fullspks='1' then count2:=not count2;if count2='1' then spks<='1'else spks<='0'end if;end if;end process;end one;3.2.4 music_rom模塊Music_rom模塊存放樂(lè)曲中的音符數(shù)據(jù),它是利用LPM-ROM來(lái)實(shí)現(xiàn)的,將樂(lè)譜中相應(yīng)的音符放在一個(gè)連續(xù)的地址上。它首先是編

49、寫(xiě)音符數(shù)據(jù)文件,將樂(lè)譜中相應(yīng)的音符存放在一個(gè)連續(xù)的地址上。因?yàn)?拍的時(shí)間定為1秒,提供的是4Hz的時(shí)鐘頻率(即1/4拍的整數(shù)倍),則需將這個(gè)音符存儲(chǔ)在相應(yīng)次數(shù)的連續(xù)幾個(gè)地址上。然后對(duì)音符數(shù)據(jù)進(jìn)行ROM定制,最后對(duì)定制好的ROM文件進(jìn)行測(cè)試和仿真。width=4;depth=256;address_radix=dec;data_radix=dec;content begin00:3;01:3;02:3;03:3;04:5;05:5;06:5;130:5;131:5;132:5;133:5;134:5;135:5;136:0;137:0;138:0;end;其中WIDTH=4,表示數(shù)據(jù)輸出為寬為4

50、;DEPTH=256,表示共有256個(gè)4位數(shù)據(jù)點(diǎn);ADDRESS-RADIX=DEC,表示地址信號(hào)用十進(jìn)制;DATA-RADIX=DEC,表示輸出數(shù)據(jù)是十進(jìn)制數(shù)。文件編輯好后,保存時(shí)取文件名為“mucic_rom.mif”,存盤(pán)的路徑為“D:testmucic”。3.2.5 LPM-ROM定制(1)進(jìn)入MAXPLUSII,選菜單 file->megawizard plug-in manager,選擇“creat a new”,然后按“next”鍵,進(jìn)入圖2所示界面。選擇LPM-ROM;最后在browse下的欄中鍵入路徑與輸出文件名:“D:test music music_rom.vhd”

51、,注意后綴vhd小寫(xiě)。(2)單擊“next”鍵,將出現(xiàn)圖3所示的界面,選擇ROM數(shù)據(jù)位寬度為4,地址線寬為8,即設(shè)置此ROM能存儲(chǔ)8位二進(jìn)制數(shù)據(jù)共64個(gè),然后進(jìn)入圖4所示的窗口(3)通過(guò)在圖4所示窗口的“browse”鈕,找到ROM中的加載文件路徑和文件名:“D:testmucic music.mif”,注意ROM元件的inclock是地址鎖存時(shí)鐘。3.2.6 頂層文件見(jiàn)圖1將所編寫(xiě)的頂層文件程序設(shè)為當(dāng)前工程,通過(guò)對(duì)程序進(jìn)行編譯,仿真,確定工程沒(méi)有錯(cuò)誤后經(jīng)過(guò)引腳鎖定就可以下載到EDA試驗(yàn)箱中了。通過(guò)試驗(yàn)箱上的蜂鳴器我們可以聽(tīng)到“梁祝”的樂(lè)曲。三、實(shí)驗(yàn)結(jié)果總結(jié):1、畫(huà)出系統(tǒng)的框圖,說(shuō)明各個(gè)模塊的

52、作用。實(shí)驗(yàn)四 電子表一、 實(shí)驗(yàn)?zāi)康模?通過(guò)對(duì)電子表例程的分析、改進(jìn),掌握復(fù)雜電路的調(diào)試方法,元件例化語(yǔ)句的使用方法,熟悉大規(guī)模復(fù)雜時(shí)序電路的設(shè)計(jì)方法,掌握層次化的設(shè)計(jì)思路,通過(guò)此實(shí)驗(yàn)?zāi)軌蚴炀毜膽?yīng)用VHDL語(yǔ)言和EDA設(shè)計(jì)工具獨(dú)立的完成復(fù)雜設(shè)計(jì)。二、 實(shí)驗(yàn)原理:下圖為數(shù)字電子表的原理圖。BCD (7-4) DBSCLR 時(shí)鐘顯示電路方框圖SEC 24進(jìn)制計(jì)數(shù)器60進(jìn)制計(jì)數(shù)器60進(jìn)制計(jì)數(shù)器BCD à 七段譯碼電路BCD 選擇BCD(8)ßBIN(6)6 個(gè)七段數(shù)碼管掃描電路 S(3) SEG (8) NUM(4) BCD (3-0) ENB (0) ENB (1) ENB (2

53、) DBHDBMBIN ( 6 ) CYH CYS CYM 分頻器QCP 38譯碼三、 實(shí)驗(yàn)設(shè)備:1、用實(shí)驗(yàn)箱上的八個(gè)七段數(shù)碼管做電子表的顯示器,用撥碼開(kāi)關(guān)做為輸入。(注意:要把20進(jìn)制和60進(jìn)制計(jì)數(shù)器的元件例化程序與電子表工程文件放在同一工程文件夾下),取實(shí)驗(yàn)箱上晶振的5M頻率做為基頻。四、 實(shí)驗(yàn)步驟:例1:24進(jìn)制計(jì)數(shù)器的VHDL語(yǔ)言源代碼如下:(做完后,修改此代碼實(shí)現(xiàn)60進(jìn)制計(jì)數(shù)器功能,然后將兩個(gè)計(jì)數(shù)器(60進(jìn)制與24進(jìn)制)程序文件與電子表的設(shè)計(jì)程序文件(即例2)保存在同一個(gè)文件夾下)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.ST

54、D_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER24 ISPORT(CP : IN STD_LOGIC;-時(shí)鐘脈沖 BIN : OUT STD_LOGIC_VECTOR (5 DOWNTO 0);-二進(jìn)制 S : IN STD_LOGIC;-輸出啟動(dòng)信號(hào) CLR : IN STD_LOGIC;-清除信號(hào) EC : IN STD_LOGIC;-使能計(jì)數(shù)信號(hào) CY24 : OUT STD_LOGIC-計(jì)數(shù)24進(jìn)位信號(hào) );END COUNTER24;-*ARCHITECTURE a OF COUNTER24 ISSIGNAL Q : STD_LOGIC_VECTOR (4 DOWNTO 0) ;SIGNAL RST, DLY : STD_LOGIC;BEGINPROCESS (CP,RST)- 計(jì)數(shù)24 BEGINIF RST = '1' THENQ <= "00000"- 復(fù)位計(jì)數(shù)器 ELSIF CP'event AND CP = '1' THENDLY <= Q(4);IF EC = '1' THENQ

溫馨提示

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

評(píng)論

0/150

提交評(píng)論