天天看點

FPGA學習--VHDL基本結構

一個完整的VHDL程式,或者說設計實體,通常要求最低能為VHDL綜合器所支援,并能作為一個獨立的設計單元,即元件的形式而存在的VHDL程式。在VHDL程式中,通常包含

實體(ENTITY)、結構體(ARCHITECTURE)、配置(CONFIGURATION)、包集合(PACKAGE)和庫(LIBRARY)

5個部分。其中實體和結構體這兩個基本結構是必需的,他們可以構成最簡單的VHDL程式。

1、 實體

實體說明是對這個設計實體與外部電路進行接口的描述,它規定了設計單元的輸入輸出接口信号或引腳,是設計實體對外的一個通信界面。結構體用于描述此設計實體的邏輯結構和邏輯功能。

  ENTITY or2 IS    -------or2是實體名

  PORT(a,b:INSTD_LOGIC;  ------ PORT端口表

  C:OUTSTD_LOGIC);   

  END ENTITY or2;    -----ENTITY  實體名  IS”開始,語句“END  ENTITY  實體名;”結束。
           

2、 結構體

  結構體描述了基本設計單元(實體)的結構、行為、元件及内部連接配接關系,也就是說它定義了設計實體的功能,規定了設計實體的資料流程,制定了實體内部元件的連接配接關系。 結構體對其基本設計單元的輸入和輸出關系可用以下三種方式進行描述,即行為描述(基本設計單元的數學模型描述)、寄存器傳輸描述(資料流描述)和結構描述(邏輯元件連接配接描述)。

需要注意的是:結構體是對實體功能的具體描述,是以它一定要跟在實體的後面 。

ARCHITECTURE  結構體名   OF   實體名  IS

      [定義語句]

  BEGIN

      [功能描述語句]

  END   結構體名;
           

結構體信号定義語句必須放在關鍵詞ARCHITECTURE和BEGIN之間,用于對結構體内部将要使用的信号、常數、資料類型、元件、函數和過程加以說明。注意的是實體說明中定義的信号是外部信号,而結構體定義的信号為該結構體的内部信号,它隻能用于這個結構體中。

ARCHITECTURE  rtl  OF  muj  IS           --rtl:結構體名,muj實體名

    SIGNAL s1:BIT                                     --結構體信号定義語句

    SIGNAL s2,s3:STD_LOGIC_VECTOR (0 TO 3);
    …
BEGIN
    …                                                  --功能描述語句
END rtl;
           

在VHDL程式設計中,結構體是由多個BLOCK塊構成的,如果将結構體比做總電路原理圖,那麼,每個BLOCK塊則相當于一張子原理圖。

3、程序(PROCESS)

PROCESS結構是最能展現VHDL語言特色的語句。與BLOCK語句一樣,利用PROCESS語句結構可以描述一個功能獨立的電路。與BLOCK語句不同之處是,在系統仿真時,PROCESS結構中的語句是按順序逐條向下執行的,而不像BLOCK語句那樣并發執行。一個結構體中可以有多個并行運作的程序結構,每一個程序内部是由一系列順序語句來構成的。

PROCESS語句的結構:

  [程序标号] PROCESS [(敏感信号表)][IS]

   [程序說明語句]

  BEGIN

  順序描述語句

  END PROCESS [程序标号];

單程序以PROCESS開始,以END PROCESS結束。

  LIBRARYIEEE;

  USE IEEE.STD_LOGIC_1164.ALL;

  ENTITY nor2_v2 IS

      PORT(a,b:IN STD_LOGIC;

             y:OUT STD_LOGIC);

  END nor2_v2;

  ARCHITECTURE behave OF nor2_v2IS

  BEGIN

       PROCESS  (a,b)

     VARIABLE comb :STD_LOGIC_VECTOR(1 DOWNTO 0);

       BEGIN
           comb := a & b;                                           --&組合符号

           CASE comb IS

                WHEN "00"=> y <='1';

                WHEN "01"=> y <='0';

                WHEN "10"=> y <='0';

                WHEN "11"=> y <='0';

                WHEN OTHERS => y <='X';             --‘X’不定

           END CASE;

      END PROCESS;

END behave; 
  
           

4、子程式(SUBPROGRAM)

  子程式被調用時,首先要初始化,執行處理功能後,将處理結果傳遞給主程式。子程式内部的值不能保持,子程式傳回後才能被再次調用并初始化。

  子程式有兩種類型:過程(PROCEDURE)和函數(FUNCTION)。

 1.過程(PROCEDURE)

  過程語句的書寫格式為:

PROCEDURE 過程名(參數表)IS
      [說明部分]
  BEGIN
      過程語句部分
  ENDPROCEDURE 過程名;
           

2.函數

 FUNCTION  函數名  (參數表) RETURN  資料類型  IS
    [說明部分];
 BEGIN
    順序語句;
    RETURN [傳回變量名];
 END   RETURN   函數名;
           

5、程式包

程式包也叫包集合,主要用來存放各個設計都能共享的資料類型、子程式說明、屬性說明和元件說明等部分。設計者使用時隻要用USE子句進行說明即可。

程式包由兩部分組成:程式包首和程式包體。

程式包的一般書寫格式如下:

PACKAGE   程式包名   IS

END [PACKAGE] 程式包名;                           --程式包首
PACKAGE BODY 程式包名 IS
       ┇                                                                     --程式包體
   END [ PACKAGE BODY ] [程式包名];
           

6、預設配置

預設配置語句的基本格式為:

CONFIGURATION   配置名  OF  實體名  IS
      FOR  選配結構體名
      END   FOR
END   配置名;
           

繼續閱讀