第三章VHDL程序設計1資料_第1頁
第三章VHDL程序設計1資料_第2頁
第三章VHDL程序設計1資料_第3頁
第三章VHDL程序設計1資料_第4頁
第三章VHDL程序設計1資料_第5頁
已閱讀5頁,還剩103頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章VHDL程序設計1資料第一頁,共108頁。VHDL:

VHSIC(VeryHighSpeedIntegratedCircuit)

Hardware

Description

Language§3.1概述一、什么是VHDL?第二頁,共108頁。二、VHDL的歷史80年代初由美國國防部在實施超高速集成電路(VHSIC)項目時開發(fā)的,完成于1983年。美軍的電子設備采購都來自于私人企業(yè),國防部經(jīng)常要面對這樣的風險:如果某種設備已大量裝備部隊,而其中某個零件的供應商卻倒閉了,那該設備的再生產(chǎn)、維修和保養(yǎng)都會出問題。電子設備尤其是集成電路的內(nèi)部結構較為復雜,通常難以找到替代品。美國國防部希望供應商能以某種形式留下產(chǎn)品的相關信息,以保證一旦其破產(chǎn)后其他廠商能迅速生產(chǎn)出替代品。同時考慮到知識產(chǎn)權問題,美國國防部要求供應商利用VHDL語言把自己生產(chǎn)的集成電路芯片的行為描述出來,例如加載什么激勵后會有什么輸出等。這樣,其他廠商只要按照VHDL文檔,設計出行為相同的芯片即可。風格嚴謹、規(guī)范與工藝無關,可移植性好第三頁,共108頁。1987年由IEEE(InstituteofElectricalandElectronicsEngineers,國際電氣電子工程師協(xié)會)批準為IEEE工業(yè)標準,稱為IEEE1076-1987。各EDA公司相繼推出支持VHDL標準的設計環(huán)境。

1993年被更新為93標準,即IEEE1076-1993。進一步提高抽象描述層次,擴展系統(tǒng)描述能力。2001年完成VHDL-2001標準的制定。VHDL標準第四頁,共108頁。1、VHDL打破軟、硬件的界限傳統(tǒng)的數(shù)字系統(tǒng)設計分為:硬件設計(硬件設計人員)軟件設計(軟件設計人員)

VHDL是電子系統(tǒng)設計者和EDA工具之間的界面。EDA工具及HDL的流行,使電子系統(tǒng)向集成化、大規(guī)模和高速度等方向發(fā)展。美國硅谷約有80%的

ASIC和FPGA/CPLD已采用HDL進行設計。三、VHDL的作用第五頁,共108頁。2、VHDL與C、C++的比較:

C、C++代替匯編等語言

VHDL代替原理圖、邏輯狀態(tài)圖等3、VHDL與電原理圖描述的比較:

◆VHDL具有較強的抽象描述能力,可進行系統(tǒng)行為級別的描述。描述簡潔,效率高。

◆VHDL描述與實現(xiàn)工藝無關。電原理圖描述需給出完整、具體的電路結構圖,不能進行抽象描述。描述繁雜,效率低。電原理圖描述與實現(xiàn)工藝有關。第六頁,共108頁。一個可置數(shù)的16位計數(shù)器的電原理圖:第七頁,共108頁。用VHDL描述的可置數(shù)16位計數(shù)器:實體:端口說明庫構造體:功能實現(xiàn)第八頁,共108頁。1、VHDL具有強大的語言結構,系統(tǒng)硬件描述能力強、設計效率高;具有較高的抽象描述能力。

2、VHDL語言可讀性強,易于修改和發(fā)現(xiàn)錯誤。

3、VHDL具有豐富的仿真語句和庫函數(shù),可對

VHDL源代碼進行早期功能仿真,有利于大系統(tǒng)的設計與驗證。

4、VHDL設計與硬件電路關系不大。

5、VHDL設計不依賴于器件,與工藝無關。

6、移植性好。

7、VHDL體系符合TOP-DOWN和CE(并行工程)設計思想。

8、VHDL設計效率高,產(chǎn)品上市時間快,成本低。

9、易于ASIC實現(xiàn)。四、VHDL語言特點第九頁,共108頁。五、VHDL與其它硬件描述語言的比較VHDL:具有較強的系統(tǒng)級抽象描述能力,適合行為級和RTL級的描述。設計者可不必了解電路細節(jié),所作工作較少,效率高。但對綜合器的要求高,不易控制底層電路的生成。

