EDA硬體描述語言VHDL(二)

2021-10-03 02:41:01 字數 4111 閱讀 2410

乙個完整的vhdl程式**稱為設計實體。

(1)庫和程式包呼叫宣告語句構成的模組

(2)描述電路訊號埠和引數通道的實體模組

(3)具體描述電路功能的結構體模組

entity  實體名  is

[generic ( 引數名:資料型別 );]

[port ( 埠表:資料型別 );]

end entity 實體名;

(1)實體名

實體名最好根據相應電路的功能特性來確定(如:4位二進位制計數器counter4b)。不能應用eda軟體工具庫中已定義好的元件名作為實體名,不能用數字開頭作為實體名。

(2) 埠語句和埠訊號名

port()引導的埠說明語句是對乙個設計實體介面的說明及對設計實體與外部電路的介面通道的說明,其中包括對每一介面的輸入輸出模式和資料型別的定義。

(3)引數傳遞語句

引數傳遞語句generic()負責構建乙個影響電路規模或時序特性等引數的通道,同時也可以直接用generic語句定義一些引數。

(4)埠模式

● out :輸出埠。定義的通道為單向輸出模式。

● in :輸入埠。定義的通道為單向唯讀模式。

● inout :雙向埠。定義的通道確定為輸入輸出雙向埠。

● buffer :緩衝埠。當需要輸入資料時,只允許內部回讀輸出訊號,即允許反饋。buffer回讀的訊號不是外部輸入的,而是由內部產生、要向外輸出的訊號。

architecture  結構體名  of 實體名  is

[說明語句]

begin

[功能描述語句]

end architecture 結構體名;

(1)生成語句、(2)塊語句(3)程序語句(4)並行賦值語句(5)子程式呼叫語句(過程、函式)(6)元件例化語句

(1)資源庫:用於存放常規元件、標準模組、預定義資料型別等,如:ieee庫。

(2)設計庫:是一種符合vhdl標準的預定義庫。如work庫存放使用者設計和定義的設計單元及程式包等。

● ieee庫、 ● std庫、 ● work庫、 ● vital庫

ieee庫中的標準程式包主要包括std_logic_1164,numeric_bit和numeric_std等程式包。此外,還有一些程式包雖非ieee標準,但由於其已成事實上的工業標準,也都併入了ieee庫。這些程式包中,最常用的是synopsys 公司的std_logic_arith、std_logic_signed和std_logic_unsigned程式包。

vhdl語言標準定義了兩個標準程式包,即standard和textio程式包,它們都被收入在std庫中。由於std庫符合vhdl語言標準,在應用中不必如ieee庫那樣以顯式表達出來

如: library std; --開啟std庫 use std.standard.all; --使用std庫中所有內容

work庫用於存放使用者設計和定義的一些設計單元和程式包。work庫自動滿足vhdl語言標準,在實際呼叫中,不必以顯式預先說明。進行vhdl設計時,不允許在根目錄下進行,而是必須在某路徑上為此設定乙個資料夾,此資料夾預設儲存在work庫中。

vhdl的時序**庫,用於vhdl門級時序**。使用vital庫,可以提高vhdl門級時序模擬的精度,因而只在vhdl**器中使用。目前,fpga/cpld設計開發過程中,一般並不需要vital庫中的程式包,quartusⅱ不需要vital庫。

使用者還可以自己定義一些庫,用來存放設計中共用的一些程式包,這是設計人員自己建立的資源庫,可以提高設計的靈活性。

library 庫名;

use 庫名.程式包名.all;

例: library ieee;

use ieee.std_logic_1164.all;

use 庫名.程式包名.專案名 ; 

use 庫名.程式包名.all ;

例:library ieee ;

use ieee.std_logic_1164.std_ulogic ;

use ieee.std_logic_1164.rising_edge ;

configuration 配置名 of 實體名 is

for 為實體選配的結構體名

end for;

end 配置名;

數制基數表示的文字:用這種方式表示的數由五個部分組成。

signal d1,d2,d3,d4,d5, : integer range 0 to 255;

