計(jì)算機(jī)硬件課程設(shè)計(jì)指導(dǎo)書(shū).doc
《計(jì)算機(jī)硬件課程設(shè)計(jì)指導(dǎo)書(shū).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《計(jì)算機(jī)硬件課程設(shè)計(jì)指導(dǎo)書(shū).doc(34頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第一章 可編程集成電路基礎(chǔ) 1.1 概述 1.2 在系統(tǒng)可編程邏輯器件的結(jié)構(gòu) 1.2.1 ispLSI1016 1.2.2 編程接口和編程 第二章 硬件描述語(yǔ)言VHDL基礎(chǔ) 2.1 概述 2.2 VHDL語(yǔ)言語(yǔ)法規(guī)則 2.2.1 標(biāo)識(shí)符 ( Identifiers) 2.2.2 數(shù)據(jù)對(duì)象 ( Data Objects ) 2.2.3 數(shù)據(jù)類型 ( Data Types ) 2.2.4 運(yùn)算符 ( Operators) 2.3 VHDL的語(yǔ)句結(jié)構(gòu)分類 2.3.1 庫(kù) 2.3.2 實(shí)體說(shuō)明 2.3.3 結(jié)構(gòu)定義 2.4 順序語(yǔ)句 2.4.1 信號(hào)賦值語(yǔ)句 2.4.2 變量賦值語(yǔ)句 2.4.3 if_then_else語(yǔ)句 2.4.4 case_when語(yǔ)句 2.5 并行語(yǔ)句 2.5.1 when_else語(yǔ)句 2.5.2 with_select_when語(yǔ)句 2.6 結(jié)構(gòu)體的子結(jié)構(gòu)描述 2.6.1 block語(yǔ)句 2.6.2 Proess ( 進(jìn)程 ) 語(yǔ)句 2.6.3 子程序 2.6.4 程序包 2.7 基本邏輯電路設(shè)計(jì) 第三章 ispDesignEXPERT 開(kāi)發(fā)系統(tǒng) 第四章 設(shè)計(jì)示例 第二章 硬件描述語(yǔ)言VHDL基礎(chǔ) 2.1 概 述 隨著集成電路的設(shè)計(jì)規(guī)模的增大和復(fù)雜程度日益增高,傳統(tǒng)的數(shù)字電路設(shè)計(jì)方法不適合設(shè)計(jì)大規(guī)模的系統(tǒng)。眾多軟件公司開(kāi)發(fā)研制了具有自己特色的電路硬件描述語(yǔ)言(Hardware Description Language,HDL),存在著很大的差異,因此,需要一種強(qiáng)大的、標(biāo)準(zhǔn)化的硬件描述語(yǔ)言,作為可相互交流的設(shè)計(jì)環(huán)境。美國(guó)國(guó)防部在80年代初提出了VHSIC(Very High Speed Integrated Circuit)計(jì)劃,其目的是為大規(guī)模集成電路設(shè)計(jì),建立一項(xiàng)新的描述方法。1981年提出了一種新的HDL,稱之為VHSIC Hardware Description Language,簡(jiǎn)稱為VHDL,VHDL語(yǔ)言可描述一個(gè)數(shù)字電路的輸入、輸出以 及相互間的行為與功能,它特有的層次性設(shè)計(jì)語(yǔ)法結(jié)構(gòu)適合大型設(shè)計(jì)項(xiàng)目的團(tuán)隊(duì)合作,是目前最通用的硬件描述語(yǔ)言。 這種語(yǔ)言有如下的諸多優(yōu)點(diǎn): 1. 可描述復(fù)雜的數(shù)字電路系統(tǒng); 2.成為國(guó)際的硬件描述語(yǔ)言標(biāo)準(zhǔn),1987年被采納為IEEE1076標(biāo)準(zhǔn) 3.與硬件獨(dú)立,一個(gè)設(shè)計(jì)可用于不同的硬件結(jié)構(gòu),而且設(shè)計(jì)時(shí)不必了解過(guò)多的硬件細(xì)節(jié); 4.有豐富的軟件支持VHDL的綜合和仿真,從而能在設(shè)計(jì)階段就能發(fā)現(xiàn)設(shè)計(jì)中的Bug,縮短設(shè)計(jì)時(shí)間,降低成本; 5.VHDL有良好的可讀性,容易理解。 2.2 VHDL語(yǔ)言的語(yǔ)法規(guī)則 2.2.1.VHDL標(biāo)識(shí)符(Identifiers) ü 基本標(biāo)識(shí)符由字母、數(shù)字和下劃線組成; ü 第一個(gè)字符必須是字母; ü 最后一個(gè)字符不能是下劃線; ü 不允許連續(xù)2個(gè)下劃線; ü 保留字(關(guān)鍵字)不能用于標(biāo)識(shí)符; ü 大小寫(xiě)是等效的。 2.2.2 數(shù) 據(jù) 對(duì) 象 ( Data Objects ) VHDL中常用的數(shù)據(jù)對(duì)象有:常量、信號(hào)和變量,常量相當(dāng)于電路中的恒定電平,信號(hào)和變量相當(dāng)于電路中的連線和連線上的信號(hào)值。 1 常 量 (Constant) 常量聲明即為一個(gè)常量名賦予一個(gè)固定值,其一般格式為: CONSTANT 常量名:數(shù)據(jù)類型:=表達(dá)式; 常量可在Library、Entity、Architecture、Process 中進(jìn)行定義,其有效范圍也相應(yīng)限定。例如: CONSTANT w: integer := 8; -- “w” 是整數(shù)類型的常數(shù),其值為“8” 2 信 號(hào) (Signal) 信號(hào)沒(méi)有方向性,是一個(gè)全局量,用于進(jìn)程之間的通信,聲明電路內(nèi)部的信號(hào)。在Entity中和Architecture中聲明,信號(hào)聲明語(yǔ)句格式為: SIGNAL 信號(hào)名:數(shù)據(jù)類型 約束條件:=表達(dá)式; 例如: SIGNAL GROUND: BIT : = ’0’ ; 符號(hào)“:=”表示直接賦值,用于指定信號(hào)的初始值。 信號(hào)賦值語(yǔ)句的格式為: [ 信號(hào)名 ] <= [ 表達(dá)式 ] [ AFTER [ 時(shí)間表達(dá)式]]; 其中時(shí)間表達(dá)式指定延遲時(shí)間,如果省略AFTER語(yǔ)句,則延遲時(shí)間取默認(rèn)值。 3 變 量 (Variable) 變量屬于臨時(shí)數(shù)據(jù),沒(méi)有物理意義,只能在Process和Function中定義,并只在其內(nèi)部有效。其聲明格式為: variable 變量名: 數(shù)據(jù)類型 約束條件:=表達(dá)式; 例如: variable count: INTEGER RANCE 0 TO 255:=10; 變量count為整數(shù)類型,RANCE 0 TO 255是對(duì)類型INTEGER的附加限制,該語(yǔ)句一旦執(zhí)行,立即將初始值10賦予變量。 2.2.3.?dāng)?shù)據(jù)類型 VHDL的數(shù)據(jù)類型定義非常嚴(yán)格,規(guī)定每一個(gè)對(duì)象都必須有明確的數(shù)據(jù)類型。不同類型之間的數(shù)據(jù)不可直接代入,連接不同數(shù)據(jù)類型的信號(hào)為非法。賦予一個(gè)值的對(duì)象只有一個(gè)類型,且只能具有該類型的值。 1. 定義數(shù)據(jù)類型 在std庫(kù)中有一個(gè)標(biāo)準(zhǔn)程序包,其中定義了一些預(yù)定義的數(shù)據(jù)類型。用VHDL編寫(xiě)程序時(shí),該庫(kù)自動(dòng)打開(kāi),所以使用這些數(shù)據(jù)類型時(shí),不需要再次打開(kāi)。 常用的預(yù)定義的數(shù)據(jù)類型如下: (1)整數(shù)(Integer) VHDL的算術(shù)運(yùn)算符均定義范圍為32位的整數(shù)。描述算術(shù)運(yùn)算時(shí),一般使用整數(shù)類型,但是使用整數(shù)很難表示未知或三態(tài)等邏輯狀態(tài)。 (2)實(shí)數(shù)(Real) 實(shí)數(shù)取值范圍為-1.0E38~+1.0E38。由于處理實(shí)數(shù)的運(yùn)算需要大量資源,故一般可編程邏輯器件開(kāi)發(fā)系統(tǒng)中的VHDL綜合器不支持這種數(shù)據(jù)類型。 (3)位(Bit)和位矢量(Bit_Vector) 位和位矢量類型的通用性強(qiáng)。位只能取值0或1,其值放在單引號(hào)中;位矢量為雙引號(hào)括的一組位數(shù)據(jù),一般表示總線的狀態(tài),如: “001100” X”00cce2000” X表示是十六進(jìn)制。 (4)布爾(Boolean) 布爾數(shù)據(jù)類型經(jīng)常用于邏輯關(guān)系運(yùn)算中,其取值只有TRUE或FALSE。 (5)字符(CHARACTER) 當(dāng)對(duì)一個(gè)變量執(zhí)行字符賦值操作時(shí),應(yīng)先聲明后賦值。例如將字符A賦給變量C,聲明如下: variable C: character; 然后執(zhí)行賦值操作: C:= ′A′; 其中字符A放在單引號(hào)中。 (6)時(shí)間(Time) 時(shí)間是一個(gè)物理量,其格式如下: TYPE 數(shù)據(jù)類型名 Is 范圍; UNITS 基本單位; 單位; END UNITS; 例如,在STD庫(kù)中的STANDARD程序包中,如下定義時(shí)間類型: TYPE Time IS -2147483647 TO 2147483647; UNITS fs; ps=1000 fs; us=1000 ps; us=1000 ns; ms=1000 us; sec=1000 ms; min=60 sec; hr=60 min; END UNITS; 2. IEEE預(yù)定義的標(biāo)準(zhǔn)邏輯數(shù)據(jù)類型 VHDL的標(biāo)準(zhǔn)數(shù)據(jù)“BIT”類型是一個(gè)不可描述高阻狀態(tài)的邏輯數(shù)據(jù)類型,定義為該類型的數(shù)據(jù)對(duì)象的取值是0或1。在IEEE庫(kù)中的程序包STD_LOGIC_1164中定義了包含高阻(‘Z’)和不定(‘X’)狀態(tài)的標(biāo)準(zhǔn)邏輯位和邏輯矢量數(shù)據(jù) STD_LOGIC和STD_ LOGIC_VECTOR類型。 使用這類數(shù)據(jù)類型時(shí),必須寫(xiě)出庫(kù)聲明語(yǔ)句和使用程序包集合的聲明語(yǔ)句。 3. 用戶定義的數(shù)據(jù)類型 VHDL允許用戶根據(jù)芯片的資源和實(shí)際的需要定義數(shù)據(jù)類型。 用戶定義的數(shù)據(jù)類型格式: TYPE 數(shù)據(jù)類型名 {數(shù)據(jù)類型名} 數(shù)據(jù)類型定義; 可以由用戶定義的數(shù)據(jù)類型有:枚舉(Enumerated)類型、整數(shù)(Integer)類型、實(shí)數(shù)(Real)類型、數(shù)組(Array)類型、存取(Access)類型、文件(File)類型、記錄(Record)類型及時(shí)間(Time)類型(物理類型),常用類型有: (1)枚舉類型 枚舉類型是一種特殊的數(shù)據(jù)類型,用符號(hào)表示一組實(shí)際的二進(jìn)制數(shù)。這種類型適合表示有限狀態(tài)機(jī)的狀態(tài),有助于改善復(fù)雜電路的可讀性。 定義格式: TYPE 數(shù)據(jù)類型名 IS (元素,元素,…); 例如: TYPE states IS (stO, stl, st2, st3); 在綜合過(guò)程中,通常自動(dòng)編碼枚舉類型。例如將上述語(yǔ)句中的stO編碼為0,以后的元素依次加1。 (2)整數(shù)(Integer)和實(shí)數(shù)(Real)類型 整數(shù)和實(shí)數(shù)類型在標(biāo)準(zhǔn)程序包中已定義。在實(shí)際應(yīng)用中,由于數(shù)據(jù)類型的取值范圍比較小,故應(yīng)重新定義。 特別要注意限定取值范圍,以提高芯片的利用率。例如,有很多開(kāi)始學(xué)習(xí)編寫(xiě)VHDL程序的初學(xué)者,往往忘記添加定義整數(shù)類型名的約束范圍,編寫(xiě)程序后,綜合也可通過(guò)。但是將該程序轉(zhuǎn)換為具體的在系統(tǒng)可編程邏輯芯片的熔絲圖文件時(shí),開(kāi)發(fā)可編程邏輯器件的系統(tǒng)卻顯示該芯片的資源不夠,即使一個(gè)使用非常少的邏輯門(mén)和寄存器即可完成的簡(jiǎn)單程序也不能夠滿足要求。這是因?yàn)椴患蛹s束范圍時(shí),EDA開(kāi)發(fā)軟件將該整數(shù)類型名的整數(shù)范圍定義為默認(rèn)范圍,占用芯片內(nèi)部的資源非常多。 定義格式: TYPE 數(shù)據(jù)類型名 Is 數(shù)據(jù)類型定義 約束范圍; 例如: TYPE digit IS INTEGER RANGE 0 TO 9; TYPE digit IS REAL RANGE -1.0 TO 1.0; (3)數(shù)組(Array)類型 數(shù)組是相同類型數(shù)據(jù)集合形成的一個(gè)新的數(shù)據(jù)類型,可以是一維或多維數(shù)組,定義格式為: TYPE 數(shù)據(jù)類型名 IS ARRAY 范圍 OF 原數(shù)據(jù)名 例如: TYPE word IS ARRAY (15 DOWNTO 0) OF BIT; 其中15指定數(shù)組元素的個(gè)數(shù)為16個(gè),DOWNTO指定下標(biāo)以降序變化。 例如: TYPE matrix IS ARRAY (1 TO 8,1 TO 8) OF BIT; TO指定下標(biāo)以升序變化,按低到高的順序排列8個(gè)元素。 為了使整個(gè)設(shè)計(jì)保持一致的設(shè)計(jì)風(fēng)格,建議采用關(guān)鍵字“DOWNTO”說(shuō)明數(shù)組或向量。向量最高位的下標(biāo)值最大,并且處于向量的最左邊。 (4)記錄(Record)類型 記錄將不同類型的數(shù)據(jù)和數(shù)據(jù)名組織在一起形成一個(gè)新的數(shù)據(jù)類型,其定義格式為: TYPE 數(shù)據(jù)類型名 IS RECORD 元素名:數(shù)據(jù)類型名; 元素名:數(shù)據(jù)類型名; END RECORD; 例如: TYPE bank IS RECORD addr0:STD_ LOGIC_VECTOR(7 DOWNTO 0); r0: INTEGER; END RECORD; 4. 屬性 VHDL中可以具有屬性(attribute)的項(xiàng)(items)如下: (1)類型和子類型。 (2)過(guò)程和函數(shù)。 (3)信號(hào)、變量和常量。 (4)實(shí)體、結(jié)構(gòu)體、配置和程序包。 (5)元件。 (6)語(yǔ)句標(biāo)號(hào)。 屬性是上述項(xiàng)目的特征,通過(guò)預(yù)定義屬性描述語(yǔ)句可以得到預(yù)定義項(xiàng)目的有關(guān)值、功能、類型和范圍。預(yù)定義的屬性類型有:類型(TYPES)、數(shù)組、信號(hào)和字符串。定義屬性的一般格式為: 項(xiàng)目名′屬性表示符; (1)類型(TYPES)的屬性 常用類型屬性有: T′LEFT:T中最左端的值。 T′RIGHT:T中最右端的值。 T′HIGH:T中的最大值。 T′LOW:T中的最小值。 T′POS(n):參數(shù)n在T中位置序號(hào)。 T′VAL(n).T中位置為n的值。 T′SUCC(n):得到的值為T(mén)′VAL(T′POS(n)+1)。 T′PRED(n):得到的值為T(mén)′VAL(T′POS(n)-1)。 T′LEFTOF(n):得到靠近輸入n的左邊的值。 T′RIGHTOF(n):得到靠近輸入n的右邊的值。 例如: TYPE number IS INTEGER 0 TO 9; … i :=number′LEFT; --i=0 i :=number′RIGHT; --i=9 i :=number′HIGH; --i=9 i :=number′LOW; --i=0 (2)數(shù)組屬性 常用的數(shù)組屬性有: A′LEFT(n):索引號(hào)n的區(qū)間的左端位置序號(hào)。 A′RIGHT(n):索引號(hào)n的區(qū)間的右端位置序號(hào)。 A′fHIGH(n):索引號(hào)n的區(qū)間的高端位置序號(hào)。 A′LOW(n):索引號(hào)n的區(qū)間的低端位置序號(hào)。 A′LENGTH(n):索引號(hào)n的區(qū)間的長(zhǎng)度值。 A′RANGE(n):索引號(hào)n的區(qū)間的范圍。 例如: TYPE bitll IS ARRAY (10 TO 20) OF BIT; VARIABLE len: INTEGER; … len:=bitll′LENGTH; --len=11 (3)信號(hào)屬性 s′DELAYED(t):延時(shí)t個(gè)時(shí)間單位的信號(hào)。 s′STABLE(t):在t個(gè)時(shí)間單位內(nèi),如果沒(méi)有時(shí)間發(fā)生,返回TRUE:否則返回FALSE。 s′QUIET(t):如果該信號(hào)在t個(gè)時(shí)間單位內(nèi)沒(méi)有發(fā)生變化,返回TRUE:否則返回FALSE。 s′TRANSACTION:建立一個(gè)BIT類型的信號(hào),當(dāng)s每次改變時(shí),該BIT信號(hào)翻轉(zhuǎn)。 s′EVENT:若在當(dāng)前模擬周期內(nèi),該信號(hào)發(fā)生了某個(gè)事件(信號(hào)值變化),返回TRUE:否則返回FALSE。事件(EVENT)要求信號(hào)值發(fā)生變化。 s′ACTIVE:若在當(dāng)前模擬周期內(nèi)該信號(hào)發(fā)生事件處理,返回TRUE:否則返回FALSE。信號(hào)的活躍(ACTIVE)指信號(hào)值的任何變化。 s′LAST_EVENT:該信號(hào)前一個(gè)事件發(fā)生到現(xiàn)在所經(jīng)過(guò)的時(shí)間。 s′LAST_VALUE:該信號(hào)在最近一個(gè)事件發(fā)生以前的值。 s′LAST_ACTIVE;從前一個(gè)事件處理到現(xiàn)在所經(jīng)過(guò)的時(shí)間。 例如: 表示一個(gè)上升沿時(shí)鐘clk: clk′EVENT AND clk=′1′; ——一種方法 NOT clk′STABLE AND clk=′1′; ——另—種方法 表示一個(gè)下降沿時(shí)鐘clk: clk′EVENT AND clk=′0′; 2.2.4. VHDL 運(yùn) 算 符 VHDL 為 構(gòu) 造 計(jì) 算 數(shù) 值 的 表 達(dá) 式 提 供 了 許 多 預(yù) 定 義 運(yùn) 算 符。 預(yù) 定 義 運(yùn) 算 符 可 分 四 種 類 型: 算 術(shù) 運(yùn) 算 符、 關(guān) 系 運(yùn) 算 符、 邏 輯 運(yùn) 算 符 與 連 接 運(yùn) 算 符。 分 組 算 符 運(yùn) 算 二 元 運(yùn) 算 符 + - * / mod rem ** 加 減 乘 除 求 模 求 余 乘 方 一 元 運(yùn) 算 符 + - abs 正 號(hào) 負(fù) 號(hào) 求 絕 對(duì) 值 關(guān) 系 運(yùn) 算 符 = /= < > <= >= 相 等 不 等 小 于 大 于 小 于 等 于 * 大 于 等 于 二 元 邏 輯 運(yùn) 算 and or nand nor xor 邏 輯 與 邏 輯 或 與 非 或 非 異 或 一 元 邏 輯 運(yùn) 算 not 求 補(bǔ) 連 接 & 連 接 ** 注:(1) 其 中 ‘<=’ 操 作 符 也 用 于 表 示 賦 值 操 作; (2) 連接運(yùn)算符&用于位的連接。用于一維數(shù)組時(shí),右邊的內(nèi)容接在左邊之后形成一個(gè)新的數(shù)組。例如:a 和 b 都是具有兩位長(zhǎng)度的位矢量,用連接符號(hào)連接后 (y <= a & b;),y(3) = a(1), y(0)= b(0)。 2.3 VHDL語(yǔ)句結(jié)構(gòu)分類 VHDL的程序結(jié)構(gòu)由三部分構(gòu)成:庫(kù)、實(shí)體說(shuō)明和結(jié)構(gòu)定義。 2.3.1. 庫(kù) (LIBRARY) 庫(kù) 是 專 門(mén) 存 放 預(yù) 編 譯 程 序 包 (package) 的 地 方, 這 樣 它 們 就 可 以 在 其 它 設(shè) 計(jì) 中 被 調(diào) 用。 最常用的資源庫(kù)為IEEE庫(kù),包含有IEEE標(biāo)準(zhǔn)的程序包,其中std_logic_1164是重要的程序包,大部分基于數(shù)字系統(tǒng)的程序包均以此程序包中所設(shè)定的標(biāo)準(zhǔn)為基礎(chǔ)。 一般使用程序包中的數(shù)據(jù)類或子程序時(shí),需要首先聲名程序包所在的庫(kù)(使用LIBERARY語(yǔ)句)和程序包的名稱(使用USE語(yǔ)句, USE 語(yǔ) 句 后 跟 保 留 字 ALL, 表 示 使 用 庫(kù)/ 程 序 包 中 的 所 有 定 義。) 例 庫(kù)內(nèi)資源使用舉例 LIBRARY ieee; -- IEEE 標(biāo) 準(zhǔn) 庫(kù) 的 標(biāo) 志 名 USE ieee.std_logic_1164.ALL; -- 程 序 包 名 USE ieee.std_logic_unsigned.ALL; 前兩條語(yǔ)句表示打開(kāi)IEEE標(biāo)準(zhǔn)庫(kù)中的std_logic_1164程序包中的所有資源?!癷eee.std_logic_unsigned” 庫(kù) 允 許 對(duì) “std_logic” 類 型 的 信 號(hào) 使 用 某 些 運(yùn) 算 符。 VHDL語(yǔ)言描述的對(duì)象稱為實(shí)體(ENTITY),實(shí)體可以代表如CPU那樣的復(fù)雜電路,也可以代表一塊電路板、一個(gè)芯片或一個(gè)門(mén)電路。一個(gè)基本設(shè)計(jì)實(shí)體(Design Entity)由實(shí)體說(shuō)明(Entity Declaration )和結(jié)構(gòu)體 (Architecture Body)兩部分構(gòu)成。實(shí)體說(shuō)明部分規(guī)定了設(shè)計(jì)單元的公共信息(輸入輸出端口信號(hào)或引腳),而結(jié)構(gòu)體部分定義了設(shè)計(jì)單元具體的內(nèi)部特性。 2.3.2 實(shí)體說(shuō) 明(entity) 實(shí)體是設(shè)計(jì)中最基本的模塊,用來(lái)定義一個(gè)IC引腳規(guī)格及基本參數(shù)。其結(jié)構(gòu)如下: ENTITY 實(shí)體名 IS [類屬參數(shù)說(shuō)明]; [端口說(shuō)明]; END 實(shí)體名; 實(shí) 體的 通 信 點(diǎn) 是 端 口 (PORT) ,端口說(shuō)明是對(duì)基本設(shè)計(jì)實(shí)體單元與外部接口的描述,一般書(shū)寫(xiě)格式為: PORT ( 端口名,端口名,…:模式 數(shù)據(jù)類型名; 端口名,端口名,…:模式 數(shù)據(jù)類型名; … 端口名,端口名,…:模式 數(shù)據(jù)類型名; ); 每 個(gè) 端 口 必 須 定 義 : ? 信 號(hào) 名: 端 口 信 號(hào) 名 在 實(shí) 體 中 必 須 是 唯 一 的 ? 屬 性: 它 包 括 2 模 式 (MODE): 決 定 信 號(hào) 的 方 向; 2 類 型 (TYPE): 端 口 所 采 用 的 數(shù) 據(jù) 類 型。 2 端 口 模 式 (MODE) 有 以 下 幾 種 類 型: ü IN 信 號(hào) 進(jìn) 入 實(shí) 體 但 并 不 輸 出 ü OUT 信 號(hào) 輸 出 到 實(shí) 體 外 部,但 不 會(huì) 在 內(nèi) 部 反 饋 使 用 ü INOUT 信 號(hào) 是 雙 向 的 (既 可 以 進(jìn) 入 實(shí) 體,也 可 以 離 開(kāi) 實(shí) 體) ü BUFFER 信 號(hào) 輸 出 到 實(shí) 體 外 部, 但 同 時(shí) 也 在 實(shí) 體 內(nèi) 部 反 饋 VHDL語(yǔ)言有10種數(shù)據(jù)類型,在邏輯電路設(shè)計(jì)中可以用std_logic說(shuō)明的位邏輯數(shù)據(jù)bit,也可以使用 std_logic_vector 說(shuō)明的位矢量 bit_vector 。在使用時(shí),須在實(shí)體說(shuō)明之前增加兩條語(yǔ)句: LIBRARY IEEE; ---IEEE庫(kù) USE IEEE.STD_LOGIC_1164.ALL; ---調(diào)用其中STD_LOGIC_1164程序包中所有的資源 (.ALL) 例 實(shí)體的表述方法舉例 如 下 圖 所 示,D 是 16-bit 輸 入 總 線,CLK, Reset, 和 OE 是 輸 入 信 號(hào),Q 是 16-bit 三 態(tài) 輸 出 總 線,AD 是 16-bit 雙 向 總 線,INT 是 輸 出 信 號(hào), 但 也 在 內(nèi) 部 使 用,AS 是 三 態(tài) 輸 出 信 號(hào) 圖1. 實(shí)體my_design1的外部端口 實(shí) 體 my_design1 的VHDL 表 述 為: ENTITY my_design1 is PORT ( d: IN std_logic_vector (15 downto 0); clk,reset,oe: IN std_logic; q: OUT std_logic_vector (15 downto 0); ad: INOUT std_logic_vector (15 downto 0); int: BUFFER std_logic; as: OUT std_logic ); END my_design1; 2.3.3 結(jié) 構(gòu) 體 (Architecture) 結(jié)構(gòu)體描述了實(shí)體中具體的邏輯功能,格式如下: ARCHITECTURE 結(jié)構(gòu)體名 of 實(shí)體名 is [定義語(yǔ)句] 內(nèi)部信號(hào),常數(shù),數(shù)據(jù)類型等的定義; BEGIN [并發(fā)處理語(yǔ)句]; END 結(jié)構(gòu)體名; 注:結(jié)構(gòu)體包含的并發(fā)描述語(yǔ)句,語(yǔ)句執(zhí)行的順序與其出現(xiàn)的次序無(wú)關(guān)。 例 結(jié)構(gòu)體描述方法舉例 ENTITY logic IS PORT ( a,b : IN std_logic; w, x, y: OUT std_logic; z: OUT std_logic_vector (3 downto 0)); END logic; ARCHITECTURE behavior of logic is BEGIN y <= (a AND b); w <= (a OR b); x <= ‘1’; z <= “0101”; END behavior; 2.4 順序語(yǔ)句 ( Sequential 語(yǔ) 句 ) 順序描述語(yǔ)句按出現(xiàn)的次序順序執(zhí)行,出現(xiàn)在進(jìn)程(Process)或子程序中。VHDL中的順序語(yǔ)句有: 2.4.1 信號(hào)賦值語(yǔ)句 格式為: 信號(hào)名 <= 信號(hào)變量表達(dá)式 賦值符號(hào)兩邊信號(hào)量的類型和長(zhǎng)度應(yīng)該一致。 2.4.2 變量賦值語(yǔ)句 格式為:變量名:= 表達(dá)式; 變量賦值僅用在進(jìn)程、函數(shù)和過(guò)程中。賦值符號(hào)也可為任何對(duì)象賦初值。 Process,F(xiàn)unction,Procedure中的語(yǔ)句都是順序執(zhí)行的, 2.4.3 IF-THEN-ELSE 該語(yǔ)句根據(jù)一個(gè)或一組條件的布爾運(yùn)算而選擇某一特定的執(zhí)行通道,其格式如下: IF <條件> THEN 順序處理語(yǔ)句; ELSIF <條件> THEN 順序處理語(yǔ)句; ELSE 順序處理語(yǔ)句; END IF; 例 IF-THEN-ELSE 語(yǔ)句舉例 PROCESS (sel, a, b, c, d) BEGIN if (sel = “00”) then step <= a; elsif (sel = “01”) then step <= b; elsif (sel = “10”) then step <= c; else step <= d; end if; END PROCESS; ELSIF 允許在一個(gè)語(yǔ)句中出現(xiàn)多重條件。每一個(gè)“IF”語(yǔ)句都必須有一個(gè)對(duì)應(yīng)的“END IF” 語(yǔ)句。 2.4.4 CASE-WHEN 語(yǔ) 句 該語(yǔ)句只能在進(jìn)程中使用,格式如下: CASE 表達(dá)式 IS WHEN 條件表達(dá)式 => 順序處理語(yǔ)句; END CASE; CASE 和 IS 間的表達(dá)式取值滿足條件表達(dá)式的值時(shí),程序執(zhí)行由符號(hào)=>指定的順序處理語(yǔ)句。 例 CASE語(yǔ)句舉例 library ieee; use ieee.std_logic_1164.all; entity mux is port (a,b,c : in std_logic; output: out std_logic ); end mux; ARCHITECTURE archdesign OF mux IS SIGNAL option: std_logic_vector(0 TO 1); BEGIN decode: PROCESS (a, b, c, option) BEGIN CASE option IS WHEN "00" => output <= a; WHEN "01" => output <= b; WHEN "10" => output <= c; WHEN OTHERS => output <= '0'; END CASE; END PROCESS decode; END archdesign; 2.4.5 WAIT 語(yǔ)句 進(jìn)程(PROCESS)的執(zhí)行過(guò)程可以由WAIT等待語(yǔ)句控制,WAIT語(yǔ)句有以下4種格式: WAIT : 無(wú)限等待; WAIT ON (信號(hào)名表):當(dāng)其中任何一個(gè)信號(hào)發(fā)生變化,激活該進(jìn)程; WAIT UNTIL (條件表達(dá)式):當(dāng)條件表達(dá)式的取值為真時(shí),激活該進(jìn)程; WAIT FOR (時(shí)間表達(dá)式): 給出了進(jìn)程被掛起的最長(zhǎng)時(shí)間,一旦超過(guò)該值,則激活進(jìn)程。 2.5 并 行 (Concurrent) 語(yǔ) 句 并行語(yǔ)句位于進(jìn)程外部,語(yǔ)句不分先后,同時(shí)執(zhí)行。在此主要講述常用的 WHEN-ELSE 語(yǔ)句和 WITH-SELECT-WHEN 語(yǔ)句。 2.5.1 WHEN-ELSE 語(yǔ)句 這種條件型信號(hào)賦值語(yǔ)句根據(jù)不同的條件,將不同的值賦給信號(hào),其格式如下: 信號(hào)名 <= 表達(dá)式1 when 條件1 else 表達(dá)式2 when 條件2 else 表達(dá)式3 when 條件3 else ┅ 表達(dá)式4 when 條件4 else 表達(dá)式5 when 條件5 else 在每個(gè)表達(dá)式后都跟有“WHEN”指定的條件,滿足該條件時(shí),將表達(dá)式的只賦給信號(hào),最后一個(gè)表達(dá)式可以不跟條件,它表明當(dāng)上述條件都不滿足時(shí),將該表達(dá)式的值賦給信號(hào)。 例 用WHEN-ELSE語(yǔ)句描述四選一多路選擇器 library ieee; use ieee.std_logic_1164.all; entity mux4 is port( a,b,c,d,I,j: IN std_logic; x: OUT std_logic); end mux4; architecture archmux of mux4 is signal s : std_logic_vector (1 downto 0); begin s <= I&j; x <= a when ( s = “00” ) else b when ( s = “01” ) else c when ( s = “10” ) else d; end archmux; 2.5.2 WITH-SELECT-WHEN 語(yǔ) 句 選擇型信號(hào)賦值語(yǔ)句用于并行的信號(hào)賦值,其格式為: with 表達(dá)式 select 信號(hào)名 <= 表達(dá)式1 when 條件1 else 表達(dá)式2 when 條件2 else 表達(dá)式3 when 條件3 else ┅ 表達(dá)式n-1 when 條件n-1 else 表達(dá)式n when 條件n else 注:WITH-SELECT-WHEN 必 須 指 明 所 有 互 斥 條 件 例 WITH-WHEN-ELSE語(yǔ)句舉 例 -- 四 選 一 多 路 開(kāi) 關(guān) (mux) library ieee; use ieee.std_logic_1164.all; entity mux is port (a, b, c, d: in std_logic; s: in std_logic_vector(1 downto 0); x: out std_logic ); end mux; architecture archmux of mux is begin with s select x <= a when “00”, -- x 根 據(jù) s 的 不 同 而 賦 值 b when “01”, c when “10”, d when “11”; end archmux; 小結(jié):幾種語(yǔ)句的比較 語(yǔ)句 With-select-when When-else If-else Case-when 選擇條件 一個(gè)信號(hào)的不同值,互斥 多個(gè)信號(hào)多種組合,不必互斥 多個(gè)信號(hào)多種組合,不必互斥 一個(gè)信號(hào)的不同值,互斥 語(yǔ)句屬性 并行 并行 順序 順序 用途 編碼、譯碼、多路選擇器 優(yōu)先編碼器,地址譯碼器 優(yōu)先編碼器,地址譯碼器 編碼、譯碼、多路選擇器, 2.6 結(jié)構(gòu)體的子結(jié)構(gòu)描述 一個(gè)結(jié)構(gòu)體可以用多個(gè)子結(jié)構(gòu)組成, 有利于編程和查錯(cuò)。 VHDL語(yǔ)言可以使用3種子結(jié)構(gòu)描述語(yǔ)句,即BLOCK語(yǔ)句、PROCESS語(yǔ)句和子程序。 2.6.1 BLOCK語(yǔ)句 該語(yǔ)句組合結(jié)構(gòu)體中的并行描述語(yǔ)句,可增加并行描述語(yǔ)句及其結(jié)構(gòu)的可讀性,使結(jié)構(gòu)體層次清晰, 對(duì)程序的修改和移植非常有用. 該語(yǔ)句的結(jié)構(gòu)為: 塊結(jié)構(gòu)名: BLOCK BEGIN <并行語(yǔ)句集> … END BLOCK塊結(jié)構(gòu)名; BLOCK語(yǔ)句中描述的各個(gè)語(yǔ)句可并發(fā)執(zhí)行, 舉例如下: 例: 采用BLOCK語(yǔ)句描述二選一電路 ENTITY mux IS PORT ( d0,d1: IN BIT; Sel: IN BIT; Q: OUT BIT ); END mux; ARCHITECTURE connect OF mux IS SIGNAL tmp1, tmp2, tmp3: BIT; BEGIN cale: BLOCK BEGIN tmp1 <= d0 AND sel; tmp2 <= d1 AND ( NOT sel) ; tmp3 <= tmp1 OR tmp2; q <= tmp3; END BLOCK cale; END connect; 其中, cale:為塊結(jié)構(gòu)名, SIGNAL 為信號(hào)說(shuō)明語(yǔ)句的關(guān)鍵字. 2.6.2 進(jìn) 程 (PROCESS)語(yǔ)句 進(jìn)程 (PROCESS)用于描述順序(sequential)事件并且包含在結(jié)構(gòu)體中。順序描述語(yǔ)句按語(yǔ)句出現(xiàn)的次序順序執(zhí)行。進(jìn)程語(yǔ)句的結(jié)構(gòu)為: [ 進(jìn)程名 ]:PROCESS( 敏感信號(hào)1,敏感信號(hào)2,… ) BEGIN … END PROCESS; 進(jìn)程語(yǔ)句包括三部分 : 敏 感 表 (Sensitivity list) : 當(dāng) 敏 感 表 中 的 某 個(gè) 信 號(hào) 變 化 時(shí) 進(jìn) 程 被 激 活 進(jìn) 程 (PROCESS) : 對(duì) 行 為 的 描 述 結(jié) 束 語(yǔ) 句 (END) : 描 述 進(jìn) 程 的 結(jié) 束 進(jìn)程啟動(dòng)后,PROCESS中的語(yǔ)句將由上到下逐句執(zhí)行一遍,執(zhí)行到最后一個(gè)語(yǔ)句后,返回到開(kāi)始語(yǔ)句,等待敏感信號(hào)的出現(xiàn),因此,只要PROCESS中指定的敏感信號(hào)變化一次,該進(jìn)程就執(zhí)行一次。 注:一個(gè)結(jié)構(gòu)體可以包含多個(gè)進(jìn)程語(yǔ)句;當(dāng)進(jìn)程中使用了WAIT語(yǔ)句時(shí),進(jìn)程不允許帶有敏感信號(hào)。 例 簡(jiǎn)單的進(jìn)程實(shí)例: mux: PROCESS (a, b, s) -- 敏 感 表 BEGIN if ( s = ‘0’ ) then x <= a; else -- 定 義 一 段 進(jìn) 程 x <= b; end if; END PROCESS mux; 這 里 進(jìn) 程 mux 對(duì) 于 信 號(hào) a, b, s 敏 感 ,無(wú) 論 何 時(shí), 信 號(hào) a, b 或 s 發(fā) 生 變 化, 進(jìn) 程 中 的 語(yǔ) 句 將 被 重 新 賦 值 計(jì) 算。 2.6.3 子 程 序 在VHDL中子程序由一系列說(shuō)明和語(yǔ)句組成,可調(diào)用其他子程序,其本身也可以嵌套子程序。子 程 序 有 過(guò) 程 (PROCEDURE) 和 函 數(shù) (FUNCTION) 兩種類型。 函 數(shù) 只 能 用 以 計(jì) 算 數(shù) 值, 而 不 能 用 以 改 變 與 函 數(shù) 形 參 相 關(guān) 的 對(duì) 象 的 值。因 此,函 數(shù) 的 參 量 只 能 是 方 式 為 IN 的 信 號(hào) 與 常 量, 而 過(guò) 程 的 參 量 可 以 為 IN,OUT,INOUT 方 式。過(guò) 程 能 返 回 多 個(gè) 變 量, 函 數(shù) 只 能 有 一 個(gè) 返 回 值. 1. 過(guò)程語(yǔ)句 ( Procedure ) 結(jié)構(gòu)如下: PROCEDURE 過(guò)程名(參數(shù)1:參數(shù)2:…) IS [定義語(yǔ)句];(變量等定義) BEGIN [順序處理語(yǔ)句];(過(guò)程處理語(yǔ)句) END 過(guò)程名 注:過(guò)程中的輸入/輸出參數(shù)均應(yīng)列在緊跟過(guò)程名的括號(hào)中。 例 過(guò) 程 舉 例: ENTITY PROC IS PORT ( A: IN BIT_VECTOR (0 TO 2); M: OUT BIT_VECTOR (0 TO 2)); END PROC; ARCHITECTURE EXAMPLE OF PROC IS PROCEDURE SIMPLE ( W,X,Y: IN BIT; Z: OUT BIT ) IS BEGIN Z<=(W AND X) OR Y; END SIMPLE; PROCESS (A) BEGIN SIMPLE (A(0),A(1),A(2),M(0)); SIMPLE (A(2),A(1),A(0),M(1)); SIMPLE (A(1),A(2),A(0),M(2)); END PROCESS; END EXAMPLE; 2. 函數(shù)語(yǔ)句 ( Function ) 結(jié)構(gòu)如下: FUNCTION 函數(shù)名(參數(shù)1:參數(shù)2:…) RETURN 數(shù)據(jù)類型名 IS [定義語(yǔ)句]; BEGIN [順序處理語(yǔ)句]; RETURN [返回變量名]; END [函數(shù)名]; 注:函數(shù)語(yǔ)句括號(hào)內(nèi)的所有參數(shù)都是輸入?yún)?shù)或輸入信號(hào),函數(shù)必須以RETURN語(yǔ)句結(jié)束,并且返回一個(gè)值。 例 函 數(shù) 舉 例:-- 此 函 數(shù) 返 回 兩 數(shù) 中 的 較 小 數(shù) FUNCTION Min( x,y : INTEGER) RETURN INTEGER IS BEGIN IF x- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
32 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 計(jì)算機(jī)硬件 課程設(shè)計(jì) 指導(dǎo)書(shū)
鏈接地址:http://appdesigncorp.com/p-1599198.html