VHDL硬件描述語言簡介_第1頁
VHDL硬件描述語言簡介_第2頁
VHDL硬件描述語言簡介_第3頁
VHDL硬件描述語言簡介_第4頁
VHDL硬件描述語言簡介_第5頁
已閱讀5頁,還剩170頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第五章第五章硬件描述語言硬件描述語言VHDL簡介簡介Intro. to VHDLlVHDLVery High Speed Integrated Circuit (VHSIC) Hardware Description LanguageDeveloped by TI, IBM, Intermetrics in 1983IEEE Std 1076-1987 and 1993lVHDL is a Hardware Description Language, VHDL is a Hardware Description Language, not a programming language. not

2、 a programming language.VHDL的優點的優點n用于設計復雜的、多層次的設計。支持設計用于設計復雜的、多層次的設計。支持設計庫和設計的重復使用庫和設計的重復使用n與硬件獨立,一個設計可用于不同的硬件結與硬件獨立,一個設計可用于不同的硬件結構,而且設計時不必了解過多的硬件細節。構,而且設計時不必了解過多的硬件細節。n有豐富的軟件支持有豐富的軟件支持VHDL的綜合和仿真,從而的綜合和仿真,從而能在設計階段就能發現設計中的能在設計階段就能發現設計中的Bug,縮短設縮短設計時間,降低成本。計時間,降低成本。n更方便地更方便地向向ASIC過渡過渡nVHDL有良好的可讀性,容易理解。

3、有良好的可讀性,容易理解。VHDL與計算機語言的區別與計算機語言的區別n運行的基礎運行的基礎n計算機語言是在計算機語言是在CPURAM構建的平臺上運構建的平臺上運行行nVHDL設計的結果是由具體的邏輯、觸發器組設計的結果是由具體的邏輯、觸發器組成的數字電路成的數字電路n執行方式執行方式n計算機語言基本上以串行的方式執行計算機語言基本上以串行的方式執行nVHDL在總體上是以并行方式工作在總體上是以并行方式工作n驗證方式驗證方式n計算機語言主要關注于變量值的變化計算機語言主要關注于變量值的變化nVHDL要實現嚴格的時序邏輯關系要實現嚴格的時序邏輯關系(一)(一)VHDL語言程序的基本結語言程序的基

4、本結構構Exampleentity and_2 is port (a, b: in std_logic; Y : out std_logic); end and_2;The Entity describesthe inputs and outputsarchitecture dataflow of and_2 isbegin Y=a and b;end dataflow;The Architecture describes the boxentity nameVHDL 大小寫不敏感大小寫不敏感Library IEEE;use IEEE.std_logic_1164.all;LibraryPac

5、kageAND_2abYVHDL 庫庫 (LIBRARY)n n n 設設計計庫庫IEEE庫庫預定義庫預定義庫( (隱含打開隱含打開) )STD庫庫STANDARD(隱含說明隱含說明)TEXTIO(用用USE說明說明)WORK庫庫資資 源源 庫庫(用用LIBRARY)其它庫其它庫STD_LOGIC_1164STD_LOGIC_ARITHSTD_LOGIC_UNSIGNEDNUMERIC_STDNUMERIC_BITMATH_REALMATH_COMPLEXVITAL_TIMINGVITAL_PRIMITIVE庫說明語句:庫說明語句:Library 庫名庫名;use 庫名庫名.程序包名程序包名.

6、項目名項目名;實體實體(Entity)n描述此設計功能輸入輸出端口(Port)n在層次化設計時,Port為模塊之間的接口n在芯片級,則代表具體芯片的管腳A3.0B3.0equalEntity eqcomp4 isport(a, b: in std_logic_vector(3 downto 0); equal:out std_logic );end eqcomp4;實體端口的模式實體端口的模式n輸入(Input)n輸出(Output)n雙向(Inout):可代替所有其他模式,但降低了程序的可讀性,一般用于與CPU的數據總線接口n緩沖(Buffer):與Output類似,但允許該管腳名作為一些邏

