當使用庫時,需要說明使用的庫名稱,同時需要說明庫中包集合的名稱及范圍; 每個實體都應獨立進行庫的說明;庫的說明應該在實體之前;經過說明后,實體和結構體就可以自動調用庫中的資源.
首先說明總庫,語句格式 library 庫名,例如 : library ieee;
其次調用總庫中的子庫,用 use調取,格式:USE 庫名范圍(或項目名); 如use ieee.std_logic_1164.all。
VHDL中庫的主要種類: IEEE庫 、STD庫 、ASIC庫、 work庫 、用戶定義庫 和IEEE庫: 含有IEEE的標準包集合“STD_LOGIC_1164”以及一些大公司提供的包集合;使用前必須說明; 例: library ieee; use ieee.std_logic_1164.all; 使用標準邏輯量的定義和運算; use ieee.std_logic_unsigned.all; 無符號數算術運算的定義; use ieee.std_logic_arith.all; 使用符號數算術運算的定義。
STD庫: 含有“STANDARD”包集合和“TEXTIO”包集合,使用前者時無需說明;
ASIC庫: 由各公司提供,存放與邏輯門一一對應的實體,用于ASIC設計的門級仿真,使用時需加以說明; 例 library altera; use altera.maxplus2.all; library lpm; use lpm.lpm_components.all;
WORK庫: WORK庫為現行作業庫,位于當前使用時設計文件的指定保存目錄; WORK使用時通常無須說明;但在結構設計中進行元件的宏調用時需要說明; 例:use work.all;
用戶定義庫: 由用戶自定義生成,使用時需說明(指定庫所在的路徑);
package 包集合:用于羅列VHDL語言中使用的類型定義、信號定義、常數定義、元件定義、函數定義和過程定義等(類似于C語言中的include語句),方便不同模塊的設計中公共定義的共享。
數字電路設計中經常使用的包集合: ieee.std_logic_1164 .all;邏輯量的定義 ieee.std_logic_arith.all; 數據轉換,邏輯判斷 ieee.std_logic_unsigned ;算術運算 std.textio ;
文本數據輸入/輸出格式 包集合在使用前必須采用use語句進行說明(在設計程序的最前面); 包集合可以由用戶自定義; 包的結構與定義:(用戶自定義的包集合) 包集合標題+(包集合體) 包集合標題: package 包集合名 is 說明語句; (只有名稱) end 包集合名; 包集合體: package body包集合名 is 說明語句; (完整定義) end 包集合名; 例:( 函數取自p.279 表4-38 ) library ieee; use ieee.std_logic_1164.all; packge upac is constant k: integer := 4; subtype cpu_bus is std_logic_vector(k-1downto 0); function conv_integer (x:std_logic_vector) return integer; end upac; packge body upac is function conv_integer (x: std_logic_vector) return integer is variable result: integer; begin result := 0; for I in x'range loop result :=result*2; case x(i) is when '0'|'L' => null; when '1'|'H' => result := result+1; when others => null; end case; end loop; return result; end conv_integer; end upac; 用戶自行編寫的包集合將自動存放于WORK庫中,使用時可采用下列語句調用 use work.upac.all; configuration 配置 在一個實體內可以編寫多種不同的構造體,通過配置語句來進行選擇; 配置語句格式: configuration 配置名 of 實體名 is for 選擇的構造體名 end for; end 配置名; 此語句可以為設計增加更大的靈活性,可以對不同構造體進行比較。