vhdl 可移植性設計_第1頁
vhdl 可移植性設計_第2頁
vhdl 可移植性設計_第3頁
vhdl 可移植性設計_第4頁
vhdl 可移植性設計_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第六章VHDL設計共享1主要內容VHDL設計庫VHDL程序包VHDL子程序與并行過程調用26.1 VHDL設計庫6.1.1 庫的種類IEEE庫 IEEE標準的程序包主要有STD_LOGIC_1164、NUMERIC_STD和NUMERIC_BIT 3個標準程序包,尤其是STD_LOGIC_1164是最重要的數(shù)字系統(tǒng)標準程序包,大部分基于數(shù)字系統(tǒng)設計的程序包都是以此程序包中設定的標準為基礎的。STD庫 包含了兩個標準程序包STANDARD和TEXTIO程序包。WORK庫 WORK庫只是一個邏輯名,不存在WORK庫的實名。 WORK庫是用戶的VHDL設計的現(xiàn)行工作庫,用于存放用戶設計和定義的一些設

2、計單元和程序包。VITAL庫 VITAL程序包已經(jīng)成為IEEE標準,并且已經(jīng)并到IEEE庫中,庫中包含有VITAL_TIMING和VITAL_PRIMITIVES兩個時序程序包。36.1 VHDL設計庫(續(xù))6.1.2 庫的使用方法 庫使用聲明語句由關鍵詞LIBRARY引導,指明所使用的庫名;程序包使用語句由關鍵詞USE引導,指明使用庫中的哪一個程序包。 程序包使用語句USE的使用將其所說明的程序包對本設計實體可以部分開放或者全部開放,相應的也有兩種使用格式:USE 庫名.程序包名.項目名;USE 庫名.程序包名.ALL;庫和程序包正確使用的示例:LIBRARY IEEE;USE IEEE.S

3、TD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;46.2 VHDL程序包PACKAGE 程序包名- Type Declaration (optional)- Subtype Declaration (optional)- Constant Declaration (optional)- Signal Declaration (optional)- Component Declaration (optional)- Subprogram Declaration (optional)END 程序包名;PACKAGE BODY 程序包名 IS -

4、Type Declaration (optional)- Subtype Declaration (optional)- Constant Declaration (optional)- Function Declaration (optional)- Procedure Declaration (optional)- Function Body (optional)- Procedure Body (optional)END 程序包名; 程序包的結構中少要包含數(shù)據(jù)類型聲明、子類型聲明、常數(shù)聲明、信號聲明、元件聲明、子程序聲明其中的一種。 程序包結構中,程序包體并非總是必須的,程序包首可以獨立

5、定義和使用。但是,當程序包首中作了子程序(函數(shù)和過程)或部件等聲明后,程序包體是必須的。 程序包的結構由程序包的說明部分,即程序包首,和程序包的具體內容,即程序包體,兩部分組成。一個完整的程序包中,程序包首和程序包體是同一個名字。56.2 VHDL程序包(續(xù)1) LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.NUMERIC_STD.ALL;PACKAGE my_pkg IS -程序包首聲明TYPE byte IS INTEGER RANGE 0 TO 255;SUBTYPE helf_byte IS byte RANGE 0 TO 15;C

6、ONSTANT byte_max: byte:= 255;FUNCTION min (left, right: INTEGER) RETURN INTEGER;COMPONENT signed_adder -假定實體和結構體在WORK庫中GENERIC(data_width : NATURAL := 8);PORT(a : IN SIGNED(data_width-1) DOWNTO 0);b : IN SIGNED(data_width-1) DOWNTO 0);result : OUT SIGNED (data_width-1) DOWNTO 0);END COMPONENT;END my

7、_pkg;PACKAGE BODY my_pkg IS -程序包體聲明FUNCTION min (left, right: INTEGER) RETURN INTEGER ISBEGINIF left right THEN RETURN left;ELSE RETURN right;END IF;END min;END my_pkg;例6.1 程序包定義示例。66.2 VHDL程序包(續(xù)2)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE seg7 ISTYPE bcd IS INTEGER RANGE 0 TO 9;SUBTYPE segmen

8、ts IS STD_LOGIC_VECTOR(0 TO 6);END seg7;USE WORK.seg7.ALL;ENTITY bcd_to_segments ISPORT(input: IN bcd;drive: OUT segments);END bcd_to_segments;例6.2 在設計實體前定義并立即使用的程序包示例。76.2 VHDL程序包(續(xù)3)ARCHITECTURE bev OF bcd_to_segments ISBEGIN WITH input SELECTdrive b THENRETURN a; -使用了返回語句ELSE RETURN b;END IF;END