IEEE標準,支持廣泛。行為級RTL級門電路級RTL:RegisterTranslateLevel………ifsel=‘1’thenoutc<=a;elseoutc<=b;endif;………….outc<=(selanda)or(notselandb);第十頁,共108頁。VerilogHDL:系統(tǒng)級抽象描述能力比VHDL稍差;門級開關電路描述方面比VHDL強。適合RTL級和門電路級的描述。設計者需要了解電路細節(jié),所作工作較多。

IEEE標準,支持廣泛。ABEL、PALASM、AHDL(AlteraHDL):系統(tǒng)級抽象描述能力差,一般作門級電路描述。要求設計者對電路細節(jié)有詳細的了解。對綜合器的性能要求低,易于控制電路資源。支持少。第十一頁,共108頁。VHDL主要用于描述數(shù)字系統(tǒng)的結構、行為、功能和接口。

VHDL將一個設計(元件、電路、系統(tǒng))分為:外部(可視部分:端口)內(nèi)部(不可視部分:內(nèi)部功能、算法)六、VHDL設計簡述第十二頁,共108頁。外部與內(nèi)部:器件或子系統(tǒng)

ARCHITECTUREProcessProcessENTITYSequentialProcessCombinationalProcessportsportscomponentportsportsBLACK_BOXrstd[7:0]clkq[7:0]co第十三頁,共108頁。2選1選擇器(復用器)的VHDL描述:第十四頁,共108頁。

VHDL語言由保留關鍵字組成;

一般,VHDL語言對字母大小寫不敏感;例外:‘

’、“

”所括的字符、字符串;每條VHDL語句由一個分號(;)結束;VHDL語言對空格不敏感,增加可讀性;在“--”之后的是VHDL的注釋語句;VHDL有以下描述風格:行為描述;數(shù)據(jù)流(寄存器傳輸RTL)描述;結構化描述;七、VHDL語言的一些基本特點:第十五頁,共108頁。基本結構包括:

實體(Entity)

結構體(Architecture)

配置(Configuration)

庫(Library)、程序包(Package)§3.2VHDL程序基本結構第十六頁,共108頁。

庫、程序包

實體(Entity)

結構體(Architecture)

進程或其它并行結構

配置(Configuration)第十七頁,共108頁。一、實體(說明)實體(說明):定義系統(tǒng)的輸入輸出端口語法:ENTITY

實體名

IS[Generic(類屬表);][Port(端口表);]END實體名;

(1076-1987version)ENDENTITY實體名

;(1076-1993version)第十八頁,共108頁。1、類屬說明(generic)

類屬說明:

確定實體或組件中定義的局部常數(shù)。模塊化設計時多用于不同層次模塊之間信息的傳遞??蓮耐獠扛淖儍?nèi)部電路結構和規(guī)模。類屬說明必須放在端口說明之前。

Generic(

常數(shù)名稱:類型[:=缺省值]

{常數(shù)名稱:類型[:=缺省值]});generic(risewidth,fallwidth:time:=1ns;width:integer:=16);第十九頁,共108頁。類屬常用于定義:實體端口的大小、設計實體的物理特性、總線寬度、元件例化的數(shù)量等。例:

entitymckis

generic(width:integer:=16);

port(add_bus:outstd_logic_vector(width-1downto0));

end

entitymck第二十頁,共108頁。

注:數(shù)據(jù)類型time用于仿真模塊的設計。綜合器僅支持數(shù)據(jù)類型為整數(shù)的類屬值。例:2輸入與門的實體描述

entityand2is

generic(risewidth:time:=1ns;fallwidth:time:=1ns);

port(a1:instd_logic;a0:instd_logic;z0:outstd_loigc);

endentityand2;

第二十一頁,共108頁。端口模式:

in:輸入型,此端口為只讀型,即元件只讀該信號的值。

out:輸出型,元件只把值寫入該信號。

inout:輸入輸出型,既可讀也可賦值。

buffer:緩沖型,與out相似,但可讀。Port(端口名稱{,端口名稱}:端口模式數(shù)據(jù)類型;

端口名稱{,端口名稱}:端口模式數(shù)據(jù)類型);2、端口聲明端口聲明:確定輸入、輸出端口的數(shù)目和類型。

