VHDL的數據類型


1、預定義的數據類型

std庫的standard包集:定義了位(BIT)、布爾(Boolean)、整數(integer)和實數(real)數據類型。

ieee庫的std_logic_1164包集:定義了std_logic和std_ulogic數據類型。

ieee庫的std_logic_arith包集:定義了signed和unsigned數據類型。還定義了conv_integer(p),conv_unsigned(p,b)和conv_signed(p,b)

和conv_std_logic_vector(p,b)等數據類型轉換函數。

ieee庫的std_logic_signed和std_logic_unsigned包集:包含一些函數,這些函數可以使std_logic_vecture類型的數據進行

像signed和unsigned類型數據一樣的運算。

位(bit)和位矢量(bit_vector):位值用'0'或'1'表示。

例:

signal x:bit;

將x聲明為一個位寬為1的bit類型的信號。

signal y:bit_vector(3 downto 0);

將y聲明為一個位寬為4的位矢量,其中最左邊的一位是最高位(MSB:most significant bit)。

signal w:bit_vector(0 downto 7);

--將w聲明為一個位寬為8的位矢量,它的最右邊的一位是MSB。

在定義了上述信號以后,可以采用下面的方式對信號賦值(必須使用"<="操作符給信號賦值)。

x<='1';

--x是位寬為1,值為'1'的信號。注意,當位寬為1時,位值放在單引號中。

y<="0111";

y是位寬為4,值為"0111"(MSB='0')的信號。注意,當位寬大於1時,位矢量值放在雙引號中。

w<="01111001"

w的位寬為8,值為"01111001"(MSB='1')的信號。

std_logic和std_logic_vector:它們是ieee 1164標准中引入的8邏輯值系統。不同於bit 數據類型,它可以取'0','1',不定態和

高阻態等8種不同的值。

'X' “強” 不確定值(綜合后為不確定值)

'0' “強” 0(綜合后為0)

'1' “強” 1(綜合后為1)

'Z' 高阻態(綜合后為三態緩沖器)

'w' “弱” 不確定值

'L' “弱” 0

'H' “弱” 1

'-' 不可能出現的情況

例:

signal x:std_logic;

--聲明x是位寬為1的std_logic類型的信號。

signal y:std_logic_vector(3 downto 0) :="0001";

聲明y是一個位寬為4的矢量,其中最左邊的一位是MSB。

對信號y賦初始值"0001"(可選)。

 

 

 

 std_ulogic和std_ulogic_vector:是ieee 1164標准中定義的具有9種邏輯值數據類型。std_logic類型是std_ulogic類型的一個子集。后者

引入了一個新的邏輯值'U',它代表初始不定值。與std_logic不同的是,std_ulogic中沒有指定兩個std_ulogic信號連接到同一個節點上發生沖突后的邏輯值,因此要避免兩個輸入信號進行直接連接。在確保兩根輸出線不會連接到一起的條件下,這種9個邏輯值系統可以用來檢測設計時可能發生的錯誤。

布爾類型(boolean):只有兩種取值,"真"或“假”。

整數(integer):32位的整數(取值范圍從-2147483647到2147483647)

自然數(natural):非負的整數(從0到2147483647)

實數(real):實數的取值范圍從-1x10^38到1x10^38,它是不可綜合的。

物理量字符(physical literal)型:用來表示諸如時間和電壓等物理量。在仿真時可以使用,但不可綜合。

字符(character)型:可以是單個或者一串ASCII字符。

signed(有符號數)和unsigned(無符號數):它們是在ieee庫std_logic_arith包集中定義的數據類型。

例:

x0<='0';--可以是bit,std_logic或者std_ulogic類型的值'0'

x1<='00011111'--可以是bit_vector,std_logic_vector,std_ulogic_vector,signed或unsigned類型的值。

x2<="0001_1111"--數字之間加下划線可以增加二進制的可讀性

x3<="101111"--二進制數"101111",表示十進制47

x4<=B"101111";--二進制數"101111",表示十進制47

x5<=O"57"

y<=1.2E-5; --實數,不可以綜合

q<=d after 10 ns;--物理量,不可綜合

例:

不同類型數據之間的合法與非法操作:

signal a:bit;

signal b:bit_vector(7 downto 0);

signal c:std_logic;

signal d:std_logic_vector(7 downto 0);

signal e: integer range 0 to 255;

……

a<=b(5);--合法(標量類型:bit)

b(0)<=a;--合法(標量類型:bit)

c<=d(5);--合法(標量類型:std_logic)

d(0)<=c;--合法(標量類型:std_logic)

a<=c;--非法(bit和std_logic數據類型不匹配)

b<=d;--非法(bit_vector和std_logic_vector數據類型不匹配)

e<=b;--非法(integer和bit_vector數據類型不匹配)

e<=d;--非法(integer和std_logic_vector數據類型不匹配)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM