VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4_第1頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4_第2頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4_第3頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4_第4頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4_第5頁
已閱讀5頁,還剩189頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第4章VHDL的數(shù)據(jù)類型與運(yùn)算操作符4.1VHDL的客體及其分類4.2VHDL的數(shù)據(jù)類型4.3VHDL的運(yùn)算操作符習(xí)題與思考題第4章VHDL的數(shù)據(jù)類型與運(yùn)算操作符4.1VHDL的

4.1VHDL的客體及其分類

在VHDL中,凡是可以賦予一個(gè)值的對(duì)象就稱為客體(Object)??腕w主要包括以下4種:信號(hào)(Signal)、變量(Variable)、常數(shù)(Constant)、文件(File)。在電子電路設(shè)計(jì)中,這4類客體通常都具有一定的物理含義。例如,信號(hào)對(duì)應(yīng)地代表物理設(shè)計(jì)中的某一條硬件連接線,常數(shù)對(duì)應(yīng)地代表數(shù)字電路中的電源和地等。當(dāng)然,變量對(duì)應(yīng)關(guān)系不太直接,通常只代表暫存某些值的載體。4類客體的含義和說明場合如表4-1所示。

4.1VHDL的客體及其分類

在VHDL中,凡是VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4

4.1.1常數(shù)

常數(shù)(Constant)是一個(gè)固定的值。所謂常數(shù)說明,就是對(duì)某一常數(shù)名賦予一個(gè)固定的值。通常賦值在程序開始前進(jìn)行,該值的數(shù)據(jù)類型則在說明語句中指明。常數(shù)說明的一般格式如下:

CONSTANT常數(shù)名:數(shù)據(jù)類型:=表達(dá)式;

4.1.1常數(shù)

常數(shù)(Constant)是一個(gè)固定

例如:

CONSTANTVCC:REAL:=5.0;

CONSTANTDALY:TIME:=100ns;

CONSTANTFBUS:BIT_VECTOR:="0101";

例如:

CONSTANTVCC:REAL

常數(shù)一旦被賦值就不能再改變。上面VCC被賦值為5.0V,那么在所有的VHDL程序中VCC的值就固定為5.0V,它不像后面所提到的信號(hào)和變量那樣,可以任意代入不同的數(shù)值。另外,常數(shù)所賦的值應(yīng)和定義的數(shù)據(jù)類型一致。例如:

CONSTANTVCC:REAL:=“0101”;

這樣的常數(shù)說明顯然是錯(cuò)誤的。

常數(shù)一旦被賦值就不能再改變。上面VCC被賦值為5.0

4.1.2變量

在93版中,變量(Variable)增添了一種可在全局引用的共享變量(SharedVariable),但初學(xué)者應(yīng)慎用。因?yàn)?,幾個(gè)進(jìn)程執(zhí)行的時(shí)序不同會(huì)產(chǎn)生不同的結(jié)果。以后書中未作特殊說明的變量都是局部變量。

4.1.2變量

在93版中,變量(Variable

1.共享變量

前面已經(jīng)提到信號(hào)和變量的重要區(qū)別是:信號(hào)可以是全局量,只要在構(gòu)造體中已定義,那么在構(gòu)造體內(nèi)的所有地方都可以使用;變量是局部量,只能在進(jìn)程、子程序內(nèi)部定義和使用。如果要將結(jié)果帶出外部,則必須將變量值賦給某一個(gè)信號(hào)量才行。

但是,實(shí)際使用過程中有時(shí)希望進(jìn)程或子程序中的結(jié)果以變量形式進(jìn)行數(shù)據(jù)傳遞,因此,在93版中定義了共享變量。共享變量的說明格式如下:

SHAREDVARIABLE變量名:子類型名[:=初始值];

1.共享變量

前面已經(jīng)提到信號(hào)和變量的重要區(qū)別是VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4

p1進(jìn)程在時(shí)鐘上升沿將共享變量notclk置為“0”,而p2進(jìn)程在時(shí)鐘下降沿將notclk置為“1”,從而使notclk和clk在任何時(shí)刻其值正好相反。共享變量除在進(jìn)程和子程序的說明域中不能使用外,在其他任何地方都可以使用。但是,如前所述,初學(xué)者應(yīng)慎用,因?yàn)閹讉€(gè)并發(fā)進(jìn)程執(zhí)行的時(shí)序不同,會(huì)產(chǎn)生不同的結(jié)果。

p1進(jìn)程在時(shí)鐘上升沿將共享變量notclk置為

2.局部變量

局部變量只能在進(jìn)程語句、函數(shù)語句和過程語句結(jié)構(gòu)中使用,它是一個(gè)局部量。在仿真過程中,它不像信號(hào)那樣,到了規(guī)定的仿真時(shí)間才進(jìn)行賦值,局部變量的賦值是立即生效的。局部變量說明語句的格式如下:

VARIABLE變量名:數(shù)據(jù)類型約束條件:=表達(dá)式;

2.局部變量

局部變量只能在進(jìn)程語句、函數(shù)語句和過

例如:

VARIABLEx,y:INTEGER;

VARIABLEcount:INTEGERRANGE0TO255:=10;

局部變量在賦值時(shí)不能產(chǎn)生附加延時(shí)。例如,tmp1、tmp2、tmp3都是局部變量,那么下式產(chǎn)生延時(shí)的方式是不合法的:

tmp3:=tmp1+tmp2AFTER10ns;

例如:

VARIABLEx,y:INTEG

4.1.3信號(hào)

信號(hào)(Signal)是電子電路內(nèi)部硬件連接的抽象。它除了沒有數(shù)據(jù)流動(dòng)方向說明以外,其他性質(zhì)幾乎和前面所述的“端口”概念一致。信號(hào)通常在構(gòu)造體、包集合和實(shí)體中說明。信號(hào)說明的語句的格式如下:

SIGNAL信號(hào)名:數(shù)據(jù)類型約束條件:=表達(dá)式;

4.1.3信號(hào)

信號(hào)(Signal)是電子電路內(nèi)部

例如:

SIGNALsys_clk:BIT:=‘0’;

SIGNALground:BIT:=‘0’;

在程序中,信號(hào)值的代入采用“<=”代入符,而不是像變量賦值時(shí)用“:=”符,而且信號(hào)代入時(shí)可以附加延時(shí)。例如,s1和s2都是信號(hào),且s2的值經(jīng)10?ns延時(shí)以后才被代入s1。此時(shí)信號(hào)傳送語句可寫為

s1<=s2AFTER10ns;

例如:

SIGNALsys_clk:BIT

信號(hào)是一個(gè)全局量,它可以用來進(jìn)行進(jìn)程之間的通信。

一般來說,在VHDL中對(duì)信號(hào)賦值是按仿真時(shí)間來進(jìn)行的。信號(hào)值的改變也需按仿真時(shí)間的計(jì)劃表行事。

在93版中可對(duì)信號(hào)賦無效值,以表明不改變當(dāng)前驅(qū)動(dòng)器的輸出值。例如:

a<=NULL;

執(zhí)行該條語句,a的信號(hào)值將不發(fā)生變化。

信號(hào)是一個(gè)全局量,它可以用來進(jìn)行進(jìn)程之間的通信。

4.1.4信號(hào)和變量值代入的區(qū)別

信號(hào)和變量值的代入不僅形式不同,其操作過程也不相同。在變量的賦值語句中,該語句一旦被執(zhí)行,其值立即被賦予變量。在執(zhí)行下一條語句時(shí),該變量的值就為上一句新賦的值。變量的賦值符為“:=”。信號(hào)代入語句采用“<=”代入符,該語句即使被執(zhí)行也不會(huì)使信號(hào)立即發(fā)生代入,下一條語句執(zhí)行時(shí),仍使用原來的信號(hào)值。由于信號(hào)代入語句是同時(shí)進(jìn)行處理的,因此,實(shí)際代入過程和代入語句的處理是分開進(jìn)行的。

4.1.4信號(hào)和變量值代入的區(qū)別

信號(hào)和變量值的代

如圖4-1所示,信號(hào)C和D的代入值(A+B)和(C+B)將由PROCESS外部通過進(jìn)程的敏感信號(hào)A、B、C取得。進(jìn)程執(zhí)行時(shí),只從信號(hào)所對(duì)應(yīng)的實(shí)體取值,只要不碰到WAIT語句或進(jìn)程執(zhí)行結(jié)束,進(jìn)程執(zhí)行過程中信號(hào)值是不進(jìn)行代入的。如圖4-2所示,為了進(jìn)行仿真,需要讓代入和處理交替反復(fù)進(jìn)行。

