歡迎來到裝配圖網! | 幫助中心 裝配圖網zhuangpeitu.com!
裝配圖網
ImageVerifierCode 換一換
首頁 裝配圖網 > 資源分類 > DOC文檔下載  

計算機硬件課程設計指導書.doc

  • 資源ID:1599198       資源大?。?span id="olwh3ub" class="font-tahoma">283KB        全文頁數:34頁
  • 資源格式: DOC        下載積分:32積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要32積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

計算機硬件課程設計指導書.doc

第一章 可編程集成電路基礎1.1 概述1.2 在系統(tǒng)可編程邏輯器件的結構 1.2.1 ispLSI1016 1.2.2 編程接口和編程 第二章 硬件描述語言VHDL基礎 2.1 概述2.2 VHDL語言語法規(guī)則2.2.1 標識符 ( Identifiers) 2.2.2 數據對象 ( Data Objects )2.2.3 數據類型 ( Data Types )2.2.4 運算符 ( Operators)2.3 VHDL的語句結構分類2.3.1 庫2.3.2 實體說明2.3.3 結構定義2.4 順序語句2.4.1 信號賦值語句2.4.2 變量賦值語句2.4.3 if_then_else語句2.4.4 case_when語句2.5 并行語句2.5.1 when_else語句2.5.2 with_select_when語句 2.6 結構體的子結構描述2.6.1 block語句2.6.2 Proess ( 進程 ) 語句2.6.3 子程序2.6.4 程序包 2.7 基本邏輯電路設計第三章 ispDesignEXPERT 開發(fā)系統(tǒng)第四章 設計示例第二章 硬件描述語言VHDL基礎2.1 概 述隨著集成電路的設計規(guī)模的增大和復雜程度日益增高,傳統(tǒng)的數字電路設計方法不適合設計大規(guī)模的系統(tǒng)。眾多軟件公司開發(fā)研制了具有自己特色的電路硬件描述語言(Hardware Description Language,HDL),存在著很大的差異,因此,需要一種強大的、標準化的硬件描述語言,作為可相互交流的設計環(huán)境。美國國防部在80年代初提出了VHSIC(Very High Speed Integrated Circuit)計劃,其目的是為大規(guī)模集成電路設計,建立一項新的描述方法。1981年提出了一種新的HDL,稱之為VHSIC Hardware Description Language,簡稱為VHDL,VHDL語言可描述一個數字電路的輸入、輸出以 及相互間的行為與功能,它特有的層次性設計語法結構適合大型設計項目的團隊合作,是目前最通用的硬件描述語言。這種語言有如下的諸多優(yōu)點:1. 可描述復雜的數字電路系統(tǒng);2成為國際的硬件描述語言標準,1987年被采納為IEEE1076標準3與硬件獨立,一個設計可用于不同的硬件結構,而且設計時不必了解過多的硬件細節(jié);4有豐富的軟件支持VHDL的綜合和仿真,從而能在設計階段就能發(fā)現(xiàn)設計中的Bug,縮短設計時間,降低成本;5VHDL有良好的可讀性,容易理解。2.2 VHDL語言的語法規(guī)則2.2.1VHDL標識符(Identifiers)ü 基本標識符由字母、數字和下劃線組成;ü 第一個字符必須是字母;ü 最后一個字符不能是下劃線;ü 不允許連續(xù)2個下劃線;ü 保留字(關鍵字)不能用于標識符;ü 大小寫是等效的。2.2.2 數 據 對 象 ( Data Objects )VHDL中常用的數據對象有:常量、信號和變量,常量相當于電路中的恒定電平,信號和變量相當于電路中的連線和連線上的信號值。1 常 量 (Constant)常量聲明即為一個常量名賦予一個固定值,其一般格式為:CONSTANT 常量名:數據類型:=表達式;常量可在Library、Entity、Architecture、Process 中進行定義,其有效范圍也相應限定。例如:CONSTANT w: integer := 8; - “w” 是整數類型的常數,其值為“8”2 信 號 (Signal)信號沒有方向性,是一個全局量,用于進程之間的通信,聲明電路內部的信號。在Entity中和Architecture中聲明,信號聲明語句格式為:SIGNAL 信號名:數據類型 約束條件:=表達式;例如:SIGNAL GROUND: BIT : = 0 ;符號“:=”表示直接賦值,用于指定信號的初始值。信號賦值語句的格式為: 信號名 <= 表達式 AFTER 時間表達式;其中時間表達式指定延遲時間,如果省略AFTER語句,則延遲時間取默認值。3 變 量 (Variable)變量屬于臨時數據,沒有物理意義,只能在Process和Function中定義,并只在其內部有效。其聲明格式為:variable 變量名: 數據類型 約束條件:=表達式;例如:variable count: INTEGER RANCE 0 TO 255:=10;變量count為整數類型,RANCE 0 TO 255是對類型INTEGER的附加限制,該語句一旦執(zhí)行,立即將初始值10賦予變量。2.2.3數據類型VHDL的數據類型定義非常嚴格,規(guī)定每一個對象都必須有明確的數據類型。不同類型之間的數據不可直接代入,連接不同數據類型的信號為非法。賦予一個值的對象只有一個類型,且只能具有該類型的值。1. 定義數據類型在std庫中有一個標準程序包,其中定義了一些預定義的數據類型。用VHDL編寫程序時,該庫自動打開,所以使用這些數據類型時,不需要再次打開。常用的預定義的數據類型如下:(1)整數(Integer) VHDL的算術運算符均定義范圍為32位的整數。描述算術運算時,一般使用整數類型,但是使用整數很難表示未知或三態(tài)等邏輯狀態(tài)。 (2)實數(Real) 實數取值范圍為-1.0E38+1.0E38。由于處理實數的運算需要大量資源,故一般可編程邏輯器件開發(fā)系統(tǒng)中的VHDL綜合器不支持這種數據類型。 (3)位(Bit)和位矢量(Bit_Vector) 位和位矢量類型的通用性強。位只能取值0或1,其值放在單引號中;位矢量為雙引號括的一組位數據,一般表示總線的狀態(tài),如: “001100” X”00cce2000” X表示是十六進制。 (4)布爾(Boolean) 布爾數據類型經常用于邏輯關系運算中,其取值只有TRUE或FALSE。 (5)字符(CHARACTER) 當對一個變量執(zhí)行字符賦值操作時,應先聲明后賦值。例如將字符A賦給變量C,聲明如下: variable C: character;然后執(zhí)行賦值操作: C:= A; 其中字符A放在單引號中。 (6)時間(Time)時間是一個物理量,其格式如下: TYPE 數據類型名 Is 范圍; UNITS 基本單位; 單位; END UNITS; 例如,在STD庫中的STANDARD程序包中,如下定義時間類型: 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預定義的標準邏輯數據類型VHDL的標準數據“BIT”類型是一個不可描述高阻狀態(tài)的邏輯數據類型,定義為該類型的數據對象的取值是0或1。在IEEE庫中的程序包STD_LOGIC_1164中定義了包含高阻(Z)和不定(X)狀態(tài)的標準邏輯位和邏輯矢量數據 STD_LOGIC和STD_ LOGIC_VECTOR類型。使用這類數據類型時,必須寫出庫聲明語句和使用程序包集合的聲明語句。3. 用戶定義的數據類型 VHDL允許用戶根據芯片的資源和實際的需要定義數據類型。用戶定義的數據類型格式:TYPE 數據類型名 數據類型名 數據類型定義;可以由用戶定義的數據類型有:枚舉(Enumerated)類型、整數(Integer)類型、實數(Real)類型、數組(Array)類型、存取(Access)類型、文件(File)類型、記錄(Record)類型及時間(Time)類型(物理類型),常用類型有:(1)枚舉類型枚舉類型是一種特殊的數據類型,用符號表示一組實際的二進制數。這種類型適合表示有限狀態(tài)機的狀態(tài),有助于改善復雜電路的可讀性。定義格式:TYPE 數據類型名 IS (元素,元素,);例如:TYPE states IS (stO, stl, st2, st3);在綜合過程中,通常自動編碼枚舉類型。例如將上述語句中的stO編碼為0,以后的元素依次加1。(2)整數(Integer)和實數(Real)類型整數和實數類型在標準程序包中已定義。在實際應用中,由于數據類型的取值范圍比較小,故應重新定義。特別要注意限定取值范圍,以提高芯片的利用率。例如,有很多開始學習編寫VHDL程序的初學者,往往忘記添加定義整數類型名的約束范圍,編寫程序后,綜合也可通過。但是將該程序轉換為具體的在系統(tǒng)可編程邏輯芯片的熔絲圖文件時,開發(fā)可編程邏輯器件的系統(tǒng)卻顯示該芯片的資源不夠,即使一個使用非常少的邏輯門和寄存器即可完成的簡單程序也不能夠滿足要求。這是因為不加約束范圍時,EDA開發(fā)軟件將該整數類型名的整數范圍定義為默認范圍,占用芯片內部的資源非常多。定義格式:TYPE 數據類型名 Is 數據類型定義 約束范圍;例如:TYPE digit IS INTEGER RANGE 0 TO 9;TYPE digit IS REAL RANGE -10 TO 10;(3)數組(Array)類型數組是相同類型數據集合形成的一個新的數據類型,可以是一維或多維數組,定義格式為:TYPE 數據類型名 IS ARRAY 范圍 OF 原數據名例如:TYPE word IS ARRAY (15 DOWNTO 0) OF BIT;其中15指定數組元素的個數為16個,DOWNTO指定下標以降序變化。例如:TYPE matrix IS ARRAY (1 TO 8,1 TO 8) OF BIT;TO指定下標以升序變化,按低到高的順序排列8個元素。為了使整個設計保持一致的設計風格,建議采用關鍵字“DOWNTO”說明數組或向量。向量最高位的下標值最大,并且處于向量的最左邊。(4)記錄(Record)類型記錄將不同類型的數據和數據名組織在一起形成一個新的數據類型,其定義格式為:TYPE 數據類型名 IS RECORD元素名:數據類型名;元素名:數據類型名;END RECORD;例如:TYPE bank IS RECORDaddr0:STD_ LOGIC_VECTOR(7 DOWNTO 0);r0: INTEGER;END RECORD; 4. 屬性 VHDL中可以具有屬性(attribute)的項(items)如下: (1)類型和子類型。 (2)過程和函數。 (3)信號、變量和常量。 (4)實體、結構體、配置和程序包。 (5)元件。(6)語句標號。 屬性是上述項目的特征,通過預定義屬性描述語句可以得到預定義項目的有關值、功能、類型和范圍。預定義的屬性類型有:類型(TYPES)、數組、信號和字符串。定義屬性的一般格式為:項目名屬性表示符;(1)類型(TYPES)的屬性常用類型屬性有: TLEFT:T中最左端的值。 TRIGHT:T中最右端的值。 THIGH:T中的最大值。 TLOW:T中的最小值。 TPOS(n):參數n在T中位置序號。 TVAL(n)T中位置為n的值。 TSUCC(n):得到的值為TVAL(TPOS(n)+1)。 TPRED(n):得到的值為TVAL(TPOS(n)-1)。 TLEFTOF(n):得到靠近輸入n的左邊的值。 TRIGHTOF(n):得到靠近輸入n的右邊的值。 例如: TYPE number IS INTEGER 0 TO 9;i :=numberLEFT; -i=0i :=numberRIGHT; -i=9 i :=numberHIGH; -i=9 i :=numberLOW; -i=0 (2)數組屬性 常用的數組屬性有: ALEFT(n):索引號n的區(qū)間的左端位置序號。 ARIGHT(n):索引號n的區(qū)間的右端位置序號。 AfHIGH(n):索引號n的區(qū)間的高端位置序號。 ALOW(n):索引號n的區(qū)間的低端位置序號。 ALENGTH(n):索引號n的區(qū)間的長度值。 ARANGE(n):索引號n的區(qū)間的范圍。 例如: TYPE bitll IS ARRAY (10 TO 20) OF BIT;VARIABLE len: INTEGER; len:=bitllLENGTH; -len=11(3)信號屬性 sDELAYED(t):延時t個時間單位的信號。sSTABLE(t):在t個時間單位內,如果沒有時間發(fā)生,返回TRUE:否則返回FALSE。sQUIET(t):如果該信號在t個時間單位內沒有發(fā)生變化,返回TRUE:否則返回FALSE。sTRANSACTION:建立一個BIT類型的信號,當s每次改變時,該BIT信號翻轉。sEVENT:若在當前模擬周期內,該信號發(fā)生了某個事件(信號值變化),返回TRUE:否則返回FALSE。事件(EVENT)要求信號值發(fā)生變化。sACTIVE:若在當前模擬周期內該信號發(fā)生事件處理,返回TRUE:否則返回FALSE。信號的活躍(ACTIVE)指信號值的任何變化。sLAST_EVENT:該信號前一個事件發(fā)生到現(xiàn)在所經過的時間。sLAST_VALUE:該信號在最近一個事件發(fā)生以前的值。sLAST_ACTIVE;從前一個事件處理到現(xiàn)在所經過的時間。例如: 表示一個上升沿時鐘clk:clkEVENT AND clk=1; 一種方法NOT clkSTABLE AND clk=1; 另種方法 表示一個下降沿時鐘clk:clkEVENT AND clk=0;2.2.4. VHDL 運 算 符VHDL 為 構 造 計 算 數 值 的 表 達 式 提 供 了 許 多 預 定 義 運 算 符。 預 定 義 運 算 符 可 分 四 種 類 型: 算 術 運 算 符、 關 系 運 算 符、 邏 輯 運 算 符 與 連 接 運 算 符。 分 組 算 符 運 算 二 元 運 算 符+-*/modrem* 加 減 乘 除 求 模 求 余 乘 方 一 元 運 算 符+-abs 正 號 負 號 求 絕 對 值 關 系 運 算 符=/=<><=>= 相 等 不 等 小 于 大 于 小 于 等 于 * 大 于 等 于 二 元 邏 輯 運 算andornandnorxor 邏 輯 與 邏 輯 或 與 非 或 非 異 或 一 元 邏 輯 運 算not 求 補 連 接& 連 接 *注:(1) 其 中 <= 操 作 符 也 用 于 表 示 賦 值 操 作;(2) 連接運算符&用于位的連接。用于一維數組時,右邊的內容接在左邊之后形成一個新的數組。例如:a 和 b 都是具有兩位長度的位矢量,用連接符號連接后 (y <= a & b;),y(3) = a(1), y(0)= b(0)。2.3 VHDL語句結構分類VHDL的程序結構由三部分構成:庫、實體說明和結構定義。2.3.1. 庫 (LIBRARY)庫 是 專 門 存 放 預 編 譯 程 序 包 (package) 的 地 方, 這 樣 它 們 就 可 以 在 其 它 設 計 中 被 調 用。最常用的資源庫為IEEE庫,包含有IEEE標準的程序包,其中std_logic_1164是重要的程序包,大部分基于數字系統(tǒng)的程序包均以此程序包中所設定的標準為基礎。一般使用程序包中的數據類或子程序時,需要首先聲名程序包所在的庫(使用LIBERARY語句)和程序包的名稱(使用USE語句, USE 語 句 后 跟 保 留 字 ALL, 表 示 使 用 庫/ 程 序 包 中 的 所 有 定 義。)例 庫內資源使用舉例LIBRARY ieee; - IEEE 標 準 庫 的 標 志 名USE ieee.std_logic_1164.ALL; - 程 序 包 名USE ieee.std_logic_unsigned.ALL;前兩條語句表示打開IEEE標準庫中的std_logic_1164程序包中的所有資源?!癷eee.std_logic_unsigned” 庫 允 許 對 “std_logic” 類 型 的 信 號 使 用 某 些 運 算 符。VHDL語言描述的對象稱為實體(ENTITY),實體可以代表如CPU那樣的復雜電路,也可以代表一塊電路板、一個芯片或一個門電路。一個基本設計實體(Design Entity)由實體說明(Entity Declaration )和結構體 (Architecture Body)兩部分構成。實體說明部分規(guī)定了設計單元的公共信息(輸入輸出端口信號或引腳),而結構體部分定義了設計單元具體的內部特性。2.3.2 實體說 明(entity)實體是設計中最基本的模塊,用來定義一個IC引腳規(guī)格及基本參數。其結構如下:ENTITY實體名 IS類屬參數說明;端口說明;END實體名;實 體的 通 信 點 是 端 口 (PORT) ,端口說明是對基本設計實體單元與外部接口的描述,一般書寫格式為:PORT ( 端口名,端口名,:模式 數據類型名;端口名,端口名,:模式 數據類型名;端口名,端口名,:模式 數據類型名;);每 個 端 口 必 須 定 義 :Ø 信 號 名: 端 口 信 號 名 在 實 體 中 必 須 是 唯 一 的Ø 屬 性: 它 包 括² 模 式 (MODE): 決 定 信 號 的 方 向;² 類 型 (TYPE): 端 口 所 采 用 的 數 據 類 型。² 端 口 模 式 (MODE) 有 以 下 幾 種 類 型:ü IN 信 號 進 入 實 體 但 并 不 輸 出ü OUT 信 號 輸 出 到 實 體 外 部,但 不 會 在 內 部 反 饋 使 用ü INOUT 信 號 是 雙 向 的 (既 可 以 進 入 實 體,也 可 以 離 開 實 體)ü BUFFER 信 號 輸 出 到 實 體 外 部, 但 同 時 也 在 實 體 內 部 反 饋 VHDL語言有10種數據類型,在邏輯電路設計中可以用std_logic說明的位邏輯數據bit,也可以使用 std_logic_vector 說明的位矢量 bit_vector 。在使用時,須在實體說明之前增加兩條語句:LIBRARYIEEE;-IEEE庫USEIEEE.STD_LOGIC_1164.ALL; -調用其中STD_LOGIC_1164程序包中所有的資源 (.ALL)例 實體的表述方法舉例如 下 圖 所 示,D 是 16-bit 輸 入 總 線,CLK, Reset, 和 OE 是 輸 入 信 號,Q 是 16-bit 三 態(tài) 輸 出 總 線,AD 是 16-bit 雙 向 總 線,INT 是 輸 出 信 號, 但 也 在 內 部 使 用,AS 是 三 態(tài) 輸 出 信 號 圖1. 實體my_design1的外部端口實 體 my_design1 的VHDL 表 述 為:ENTITY my_design1 isPORT ( 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 結 構 體 (Architecture)結構體描述了實體中具體的邏輯功能,格式如下:ARCHITECTURE 結構體名 of 實體名 is定義語句 內部信號,常數,數據類型等的定義;BEGIN并發(fā)處理語句;END 結構體名;注:結構體包含的并發(fā)描述語句,語句執(zhí)行的順序與其出現(xiàn)的次序無關。例 結構體描述方法舉例 ENTITY logic ISPORT ( 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 isBEGINy <= (a AND b);w <= (a OR b);x <= 1;z <= “0101”;END behavior;2.4 順序語句 ( Sequential 語 句 )順序描述語句按出現(xiàn)的次序順序執(zhí)行,出現(xiàn)在進程(Process)或子程序中。VHDL中的順序語句有:2.4.1 信號賦值語句格式為: 信號名 <= 信號變量表達式賦值符號兩邊信號量的類型和長度應該一致。2.4.2 變量賦值語句格式為:變量名:= 表達式;變量賦值僅用在進程、函數和過程中。賦值符號也可為任何對象賦初值。Process,F(xiàn)unction,Procedure中的語句都是順序執(zhí)行的,2.4.3 IF-THEN-ELSE該語句根據一個或一組條件的布爾運算而選擇某一特定的執(zhí)行通道,其格式如下:IF <條件>THEN順序處理語句;ELSIF<條件> THEN順序處理語句;ELSE順序處理語句;END IF;例 IF-THEN-ELSE 語句舉例 PROCESS (sel, a, b, c, d)BEGINif (sel = “00”) then step <= a;elsif (sel = “01”) thenstep <= b;elsif (sel = “10”) thenstep <= c;else step <= d;end if;END PROCESS;ELSIF 允許在一個語句中出現(xiàn)多重條件。每一個“IF”語句都必須有一個對應的“END IF” 語句。2.4.4 CASE-WHEN 語 句該語句只能在進程中使用,格式如下:CASE表達式 IS WHEN 條件表達式 => 順序處理語句;END CASE;CASE 和 IS 間的表達式取值滿足條件表達式的值時,程序執(zhí)行由符號=>指定的順序處理語句。例 CASE語句舉例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 ISSIGNAL option: std_logic_vector(0 TO 1);BEGINdecode: PROCESS (a, b, c, option)BEGINCASE option ISWHEN "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 語句進程(PROCESS)的執(zhí)行過程可以由WAIT等待語句控制,WAIT語句有以下4種格式:WAIT : 無限等待;WAIT ON (信號名表):當其中任何一個信號發(fā)生變化,激活該進程;WAIT UNTIL (條件表達式):當條件表達式的取值為真時,激活該進程;WAIT FOR (時間表達式): 給出了進程被掛起的最長時間,一旦超過該值,則激活進程。2.5 并 行 (Concurrent) 語 句并行語句位于進程外部,語句不分先后,同時執(zhí)行。在此主要講述常用的 WHEN-ELSE 語句和 WITH-SELECT-WHEN 語句。2.5.1 WHEN-ELSE 語句這種條件型信號賦值語句根據不同的條件,將不同的值賦給信號,其格式如下:信號名<=表達式1when 條件1 else 表達式2when 條件2 else 表達式3when 條件3 else 表達式4when 條件4 else 表達式5when 條件5 else 在每個表達式后都跟有“WHEN”指定的條件,滿足該條件時,將表達式的只賦給信號,最后一個表達式可以不跟條件,它表明當上述條件都不滿足時,將該表達式的值賦給信號。例 用WHEN-ELSE語句描述四選一多路選擇器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 issignal s : std_logic_vector (1 downto 0);begins <= 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 語 句選擇型信號賦值語句用于并行的信號賦值,其格式為:with 表達式 select 信號名<=表達式1when 條件1 else 表達式2when 條件2 else 表達式3when 條件3 else 表達式n-1when 條件n-1 else 表達式nwhen 條件n else 注:WITH-SELECT-WHEN 必 須 指 明 所 有 互 斥 條 件例 WITH-WHEN-ELSE語句舉 例- 四 選 一 多 路 開 關 (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 isbeginwith s select x <= a when “00”,- x 根 據 s 的 不 同 而 賦 值 b when “01”, c when “10”, d when “11”;end archmux;小結:幾種語句的比較 語句With-select-whenWhen-elseIf-elseCase-when選擇條件一個信號的不同值,互斥多個信號多種組合,不必互斥多個信號多種組合,不必互斥一個信號的不同值,互斥語句屬性并行并行順序順序用途編碼、譯碼、多路選擇器優(yōu)先編碼器,地址譯碼器優(yōu)先編碼器,地址譯碼器編碼、譯碼、多路選擇器,2.6 結構體的子結構描述一個結構體可以用多個子結構組成, 有利于編程和查錯。 VHDL語言可以使用3種子結構描述語句,即BLOCK語句、PROCESS語句和子程序。2.6.1 BLOCK語句 該語句組合結構體中的并行描述語句,可增加并行描述語句及其結構的可讀性,使結構體層次清晰, 對程序的修改和移植非常有用. 該語句的結構為:塊結構名:BLOCKBEGIN<并行語句集>END BLOCK塊結構名;BLOCK語句中描述的各個語句可并發(fā)執(zhí)行, 舉例如下:例: 采用BLOCK語句描述二選一電路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;BEGINcale:BLOCKBEGIN tmp1 <= d0 AND sel;tmp2 <= d1 AND ( NOT sel) ;tmp3 <= tmp1 OR tmp2;q <= tmp3;END BLOCK cale;END connect;其中, cale:為塊結構名, SIGNAL 為信號說明語句的關鍵字.2.6.2 進 程 (PROCESS)語句進程 (PROCESS)用于描述順序(sequential)事件并且包含在結構體中。順序描述語句按語句出現(xiàn)的次序順序執(zhí)行。進程語句的結構為: 進程名 :PROCESS( 敏感信號1,敏感信號2, )BEGINEND PROCESS;進程語句包括三部分 :敏 感 表 (Sensitivity list) :當 敏 感 表 中 的 某 個 信 號 變 化 時 進 程 被 激 活進 程 (PROCESS) :對 行 為 的 描 述結 束 語 句 (END) :描 述 進 程 的 結 束進程啟動后,PROCESS中的語句將由上到下逐句執(zhí)行一遍,執(zhí)行到最后一個語句后,返回到開始語句,等待敏感信號的出現(xiàn),因此,只要PROCESS中指定的敏感信號變化一次,該進程就執(zhí)行一次。注:一個結構體可以包含多個進程語句;當進程中使用了WAIT語句時,進程不允許帶有敏感信號。例 簡單的進程實例:mux: PROCESS (a, b, s) - 敏 感 表BEGINif ( s = 0 ) thenx <= a; else- 定 義 一 段 進 程x <= b; end if;END PROCESS mux;這 里 進 程 mux 對 于 信 號 a, b, s 敏 感 ,無 論 何 時, 信 號 a, b 或 s 發(fā) 生 變 化, 進 程 中 的 語 句 將 被 重 新 賦 值 計 算。2.6.3 子 程 序在VHDL中子程序由一系列說明和語句組成,可調用其他子程序,其本身也可以嵌套子程序。子 程 序 有 過 程 (PROCEDURE) 和 函 數 (FUNCTION) 兩種類型。 函 數 只 能 用 以 計 算 數 值, 而 不 能 用 以 改 變 與 函 數 形 參 相 關 的 對 象 的 值。因 此,函 數 的 參 量 只 能 是 方 式 為 IN 的 信 號 與 常 量, 而 過 程 的 參 量 可 以 為 IN,OUT,INOUT 方 式。過 程 能 返 回 多 個 變 量, 函 數 只 能 有 一 個 返 回 值.1. 過程語句 ( Procedure )結構如下:PROCEDURE 過程名(參數1:參數2:) IS 定義語句;(變量等定義)BEGIN順序處理語句;(過程處理語句)END 過程名注:過程中的輸入/輸出參數均應列在緊跟過程名的括號中。例 過 程 舉 例: ENTITY PROC IS PORT ( A: IN BIT_VECTOR (0 TO 2);M: OUT BIT_VECTOR (0 TO 2);END PROC;ARCHITECTURE EXAMPLE OF PROC ISPROCEDURE SIMPLE ( W,X,Y: IN BIT; Z: OUT BIT ) ISBEGIN Z<=(W AND X) OR Y;END SIMPLE;PROCESS (A)BEGINSIMPLE (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. 函數語句 ( Function )結構如下:FUNCTION 函數名(參數1:參數2:)RETURN 數據類型名 IS定義語句;BEGIN順序處理語句;RETURN 返回變量名;END 函數名;注:函數語句括號內的所有參數都是輸入參數或輸入信號,函數必須以RETURN語句結束,并且返回一個值。例 函 數 舉 例:- 此 函 數 返 回 兩 數 中 的 較 小 數FUNCTION Min( x,y : INTEGER) RETURN INTEGER ISBEGINIF x<y THENRETURN x;ELSERETURN y;END IF;END Min;2.6.4. 程 序 包 ( Package ) ( 了解 )程 序 包 ( Package )是設計中使用的子程序和公用數據類型集合,是一個可以選擇的設計單元,用于共享定義(信號、常數、數據、元件語句、函數和過程定義等)。程 序 包 分 包 頭 和 包 體 兩 部 分。 包 頭 以 保 留 字 PACKAGE 開 頭, 包 體 則 以 PACKAGE BODY 識 別。使用程序包時,用USE語句說明。程序包的結構為:PACKAGE 程序包名 IS 說明語句 ;END 程序包名;PACKAGE BODY 程序包名 IS 說明語句 ;END BODY;例 程序包舉例- 包 頭 說 明PACKAGE Logic ISTYPE Three_level_logic IS (0,1,z);CONSTANT Unknown_Value :Three_level_logic := 0;FUNCTION Invert ( input: Three_level_logic)RETURN Three_level_logic;END Logic;- 包 體 說 明PACKAGE BODY Logic IS- 下 面 是 函 數 Invert 的 子 程 序 體FUNCTION Invert ( input: Three_level_logic)RETURN Three_level_logic ISBEGINCASE input ISWHEN 0 => RETURN 1;WHEN 1 => RETURN 0;WHEN z => RETURN z;END CASE;END Invert;END Logic;2.7 用VHDL描述基本邏輯電路2.7.1 描述組合電路1. 用VHDL語言描述一個如圖所示的三態(tài)門。doutdinen圖3 三態(tài)門程序如下: LIBRARY IEEE; USE IEEESTD_LOGIC_1164.ALL; ENTITY tri_gate IS PORT(din,en : IN STD_LOGIC; Dout :OUT STD_LOGIC); END tri_gate; ARCHITECTURE example OF tri_gate IS BEGIN PROCESS (din,en) BEGIN IF en=l THEN dout <= din;ELSE dout <=Z;END IF; END PROCESS;END example; 2. 用VHDL語言描述如圖所示的電路:cabm圖4 邏輯電路 ENTITY combine IS PORT(a,b,c:IN BIT; m:OUT BIT);END combine; ARCHITECTURE example OF combine IS PROCESS(a, b, c) VARIABLE n: BIT; BEGIN IF a=l THEN n:= b;ELSE n:= C;END IF; m <= n; END PROCESS; END example;注:用進程描述組合電路時,將輸入信號a、b和c都寫到敏感列表中,保證每個輸入信號的變化均啟動該進程,引起輸出信號發(fā)生變化;否則未列入敏感列表的信號變化不啟動該進程,這意味著該進程描述的電路引入了鎖存器。2.7.2 設計時序電路1. D 型 鎖 存 器描述一個時鐘信號為clk,數據輸入信號為data,輸出信號為q的鎖存器。時鐘信號clk為高電平時,輸出信號q隨數據信號data變化而變化;為低電平時,輸出信號保持不變,電路處于鎖存狀態(tài)。程序如下:entity latch isport(data,clk:in bit;q:out bit);end latch;architecture behave Of latch iSbeginprocess(clk,data)beginif(clk= 1)thenq<=data;end if;end process;end behave;2. 上升沿觸發(fā)的D型觸發(fā)器帶有異步復位(reset,高電平有效)、異步置位(set,高電平有效)功能和上升沿觸發(fā)的D型觸發(fā)器。 程序如下: library ieee; use ieeestd_logic_1164all; entity dff is port(d,clk,reset,set:in std_logic; q:out std_logic); end dff; architecture async_set_reset of dff is BEGIN setreset:process(clk,reset,set) beginif reset= l then q<= 0;elsif set= l then q<= 1;elsif rising_edge(clk) then q<= d;end if; end process setreset; end async_set_reset;程序中rising_edge(clk)表示如果輸入信號clk的上升沿來到時,將輸入信號d賦給輸出信號q。上升沿rising_edge和下降沿fallin_edge函數包含在標準庫ieeestd_logic_1164a11中,用于描述上升沿和下降沿有效的事件。3. J_K型觸發(fā)器帶有復位(-clr,低電平有效)置位(-set,低電平有效)功能和上升沿觸發(fā)的J-K型觸發(fā)器的程序如下; LIBRARY IEEE; USE IEEESTD_LOGIC _1164ALL; ENTITY jkff ISPORT (set,clr,clk,j,k :IN STD_LOGIC;q,qb :OUT STD_LOGIC); END jkff ; ARCHITECTURE rtl OF jkff IS SIGNAL q_s, qb_s: STD_LOGIC; BEGIN PROCESS( set,clr,clk,j,k) BEGIN IF ( set =0) THEN q_s <= l; qb_s <=0;-置位; ELSIF ( clr =0) THEN q_s <= 0; qb_s <= 1;-復位; ELSIF (clk EVENT AND clk=1) THENIF (j =0) AND ( k =1) THEN q_s <= 0; qb_s <=1;ELSIF (j =1) AND ( k =0) THEN q_s <= 1; qb_s <=0;ELSIF (j=1) AND ( k=1) THEN q_s <= NOT q_s; qb_s <= NOT qb_s;END IF; END IF;q <= q_s;qb <= qb_s;END PROCESS; END rtl;4. 計數器用VHDL描述一個具有清零和計數允許功能的十進制計數器,輸入信號為clk,清零控制信號為clr(低電平有效),計數允許控制信號為en(高電平有效)。程序如下: library ieee; use ieeestd _logic_1164all; entity counter0 is port( clk,clr,en:in std_logic; count:out integer range 0 to 15); end; architecture counter0_arch of counter0 is begin process(clk,clr) variable countl;inteqer range 0 to 15; begin if(clr=0)thencountl:=0; elsif rising_edge(clk)thenif(en=l) thenif countl=9 thencountl:=0; else countl:= countl+1; end if; end if; end if;count<=countl;end process; end counter0 _arch; 5. 寄 存 器 ( Register ) 三 種 描 述 寄 存 器 的 方 法1.PROCESS (clk,d)BEGINIF (clkeve

注意事項

本文(計算機硬件課程設計指導書.doc)為本站會員(最***)主動上傳,裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。 若此文所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!