1. 程式人生 > >VHDL基礎2

VHDL基礎2

但是 type constant syntax div anti 如果 strong ack

Signals & Variables


VHDL 提供了 signalvariable 兩種對象來處理非靜態數據;提供了 constantgeneric 來處理靜態數據。

constantsignal 是全局的,可以在順序執行的代碼中,也可以在並發執行的代碼中;variable 是局部的,只能值順序代碼中,並且它們的值是不能向外傳遞的(如果想傳遞出去,必須先把這個變量值傳遞給一個信號,再由這個信號傳遞出去)。

constant

constant 可以定義在 package, entity, architecture 中,對應的作用域也不同。

  • 定義在 package 中的 constant 是真正的全局的,可以被所有調用該 package 的 entity 使用

  • 定義在 entity 中的 constant 對於該 entity 的所有 architecture 而言是全局的

  • 定義在 architecture 中的 constant 僅在該 architecture 中是全局的

signal

VHDL 中的 signal 代表的是邏輯電路中的 “硬”連線,既可以用於電路的輸入輸出端口,也可以用於 內部單元之間的連接。

variable

相比於 signal 是局部的,variable 只能在 process,function,procedure 中使用,而且對它的賦值是立即更新的,新的值可以在下一行代碼中立即使用。

Packages and Components


package

除了 component, function, procedure 之外,package 中還可以包含 TYPE, CONSTANT 的定義。

技術分享
1 PACKAGE package_name IS
2           (declarations)
3 END package_name;
4 
5 [PACKAGE BODY package_name IS
6           (delarations
7             and conments)
8 END package_name;]
技術分享

可以看到,語法包括兩部分,PACKAGEPACKAGE BODY

Component

一個 component 是一段完整的代碼(包括 library, entity, architecture 這些組成部分),如果將這些代碼聲明為一個 component,那麽就可以被其他電路調用,從而使代碼具有了層次化的結構。

使用 component 必須先聲明這個元件,然後再例化這個元件(類似 C++,變量先聲明,在定義)。聲明和例化都必須在 architecture 中進行。

declaration syntax
技術分享
1 COMPONENT component_name IS
2 --元件端口信息           
3           PORT(
4                      port_name: signa_type;
5                      port_name: signa_type;
6                      ...);
7 END COMPOMENT;
技術分享
instantiation(例化) syntax
1 例化名: component_name PORT MAP (port_list);

聲明元件時,可以有兩種方法:

  • 上面的方法,先聲明再例化

  • 使用 package 進行聲明,將 component 的聲明放在 package 中,則可以避免每次元件例化都要重復聲明

Functions and Procedure


function 和 procedure 統稱為 子程序,它們和 process 相似,內部包含的都是順序描述的代碼,通常使用相同的順序描述語句。但是,function 和 procedure 的存在主要是為了建庫,以達到代碼重用和共享的目的,當然它們也可以直接建立在主代碼中。

Function

在寫代碼的過程中,我們通常會遇到一些有共性的問題,我們希望實現這些功能的代碼可以被共享和重用,從而使代碼變得簡潔,易於理解,function 的建立和使用就能達到這個目睹。 function 中可以使用 if, case, loop 等語句,但是不能有 signalcomponent

Function Body
1 FUNCTION function_name [<參數列表>] RETURE 數據類型 IS
2            [說明部分]
3 
4 BEGIN
5           (順序語句)
6 END function_name;

其中,函數的參數列表:

1 <parameter list> =[CONSTANT] name : type;
2                  = SIGNAL    name : type;
Function Call

函數可以單獨構成表達式,也可以作為表達式的一部分

Function Location

函數可以存放在兩個地方:

  • Package 中,這時候,函數聲明在 package 中,函數定義在 package body 中

  • Main Code 中,既可以在 entity 中,也可以在 architecture 中

FUNCTION versus PROCEDURE Summary

  • function 有任意個輸入參數和一個返回值,輸入參數只能是 constant, signal

  • procedure 有任意個輸入/輸出/雙向參數,可以是 signal, variable, constant

  • function 可以作為表達式的一部分,procedure 直接調用

  • function 和 procedure 內部,wait 和 component 都不可綜合

  • function 和 procedure 的存放位置相同,經常位於 package 中,也可以在主代碼中

VHDL基礎2