【FPGA】庫、包和子程序 過程 函數


庫和包

  • 一組相關的過程和函數可以匯集在一起,組成一個包;

  • 一個包可以在一些VHDL模型中共享;

  • 一個包可以包含用戶定義的數據類型和約束;

  • 庫是包的集合; 包和庫可視為函數、過程和數據類型的容器;

  • 包的另外一個重要特征是可包含不同用戶定義的元件。

 

Library(庫)

庫是經編譯后的數據的集合,包含一個或多個包

庫的分類

設計庫: STD庫 ;Work庫

資源庫: IEEE庫 ;Vital庫(面向ASIC的VHDL模型基准庫) ;用戶自定義庫

 

 

 

package(包)

包的主要用途是實現整個設計工程中信息的共享。

包的組成

  包的聲明

    類型聲明

    子程序聲明

  包體

    子程序定義

VHDL 的標准庫(std)有兩個內嵌包

  標准包

  TEXTIO


 

 

(1) IEEE庫

VHDL設計中最為常用的庫。

  4個程序包:std_logic_1164,std_ logic_ arith, std_ logic_ signed和std_ logic_ unsigned。

 

std_logic_1164程序包:包含std_logic、std_logic_vector等類型定義及其相關邏輯類運算子程序定義。

std_logic_arith程序包:包含std_logic類型數據的算術運算子程序定義。(如+-*移位比較等)

std_logic_signed程序包:std_logic_vector類型的符號數算術運算子程序定義。

std_logic_unsigned程序包: std_logic_vector類型的無符號數算術運算子程序定義。

 

使用這4個程序包必須在設計實體前顯式表達出來.

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

 

(2) std庫

std庫是VHDL語言的標准庫.庫中定義了standard和textio兩個標准程序包.

 

standard程序包中定義了VHDL的基本的數據類型.

  用戶在程序中可以隨時調用standard包中的內容,不需要作任何說明.

 

textio程序包中定義了對文本文件的讀和寫控制的數據類型和子程序.

  用戶在程序中調用textio程序包中的內容時,需要用use語句加以說明.

library std;

use std.textio.all;

 

 

(3)work庫

work庫是現行的作業庫,設計者所描述的VHDL語句經過編譯后在缺省狀態下將全部存放在work庫中.

當使用該庫時,不需要作任何說明.

但使用該庫中的程序包,需要用USE語句進行說明.

 

 

自定義程序包

程序包也叫包集合,主要用來存放各個設計都能共享的數據類型、常數、子程序說明和元件說明等部分。

  設計者使用時只要用USE語句進行說明即可。

 

程序包由兩部分組成:

  程序包首和程序包體。

 

程序包結構中,程序包體並非必須的。程序包首可以獨立定義和使用。

一個完整的程序包中,程序包首名和程序包體名是同一個名字.

 

1.程序包首

格式:

PACKAGE   程序包名 IS
       程序包首說明語句
END [PACKAGE] 程序包名;

程序包首說明部分包括程序包中的數據類型、信號、常量、子程序及元件說明。

這些說明是公用的,可供外部引用。

 

例5-38:

  PACKAGE pacl IS
    type byte is range 0 to 255subtype nibble is byte  range 0 to 15;
    constant byte_ff: byte:=255;
    signal addend: nibble;
    component  byte_adder is
     port(a,b:in byte;
          c:out byte;
          overflow:out boolean);
       end component;
 function my_function(a: byte)return byte;
    end  pacl;

 

2.程序包體

程序包體格式如下:

package  body  程序包名   IS
  程序包體說明語句及包體內容
end  [package  body] 程序包名;

 

程序包體規定子程序的實際功能,存放程序包首中說明的子程序.這些內容是專用的,不能被其他設計單元引用.

如果程序包首中沒有子程序的說明,則程序包體可以省去。

程序包體說明部分可以是USE語句,數據類型說明、子類型說明、子程序定義、子程序體及常數說明。

 

 

包體

包體用來存儲函數和過程的定義或實現。

包體通常和包聲明是聯系在一起的。

主要包括子程序的實現代碼。

 

 

 

 

 

 

 

 

 

工作庫 包含一個名為my_pack的包;

有一個名為 myadd 聲明在包中;

包體是可選的. 元件 myadd 在另外一個vhd中實現.

如下圖:

 

 

Myadd.vhd的實現

 

 

一個自定義的庫

庫名mylib

一般庫名設置為庫文件夾名或者文件名

包: mypack

庫文件需要添加到當前工程,實質庫為work庫,庫名不重要 應用

 

 

 

 

 

 

 

 

 

 

 

 

子程序

類似於其他語言中的子程序

可使代碼重復利用,不用重寫

每一次調用生成相對於的一個電路

 

與普通軟件中子程序調用的區別:

 

普通軟件子程序調用增加處理時間;

  VHDL中每調用一次子程序,其綜合后都將對應一個相應的電路模塊。子程序調用次數與綜合后的電路規模成正比。

設計中應嚴格控制子程序調用次數。

 

子程序的類型:

(1)函數(Function)

(2)過程(Procedure)

 

類似於其他語言中的子程序

可使代碼重復利用,不用重寫

每一次調用生成相對於的一個電路

VHDL提供函數和過程

  子程序中的VHDL代碼是順序語句,這意味着在子程序中只允許使用順序語句,並發語句、進程語句等是不允許出現的。

  在子程序中,只能聲明變量,不能聲明信號。

  在子程序中,不能使用wait語句。

 

函數

產生一個返回值

參數只能為in模式

傳遞的參數在函數內部只能使用不能修改(因為參數為in)

允許的參數數據類型為 constant或signal,默認constant

需要一個RETURN 語句

 

格式:

 

 

函數特征

函數由實參調用

Example:

  rising_edge(enable);

形參和實參必須匹配.

形參為constant,則實參可以是variable、signal、constant或表達式;形參為signal,實參要為signal.

 

過程

與函數類似

參數可以是 in, out, inout 模式

  輸入參數(in)的默認數據類型是constant

  輸出參數(out)或者inout參數默認數據類型variable

  參數對象可為 constant, variable and signal

其特征是過程中可以修改參數值(out,inout模式參數)

不需要RETURN語句

 

 

過程特征

過程調用參數需要一一對應,形參為constant,實參可以為signal、constant或variable;

形參若為signal或variable,則實參需對應一致的類型

作為獨立的語句進行調用

 

 

函數和過程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM