VHDL數(shù)據(jù)類型(vhdl語法)PPT課件_第1頁
VHDL數(shù)據(jù)類型(vhdl語法)PPT課件_第2頁
VHDL數(shù)據(jù)類型(vhdl語法)PPT課件_第3頁
VHDL數(shù)據(jù)類型(vhdl語法)PPT課件_第4頁
VHDL數(shù)據(jù)類型(vhdl語法)PPT課件_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、VHDL數(shù)據(jù)類型數(shù)據(jù)類型FPGA應用技術應用技術二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象在在VHDL程序中,我們經常會遇到這樣的語句:程序中,我們經常會遇到這樣的語句:Signal A : std_logic;Variable B : std_logic_vector(7 downto 0); Constant C : integer;數(shù)據(jù)對象類型數(shù)據(jù)對象類型數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)對象名數(shù)據(jù)對象名u VHDL語言中的基本數(shù)據(jù)類型語言中的基本數(shù)據(jù)類型邏輯類型邏輯類型數(shù)值類型數(shù)值類型布爾代數(shù)布爾代數(shù)(Boolean)位位 (Bit)標準邏輯標準邏輯 (Std_Logic)整數(shù)整數(shù) (In

2、teger)實數(shù)實數(shù) (Real)二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象n 邏輯數(shù)據(jù)邏輯數(shù)據(jù)類型類型 (1)布爾代數(shù)()布爾代數(shù)(Boolean)型)型 ; (2)位()位(Bit);); (3)標準邏輯()標準邏輯(Std_logic););type BIT is (0, 1); type BOOLEAN is (FALSE, TRUE) ;二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象 標準邏輯類型標準邏輯類型Type Std_Logic Is ( U, -Undefined(未初始化) X , -Forcing Unknown(強未知) 0 , -Forcing 0(

3、強0) 1 , -Forcing 1(強1) Z , -Hign Impedance(高阻) W, -Weak Unknown(弱未知) L , -Weak 0(弱0) H , -Weak 1(弱1)- , -Dont Care(忽略))二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象 標準邏輯類型對數(shù)字邏輯電路的邏輯特性描述更加完整,真實,因此在VHDL程序中,對邏輯信號的定義通常采用標準邏輯類型l 邏輯序列邏輯序列位序列位序列 (Bit_Vector)標準邏輯序列標準邏輯序列 (Std_Logic_Vector)二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象Signal data

4、: Std_Logic_Vector( 7 downto 0);Signal addr: Bit_Vector ( 0 to 3);序列的范圍大小聲明方式:序列的范圍大小聲明方式:To, Downtol 序列的使用序列的使用二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象l 序列的分解與合成序列的分解與合成Signal A: Std_Logic_Vector( 3 downto 0);Signal B: Std_Logic_Vector( 0 to 3);Signal C: Std_Logic_Vector( 0 to 1);Signal D: Std_Logic_Vector( 1 do

5、wnto 0);C= A( 2 downto 1);B= A(3) & D & 1;二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象n 數(shù)值類型數(shù)值類型(1)整數(shù))整數(shù) Type Integer Is Range -231 231-1限定整數(shù)取值范圍的方法:限定整數(shù)取值范圍的方法: Signal A: Integer; Signal B: Integer Range 0 to 7; Signal C: Integer Range -1 to 1;二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象l 無符號數(shù)無符號數(shù) Unsigned與標準邏輯序列相似,聲明時必須指明其與標準邏輯序列相似,

6、聲明時必須指明其位數(shù)。位數(shù)。Signal A : Unsigned(3 downto 0);Signal B : Unsigned( 7 downto 0);注意注意: 必須使用必須使用downto形式。形式。二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象(2)實數(shù))實數(shù) Type Real Is Range -1.7E38 to 1.7E38; 實數(shù)類型的表示可用科學計數(shù)形式或者帶小實數(shù)類型的表示可用科學計數(shù)形式或者帶小數(shù)點的形式。數(shù)點的形式。二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象l VHDL中的運算符中的運算符二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象 算術運

7、算符:算術運算符: +加加-減減*乘乘/除除*乘方乘方mod 求模求模 rem 求余求余 abs求絕對值求絕對值 邏輯運算:邏輯運算: and 邏輯與邏輯與or邏輯或邏輯或nand與非與非nor 或非或非xor 異或異或xnor同或同或not 邏輯非邏輯非關系運算符:關系運算符: = 等于等于/= 不等于不等于小于小于大于大于= 大于或等于大于或等于注:其中注:其中=操作符也操作符也用于表示信號的賦值用于表示信號的賦值操作。操作。 &連接符連接符,將兩個數(shù)將兩個數(shù)據(jù)對象或矢量連接成維據(jù)對象或矢量連接成維數(shù)更大的矢量,它可給數(shù)更大的矢量,它可給代碼書寫帶來方便。代碼書寫帶來方便。 例如:例如:

