文/方育紅,江漢大學(xué)數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院
VHDL在數(shù)字邏輯設(shè)計(jì)課程實(shí)驗(yàn)中應(yīng)用
文/方育紅,江漢大學(xué)數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院
VHDL語言是一種用于硬件電路設(shè)計(jì)的高級語言。它在80年代初期出現(xiàn),最初是由美國國防部開發(fā)出來供美國軍隊(duì)用來提高設(shè)計(jì)的可靠性和縮減開發(fā)周期的一種適用范圍較小的設(shè)計(jì)語言。作為一種硬件電路設(shè)計(jì)語言,VHDL在數(shù)字邏輯設(shè)計(jì)課程實(shí)驗(yàn)的應(yīng)用,發(fā)揮著十分重要的作用。
VHDL;數(shù)字邏輯設(shè)計(jì);硬件描述語言
VHDL全名Very-High-Speed Integrated Circuit Hardware Description Language,誕生于1982年。1987年底,VHDL被IEEE和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言 。自IEEE-1076(簡稱87版)之后,各EDA公司相繼推出自己的VHDL設(shè)計(jì)環(huán)境,或宣布自己的設(shè)計(jì)工具可以和VHDL接口。1993年,IEEE對VHDL進(jìn)行了修訂,從更高的抽象層次和系統(tǒng)描述能力上擴(kuò)展VHDL的內(nèi)容,公布了新版本的VHDL,即IEEE標(biāo)準(zhǔn)的1076-1993版本,簡稱93版。VHDL作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言,得到眾多EDA公司支持,在電子工程領(lǐng)域,已成為事實(shí)上的通用硬件描述語言。
VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式、描述風(fēng)格以及語法是十分類似于一般的計(jì)算機(jī)高級語言。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個(gè)元件,一個(gè)電路模塊或一個(gè)系統(tǒng))分成外部(或稱可視部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實(shí)體的內(nèi)部功能和算法完成部分。在對一個(gè)設(shè)計(jì)實(shí)體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就可以直接調(diào)用這個(gè)實(shí)體。這種將設(shè)計(jì)實(shí)體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計(jì)的基本點(diǎn)。
VHDL具有功能強(qiáng)大的語言結(jié)構(gòu),可以用簡潔明確的源代碼來描述復(fù)雜的邏輯控制。它具有多層次的設(shè)計(jì)描述功能,層層細(xì)化,最后可直接生成電路級描述。VHDL支持同步電路、異步電路和隨機(jī)電路的設(shè)計(jì),這是其他硬件描述語言所不能比擬的。VHDL還支持各種設(shè)計(jì)方法,既支持自底向上的設(shè)計(jì),又支持自頂向下的設(shè)計(jì);既支持模塊化設(shè)計(jì),又支持層次化設(shè)計(jì)。
下面用一個(gè)實(shí)例來說明采用VHDL語言設(shè)計(jì)一個(gè)四位可控的Johnson計(jì)數(shù)器,從中可以領(lǐng)略一下采用VHDL方法的風(fēng)格和特點(diǎn),此例所反映的設(shè)計(jì)過程也是筆者所指的軟實(shí)驗(yàn)臺所包含的具體內(nèi)容。設(shè)計(jì)模塊端口信號有:LEPT,左移控制;RIGHT,右移控制;STOP,停止計(jì)數(shù)控制;CLK,時(shí)鐘輸入端,Q3-Q0,計(jì)數(shù)器輸出端。設(shè)計(jì)采用VHDL輸入方式。該設(shè)計(jì)的VHDL代碼如下:
library IEEE;
use IEEE.std_logic_1164.all;
entity johnson is
port ( LEFT : in STD_LOGIC;
RIGHT : in STD_LOGIC;
STOP : in STD_LOGIC;
CLK : in STD_LOGIC;
Q : buffer STD_LOGIC_VECTOR (3 downto 0));
end johnson;
architecture johnson_arch of Johnson is
signal DIR: STD_LOGIC;
signal RUN: STD_LOGIC;
begin
process (CLK)
begin
if (CLK'event and CLK='1') then
if (RIGHT='0') then
DIR <= '0';
elsif (LEFT='0') then
DIR <= '1';
end if;
if (STOP='0') then
RUN <= '0';
elsif (LEFT='0' or RIGHT='0') then
RUN <= '1';
end if;
if (RUN='1') then
if (DIR='1') then
Q(3 downto 1) <= Q(2 downto 0);
Q(0) <= not Q(3);
else
Q(2 downto 0) <= Q(3 downto 1);
Q(3) <= not Q(0);
end if;
end if;
end if;
end process;
end johnson_arch;
從上面的VHDL的設(shè)計(jì)代碼可見:VHDL的設(shè)計(jì)文檔由三大部分組成,即庫的聲明,端口說明和結(jié)構(gòu)體設(shè)計(jì)描述。其中端口說明清晰的反映了所設(shè)計(jì)器件的輸入輸出性質(zhì),在結(jié)構(gòu)體設(shè)計(jì)描述中也清楚的描述了器件所完成的邏輯功能。這是傳統(tǒng)的采用SSI,MSI等標(biāo)準(zhǔn)規(guī)格器件設(shè)計(jì)所沒有的優(yōu)點(diǎn)。
VHDL學(xué)習(xí)過程中,應(yīng)加強(qiáng)硬件概念的理解,沒有硬件概念或是硬件概念不強(qiáng),在設(shè)計(jì)時(shí),往往會(huì)將VHDL設(shè)計(jì)以軟件編程的方式來處理,而得出一些不可思議的結(jié)果。
作為一門硬件描述語言,VHDL幾乎可以用來描述現(xiàn)有的大型系統(tǒng)數(shù)字電路、算法以及其它設(shè)計(jì)。但是,限于目前綜合工具的水平,VHDL中的許多語法還不能支持,綜合時(shí)就無法達(dá)到如此精度,因此這條語句主要用來編寫測試激勵(lì),而很少出現(xiàn)在設(shè)計(jì)實(shí)體中。類似的情況還有很多,目前VHDL設(shè)計(jì)使用的也只是整個(gè)標(biāo)準(zhǔn)中的一部分,這也正是VHDL的“可綜合子集”性質(zhì),它一定程度上限制了VHDL的廣泛應(yīng)用,但是隨著綜合技術(shù)的發(fā)展,這種情況會(huì)逐漸得以改善,VHDL也將在各個(gè)領(lǐng)域中發(fā)揮出愈來愈重要的作用。
[1]任曉東等編著,CPLD/FPGA高級應(yīng)用開發(fā)指南[M].北京:電子工業(yè)出版社,2003.
[2]李國麗等編著,EDA與數(shù)字系統(tǒng)設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2004.