




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第5章硬件描述語言第一頁,共67頁。學習內(nèi)容VHDL程序基本結(jié)構(gòu)實體、結(jié)構(gòu)體、配置、包集合和庫VHDL基本語法描述結(jié)構(gòu)體功能的三種方法:行為描述法數(shù)據(jù)流描述法(RTL描述)結(jié)構(gòu)描述法第二頁,共67頁。學習要求用VHDL語言設(shè)計簡單的數(shù)字系統(tǒng)第三頁,共67頁。VeryhighspeedintegratedCircuitHardwareDescriptionLanguage(VHDL)是IEEE、工業(yè)國際標準硬件描述語言用語言的方式而非圖形等方式描述硬件電路VHDL有過兩個標準:IEEEStd1076-1987(calledVHDL1987)IEEEStd1076-1993(calledVHDL1993)
IEEEStd1076-2002(calledVHDL2002)
5.3VHDL硬件描述語言第四頁,共67頁。VHDL的特點設(shè)計可按層次分解。每個設(shè)計元素既有良好定義的界面(為了與其他元素連接),又有精確的行為描述(為了模擬它)。行為描述既可用算法也可用實際硬件結(jié)構(gòu)來定義元素的操作。例如,一個元素可由算法作初始定義,以允許對使用該算法的更高級元素做設(shè)計驗證;之后,算法定義再由硬件結(jié)構(gòu)來代替。并行性、定時和時鐘都可被模型化。VHDL可以處理異步、也可以處理同步時序電路結(jié)構(gòu)。設(shè)計的邏輯操作和定時特性都可被模擬。第五頁,共67頁。設(shè)計流程第六頁,共67頁。5.3.1程序結(jié)構(gòu)VHDL是按結(jié)構(gòu)化編程原則來設(shè)計的,即定義硬件模塊的界面而隱藏它的內(nèi)部細節(jié)。VHDL實體(entity)只是對模塊輸入輸出的說明,而VHDL的結(jié)構(gòu)體(architecture)是對模塊內(nèi)部結(jié)構(gòu)或行為的細致描述。第七頁,共67頁。高層的結(jié)構(gòu)體可多次使用低層實體,而多個頂層結(jié)構(gòu)體可用同一個低層結(jié)構(gòu)體。第八頁,共67頁。VHDL程序文件結(jié)構(gòu)在VHDL程序的文本文件中,實體聲明和結(jié)構(gòu)體定義是分開的。在大型項目中,實體和結(jié)構(gòu)體有時在不同的文件中定義,編譯器根據(jù)它們的名字來匹配它們。第九頁,共67頁。VHDL實體聲明語法實體聲明語法除了聲明名字實體外,還要定義外部接口信號或在端口聲明部分定義端口。第十頁,共67頁。entity-name(實體名):設(shè)計者自定,最好根據(jù)電路功能來命名。mode(模式):4個保留字之一,說明信號方向。實體聲明中包含的元素signal-names(信號名):由逗號分開的1個或多個用戶選擇的標識符的列表,用于命名外部接口信號。signal-type(信號類型):內(nèi)置或用戶定義信號類型。注意:在最后的信號類型后面沒有分號。第十一頁,共67頁。VHDL結(jié)構(gòu)體語法實體名必須與前面實體聲明中的名字相同。結(jié)構(gòu)體名是用戶自定的,通常與實體名有關(guān)。結(jié)構(gòu)體的外部接口信號是從相應的實體聲明中的端口聲明繼承而來的。結(jié)構(gòu)體可包含限于結(jié)構(gòu)體內(nèi)部使用的信號和其他聲明。第十二頁,共67頁。信號與變量信號聲明變量聲明
信號SIGNAL變量VARIABLE基本用法用于作為電路中的信號連線
用于作為進程中局部數(shù)據(jù)存儲單元
適用范圍在整個結(jié)構(gòu)體內(nèi)的任何地方都能適用
只能在所定義的進程中使用
行為特性在進程的最后才對信號賦值
立即賦值
信號與變量賦值語句功能的比較信號賦值符號<=變量賦值符號:=第十三頁,共67頁。5.3.2類型和常量VHDL程序中的所有信號、變量和常量都必須有相關(guān)的“類型”。類型說明了對象可以取值的范圍和集合,經(jīng)常還有與給定類型相關(guān)的操作符的集合(如加、與等)。Integer(整數(shù))范圍:從-231+1~+231-1boolean(布爾)類型有2個值:true(真)和false(假)Character(字符)類型包括ISO8位字符集的所有字符,頭128個字符是ASCII字符。第十四頁,共67頁。第十五頁,共67頁。用戶自定義類型典型VHDL程序中最常用的類型是用戶定義類型,其中最常用的又是枚舉類型,通過列舉該類型的值而定義。枚舉類型的類型聲明如上表第1行所示。value-list是類型所有值的列表,由逗號隔開。如:第十六頁,共67頁。標準用戶定義邏輯類型std_logic初始值不定態(tài)邏輯“0”邏輯“1”高阻態(tài)弱信號不定弱信號0弱信號1不可能情況第十七頁,共67頁。VHDL還允許用戶生成自定義類型的子類型(subtype)。子類型的值必須是基類型值的一個連續(xù)的范圍。對于枚舉類型,“連續(xù)”是指初始定義時,這些值在value-list中的位置。下面是一些子類型的定義:注意:列表范圍的順序可使用to或downto決定升序或降序。子類型第十八頁,共67頁。常量常量(constant)都有利于程序的可讀性、可維持性和可移植性。常量聲明:例如:注意:常量的值可為簡單的表達式。常量可用于任何能用到其對應值的地方。第十九頁,共67頁。數(shù)組類型(arraytype)數(shù)組類型是一個用戶定義類型。跟其他語言一樣,數(shù)組是同類型元素的有序集合,每個元素由數(shù)組下標來選擇。指定現(xiàn)有的類型(range-type)的全部值或子集作為數(shù)組下標的范圍。第二十頁,共67頁。數(shù)組元素的順序是從左到右,與下標范圍的方向相同。各個數(shù)組元素是由數(shù)組名和括號內(nèi)的元素下標來訪問的。數(shù)組變量可通過在括號內(nèi)列出元素值來賦值。VHDL還提供一種速記符號對數(shù)據(jù)元素賦值。如:如:通過指明子集的開始和結(jié)束下標來指向數(shù)組的連續(xù)子集或片段。注意:片段的方向必須與原數(shù)組方向相同。可用連接操作符&來拼接數(shù)組或數(shù)組元素。拼接是按照寫的順序從左到右進行。'0'&'1'&"1Z"等價于“011Z”,如:第二十一頁,共67頁。字符串(string)是字符數(shù)據(jù),是由雙引號包括的ISO字符序列。如:在典型的VHDL程序中,最重要的數(shù)組類型是IEEE1164標準用戶定義的邏輯類型std_logic_vector,它定義了std_logic位的有序集。這種類型定義如下:此數(shù)組范圍未作說明,但范圍必須是一個已定義類型的子集,是一個無約束數(shù)組類型。第二十二頁,共67頁。5.3.3函數(shù)和過程與高級程序語言的函數(shù)一樣,VHDL函數(shù)(function)接收一些參數(shù)并返回一個結(jié)果。在VHDL函數(shù)定義或函數(shù)調(diào)用中的每個參數(shù)和結(jié)果,都有一個預定義類型。子程序包括函數(shù)和過程,是一個VHDL程序模塊,與進程類似,但不能像進程那樣可以從結(jié)構(gòu)體的并行語句或進程結(jié)構(gòu)中直接讀取信號值或向信號賦值第二十三頁,共67頁。根據(jù)VHDL的強類型原則,實際參數(shù)必須與形式參數(shù)的類型相同或是它的子類型。關(guān)鍵詞return指示函數(shù)何時返回調(diào)用處,它后面跟著一個表達式,其值將返回給調(diào)用者。由該表達式所產(chǎn)生類型必須與函數(shù)說明中的return-type相匹配。第二十四頁,共67頁。VHDL操作符重載這個設(shè)施允許用戶指定一個這樣的函數(shù):只要一個內(nèi)置操作符(and、or、+,等等)被用于操作數(shù)類型的匹配集時,該函數(shù)就被喚醒。對給定的操作符可能有幾個定義,在操作符的每次使用中編譯器都會自動地選擇與操作數(shù)類型匹配的定義。在函數(shù)定義本身,函數(shù)名上的雙引號指示操作符重載。第二十五頁,共67頁。第二十六頁,共67頁。由于VHDL的強類型要求,通常要求將一個信號從一種類型轉(zhuǎn)換為另一種類型。IEEE1164包包含了幾種轉(zhuǎn)換函數(shù)。X‘range:名字后面跟一個單引號表示“屬性”,range是內(nèi)置屬性標識符,它只用于數(shù)組,意思是“數(shù)組下標范圍,從左到右”。第二十七頁,共67頁。FUNCTIONCONV_STD_LOGIC(arg:INTEGER;size:INTEGER) RETURNSTD_LOGIC_VECTORis VARABLEresult:STD_LOGIC_VECTOR(size-1downto0); VARABLEtemp:INTEGER;begin temp:=arg; FORIIN0TOsize-1LOOP IF(tempMOD2)=1THENresult(i):=‘1’; ELSEresult(i):=‘0’; ENDIF; temp:=temp/2; ENDLOOP;RETURNresult;END;第二十八頁,共67頁。注意:函數(shù)聲明了一個局部變量“result”,其下標范圍依賴于SIZE。因此,SIZE必須為一個常數(shù)或編譯該函數(shù)時已是一個已知值。例:arg=6則size=3(位)temp=arg=6i=06mod2=0result(0)=0 temp=6/2=3i=13mod2=1result(1)=1 temp=3/2=1i=21mod2=1result(2)=1 temp=1/2returnresult=result(2)result(1)result(0)=110第二十九頁,共67頁。過程可以多次調(diào)用VHDL過程(procedure)與函數(shù)相似,但是它不返回結(jié)果。函數(shù)可看作為一個表達式,過程則可看作為一個語句。VHDL過程允許將其參數(shù)指定為輸出或輸入輸出類型,因此實際上過程也可以“返回”結(jié)果。過程調(diào)用格式過程名實際參數(shù)(表達式)VHDL過程第三十頁,共67頁。5.3.4庫和包VHDL庫VHDL編譯器存儲信息的地方,包括在項目分析、模擬和綜合時用到的中間文件。主機文件系統(tǒng)中,庫的位置是與實現(xiàn)有關(guān)的。對于給定的VHDL設(shè)計,計算機自動生成和使用名為“work”的庫。不是所有設(shè)計中所需的信息都在“work”庫中。它必須指向包含共享定義的公共庫。即使是小的項目也可能用到標準庫。庫的引用:在設(shè)計中說明了庫名,就可使它訪問任何前面分析的、存于庫中的實體和結(jié)構(gòu)體,但不能訪問類型定義以及類似的定義。第三十一頁,共67頁。包VHDL包(package)是一個文件,它包括可用于其他程序中的對象定義??煞湃氚械膶ο蟀ㄐ盘?、類型、常量、函數(shù)、過程和組件聲明。包中定義的信號是全局信號,任何使用包的VHDL實體都可使用之??稍谠O(shè)計文件開頭引入use子句來“使用”一個包。all表示可使用包中的所有定義只使用包中std_ulogic類型的定義如:第三十二頁,共67頁。包定義的語法包的定義并不限于標準體中。第一個“package”和“end”之間的所有對象,對使用包的設(shè)計文件是可見的,而“packagebody”后面的對象則是局部的。注意:第一部分包括“函數(shù)聲明”,而不是函數(shù)定義。函數(shù)聲明只列出函數(shù)名、參數(shù)、類型。完整的函數(shù)定義在包體中給出,對函數(shù)使用者是不可見的。第三十三頁,共67頁。5.3.5結(jié)構(gòu)化設(shè)計元素在VHDL中,結(jié)構(gòu)體的主體是一系列并發(fā)語句。每個并發(fā)語句和同一結(jié)構(gòu)體中的其他并發(fā)語句是同時執(zhí)行的。
結(jié)構(gòu)化設(shè)計可定義實現(xiàn)實體的信號與實體的精確互連結(jié)構(gòu)。VHDL有各種不同的并發(fā)語句,以及將一些順序語句捆扎起來作為一個并發(fā)語句操作的機制。由于使用方法不同,這些語句產(chǎn)生三種不同的電路設(shè)計與描述樣式:結(jié)構(gòu)化設(shè)計、數(shù)據(jù)流設(shè)計及行為設(shè)計。第三十四頁,共67頁。component語句(組件語句)組件語句中,組件名是前面已定義的實體名,在當前的結(jié)構(gòu)體中要用到該實體。用到實體名的每個組件語句都產(chǎn)生一個已命名實體的實例,而每個實例都必須由惟一的標簽命名。關(guān)鍵詞portmap引入一個列表,該列表將命名的實體端口和當前結(jié)構(gòu)體的信號聯(lián)系起來。第一種是定位樣式,列表信號的順序和實體定義中端口的順序一致;第二種是明晰樣式,每個實體端口和信號以“=>”操作符相聯(lián),可以為任意順序。第三十五頁,共67頁。組件聲明語法在結(jié)構(gòu)體中調(diào)用之前,組件必須在結(jié)構(gòu)體定義中的組件聲明中給予聲明。組件聲明與相應的實體聲明中的端口聲明部分一樣,列出了每個端口的名字、模式和每個端口的類型。第三十六頁,共67頁。注意:程序中的組件語句是同時被執(zhí)行的。第三十七頁,共67頁。N(3) N3_L N3L_N0第三十八頁,共67頁。generate語句generate語句允許用“forloop”生成重復結(jié)構(gòu),而不用分別寫出每個組件實例。第三十九頁,共67頁。第四十頁,共67頁。generic(類屬)在實體聲明中,在端口聲明前做類屬聲明(genericdeclaration)可定義一個或多個類屬常量。每個命名的常量可用于實體的結(jié)構(gòu)體定義中,而且直到實體被另一個結(jié)構(gòu)體用組件語句調(diào)用之前,常量值不變。在組件語句中用genericmap給類屬常量賦值。第四十一頁,共67頁。將generic和generate語句結(jié)合起來,定義了一個用戶可指定寬度的“總線反相器”第四十二頁,共67頁。調(diào)用多個反相器拷貝,每個拷貝寬度不同。第四十三頁,共67頁。表VHDL語言的順序語句和并行語句并行語句順序語句塊(BLOCK)語句WAIT語句進程(PROCESS)語句斷言(ASSERT)語句信號代入語句信號代入語句條件信號代入語句變量賦值語句選擇信號代入語句CASE語句并發(fā)過程調(diào)用語句IF語句生成(GENERATE)語句LOOP語句元件例化語句EXIT語句RETURE語句NULL語句過程調(diào)用語句第四十四頁,共67頁。5.3.6數(shù)據(jù)流設(shè)計元素VHDL提供幾個并發(fā)語句允許VHDL利用數(shù)據(jù)流及其在電路中的操作來描述一個電路。這種描述稱為數(shù)據(jù)流描述或數(shù)據(jù)流設(shè)計。第四十五頁,共67頁。并發(fā)信號賦值語句在并發(fā)信號賦值語句中,表達式的類型必須與信號名的類型兼容。這意味著兩種類型必須是同樣的,或者表達式類型是信號名類型的子類型。在這種情況下,元素的類型與長度必須匹配,但下標范圍和方向不必匹配。第四十六頁,共67頁。注意:在VHDL內(nèi)置的and、or、not操作符中,在not操作具有最高的優(yōu)先級,第四十七頁,共67頁。素數(shù)檢測器還可使用并發(fā)信號賦值語句的條件形式實現(xiàn)。條件并發(fā)賦值語句要求覆蓋所有可能的條件。在條件信號賦值中,最后的“elseexpression”覆蓋遺漏條件。第四十八頁,共67頁。選擇信號賦值語句對expression表達式進行判斷,若其值與某個choices匹配,就將相應的signal-value賦給signal-name。每個when子句的choices可以是expression的單個值,或由豎線(|)分開的值列表。關(guān)鍵詞others覆蓋所有剩余的expression值。第四十九頁,共67頁。第五十頁,共67頁。5.3.7行為設(shè)計元素在VHDL中,可以用并發(fā)語句直接描述所需的邏輯電路行為。這種描述稱為行業(yè)描述或行為設(shè)計。VHDL行為設(shè)計能力是一般硬件描述語言特別是VHDL的主要優(yōu)點。第五十一頁,共67頁。進程一個進程(process)是與其他并發(fā)語句以及其他進程并行執(zhí)行的順序語句的集合。VHDL的進程語句(processstatement)可用在能使用并發(fā)語句的任何地方。進程語句由關(guān)鍵詞process引出,注意:進程可以不聲明信號而只聲明“變量”。第五十二頁,共67頁。VHDL進程要么在執(zhí)行要么被掛起。進程定義中的信號列表稱為靈敏度列表(sensitivitylist),它決定了進程何時執(zhí)行。進程開始時是掛起的,當靈敏度列表中的任何信號改變其值時,進程恢復執(zhí)行,從第一個順序語句開始直到最后。靈敏度表是可選的,沒有靈敏度表的進程從模擬的零時刻開始執(zhí)行。第五十三頁,共67頁。順序語句順序信號賦值語句順序信號賦值語句的語法與并發(fā)版本的語法相同(signal-name<=expression;),但它是在進程體范圍內(nèi)發(fā)生,而不是在結(jié)構(gòu)體中。變量賦值語句變量賦值語句的語法:variable-name:=expression;注意:賦值符號是(:=),它用于變量賦值。第五十四頁,共67頁。順序語句If語句第五十五頁,共67頁。第五十六頁,共67頁。順序語句case語句這個語句計算給出的expression,找出匹配的choices值,再執(zhí)行相應的語句。注意:每個選擇集可寫出1個或多個sequential-statement。choices可以是單值形式或由豎線分開的多個值,且必須是相互排斥的,并包括表達式類型的所有可能值。關(guān)鍵詞others覆蓋剩余的所有值。第五十七頁,共67頁。第五
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度自來水供應與水價調(diào)整合同
- 二零二五年度航空航天材料研發(fā)廠房租賃合作協(xié)議
- 二零二五年度跨境電商平臺利潤分成服務合同
- 教育機構(gòu)教師聘用勞動合同范本
- 2025年P(guān)S版自動沖版機項目可行性研究報告
- 2025至2030年自動焊接組合機床項目投資價值分析報告
- 2025至2030年潤滑油自動供給控制器項目投資價值分析報告
- 2025至2030年扶手三角椅項目投資價值分析報告
- 2025年蓋碗茶具項目可行性研究報告
- 2025年正反吹風大布袋除塵器項目可行性研究報告
- 《合理調(diào)節(jié)情緒-做自己情緒的主人》班會課件
- 腦心健康管理工作總結(jié)
- 村委會會議簽到表
- 001 220kV升壓站事故油池施工方案
- 營養(yǎng)風險篩查(NRS2002)解讀
- 農(nóng)業(yè)推廣學第三章農(nóng)業(yè)推廣溝通-
- 餐飲店巡店表
- 2023社會工作督導(試題)
- 一元一次方程中考真題匯總
- 醫(yī)療機構(gòu)負責人簽字確認表
- 魯科版英語三年級英語下冊Unit3-Animals-Lesson1-These-are-pandas課件
評論
0/150
提交評論