如圖4-1所示,信號(hào)C和D的代入值(A+B)和(C+B圖4-1信號(hào)代入值的取得圖4-1信號(hào)代入值的取得圖4-2進(jìn)程語句的順序處理圖4-2進(jìn)程語句的順序處理

【例4-1】以下是兩個(gè)進(jìn)程描述的語句。首先,由于信號(hào)A發(fā)生變化使進(jìn)程語句開始啟動(dòng)執(zhí)行。這樣一來,仿真器對(duì)進(jìn)程中的各語句自上至下地進(jìn)行處理。當(dāng)進(jìn)程所有語句執(zhí)行完畢,或者中途碰到WAIT語句時(shí),該進(jìn)程執(zhí)行結(jié)束,信號(hào)代入過程被執(zhí)行,代入同樣應(yīng)按順序自上至下地進(jìn)行。

【例4-1】以下是兩個(gè)進(jìn)程描述的語句。首先,由于信號(hào)VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4

結(jié)果:

X<=B+A;

Y<=B+C;

在例4-1的第一個(gè)進(jìn)程中,D中最初代入的值是A,接著又代入C值。盡管D中先代入A值,后代入C值,在時(shí)間上有一個(gè)Δ的延時(shí),但是,在代入時(shí)由于不進(jìn)行處理,因此仿真時(shí)認(rèn)為是時(shí)間0值延時(shí)。D的最終值應(yīng)為C,這樣X和Y的內(nèi)容都為B+C。

結(jié)果:

X<=B+A;

Y<=

在例4-1的第二個(gè)進(jìn)程中,D是變量。在執(zhí)行“D:=A;”語句以后,A的值就被賦給D,所以X為B+A。此后又執(zhí)行“D:=C;”,從而使Y為B+C。從這里可以看出,信號(hào)量的值將進(jìn)程語句最后所代入的值作為最終代入值,而變量的值一經(jīng)賦值就變成新的值。這就是變量賦值和信號(hào)代入在操作上的區(qū)別。

在例4-1的第二個(gè)進(jìn)程中,D是變量。在執(zhí)行“D:=

4.1.5文件

在VHDL中提供了一個(gè)預(yù)先定義的包集合——文本輸入/輸出包集合(TEXTIO),在該TEXTIO中包含有對(duì)文本文件進(jìn)行讀/寫的過程和函數(shù)。這些文本文件都是ASCII碼文

件,其格式可根據(jù)編程人員的需要設(shè)定(VHDL對(duì)文件格式不作任何限制,但是主機(jī)對(duì)此往往有一定限制)。TEXTIO按行對(duì)文件進(jìn)行處理,一行為一個(gè)字符串,并以回車、換行符作為行結(jié)束符。

4.1.5文件

在VHDL中提供了一個(gè)預(yù)先定義的包

1.文件類型定義的格式

文件類型定義的格式如下:

TYPE類型名ISFILEOF類型/子類型名;

例如:

TYPEindexISRANGE0TO15;

TYPEint_ftypeISFILEOFindex;

1.文件類型定義的格式

文件類型定義的格式如下:

2.文件操作語句

TEXTIO中提供了打開文件、關(guān)閉文件、從文件讀/寫一行的過程及檢查文件結(jié)束的函數(shù):

FILE_OPEN(文件名,“外部文件名”,文件讀寫類型)

FILE_CLOSE(文件名)

READ

WRITE

ENDFILE(文件名)

TEXTIO還隱含行讀和行寫兩個(gè)子過程;

READLINE(目的行變量,源行變量)

WRITELINE(目的行變量,源行變量)

2.文件操作語句

TEXTIO中提供了打開文件、關(guān)

TEXTIO也對(duì)用于處理文本文件的數(shù)據(jù)類型作了具體說明。數(shù)據(jù)類型line(行)是讀/寫文本文件時(shí)要用的,line的結(jié)構(gòu)是TEXTIO對(duì)文件進(jìn)行操作的基本單位。例如,對(duì)文件進(jìn)行讀操作時(shí),首先讀一行字符,并將它放到line數(shù)據(jù)類型的結(jié)構(gòu)中,而后再按字段進(jìn)行處理。具體應(yīng)用實(shí)例將在第9章中詳述。

TEXTIO也對(duì)用于處理文本文件的數(shù)據(jù)類型作了具體說明

4.2VHDL的數(shù)據(jù)類型

如前所述,在VHDL中信號(hào)、變量、常數(shù)都要指定數(shù)據(jù)類型,因此,VHDL提供了多種標(biāo)準(zhǔn)的數(shù)據(jù)類型。另外,為使用戶設(shè)計(jì)方便,還可以由用戶自定義數(shù)據(jù)類型。這樣使語言的描述能力及自由度得到了更進(jìn)一步的提高,從而為系統(tǒng)高層次的仿真提供了必要手段。與此相反,VHDL的數(shù)據(jù)類型的定義相當(dāng)嚴(yán)格,不同類型之間的數(shù)據(jù)不能直接代入,而且即使數(shù)據(jù)類型相同,位長不同也不能直接代入。這樣,為了熟練地使用VHDL編寫程序,必須很好地理解各種數(shù)據(jù)類型的定義。

4.2VHDL的數(shù)據(jù)類型

如前所述,在VHDL中

4.2.1標(biāo)準(zhǔn)的數(shù)據(jù)類型

標(biāo)準(zhǔn)的數(shù)據(jù)類型共有10種,如表4-2所示。

4.2.1標(biāo)準(zhǔn)的數(shù)據(jù)類型

標(biāo)準(zhǔn)的數(shù)據(jù)類型共有10種

下面對(duì)各數(shù)據(jù)類型作一簡要說明。

1.整數(shù)(Integer)

整數(shù)與數(shù)學(xué)中整數(shù)的定義相同。在VHDL中,整數(shù)的表示范圍為

-2

147

483

647~2

147

483

647,即

-(231

-

1)~(231

-

1)。千萬不要把一個(gè)實(shí)數(shù)(含小數(shù)點(diǎn)的數(shù))賦予一個(gè)整數(shù)變量,這是因?yàn)閂HDL是一個(gè)強(qiáng)類型語言,它要求在賦值語句中的數(shù)據(jù)類型必須匹配。整數(shù)的例子如下:

+136,+12456,-457

下面對(duì)各數(shù)據(jù)類型作一簡要說明。

1.整數(shù)(Inte

盡管整數(shù)值在電子系統(tǒng)中可能是用一系列二進(jìn)制位值來表示的,但是整數(shù)不能看作位矢量,也不能按位來進(jìn)行訪問,對(duì)整數(shù)不能用邏輯操作符。當(dāng)需要進(jìn)行位操作時(shí),可以用轉(zhuǎn)換函數(shù),將整數(shù)轉(zhuǎn)換成位矢量。目前,有的CAD廠商所提供的工具中對(duì)此規(guī)定已有所突破,允許對(duì)有符號(hào)和無符號(hào)的整型量進(jìn)行算術(shù)邏輯運(yùn)算。

在電子系統(tǒng)的開發(fā)過程中,整數(shù)也可以作為對(duì)信號(hào)總線狀態(tài)的一種抽象手段,用來準(zhǔn)確地表示總線的某一種狀態(tài)。

盡管整數(shù)值在電子系統(tǒng)中可能是用一系列二進(jìn)制位值來表示的

2.實(shí)數(shù)(Real)

在進(jìn)行算法研究或者實(shí)驗(yàn)時(shí),作為對(duì)硬件方案的抽象手段,常常采用實(shí)數(shù)四則運(yùn)算。實(shí)數(shù)的定義值范圍為

-1.0E

+

38~+1.0E?+

38。實(shí)數(shù)有正負(fù)數(shù),書寫時(shí)一定要有小數(shù)點(diǎn)。例如:

-1.0,+2.5,-1.0E+38

有些數(shù)可以用整數(shù)表示,也可以用實(shí)數(shù)表示。例如,數(shù)字1的整數(shù)表示為1,而用實(shí)數(shù)表示則為1.0。兩個(gè)數(shù)的值是一樣的,但數(shù)據(jù)類型卻不一樣。

2.實(shí)數(shù)(Real)

在進(jìn)行算法研究或者實(shí)驗(yàn)時(shí),作

3.位(Bit)

在數(shù)字系統(tǒng)中,信號(hào)值通常用一個(gè)位來表示。位值的表示方法是:用字符?‘0’?或者?‘1’

(將值放在單引號(hào)中)來表示。位與整數(shù)中的1和0不同,‘1’?和?‘0’?僅僅表示一個(gè)位的兩種取值。位值有時(shí)也可以顯式說明,例如:

BIT‘

(’1‘)

位數(shù)據(jù)可以用來描述數(shù)字系統(tǒng)中總線的值。位數(shù)據(jù)不同于布爾數(shù)據(jù),當(dāng)然也可以用轉(zhuǎn)換函數(shù)進(jìn)行轉(zhuǎn)換。

3.位(Bit)

在數(shù)字系統(tǒng)中,信號(hào)值通常用一個(gè)位

4.位矢量(Bit_Vector)

位矢量是93版擴(kuò)展的數(shù)據(jù)類型,它是用雙引號(hào)括起來的擴(kuò)展的數(shù)字序列。例如:

B“001_101_010”——9位二進(jìn)制位串;

X“A_F0_FC”——20位十六進(jìn)制位串;

O“3701”——12位八進(jìn)制位串;

X“

”——空位串。

在這里,位矢量最前面的B、X、O表示二、十六、八進(jìn)制。用位矢量數(shù)據(jù)表示總線狀態(tài)最形象也最方便,在以后的VHDL程序中將會(huì)經(jīng)常遇到。

4.位矢量(Bit_Vector)

位矢量是93版

5.布爾量(Boolean)

一個(gè)布爾量具有兩種狀態(tài)——“真”或者“假”。雖然布爾量也是二值枚舉量,但它和位不同,沒有數(shù)值的含義,也不能進(jìn)行算術(shù)運(yùn)算。它能進(jìn)行關(guān)系運(yùn)算。例如,它可以在IF語句中被測試,測試結(jié)果產(chǎn)生一個(gè)布爾量TRUE或者FALSE。

一個(gè)布爾量常用來表示信號(hào)的狀態(tài)或者總線上的情況。如果某個(gè)信號(hào)或者變量被定義為布爾量,那么在仿真中將自動(dòng)地對(duì)其賦值進(jìn)行核查。一般這一類型的數(shù)據(jù)的初始值總為FALSE。

5.布爾量(Boolean)

一個(gè)布爾量具有兩種狀

6.字符(Character)

字符也是一種數(shù)據(jù)類型,所定義的字符量通常用單引號(hào)括起來,如?‘A’。一般情況下VHDL對(duì)大小寫不敏感,但是對(duì)字符量中的大、小寫字符則認(rèn)為是不一樣的。例如,‘B’不同于?‘b’。字符量中的字符可以是a~z中的任一個(gè)字母、0~9中的任一個(gè)數(shù)以及空白或者特殊字符,如?$、@、%?等。包集合STANDARD中給出了預(yù)定義的128個(gè)ASCII碼字符類型,不能打印的用標(biāo)識(shí)符給出。字符?‘1’?與整數(shù)1和實(shí)數(shù)1.0都是不相同的。當(dāng)要明確指出1的字符數(shù)據(jù)時(shí),可寫為

CHARACTER'('1')

6.字符(Character)

字符也是一種數(shù)據(jù)類

7.字符串(String)

字符串是由雙引號(hào)括起來的一個(gè)字符序列,也稱為字符矢量或字符串?dāng)?shù)組。例如:

