vhdl基本語法(簡略)A版_第1頁
vhdl基本語法(簡略)A版_第2頁
vhdl基本語法(簡略)A版_第3頁
vhdl基本語法(簡略)A版_第4頁
vhdl基本語法(簡略)A版_第5頁
已閱讀5頁,還剩58頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

VHDL硬件描述語言

1.1VHDL概述

1.11VHDL的特點

VHDL語言作為一種標準的硬件描述語言,具有結構嚴謹、描述能力強的特點,由于

VHDL語言來源于C、Fortran等計算機高級語言,在VHDL語言中保留了部分高級語言的原

語句,如if語句、子程序和函數等,便于閱讀和應用。具體特點如下:

1.支持從系統級到門級電路的描述,既支持自底向上(bottom-up)的設計也支持從頂向下

(top-down)的設計,同時也卻結構、行為和數據流三種形式的混合描述。

2.VHDL的設計單元的基本組成部分是實體(entity)和結構體(architecture),實體包含設

計系統單元的輸入和輸出端口信息,結構體描述設計單元的組成和行為,便于各模塊之間數

據傳送。利用單兀(componet)、塊(block)、過程(procure)和函數(function)等語句,

用結構化層次化的描述方法,使復雜電路的設計更加簡便。采用包的概念,便于標準設計文

檔資料的保存和廣泛使用。

3.VHDL語言有常數、信號和變量三種數據對象,所個數據對象都要指定數據類型,VHDL

的數據類型豐富,有數值數據類型和邏輯數據類型,有位型和位向量型。既支持預定義的數

據類型,又支持自定義的數據類型,其定義的數據類型具有明確的物理意義,VHDL是強類

型語言。

4.數字系統有組合電路和時序電路,時序電路又分為同步和異步,電路的動作行為有并行

和串行動作,VHDL語言常用語句分為并行語句和)|質序語句,完全能夠描述復雜的電路結構

和行為狀態。

1.12VHDL語言的基本結構

VHDL語言是數字電路的硬件描述語言,在語句結構上吸取了Fortran和C等計算機高級

語言的語句,如IF語句、循環語句、函數和子程序等,只要具備高級語言的編程技能和數字

邏輯電路的設計基礎,就可以在較短的時間內學會VHDL語言。但是VHDL畢竟是一種描述

數字電路的工業標準語言,該種語言的標識符號、數據類型、數據對象以及描述各種電路的

語句形式和程序結構等方面具有特殊的規定,如果一開始就介紹它的語法規定,會使初學者

感到枯燥無味,不得要領。較好的辦法是選取幾個具有代表性的VHDL程序實例,先介紹整

體的程序結構,再逐步介紹程序中的語法概念。

一個VHDL語言的設計程序描述的是一個電路單元,這個電路單元可以是一個門電路,

或者是一個計數器,也可以是一個CPU。一般情況下,一個完整的VHDL語言程序至少要包含程序包、實

體和結構體三個部分。實體給出電路單元的外部輸入輸出接口信號和引腳信

息,結構體給出了電路單元的內螂構和信號的行為特點.程序包定義在設計結構體和實體

中將用到的常數、數據類型、子程序和設計好的電路單元等。

一位全加器的邏輯表達式是:

S=A?B十Ci

Co=AB+ACi+BCi

全加器的VHDL程序的文件名稱是fuHadder.VHD,其中VHD是VHDL程序的文件擴展名,

程序如下:

LIBRARYIEEE;-IEEE標準庫

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYfulladderIS-fulladder是實體名稱

PORT(

A,B,Ci:INSTD_L0GIC;-定義輸入輸出信號

Co,S:OUTSTD_LOGIC

);

ENDfulladder;

ARCHITECTUREaddstrOFfulladderIS-addstr是結構體名

BEGIN

S<=AXORBXORCi;

Co<=(AANDB)OR(AANDCi)OR(BANDCi);

ENDaddstr;

從這個例子中可以看出,一段完整的VHDL代碼主要由以下幾部分組成:

第一部分是程序包,程序包是用VHDL語言編寫的共享文件,定義在設計結構體和實體

中將用到的常數、數據類型、子程序和設計好的電路單元等,放在文件目錄名稱為IEEE的

程序包庫中。

第二部分是程序的實體,定義電路單元的輸入輸出引腳信號。程序的實體名稱fodder

是任意取的,但是必須與VHDL程序的文件名稱相同。實體的標識符是ENTITY,實體以

ENTITY開頭,以END結束。其中,定義A、B、Ci是輸入信號引腳,定義C。和S是輸出信號引腳。

