|
在定義電路的輸入/輸出端口時,有時需把端口定義為矢量陣列,而在ENTITY中不允許使用TYPE進行類型定義,所以必須在包集(PACKAGE)中根據端口的具體信號特征建立用戶自定義的數據類型,該數據類型可以供包括ENTITY在內的整個設計使用。
—————————————PACKAGE———————————-
library ieee;
use ieee.std_logic_1164.all;
——————————————
PACKAGE my_data_types IS
TYPE vector_array IS ARRAY (natural range <>) OF STD_LOGIC_VECTOR(7 DOWNTO 0); –聲明8位的數組
END my_data_types;
———————————–Main Code—————————————
library ieee;
use ieee.std_logic_1164.all;
use work.my_data_types.all; –用戶自定義包集
——————————————————————
ENTITY mux IS
PORT (inp: IN vector_array(0 to 3);
END mux;
——————————————————————————-
5.有符號數和無符號數
要使用SIGNED和UNSIGNED類型數據,必須在代碼開始部分聲明ieee庫中的包集std_logic_arith。它們支持算術運算但不支持邏輯運算。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
……
SIGNAL a: IN SIGNED (7 DOWNTO 0);
SIGNAL b: IN SIGNED (7 DOWNTO 0);
SIGNAL x: IN SIGNED (7 DOWNTO 0);
……
v <= a + b;
w <= a AND b; –非法(不支持邏輯運算)
——————————————————————————-
STD_LOGIC_VECTOR類型的數據不能直接進行算術運算,只有聲明了std_logic_signed和std_logic_unsigned兩個包集后才可以像SIGNED和UNSIGNED類型的數據一樣進行算術運算。
6.數據類型轉換
在ieee庫的std_logic_arith包集中提供了許多數據類型轉換函數:
1. conv_integer(p): 將數據類型為INTEGER,UNSIGNED,SIGNED,STD_ULOGIC或STD_LOGIC的操作數p轉換成INTEGER類型。不包含STD_LOGIC_VECTOR。
2. conv_unsigned(p,b):將數據類型為INTEGER,UNSIGNED,SIGNED或STD_ULOGIC的操作數p轉換成位寬為b的UNSIGNED類型數據。
3. conv_signed(p,b):將數據類型為INTEGER, UNSIGNED, SIGNED或STD_ULOGIC的操作數p轉換成位寬為b的SIGNED類型的數據。 |
|