7、輯的輸入信號(2) ) 端口說明端口說明PORT ( 端口名端口名,端口名端口名 : 方向方向 數據類型數據類型;:端口名端口名,端口名端口名 : 方向方向 數據類型數據類型 );端口方向端口方向 實實體體INOUTINOUTBUFFERLINKAGEOut與Buffer的區別nEntity test1 is port(a: in std_logic; b,c: out std_logic ); end test1; architecture a of test1 is begin b = not(a); c = b;-Error end a;nEntity test2 is port(a:

8、in std_logic; b : buffer std_logic; c: out std_logic ); end test2; architecture a of test2 is begin b = not(a); c = b; end a;結構體(結構體(Architecture)n描述實體的行為描述實體的行為n結構體有三種描述方式結構體有三種描述方式n行為描述行為描述(behavioral)n數據流描述數據流描述(dataflow)n結構化描述結構化描述(structural)ENTITY描述電路的描述電路的I/O介面介面PackageARCHITECTURE描述電路的特性和運作描

9、述電路的特性和運作StructuralData FlowBehavioral不同的描述風格不同的描述風格結構體行為描述結構體行為描述Architecture behavioral of eqcomp4 is begincomp: process (a,b) beginif a=b then equal = 1; else equal =0;end if; end process comp;end behavioral ;高層次的功能描述,高層次的功能描述,不必考慮在電路中到不必考慮在電路中到底是怎樣實現的。底是怎樣實現的。結構體數據流描述結構體數據流描述描述輸入信號經過怎樣的變換得到輸出信號描

10、述輸入信號經過怎樣的變換得到輸出信號Architecture dataflow1 of eqcomp4 is begin equal = 1 when a=b else 0;end dataflow1;Architecture dataflow2 of eqcomp4 is beginequal = not(a(0) xor b(0) and not(a(1) xor b(1) and not(a(2) xor b(2) and not(a(3) xor b(3);end dataflow2;當當a和和b的寬度發生的寬度發生變化時,需要修改變化時,需要修改設計,當寬度過大設計,當寬度過大時,設

11、計非常繁瑣時,設計非常繁瑣結構體結構描述結構體結構描述architecture struct of eqcomp4 isbegin U0:xnor2 port map(a(0),b(0),x(0); U1:xnor2 port map(a(1),b(1),x(1); U2:xnor2 port map(a(2),b(2),x(2); U3:xnor2 port map(a(3),b(3),x(3); U4:and4 port map(x(0),x(1),x(2),x(3),equal);end struct;類似于電路的網絡表,將各個器類似于電路的網絡表,將各個器件通過語言的形式進行連接,與件

12、通過語言的形式進行連接,與電路有一一對應的關系。電路有一一對應的關系。一般用于大規模電路的層次化設一般用于大規模電路的層次化設計時。計時。三種描述方式的比較三種描述方式的比較描述方式描述方式優點優點缺點缺點適用場合適用場合結構化描結構化描述述連接關系清連接關系清晰,電路模晰,電路模塊化清晰塊化清晰電路不易理解、電路不易理解、繁瑣、復雜繁瑣、復雜電路層次化設電路層次化設計計數據流描數據流描述述布爾函數定布爾函數定義明白義明白不易描述復雜不易描述復雜電路,修改不電路,修改不易易小小門數設計門數設計行為描述行為描述電路特性清電路特性清楚明了楚明了進行綜合效率進行綜合效率相對較低相對較低大型復雜的電大

13、型復雜的電路模塊設計路模塊設計(二)(二)VHDL語言中的數據語言中的數據2.1VHDL標識符(標識符(Identifiers)n基本標識符由字母、數字和下劃線組成基本標識符由字母、數字和下劃線組成n第一個字符必須是字母第一個字符必須是字母n最后一個字符不能是下劃線最后一個字符不能是下劃線n不允許連續不允許連續2個下劃線個下劃線n保留字保留字(關鍵字關鍵字)不能用于標識符不能用于標識符n大小寫是等效的大小寫是等效的Decoder_1 ,FFT ,SIG_N,_Decoder_1,2FFT, NOT-ACK, TYR_ ,DATA_ _BUS , RETURN一般的,在書寫程序時,應將一般的,在

14、書寫程序時,應將VHDL的保留字的保留字大寫或黑體大寫或黑體,設計者,設計者自己定義的字符小寫自己定義的字符小寫,以,以使得程序使得程序便于閱讀和檢查便于閱讀和檢查。盡管。盡管VHDL仿真綜仿真綜合時不區分大小寫,但一個優秀的硬件程序設合時不區分大小寫,但一個優秀的硬件程序設計師應該養成良好的習慣。計師應該養成良好的習慣。例:例:一些合法的標識符:一些合法的標識符:S_MACHINE,present_state,sig3, Decoder_1 ,FFT ,SIG_N,不合法的標識符:不合法的標識符:present-state,3states,cons_,_now , _Decoder_1,2F

15、FT,NOT-ACK,,TYR_ ,DATA_ _BUS ,RETURNn數組型對象的某一元素數組型對象的某一元素n 標識符(表達式)標識符(表達式)n數組型對象的名字,數組下標范圍中數組型對象的名字,數組下標范圍中的一個值。的一個值。nB(3), A(M)VHDL下標名下標名n標識符(表達式標識符(表達式 方向方向 表達式)表達式)nA (0 TO 3) ,B( 4 TO 7),),nG(3 DOWNTO 0)VHDL段名段名2.2 VHDL數據對象(數據對象(Data Objects) 類似于一種容器,接受不同數據類似于一種容器,接受不同數據類型的賦值類型的賦值 -常數常數 信號信號 變量

16、變量數據對象數據對象常數(常數(Constant)n 固定值,不能在程序中被改變固定值,不能在程序中被改變n增強程序的可讀性,便于修改程序增強程序的可讀性,便于修改程序n在綜合后,連接到電源和地在綜合后,連接到電源和地n可在可在Library、Entity、Architecture、Process中進行定義,其有效范圍也相應限定中進行定義,其有效范圍也相應限定n常數說明:常數說明:Constant 常數名:常數名: 數據類型數據類型:=表表達式達式 Constant data_bus_width: integer := 8;Constant ROM_Size: Integer := 16#FF

17、FF#;數據對象數據對象變量(變量(Variable)n臨時數據,沒有物理意義臨時數據,沒有物理意義n只能在只能在Process和和Function中中定義,定義,并只在其內部有效并只在其內部有效n要使其全局有效,先轉換為要使其全局有效,先轉換為Signal。n用用 進行賦值進行賦值n變量說明:變量說明: 變量名:變量名: 數據類型數據類型n 變量賦值變量賦值數據對象數據對象信號(信號(Signals)n 代表連線,代表連線,Port也是一種信號也是一種信號n在在Entity中和中和Architecture中定義中定義n用用 = 進行賦值進行賦值n信號說明:信號說明: signal 信號名:信

18、號名: 數據類型數據類型; signal count:bit_vector(3 downto 0):=“0011”; nsignal Enable: Bit;nsignal CLK, CLEAR: Bit:=1;數據對象信號數據對象信號信號舉例信號舉例nLIBRARY ieee;nUSE ieee.std_logic_1164.all;nENTITY simp ISnPORT (a, b, c, d : IN Std_Logic;ng : OUT Std_Logic);nEND simp;nARCHITECTURE logic OF simp ISnSIGNAL e,f : Std_Logic

19、;nBEGINne = a or b;nf=not(c or d);ng =e and f;nEND logic;信號賦值信號賦值信號和變量的作用范圍信號和變量的作用范圍信號和變量的區別信號和變量的區別信號與變量的區別信號與變量的區別architecture rtl of start is signal count : integer range 0 to 7; begin process(clk) begin if (clkevent and clk=1) then count = count + 1; if(count=0) then carryout = 1; else carryout

20、 = 0; end if; end if; end process; end rtl;architecture rtl of start is begin process(clk)variable count : integer range 0 to 7;begin if (clkevent and clk=1) then count := count + 1; if(count=0) then carryout = 1; else carryout = 0; end if; end if; end process; end rtl;2.3 VHDL數據類型數據類型1. 標準數據類型標準數據類

21、型(編程者可直接使用編程者可直接使用) 預定義類型在預定義類型在VHDL標準程序包標準程序包STANDARD中定義,在應用中自動包含進中定義,在應用中自動包含進VHDL的源文件,的源文件,不需要不需要USE語句顯示調用語句顯示調用。數據類型如下:數據類型如下: 1.整數(整數(INTEGER)在在VHDL語言中,整數的表示范圍為語言中,整數的表示范圍為21474836472147483647,即從,即從(2311)到到(2311)。2.實數(實數(REAL)實數的定義值范圍為實數的定義值范圍為1.0E+381.0E+38。實數有正負數,書寫時一定要有小數點。例實數有正負數,書寫時一定要有小數點

22、。例如:如:1.0,+2.5,1.0E+383.位位(BIT)用來表示數字系統中的信號值。位值用字符用來表示數字系統中的信號值。位值用字符0或或者者1(將值放在引號中)表示。與整數中的(將值放在引號中)表示。與整數中的1和和0不同,不同,1和和0僅僅表示一個位的兩種取值。僅僅表示一個位的兩種取值。4.位矢量位矢量(BIT_VECTOR)位矢量是用雙引號括起來的一組數據。例如:位矢量是用雙引號括起來的一組數據。例如:“001100”,X“00bb”。在這里位矢量前面的。在這里位矢量前面的X表示表示是十六進制是十六進制。使用位矢量時必須注明位寬,使用位矢量時必須注明位寬,即數組即數組中元素個數和排

23、列,例如:中元素個數和排列,例如:SIGNAL s1:BIT_VECTOR(15 DOWNTO 0);); 5.布爾量布爾量(BOOLEAN)一個布爾量具有兩種狀態一個布爾量具有兩種狀態,“真真”或者或者“假假”。沒有沒有數值的含義,也數值的含義,也不能進行算術運算不能進行算術運算。它。它能進行關系運能進行關系運算算。例如,它可以在。例如,它可以在if語句中被測試,測試結果產生語句中被測試,測試結果產生一個布爾量一個布爾量TRUE或者或者FALSE。 6.字符字符(CHARACTER)用用單引號單引號括起來,括起來,如如a。區分大小寫。字符包括從。區分大小寫。字符包括從a到到z中的任一個字母,

24、從中的任一個字母,從0到到9中的任一個數以及空格中的任一個數以及空格或者特殊字符,如或者特殊字符,如$,%等等。包集合等等。包集合standard中給出了預定義的中給出了預定義的128個個ASC碼字符。碼字符。7.字符串字符串(STRING)由雙引號括起來的一個字符序列,也稱字符矢量或字由雙引號括起來的一個字符序列,也稱字符矢量或字符串組。字符串常用于程序的提示和說明。字符串舉符串組。字符串常用于程序的提示和說明。字符串舉例如下:例如下:VATIABLE string_1 : STRING (0TO 3);string_1:= “a b c d”;8.時間時間(TIME)是一個物理量數據。包含

25、整數和單位兩部分,而且整是一個物理量數據。包含整數和單位兩部分,而且整數和單位之間至少應留一個空格的位置。例如數和單位之間至少應留一個空格的位置。例如55 sec,2 min等。在包集合等。在包集合STANDARD中給出了時間的預定中給出了時間的預定義,其單位為義,其單位為fs,ps,ns,s,ms,sec,min和和hr。例。例如:如:20 s,100 ns,3 sec。在系統仿真時,時間數據特別有用,用它可以表示信在系統仿真時,時間數據特別有用,用它可以表示信號延時,從而使模型系統能更逼近實際系統的運行環號延時,從而使模型系統能更逼近實際系統的運行環境。境。9.錯誤等級錯誤等級(SEVER

26、ITY LEVEL)用來表征系統的狀態,共有用來表征系統的狀態,共有4種:種:note(注意),(注意),warning(警告),(警告),error(出錯),(出錯),failure(失敗)。(失敗)。在系統仿真過程中可以用這在系統仿真過程中可以用這4種狀態來提示系統當前種狀態來提示系統當前的工作情況,從而使設計人員隨時了解當前系統工的工作情況,從而使設計人員隨時了解當前系統工作的情況,并根據系統的不同狀態采取相應的對策。作的情況,并根據系統的不同狀態采取相應的對策。1 0 . 大 于 等 于 零 的 整 數 ( 自 然 數 )大 于 等 于 零 的 整 數 ( 自 然 數 )(NATURA

27、L),),正整數正整數(POSITIVE)這兩種數據是整數的子類,這兩種數據是整數的子類,NATURAL類數據為取類數據為取0和和0以上的正整數;而以上的正整數;而POSITIVE 則只能為正整數。則只能為正整數。2. 用戶自定義數據類型用戶自定義數據類型 格式:格式:type 數據類型名數據類型名 is 數據類型定義;數據類型定義;可以由用戶定義的數據類型有:可以由用戶定義的數據類型有:枚舉枚舉(ENUMERATED)類型;)類型;整數整數(INTEGER)類型;)類型;實數實數(REAL)、)、浮點數浮點數(FLOATING)類型;)類型;數組數組(ARRAY)類型;)類型;。“IEEE.

28、STD_LOGIC”九態數值模型如下:九態數值模型如下:U初始值;初始值; X 不定態;不定態; 1 邏輯邏輯1; 0 邏輯邏輯0; Z 高阻態;高阻態; W 弱信號不定;弱信號不定; L 弱信號弱信號0 H 弱信號弱信號1; 不可能情況不可能情況 。 3. IEEE 標準數據類型標準數據類型 “std-logic”和和“std-logic-vector”(三)(三)VHDL語言中的表達式語言中的表達式VHDL運算符運算符n邏輯運算符邏輯運算符AND、OR、NAND、NOR、XOR、NOTn關系運算符關系運算符=、/=、=n算術運算符算術運算符+、-、*、/n并置并置(連接連接)運算符運算符&

29、amp;1.邏輯運算符邏輯運算符在在VHDL語言中,共有語言中,共有6種邏輯運算符,他們分別是:種邏輯運算符,他們分別是: NOT 取反;取反; AND 與;與; OR 或;或; NAND 與非;與非; NOR 或非;或非; XOR 異或。異或。 這這6種邏輯運算符可以對種邏輯運算符可以對“STD_LOGIC ”和和“BIT”等邏等邏輯型數據、輯型數據、“STD_LOGIC _VECTOR”邏輯型數組及邏輯型數組及布布爾數據爾數據進行邏輯運算。進行邏輯運算。必須注意,運算符的左邊和右邊,必須注意,運算符的左邊和右邊,以及代入的信號的數據類型必須是相同的以及代入的信號的數據類型必須是相同的。 2

30、.算術運算符算術運算符VHDL語言中有語言中有5類算術運算符,他們分別是:類算術運算符,他們分別是:求和操作符:求和操作符: (加)、(減)(加)、(減)求積操作符求積操作符:*(乘)、(乘)、/(除)、(除)、MOD(求模)、(求模)、REM(取余)(取余)符號操作符:符號操作符: (正)、(負)(正)、(負)混合操作符:混合操作符: *(指數)、(指數)、ABS(取絕對值)(取絕對值)移位操作符:移位操作符:SLL(邏輯左移)、(邏輯左移)、SRL(邏輯右移)、(邏輯右移)、SLA(算術左移)、(算術左移)、SRA(算術右移)、(算術右移)、ROL(邏輯(邏輯循環左移)、循環左移)、ROR

31、邏輯循環右移)邏輯循環右移) 3.關系運算符關系運算符VHDL語言中有語言中有6種關系運算符,他們分別是:種關系運算符,他們分別是: = 等于;等于; /= 不等于;不等于; 小于;小于; 大于;大于; = 大于等于;大于等于;4.并置運算符并置運算符& 連接連接 SIGNAL g,h,i:STD_LOGIC;SIGNAL c,d,e:STD_LOGIC _VECTOR(1 TO 0);); d = i & NOT h;- -元素與元素并置,形成長度為元素與元素并置,形成長度為2的數組的數組 a = c & d; - -數組與數組并置,形成長度為數組與數組并置,形成長度

32、為4的數組的數組 5.VHDL操作符的優先順序操作符的優先順序 運算符運算符 優先級優先級NOT,ABS,* 最高優先級最高優先級 *,/,MOD,REM +(正號),(負號)(正號),(負號)+,& SLL,SLA,SRL,SRA,ROL,ROR =,/=,= AND,OR,NAND,NOR,XOR,XNOR 最低優先級最低優先級 (四)順序描述語句(四)順序描述語句1. 信號賦值語句和變量賦值語句信號賦值語句和變量賦值語句目標信號目標信號=表達式表達式目標變量:表達式目標變量:表達式2. If 語句語句語句格式:語句格式:if 條件條件 1 then 第第1組順序語句;組順序語句;

33、elseif 條件條件 2 then 第第2組順序語句;組順序語句; elseif 條件條件 n then 第第n組順序語句;組順序語句; else 第第n+1組順序語句;組順序語句;end if;IF語句的應用語句的應用n 八八-三優先級編碼器真值表三優先級編碼器真值表 輸輸 入入 輸出輸出 d7 d6 d5 d4 d3 d2 d1 d0 q2 q1 q0 0 x x x x x x x 1 1 1 1 0 x x x x x x 1 1 0 1 1 0 x x x x x 1 0 1 1 1 1 0 x x x x 1 0 0 1 1 1 1 0 x x x 0 1 1 1 1 1 1 1

34、 0 x x 0 1 0 1 1 1 1 1 1 0 x 0 0 1 1 1 1 1 1 1 1 0 0 0 0n nLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY priority_encoder IS PORT ( d : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ; q : OUT STD_LOGIC_VECTOR ( 2 DOWNTO 0 ) ) ; END priority_encoder ; ARCHITECTURE example_if OF priority_encoder IS BEGIN PRO

35、CESS ( d ) BEGIN IF ( d (7)=0 ) THEN q= ”111”; ELSIF ( d (6) = 0 ) THEN q= ”110”; ELSIF ( d (5) = 0 ) THEN q= ”101”; ELSIF ( d (4) = 0 ) THEN q= ”100”; ELSIF ( d (3) = 0 ) THEN q= “011”; ELSIF ( d (2) = 0 ) THEN q= “010”; ELSIF ( d (1) =0 ) THEN q= “001”; ELSE q順序處理語句;順序處理語句;n : WHEN 條件表達式的值條件表達式的值=

36、順序處理語句;順序處理語句; END CASE;nWHEN 中的條件有下述四種方式:中的條件有下述四種方式: WHEN 值值=順序處理語句;順序處理語句; WHEN 值值值值值值=順序處理語句;順序處理語句;-若干若干可列的值。可列的值。 WHEN 值值TO 值值=順序處理語句;某個區間的值。順序處理語句;某個區間的值。 WHEN OTHERS=順序處理語句;順序處理語句; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT ( a,b,d0,d1,d2,d3 : IN STD_LOGIC ; q : OUT STD_L

37、OGIC ) ; END mux4;例:用例:用CASE語句設計四選一電路語句設計四選一電路 ARCHITECTURE example_case OF mux4 IS SIGNAL sel : INTEGER RANGE 0 TO 3 ; BEGIN PROCESS ( a,b,d0,d1,d2,d3 ) BEGIN sel=0; IF ( a=1 ) THEN sel=sel+1 ; END IF ; IF ( b=1 ) THEN sel q q q q=d3; END CASE; END PROCESS; END example_case;CASE語句設計的四選一電路實現語句設計的四選一

38、電路實現n上述程序所描述的是一個平衡結構的四選一電路上述程序所描述的是一個平衡結構的四選一電路.FGHOBUFabd0d1d2d3q用用IF語句設計四選一電路語句設計四選一電路 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (a, b, d0, d1-, d2, d3: IN STD_LOGIC; q: OUT STD_LOGIC); END mux4; ARCHITECTURE example_if OF mux4 IS BEGIN PROCESS (a, b, d0,d1,d2,d3) BEGIN IF (a

39、= 0 AND b = 0) THEN q = d0; ELSIF (a = 1 AND b = 0) THE q = d1; ELSIF (a = 0 AND b = 1) THEN q = d2; ELSIF (a = 1 AND b = 1) THEN q = d3; END IF; END PROCESS; END example_if; 用用IF語句設計四選一電路是權電路語句設計四選一電路是權電路GFd0abd1d2d3yF(四)并行描述語句(四)并行描述語句n1進程內部所有的語句都是順序執行的,進程內部所有的語句都是順序執行的,n 2. 進程和進程之間是并行執行的,進程和進程之間是

40、并行執行的,n 3進程的啟動由進程的啟動由PROCESS語句的敏感信號量語句的敏感信號量表中的信號量觸發,也可以由表中的信號量觸發,也可以由WAIT語句觸發。語句觸發。 1. 進程語句進程語句 (進程名:進程名:)process(敏感信號表)敏感信號表) 變量說明語句;變量說明語句;begin 一組順序語句;一組順序語句;end process (進程名進程名);當進程鐘沒有敏感信號表時,進程語句中必須當進程鐘沒有敏感信號表時,進程語句中必須有其他形式的敏感信號激勵;而當進程中有敏有其他形式的敏感信號激勵;而當進程中有敏感信號表時,進程語句中不允許再出現感信號表時,進程語句中不允許再出現wai

41、t、wait for、wait until和和wait on 中的任何一種敏感中的任何一種敏感信號激勵語句,否則出錯。信號激勵語句,否則出錯。用進程設計用進程設計D觸發器觸發器n LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff4 IS PORT (clk, d, clr, pset:IN STD_LOGIC; q:OUT STD_LOGIC ); END dff4; ARCHITECTURE rtl OF dff4 IS BEGIN clrpsetD QclknPROCESS (clk, pset, clr) BEGIN IF (clr

42、 = 0 ) THEN q = 0; ELSIF (pset = 0) THEN q = 1; ELSIF (clk EVENT AND clk = 1) THEN q = d; END IF; END PROCESS; END rtl; n利用進程語句設計一位加法器利用進程語句設計一位加法器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY half_adder IS PORT(a, b: IN STD_LOGIC; sum, carry: OUT STD_LOGIC); END half_adder; nARCHITECTURE behav

43、 OF half-adder IS BEGIN PROCESS (a, b) BEGIN sum= a XOR b AFTER 5nS; carry= a AND b AFTER 5nS; END PROCESS; END behav; 進程語句的啟動進程語句的啟動進程語句有兩種工作狀態:進程語句有兩種工作狀態:等待狀態等待狀態和和執行執行狀態狀態。當敏感信號表中的信號沒有變化時,。當敏感信號表中的信號沒有變化時,進程處于等待狀態;當敏感信號表中的信號進程處于等待狀態;當敏感信號表中的信號有變化時,進程處于執行狀態,將順序執行有變化時,進程處于執行狀態,將順序執行進程中的語句。當最后一個語句執

44、行完后,進程中的語句。當最后一個語句執行完后,就返回進程語句的開始,等待下一次敏感信就返回進程語句的開始,等待下一次敏感信號表中的信號變化。號表中的信號變化。進程啟動的進程啟動的WAIT語句語句n(1) 無限等待無限等待 WAIT;n(2) 敏感信號量變化等待敏感信號量變化等待 WAIT ON 信號名信號名,信號名,信號名; n(3) 條件等待條件等待 WAIT UNTIL 表達式;表達式;n(4) 時間等待時間等待 WAIT FOR 時間表達式;時間表達式; 例如例如 :WAIT FOR 20nS;-同步點在延時同步點在延時20nS后,后, WAIT ON clk, interrupt FO

45、R 5nS;-當信號當信號clk或或 interrupt變化變化5nS后啟動后啟動 進程。進程。 2. 并發信號賦值語句并發信號賦值語句 信號賦值語句在進程內部出現時,是順序描述語句,信號賦值語句在進程內部出現時,是順序描述語句,在進程之外出現時,以并發語句的形式出現。是并在進程之外出現時,以并發語句的形式出現。是并行執行的,執行順序與書寫順序無關。行執行的,執行順序與書寫順序無關。LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY gate IS PORT(a,b : IN STD_LOGIC); x,y,z :OUT STD_LOGIC);END

46、gate;ARCHITECTURE behave OF gate ISBEGIN x=a AND b; y=a OR b; z=a XOR b;END behave;ABXYZGATE例:產生右圖電路符號的例:產生右圖電路符號的VHDL程序程序3. 條件信號賦值語句條件信號賦值語句 目標信號目標信號=表達式表達式1 when 條件條件1 else 表達式表達式2 when 條件條件2 else 表達式表達式3 when 條件條件3 else 表達式表達式 n-1 when 條件條件n-1 else 表達式表達式n; ABXAND_GATELIBRARY IEEEUSE IEEE.STD_LOG

47、IC_1164.ALL;ENTITY and_gate IS PORT(a,b : IN STD_LOGIC); x:OUT STD_LOGIC);END and_gate;ARCHITECTURE rtl OF and_gate ISBEGIN x=0 when a=0 and b=0 else x=0 when a=0 and b=1 else x=0 when a=1 and b=0 else 1;END rtl;4. 選擇信號賦值語句選擇信號賦值語句 with 表達式表達式 select 目標信號目標信號=表達式表達式1 when 條件條件1, 表達式表達式2 when 條件條件2,

