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數據類型不匹配)