"integerrange"

字符串常用于程序的提示和說明。

7.字符串(String)

字符串是由雙引號(hào)括起來

8.時(shí)間(Time)

時(shí)間是一個(gè)物理量數(shù)據(jù)。完整的時(shí)間量數(shù)據(jù)應(yīng)包含整數(shù)和單位兩部分,而且整數(shù)和單位之間至少應(yīng)留一個(gè)空格的位置。例如,55

sec、2?min等。在包集合STANDARD中給出了時(shí)間的預(yù)定義,其單位為fs、ps、ns、ms、ms、sec、min、hr。下面是時(shí)間數(shù)據(jù)的例子:

20ms,100?ns,3?sec

在系統(tǒng)仿真時(shí),時(shí)間數(shù)據(jù)特別有用,用它可以表示信號(hào)延時(shí),從而使模型系統(tǒng)更逼近實(shí)際系統(tǒng)的運(yùn)行環(huán)境。

8.時(shí)間(Time)

時(shí)間是一個(gè)物理量數(shù)據(jù)。完整的

9.錯(cuò)誤等級(jí)(SeverityLevel)

錯(cuò)誤等級(jí)類型數(shù)據(jù)用來表征系統(tǒng)的狀態(tài),共有4種:NOTE(注意)、WARNING(警告)、ERROR(出錯(cuò))、FAILURE(失敗)。在系統(tǒng)仿真過程中,可以用這4種狀態(tài)來提示系統(tǒng)當(dāng)前的工作情況。這樣可以使操作人員隨時(shí)了解當(dāng)前系統(tǒng)工作的情況,并根據(jù)系統(tǒng)的不同狀態(tài)采取相應(yīng)的對(duì)策。

9.錯(cuò)誤等級(jí)(SeverityLevel)

錯(cuò)誤

10.大于等于零的整數(shù)(Natural,自然數(shù))、正整數(shù)(Positive)

這兩類數(shù)據(jù)是整數(shù)的子類,Natural類數(shù)據(jù)只能取值0和0以上的正整數(shù),Positive只能為正整數(shù)。

上述10種數(shù)據(jù)類型是VHDL中標(biāo)準(zhǔn)的數(shù)據(jù)類型,在編程時(shí)可以直接引用。如果用戶需使用這10種以外的數(shù)據(jù)類型,則必須進(jìn)行自定義。大多數(shù)CAD廠商已在包集合中對(duì)標(biāo)準(zhǔn)數(shù)據(jù)類型進(jìn)行了擴(kuò)展,例如數(shù)組型數(shù)據(jù)等,這一點(diǎn)請(qǐng)讀者注意。

10.大于等于零的整數(shù)(Natural,自然數(shù))、正整

由于VHDL屬于強(qiáng)類型語言,因此在仿真過程中,首先要檢查賦值語句中的類型和區(qū)間,任何一個(gè)信號(hào)和變量的賦值均須落入給定的約束區(qū)間中,也就是說要落入有效數(shù)值的范圍中。約束區(qū)間的說明通常跟在數(shù)據(jù)類型說明的后面。例如:

INTEGERRANGE100DOWNTO1

BIT_VECTOR(3DOWNTO0)

REALRANGE2.0TO30.0

這里DOWNTO表示下降,TO表示上升。

由于VHDL屬于強(qiáng)類型語言,因此在仿真過程中,首先要檢

對(duì)于一個(gè)BCD數(shù)的比較器,利用約束區(qū)間說明的端口說明語句可以寫為

ENTITYbcd_compareIS

PORT(a,b:ININTEGERRANGE0TO9:=0;

c:OUTBOOLEAN);

ENDENTITYbcd_compare;

對(duì)于一個(gè)BCD數(shù)的比較器,利用約束區(qū)間說明的端口說明語

4.2.2用戶定義的數(shù)據(jù)類型

VHDL使用戶最感興趣的一個(gè)特點(diǎn)是:可以由用戶自己來定義數(shù)據(jù)類型。用戶定義數(shù)據(jù)類型的書寫格式如下:

TYPE數(shù)據(jù)類型名{,數(shù)據(jù)類型名}數(shù)據(jù)類型定義;

在VHDL語中還存在不完整的用戶定義的數(shù)據(jù)類型的書寫格式:

TYPE數(shù)據(jù)類型名{,數(shù)據(jù)類型名};

這種由用戶進(jìn)行的數(shù)據(jù)類型定義是一種利用其他已定義的說明所進(jìn)行的“假”定義,因此它不能進(jìn)行邏輯綜合。

4.2.2用戶定義的數(shù)據(jù)類型

VHDL使用戶最感興

可由用戶定義的數(shù)據(jù)類型有如下幾種:枚舉(Enumerated)類型;整數(shù)(Integer)類型;實(shí)數(shù)(Real)、浮點(diǎn)數(shù)(Floating)類型;數(shù)組(Array)類型;存取(Access)類型;文件(File)類型;記錄(Recode)類型;時(shí)間(Time)類型(物理類型)。

下面對(duì)常用的幾種用戶定義的數(shù)據(jù)類型作一說明。

可由用戶定義的數(shù)據(jù)類型有如下幾種:枚舉(Enumera

1.枚舉類型

在邏輯電路中,所有的數(shù)據(jù)都是用“1”或“0”來表示的,但是人們在考慮邏輯關(guān)系時(shí),只有數(shù)字往往是不方便的。在VHDL中,可以用符號(hào)名來代替數(shù)字。例如,在表示一周每一天狀態(tài)的邏輯電路中,可以假設(shè)“000”為星期天,“001”為星期一。這對(duì)閱讀程序是頗不方便的。為此,可以定義一個(gè)叫“week”的數(shù)據(jù)類型。

TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);

由上述定義可知,凡是用于代表星期二的日子都可以用tue來代替,這比用代碼“010”表示星期二直觀多了,使用時(shí)也不易出錯(cuò)。

1.枚舉類型

在邏輯電路中,所有的數(shù)據(jù)都是用“1”

枚舉類型數(shù)據(jù)的定義格式如下:

TYPE數(shù)據(jù)類型名IS(元素,元素,…);

這類用戶定義的數(shù)據(jù)類型的應(yīng)用相當(dāng)廣泛,例如在包集合“STD_LOGIC”和“STD_LOGIC_1164”中都有此類數(shù)據(jù)的定義。例如:

TYPESTD_LOGICIS

('U','X','0','1','Z','W','L','H','-');

枚舉類型數(shù)據(jù)的定義格式如下:

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

2.整數(shù)類型和實(shí)數(shù)類型

整數(shù)類型在VHDL中已存在,這里所說的是用戶定義的整數(shù)類型,實(shí)際上可以認(rèn)為是整數(shù)的一個(gè)子類。例如,在一個(gè)數(shù)碼管上顯示數(shù)字,其值只能取0~9的整數(shù)。如果由用戶定義一個(gè)用于數(shù)碼顯示的數(shù)據(jù)類型,那么就可以寫為

TYPEdigitISINTEGERRANGE0TO9;

同理,實(shí)數(shù)類型也如此。例如:

TYPEcurrentISREALRANGE-1E4TO1E4;

據(jù)此可以總結(jié)出整數(shù)或?qū)崝?shù)用戶定義數(shù)據(jù)類型的格式為

TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義約束范圍;

2.整數(shù)類型和實(shí)數(shù)類型

整數(shù)類型在VHDL中已存在

3.?dāng)?shù)組類型

數(shù)組是將相同類型的數(shù)據(jù)集合在一起所形成的一個(gè)新的數(shù)據(jù)類型。它可以是一維的,也可以是二維或多維的。

數(shù)組定義的書寫格式如下:

TYPE數(shù)據(jù)類型名ISARRAY范圍OF原數(shù)據(jù)類型名;

在這里如果范圍這一項(xiàng)沒有被指定,則使用整數(shù)數(shù)據(jù)類型。例如:

TYPEwordISARRAY(1TO8)OFSTD_LOGIC;

3.?dāng)?shù)組類型

數(shù)組是將相同類型的數(shù)據(jù)集合在一起所形

