本文介紹了一種硬件描述語言VHDL,以及它在描述數字電路時的結構。我們還將介紹一些介紹性的示例電路描述,并討論“std_logical”和“bit”數據類型之間的區別。
VHDL是數字電路設計中常用的硬件描述語言之一。VHDL代表VHSIC硬件描述語言。反過來,VHSIC代表超高速集成電路。
VHDL是1981年由美國國防部發起的。IBM和德州儀器等公司的合作導致VHDL于1985年發布了第一個版本。1984年,Xilinx發明了第一個FPGA,很快就在其產品中支持VHDL。從那時起,VHDL語言在數字電路設計、仿真和綜合方面已經發展成為一種成熟的語言。
在本文中,我們將簡要討論描述給定電路的VHDL代碼的一般結構。通過一些介紹性示例,我們還將熟悉一些常用的數據類型、操作符等。
VHDL的一般結構
讓我們考慮一個簡單的數字電路,如圖1所示。
圖1.一個簡單的數字電路。
此圖顯示有兩個輸入端口,a和b,以及輸出端口out 1。圖中顯示輸入和輸出端口有一點寬。電路的功能是要和兩個輸入端,并將結果放在輸出端口上。
VHDL使用類似的描述;但是,它有自己的語法。例如,它使用以下代碼行來描述該電路的輸入和輸出端口:
1 entity circuit_1 is 2 Port ( a : in STD_LOGIC; 3 b : in STD_LOGIC; 4
out1 : out STD_LOGIC); 5 end circuit_1;
讓我們分清這意味著什么,一行行。
第1行:代碼的第一行指定要描述的電路的任意名稱。在關鍵字“實體”和“is”之間的“電路1”一詞決定了該模塊的名稱。
第2至第4行:這些線路指定電路的輸入和輸出端口。將這些線路與圖1中的電路進行比較,我們發現該電路的端口及其特性列在關鍵字“port”之后。例如,第3行說我們有一個名為“b”的端口。此端口是一個輸入,如冒號后面的關鍵字“in”所示。
關鍵字“std_Logic”指定了什么?正如我們將在本文后面討論的那樣,std_Logic是VHDL中一種常用的數據類型。它可以用來描述一位數字信號。由于圖1中的所有輸入/輸出端口都將傳輸1或0,因此我們可以對這些端口使用std_logicdata類型。
第5行:這一行決定了“實體”語句的結尾。
因此,代碼的實體部分指定了1)要描述的電路的名稱,2)電路的端口及其特性,即輸入/輸出和這些端口要傳輸的數據類型。代碼的實體部分實際上描述了模塊與其周圍環境的接口。由討論的“實體”語句指定的上述電路的特性如圖1所示綠色。
除了電路與環境的接口外,我們還需要描述電路的功能。在圖1中,電路的功能是to和兩個輸入,并將結果放在輸出端口上。為了描述電路的操作,VHDL增加了一個“體系結構”部分,并將其與實體語句定義的電路1相關聯。描述該電路結構的vhdl代碼如下
6 architecture Behavioral of circuit_1 is 8 begin 9 out1
第6行:這一行為下一行將要描述的體系結構命名為“行為”。這個名稱介于關鍵字“Architecture”和“of”之間。它還將該體系結構與“電路1”相關聯。換句話說,這種架構將描述“電路1”的操作。
第8行:這指定了體系結構描述的開始。
第9行第9行使用VHDL的語法來描述電路的操作。兩個輸入a和b的AND在括號內找到,并使用賦值運算符“《=”將結果分配給輸出端口。
第10行這指定了體系結構描述的結束。如前所述,這些代碼行描述了電路的內部操作,這里是一個簡單的門(如圖1中藍色所示)。
把我們到目前為止討論的內容放在一起,我們幾乎完成了用VHDL描述“電路1”的工作。我們獲得以下代碼:
1 entity circuit_1 is 2 Port ( a : in STD_LOGIC; 3 b : in STD_LOGIC; 4
out1 : out STD_LOGIC); 5 end circuit_1; -
6 architecture Behavioral of circuit_1 is 8 begin 9 out1
但是,我們仍然需要增加幾行代碼。這些行將添加一個包含一些重要定義的庫,包括數據類型和運算符的定義。庫可以由幾個包組成(參見下面的圖2)。我們將不得不使一個給定庫的所需包對設計可見。
由于上面的示例使用數據類型“std_logal”,所以我們需要將“ieee”庫中的包“std_logic1164”添加到代碼中。注意,std_logicdata類型的邏輯運算符也在“std_logic1164”包中定義,否則我們必須使相應的包對代碼可見。最后的代碼是
1 library ieee; 2 use ieee.std_logic_1164.all 3 entity circuit_1 is 4 Port ( a : in STD_LOGIC; 5
b : in STD_LOGIC; 6 out1 : out STD_LOGIC); 7 end circuit_1; 8 architecture Behavioral of circuit_1 is 9 begin 10 out1
在這里,我們創建了兩條新的行來超越我們所創造的。第一行添加庫“IEEE”,第二行指定此庫中的包“std_logic1164”是必需的。因為“std_Logic”是一種常用的數據類型,所以我們幾乎總是需要將“IEEE”庫和“std_logic1164”包添加到VHDL代碼中。
。 。 。 。 。 。 。 。 。
發明內容
在本文中,我們討論了VHDL是什么,它是如何構造的,并介紹了如何使用它來描述數字電路的一些例子。您現在應該更好地理解以下幾點:
代碼的“實體”部分指定1)要描述的電路的名稱和2)電路的端口;它建立模塊與其周圍環境之間的接口。
代碼的“體系結構”部分描述了電路的內部操作。
VHDL庫包含重要的定義,包括數據類型和操作符的定義。庫本身可以由幾個包組成。
我們幾乎總是需要將“IEEE”庫和“std_logic1164”包添加到我們的VHDL代碼中。
在“std_Logic”數據類型的可能值中,我們通常使用‘0’、‘1’、‘Z’和‘-’。
評論
查看更多