9、FUNCTION C;END pack_exam;例6.3 程序包中定義函數(shù)的示例。106.3.1 VHDL函數(shù)(續(xù)2)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.pack_exam.ALL;ENTITY func_exam IS PORT(data1, data2: IN STD_LOGIC_VECTOR(3 DOWNTO 0); data3, data4: IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1, out2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END func_exa

10、m;ARCHITECTURE behavioral OF func_exam ISBEGIN out1 = max( data1, data2 );PROCESS(data3, data4)BEGIN out2 = max( data3, data4 );END PROCESS;END behavioral;例6.4 函數(shù)調用的應用示例。116.3.1 VHDL函數(shù)(續(xù)3)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.pack_exam.ALL;ENTITY func_exam IS PORT(data1, data2: IN STD_LO

11、GIC_VECTOR(3 DOWNTO 0); data3, data4: IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1, out2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END func_exam;ARCHITECTURE behavioral OF func_exam ISBEGIN out1 = max( data1, data2 );PROCESS(data3, data4)BEGIN out2 = max( data3, data4 );END PROCESS;END behavioral;例6.4 函數(shù)調用的應用示例。12

12、6.3.2 VHDL重載函數(shù)PACKAGE STD_LOGIC_UNSIGNED ISFUNCTION +(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR)RETURN STD_LOGIC_VECTOR;PACKAGE BODY STD_LOGIC_UNSIGNED ISFUNCTION +(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR IS CONSTANT length: INTEGER := maximum(Llength, Rlength); VARIABLE res

13、ult : STD_LOGIC_VECTOR (LENGTH-1 DOWNTO 0); BEGIN result := UNSIGNED(L) + UNSIGNED(R); RETURN STD_LOGIC_VECTOR(result); END; VHDL中,可以對已經(jīng)使用過的函數(shù)(表現(xiàn)形式當然是函數(shù)名),進行多次重新定義,這樣的函數(shù)被稱之為重載函數(shù)(Overloaded Function)。例6.5 運算符重載示例。136.3.3 VHDL過程 過程與函數(shù)一樣,都是VHDL中的子程序,也分為過程首和過程體,分別放置在程序包首和程序包體中供VHDL程序共享。過程是一種語句結構而函數(shù)是表達式的

14、一部分;過程可以單獨存在,而函數(shù)只是作為語句的一部分;過程有輸入?yún)?shù)、輸出參數(shù)和雙向參數(shù),而函數(shù)入口處的所有參數(shù)都是輸入?yún)?shù);過程通過調用可以從其端口界面獲得多個返回值,而函數(shù)調用后只能返回一個值。146.3.3 VHDL過程(續(xù)1)1. 過程首 PROCEDURE 過程名 ( 參數(shù)表 );2.過程體PROCEDURE 過程名 ( 參數(shù)表 ) IS說明部分BEGIN順序語句END PROCEDURE 過程名; 進程或結構體中不必定義過程首,可直接定義過程體并使用。如: PROCEDURE produ1 ( VARIABLE a, b: INOUT STD_LOGIC );3. 過程的調用過程名

15、 ( 參數(shù)表 ); 156.3.3 VHDL過程(續(xù)2)例6.6 過程體的聲明示例。PROCEDURE count_zeros (A: IN BIT_VECTOR; SIGNAL Q: OUT INTEGER) ISVARIABLE zeros : INTEGER;BEGINzeros := 0;FOR i IN ARANGE LOOPIF A(i) = 0 THENzeros := zeros +1;END IF;END LOOP;Q = zeros;END count_zeros;166.3.3 VHDL過程(續(xù)3)例6.7 過程定義和調用的示例。LIBRARY IEEE;USE IEEE

16、.STD_LOGIC_1164.ALL;PACKAGE pkg ISPROCEDURE nand_4 (SIGNAL s1, s2, s3, s4: IN STD_LOGIC;SIGNAL y : OUT STD_LOGIC);END pkg;PACKAGE BODY pkg ISPROCEDURE nand_4 (SIGNAL s1, s2, s3, s4: IN STD_LOGIC;SIGNAL y : OUT STD_LOGIC) ISBEGINy = NOT( s1 AND s2 AND s3 AND s4 );RETURN;END nand_4;END pkg;176.3.3 VHD

17、L過程(續(xù)4)例6.7 過程定義和調用的示例。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.pkg.ALL;ENTITY nand_8 ISPORT( a1, a2, a3, a4: IN STD_LOGIC; a5, a6, a7, a8: IN STD_LOGIC; f : OUT STD_LOGIC);END;ARCHITECTURE data_flow OF nand_8 ISSIGNAL middle1, middle2: STD_LOGIC;BEGINnand_4( a1, a2, a3, a4, middle1); -并行過程

18、調用nand_4( a5, a6, a7, a8, middle2); -并行過程調用f = middle1 OR middle2;END data_flow;186.3.3 VHDL過程(續(xù)5)例6.7 過程定義和調用的示例。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.pkg.ALL;ENTITY nand_8 ISPORT( a1, a2, a3, a4: IN STD_LOGIC; a5, a6, a7, a8: IN STD_LOGIC; f : OUT STD_LOGIC);END;ARCHITECTURE data_flow OF nand_8 ISSIGNAL middle1, middle2: STD_LOGIC;BEGINnand_4( a1, a2, a3, a4, middle1); -并行過程調用nand_4( a5, a6, a7, a8, middle2); -并行過程調用f = middle1 OR middle2;END data_flow;196.3.3 VHDL過程重載 與函數(shù)重載一樣,兩個或兩個以上具有相同的過程名但參數(shù)數(shù)量及數(shù)據(jù)類型互不相同的過程稱為重載過程,重載過程也是靠參量類型來辨別究竟調用哪一個過程。例

溫馨提示

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

評論

0/150

提交評論