若范圍這一項(xiàng)需用整數(shù)類型以外的其他數(shù)據(jù)類型,則在指定數(shù)據(jù)范圍前應(yīng)加數(shù)據(jù)類型名。例如:

TYPEwordISARRAY(INTEGER1TO8)OFSTD_LOGIC;

TYPEinstructionIS(ADD,SUB,INC,SRL,SRF,LDA,LDB,XFR);

SUBTYPEdigitISINTEGER0TO9;

TYPEinsflagISARRAY(instructionADDTOSRF)OFdigit;

若范圍這一項(xiàng)需用整數(shù)類型以外的其他數(shù)據(jù)類型,則在指定數(shù)

數(shù)組在總線定義及ROM、RAM等的系統(tǒng)模型中使用?!癝TD_LOGIC_VECTOR”也屬于數(shù)組數(shù)據(jù)類型,它在包集合“STD_LOGIC_1164”中被定義:

TYPESTD_LOGIC_VECTORISARRAY

(NATURALRANGE<>)OFSTD_LOGIC;

這里范圍由“RANGE<>”指定,這是一個(gè)沒有范圍限制的數(shù)組。在這種情況下,范圍由信號(hào)說明語句等確定。例如:

SIGNALaaa:STD_LOGIC_VECTOR(3DOWNTO0);

在函數(shù)和過程的語句中,當(dāng)使用無限制范圍的數(shù)組時(shí),其范圍一般由調(diào)用者所傳遞的參數(shù)來確定。

數(shù)組在總線定義及ROM、RAM等的系統(tǒng)模型中使用?!癝

多維數(shù)組需要用兩個(gè)以上的范圍來描述,而且多維數(shù)組不能生成邏輯電路,只能用于生成仿真圖形及硬件的抽象模型。例如:

多維數(shù)組需要用兩個(gè)以上的范圍來描述,而且多維數(shù)組不能生

上述例子是二維的。在三維情況下要用3個(gè)范圍來描述。

在代入初值時(shí),各范圍最左邊所說明的值為數(shù)組的初始位腳標(biāo)。在上例中(0,7)是起始位,接下去右側(cè)范圍向右移一位變?yōu)?0,6),以后順序?yàn)?0,5),(0,4),…,(0,0)。然后,左側(cè)范圍向右移一位變?yōu)?1,7),此后按此規(guī)律移動(dòng)得到最后一位(5,0)。

上述例子是二維的。在三維情況下要用3個(gè)范圍來描述。

4.時(shí)間類型(物理類型)

表示時(shí)間的數(shù)據(jù)類型在仿真時(shí)是必不可少的,其書寫格式如下:

TYPE數(shù)據(jù)類型名IS范圍;

UNITS基本單位;

單位;

ENDUNITS;

4.時(shí)間類型(物理類型)

表示時(shí)間的數(shù)據(jù)類型在仿真

例如:

這里的基本單位是“fs”,其1000倍是“ps”,以此類推。時(shí)間是物理類型的數(shù)據(jù)。當(dāng)然,對(duì)容量、阻抗值等也可以進(jìn)行定義。

例如:

這里的基本單位是“fs”,其

5.記錄類型

數(shù)組是同一類型數(shù)據(jù)集合起來形成的,而記錄則是將不同類型的數(shù)據(jù)和數(shù)據(jù)名組織在一起而形成的新客體。記錄數(shù)據(jù)類型的定義格式如下:

5.記錄類型

數(shù)組是同一類型數(shù)據(jù)集合起來形成的,而

從記錄數(shù)據(jù)類型中提取元素?cái)?shù)據(jù)類型時(shí),應(yīng)使用“.”。例如:

從記錄數(shù)據(jù)類型中提取元素?cái)?shù)據(jù)類型時(shí),應(yīng)使用“.”。例如

用記錄描述SCSI總線及通信協(xié)議是比較方便的。在生成邏輯電路時(shí)應(yīng)將記錄數(shù)據(jù)類型分解開來。因此,記錄類型比較適用于系統(tǒng)仿真。

用記錄描述SCSI總線及通信協(xié)議是比較方便的。在生成邏

4.2.3用戶定義的子類型

用戶定義的子類型是用戶對(duì)已定義的數(shù)據(jù)類型作一些范圍限制而形成的一種新的數(shù)據(jù)類型。子類型的名稱通常采用用戶較易理解的名字。子類型定義的一般格式如下:

SUBTYPE子類型名IS數(shù)據(jù)類型名;

例如,在“STD_LOGIC_VECTOR”基礎(chǔ)上所形成的子類如下:

SUBTYPEiobusISSTD_LOGIC_VECTOR(7DOWNTO0);

SUBTYPEdigitISINTEGERRANGE0TO9;

4.2.3用戶定義的子類型

用戶定義的子類型是用戶.

子類型可以對(duì)原數(shù)據(jù)類型指定范圍而形成,也可以完全和原數(shù)據(jù)類型范圍一致。例如:

此外,子類型還常用于存儲(chǔ)器陣列等的數(shù)組描述場合。新構(gòu)造的數(shù)據(jù)類型及子類型通常在包集合中定義,再由USE語句裝載到描述語句中。

子類型可以對(duì)原數(shù)據(jù)類型指定范圍而形成,也可以完全和原

4.2.4數(shù)據(jù)類型的轉(zhuǎn)換

在VHDL中,數(shù)據(jù)類型的定義是相當(dāng)嚴(yán)格的,不同類型的數(shù)據(jù)是不能進(jìn)行運(yùn)算和直接代入的。為了實(shí)現(xiàn)正確的代入操作,必須將要代入的數(shù)據(jù)進(jìn)行類型變換,這就是所謂的類型變換。變換函數(shù)通常由VHDL的包集合提供。例如,在“STD_LOGIC_1164”、“STD_LOGIC_ARITH”、“STD_LOGIC_UNSIGNED”的包集合中提供了如表4-3所示的數(shù)據(jù)類型變換函數(shù)。

4.2.4數(shù)據(jù)類型的轉(zhuǎn)換

在VHDL中,數(shù)據(jù)類型的VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4

【例4-2】由“STD_LOGIC_VECTOR”變換成“INTEGER”的實(shí)例。

【例4-2】由“STD_LOGIC_VECTOR”變

此外,由“BIT_VECTOR”變換成“STD_LOGIC_VECTOR”也非常方便。代入“STD_LOGIC_VECTOR”的值只能是二進(jìn)制數(shù),而代入“BIT_VECTOR”的值除二進(jìn)制數(shù)以外,還可能是十六進(jìn)制數(shù)和八進(jìn)制數(shù)。不僅如此,“BIT_VECTOR”還可以用“_”來分隔數(shù)值位。下面的幾個(gè)語句表示了“BIT_VECTOR”和“STD_LOGIC_VECTOR”的賦值語句:

此外,由“BIT_VECTOR”變換成“STD_LOGVHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4

4.2.5數(shù)據(jù)類型的限定

在VHDL中,有時(shí)可以用所描述文字的上下關(guān)系來判斷某一數(shù)據(jù)的數(shù)據(jù)類型。例如:

SIGNALa:STD_LOGIC_VECTOR(7DOWNTO0);

a<=“01101010”;

聯(lián)系上下文關(guān)系,可以斷定“01101010”不是字符串(String),也不是位矢量(Bit_Vector),而是“STD_LOGIC_VECTOR”。但是,也有判斷不出來的情況。例如:

4.2.5數(shù)據(jù)類型的限定

在VHDL中,有時(shí)可以用

在該例中,a&b&c的數(shù)據(jù)類型如果不確定,那么就會(huì)發(fā)生錯(cuò)誤。在這種情況下就要對(duì)數(shù)據(jù)進(jìn)行類型限定(這類似于C語言中的強(qiáng)制方式)。數(shù)據(jù)類型限定的方式是在數(shù)據(jù)前加上“類型名”。

在該例中,a&b&c的數(shù)據(jù)類型如果不確定,那

例如:

數(shù)據(jù)類型的限定方式與數(shù)據(jù)類型的變換很相似,這一點(diǎn)應(yīng)引起讀者注意。

例如:

數(shù)據(jù)類型的限定方式與數(shù)據(jù)類型的.

4.2.6IEEE標(biāo)準(zhǔn)“STD_LOGIC”和“STD_LOGIC_VECTOR”

在上面的數(shù)據(jù)類型介紹中,曾講到VHDL的標(biāo)準(zhǔn)數(shù)據(jù)類型“BIT”,它是一個(gè)邏輯型的數(shù)據(jù)類型。這類數(shù)據(jù)取值只能是“0”和“1”。由于該類型數(shù)據(jù)不存在不定狀態(tài)'X',因此不便于仿真。另外,由于它也不存在高阻狀態(tài),因此也很難用來描述雙向數(shù)據(jù)總線。為此,IEEE在1993年制定出了新的標(biāo)準(zhǔn)(IEEESTD1164),使得“STD_LOGIC”型數(shù)據(jù)可以具有如下9種不同的值:

4.2.6IEEE標(biāo)準(zhǔn)“STD_LOGIC”和“ST

'U'——初始值;

'X'——不定;

'0'——0;

'1'——1;

'Z'——高阻;

'W'——弱信號(hào)不定;

'L'——弱信號(hào)0;

'H'——弱信號(hào)1;

'-'——不可能情況。

'U'——初始值;

'X'——不定;

'0'—

“STD_LOGIC”和“STD_LOGIC_VECTOR”是IEEE新制定的標(biāo)準(zhǔn)化數(shù)據(jù)類型,也是在VHDL語法以外所添加的數(shù)據(jù)類型,因此將它歸屬到用戶定義的數(shù)據(jù)類型中。當(dāng)使用該類型數(shù)據(jù)時(shí),在程序中必須寫出庫說明語句和使用包集合的說明語句。

“STD_LOGIC”和“STD_LOGIC_VECT

4.3VHDL的運(yùn)算操作符

在VHDL中共有4類操作符,可以分別進(jìn)行邏輯運(yùn)算(Logical)、關(guān)系運(yùn)算(Relational)、算術(shù)運(yùn)算(Arithmetic)和并置運(yùn)算(Concatenation)。需要注意的是,被操作符所操作的對(duì)象是操作數(shù),且操作數(shù)的類型應(yīng)該和操作符所要求的類型相一致。另外,運(yùn)算操作符是有優(yōu)先級(jí)的,例如邏輯運(yùn)算符NOT在所有操作符中其優(yōu)先級(jí)最高。表4-4給出了主要操作符的優(yōu)先級(jí)。

4.3VHDL的運(yùn)算操作符

在VHDL中共有4類VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4

4.3.1邏輯運(yùn)算符

在VHDL的87版中,邏輯運(yùn)算符共有以下6種:

NOT——取反;

AND——與;

OR——或;

NAND——與非;

NOR——或非;

XOR——異或。

4.3.1邏輯運(yùn)算符

在VHDL的87版中,邏輯運(yùn)

在93版中增加了6種新的邏輯運(yùn)算符:

SLL——邏輯左移;

SRL——邏輯右移;

SLA——算術(shù)左移;

SRA——算術(shù)右移;

ROL——邏輯循環(huán)左移;

ROR——邏輯循環(huán)右移。

在93版中增加了6種新的邏輯運(yùn)算符:

SLL——邏

這12種邏輯運(yùn)算符可以對(duì)“STD_LOGIC”和“BIT”等的邏輯型數(shù)據(jù)、“STD_LOGIC_VECTOR”邏輯型數(shù)組及布爾型數(shù)據(jù)進(jìn)行邏輯運(yùn)算。必須注意,運(yùn)算符的左邊和右邊,以及代入信號(hào)的數(shù)據(jù)類型必須是相同的。

當(dāng)一個(gè)語句中存在兩個(gè)以上邏輯表達(dá)式時(shí),在C語言中運(yùn)算有自左至右的優(yōu)先級(jí)順序的規(guī)定,而在VHDL中,左右沒有優(yōu)先級(jí)差別。例如,在下例中,如去掉式中的括號(hào),那么從語法上來說是錯(cuò)誤的:

X<=(aANDb)OR(NOTcANDd);

這12種邏輯運(yùn)算符可以對(duì)“STD_LOGIC”和“BI

當(dāng)然也有例外,如果一個(gè)邏輯表達(dá)式中只有“AND”、“OR”、“XOR”中的一種運(yùn)算符,那么改變運(yùn)算順序?qū)⒉灰欢〞?huì)導(dǎo)致邏輯的改變。此時(shí),括號(hào)是可以省略的。例如:

a<=bANDcANDdANDe;

a<=bORcORdORe;

a<=bXORcXORdXORe;

a<=((bNANDc)NANDd)NANDe;(必須要括號(hào))

a<=(bANDc)OR(dANDe);(必須要括號(hào))

在所有邏輯運(yùn)算符中,NOT的優(yōu)先級(jí)最高。

當(dāng)然也有例外,如果一個(gè)邏輯表達(dá)式中只有“AND”、“O

4.3.2算術(shù)運(yùn)算符

VHDL中有以下10種算術(shù)運(yùn)算符:

+

——加;

-

——減;

*?——乘;

/

——除;

MOD——求模;

REM——取余;

+

——正(一元運(yùn)算);

-

——負(fù)(一元運(yùn)算);

**?——指數(shù);

ABS——取絕對(duì)值。

4.3.2算術(shù)運(yùn)算符

VHDL中有以下10種算術(shù)運(yùn)

在算術(shù)運(yùn)算中,一元運(yùn)算的操作數(shù)(正、負(fù))可以為任何數(shù)值類型(整數(shù)、實(shí)數(shù)、物理量)。加法和減法的操作數(shù)也可以為任意數(shù)值類型,但應(yīng)具有相同的數(shù)據(jù)類型。乘、除法的操作數(shù)可以同為整數(shù)和實(shí)數(shù)。物理量可以被整數(shù)或?qū)崝?shù)相乘或相除,其結(jié)果仍為一個(gè)物理量。物理量除以同一類型的物理量即可得到一個(gè)整數(shù)量。求模和取余的操作數(shù)必須是同一整數(shù)類型的數(shù)據(jù)。一個(gè)指數(shù)的運(yùn)算符的左操作數(shù)可以是任意整數(shù)或?qū)崝?shù),而右操作數(shù)應(yīng)為一整數(shù)(只有在左操作數(shù)是實(shí)數(shù)時(shí),右操作數(shù)才可以是負(fù)整數(shù))。

在算術(shù)運(yùn)算中,一元運(yùn)算的操作數(shù)(正、負(fù))可以為任何數(shù)值

實(shí)際上,能夠真正綜合邏輯電路的算術(shù)運(yùn)算符只有“+”、“-”、“*”。在數(shù)據(jù)位較長的情況下,在使用算術(shù)運(yùn)算符進(jìn)行運(yùn)算,特別是使用乘法運(yùn)算符“*”時(shí),應(yīng)特別慎重。因?yàn)閷?duì)于16位的乘法運(yùn)算,綜合時(shí)邏輯門電路會(huì)超過2000個(gè)門。對(duì)于算術(shù)運(yùn)算符“/”、“MOD”、“REM”,分母的操作數(shù)為2乘方的常數(shù)時(shí),邏輯電路綜合是可能的。

當(dāng)對(duì)“STD_LOGIC_VECTOR”進(jìn)行“+”(加)、“-”(減)運(yùn)算時(shí),若兩邊的操作數(shù)和代入的變量位長不同,則會(huì)產(chǎn)生語法錯(cuò)誤。另外,“*”運(yùn)算符兩邊的位長相加后的值和要代入的變量的位長不相同時(shí),同樣也會(huì)出現(xiàn)語法錯(cuò)誤。

實(shí)際上,能夠真正綜合邏輯電路的算術(shù)運(yùn)算符只有“+”、“

4.3.3關(guān)系運(yùn)算符

VHDL中有以下6種關(guān)系運(yùn)算符:

=

——等于;

/=

——不等于;

<

——小于;

<=

——小于等于;

>

——大于;

>=

——大于等于。

4.3.3關(guān)系運(yùn)算符

VHDL中有以下6種關(guān)系運(yùn)算

在關(guān)系運(yùn)算符的左右兩邊是運(yùn)算操作數(shù),不同的關(guān)系運(yùn)算符對(duì)兩邊的操作數(shù)的數(shù)據(jù)類型有不同的要求。其中,等號(hào)“=”和不等號(hào)“/=”可以適用所有類型的數(shù)據(jù);其他關(guān)系運(yùn)算符則可使用于整數(shù)(INTEGER)、實(shí)數(shù)(REAL)、位(STD_LOGIC)等枚舉類型以及位矢量(STD_LOGIC_VECTOR)等數(shù)組類型的關(guān)系運(yùn)算。在進(jìn)行關(guān)系運(yùn)算時(shí),左右兩邊的操作數(shù)的數(shù)據(jù)類型必須相同,但是位長度不一定相同,當(dāng)然也有例外的情況。在利用關(guān)系運(yùn)算符對(duì)位矢量數(shù)據(jù)進(jìn)行比較時(shí),比較過程是從最左邊的位開始,自左至右按位進(jìn)行比較的。

在關(guān)系運(yùn)算符的左右兩邊是運(yùn)算操作數(shù),不同的關(guān)系運(yùn)算符對(duì)

在位長不同的情況下,只能將自左至右的比較結(jié)果作為關(guān)系運(yùn)算的結(jié)果。例如,對(duì)3位和4位的位矢量進(jìn)行比較:

在位長不同的情況下,只能將自左至右的比較結(jié)果作為關(guān)系運(yùn)

上例中,a的值為10,b的值為7,a應(yīng)該比b大。但是,由于位矢量是從左至右按位比較的,當(dāng)比較到次高位時(shí),a的次高位為“0”,而b的次高位為“1”,因此比較結(jié)果b比a大。這樣的比較結(jié)果顯然是不符合實(shí)際情況的。

為了能使位矢量進(jìn)行關(guān)系運(yùn)算,在包集合“STD_LOGIC_UNSIGNED”中對(duì)“STD_LOGIC_VECTOR”關(guān)系運(yùn)算重新作了定義,使其可以正確地進(jìn)行關(guān)系運(yùn)算。注意:在使用時(shí)必須首先說明調(diào)用該包集合。當(dāng)然,此時(shí)位矢量還可以和整數(shù)進(jìn)行關(guān)系運(yùn)算。

上例中,a的值為10,b的值為7,a應(yīng)該比b大。但是,

在關(guān)系運(yùn)算符中,小于等于符“<=”和代入符“<=”是相同的,在讀VHDL的語句時(shí),應(yīng)按照上下文關(guān)系來判斷此符號(hào)到底是關(guān)系符還是代入符。