8、vabc=a & b & c;如果如果a=1 , b=0 , c=1 ,則則 vabc=“101” 。二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象u 用戶自定義數(shù)據(jù)類型:用戶自定義數(shù)據(jù)類型:(1) 列舉數(shù)據(jù)類型列舉數(shù)據(jù)類型Type 列舉名稱列舉名稱 is (元素元素1,元素元素2,)例子:例子:Type state is(S0,S1,S2,S3);Signal A: state;二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象(2) 數(shù)組類型數(shù)組類型Type 數(shù)組名稱數(shù)組名稱 is Array(范圍范圍) of 數(shù)據(jù)類型;數(shù)據(jù)類型;例子:例子: Type Byte is Array

9、(7 downto 0) of Bit; Signal sdo: Byte;二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象u 數(shù)據(jù)類型的轉換數(shù)據(jù)類型的轉換 在在VHDL語言里,語言里,不同類型的數(shù)據(jù)信號之間不同類型的數(shù)據(jù)信號之間不能互相賦值不能互相賦值。當需要不同類型數(shù)據(jù)之間。當需要不同類型數(shù)據(jù)之間傳遞信息時,就需要傳遞信息時,就需要類型轉換函數(shù)類型轉換函數(shù)將其中將其中的一種類型數(shù)據(jù)轉換為另一中數(shù)據(jù)類型后,的一種類型數(shù)據(jù)轉換為另一中數(shù)據(jù)類型后,再進行信號的傳遞。再進行信號的傳遞。二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象例如:例如:Signal Y : Std_logic_ve

10、ctor(7 downto 0);Signal X : Integer range 0 to 255;Y= CONV_STD_LOGIC_VECTOR(X,8);二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象CONV_INTEGER 將數(shù)據(jù)類型將數(shù)據(jù)類型 UNSIGNED, SIGNED轉換為轉換為INTEGER 類型類型. CONV_UNSIGNED 將數(shù)據(jù)類型將數(shù)據(jù)類型INTEGER, SIGNED轉換為轉換為UNSIGNED 類型類型.CONV_SIGNED 將數(shù)據(jù)類型將數(shù)據(jù)類型INTEGER, UNSIGNED轉換為轉換為SIGNED類型類型.CONV_STD_LOGIC_VEC

11、TOR 將數(shù)據(jù)類型將數(shù)據(jù)類型INTEGER, UNSIGNED, SIGNED, STD_LOGIC轉換為轉換為STD_LOGIC_VECTOR 類型類型. 二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象u 數(shù)據(jù)對象數(shù)據(jù)對象常常 量量信信 號號變變 量量(Data Objects)二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象(1) 常量常量定義格式定義格式:Constant 常量名稱常量名稱: 數(shù)據(jù)類型數(shù)據(jù)類型 :=給定值給定值; 常量通常來來定義延遲和功耗等參數(shù)。常量通常來來定義延遲和功耗等參數(shù)。注意!常數(shù)定義的同時進行賦初值。注意!常數(shù)定義的同時進行賦初值。常數(shù)可以在實體說明

12、、結構體描述中使用。常數(shù)可以在實體說明、結構體描述中使用。二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; -必需定義必需定義+entity exam1 is port (ip : in std_logic_vector(3 downto 0); op : out std_logic_vector(3 downto 0);end exam1; architecture m1 of exam1 isconstant num : integer :=

13、 6;beginop = ip + num;end m1; 二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象(2) 信號信號定義格式定義格式Signal 信號名稱信號名稱: 數(shù)據(jù)類型數(shù)據(jù)類型 :=初始值初始值;信號相當于電路內部元件之間的物理連線信號相當于電路內部元件之間的物理連線, ,因因此信號的賦值有一定的延遲時間此信號的賦值有一定的延遲時間. .二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象l “信號信號”數(shù)據(jù)對象,代表電路內部信號或連接線路,數(shù)據(jù)對象,代表電路內部信號或連接線路,其在元件之間起互連作用。其在元件之間起互連作用。注意!信號定義的時候盡管可以直接賦初值,但系統(tǒng)往往

14、忽略。注意!信號定義的時候盡管可以直接賦初值,但系統(tǒng)往往忽略。建議信號對象定義后再進行賦值。建議信號對象定義后再進行賦值。l信號為全局量。信號為全局量。l在實體說明、結構體描述和程序包說明中使用。在實體說明、結構體描述和程序包說明中使用。l信號賦值的語法格式為:信號賦值的語法格式為:信號名信號名 = 表達式;表達式;如:如:Signal S1 : Std_logic_vector(3 Downto 0); S1 = “0000”;二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象(3)變量)變量定義格式定義格式Variable 變量名稱變量名稱: 數(shù)據(jù)類型數(shù)據(jù)類型 :=初始值初始值;變量只能

15、用于變量只能用于“進程進程” 之中之中,變量的賦值是變量的賦值是立即生效的立即生效的,常用于高層次抽象的算法描述常用于高層次抽象的算法描述 當中。當中。二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象 “ “變量變量”數(shù)據(jù)對象,它用于對中間數(shù)據(jù)的臨時存數(shù)據(jù)對象,它用于對中間數(shù)據(jù)的臨時存儲,并不一定代表電路的某一組件。儲,并不一定代表電路的某一組件。 注意!變量定義的時候盡管可以直接賦初值,但系統(tǒng)往往忽略。注意!變量定義的時候盡管可以直接賦初值,但系統(tǒng)往往忽略。建議變量對象定義后再進行賦值。建議變量對象定義后再進行賦值。變量為局部量。變量為局部量。僅限于進程僅限于進程(Process)或子程

16、序中使用?;蜃映绦蛑惺褂?。 變量賦值的語法格式為:變量賦值的語法格式為:目標變量目標變量:=表達式;表達式;如:如:Variable S1 : Std_logic_vector(3 Downto 0); S1 := “0000”;二、二、VHDL數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象信號和變量的比較信號和變量的比較 (1)信號和變量的對應關系不同信號和變量的對應關系不同:信號代表電路內部信號或連:信號代表電路內部信號或連接線路;而變量則不是。接線路;而變量則不是。 (2)信號和變量聲明的位置不同信號和變量聲明的位置不同:信號聲明在子程序、進程的外:信號聲明在子程序、進程的外部;而變量聲明在子程序

17、、進程的內部。部;而變量聲明在子程序、進程的內部。 (3)信號為全局量,而變量只在定義它的域中才可見信號為全局量,而變量只在定義它的域中才可見。因此,。因此,變量不能在兩個進程之間傳遞信息。變量不能在兩個進程之間傳遞信息。 (4)在一個進程中多次為一個信號賦值時,只有最后一個值會起)在一個進程中多次為一個信號賦值時,只有最后一個值會起作用;而變量則不同,每次賦值都會改變它的值。作用;而變量則不同,每次賦值都會改變它的值。(5)賦值不同。賦值不同。在進程中,信號賦值只有在進程結束時起作用,在進程中,信號賦值只有在進程結束時起作用,而變量賦值是立即進行的。而且賦值符號不同:信號賦值為而變量賦值是立

18、即進行的。而且賦值符號不同:信號賦值為“=”,變量賦值為,變量賦值為“:=”。數(shù)據(jù)對象屬性數(shù)據(jù)對象屬性(1)數(shù)值類屬性:)數(shù)值類屬性: (數(shù)組類型的數(shù)據(jù)對象)(數(shù)組類型的數(shù)據(jù)對象)數(shù)值類屬性有數(shù)值類屬性有 left, right, low, high, length。其中用符號其中用符號 隔開對象名及其屬性。隔開對象名及其屬性。 left表示數(shù)組的左邊界;表示數(shù)組的左邊界; right表示數(shù)組的右邊界;表示數(shù)組的右邊界; low表示數(shù)組的下邊界;表示數(shù)組的下邊界; high表示數(shù)組的上邊界;表示數(shù)組的上邊界; length表示數(shù)組的長度。表示數(shù)組的長度。如:如:Signal A : std_l

19、ogic_vector(7 downto 0);Signal B : std_logic_vector(0 to 3);則這兩個信號的屬性值分別為:則這兩個信號的屬性值分別為: Aleft=7; Aright=0; Alow=0; Ahigh=7; Alength=8; Bleft=0; Bright=3; Blow=0; Bhigh=3; Blength=4;數(shù)據(jù)對象屬性數(shù)據(jù)對象屬性(2)event屬性:屬性: event屬性,它的屬性,它的值為布爾型值為布爾型,如果剛好有事,如果剛好有事件發(fā)生在該屬性所附著的信號上(即信號有變件發(fā)生在該屬性所附著的信號上(即信號有變化),則其取值為化),則

20、其取值為True,否則為,否則為False。 利用此屬性可識別時鐘信號的變化情況,即時利用此屬性可識別時鐘信號的變化情況,即時鐘是否發(fā)生。鐘是否發(fā)生。數(shù)據(jù)對象屬性數(shù)據(jù)對象屬性例如:時鐘邊沿表示:例如:時鐘邊沿表示:signal clk : in std_logic;If( clkevent and clk=1 )then Q=Q+1;則則clkevent and clk=1表示時鐘的上升沿。表示時鐘的上升沿。即時鐘變化了,且其值為即時鐘變化了,且其值為1。 clkevent and clk=0表示時鐘的下降沿。表示時鐘的下降沿。即時鐘變化了,且其值為即時鐘變化了,且其值為0。數(shù)據(jù)對象屬性數(shù)據(jù)對

21、象屬性例例2 2: :設計組合邏輯電路設計組合邏輯電路設計一個設計一個1bit全加器。全加器。輸入輸入 X,Y,CI 輸出輸出 Z,COlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity full_bit_adder isport(a,b,ci:in std_logic; y,cout:out std_logic);end full_bit_adder;architecture bh1 of full_bit_adder isbegin y = (not a)and (not b)and ci) or (not a)and (b) and (not ci) or (a)and (not b)and(not ci) or (a) and (b)and(ci); cout = (b and ci) or (a and ci) or (a and b);end bh1;architecture bh2 of full_bit_adder isbegin y = a xor b xor ci; cout 1000-111D觸發(fā)器觸發(fā)器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.A

溫馨提示

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

評論

0/150

提交評論