第三部分是程序的結構體,具體描述電路的內部結構和邏輯功能。結構體有三種描述方

式,分別是行為(BEHAVIOR)描述、流(DATAFLOW)描^^15型口結構(STRUCTURE)

描述方式,其中數據流(DATAFLOW)描述方式又稱為寄存器(RTL)描述方式,例中結

構體的描述方式屬于數據混S述方式。結構體以標識符ARCHITECTURE開頭,以END結

尾。結構體的名稱addstr是任意取的。

小提示:

VHDL每條語句是以分號;作為結束符的,并且VHDL對空格是不敏感的,所以符合

之間空格的數目是可以自己設定的。可以按自己的習慣任意添加,增強代碼可讀性。

1.1.3VHDL語言的實體(ENTITY)說明語句

實體是VHDL程序設計中最基本的組成部分,在實體中定義了該設計芯片中所需要的輸

入/輸出信號引腳。端口信號名稱表示芯片的輸入輸出信號的引腳名,這種端口信號通

常被

稱為外部信號,信號的輸入/輸出狀態被稱為端口模式,在實體中還定義信號的數據類型

O

實體說明語句的格式為:ENTITY實體名稱ISGENERIC(

常數名稱1:類型片缺省值;

常數名稱2:類型『缺省值;

常數名稱N:類型.缺省值1;

);

PORT(

端口信號名稱I:輸入/輸出狀態數據類型;

端口信號名稱2:輸入/輸出狀態數據類型;

端口信號名稱N:輸入輸出狀態數據類型

);

END實體名稱;

小提示:

VHDL語言具有87標準與93標準兩種格式,以上為VHDL的87標準,對于93標準要

使用ENDENTITY實體名稱;結束實體。注意為了保證代碼的可綜合性與通用性,最

好采用87標準的VHDL格式,有些EDA工具不一定支持93標準的VHDL語言格式。

(QuartusII支持VHDL93、87標準)

類屬GENERIC常用來定義實體端口大小,數據寬度,元件例化數目等。T殳在簡單的

設計中不常用。

例112f同步十六進制加法計數器,帶有計數控制、異步清零、和進位輸出等功能。

電路有三個輸入端和五個輸出端,分別是時鐘脈沖輸入端CLK,計數器狀態控制端EN,異

步清零控制端Rd,四位計數輸出端Q0,Q1,Q2,Q3和一個進位輸出端Co。當計數器輸出

0000~11100^,8=0,只有當計數器輸出1111時,8=1。

該設計的實體部分如下:

ENTITYcntm16IS

