vhdl介紹:
VHDL翻譯成中文就是超高速集成電路硬件描述語言,主要是應(yīng)用在數(shù)字電路的設(shè)計中。它在中國的應(yīng)用多數(shù)是用在FPGA/CPLD/EPLD的設(shè)計中。當然在一些實力較為雄厚的單位,它也被用來設(shè)計ASIC。
VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式、描述風格以及語法是十分類似于一般的計算機高級語言。VHDL的程序結(jié)構(gòu)特點是將一項工程設(shè)計,或稱設(shè)計實體(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部(或稱可視部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實體的內(nèi)部功能和算法完成部分。在對一個設(shè)計實體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計就可以直接調(diào)用這個實體。這種將設(shè)計實體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計的基本點。
vhdl特點:
1.功能強大、設(shè)計靈活
VHDL具有功能強大的語言結(jié)構(gòu),可以用簡潔明確的源代碼來描述復雜的邏輯控制。它具有多層次的設(shè)計描述功能,層層細化,最后可直接生成電路級描述。VHDL支持同步電路、異步電路和隨機電路的設(shè)計,這是其他硬件描述語言所不能比擬的。VHDL還支持各種設(shè)計方法,既支持自底向上的設(shè)計,又支持自頂向下的設(shè)計;既支持模塊化設(shè)計,又支持層次化設(shè)計。
2.支持廣泛、易于修改
由于VHDL已經(jīng)成為IEEE標準所規(guī)范的硬件描述語言,大多數(shù)EDA工具幾乎都支持VHDL,這為VHDL的進一步推廣和廣泛應(yīng)用奠定了基礎(chǔ)。在硬件電路設(shè)計過程中,主要的設(shè)計文件是用VHDL編寫的源代碼,因為VHDL易讀和結(jié)構(gòu)化,所以易于修改設(shè)計。
3.強大的系統(tǒng)硬件描述能力
VHDL具有多層次的設(shè)計描述功能,既可以描述系統(tǒng)級電路,又可以描述門級電路。而描述既可以采用行為描述、寄存器傳輸描述或結(jié)構(gòu)描述,也可以采用三者混合的混合級描述。另外,VHDL支持慣性延遲和傳輸延遲,還可以準確地建立硬件電路模型。VHDL支持預定義的和自定義的數(shù)據(jù)類型,給硬件描述帶來較大的自由度,使設(shè)計人員能夠方便地創(chuàng)建高層次的系統(tǒng)模型。
4.獨立于器件的設(shè)計、與工藝無關(guān)
設(shè)計人員用VHDL進行設(shè)計時,不需要首先考慮選擇完成設(shè)計的器件,就可以集中精力進行設(shè)計的優(yōu)化。當設(shè)計描述完成后,可以用多種不同的器件結(jié)構(gòu)來實現(xiàn)其功能。
5.很強的移植能力
VHDL是一種標準化的硬件描述語言,同一個設(shè)計描述可以被不同的工具所支持,使得設(shè)計描述的移植成為可能。
6.易于共享和復用
VHDL采用基于庫(Library)的設(shè)計方法,可以建立各種可再次利用的模塊。這些模塊可以預先設(shè)計或使用以前設(shè)計中的存檔模塊,將這些模塊存放到庫中,就可以在以后的設(shè)計中進行復用,可以使設(shè)計成果在設(shè)計人員之間進行交流和共享,減少硬件電路設(shè)計。
vhdl優(yōu)勢:
?。?)與其他的硬件描述語言相比,VHDL具有更強的行為描述能力,從而決定了他成為系統(tǒng)設(shè)計領(lǐng)域最佳的硬件描述語言。強大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計大規(guī)模電子系統(tǒng)的重要保證。
?。?)VHDL豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計早期就能查驗設(shè)計系統(tǒng)的功能可行性,隨時可對設(shè)計進行仿真模擬。
?。?)VHDL語句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計的分解和已有設(shè)計的再利用功能。符合市場需求的大規(guī)模系統(tǒng)高效,高速的完成必須有多人甚至多個開發(fā)組共同并行工作才能實現(xiàn)。
?。?)對于用VHDL完成的一個確定的設(shè)計,可以利用EDA工具進行邏輯綜合和優(yōu)化,并自動的把VHDL描述設(shè)計轉(zhuǎn)變成門級網(wǎng)表。
(5)VHDL對設(shè)計的描述具有相對獨立性,設(shè)計者可以不懂硬件的結(jié)構(gòu),也不必管理最終設(shè)計實現(xiàn)的目標器件是什么,而進行獨立的設(shè)計。
8位移位寄存器vhdl代碼:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
PORT (
data_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --輸入的數(shù)據(jù)
n : IN STD_LOGIC_VECTOR(2 DOWNTO 0); --移位的數(shù)量
dir : IN STD_LOGIC; --移動的方向 0:左 1:右
kind : IN STD_LOGIC_VECTOR(1 DOWNTO 0); --移動類型 00:算術(shù)移 01:邏輯移 10:循環(huán)移
clock : IN BIT; --手動時鐘PULSE
data_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --移位的結(jié)果
?。?
END shifter;
ARCHITECTURE behav of shifter IS
BEGIN
PROCESS (data_in, n, dir, kind)
VARIABLE x,y : STD_LOGIC_VECTOR(7 DOWNTO 0);
VARIABLE ctrl0,ctrl1,ctrl2 : STD_LOGIC_VECTOR (3 DOWNTO 0);
BEGIN
IF (clock‘EVENT AND clock = ’1‘)THEN
--產(chǎn)生控制向量ctrl
ctrl0 := n(0) & dir & kind(1) & kind(0);
ctrl1 := n(1) & dir & kind(1) & kind(0);
ctrl2 := n(2) & dir & kind(1) & kind(0);
CASE ctrl0 IS
WHEN “0000” | “0001” | “0010” | “0100” | “0101” | “0110” =》 x := data_in; --n=0時不移動
WHEN “1000” =》 x := data_in(6 DOWNTO 0) & data_in(0); --算術(shù)左移1位
WHEN “1001” =》 x := data_in(6 DOWNTO 0) & ’0‘; --邏輯左移1位
WHEN “1010” =》 x := data_in(6 DOWNTO 0) & data_in(7); --循環(huán)左移1位
WHEN “1100” =》 x := data_in(7) & data_in(7 DOWNTO 1); --算術(shù)右移1位
WHEN “1101” =》 x := ’0‘ & data_in(7 DOWNTO 1); --邏輯右移1位
WHEN “1110” =》 x := data_in(0) & data_in(7 DOWNTO 1); --循環(huán)右移1位
WHEN others =》 null;
END CASE;
CASE ctrl1 IS
WHEN “0000” | “0001” | “0010” | “0100” | “0101” | “0110” =》 y := x; --n=0時不移動
WHEN “1000” =》 y := x(5 DOWNTO 0) & x(0) & x(0); --算術(shù)左移2位
WHEN “1001” =》 y := x(5 DOWNTO 0) & “00”; --邏輯左移2位
WHEN “1010” =》 y := x(5 DOWNTO 0) & x(7 DOWNTO 6); --循環(huán)左移2位
WHEN “1100” =》 y := x(7) & x(7) & x(7 DOWNTO 2); --算術(shù)右移2位
WHEN “1101” =》 y := “00” & x(7 DOWNTO 2); --邏輯右移2位
WHEN “1110” =》 y := x(1 DOWNTO 0) & x(7 DOWNTO 2); --循環(huán)右移2位
WHEN others =》 null;
END CASE;
CASE ctrl2 IS
WHEN “0000” | “0001” | “0010” | “0100” | “0101” | “0110” =》 data_out 《= y; --n=0時不移動
WHEN “1000” =》 data_out 《= y(3 DOWNTO 0) & y(0) & y(0) & y(0) & y(0); --算術(shù)左移
評論