48、表達式表達式3 when 條件條件3, 表達式表達式 n when 條件條件n, QMMUX40D1D2D3DSEL1.0LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY mmux4 IS PORT(d0,d1,d2,d3: IN STD_LOGIC; sel:in std_logic_vector(1 downto 0); q:OUT STD_LOGIC);END mmux4;ARCHITECTURE rtl OF mmux4 ISBEGIN with sel select qa(0), c= x(0), b=b(0) ); 在端口元在端口元素中定

49、義素中定義輸入輸入在端口元在端口元素中定義素中定義輸出輸出IC 器件器件AIC 器件器件BIC 器件器件C連接導線連接導線連接導線連接導線用固定邏輯的用固定邏輯的IC硬件實現硬件實現VHDL組件組件VHDL組件組件VHDL組件組件信號信號信號信號用用VHDL結構實現結構實現任何一個任何一個VHDL程序都可以改變成一個組件,程序都可以改變成一個組件,并可隨時應用到更大的程序中。使用的關鍵字并可隨時應用到更大的程序中。使用的關鍵字是是COMPONENT和和SIGNALCOMPONENT描述預先定義的邏輯,并將其描述預先定義的邏輯,并將其存儲在庫中的軟件包中;而存儲在庫中的軟件包中;而SIGNAL是