port(a1,a2:instd_logic;a0:bufferstd_logic;z0:outstd_logic;b:inoutstd_logic);begina1<=z0;a0<=a1anda2;

第二十二頁,共108頁。out和

buffer的區(qū)別:buffer不是雙向信號,只能是本元件中的信號Entityinout和

buffer的區(qū)別:第二十三頁,共108頁。指端口上流動的數(shù)據(jù)的表達格式。為預先定義好的數(shù)據(jù)類型。如:bit、bit_vector、integer、

std_logic、std_logic_vector等。3、數(shù)據(jù)類型:entitynand2isport(a,b:inbit;z:outbit);endentitynand2;

entitym81isport(a:inbit_vector(7downto0);sel:inbit_vector(2downto0);b:outbit);endentitym81;第二十四頁,共108頁。作用:定義系統(tǒng)(或模塊)的行為、元件及內(nèi)部的連接關系,即描述其邏輯功能。兩個組成部分:

對數(shù)據(jù)類型、常數(shù)、信號、子程序、元件等元素的說明部分。

以各種不同的描述風格描述的系統(tǒng)的邏輯功能的實現(xiàn)部分。常用的描述風格有:行為描述、數(shù)據(jù)流描述、結構化描述。二、結構體(architecture)第二十五頁,共108頁。結構體結構體說明結構體功能描述

常數(shù)說明

數(shù)據(jù)類型說明

信號說明

例化元件說明

子程序說明

塊語句

進程語句

信號賦值語句子程序調(diào)用語句

元件例化語句一系列并行執(zhí)行語句構成順序語句模塊process將處理的結果向定義的信號或端口進行賦值調(diào)用一個已設計好的子程序對其它設計實體作元件調(diào)用,并進行端口連接第二十六頁,共108頁。注:定義語句中的常數(shù)、信號不能與實體中的端口同名。architecture

結構體名稱of

實體名稱is

[說明語句;]

內(nèi)部信號、常數(shù)、數(shù)據(jù)類型、子程序(函數(shù)、過程)、元件等的說明;

begin[功能描述語句];

(并行方式工作)

end

[architecture]

結構體名稱;結構體的語法:第二十七頁,共108頁。例:結構體中錯誤的信號聲明第二十八頁,共108頁。例:一個完整描述(3bit計數(shù)器)第二十九頁,共108頁。3bit計數(shù)器的等效描述(out與buffer的區(qū)別):第三十頁,共108頁。實體與結構體的關系:設計實體結構體1結構體2結構體3結構體n。。。

一個設計實體可有多個結構體,代表實體的多種實現(xiàn)方式。各個結構體的地位相同。

注:同一實體的結構體不能同名。第三十一頁,共108頁。三、配置configuration設計實體結構體1結構體2結構體3結構體n。。。一個設計實體的多種實現(xiàn)方式配置:從某個實體的多種結構體描述方式中選擇特定的一個。第三十二頁,共108頁。configuration

配置名

of

實體名

is

for

選配結構體名

endfor;end

配置名;簡單配置的語法:第三十三頁,共108頁。libraryieee;useieee.std_logic_1164.all;entitynandisport(a:instd_logic;b:instd_logic;c:outstd_logic);endentitynand;architectureart1ofnandisbeginc<=not(aandb);endarchitectureart1;architectureart2ofnandisbeginc<=‘1’when(a=‘0’)and(b=‘0’)else‘1’when(a=‘0’)and(b=‘1’)else‘1’when(a=‘1’)and(b=‘0’)else‘0’when(a=‘1’)and(b=‘1’)else‘0’;endarchitectureart2;例:一個與非門不同實現(xiàn)方式的配置如下:

configurationfirstofnandisforart1;endfor;endfirst;--configurationsecondofnandis--forart2--endfor;--endsecond;第三十四頁,共108頁。例:一個對計數(shù)器實現(xiàn)多種形式的配置如下:第三十五頁,共108頁。第三十六頁,共108頁。程序包:已定義的常數(shù)、數(shù)據(jù)類型、元件調(diào)用說明、子程序的一個集合。目的:方便其他的VHDL實體或其他設計者對這些已經(jīng)構建好的公共信息、資源的訪問和共享。在設計大規(guī)模電路時,有些函數(shù)、數(shù)據(jù)類型和常量等常同時在幾個元件中或幾個數(shù)據(jù)中使用。例如,常量也許是系統(tǒng)的總線大小。函數(shù)也許是計算系統(tǒng)數(shù)據(jù)信息的檢查和。如果課題管理要改變總線大小或者檢查和的計算方法,最好只改變一處。這可以利用程序包來實現(xiàn)。如果每個設計者使用各項目共享的常量或函數(shù),可以用use語句指定一個程序包,這樣,一旦項目共享的程序包改變了,則所有設計都會更新。庫:多個程序包構成庫。四、程序包、庫第三十七頁,共108頁。程序包說明的內(nèi)容:常量說明;