在關(guān)系運(yùn)算符中,小于等于符“<=”和代入符“<=”是相

4.3.4并置運(yùn)算符

并置運(yùn)算符“&”用于位的連接。例如,將4個(gè)位用并置運(yùn)算符“&”連接起來就可以構(gòu)成一個(gè)具有4位長度的位矢量。兩個(gè)4位的位矢量用并置運(yùn)算符“&”連接起來就可以構(gòu)成8位長度的位矢量。圖4-3就是使用并置運(yùn)算符的實(shí)例。

4.3.4并置運(yùn)算符

并置運(yùn)算符“&”用于位的連接圖4-3并置運(yùn)算符使用實(shí)例圖4-3并置運(yùn)算符使用實(shí)例

圖4-3中,en是b(0)~b(3)的允許輸出信號(hào),而y(0)~y(7)中存在如下關(guān)系:

y(0)=b(0)y(1)=b(1)

y(2)=b(2)y(3)=b(3)

y(4)=a(0)y(5)=a(1)

y(6)=a(2)y(7)=a(3)

這種邏輯關(guān)系用并置運(yùn)算符可以很容易地表達(dá)出來:

tmp_b<=bAND(en&en&en&en);

y<=a&tmp_b;

圖4-3中,en是b(0)~b(3)的允許輸出信號(hào),而

第一個(gè)語句表示b的4位位矢量由en進(jìn)行選擇得到一個(gè)4位位矢量輸出。第二個(gè)語句表示4位位矢量a和4位位矢量b再次連接(并置)構(gòu)成8位位矢量y輸出。

位的連接也可使用集合體的方法,將并置運(yùn)算符換成逗號(hào)即可。例如:

tmp_b<=(en,en,en,en);

但是,這種方法不適用于位矢量之間的連接。如下的描述方法是錯(cuò)誤的:

a<=(a,tmp_b);

第一個(gè)語句表示b的4位位矢量由en進(jìn)行選擇得到一個(gè)4位

集合體也能指定位的腳標(biāo),例如上一個(gè)語句可表示如下:

tmp_b<=(3=>en,2=>en,1=>en,0=>en);

tmp_b<=(3DOWNTO0=>en);

在指定位的腳標(biāo)時(shí),也可以用“OTHERS”來說明:

tmp_b<=(OTHERS=>en);

注意:在集合體中“OTHERS”只能放在最后。假若b位矢量的腳標(biāo)b(2)的選擇信號(hào)為“0”,其他位的選擇信號(hào)均為en,那么此時(shí)表達(dá)式可寫為

tmp_b<=(2=>'0',OTHERS=>en);

集合體也能指定位的腳標(biāo),例如上一個(gè)語句可表示如下:

習(xí)題與思考題

4.1VHDL中3類客體常數(shù)、變量和信號(hào)的實(shí)際物理含義是什么?

4.2信號(hào)和變量在描述和使用時(shí)有哪些主要區(qū)別?

4.3在VHDL中標(biāo)準(zhǔn)數(shù)據(jù)類型有哪幾類?用戶可以自己定義的數(shù)據(jù)有哪幾類?

4.4若一個(gè)十二進(jìn)制計(jì)數(shù)器輸出count12_out要用整數(shù)來描述,則應(yīng)怎樣進(jìn)行定義?

習(xí)題與思考題

4.1VHDL中3類客體常數(shù)、變量

4.5下面數(shù)據(jù)類型的定義和操作是否正確?

4.6為什么要進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換?查閱附錄C,列出幾種主要轉(zhuǎn)換函數(shù)的名稱。

4.7在習(xí)題4.5中為了實(shí)現(xiàn)將cint的值代入atmp,應(yīng)怎樣使用轉(zhuǎn)換函數(shù)?

4.5下面數(shù)據(jù)類型的定義和操作是否正確?

4.8參閱附錄C,說明STD_LOGIC、STD_ULOGIC、STD_LOGIC_VECTOR、STD_ULOGIC_VECTOR之間的關(guān)系。下列操作是否正確?

4.8參閱附錄C,說明STD_LOGIC、STD_

4.9BIT類型數(shù)據(jù)和STD_LOGIC類型數(shù)據(jù)有什么區(qū)別?

4.10VHDL有哪幾類主要運(yùn)算?在一個(gè)表達(dá)式中有多種運(yùn)算符時(shí)應(yīng)按怎樣的準(zhǔn)則進(jìn)行運(yùn)算?

下面3個(gè)表達(dá)式是否等效?

a<=NOTbANDcORd;

a<=(NOTbANDc)ORd;

a<=NOTbAND(cORd);

4.9BIT類型數(shù)據(jù)和STD_LOGIC類型數(shù)據(jù)有

4.11并置運(yùn)算應(yīng)用于什么場合?下面的并置運(yùn)算是否正確?

SIGNALa:STD_LOGIC;

SIGNALeb:STD_LOGIC;

SIGNALb:STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALd:STD_LOGIC_VECTOR(7DOWNTO0);

b<=a&a&eb&eb;

d<=b&eb&eb&eb&eb;

4.11并置運(yùn)算應(yīng)用于什么場合?下面的并置運(yùn)算是感謝感謝96謝謝,精品課件資料搜集謝謝,精品課件資料搜集97第4章VHDL的數(shù)據(jù)類型與運(yùn)算操作符4.1VHDL的客體及其分類4.2VHDL的數(shù)據(jù)類型4.3VHDL的運(yùn)算操作符習(xí)題與思考題第4章VHDL的數(shù)據(jù)類型與運(yùn)算操作符4.1VHDL的

4.1VHDL的客體及其分類

在VHDL中,凡是可以賦予一個(gè)值的對(duì)象就稱為客體(Object)??腕w主要包括以下4種:信號(hào)(Signal)、變量(Variable)、常數(shù)(Constant)、文件(File)。在電子電路設(shè)計(jì)中,這4類客體通常都具有一定的物理含義。例如,信號(hào)對(duì)應(yīng)地代表物理設(shè)計(jì)中的某一條硬件連接線,常數(shù)對(duì)應(yīng)地代表數(shù)字電路中的電源和地等。當(dāng)然,變量對(duì)應(yīng)關(guān)系不太直接,通常只代表暫存某些值的載體。4類客體的含義和說明場合如表4-1所示。

4.1VHDL的客體及其分類

在VHDL中,凡是VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4

4.1.1常數(shù)

常數(shù)(Constant)是一個(gè)固定的值。所謂常數(shù)說明,就是對(duì)某一常數(shù)名賦予一個(gè)固定的值。通常賦值在程序開始前進(jìn)行,該值的數(shù)據(jù)類型則在說明語句中指明。常數(shù)說明的一般格式如下:

CONSTANT常數(shù)名:數(shù)據(jù)類型:=表達(dá)式;

4.1.1常數(shù)

常數(shù)(Constant)是一個(gè)固定

例如:

CONSTANTVCC:REAL:=5.0;

CONSTANTDALY:TIME:=100ns;

CONSTANTFBUS:BIT_VECTOR:="0101";

例如:

CONSTANTVCC:REAL

常數(shù)一旦被賦值就不能再改變。上面VCC被賦值為5.0V,那么在所有的VHDL程序中VCC的值就固定為5.0V,它不像后面所提到的信號(hào)和變量那樣,可以任意代入不同的數(shù)值。另外,常數(shù)所賦的值應(yīng)和定義的數(shù)據(jù)類型一致。例如:

CONSTANTVCC:REAL:=“0101”;

這樣的常數(shù)說明顯然是錯(cuò)誤的。

常數(shù)一旦被賦值就不能再改變。上面VCC被賦值為5.0

4.1.2變量

在93版中,變量(Variable)增添了一種可在全局引用的共享變量(SharedVariable),但初學(xué)者應(yīng)慎用。因?yàn)?,幾個(gè)進(jìn)程執(zhí)行的時(shí)序不同會(huì)產(chǎn)生不同的結(jié)果。以后書中未作特殊說明的變量都是局部變量。

4.1.2變量

在93版中,變量(Variable

1.共享變量

前面已經(jīng)提到信號(hào)和變量的重要區(qū)別是:信號(hào)可以是全局量,只要在構(gòu)造體中已定義,那么在構(gòu)造體內(nèi)的所有地方都可以使用;變量是局部量,只能在進(jìn)程、子程序內(nèi)部定義和使用。如果要將結(jié)果帶出外部,則必須將變量值賦給某一個(gè)信號(hào)量才行。

但是,實(shí)際使用過程中有時(shí)希望進(jìn)程或子程序中的結(jié)果以變量形式進(jìn)行數(shù)據(jù)傳遞,因此,在93版中定義了共享變量。共享變量的說明格式如下:

SHAREDVARIABLE變量名:子類型名[:=初始值];

1.共享變量

前面已經(jīng)提到信號(hào)和變量的重要區(qū)別是VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4

p1進(jìn)程在時(shí)鐘上升沿將共享變量notclk置為“0”,而p2進(jìn)程在時(shí)鐘下降沿將notclk置為“1”,從而使notclk和clk在任何時(shí)刻其值正好相反。共享變量除在進(jìn)程和子程序的說明域中不能使用外,在其他任何地方都可以使用。但是,如前所述,初學(xué)者應(yīng)慎用,因?yàn)閹讉€(gè)并發(fā)進(jìn)程執(zhí)行的時(shí)序不同,會(huì)產(chǎn)生不同的結(jié)果。

