庫和包
-
一組相關的過程和函數可以匯集在一起,組成一個包;
-
一個包可以在一些VHDL模型中共享;
-
一個包可以包含用戶定義的數據類型和約束;
-
庫是包的集合; 包和庫可視為函數、過程和數據類型的容器;
-
包的另外一個重要特征是可包含不同用戶定義的元件。
Library(庫)
庫是經編譯后的數據的集合,包含一個或多個包
庫的分類
設計庫: STD庫 ;Work庫
資源庫: IEEE庫 ;Vital庫(面向ASIC的VHDL模型基准庫) ;用戶自定義庫
package(包)
包的主要用途是實現整個設計工程中信息的共享。
包的組成
包的聲明
類型聲明
子程序聲明
包體
子程序定義
VHDL 的標准庫(std)有兩個內嵌包
標准包
TEXTIO
(1) IEEE庫
VHDL設計中最為常用的庫。
4個程序包:std_logic_1164,std_ logic_ arith, std_ logic_ signed和std_ logic_ unsigned。
std_logic_1164程序包:包含std_logic、std_logic_vector等類型定義及其相關邏輯類運算子程序定義。
std_logic_arith程序包:包含std_logic類型數據的算術運算子程序定義。(如+-*移位比較等)
std_logic_signed程序包:std_logic_vector類型的符號數算術運算子程序定義。
std_logic_unsigned程序包: std_logic_vector類型的無符號數算術運算子程序定義。
使用這4個程序包必須在設計實體前顯式表達出來.
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
(2) std庫
std庫是VHDL語言的標准庫.庫中定義了standard和textio兩個標准程序包.
standard程序包中定義了VHDL的基本的數據類型.
用戶在程序中可以隨時調用standard包中的內容,不需要作任何說明.
textio程序包中定義了對文本文件的讀和寫控制的數據類型和子程序.
用戶在程序中調用textio程序包中的內容時,需要用use語句加以說明.
library std; use std.textio.all;
(3)work庫
work庫是現行的作業庫,設計者所描述的VHDL語句經過編譯后在缺省狀態下將全部存放在work庫中.
當使用該庫時,不需要作任何說明.
但使用該庫中的程序包,需要用USE語句進行說明.
自定義程序包
程序包也叫包集合,主要用來存放各個設計都能共享的數據類型、常數、子程序說明和元件說明等部分。
設計者使用時只要用USE語句進行說明即可。
程序包由兩部分組成:
程序包首和程序包體。
程序包結構中,程序包體並非必須的。程序包首可以獨立定義和使用。
一個完整的程序包中,程序包首名和程序包體名是同一個名字.
1.程序包首
格式:
PACKAGE 程序包名 IS 程序包首說明語句 END [PACKAGE] 程序包名;
程序包首說明部分包括程序包中的數據類型、信號、常量、子程序及元件說明。
這些說明是公用的,可供外部引用。
例5-38:
PACKAGE pacl IS type byte is range 0 to 255; subtype nibble is byte range 0 to 15; constant byte_ff: byte:=255; signal addend: nibble; component byte_adder is port(a,b:in byte; c:out byte; overflow:out boolean); end component; function my_function(a: byte)return byte; end pacl;
2.程序包體
程序包體格式如下:
package body 程序包名 IS 程序包體說明語句及包體內容 end [package body] 程序包名;
程序包體規定子程序的實際功能,存放程序包首中說明的子程序.這些內容是專用的,不能被其他設計單元引用.
如果程序包首中沒有子程序的說明,則程序包體可以省去。
程序包體說明部分可以是USE語句,數據類型說明、子類型說明、子程序定義、子程序體及常數說明。
包體
包體用來存儲函數和過程的定義或實現。
包體通常和包聲明是聯系在一起的。
主要包括子程序的實現代碼。
工作庫 包含一個名為my_pack的包;
有一個名為 myadd 聲明在包中;
包體是可選的. 元件 myadd 在另外一個vhd中實現.
如下圖:
Myadd.vhd的實現
一個自定義的庫
庫名mylib
一般庫名設置為庫文件夾名或者文件名
包: mypack
庫文件需要添加到當前工程,實質庫為work庫,庫名不重要 應用
子程序
類似於其他語言中的子程序
可使代碼重復利用,不用重寫
每一次調用生成相對於的一個電路
與普通軟件中子程序調用的區別:
普通軟件子程序調用增加處理時間;
VHDL中每調用一次子程序,其綜合后都將對應一個相應的電路模塊。子程序調用次數與綜合后的電路規模成正比。
設計中應嚴格控制子程序調用次數。
子程序的類型:
(1)函數(Function)
(2)過程(Procedure)
類似於其他語言中的子程序
可使代碼重復利用,不用重寫
每一次調用生成相對於的一個電路
VHDL提供函數和過程
子程序中的VHDL代碼是順序語句,這意味着在子程序中只允許使用順序語句,並發語句、進程語句等是不允許出現的。
在子程序中,只能聲明變量,不能聲明信號。
在子程序中,不能使用wait語句。
函數
產生一個返回值
參數只能為in模式
傳遞的參數在函數內部只能使用不能修改(因為參數為in)
允許的參數數據類型為 constant或signal,默認constant
需要一個RETURN 語句
格式:
函數特征
函數由實參調用
Example:
rising_edge(enable);
形參和實參必須匹配.
形參為constant,則實參可以是variable、signal、constant或表達式;形參為signal,實參要為signal.
過程
與函數類似
參數可以是 in, out, inout 模式
輸入參數(in)的默認數據類型是constant
輸出參數(out)或者inout參數默認數據類型variable
參數對象可為 constant, variable and signal
其特征是過程中可以修改參數值(out,inout模式參數)
不需要RETURN語句
過程特征
過程調用參數需要一一對應,形參為constant,實參可以為signal、constant或variable;
形參若為signal或variable,則實參需對應一致的類型
作為獨立的語句進行調用
函數和過程