VHDL數(shù)據(jù)類型說明;元件說明;子程序說明;程序包的結構包括:程序包說明(包首)程序包主體(包體)第三十八頁,共108頁。包聲明項可由以下語句組成:

use語句(用來包括其它程序包);類型說明;子類型說明;常量說明;信號說明;子程序說明;元件說明。

package程序包名is{包說明項}

end程序包名;1、程序包說明(包首)語法:第三十九頁,共108頁。例:程序包說明usework.example.all;第四十頁,共108頁。包體說明項可含:

use語句;子程序說明;子程序主體;

類型說明;子類型說明;常量說明。

packagebody程序包名is{包體說明項}

end程序包名;2、程序包包體程序包的內(nèi)容:子程序的實現(xiàn)算法。包體語法:第四十一頁,共108頁。程序包首與程序包體的關系:程序包體并非必須,只有在程序包中要說明子程序時,程序包體才是必須的。程序包首可以獨立定義和使用。如下:package程序包名is{包說明項}

end程序包名;packagebody程序包名is{包體說明項}

end程序包名;第四十二頁,共108頁。librarywork;usework.seven.all;entitydecoderisport(input:inbcd;drive:outsegments);enddecoder;architectureartofdecoderisbeginpackagesevenissubtypesegmentsisbit_vector(0to6);typebcdisrange0to9;endseven;第四十三頁,共108頁。with

input

select

drive<=B“”when0,B“”when1,B“”when2,B“”when3,B“”when4,B“”when5,B“”when6,B“”when7,B“”when8,B“”when9,B“”whenothers;endarchitectureart;abcdefg第四十四頁,共108頁。3、庫的種類

VHDL庫可分為5種:

1)IEEE庫定義了四個常用的程序包:

?

std_logic_1164(std_logictypes&relatedfunctions)

?

std_logic_arith(arithmeticfunctions)

?

std_logic_signed(signedarithmetic

functions)

?

std_logic_unsigned(unsigned

arithmeticfunctions)

第四十五頁,共108頁。

TypeSTD_LOGIC:

9logicvaluesystem(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)

?‘U’:未初始化,不能被綜合

?‘W’,‘L’,‘H”:不穩(wěn)定的狀態(tài)、“弱”,不能被綜合

?‘X’-(not‘x’)強未知,不能被綜合

?‘Z’-(not‘z’)用于三態(tài)描述

?‘-’Don’tCare用于三態(tài)描述

?‘1’,‘0’:強1,強0

第四十六頁,共108頁。

2)STD庫(默認庫)庫中程序包為:standard,定義最基本的數(shù)據(jù)類型:

Bit,bit_vector,

Boolean,Integer,

Real,andTime

注:TypeBit2logicvaluesystem(‘0’,‘1’)3)面向ASIC的庫

4)WORK庫(默認庫)

5)用戶定義庫VHDL程序開頭總是隱含著下面不可見的行:librarywork;librarystd;usestd.standard.all;第四十七頁,共108頁。4、庫及程序包的使用庫及程序包的說明總是放在實體單元前面;默認庫及程序包可不作說明;用關健字library說明要使用的庫,用關健字use說明要使用的庫中的程序包;庫及程序包的作用范圍:僅限于所說明的設計實體;每一個設計實體都必須有自已完整的庫及程序包說明語句。第四十八頁,共108頁。

庫、程序包

實體(Entity)

結構體(Architecture)

進程或其它并行結構

配置(Configuration)第四十九頁,共108頁。庫的使用語法:程序包的使用有兩種常用格式:

例:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.conv_integer;

library庫名;

use庫名.程序包名.項目名;

use庫名.程序包名.All;第五十頁,共108頁。2選1選擇器第五十一頁,共108頁。2選1的另一種描述>>第五十二頁,共108頁。四類語言要素:數(shù)據(jù)對象(DataObject)數(shù)據(jù)類型(DataType)操作數(shù)(Operands)操作符(Operator)§3.3VHDL語言要素第五十三頁,共108頁。一、VHDL文字規(guī)則1、數(shù)字型文字