50、邏輯電是邏輯電路內部的連接,和輸入輸出有區別。路內部的連接,和輸入輸出有區別。輸入、輸出使用端口語句在輸入、輸出使用端口語句在實體實體中定義,而信中定義,而信號在號在結構體結構體(ARCHITECTURE)內部用信號)內部用信號語句定義。語句定義。1G2G3GIN1IN2IN3IN4OUT1OUT2OUT31G2G3GIN1IN2IN3IN4OUT1OUT2OUT3ABXABXABXVHDL組件示例組件示例2輸入與門輸入與門XAB的的VHDL程序程序ENTITY and_gate IS PORT(A,B:IN BIT;X:OUT BIT);END ENTITY and_gate;ARCHITE

51、CTURE andfunction OF and_gate ISBEGIN X=A AND B; END ARCHITECTURE andfunction;ENTITY OR_gate IS PORT(A,B:IN BIT;X:OUT BIT);END ENTITY OR_gate;ARCHITECTURE ORfunction OF OR_gate ISBEGIN XIN1,B=IN2,X=OUT1);G2:AND_gate PORT MAP (A=IN3,B=IN4,X=OUT2);G3:OR_gate PORT MAP (A=OUT1,B=OUT2,X=OUT3);SIGNAL OUT1

52、,OUT2:BIT;END ARCHITECTURE Logicoperation; (五)時鐘信號的(五)時鐘信號的VHDL描述方描述方法法1. 時鐘邊沿的描述時鐘邊沿的描述 0CLK1CLK(1)上升沿)上升沿CLKCLKeventCLKevent AND CLK=1VHDL屬性描述:屬性描述:0CLK1CLK(2)下降沿)下降沿CLKCLKeventclkEVENT AND CLK=0VHDL屬性描述:屬性描述:2. 時序電路中進程敏感信號時序電路中進程敏感信號 例:例:D觸發器功能描述觸發器功能描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENT

53、ITY dff1 IS PORT(clk,d:IN STD_LOGIC; q:OUT_LOGIC);END dff1;ARCHITECTURE rtl OF dff1 ISBEGINPROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN q=d; END IF; END PROCESS;END rtl;3. 同步復位、置位信號同步復位、置位信號 PROCESS(時鐘信號名)(時鐘信號名) BEGIN IF 時鐘邊沿表達式時鐘邊沿表達式 AND 復位復位/置位表達式置位表達式 THEN 復位置位語句;復位置位語句; ELSE 其他執行語句;其他執行語句; EN

54、D IF;END PROCESS;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff1 IS PORT(clk,d,clr:IN STD_LOGIC; q:OUT STD_LOGIC);END dff1;ARCHITECTURE rtl OF dff1 ISBEGINPROCESS(clk) BEGIN IF (clkEVENT AND clk=1)THEN IF(clr=1)THEN q=0; ELSE q=d; END IF; END IF; END PROCESS;END rtl;4. 異步復位、置位信號異步復位、置位信號 LIBRAR

55、Y IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff2 IS PORT(clk,d,clr:IN STD_LOGIC; q:OUT STD_LOGIC);END dff2;ARCHITECTURE rtl OF dff2 ISBEGINPROCESS(clk,clr) BEGIN IF(clr=1)THEN q=0; ELSEIF (clkEVENT AND clk=1)THEN q=d; END IF; END IF; END PROCESS;END rtl;(七)子程序(七)子程序子程序:在主程序調用它以后能夠將處理結果返回主子程序:在主程序調用它以后