d1 <= 10#170# ; – (十進位制表示,等於 170)

d2 <= 16#fe# ; – (十六進製制表示,等於 254)

d3 <= 2#1111_1110#; – (二進位制表示,等於 254)

d4 <= 8#376# ; – (八進位制表示,等於 254)

d5 <= 16#a#e3 ; – (十六進製制表示,等於16#a000#)

識別符號是設計者在vhdl程式中自定義的,用於標識不同名稱的詞語。識別符號不分大小寫。

規則:有效的字元:包括26個大小寫英文本母,數字包括0~9 以及下劃線「」。

任何識別符號必須以英文本母開頭。

必須是單一下劃線「」,且其前後都必須有英文本母或數字。

識別符號中的英語字母不分大小寫。

(1)編輯好的vhdl程式,儲存檔案時,檔案字尾副檔名必須是「.vhd」

(2)考慮到eda軟體的限制性和呼叫的方便,程式的檔名與實體名一致(如:mux41a.vhd)。vhdl檔案取名大小寫不敏感。

(3)vhdl程式必須存入某資料夾中(非中文資料夾名),不能存在根目錄內或桌面上。

一般表述: constant 常數名:資料型別 := 表示式 ;

constant fbt : std_logic_vector := 「010110」 ;

constant datain : integer := 15;

●變數是乙個區域性量,只能在程序和子程式中使用。

● 變數的賦值是立即發生的,不存在任何延時。

● 主要作用是在程序中作為臨時的資料儲存單元。

● 變數的初始值用於**,但綜合時被忽略。

variable 變數名 : 資料型別 := 初始值 ; (初始值不是必須的)

例: variable a : integer range 0 to 15;

--變數a定義為整數,取值範圍是0到15

variable d : std_logic :=『1』;

--變數d定義為標準邏輯位資料型別,初始值是1

signal 訊號名: 資料型別 := 初始值 ;(初始值不是必須的)

訊號具有全域性性,訊號的使用和定義範圍是實體、結構體和程式包。在程序和子程式的順序語句中不允許定義訊號。(但允許賦值)

程序中只能將訊號列入敏感表,而不能將變數列入敏感表。

除了沒有方向說明以外,訊號與實體的埠概念是一致的。在實體中定義的埠,在其結構體中可以看成訊號,並加以使用。

訊號賦值:                              

目標訊號名<=表示式 after 時間量;

(1)表示式可以是乙個運算表示式,也可以是資料物件。

(2)資料資訊的傳入可以設定延時量。不設定時,也有δ延時。

siagnal a,b,c,y,z: integer;

……process (a,b,c)

begin

y <= a+b;

z <= c-a;

y <= b;

end process;

硬體描述語言VHDL 並行語句

並行語句是是硬體描述語言的特殊之處,這也是硬體描述語言不可少的一部分。硬體電路例如 匯流排,它需要多個輸入。這個時候,我們必須併發的給出匯流排上的資料。軟體程式語言也有併發,但是在效能要求不是苛刻的情形下,無需使用併發。軟體的併發由多執行緒和多程序來實現。在vhdl中,併發語句是同時執行的。它們的書...

硬體描述語言VHDL 元件例化

vhdl語言的一大特點是 自頂向下 進行硬體設計。這樣的方式能最大化利用介面的優點。從系統的觀點來看,這是層次化的設計,有利於擴充套件。元件例化,簡單來說就是將以前設計的實體當做本設計的乙個元件,然後利用vhdl語句將各元件之間的連線關係描述出來。元件例化語句由兩部分組成,一部分是元件定義,即將現成...

Verliog HDL硬體描述語言學習筆記

第一次寫,這算自己的 作,多少還是有點緊張。寫這篇文章主要有兩個目的 一是想記錄一下自己對於verliog的學習程序 二是想分享一下自己的一些學習心得。如果有什麼地方寫的不足的地方或者什麼不對的地方還請大家多多指教。以下所有內容僅僅屬於個人見解,歡迎交流。數字積體電路設計流程 還有在這裡我想問一下類...