1)整數(shù)文字:十進制整數(shù)如:5,678,156E2(=15600),

45_234_287(=45234287)

2)實數(shù)文字:帶小數(shù)的十進制數(shù)如:23.34,2.0,44.99E-2(=0.4499)

8_867_551.23_909(8867551.23909)第五十四頁,共108頁。3)以數(shù)制基數(shù)表示的文字格式:如:10#170#(=170)

2#1111_1110#(=254)

16#E#E1(=2#1110_0000#=224)或:(=14×161=224)

16#F.01#E+2

(=(15+1/(16×16))×162=3841.00)

基數(shù)#數(shù)字文字#E指數(shù)改善可讀性,位串文字必需顯示寫出第五十五頁,共108頁。4)物理量文字如:60s、100m、177mA

注:整數(shù)可綜合實現(xiàn);實數(shù)一般不可綜合實現(xiàn);物理量不可綜合實現(xiàn);第五十六頁,共108頁。2、字符串型文字按字符個數(shù)多少分為:字符:用單引號引起來的ASCII字符,可以是數(shù)值,也可以是符號或字母。如:‘A’,‘*’,‘Z’

字符串:用雙引號引起來的一維字符數(shù)組字符串文字字符串數(shù)位字符串第五十七頁,共108頁。字符串分為:

1)文字字符串:“文字”如:“ERROR”,

“XXXXXXXX”,

“ZZZZZZZZ”,

“X”,

“BOTHSANDQEQUALTOL”。

第五十八頁,共108頁。2)數(shù)位字符串:稱為位矢量,代表二進制、八進制、十六進制的數(shù)組。其位矢量的長度為等值的二進制數(shù)的位數(shù)。格式:基數(shù)符號“數(shù)值”其中基數(shù)符號有三種:

B:二進制基數(shù)符號。

O:八進制基數(shù)符號,每一個八進制數(shù)代表一個3位的二進制數(shù)。

X:十六進制基數(shù)符號,每一個十六進制數(shù)代表一個4位的二進制數(shù)。如:B“1_1101_1110”:二進制數(shù)數(shù)組,長度為9O“34”

:八進制數(shù)數(shù)組,長度為6X“1AB”:十六進制數(shù)數(shù)組,長度為12第五十九頁,共108頁。

基本標識符的要求(87標準):

?由26個大小寫英文字母、數(shù)字0-9及下劃線“_”組成的字符串。

?

以英文字母開頭;

?

不連續(xù)使用下劃線“_”;?

不以下劃線“_”結尾;3、標識符定義常數(shù)、變量、信號、端口、子程序或參數(shù)的名字。第六十頁,共108頁。基本標識符中的英文字母不分大小寫;VHDL的保留字不能作為標識符使用。合法標識符_Decoder_1、2FFT、Sig_#N、Not-Ack、ALL_RST_、data__BUS、return、entitymy_counter、Decoder_1、FFT、Sig_N、Not_Ack、State0、entity1不合法標識符第六十一頁,共108頁。擴展標識符(93標準):以反斜杠來界定,免去了87標準中基本標識符的一些限制??梢砸詳?shù)字打頭,允許包含圖形符號,允許使用VHDL保留字,區(qū)分字母大小寫等。如:\74LS163\、\Sig_#N\、

\entity\、\ENTITY\第六十二頁,共108頁。4、下標名及下標段名下標名:用于指示數(shù)組型變量或信號的某一個元素格式:下標段名:用于指示數(shù)組型變量或信號的某一段元素格式:

如:標識符(表達式)標識符(表達式to/downto表達式)signalA,B,C:std_logic_vector(7downto0);SignalY:std_logic;Y<=B(4);C(7downto4)<=A(3downto0);C(3downto0)<=A(7downto4);第六十三頁,共108頁。二、數(shù)據(jù)對象

三種對象:常量(Constant)變量(Variable)信號(Signal)三種對象的物理含義:

?常量代表數(shù)字電路中的電源、地、恒定邏輯值等常數(shù);

?變量代表暫存某些值的載體,常用于描述算法;

?信號代表物理設計中的某一條硬件連接線,包括輸入、輸出端口。第六十四頁,共108頁。三種對象的特點及說明場合:信號:全局量,用于architecture、