p1進(jìn)程在時(shí)鐘上升沿將共享變量notclk置為

2.局部變量

局部變量只能在進(jìn)程語句、函數(shù)語句和過程語句結(jié)構(gòu)中使用,它是一個(gè)局部量。在仿真過程中,它不像信號(hào)那樣,到了規(guī)定的仿真時(shí)間才進(jìn)行賦值,局部變量的賦值是立即生效的。局部變量說明語句的格式如下:

VARIABLE變量名:數(shù)據(jù)類型約束條件:=表達(dá)式;

2.局部變量

局部變量只能在進(jìn)程語句、函數(shù)語句和過

例如:

VARIABLEx,y:INTEGER;

VARIABLEcount:INTEGERRANGE0TO255:=10;

局部變量在賦值時(shí)不能產(chǎn)生附加延時(shí)。例如,tmp1、tmp2、tmp3都是局部變量,那么下式產(chǎn)生延時(shí)的方式是不合法的:

tmp3:=tmp1+tmp2AFTER10ns;

例如:

VARIABLEx,y:INTEG

4.1.3信號(hào)

信號(hào)(Signal)是電子電路內(nèi)部硬件連接的抽象。它除了沒有數(shù)據(jù)流動(dòng)方向說明以外,其他性質(zhì)幾乎和前面所述的“端口”概念一致。信號(hào)通常在構(gòu)造體、包集合和實(shí)體中說明。信號(hào)說明的語句的格式如下:

SIGNAL信號(hào)名:數(shù)據(jù)類型約束條件:=表達(dá)式;

4.1.3信號(hào)

信號(hào)(Signal)是電子電路內(nèi)部

例如:

SIGNALsys_clk:BIT:=‘0’;

SIGNALground:BIT:=‘0’;

在程序中,信號(hào)值的代入采用“<=”代入符,而不是像變量賦值時(shí)用“:=”符,而且信號(hào)代入時(shí)可以附加延時(shí)。例如,s1和s2都是信號(hào),且s2的值經(jīng)10?ns延時(shí)以后才被代入s1。此時(shí)信號(hào)傳送語句可寫為

s1<=s2AFTER10ns;

例如:

SIGNALsys_clk:BIT

信號(hào)是一個(gè)全局量,它可以用來進(jìn)行進(jìn)程之間的通信。

一般來說,在VHDL中對(duì)信號(hào)賦值是按仿真時(shí)間來進(jìn)行的。信號(hào)值的改變也需按仿真時(shí)間的計(jì)劃表行事。

在93版中可對(duì)信號(hào)賦無效值,以表明不改變當(dāng)前驅(qū)動(dòng)器的輸出值。例如:

a<=NULL;

執(zhí)行該條語句,a的信號(hào)值將不發(fā)生變化。

信號(hào)是一個(gè)全局量,它可以用來進(jìn)行進(jìn)程之間的通信。

4.1.4信號(hào)和變量值代入的區(qū)別

信號(hào)和變量值的代入不僅形式不同,其操作過程也不相同。在變量的賦值語句中,該語句一旦被執(zhí)行,其值立即被賦予變量。在執(zhí)行下一條語句時(shí),該變量的值就為上一句新賦的值。變量的賦值符為“:=”。信號(hào)代入語句采用“<=”代入符,該語句即使被執(zhí)行也不會(huì)使信號(hào)立即發(fā)生代入,下一條語句執(zhí)行時(shí),仍使用原來的信號(hào)值。由于信號(hào)代入語句是同時(shí)進(jìn)行處理的,因此,實(shí)際代入過程和代入語句的處理是分開進(jìn)行的。

4.1.4信號(hào)和變量值代入的區(qū)別

信號(hào)和變量值的代

如圖4-1所示,信號(hào)C和D的代入值(A+B)和(C+B)將由PROCESS外部通過進(jìn)程的敏感信號(hào)A、B、C取得。進(jìn)程執(zhí)行時(shí),只從信號(hào)所對(duì)應(yīng)的實(shí)體取值,只要不碰到WAIT語句或進(jìn)程執(zhí)行結(jié)束,進(jìn)程執(zhí)行過程中信號(hào)值是不進(jìn)行代入的。如圖4-2所示,為了進(jìn)行仿真,需要讓代入和處理交替反復(fù)進(jìn)行。

如圖4-1所示,信號(hào)C和D的代入值(A+B)和(C+B圖4-1信號(hào)代入值的取得圖4-1信號(hào)代入值的取得圖4-2進(jìn)程語句的順序處理圖4-2進(jìn)程語句的順序處理

【例4-1】以下是兩個(gè)進(jìn)程描述的語句。首先,由于信號(hào)A發(fā)生變化使進(jìn)程語句開始啟動(dòng)執(zhí)行。這樣一來,仿真器對(duì)進(jìn)程中的各語句自上至下地進(jìn)行處理。當(dāng)進(jìn)程所有語句執(zhí)行完畢,或者中途碰到WAIT語句時(shí),該進(jìn)程執(zhí)行結(jié)束,信號(hào)代入過程被執(zhí)行,代入同樣應(yīng)按順序自上至下地進(jìn)行。

【例4-1】以下是兩個(gè)進(jìn)程描述的語句。首先,由于信號(hào)VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)(第五版)侯伯亨章課件4

結(jié)果:

X<=B+A;

Y<=B+C;

在例4-1的第一個(gè)進(jìn)程中,D中最初代入的值是A,接著又代入C值。盡管D中先代入A值,后代入C值,在時(shí)間上有一個(gè)Δ的延時(shí),但是,在代入時(shí)由于不進(jìn)行處理,因此仿真時(shí)認(rèn)為是時(shí)間0值延時(shí)。D的最終值應(yīng)為C,這樣X和Y的內(nèi)容都為B+C。

結(jié)果:

X<=B+A;

Y<=

在例4-1的第二個(gè)進(jìn)程中,D是變量。在執(zhí)行“D:=A;”語句以后,A的值就被賦給D,所以X為B+A。此后又執(zhí)行“D:=C;”,從而使Y為B+C。從這里可以看出,信號(hào)量的值將進(jìn)程語句最后所代入的值作為最終代入值,而變量的值一經(jīng)賦值就變成新的值。這就是變量賦值和信號(hào)代入在操作上的區(qū)別。

在例4-1的第二個(gè)進(jìn)程中,D是變量。在執(zhí)行“D:=

4.1.5文件

在VHDL中提供了一個(gè)預(yù)先定義的包集合——文本輸入/輸出包集合(TEXTIO),在該TEXTIO中包含有對(duì)文本文件進(jìn)行讀/寫的過程和函數(shù)。這些文本文件都是ASCII碼文

件,其格式可根據(jù)編程人員的需要設(shè)定(VHDL對(duì)文件格式不作任何限制,但是主機(jī)對(duì)此往往有一定限制)。TEXTIO按行對(duì)文件進(jìn)行處理,一行為一個(gè)字符串,并以回車、換行符作為行結(jié)束符。

4.1.5文件

在VHDL中提供了一個(gè)預(yù)先定義的包

1.文件類型定義的格式

文件類型定義的格式如下:

TYPE類型名ISFILEOF類型/子類型名;

例如:

TYPEindexISRANGE0TO15;

TYPEint_ftypeISFILEOFindex;

1.文件類型定義的格式

文件類型定義的格式如下:

2.文件操作語句

TEXTIO中提供了打開文件、關(guān)閉文件、從文件讀/寫一行的過程及檢查文件結(jié)束的函數(shù):

FILE_OPEN(文件名,“外部文件名”,文件讀寫類型)

FILE_CLOSE(文件名)

READ

WRITE

ENDFILE(文件名)

TEXTIO還隱含行讀和行寫兩個(gè)子過程;

READLINE(目的行變量,源行變量)

WRITELINE(目的行變量,源行變量)

2.文件操作語句

TEXTIO中提供了打開文件、關(guān)

TEXTIO也對(duì)用于處理文本文件的數(shù)據(jù)類型作了具體說明。數(shù)據(jù)類型line(行)是讀/寫文本文件時(shí)要用的,line的結(jié)構(gòu)是TEXTIO對(duì)文件進(jìn)行操作的基本單位。例如,對(duì)文件進(jìn)行讀操作時(shí),首先讀一行字符,并將它放到line數(shù)據(jù)類型的結(jié)構(gòu)中,而后再按字段進(jìn)行處理。具體應(yīng)用實(shí)例將在第9章中詳述。

TEXTIO也對(duì)用于處理文本文件的數(shù)據(jù)類型作了具體說明

4.2VHDL的數(shù)據(jù)類型

如前所述,在VHDL中信號(hào)、變量、常數(shù)都要指定數(shù)據(jù)類型,因此,VHDL提供了多種標(biāo)準(zhǔn)的數(shù)據(jù)類型。另外,為使用戶設(shè)計(jì)方便,還可以由用戶自定義數(shù)據(jù)類型。這樣使語言的描述能力及自由度得到了更進(jìn)一步的提高,從而為系統(tǒng)高層次的仿真提供了必要手段。與此相反,VHDL的數(shù)據(jù)類型的定義相當(dāng)嚴(yán)格,不同類型之間的數(shù)據(jù)不能直接代入,而且即使數(shù)據(jù)類型相同,位長不同也不能直接代入。這樣,為了熟練地使用VHDL編寫程序,必須很好地理解各種數(shù)據(jù)類型的定義。

