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