數(shù)字系統(tǒng)設計:2.3 VHDL對象、數(shù)據(jù)類型及運算符_第1頁
數(shù)字系統(tǒng)設計:2.3 VHDL對象、數(shù)據(jù)類型及運算符_第2頁
數(shù)字系統(tǒng)設計:2.3 VHDL對象、數(shù)據(jù)類型及運算符_第3頁
數(shù)字系統(tǒng)設計:2.3 VHDL對象、數(shù)據(jù)類型及運算符_第4頁
數(shù)字系統(tǒng)設計:2.3 VHDL對象、數(shù)據(jù)類型及運算符_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2.3VHDL對象、數(shù)據(jù)類型和運算符1、VHDL數(shù)據(jù)對象(1)常量(2)變量(3)信號(4)信號與端口的比較(5)信號與變量的比較(1)標準數(shù)據(jù)類型(2)用戶定義的數(shù)據(jù)類型(3)數(shù)據(jù)類型轉換2、VHDL數(shù)據(jù)類型3、VHDL運算符VHDL對象:常量常量:定義在設計描述中不變化的值格式:CONSTANT

常數(shù)名:數(shù)據(jù)類型:=表達式;例:constantVCC:real:=5.0;constantdelay:time:=10ns;

constant

fbus:bit_vector:=“0101”;用途:在ENTITY,ARCHITECTURE,PACKAGE,PROCESS,PROCEDURE,F(xiàn)UNCTION中保持靜態(tài)數(shù)據(jù),以改善程序的可讀性,并使修改程序容易。對象:

程序中可被賦值的載體(信號,變量,常量)VHDL對象:常量例:architecture

behavofexampleisbeginprocess(rst,clk,en)constantzero:std_logic_vector(7dwonto0):=“00000000”;beginifclk’eventandclk=‘1’thenif(rst=‘1’)thenq<=zero;

elsif(en=‘1’)thenq<=data;elseq<=q;endif;endif;endprocess;endbehav;

--請寫出對應的實體說明

VHDL對象:變量變量:定義進程中或子程序中的變化量格式:VARIABLE

變量名:數(shù)據(jù)類型:=初始值;例:variabletmp:std_logic:=‘0’;用途:在PROCESS,F(xiàn)UNCTION,ROCEDURE中使用,用于描述算法和方便程序中的數(shù)值運算,是一種局部量。VHDL對象:變量例:Architecture

behavofcountisbeginprocess(clk)

variabletemp:integerrangeoto255:=‘0’;beginifclk’eventandclk=’1’then temp:=temp+1;endif; q<=temp;endprocess;endbehav;

--請寫出對應的實體說明

VHDL對象:信號信號:在ENTITY,ARCHITECTURE和PACKAGE中用于定義內(nèi)部連線,在元件間起互連聯(lián)作用;或作為一種數(shù)據(jù)容器,以保留歷史值或當前值。用來描述實體內(nèi)部節(jié)點。格式:

SIGNAL

信號名:數(shù)據(jù)類型:=初始值;例:signaly:integerrange0to15;VHDL對象:信號例1:architecture

behavofexampleisconstantxdata:integer:=2;

signal

y:integerrange0to15;beginprocess(s)variabletmp:integer:=0;beginifs=’0’thentmp:=3;elsetmp:=7;endif;

y<=tmp+xdata;endprocess;q<=y;endbehav;VHDL對象:信號例2:

architecture

behavofcounteris

signalcount:std_logic_vector(7downto0);beginprocess(clk)beginif(clk’eventandclk=’1’)thenifen=‘1’thencount<=data;elsecount<=count+1;endif;endif;endprocess;q<=count;endbehav;VHDL對象:信號與端口比較1.信號和端口都描述了電路中實際存在的節(jié)點。信號描述的是實體內(nèi)部的節(jié)點,而端口描述實體與外界的接口。2.信號理解為“實體內(nèi)部不限定數(shù)據(jù)流動方向的端口”。3.端口理解為“限定數(shù)據(jù)流動方向的信號”。4.信號賦值具有延時。VHDL對象:信號與端口比較1.聲明形式與賦值符號不同。2.有效域不同。 信號在結構體內(nèi)、進程外定義,變量在進程內(nèi)定義。信號有效域為整個結構體,可在不同進程中傳遞數(shù)值;變量的有效域是定義該變量的進程。3.賦值操作的執(zhí)行不同。 變量賦值是立即生效,在執(zhí)行下一條語句是,該變量的值為上一句新賦的值;信號賦值具有延時性,信號的賦值語句即使被執(zhí)行也不會使信號立即發(fā)生代入,下一條語句執(zhí)行時,仍使用原來的信號值(信號是在進程掛起時發(fā)生代入)。VHDL對象:變量與信號的比較VHDL對象:變量與信號的比較4.對應硬件結構不同。信號對應實際電路的某個節(jié)點或信號線;變量是一個抽象值,它不與任何實際電路連線對應。

注意:變量不與任何實際電路連線對應,不代表變量賦值行為不產(chǎn)生與之對應的硬件結構。變量賦值語句既然是可綜合的,就一定會對硬件結構產(chǎn)生影響。5.應用場合不同。在實際應用中,信號的行為更接近硬件的實際情況,因此更多地使用信號進行電路內(nèi)部數(shù)據(jù)傳遞,只在描述一些用信號很難描述的算法時才用到變量。變量典型應用場合舉例VHDL對象:變量與信號的比較在LOOP語句中,若在一個循環(huán)體內(nèi)需要對某一個數(shù)據(jù)進行多次操作,則必須使用變量,因為對信號的多次賦值只有最后一次會生效。VariableSum:IntegerRANGE0TO127;