4.2VHDL的數(shù)據(jù)類型

如前所述,在VHDL中

4.2.1標(biāo)準(zhǔn)的數(shù)據(jù)類型

標(biāo)準(zhǔn)的數(shù)據(jù)類型共有10種,如表4-2所示。

4.2.1標(biāo)準(zhǔn)的數(shù)據(jù)類型

標(biāo)準(zhǔn)的數(shù)據(jù)類型共有10種

下面對(duì)各數(shù)據(jù)類型作一簡要說明。

1.整數(shù)(Integer)

整數(shù)與數(shù)學(xué)中整數(shù)的定義相同。在VHDL中,整數(shù)的表示范圍為

-2

147

483

647~2

147

483

647,即

-(231

-

1)~(231

-

1)。千萬不要把一個(gè)實(shí)數(shù)(含小數(shù)點(diǎn)的數(shù))賦予一個(gè)整數(shù)變量,這是因?yàn)閂HDL是一個(gè)強(qiáng)類型語言,它要求在賦值語句中的數(shù)據(jù)類型必須匹配。整數(shù)的例子如下:

+136,+12456,-457

下面對(duì)各數(shù)據(jù)類型作一簡要說明。

1.整數(shù)(Inte

盡管整數(shù)值在電子系統(tǒng)中可能是用一系列二進(jìn)制位值來表示的,但是整數(shù)不能看作位矢量,也不能按位來進(jìn)行訪問,對(duì)整數(shù)不能用邏輯操作符。當(dāng)需要進(jìn)行位操作時(shí),可以用轉(zhuǎn)換函數(shù),將整數(shù)轉(zhuǎn)換成位矢量。目前,有的CAD廠商所提供的工具中對(duì)此規(guī)定已有所突破,允許對(duì)有符號(hào)和無符號(hào)的整型量進(jìn)行算術(shù)邏輯運(yùn)算。

在電子系統(tǒng)的開發(fā)過程中,整數(shù)也可以作為對(duì)信號(hào)總線狀態(tài)的一種抽象手段,用來準(zhǔn)確地表示總線的某一種狀態(tài)。

盡管整數(shù)值在電子系統(tǒng)中可能是用一系列二進(jìn)制位值來表示的

2.實(shí)數(shù)(Real)

在進(jìn)行算法研究或者實(shí)驗(yàn)時(shí),作為對(duì)硬件方案的抽象手段,常常采用實(shí)數(shù)四則運(yùn)算。實(shí)數(shù)的定義值范圍為

-1.0E

+

38~+1.0E?+

38。實(shí)數(shù)有正負(fù)數(shù),書寫時(shí)一定要有小數(shù)點(diǎn)。例如:

-1.0,+2.5,-1.0E+38

有些數(shù)可以用整數(shù)表示,也可以用實(shí)數(shù)表示。例如,數(shù)字1的整數(shù)表示為1,而用實(shí)數(shù)表示則為1.0。兩個(gè)數(shù)的值是一樣的,但數(shù)據(jù)類型卻不一樣。

2.實(shí)數(shù)(Real)

在進(jìn)行算法研究或者實(shí)驗(yàn)時(shí),作

3.位(Bit)

在數(shù)字系統(tǒng)中,信號(hào)值通常用一個(gè)位來表示。位值的表示方法是:用字符?‘0’?或者?‘1’

(將值放在單引號(hào)中)來表示。位與整數(shù)中的1和0不同,‘1’?和?‘0’?僅僅表示一個(gè)位的兩種取值。位值有時(shí)也可以顯式說明,例如:

BIT‘

(’1‘)

位數(shù)據(jù)可以用來描述數(shù)字系統(tǒng)中總線的值。位數(shù)據(jù)不同于布爾數(shù)據(jù),當(dāng)然也可以用轉(zhuǎn)換函數(shù)進(jìn)行轉(zhuǎn)換。

3.位(Bit)

在數(shù)字系統(tǒng)中,信號(hào)值通常用一個(gè)位

4.位矢量(Bit_Vector)

位矢量是93版擴(kuò)展的數(shù)據(jù)類型,它是用雙引號(hào)括起來的擴(kuò)展的數(shù)字序列。例如:

B“001_101_010”——9位二進(jìn)制位串;

X“A_F0_FC”——20位十六進(jìn)制位串;

O“3701”——12位八進(jìn)制位串;

X“

”——空位串。

在這里,位矢量最前面的B、X、O表示二、十六、八進(jìn)制。用位矢量數(shù)據(jù)表示總線狀態(tài)最形象也最方便,在以后的VHDL程序中將會(huì)經(jīng)常遇到。

4.位矢量(Bit_Vector)

位矢量是93版

5.布爾量(Boolean)

一個(gè)布爾量具有兩種狀態(tài)——“真”或者“假”。雖然布爾量也是二值枚舉量,但它和位不同,沒有數(shù)值的含義,也不能進(jìn)行算術(shù)運(yùn)算。它能進(jìn)行關(guān)系運(yùn)算。例如,它可以在IF語句中被測試,測試結(jié)果產(chǎn)生一個(gè)布爾量TRUE或者FALSE。

一個(gè)布爾量常用來表示信號(hào)的狀態(tài)或者總線上的情況。如果某個(gè)信號(hào)或者變量被定義為布爾量,那么在仿真中將自動(dòng)地對(duì)其賦值進(jìn)行核查。一般這一類型的數(shù)據(jù)的初始值總為FALSE。

5.布爾量(Boolean)

一個(gè)布爾量具有兩種狀

6.字符(Character)

字符也是一種數(shù)據(jù)類型,所定義的字符量通常用單引號(hào)括起來,如?‘A’。一般情況下VHDL對(duì)大小寫不敏感,但是對(duì)字符量中的大、小寫字符則認(rèn)為是不一樣的。例如,‘B’不同于?‘b’。字符量中的字符可以是a~z中的任一個(gè)字母、0~9中的任一個(gè)數(shù)以及空白或者特殊字符,如?$、@、%?等。包集合STANDARD中給出了預(yù)定義的128個(gè)ASCII碼字符類型,不能打印的用標(biāo)識(shí)符給出。字符?‘1’?與整數(shù)1和實(shí)數(shù)1.0都是不相同的。當(dāng)要明確指出1的字符數(shù)據(jù)時(shí),可寫為

CHARACTER'('1')

6.字符(Character)

字符也是一種數(shù)據(jù)類

7.字符串(String)

字符串是由雙引號(hào)括起來的一個(gè)字符序列,也稱為字符矢量或字符串?dāng)?shù)組。例如:

"integerrange"

字符串常用于程序的提示和說明。

7.字符串(String)

字符串是由雙引號(hào)括起來

8.時(shí)間(Time)

時(shí)間是一個(gè)物理量數(shù)據(jù)。完整的時(shí)間量數(shù)據(jù)應(yīng)包含整數(shù)和單位兩部分,而且整數(shù)和單位之間至少應(yīng)留一個(gè)空格的位置。例如,55

sec、2?min等。在包集合STANDARD中給出了時(shí)間的預(yù)定義,其單位為fs、ps、ns、ms、ms、sec、min、hr。下面是時(shí)間數(shù)據(jù)的例子:

20ms,100?ns,3?sec

在系統(tǒng)仿真時(shí),時(shí)間數(shù)據(jù)特別有用,用它可以表示信號(hào)延時(shí),從而使模型系統(tǒng)更逼近實(shí)際系統(tǒng)的運(yùn)行環(huán)境。

8.時(shí)間(Time)

時(shí)間是一個(gè)物理量數(shù)據(jù)。完整的

9.錯(cuò)誤等級(jí)(SeverityLevel)

錯(cuò)誤等級(jí)類型數(shù)據(jù)用來表征系統(tǒng)的狀態(tài),共有4種:NOTE(注意)、WARNING(警告)、ERROR(出錯(cuò))、FAILURE(失敗)。在系統(tǒng)仿真過程中,可以用這4種狀態(tài)來提示系統(tǒng)當(dāng)前的工作情況。這樣可以使操作人員隨時(shí)了解當(dāng)前系統(tǒng)工作的情況,并根據(jù)系統(tǒng)的不同狀態(tài)采取相應(yīng)的對(duì)策。

9.錯(cuò)誤等級(jí)(SeverityLevel)

錯(cuò)誤

10.大于等于零的整數(shù)(Natural,自然數(shù))、正整數(shù)(Positive)

這兩類數(shù)據(jù)是整數(shù)的子類,Natural類數(shù)據(jù)只能取值0和0以上的正整數(shù),Positive只能為正整數(shù)。

上述10種數(shù)據(jù)類型是VHDL中標(biāo)準(zhǔn)的數(shù)據(jù)類型,在編程時(shí)可以直接引用。如果用戶需使用這10種以外的數(shù)據(jù)類型,則必須進(jìn)行自定義。大多數(shù)CAD廠商已在包集合中對(duì)標(biāo)準(zhǔn)數(shù)據(jù)類型進(jìn)行了擴(kuò)展,例如數(shù)組型數(shù)據(jù)等,這一點(diǎn)請(qǐng)讀者注意。

10.大于等于零的整數(shù)(Natural,自然數(shù))、正整

由于VHDL屬于強(qiáng)類型語言,因此在仿真過程中,首先要檢查賦值語句中的類型和區(qū)間,任何一個(gè)信號(hào)和變量的賦值均須落入給定的約束區(qū)間

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論