package、entity。

變量:局部量,用于process、function、

procedure。

常量:全局量,可用于上面兩種場合。第六十五頁,共108頁。1、常量說明常量說明:對某一個常量名賦予一個固定的值。格式:例:

constantdata:bit_vector(3downto0):=“1010”;

constantwidth:integer:=8;

常量數(shù)據(jù)類型必須與表達式的數(shù)據(jù)類型一致。

constant常數(shù)名:數(shù)據(jù)類型:=表達式;第六十六頁,共108頁。常量的可視性(作用范圍):

庫、程序包

實體(Entity)

結構體1

進程1

結構體2

進程2常量是全局量,其作用范圍取決于常量被定義的位置。第六十七頁,共108頁。2、變量說明變量是一個局部量,只能在進程和子程序中定義、使用。其作用范圍僅限于定義了變量的進程和子程序中。格式:例:variablea,b:bit;variablecount:integerrange0to255:=10;變量的初值可用于仿真,但綜合時被忽略。variable

變量名:數(shù)據(jù)類型約束條件:=表達式;第六十八頁,共108頁。3、信號說明

◆電子硬件系統(tǒng)運行的基本特性:

◆各部分電路工作的并行特性;

◆信號傳輸過程中的延時特性;◆多驅動源的總線特性;

◆時序電路中觸發(fā)器的記憶特性等。

信號是電子系統(tǒng)內(nèi)部硬件連接和硬件特性的抽象表示。用來描述硬件系統(tǒng)的基本特性。格式:

signal

信號名:數(shù)據(jù)類型約束條件:=表達式;第六十九頁,共108頁。例:

signala,b:bit;signalinit:integer:=-1;signals1:std_logic:=‘0’;signals2:std_logic_vector(15downto0);注:a.綜合時初值被忽略。

b.信號是全局量??稍诮Y構體、實體、程序包中定義和使用信號。

c.在進程和子程序中只能使用信號,不能定義信號。第七十頁,共108頁。例:進程中信號與變量的使用entityexis

port(……);endex;architecturearch_exofexis

signala,b:std_logic;begin

process(a,b)

variablec,d:std_logic;

beginc:=a+b;d:=a-b;

……

endprocess;endarch_ex;第七十一頁,共108頁。信號與端口的區(qū)別:

◆除沒有方向說明外,信號與實體的“端口(PORT)”概念相似。端口是一種隱形的信號。

entityexamisport([signal]a,b:instd_logic;[signal]c:outstd_logic);endexam;

端口是一種有方向的信號。即輸出端口不能讀出數(shù)據(jù),只能寫入數(shù)據(jù);輸入端口不能寫入數(shù)據(jù),只能讀出數(shù)據(jù)。

信號本身無方向,可讀可寫。第七十二頁,共108頁。三、VHDL數(shù)據(jù)類型

VHDL是一種強數(shù)據(jù)類型語言。要求設計實體中的每一個常數(shù)、信號、變量、函數(shù)以及設定的各種參量都必須具有確定的數(shù)據(jù)類型,并且相同數(shù)據(jù)類型的量才能互相傳遞和作用。

VHDL數(shù)據(jù)類型分為四大類:

?標量類型(SCALARTYPE);

?復合類型(COMPOSITETYPE);

?存取類型(ACCESSTYPE);

?文件類型(FILESTYPE)第七十三頁,共108頁。又分為:

?預定義數(shù)據(jù)類型、

?用戶自定義數(shù)據(jù)類型1、VHDL的預定義數(shù)據(jù)類型

1)布爾量(boolean)布爾量具有兩種狀態(tài):false

和true

常用于邏輯函數(shù),如相等(=)、比較(<)等中作邏輯比較。

如:bit值轉化成boolean值:boolean_var:=(bit_var=‘1’);第七十四頁,共108頁。2)位(bit)

bit表示一位的信號值。取值只能是‘0’

或‘1’

3)位矢量(bit_vector)是基于bit數(shù)據(jù)類型的數(shù)組,使用位矢量必須注明位寬。4)字符(character)用單引號將字符括起來。

Signala:bit_vector(7downto0);a<=“”;Signala:bit;a<=‘0’;variablecharacter_var:character;......character_var:=‘A’;‘A’

不等于‘a(chǎn)’第七十五頁,共108頁。5)整數(shù)(integer)