56、能夠將處理結果返回主程序的程序模塊。在程序的程序模塊。在VHDL語言中,子程序有兩種類語言中,子程序有兩種類型:過程(型:過程(procedure)和函數()和函數(function)。過程和函。過程和函數的主要區別體現在以下幾個方面:數的主要區別體現在以下幾個方面:(1)過程可以具有多個返回值,而函數只能有一個)過程可以具有多個返回值,而函數只能有一個返回值。返回值。(2)過程通常用來定義一個算法,而函數用來產生)過程通常用來定義一個算法,而函數用來產生一個特定的值。一個特定的值。(3)過程中的參數可以具有)過程中的參數可以具有3種端口模式:種端口模式:in、out、inout,而函數中的參

57、數只具有一種端口模式:,而函數中的參數只具有一種端口模式:in1. 子程序子程序過程過程 過程的書寫結構:過程的書寫結構: PROCEDURE 過程名(參數過程名(參數1;參數;參數2;)IS 定義語句定義語句; -變量或常量定義變量或常量定義 BEGIN 順序處理語句順序處理語句 -過程描述語句過程描述語句 END 過程名;過程名; 參數的對象類型包括常量、信號和變量;參數的對象類型包括常量、信號和變量;端口模式包括端口模式包括in、out和和inoutLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY procedure1 IS PORT(din

58、1:IN INTEGER RANGE 0 TO 31; din2:IN INTEGER RANGE 0 TO 31; dout:OUT INTEGER RANGE 0 TO 31);END PROCEDURE1;過程定義在結構體中及過程的調用過程定義在結構體中及過程的調用ARCHITECTURE a1 OF procedure1 ISprocedure jfq (d1:IN INTEGER RANGE 0 TO 31; d2:IN INTEGER RANGE 0 TO 31; fout:OUT INTEGER RANGE 0 TO 31)IS BEGIN fout:=d1+d2; END jfq;BEGIN PROCESS VARIABLE fo:INTEGER RANGE 0 TO 31;jfq(din1,din2,fo); dout=fo

溫馨提示

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

最新文檔

評論

0/150

提交評論