. . .FORiIN1To9LOOPSum:=Sum+i;ENDLOOP;FORiIN1To9LOOPData(i-1)<=Data(i);ENDLOOP;此處換成sum<=sum+i可以嗎?VHDL對象:小結1、變量常定義在進程與子程序中,用于保存運算的中間臨時數(shù)據(jù),或作為循環(huán)語句中的循環(huán)變量,其賦值立即發(fā)生。(:=)2、常量用于保存靜態(tài)的數(shù)據(jù)(:=)。3、信號有明顯的連線或容器的對應關系,具有輸出波形,對其賦值需要延遲時間(<=),在進程間或子程序間具有信息傳遞功能。4、注意對象定義的所在位置及適用區(qū)域的對應關系VHDL的數(shù)據(jù)類型:標準數(shù)據(jù)類型VHDL的數(shù)據(jù)類型:標準數(shù)據(jù)類型(1)

Integer(整數(shù))

不能按位操作,不能進行邏輯運算,常用于表示系統(tǒng)總線狀態(tài)(2)Real(實數(shù))

常用于算法研究,書寫時加小數(shù)點-1.0;+2.15;-1.0E38(3)Bit(位)

單引號.‘1’;‘0’(4)Bit_vector

(位矢量)雙引號.Signala:bit_vector(7downto0):=“01011000”=X”58”;

常用來表示總線狀態(tài)(5)Std_logic(標準邏輯)

‘U’(初始值),‘X’(不定態(tài)),’0’,’1’,’Z’(高阻),

’W’(弱不定),’L’(弱’0’),’H’(弱’1’),’-’(不可能情況)VHDL的數(shù)據(jù)類型:標準數(shù)據(jù)類型(6)Std_logic_vector(標準邏輯矢量)

表示總線(7)Boolean(布爾)兩種值:TRUE,FALSE;

初值為FALSE.常用于表示信號或總線狀態(tài)(8)Character(字符)

用單引號.‘b’,‘B’(9)String(字符串)雙引號.“study”,常用于程序說明和提示(10)Time(時間)

55sec,(fs,ps,ns,us,ms,sec,min,hr.)VHDL的數(shù)據(jù)類型:標準數(shù)據(jù)類型(11)Severitylevel

(錯誤等級)NOTE,WARNING,ERROR,FAILURE(12)Natural,positive(自然數(shù)、正整數(shù))

0,1,2,3,……;1,2,3,4……

約束區(qū)間說明: INTEGERRANGE

100DOWNTO1 BIT_VECTOR(3DOWNTO

0) REALRANGE2.0

TO30.0VHDL的數(shù)據(jù)類型:用戶定義數(shù)據(jù)類型(1)枚舉類型

TYPEweekIS(sum,mon,tue,wed,thu,tri,sat);

Signalday:week;(2)子類型SUBTYPESUBTYPE只是由TYPE所定義的原數(shù)據(jù)類型的一個子集SUBTYPE子類型名

IS

數(shù)據(jù)類型名[范圍];

例:

SUBTYPEnaturalISintegerrange0to9;

SUBTYPE

my_vectorISbit_vector(0to15);

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

IS

數(shù)據(jù)類型定義

OF

基本數(shù)據(jù)類型或

TYPE

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

IS

數(shù)據(jù)類型定義VHDL的數(shù)據(jù)類型:用戶定義數(shù)據(jù)類型(3)整數(shù)類型和實數(shù)類型

整數(shù)和實數(shù)的數(shù)據(jù)類型的取值范圍太大,綜合器無法綜合,因此需要給它們限定一個范圍。

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

IS

數(shù)據(jù)類型定義約束范圍

例:

TYPEpercentISINTEGERRANGE-100TO100

(同前頁子類型進行比較)

VHDL的數(shù)據(jù)類型:用戶定義數(shù)據(jù)類型(4)數(shù)組類型

TYPE

數(shù)組名

IS

ARRAY(數(shù)組范圍)

OF

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

例1:

TYPEBYTEISARRAY(7DOWNTO0)ofSTD_LOGIC;例2:

非限定數(shù)組

TYPEbit_vectorISARRAY(NaturalRange<>)OFBIT;例3: 二維數(shù)組

typevectorisarray(3downto0)ofBYTE;VHDL的數(shù)據(jù)類型:用戶定義數(shù)據(jù)類型二維數(shù)組VHDL的數(shù)據(jù)類型:用戶定義數(shù)據(jù)類型(5)記錄類型

TYPE

記錄類型名IS

RECORD

元素名:元素數(shù)據(jù)類型;元素名:元素數(shù)據(jù)類型;

...

ENDRECORD

[記錄類型名];例:typemonth_nameis(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);typedateisrecordday:integerrange1to31;

mont:month_name;year:integerrange0to300;endrecord;VHDL數(shù)據(jù)類型轉換VHDL運算符VHDL運算符移位操作:

SLL(邏輯左移)

SRL(邏輯右移)

溫馨提示

  • 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

提交評論