integer表示所有正的和負的整數(shù)。硬件實現(xiàn)時,利用32位的位矢量來表示??蓪崿F(xiàn)的整數(shù)范圍為:-(231)to(231-1)VHDL綜合器要求對具體的整數(shù)作出范圍限定,否則無法綜合成硬件電路,或造成資源浪費。信號s的取值范圍是0-15,可用4位二進制數(shù)表示,因此s將被綜合成由四條信號線構成的信號。

如:signals:integerrange0to15;第七十六頁,共108頁。6)自然數(shù)(natural)和正整數(shù)(positive)

natural是integer的子類型,表示非負整數(shù)。

positive是integer的子類型,表示正整數(shù)。它們在standard程序包中定義的源代碼如下:

Subtype

naturalisintegerrange0tointeger’high;subtypepositiveisintegerrange1tointeger’high;第七十七頁,共108頁。7)實數(shù)(REAL)

或稱浮點數(shù)取值范圍:-1.0E38to+1.0E38

實數(shù)類型僅能用于VHDL仿真器,一般綜合器不支持。8)字符串(string)

string是character類型的一個非限定

數(shù)組。用雙引號將一串字符括起來。如:

variablestring_var:string(1to7);……string_var:=“Rosebud”;第七十八頁,共108頁。9)時間(TIME)由整數(shù)和物理單位組成如:55ms,20ns10)錯誤等級(SEVERITY_LEVEL)仿真中用來指示系統(tǒng)的工作狀態(tài),共有四種:

NOTE(注意)、

WARNING(警告)、

ERROR(出錯)、

FAILURE(失敗)第七十九頁,共108頁。2、用戶自定義類型用戶自定義類型是VHDL語言的一大特色。可由用戶定義的數(shù)據(jù)類型有:

?枚舉類型、

?整數(shù)和實數(shù)類型、

?數(shù)組類型、

?記錄類型、

?子類型第八十頁,共108頁。實現(xiàn)用戶自定義數(shù)據(jù)類型:類型定義語句TYPE

子類型定義語句SUBTYPE

(1)TYPE語句格式:例:type數(shù)據(jù)類型名is數(shù)據(jù)類型定義[of基本數(shù)據(jù)類型];typebyteisarray(7downto0)ofbit;variableaddend:byte;typeweekis(sun,mon,tue,wed,thu,fri,sat);第八十一頁,共108頁。1)枚舉類型

枚舉該類型的所有可能的值。格式:type類型名稱is(枚舉文字{,枚舉文字});如:typecoloris(blue,green,yellow,red);

typemy_logicis(‘0’,‘1’,‘U’,‘Z’);

variablehue:color;

signalsig:my_logic;

hue:=blue;sig<=‘Z’;第八十二頁,共108頁。枚舉類型的編碼:

綜合器自動實現(xiàn)枚舉類型元素的編碼,一般將第一個枚舉量(最左邊)編碼為0,以后的依次加1。編碼用位矢量表示,位矢量的長度將取所需表達的所有枚舉元素的最小值。如:typecoloris(blue,green,yellow,red);

編碼為:blue=“00”;green=“01”;yellow=“10”;red=“11”;第八十三頁,共108頁。2)整數(shù)類型用戶定義的整數(shù)類型是標準包中整數(shù)類型的子范圍。格式:3)數(shù)組類型數(shù)組:同類型元素的集合。VHDL支持多維數(shù)組。多維數(shù)組的聲明:

限定數(shù)組、非限定數(shù)組、屬性:type類型名稱isrange整數(shù)范圍;例:typemy_integerisrange0to9;typebyteisarray(7downto0)ofbit;

typevectorisarray(3downto0)ofbyte;第八十四頁,共108頁。(a)限定數(shù)組:其索引范圍有一定的限制。

(b)非限定數(shù)組:

數(shù)組索引范圍被定義成一個類型范圍。

type數(shù)組名isarray(數(shù)組范圍)of數(shù)據(jù)類型;type數(shù)組名isarray(類型名稱

range<>)of數(shù)據(jù)類型;typebyteisarray(7downto0)ofbit;typebit_vectorisarray(integerrange<>)ofbit;variablemy_vector:bit_vector(5downto-5);第八十五頁,共108頁。(c)屬性:

VHDL為多種類型定義了屬性。語法如下:

對象’屬性

VHDL為數(shù)組預先定義的屬性:

leftrighthighlowlengthrangereverse_range第八十六頁,共108頁。對應變量:

variablemy_vector:bit_vector(5downto-5);各屬性如下:

my_vector’left5my_vector’right-5my_vector’high5my_vector’low-5my_vector’length11my_vector’range(5downto-5)my_vector’reverse_range(-5to5)第八十七頁,共108頁。4)記錄類型

記錄是不同類型的名稱域的集合。格式如下:

訪問記錄體元素的方式:記錄體名.元素名type記錄類型名isrecord

元素名:數(shù)據(jù)類型名;元素名:數(shù)據(jù)類型名;┇endrecord;第八十八頁,共108頁。例:

constantlen:integer:=8;subtypebyte_vecisbit_vector(len-1downto0);

typebyte_and_ixisrecordbyte:byte_vec;ix:integerrange0tolen;endrecord;signalx,y,z:byte_and_ix;signaldata:byte_vec;signalnum:integer;…….x.byte<=“11110000”;x.ix<=2;data<=x.byte;num<=x.ix;z<=x;第八十九頁,共108頁。(2)子類型定義語句格式:子類型是已定義的類型或子類型的一個子集。

注:子類型與基(父)類型具有相同的操作符和子程序。可以直接進行賦值操作。subtype子類型名is基本數(shù)據(jù)range約束范圍;

bit_vector類型定義如下:

typebit_vectorisarray(naturalrange<>)ofbit;如設計中只用16bit;可定義子類型如下:

subtypemy_vectorisbit_vector(0to15);subtypedigitsisintegerrange0to9;第九十頁,共108頁。3、IEEE預定義標準邏輯位與矢量

1)std_logic類型由ieee庫中的std_logic_1164程序包定義,為九值邏輯系統(tǒng),如下:(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)

‘U’:未初始化的,‘X’:強未知的,

‘0’:強0,‘1’:強1,

‘Z’:高阻態(tài),‘W’:弱未知的,

‘L’:弱0,‘H’:弱1,

‘-’:忽略

由std_logic類型代替bit類型可以完成電子系統(tǒng)的精確模擬,并可實現(xiàn)常見的三態(tài)總線電路。第九十一頁,共108頁。2)std_logic_vector類型由std_logic構成的數(shù)組。定義如下:

typestd_logic_vectorisarray(naturalrange<>)ofstd_logic;

賦值的原則:相同位寬,相同數(shù)據(jù)類型。例:signaldata:std_logic_vector(0to7);第九十二頁,共108頁。4、其它預定義標準數(shù)據(jù)類型Synopsys公司程序包STD_LOGIC_ARITH中:1)無符號型(UNSIGNED)定義如下:

typeunsignedisarray(naturalrange<>)ofstd_logic;UNSIGNED(“1000”)=8

最左位是最高位:

variablevar:unsigned(0to10);var(0)是最高位

signalsig:unsigned(5downto0);sig(5)是最高位第九十三頁,共108頁。2)有符號型(SIGNED)

定義如下:

typesignedisarray(naturalrange<>)ofstd_logic;

最高位為符號位,綜合器認作補碼。

SIGNED(“0101”)=5,

SIGNED(“1011”)=-5variablevar:signed(0to10);var(0)是符號位3)小整型(SMALL_INT):0TO1subtypesmall_intisintegerrange0to1;第九十四頁,共108頁。5、數(shù)據(jù)類型轉換

VHDL是一種強類型語言,不同類型的數(shù)據(jù)對象必須經(jīng)過類型轉換,才能相互操作。1)類型轉換函數(shù)方式

通過調(diào)用類型轉換函數(shù),使相互操作的數(shù)據(jù)對象的類型一致,從而完成相互操作。第九十五頁,共108頁。

libraryieee;useieee.std_logic_1164.all;librarydataio;usedataio.std_logic_ops.all;entitycnt4isport(clk:instd_logic;p:bufferstd_logic_vector(3downto0);endentitycnt4;architecturebehvofcnt4isbeginprocess(clk)beginifclk’eventandclk=‘1’thenp<=to_vector(to_integer(p)+1,4);endif;endprocess;endarchitecturebehv;第九十六頁,共108頁。2)直接類型轉換方式

對相互間非常關聯(lián)的數(shù)據(jù)類型(如整型、浮點型),可進行直接類型轉換。格式:

數(shù)據(jù)類型標

溫馨提示

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

評論

0/150

提交評論