版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章
硬件描述語言
學(xué)習(xí)內(nèi)容VHDL程序基本結(jié)構(gòu)實(shí)體、結(jié)構(gòu)體、配置、包集合和庫(kù)VHDL基本語法描述結(jié)構(gòu)體功能的三種方法:行為描述法數(shù)據(jù)流描述法(RTL描述)結(jié)構(gòu)描述法學(xué)習(xí)要求用VHDL語言設(shè)計(jì)簡(jiǎn)單的數(shù)字系統(tǒng)VeryhighspeedintegratedCircuitHardwareDescriptionLanguage(VHDL)
是IEEE、工業(yè)國(guó)際標(biāo)準(zhǔn)硬件描述語言用語言的方式而非圖形等方式描述硬件電路
VHDL有過兩個(gè)標(biāo)準(zhǔn):
IEEEStd1076-1987(calledVHDL1987)IEEEStd1076-1993(calledVHDL1993)
IEEEStd1076-2002(calledVHDL2002)
5.3VHDL硬件描述語言VHDL的特點(diǎn)設(shè)計(jì)可按層次分解。每個(gè)設(shè)計(jì)元素既有良好定義的界面(為了與其他元素連接),又有精確的行為描述(為了模擬它)。行為描述既可用算法也可用實(shí)際硬件結(jié)構(gòu)來定義元素的操作。例如,一個(gè)元素可由算法作初始定義,以允許對(duì)使用該算法的更高級(jí)元素做設(shè)計(jì)驗(yàn)證;之后,算法定義再由硬件結(jié)構(gòu)來代替。并行性、定時(shí)和時(shí)鐘都可被模型化。VHDL可以處理異步、也可以處理同步時(shí)序電路結(jié)構(gòu)。設(shè)計(jì)的邏輯操作和定時(shí)特性都可被模擬。設(shè)計(jì)流程5.3.1程序結(jié)構(gòu)
VHDL是按結(jié)構(gòu)化編程原則來設(shè)計(jì)的,即定義硬件模塊的界面而隱藏它的內(nèi)部細(xì)節(jié)。
VHDL實(shí)體(entity)只是對(duì)模塊輸入輸出的說明,而VHDL的結(jié)構(gòu)體(architecture)是對(duì)模塊內(nèi)部結(jié)構(gòu)或行為的細(xì)致描述。高層的結(jié)構(gòu)體可多次使用低層實(shí)體,而多個(gè)頂層結(jié)構(gòu)體可用同一個(gè)低層結(jié)構(gòu)體。VHDL程序文件結(jié)構(gòu)在VHDL程序的文本文件中,實(shí)體聲明和結(jié)構(gòu)體定義是分開的。在大型項(xiàng)目中,實(shí)體和結(jié)構(gòu)體有時(shí)在不同的文件中定義,編譯器根據(jù)它們的名字來匹配它們。VHDL實(shí)體聲明語法實(shí)體聲明語法除了聲明名字實(shí)體外,還要定義外部接口信號(hào)或在端口聲明部分定義端口。entity-name(實(shí)體名):設(shè)計(jì)者自定,最好根據(jù)電路功能來命名。mode(模式):4個(gè)保留字之一,說明信號(hào)方向。實(shí)體聲明中包含的元素signal-names(信號(hào)名):由逗號(hào)分開的1個(gè)或多個(gè)用戶選擇的標(biāo)識(shí)符的列表,用于命名外部接口信號(hào)。signal-type(信號(hào)類型):內(nèi)置或用戶定義信號(hào)類型。注意:在最后的信號(hào)類型后面沒有分號(hào)。VHDL結(jié)構(gòu)體語法實(shí)體名必須與前面實(shí)體聲明中的名字相同。結(jié)構(gòu)體名是用戶自定的,通常與實(shí)體名有關(guān)。結(jié)構(gòu)體的外部接口信號(hào)是從相應(yīng)的實(shí)體聲明中的端口聲明繼承而來的。結(jié)構(gòu)體可包含限于結(jié)構(gòu)體內(nèi)部使用的信號(hào)和其他聲明。信號(hào)與變量信號(hào)聲明變量聲明
信號(hào)SIGNAL變量VARIABLE基本用法用于作為電路中的信號(hào)連線
用于作為進(jìn)程中局部數(shù)據(jù)存儲(chǔ)單元
適用范圍在整個(gè)結(jié)構(gòu)體內(nèi)的任何地方都能適用
只能在所定義的進(jìn)程中使用
行為特性在進(jìn)程的最后才對(duì)信號(hào)賦值
立即賦值
信號(hào)與變量賦值語句功能的比較信號(hào)賦值符號(hào)<=變量賦值符號(hào):=5.3.2類型和常量
VHDL程序中的所有信號(hào)、變量和常量都必須有相關(guān)的“類型”。類型說明了對(duì)象可以取值的范圍和集合,經(jīng)常還有與給定類型相關(guān)的操作符的集合(如加、與等)。
Integer(整數(shù))范圍:從-231+1~+231-1
boolean(布爾)類型有2個(gè)值:true(真)和false(假)
Character(字符)類型包括ISO8位字符集的所有字符,頭128個(gè)字符是ASCII字符。用戶自定義類型典型VHDL程序中最常用的類型是用戶定義類型,其中最常用的又是枚舉類型,通過列舉該類型的值而定義。枚舉類型的類型聲明如上表第1行所示。value-list是類型所有值的列表,由逗號(hào)隔開。如:標(biāo)準(zhǔn)用戶定義邏輯類型std_logic初始值不定態(tài)邏輯“0”邏輯“1”高阻態(tài)弱信號(hào)不定弱信號(hào)0弱信號(hào)1不可能情況VHDL還允許用戶生成自定義類型的子類型(subtype)。子類型的值必須是基類型值的一個(gè)連續(xù)的范圍。對(duì)于枚舉類型,“連續(xù)”是指初始定義時(shí),這些值在value-list中的位置。下面是一些子類型的定義:注意:列表范圍的順序可使用to或downto決定升序或降序。子類型常量常量(constant)都有利于程序的可讀性、可維持性和可移植性。常量聲明:例如:注意:常量的值可為簡(jiǎn)單的表達(dá)式。常量可用于任何能用到其對(duì)應(yīng)值的地方。數(shù)組類型(arraytype)數(shù)組類型是一個(gè)用戶定義類型。跟其他語言一樣,數(shù)組是同類型元素的有序集合,每個(gè)元素由數(shù)組下標(biāo)來選擇。指定現(xiàn)有的類型(range-type)的全部值或子集作為數(shù)組下標(biāo)的范圍。數(shù)組元素的順序是從左到右,與下標(biāo)范圍的方向相同。各個(gè)數(shù)組元素是由數(shù)組名和括號(hào)內(nèi)的元素下標(biāo)來訪問的。數(shù)組變量可通過在括號(hào)內(nèi)列出元素值來賦值。VHDL還提供一種速記符號(hào)對(duì)數(shù)據(jù)元素賦值。如:如:通過指明子集的開始和結(jié)束下標(biāo)來指向數(shù)組的連續(xù)子集或片段。注意:片段的方向必須與原數(shù)組方向相同??捎眠B接操作符&來拼接數(shù)組或數(shù)組元素。拼接是按照寫的順序從左到右進(jìn)行。
'0'&'1'&"1Z"等價(jià)于“011Z”,如:字符串(string)是字符數(shù)據(jù),是由雙引號(hào)包括的ISO字符序列。如:在典型的VHDL程序中,最重要的數(shù)組類型是IEEE1164標(biāo)準(zhǔn)用戶定義的邏輯類型std_logic_vector,它定義了std_logic位的有序集。這種類型定義如下:此數(shù)組范圍未作說明,但范圍必須是一個(gè)已定義類型的子集,是一個(gè)無約束數(shù)組類型。5.3.3函數(shù)和過程與高級(jí)程序語言的函數(shù)一樣,VHDL函數(shù)(function)接收一些參數(shù)并返回一個(gè)結(jié)果。在VHDL函數(shù)定義或函數(shù)調(diào)用中的每個(gè)參數(shù)和結(jié)果,都有一個(gè)預(yù)定義類型。子程序包括函數(shù)和過程,是一個(gè)VHDL程序模塊,與進(jìn)程類似,但不能像進(jìn)程那樣可以從結(jié)構(gòu)體的并行語句或進(jìn)程結(jié)構(gòu)中直接讀取信號(hào)值或向信號(hào)賦值根據(jù)VHDL的強(qiáng)類型原則,實(shí)際參數(shù)必須與形式參數(shù)的類型相同或是它的子類型。關(guān)鍵詞return指示函數(shù)何時(shí)返回調(diào)用處,它后面跟著一個(gè)表達(dá)式,其值將返回給調(diào)用者。由該表達(dá)式所產(chǎn)生類型必須與函數(shù)說明中的return-type相匹配。VHDL操作符重載這個(gè)設(shè)施允許用戶指定一個(gè)這樣的函數(shù):只要一個(gè)內(nèi)置操作符(and、or、+,等等)被用于操作數(shù)類型的匹配集時(shí),該函數(shù)就被喚醒。對(duì)給定的操作符可能有幾個(gè)定義,在操作符的每次使用中編譯器都會(huì)自動(dòng)地選擇與操作數(shù)類型匹配的定義。在函數(shù)定義本身,函數(shù)名上的雙引號(hào)指示操作符重載。由于VHDL的強(qiáng)類型要求,通常要求將一個(gè)信號(hào)從一種類型轉(zhuǎn)換為另一種類型。IEEE1164包包含了幾種轉(zhuǎn)換函數(shù)。X‘range:名字后面跟一個(gè)單引號(hào)表示“屬性”,range是內(nèi)置屬性標(biāo)識(shí)符,它只用于數(shù)組,意思是“數(shù)組下標(biāo)范圍,從左到右”。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;注意:函數(shù)聲明了一個(gè)局部變量“result”,其下標(biāo)范圍依賴于SIZE。因此,SIZE必須為一個(gè)常數(shù)或編譯該函數(shù)時(shí)已是一個(gè)已知值。例: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
過程可以多次調(diào)用VHDL過程(procedure)與函數(shù)相似,但是它不返回結(jié)果。函數(shù)可看作為一個(gè)表達(dá)式,過程則可看作為一個(gè)語句。VHDL過程允許將其參數(shù)指定為輸出或輸入輸出類型,因此實(shí)際上過程也可以“返回”結(jié)果。過程調(diào)用格式過程名實(shí)際參數(shù)(表達(dá)式)VHDL過程5.3.4庫(kù)和包VHDL庫(kù)VHDL編譯器存儲(chǔ)信息的地方,包括在項(xiàng)目分析、模擬和綜合時(shí)用到的中間文件。主機(jī)文件系統(tǒng)中,庫(kù)的位置是與實(shí)現(xiàn)有關(guān)的。對(duì)于給定的VHDL設(shè)計(jì),計(jì)算機(jī)自動(dòng)生成和使用名為“work”的庫(kù)。不是所有設(shè)計(jì)中所需的信息都在“work”庫(kù)中。它必須指向包含共享定義的公共庫(kù)。即使是小的項(xiàng)目也可能用到標(biāo)準(zhǔn)庫(kù)。庫(kù)的引用:在設(shè)計(jì)中說明了庫(kù)名,就可使它訪問任何前面分析的、存于庫(kù)中的實(shí)體和結(jié)構(gòu)體,但不能訪問類型定義以及類似的定義。包VHDL包(package)是一個(gè)文件,它包括可用于其他程序中的對(duì)象定義??煞湃氚械膶?duì)象包括信號(hào)、類型、常量、函數(shù)、過程和組件聲明。包中定義的信號(hào)是全局信號(hào),任何使用包的VHDL實(shí)體都可使用之??稍谠O(shè)計(jì)文件開頭引入use子句來“使用”一個(gè)包。
all表示可使用包中的所有定義只使用包中std_ulogic類型的定義如:包定義的語法包的定義并不限于標(biāo)準(zhǔn)體中。第一個(gè)“package”和“end”之間的所有對(duì)象,對(duì)使用包的設(shè)計(jì)文件是可見的,而“packagebody”后面的對(duì)象則是局部的。注意:第一部分包括“函數(shù)聲明”,而不是函數(shù)定義。函數(shù)聲明只列出函數(shù)名、參數(shù)、類型。完整的函數(shù)定義在包體中給出,對(duì)函數(shù)使用者是不可見的。5.3.5結(jié)構(gòu)化設(shè)計(jì)元素在VHDL中,結(jié)構(gòu)體的主體是一系列并發(fā)語句。每個(gè)并發(fā)語句和同一結(jié)構(gòu)體中的其他并發(fā)語句是同時(shí)執(zhí)行的。
結(jié)構(gòu)化設(shè)計(jì)可定義實(shí)現(xiàn)實(shí)體的信號(hào)與實(shí)體的精確互連結(jié)構(gòu)。
VHDL有各種不同的并發(fā)語句,以及將一些順序語句捆扎起來作為一個(gè)并發(fā)語句操作的機(jī)制。由于使用方法不同,這些語句產(chǎn)生三種不同的電路設(shè)計(jì)與描述樣式:結(jié)構(gòu)化設(shè)計(jì)、數(shù)據(jù)流設(shè)計(jì)及行為設(shè)計(jì)。component語句(組件語句)組件語句中,組件名是前面已定義的實(shí)體名,在當(dāng)前的結(jié)構(gòu)體中要用到該實(shí)體。用到實(shí)體名的每個(gè)組件語句都產(chǎn)生一個(gè)已命名實(shí)體的實(shí)例,而每個(gè)實(shí)例都必須由惟一的標(biāo)簽命名。關(guān)鍵詞portmap引入一個(gè)列表,該列表將命名的實(shí)體端口和當(dāng)前結(jié)構(gòu)體的信號(hào)聯(lián)系起來。第一種是定位樣式,列表信號(hào)的順序和實(shí)體定義中端口的順序一致;第二種是明晰樣式,每個(gè)實(shí)體端口和信號(hào)以“=>”操作符相聯(lián),可以為任意順序。組件聲明語法在結(jié)構(gòu)體中調(diào)用之前,組件必須在結(jié)構(gòu)體定義中的組件聲明中給予聲明。組件聲明與相應(yīng)的實(shí)體聲明中的端口聲明部分一樣,列出了每個(gè)端口的名字、模式和每個(gè)端口的類型。注意:程序中的組件語句是同時(shí)被執(zhí)行的。N(3) N3_L N3L_N0generate語句generate語句允許用“forloop”生成重復(fù)結(jié)構(gòu),而不用分別寫出每個(gè)組件實(shí)例。generic(類屬)在實(shí)體聲明中,在端口聲明前做類屬聲明(genericdeclaration)可定義一個(gè)或多個(gè)類屬常量。每個(gè)命名的常量可用于實(shí)體的結(jié)構(gòu)體定義中,而且直到實(shí)體被另一個(gè)結(jié)構(gòu)體用組件語句調(diào)用之前,常量值不變。在組件語句中用genericmap給類屬常量賦值。將generic和generate語句結(jié)合起來,定義了一個(gè)用戶可指定寬度的“總線反相器”調(diào)用多個(gè)反相器拷貝,每個(gè)拷貝寬度不同。表VHDL語言的順序語句和并行語句并行語句順序語句塊(BLOCK)語句WAIT語句進(jìn)程(PROCESS)語句斷言(ASSERT)語句信號(hào)代入語句信號(hào)代入語句條件信號(hào)代入語句變量賦值語句選擇信號(hào)代入語句CASE語句并發(fā)過程調(diào)用語句IF語句生成(GENERATE)語句LOOP語句元件例化語句EXIT語句RETURE語句NULL語句過程調(diào)用語句5.3.6數(shù)據(jù)流設(shè)計(jì)元素
VHDL提供幾個(gè)并發(fā)語句允許VHDL利用數(shù)據(jù)流及其在電路中的操作來描述一個(gè)電路。這種描述稱為數(shù)據(jù)流描述或數(shù)據(jù)流設(shè)計(jì)。并發(fā)信號(hào)賦值語句在并發(fā)信號(hào)賦值語句中,表達(dá)式的類型必須與信號(hào)名的類型兼容。這意味著兩種類型必須是同樣的,或者表達(dá)式類型是信號(hào)名類型的子類型。在這種情況下,元素的類型與長(zhǎng)度必須匹配,但下標(biāo)范圍和方向不必匹配。注意:在VHDL內(nèi)置的and、or、not操作符中,在not操作具有最高的優(yōu)先級(jí),素?cái)?shù)檢測(cè)器還可使用并發(fā)信號(hào)賦值語句的條件形式實(shí)現(xiàn)。條件并發(fā)賦值語句要求覆蓋所有可能的條件。在條件信號(hào)賦值中,最后的“elseexpression”覆蓋遺漏條件。選擇信號(hào)賦值語句對(duì)expression表達(dá)式進(jìn)行判斷,若其值與某個(gè)choices匹配,就將相應(yīng)的signal-value賦給signal-name。每個(gè)when子句的choices可以是expression的單個(gè)值,或由豎線(|)分開的值列表。關(guān)鍵詞others覆蓋所有剩余的expression值。5.3.7行為設(shè)計(jì)元素在VHDL中,可以用并發(fā)語句直接描述所需的邏輯電路行為。這種描述稱為行業(yè)描述或行為設(shè)計(jì)。
VHDL行為設(shè)計(jì)能力是一般硬件描述語言特別是VHDL的主要優(yōu)點(diǎn)。進(jìn)程一個(gè)進(jìn)程(process)是與其他并發(fā)語句以及其他進(jìn)程并行執(zhí)行的順序語句的集合。VHDL的進(jìn)程語句(processstatement)可用在能使用并發(fā)語句的任何地方。進(jìn)程語句由關(guān)鍵詞process引出,注意:進(jìn)程可以不聲明信號(hào)而只聲明“變量”。VHDL進(jìn)程要么在執(zhí)行要么被掛起。進(jìn)程定義中的信號(hào)列表稱為靈敏度列表(sensitivitylist),它決定了進(jìn)程何時(shí)執(zhí)行。進(jìn)程開始時(shí)是掛起的,當(dāng)靈敏度列表中的任何信號(hào)改變其值時(shí),進(jìn)程恢復(fù)執(zhí)行,從第一個(gè)順序語句開始直到最后。靈敏度表是可選的,沒有靈敏度表的進(jìn)程從模擬的零時(shí)刻開始執(zhí)行。順序語句順序信號(hào)賦值語句順序信號(hào)賦值語句的語法與并發(fā)版本的語法相同(signal-name<=expression;),但它是在進(jìn)程體范圍內(nèi)發(fā)生,而不是在結(jié)構(gòu)體中。變量賦值語句變量賦值語句的語法:
variable-name:=expression;注意:賦值符號(hào)是(:=),它用于變量賦值。順序語句If語句順序語句case語句這個(gè)語句計(jì)算給出的expression,找出匹配的choices值,再執(zhí)行相應(yīng)的語句。注意:每個(gè)選擇集可寫出1個(gè)或多個(gè)sequential-statement。choices可以是單值形式或由豎線分開的多個(gè)值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 社區(qū)環(huán)保項(xiàng)目的實(shí)施計(jì)劃
- 中班幼兒數(shù)學(xué)教案《小小設(shè)計(jì)師》
- 幼兒園大班工作總結(jié)五篇
- 2024年度金融機(jī)構(gòu)不可撤銷連帶責(zé)任擔(dān)保書3篇
- 公關(guān)行業(yè)美工公關(guān)活動(dòng)海報(bào)公關(guān)策略圖
- 招生方案范文7篇
- 中醫(yī)科護(hù)士的工作總結(jié)
- 預(yù)防科護(hù)士推廣疾病預(yù)防
- 2024全新車展活動(dòng)車輛展示區(qū)清潔維護(hù)合同3篇
- 2024醫(yī)院?jiǎn)挝蛔o(hù)士崗位聘用合同書3篇
- 小學(xué)校門口突發(fā)問題應(yīng)急預(yù)案(5篇)
- 雙方共同招工協(xié)議書(2篇)
- 國(guó)家開放大學(xué)電大本科《工程經(jīng)濟(jì)與管理》2023-2024期末試題及答案(試卷代號(hào):1141)
- 教育中的心理效應(yīng)
- 提高玻璃幕墻擦窗機(jī)軌道安裝質(zhì)量
- T∕CEMIA 020-2019 顯示面板用N-甲基-2-吡咯烷酮
- 考古繪圖(課堂PPT)
- 注塑機(jī)冷卻水系統(tǒng)工程
- 工業(yè)管道材料選用規(guī)定
- PE管熱熔對(duì)接施工方案完整
- 中醫(yī)腫瘤臨床路徑
評(píng)論
0/150
提交評(píng)論