PORT(

EN:INSTD_LOGIC;

Rd:INSTD_LOGIC;

CLK:INSTD_LOGIC;

Co:OUTSTD_LOGIC;

Q:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDcntm16;

1.實體名稱表示所設計電路的電路名稱,必須與VHDL文件名相同,實體名稱是

所存的VHDL文件名必須是"cntm16.VHD;

2.端口信號名稱表示芯片的輸入/輸出信號的引腳名,這種端口信號通常被稱為外部信號,

端口信號名稱可以表示f言號,也可以表示一組信號(BUS),由數觸型定義,如

EN,Rd,CLK,8分別表示計數允許信號,異步清零信號,時鐘輸入信號和進位輸出

信號,Q是一組輸出信號,用來表示四位同步二進制計數器的四位計數輸出信號。

3.端口信號輸入/輸出狀態有以下幾種狀態:

IN信號進入電路單元。

OUT信號從電路單元輸出。

INOUT信號是雙向的,既可以進入電路單元也可以從電路單元輸出。

BUFFER信號從電路單元輸出,同時在電路單元內部可以使用該輸出信號。

小提示:

OUT與BUFFER信號的區別就在于信號是否往內部有反饋,將輸出端口定義為

BUFFER型,可以省去一個用于中間運算的一個臨時信號,但是并不推薦這么做。

4.端口數據類型(TYPE)定義端口信號的數據類型,在VHDL中,常用的端口信號數據類

型如下:

(1)位(BIT)型:表示T立信號的值,可以取值。和T,放在單引號里面表示,

如XV='1',Y<='0;

(2)位向量(BIT_VECTOR)型:表示一組位型信號值,在使用時必須標明位向量的寬

度(個數)和位向量的排列順序,例如:Q:OUTBIT_VECTOR(3downto0),表示

Q3,Q2,Q1,Q。四個位型信號。位向量的信號值放在雙引號里面表示,例如Q<=

,10000;,

(3)標準邏輯位(STD_LOG.C)型:IEEE標準的邏輯類型,它是BIT型數據類型的擴展,

可以取值U,X,0,,T,Z,W,'L',H',?

等。

(4)標準邏輯位向量(STD_LOGIC_VECTOR)型:IEEE標準的邏輯向量,表示一組標

準邏輯悝信身直。

VHDL是與類型高度相關的語言,不允許將一種數據類型的信號賦予另一種數據類型的

信號。除了上述介紹的數據類型外,還有其他多種數據類型用于定義內部信號和變量,請參

見1-2節。

小提示:

相同類型(模型相同,數據類型相同)的端口可以寫在同一行,如:

ENTITYcntm16IS

PORT(

EN,Rd.CLK:INSTD_LOGIC;

Co:OUTSTD_LOGIC;

Q:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDcntm16;

此外要注意,最后一個端口結尾沒有分號!

1.1.4VHDL語言的結構體(ARCHITECTURE)

結構體是VHDL程序設計中的最主要組成部分,是描述設計單元的具體結構和功能,在

程序中,結構體放在實體的后面。每一個結構體都有名稱,結構體的名稱是由設計者任取的,

結構體是以標識符ARCHITECTURE開頭,以END結尾。結構體可以有三種描述方式,分別

是行為(BEAVHER)描述方式、數據流(DATAFLOW)描述方式和結構(STRUCTURE)

描述方式,其中數據流(DATAFLOW)描述方式又稱為寄存器(RTL)描述方式。不同的

結構體采用不同的描述語句。

結構體的一般格式為:

ARCHITECTURE結構體名OF實體名稱IS

說明語句

BEGIN

電路描述語句

END結構體名;

結構體說明語句是對結構體中用到的數據對象的數據類型、元件和子程序等加以說明。

電路描述語句用并行語句來描述電路的各種功能,這些并行語句包括并行信號賦值語句、

條件賦值(WHEN-ELSE)語句、進程(PROCESS)語句、元件例化(COMPONETMAP)語

句和子程序調用語句等。

小提示:

結構體中定義的參數(信號,變量等)名稱不能與其所屬實體的端口名重名。

結構體的結束語句也可以寫成ENDARCHITECTURE結構體名,或者簡寫為END。

例設計程序的結構體部分如下:

ARCHITECTUREcounstrOFcntm16IS

BEGIN

Co<=.1.WHEN(Q="1111"ANDEN=.1.)ELSE.0.;一條件賦值語句

PROCESS(CLK,Rd)-PROCESS語句

BEGIN

IF(Rd=.O.)THEN-IF語句

Q<="0000”;

ELSIF(CLK.EVENTANDCLK=1.)THEN-CLK上升沿計數

IF(EN=.1.)then

Q<=Q+1;

ENDIF;

ENDIF;

ENDPROCESS;

ENDcounstr;

結構體的名稱是counstr,該結構體屬于行為描述方式,采用多種描述語句,如進程

(PROGRESS)語句,條件賦值語句(WHEN-ELSE)J耐語句(IF-ELSE)等,這些語

句的具體用法參見1-3節相關內容。

小提示:

一個實體可以有多個結構體(反之不成立),多個結構體代表實體實現的多種方式,同一

個實體的各結構體之間地位等同,可以采用配置語句X等特定的某個結構體關聯到實體,

樣使同一個實體可以設計為多種實現功能,但是筆者不推薦使用多個結構體來實現實體

能,因為在綜合時,配置語句是不可綜合的,所以盡量每個實體僅一個結構體表述完整

I

這樣比較清晰,整體化。所以就不介紹配置語句了,有興趣的讀者請查閱相關教材。

1.1.5程序包(PACKAGE)、庫(LIBRARY)和USE語句

程序包定義了一組標準的數據類型說明、常量說明、元件說明、子程序說明和函數說明

等,它是一個用VHDL語言描寫的一段程序,可以供其他設計單元調用。它如同C語言中的1H文件一樣,

定義了一些數據類型說明和函數說明。在一個設計單元中,在實體部分所定義的數據類型、常數和子程序

在相應的結構體中是可以被使用的(可見的),但是在T實體的說明部分稚竽勾體部分中定義的轆類型、

常量及子程序卻不能被其它設計單元的實持Qi新勾體使用(不可見)。程序包就是為了使一組類型說明、常

量說明和子程序說明對多個設計單元都可以使用而提供的一種結構。程序包分為兩大類,即VHDL預定義

標準程序包和用戶定義的程序包。VHDL設計中常用的標準程序包的名稱和內容如見表1-1-3所列。用戶

定義的程序包是設計者把預先設計好的電路單元設計定義在一個程序包中,放在指定的庫中,以供其它設

計單元調用,如果在設計中要使用某個程序包中的內容時,可以用USE語句打開該程序包。有關程序包的

設計方法參見節的內容。

庫(LIBRARY)是專門用于存放預先編譯好的程序包的地方,它實際上對應一個文件

目錄,程序包的文件就存放在此目錄中。庫名與目錄名的對應關系可以在編譯程序中指定,

庫的說明總是放在設計單元的最前面。例如,對IEEE標準庫的調用格式為:

LIBRARYIEEE;

1-1-3IEEE兩個標準庫STD和IEEE中的程序包

表1-1-3IEEE兩個標準庫程序包名定義的內容

STD和IEEE中的程序包庫

STDSTANDARD定義VHDL的數據類型,如

TEXTIOBIT,BIT■一VECTOR等

TEXT讀寫控制數據類型和

子程序等

IEEESTD_LOGIC_1164定義STD_LOG,

STD_LOGIC_VECTOR等

STD_LOGIC_ARITH定義有符號與無符號數據類型,基于這些數

據類型的算術運算符,如

“/"SHL,SHR等

STD_LOGIC_SIGNED定義基于STD_LOGIC與

STD_LOGIC_VECTOR數據類型上的有符

號的算術運算

STD_LOGIC_UNSIGNED定義基二二STD_LOGIC與

STD_LOGIJVECTOR類SUL的無符號的

算木塔算

1.常用的庫和包的種類

VHDL程序中常用的庫有STD庫、IEEE庫和WORK等。其中STD和IEEE庫中的標準程序

包是由提供EDA工具的廠商提供的,用戶在設計程序時可以用相應的語句調用。

(1)STD庫

STD庫是VHDL語言標準庫,庫中定義了STANDARD和TEXT。兩個標準程序包。

STANDARD魴包中定義了VHDL的基本的麻類型,如酒(CHARACTER)、罌攵

(INTEGER)、(REAL)、彳邂(BIT)和布爾量(BOOLEAN)等。用戶在不辨中

可以隨時調用STANDARD包中的內容,不需要任^說明。TEXTQ程序包中定義了對文本

文件的讀和寫控制的數據類型和子程序。用戶在程序中調用TEXTQ包中的內容,需要USE

語句加以說明。

(2)IEEE庫

IEEE標準庫是存放用VHDL語言編寫的多個標準程序包的目錄,IEEE庫中的程序包有

STD_LOGIC_1164,STD_LOGIC_ARITH,STD_LOGIC_UNSIGNED和

STD_LOGIC_SIGNED等程序包。其中STD_L0GIC_1164是IEEE標準的程序包,定義了

STD,OGIC和STD,OGQVECTOR等多種數據類型,以及多種邏輯運算符子程序和癱類型轉換子程

序等。STD_LOGIC_ARITH和STD_LOGIC_UNSINGED等程序包是

SYNOPSYS公司提供的,包中定義了SIGNED和UNSIGNED數據類型以及基于這些數據類型的運算符

子程序。用戶使用包中的內容,需要用USE語句加以說明。

(3)WORK庫

WORK庫是用戶進行VHDL設計的當前目錄,用于存放用戶設計好的設計單元和程序包。

在使用該庫中的內容時不需要進行任何說明。

2.庫、包和USE語句的格式

用戶在用到標準程序包中內容時,除了STANDARD程序包以外,者曖在設計程序中加

以說明,首先用UBRARY語句說明程序包所在的庫名,再用USE語句說明具體使用哪一個程序包和具體

的子程序名。各種標準程序包中的內容太多,初學者一時之間難以全面了解,

可以用下面的格式,以免出現不必要的錯誤。

庫和包的調用格式:

LIBFiARYIEEE;

USEIEEE.STD_L0GIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

小提示:

以下四個語句最好寫任何模塊的時候先加上,以免出現庫沒包含全的問題。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

1.2VHDL的數據類型和數據對象

VHDL語言和其它高級語言一樣,除了具有一定的語法結構外,還定義了常數、變量

和信號等三種數據對象,每個數據對象要求指定數據類型,每一種數據類型具有特定的物理

意義.由于VHDL語言是強類型語言,不同的語句類型的數據之間不能進行運算和賦值,我們有必要詳細

了解VHDL語言的數據類型和數據對象。

1.2.1VHDL的標記

一個完整的VHDL語句可以有下列幾個部分組成:標識符、保留字(ReservedWords).

界符、常數、賦值符號和注群(Comments),所有這絡面為標記。

1.標識符

標識符是程序員為了書寫程序肺淀的一些詞,用來表示常數、變量、信號、子程序、

結構體和實體等名稱。VHDL基本的標識符組成的規則如下:

(1)標識符由26個英文字母、數字0,1,2,…,9及下劃線;組成;

(2)標識符必須是以英文字母開頭;

(3)標識符中不能有兩個連續的下劃線,標識符的最后一個字符不能是下劃線;

(4)標識符中的英文字母不區分大小寫;

(5)標識符字符最長可以是32個字符。

例如:CLK,Q0,DAT1,SX_1,NOT_Q是合法的標識符。

3DA,_QD,NA_C,DB-A,DB_等是非法的標識符。

2.保留字

小提示:93標準定義了擴展表示符,可以以數字打頭,使用VHDL保留字等,不過習慣上依然使用87

標準。

VHDL中的保留字是具有特殊含義的標識符號,只能作為固定的用途,用戶不能用保留

字作為符。比如ENTITY,ARCHITECTURE,PROCESS,BLOCK,BEGIN和END等。

VHDL保留字如表1-2-1所列。

表1-2-1VHDLaccessafteraliasall

保留字abs

andarchitecturearrayassertattribute

beginblockbodybufferbus

casecomponentconfigurationconstantdisconnect

downtoelseelsifendentity

exitfileforfunctiongenerate

genericgroupguardedifimpure

ininertialinoutislabel

librarylinkageliteralloopmap

modnandnewnextnor

notnullofonopen

orothersoutpackageport

postponedprocedureprocesspurerange

recordregisterrejectremreport

returnrolrorselectseverity

signalsharedslasllsra

srisubtypethentotransport

typeunaffectedunitsuntiluse

variablewaitwhenwhilewith

xnorxor

3.VHDL中的界符

界符是作為VHDL語言中兩個部分的分隔符用的。如每個完整的語句均以V結尾,用

雙減號■?開頭的部分是注釋內容,不參加程序編譯。信號賦值符號是,變量賦值符號是":=-等。

在VHDL中,常用的界符如表122所列

表1-2-2VHDL中的界符

.::><=

十一*/&o

__()<=

4,注釋符

在VHDL中,為了便于理解和閱讀程序,常常加上注釋,注釋符用雙減號”■表示。注

釋語句以注釋符打頭,到行尾結束。注釋可以加在語句結束符丫之后,也可以加在空行處。

122VHDL的數據類型

在VHDL中,定義了三種數據對象,即信號、變量和常數,每一個數據對象都必須具

有確定的數據類型,只有相同的數據類型的兩個數據對象才能進行運算和賦值,為此VHDL

定義了多種標準的數據類型,而且每一種數據類型都具有特定的物理意義。例如,BIT型、

STD_LOGIC型、INTEGER型和REAL型等數據類型。

VHDL的數據類型較多,根據數據用途分類可分為標量型、復合型、存取型和文件型。

標量型包括整數類型、實數類型、枚舉類型和時間類型,其中位(BIT)型和標準邏輯位

(STD,OGIC)型屬于枚舉類型。復合型主要包括數組(ARRAY)型和記錄(RECORD)

型,存取類型和文件類型提供數據和文件的存取方式。這些數據類型又可以分為兩大類:即

在VHDL程序包中預定義的數據類型和用戶自定義的數據類型。預定義的數據類型是最基本的數據類型,

這些數據類型都定義在標準程序包STANARD、STD_LOGCJ164和其它標準的程序包中,這些程序包放

在EDA軟件中IEEE和STD目錄中,供用戶隨時調用。在預定義的各種數據類型的基礎上,用戶可以根

據實際需要自己定義數據類型和子類型,如標量型和數組型。使用用戶定義的數據類型和子類型可以使設

計程序的語句簡練易于閱讀,簡化設計電路硬件結構。

值得注意的是,各種EDA工具不能完全支持VHDL的所有數據類型,只支持VHDL的子

集。

1.STANDARD程序包中預定義的數據類型

(D整數(INTEGER)數據理

整數數據類型與數學中整數的定義是相同的,整數類型的數據代表正整數、負整數

和零。VHDL整數類型定義格式為:

TYPEINTEGERISRANGE-2147483648TO2147483647;

實際上一個整數是由32位二進制碼表示的帶符號數的范圍。

正整數(POSITIVE)和自然數(NATURAL)是整數的子類型,定義格式為:

SUBTYPEPOSITIVEISINTEGERRANGE0TOINTEGER'HIGH;

SUBTYPENATUREISINTEGERRANGE1TOINTEGER’HIGH;

其中INTEGER.HIGH是數值類屬性,代表整數上限的數值,也即2147483647。所以正整

數表示的數值范圍是。~2147483647,自然數表示的數值范圍是一2147483647。實際使用過程中為了

節省硬件組件,常用RANGER.TO,限制整數的范圍。例如:

SIGNALAINTEGER;一信號A是整數數據類型

VARIABLEBINTEGERRANGEOTO15;--變量B是整數數據類型,變化范圍是0到15。

SIGNALCINTEGERRANGE1TO7;-信號C是整數數據類型,變化范圍是1到7。

⑵實數(REAL)數據類型

VHDL實數數據類型與數學上的實數相似,VHDL的實數就是帶小數點的數,分為正數

和小數。實數有兩種書寫形式即小數形式和科學計數形式,不能寫成整數形式。例如

1.0,1.0E4,52等實數是合法的。實數數據類型的定義格式為:

TYPEREALisrange-1.7e38to1.7e38;

例如:SIGNALA.B,C:REAL;

A<=5.0;

B<=3.5E5;

C<=-4.5;

小提示:

整數與實數均可以由下劃線分割,便于閱讀,如:45_133_134;124_452_112.113.429;

此外不同進制的數可以由如下格式表達:基數#數字文字#E指數

如:2#1111_1110#=254;16#E#E1=14*161=224;

⑶位(BIT)數據類型

位數據類型的位值用字符.。和工表示,將值放在單引號中,表示二值邏輯的。和1.這里

的。和1與整數型的。和1不同,可以進行算術運算和邏輯運算,而整數類型只能進行算術運算。

位數據類型的定義格式為:

TYPEBITis('O','1');

例如:

RESULT:OUTBIT;

RESULT<=.1.;

將RESULT引腳設置為高電平。

(4)位向量(BIT_VECTOR)數據類型

位向量是基于BIT數據類型的數組。VHDL位向量的定義格式為:

TYPEBIT_VECTORisarray(NATURALrange<>)ofBIT;

使用位向量必須注明位寬,即數組的個數和排列JII頁序,位向量的數據要用雙引號括起來。

例如"1010",X-A8;其中10W是四位二進制數,用X表示雙引號里的數是十六進制數。

例如:

SIGNALA:BIT_VECTOR(3DOWNTO0);

A<=1110;

表示A是四個BIT型元素組成的一維數組,數組元素的排列順序是A3=1,A2=1,A1=1,

A0=0?

⑸布爾(BOOLEAN)數據類型

一個布爾量具有真(TRUE)和假(FALSE)兩種狀態。布爾量沒有數值的含義,不能

用于數值運算,它的數值只能通過關系運算產生。例如,在IF語句中,A>B是關系運算,如果A=3,8=2,

則A>B關系成立,結果是布爾量TRUE,否則結果為FALSEO

VHDL中,布爾數殿型的定義格式為:

TYPEBOOLEANIS(FALSE,TRUE);

(6)字符(CHARACTER)數據類型

在STANDARD程序包中預定義了128個ASC”碼字符類型,字符類型用單引號括起來,如A,h,1

等,與VHDL標識符不區分大/」寫不同,字符類型中的字符大小寫是不同的,如B和b不同。

(7)字符串(STRING)

在STANDARD程序包中,字符串的定義是:

TYPESTRINGisarray(POSITIVErange<>)ofCHARACTER;

字符串數據類型是由字符型數據組成的數組,字符串必須用雙引號括起來。

例如:

CONSTANTSTR1:STRING:="Hellowworld”;

定義常數ST1是字符串,初值是“Hellowworld;

小提示:

與C語言類似,字符類型用單引號括起來,而字符串必須用雙引號括起來,別弄混了。

(8)時間(TIME)數據類型

表示時間的數據類型,一個完整的時間類型包括整數表示的數值部分和時間單位兩個部

分,數值和單位之間至少留一個空格,如1ms,20ns等。

STANDARD程序包中定義時間格式為:

TYPETIMEisrange-9223372036854775808to9223372036854775807

UNITS

fs;-少

ps=1000fs;-皮秒

ns=1000ps;--納秒

us=1000ns;--微秒

ms=1000us;-量秒

sec=1000ms;-秒

min=60sec;-分

hr=60min;-小時

ENDUNITS;

小提示:

實數,時間類型僅用于VHDL仿真,T殳綜合器不支持。

2.IEEE預定義的標準邏輯位和標準邏輯位向量

(1)標準邏輯位(STD_LOGIC)數據類型

STDJOGIC是位(BIT)數據類型的擴展,是STDJJLOGIC數據類型的子類型。它是一

個邏輯型的數據類型,其取值取代B.T數據類型的取值0和1兩種數值,擴展定義了九種值,在IEEE

STD1164程序包中,STDJJLOGIC和STDJJ3Gle數據類型定義格式為:

TYPEstd_ulogicIS(

U't-Uninitialized

'X',—ForcingUnknown

'O',"Forcing0

'1',—Forcing1

'Z',-HighImpedance

W,-WeakUnknown

'L',-Weak0

'H',-Weak1

-Don'tcare

);

FUNCTIONresolved(s:std_ulogic_vector)RETURNstd_ulogic;

SUBTYPEstd_logicISresolvedstd_ulogic;

小提示:

STD'OGIC中的數據類型必須要大寫,不能使用小寫字母代替,在實際的心集成時,

一般只使用。.入Z.,四種數據類型,其余的W.L.H是不可綜合的。

STD.LOGIC和STD_ULOGIC數據類型的區別在于STD_LOGIC數據類型是經過重新定

義的,可以用來描述多路驅動的三態總線,而STD_ULOGIC數據類型只能用于描述單路驅

動的三態總線。

⑵標準邏輯位向量(STD_LOGIC_VECTOR)數據類型

STD_LOGIC_VECTOR是基于STD_LOGIC數據類型的標準邏輯一維數組,和

BXVECTOR數組一樣,使用標準邏輯位向量必須注明位寬和排列順序,數據要用雙引號

括起來。

例如:

SIGNALSA1:STD_LOGIC_VECTOR(3DOWNTO0);

SA1<="0110”;

在IEEE_STD_1164程序包中,STD_LOGIC_VECTOR數據類型定義格式為:

TYPEstd_logic_vectorISARRAY(NATURALRANGE<>)OFstdjogic;

3.其它預定義的數據類型

在STD_LOGIC_ARITH程序包中定義了無符號(UNSIGNED)和帶符號(SIGNED)數

據類型,這兩種數據類型主要用來進行算術運算。定義格式為:

TYPEUNSIGNEDisarray(NATURALrange<>)ofSTD_LOGIC;

TYPESIGNEDisarray(NATURALrange<>)ofSTD_LOGIC;

(1)無符號(UNSIGNED)數據類型

無符號數據類型是由STD,OGIC數據類型構成的一維數組,它表充■個自然數。在一

個結構體中,當一個數據除了執行算術運算之外,還要執彳亍邏輯運算,就必須定義成

UNSIGNED,而不能是SIGNED或INTEGER類型。例女口:

SIGNALDAT1:UNSIGNED(3DOWNTO0);

DAT1<="1001”;

定義信號DAT是四位二進制碼表示的無符號數據,數值是9。

(2)帶符號(SIGNED)數據類型

帶符號(S.GNED)數據類型表示一個帶符號的整數,其最高位用來表示符號位,用補

碼表示數值的大小。當一個數據的最高位是。時,這個數表示正整數,當一個數據的最高位

是I時,這個數表示負整數。例如:

VARIABLEDB1,DB2:SIGNED(3DOWNTO0);

DB1<="0110”;

DB2<=441001";

定義變量DB1是6,變量DB2是-7。

4.用戶自定義的數據類型

在VHDL中,用戶可以根據設計需要,自己定義數據的類型,稱為用戶自定義的數據類

型。利用用戶自己定義數據類型可以使設計程序便于閱讀。用戶自定義的數據類型可以通過

兩種途徑來實現,一種方法是通過對預定義的峰類型作一些范圍限定而形成的一種新的

數據類型。這種定義數據類型的方法有如下幾種格式:

TYPE數據類型名稱IS數據類型名RANGE數據范圍;

例如:

TYPEDATAISINTEGERRANGER0TO9;

定義DATA是INTEGER數據類型的子集,數據范圍是。~9。

SUBTYPE數據類型名稱IS數據類型名RANGE數據范圍;

例如:

SUBTYPEDBISSTD_LOGIC_VECTOR(7DOWNTO0);

定義DB是STD_LOG1C_VECTOR數據類型的子集,位寬8位。

另一種方法是在數據類型定義中直接列出新的數據類型的所有取值,稱為枚舉數據類

型。定義該種數據類型的格式為:

TYPE數據類型名稱IS(取值1,取值2,...);

例如:

TYPEBITIS(;

TYPESTATE_MIS(STATO,STAT1,STAT2,STAT3);

定義BIT數據類型,取值。和1O定義STATE_M是數據類型,表示狀態變量STAT。,STAT1,

STAT2,STAT3。在VHDL中,為了便于閱讀程序,可以用符號名來代替具體的數值,前例

中STATE_M是狀態變量,用符號STATO.STAT1.STAT2,STAT3表示四種不同的狀態取

00,01,10,11。

例如定義一個"WEEK"的數據類型用來表示一個星期的七天,定義格式為:

TYPEWEEKIS(SUN,MON.TUE.WED.THU.FRI.SAT);

小提示:

使用枚舉數據類型定義后,綜合器會自動將字符類型從。開始進行二進制編碼,編碼的位

數由枚舉元素個數決定。

5.數組(ARRAY)的定義

數組是將相同類型的單個數據元素集合在一起所形成的T新的數據類型。它可以是一

維數組(一個下標)和多維數組(多個下標),下標的數據類型必須是整數。前面介紹的位

向量(BIT_VECTOR)和標準邏輯位向量(STD_LOGIC_VECTOR)數據類型都屬于一維

數組類型。數組定義的格式為:

TYPE數據類型名稱ISARRAY數組下標的范圍OF數組元素的數

小提示:

VHDL多維數組定義,多維數組聲明即將第一維的數組作為第二維數組的元素定義即可。

TYPE1維數據類型名稱ISARRAY數組下標的范圍OF數組元素的數據類型;

TYPE2維數據類型名稱,SARRAY數組下標的范圍OF上面所定義的1維數據類型;

根據數組元素下標的范圍是否指定,把數組分為非限定性數組和限定性數組兩種類型。

非限定性數組不具體指定數組元素下標的范圍,而是用NATURALRANGER。表示,當用到該數組時,

再定義具體的下標范圍。如前面介紹的位向量(BIT_VECTOR)不的準器位向量(STD_LOGIC_VECTOR)

數據類型等在程序包中預定義的數組屬于非限定性數組。

例如,在IEEE程序包中定義STD_LOGIC_VECTOR數據類型的語句是

TYPEstd_logic_vectorISARRAY(NATURALRANGE<>)OFstdjogic;

沒有具體指出數組元素的下標范圍,在程序中用信號說明語句指定。

例如:

SIGNALDAT:STD_LOGIC_VECTOR(3DOWNTO0);

限定性數組的下標的范圍用整數指定,數組元素的下標可以是由低到高,如。23,

也可以是由高到低,如7DOWNTO。,表示數組元素的個數和在數組中的排列方式。

例如:

TYPEDISARRAY(0TO3)OFSTD_LOGIC;

TYPEAISARRAY(4DOWNTO1)OFBIT;

定義數組D是一維數組,由四個STD_LOGIC型元素組成,數組元素的排列順序是D(0),

D(1),D(2),D(3)oA數組是由四個元素組成的BIT數據類型,數組元素的排列JI圓室是A(4),

A(3),A(2),A(1)o

小提示:

對于數組數據類型,可以給一組數據多個值一起賦值:

如上例:

SIGNALARRAY1:D;

BEGIN

ARRAY1<=(.1.,.0.,,0?,1.):

6.數據類型的轉換

在VHDL語言中,數據類型的定義是相當嚴格的,不同類型的數據是不能進行運算和賦

值的。為了實現不同類型的數據賦值,就要進行數據類型的變換。變換函數在VHDL

語言程序包中定義。

在包STD_LOGIC_1164sSTD_LOGITH_ARITH和STD_LOGIC_UNSIGNED

中提供的數據類型變換函數如表1-2-3所列。

例如把INTEGER數據類型的信號轉換為STD,OGQVECTOR數據類型的方法是:

定義A,B為:

SIGNALAINTEGERRANGER0TO15;

SIGNALS:STD_LOGIC_VECTOR(3DOWNTO0);

需要調用STD_LOGIC_ARITH程序包中的函數CONV_STD_LOGIC_VECTOR

調用的格式是:B<=CONVSTDLOGICVECTOR(A);

表123數據類型變換函數函數名稱功能

程序包名稱

STD_LOGIC_1164TO_BIT由STD_LOGIC轉換為BIT

TO_BITVECTOR由STD_LOGIC_VECTOR轉換

TO_STDULOGIC為

TO_STDULOGICVECTERBIT_VECTOR

由BIT轉換為STD_LOGIC

由BIT_VECTOR轉換為

STD_LOGIC_VECTOR

STD_LOGIC_ARITHCONVJNTEGER由UNSIGNED,SIGNED轉換

CONV_UNSIGNED為INTEGER

CONV_STD_LOGIC_VECTOR由SIGNED,INTEGER轉換為

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論