eda知識點梳理_第1頁
eda知識點梳理_第2頁
eda知識點梳理_第3頁
eda知識點梳理_第4頁
eda知識點梳理_第5頁
免費預覽已結束,剩余19頁可下載查看

下載本文檔

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

文檔簡介

1、WDL窈冊基本鶴躺規/夾銅IVHDLS:老翹 曲呼罪VHDL齦逍騒型#療朗鼠祐WDL壞繭fVHDLiOVHDI輔和鮮包.知識點:VHDL文字規則1、數字型文字一一由數字、小數點與下劃線組成(1) 整數文字5, 678, 156E2, 45_234_287(=45234287)實數文字 188、993,88_670_551、453_909(3)以數制基數表示得文字格式:數制#數值#(指數)例如:10#170#16#FE#2#1101_0001#8#376#16#E#E14)物理量文字例如:60 s,100 m2、字符串文字字符一一以單引號括起來得數字、字母與符號(ASCII碼)例如:'0

2、' ,' 1' ,' A' ,' B' ,' a' ,' b' 字符串一一一維得字符數組 ,用雙引號括起來。(1) 文字字符串例如:“ ABC',“ A BOY ”,“ A” ,“ 1011”(2) 數值字符串一一位矢量B二進制基數符號;O八進制基數符號;X 16進制基數符號;B “111_011_110” ;矢量數組長度為9O “15” ;等效 B “001101 ”,長度為 6X “ ADO” ;等效B “ 1 ” ,長度為12數值字符串中可添加下劃線,不影響其長度標識符一一就是用戶給常量、變量

3、、信號、端口、子程序或參數定義得名字例如:格式:數制基數符號“數值字符串” 其中:規則('87標準 , 又稱短標識符 ):標識符由字母(AZ;az)、數字與下劃線字符組成 任何標識符必須以英文字母開頭 末字符不能為下劃線 不允許出現兩個連續下劃線 標識符中不區分大小寫字母VHDL定義得保留字或稱關鍵字,不能用作標識符 VHDL'93 標準支持擴展標識符 ,以反斜杠來定界 上得下劃號。擴標用反斜杠界定。如 允許包含圖形符號、空格符。如 反斜杠之間得字符可用保留字。如 擴標得界定符兩個斜杠之間可以用數字打頭。如 擴標中允許多個下劃線相連。如:Four_screens,擴展標識符中得

4、一個反斜杠,要用兩個反斜杠來代替擴標區分大小寫。如 : EDA 與 不同。 擴標與短標不同。如 :puter 與 puter 不同。4、下標名數組用途 :用于指示數組型變量或信號得某一個元素 格式 :標識符 (表達式 )例如:b(3);表示數組型變量或信號b得第3個元素5、段名多個下標名得組合用途 :用于指示數組型變量或信號得某一段元素 格式 :標識符 (表達式 方向 表達式 ) 方向:TO一一下標序號由低到高DOWNTO下標序號由高到低例如:D(7 DOWNTO 0);表示數據總線 D7D0D(5 TO 7 )表示數據總線 D5D76、注釋,允許以數字開頭 ,允許使用空格以及兩個以等。等。等

5、。等。VHDL中得注釋由兩個連續得短線(-)開始,直到行尾。VHDL數據對象一一存放各種類型數據得容器,包括變量、常量、信號與文件1、變量 (VARIABLE)規則:只能在進程(PROCESS函數(FUNCTION與過程(PROCEDUR中說明與使用得局域量 定義格式 :VARIABLE變量名:數據類型(范圍)(:=初始值)女口:VARIABLE a:INTEGER;VARIABLE b:INTEGER :=2; VARIABLE c:INTEGER RANGE 0 TO 7 :=2;變量賦值語句 :目標變量名 :=表達式例如 :VARIABLE x,y:REAL VARIABLE a,b:B

6、IT VECTOR(0 TO 7);x:=100、 0;y:=1、 5+x;a:=“” a(3 TO 6):=(1',1',0',1'); a(0 TO 5):=b(2 TO 7); 變量使用要點 : 變量就是一個局部量 ,只能在進程與子程序中使用 ,不能將信息帶出對它作出定義得當前設計 單元。 變量賦值立即發生 ,無延時行為。,綜合器將略去所有初值。VHDL不支持變量附加延時語句。變量得初值不就是必需得 變量常用在實現某種算法得賦值語句中。2、信號 (SIGNAL)規則:信號就是在結構體(ARCHITECTURE)程序包(PACKAGE與實體中聲明得全局量。

7、信號定義格式 :SIGNAL 信號名 :數據類型 (范圍)(:=初值) 例如 :SIGNAL temp:STD LOGIC:= 0';SIGNAL flaga,flagb:BITSIGNAL data:STD LOGIC VECTOR(15 DOWNTO 0);信號賦值語句 :“V = ”賦值;,兩者都用“ :=”號。目標信號名V =表達式 例如 :xV =9; y V =x; zV =x AFTER 5 ns; 注意信號與變量賦值方法得區別 變量用“ :=”號賦值 ,而信號用 在聲明中對信號與變量賦初值 信號使用要點 信號類似于連接線。信號可以作為設計實體中并行語句模塊間得信息交流通

8、道。 信號不但可以容納當前值 ,也可以保持歷史值。這一屬性與觸發器得記憶功能有很好得對應 關系。 信號得初值不就是必需得 ,而且僅在仿真中有效。信號得賦值允許允許設定延時 ,如:T1<=T2 AFTER 20 ns,但僅用于仿真。 當信號用在順序描述語句中時 ,其值在相應得進程 ,函數或過程完成之后才更新。 實體中定義得端口默認為信號。3、常量 (CONSTANT) 規則 :常量在程序前部定義 ,且一旦被賦值就不能再改變。常量定義格式 :CONSTANT常量名澈據類型:=初值; 例如 :CONSTANT fbus:BIT VECTOR“:=010111” ; CONSTANT Vcc:R

9、EAL:=、50; CONSTANT dely:TIME:=25 ns;,只要修改常量使用要點 : 常量設置使得設計實體中得常數易閱讀與修改。如將位矢得寬度定義為一個常量 這個常量就能改變寬度 ,從而改變硬件結構。常量就是一個恒定不變得值,一旦作了數據類型得賦值定義后,在程序中不能再改變 ,有全局意義。 常量與表達式類型必須一致 ,只能就是標量類型或復合類型。 常量得可視性 (其使用范圍取決于定義得位置):定義在程序包中得常量 ,具有最大全局化特征 , 可以用在調用此程序包得所有設計實體 中;定義在設計實體中得常量 ,其有效范圍為這個實體定義得所有得結構體;定義在設計實體得某一結構體中得常量,

10、則只能用于此結構體 ;定義在結構體得某一單元得常量,如一個進程中 ,則這個常量只能用在這一進程中。4、文件 (FILE)(VHDL 1076-1993標準 ) 文件就是傳輸大量數據得客體,包含一些專門數據類型得數值。在仿真測試時,測試得輸入激勵數據與仿真結果得輸出都可用文件來進行。a ?文件得聲明方式為 : : OPEN mode ISVHDL數據類型VHDL就是一種強類型語言,要求設計實體中得每一個常數、信號、變量、函數以及設定得各 種參量都必須具有確定得數據類型,并且只有數據類型相同得量才能互相傳遞與作用。1、標量型(Scalar Type單元素得最基本數據類型(1) 實數類型(2) 整數

11、類型(3) 枚舉類型2、(4) 時間類型 復合類型 (posite Type)(1) 數組型 (Array)(2) 記錄型 (Record)3、存取類型(Access Type為數據對象提供存取方式4、文件類型(Files Type)提供多值存取類型3、2、4VHDL得預定義數據類型在STD庫中得標準程序包(STANDARD中預先定義得數據類型。1、位(BIT)數據類型BIT就是一個二值枚舉類型,包括0'與 1'。可用于表示變量、信號等數據對象得狀態。 定義語句 :TYPE BIT IS( 0',1')2、位矢量(BIT VECTOR數據類型位矢量就是由多個 B

12、IT組成得數組,BIT就是其元素,形式為用雙引號把多個BIT位括在一起,如“0011”。可用于表示總線得狀態。定義語句 :TYPE BIT VECTOR IS ARRAY(NATURAL RANGE)OF BIT;RANGE表示寬度未定 NATURAL表 示其寬度得范圍與自然數得范圍相同 規則 :使用位矢量必須注明位寬 ,例如:SIGNAL a:BIT VECTOR(7 DOWNTO 0);-定義a就是一個寬為 8位得位矢量,左為a(7)右為 a(0);例: SIGNAL a:BIT_VECTOR(7 DOWNTO 0);SIGNAL b:BIT_VECTOR(3 DOWNTO 0);SIGN

13、AL c:BIT;b<=“1110”;b(3)<= 1'b<=a(7 D0WNT0 4);a(7 D0WNT0 4)<=a(3 D0WNT0 0);a(3 D0WNT0 0)<= b; a(7)<=C;3、布爾(BOOLEAN數據類型BOOLEAN也就是一個二值枚舉類型,一個布爾量具有兩種狀態:邏輯“假” (FALSE與邏輯“真” (TRUE。布爾量沒有具體數值得含義,也不能進行算術運算,但就是可以進行邏輯運算,并作為 關系運算得結果。定義語句 :TYPE BOOLEAN IS(FALSE,TRU以枚舉類型定義4、字符(CHARACTER數據類型字符

14、就是用單引號括起來得ASCII碼字符,如 A' a' 0''9 '。字符有大小寫區分,如B'不同于b O定義語句 :TYPE CHARACTER IS(AS碼字符表中得全部字符 )5、字符串(STRING數據類型字符串就是用雙引號括起來得字符序列,也稱字符矢量或字符串數組。例如,“A BOY、” ,“”6、 整數(INTEGER數據類型 整數包括 :正整數、負整數與零范圍:32位帶符號整數,即-(231-1)+(231-1)即(-2147483647 +2147483647) 整數常量得書寫方式示例如下-十進制整數-十進制整數-十六進制整數-二進

15、制整數210E416#D2#2#11011010# 硬件實現時 ,整數由不超過 32 位得二進制數來表示。 當端口類型設為整數型時一般應對其 范圍給予限定 ,這時端口得寬度為可以表示該整數得最小寬度 ;如沒有限定范圍 , 則綜合后得 位寬為 32 位。如 :SIGNAL s : INTEGER RANGE 0 TO 15;表示信號 s 得取值范圍就是 0-15,可用 4 位二進制數表示 ,因此 s 將被綜合成由四條 信號線構成得信號。7、自然數(NATURAL與正整數(P0SITIVE數據類型 自然數與正整數都就是整數得子集 自然數包括 0 與正整數 正整數不包括 0 得正整數其定義如下 :

16、定義如下 :SUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGER'HIGH;SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGER'HIGH;& 實數(REAL數據類型VHDL得實數類型類似于數學上得實數,或稱浮點數。由正負號、小數點與數字組成。 范圍:-1、 0E+38 TO +1、 0E+38實數常量得書寫方式舉例如下 :65971 、 3333338#43、 6#E+443 、 6E-4-十進制浮點數-八進制浮點數-十進制浮點數實數類型僅能在EDA仿真器中使用,因為其實現相當復雜,EDA綜

17、合器目前尚不支持。9、時間(TIME)數據類型時間就是物理量數據 ,由整數數據與單位兩部分組成,整數與單位之間至少留一個空格,如 55 ms,20 ns。時間及其她物理量數據可以用于仿真 ,但不可綜合。 定義如下 :TYPE TIME IS RANGE- 2147483647 TO 2147483647UNITSfs;-飛秒(10-15S)VHDL中得最小時間單位ps=1000fs;-皮秒ns=1000ps;-納秒us=1000ns;-微秒 ms=1000us;-毫秒 sec=1000ms;-秒min=60sec;-分hr=60min;- 時END UNITS;1 0、錯誤等級 (Severi

18、ty Level)錯誤等級屬于枚舉數據類型,用于表征系統得狀態,包括:NOTE(注意),WARNING(警 告),ERROR出錯),FAILURE失敗)。在仿真過程中,可輸出這4種值來提示被仿真系統當前得工 作狀態。其定義如下 :TYPE SEVERITY_LEVEL IS(NOTE,WARNING,ERROR,FAILURE);3、2、5IEEE預定義得標準邏輯位與矢量在IEEE庫得程序包 STD_LOGIC_1164中,定義了兩個非常重要得數據類型,即標準邏輯位STD_LOGIC 與標準邏輯矢量 STD_LOGIC_VECTQR1、標準邏輯位(STD LOGIC數據類型TYPE STD L

19、OGIC IS(U' ,-未初始化得 X' ,-強未知得 0',-強01',-強1Z',-高阻態W' ,-弱未知得L',-弱 0 H',-弱 1-'-忽略);,節點得電平該如何取值?兩個或以上數字邏輯電路得輸出端連接到同一個節點時節點得電平取值取決于:兩者或多方當前得輸出電平值;兩者得驅動能力強弱。驅動能力強得電路可以將節點電平強行拉高或拉低,因此需建立多值邏輯系統加以細分。多個輸出連接到同一個節點上時,節點得電平取值:數值關系歸納:X或-與其它數值連接時,最終電平取值均為 X;Z與其它數值連接時,最終電平取值均為其它數值

20、;強邏輯與弱邏輯連接時,取強邏輯得數值;W與L/H數值連接時,最終電平取值均為 W;0與1、L與H連接時,最終電平取值分別為 X、W;2、標準邏輯矢量(STD LOGIC VECTO數據類型標準邏輯矢量在電路中用來表示總線。其定義如下:TYPE STD LOGIC VECTOR IS ARRAY(NATURAL RANGEOF STD LOGIC ;NATURAL表示其寬度得范圍與自然數得范圍相同,需加入下面語句:-RANGE <>表示寬度未定 注意: 在程序中使用上述兩種數據類型前LIBRARY IEEE;ALL;USE IEEE STD_LOGIC_1164對標準邏輯位及標準邏

21、輯位矢量賦值時, H'LZ'等不能用小寫在9種邏輯值中,只有1' 0'與 Z'可綜合,其她僅用于仿真STD_LOGIC_VECTO類型數據不能直接進行算術運算SIGNAL a: BIT;SIGNAL b: BIT_VECTOR(7 DOWNTO 0);SIGNAL c: STD_LOGIC;SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL e: INTEGER RANGE 0 TO 255;例:a<=b(3)合法b(2)<=a; c<=d (5);d(0)<=c;a<=c;非法d&l

22、t;=b;e<=b;e<=d;1、枚舉類型(Enumerated)枚舉該類型得所有可能得值。定義格式:TYPE數據類型名IS元素,元素、,元素)1 例如:TYPE week IS (sun,mon ,tue,wed,thu, frLsat): I TYPE my_logic IS ('1',0',Z');枚舉類型得編碼:綜合器自動實現枚舉類型元素得編碼般將第一個枚舉量(最左邊)編碼為0,以后得 依次加1。編碼用位矢量表示,位矢量得長度 將取所需表達得所有枚舉元素得最小值。如:TYPE color IS(blue, green, yellow, red

23、);green= “ 01” ;yellow= “10” ;red= “11” ;2、整數類型與實數類型定義格式:TYPE數據類型名IS RANGE范圍; 例如:TYPE num1 IS RANGE 0 TO 100;3、編碼為:blue= “ 00” ;數組類型1D、數組就是將相同數據類型得數據集合在一起形成得一種新得數據類型。可以就是 2D或1D*1D,更高維數得數組往往就是不可綜合得。數組得結構:VHDL中預定義得數據類型僅包括標量類型(單個位)與矢量類型(一維數組)兩類,并沒有預定義2D與1D*1D數組,用戶可以自定義。定義格式:TYPE數組名IS ARRAY數據范圍)OF數據類型;

24、例如:TYPE data_bus IS ARRAY (7 DOWNTO 0) OF STD_LOGIC定義數據總線,下標由高到低,即 D7 位 權值最高,D0位權值最低。TYPE data_bus IS ARRAY (0 TO 7) OF STD_LOGI定義數據總線,下標由低到高,即D0位權值最 高,D7位權值最低。一種定義1D*1D數組得方法:TYPE row IS ARRAY (7 DOWNTO 0) OF STD LOGIC;-數組.;TYPE matrix IS ARRAY (0 TO 3) OF row; -1D*1D 數組,矢量數組;SIGNAL x:matrix;-聲明就是 1

25、D*1D 信號另一種定義1D*1D數組得方法:TYPE matrix IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0);二維數組得定義方法:TYPE matrix2D IS ARRAY(O TO 3,7 DOWNTO 0) OF STD_LOGIC; 數組得賦值方法:x<= “0001” ;對一維數組賦值x<= ( 0' ,0', 0' , 1',);對一維數組賦值y<=( 0' , 0' , 0' , 1' ,),( 0' , 0' , 0

26、9; , 1',); 對1 X 1維或二維數組賦值記錄類型(Record) 記錄一一就是一組不同數據類型得元素得組合。定義格式:TYPE記錄類型名IS RECORD元素名:元素數據類型;元素名:元素數據類型;END RECORD記錄類型名;訪問記錄體元素得方式:記錄體名、元素名TYPE a_and_b IS RECORDa : STD_LOGIC_VECTOR(7 DOWNTO 0);b : INTEGER RANGE 0 to 3;END RECORD;SIGNAL X, y, z : a and b |SIGNAL data : STD_LOGIC_VECTOR(7DOWNTO 0

27、);SIGNAL num : INTEGER ;_a ?X、 a <=X、b <= 2 ;data <= y、a ;num <= y、b ;z <= X ;數據類型轉換,才能相互邏輯矢量BIT_VECTOR由于VHDL就是一種強類型語言,不同類型得數據對象必須經過類型轉換 操作。常見得實現數據類型轉換得方法有以下兩種:寫一段專用于數據類型轉換得VHDL代碼調用程序包中預定義得數據類型轉換函數,如程序包STD_LOGIC_1164IEEE庫中提供了若干數據類型轉換函數: STD_LOGIC_1164程序包定義得轉換函數:TO_BITVECTOR(A)-由標準邏輯矢量

28、 STD_LOGIC_VECTO轉換為位矢量 TO_STDLOGIC (A)-由 BIT轉換為 STD_LOGIC TO_BIT(A)-由標準邏輯 STD_LOGIC轉換 BIT.LOGIC_ARIT程序包定義得轉換函數:CONV_STD_LOGIC_VECTOR(A,B由 INTEGER,SINGED,UNSIGNE或 STD_LOGIC專換成位 B 得 STD_LOGIC_VECTORCONV_INTEGER(A);-由 SIGNED,UNSIGNEDf STD_LOGlC專換成 INTEGER TO_STDLOGIC (A)-由 BIT轉換為 STD_LOGIC函數 TO_STDLOGI

29、CVECTOR(A)-由位矢量 BIT_VECTOR轉換為標準 STD LOGIC VECTOR函數函數函數STD函數寬為函數 函數 例:數據類型轉換LIBRARY IEEE;USE IEEE STD_LOGIC_1164 ALL;USE IEEE STD_LOGIC_ARITH ALL;SIGNAL a: IN INTEGER RANGE 0 TO 15;SIGNAL b: IN INTEGER RANGE 0 TO 15;SIGNAL y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);y<=C0NV_STD_L0GIC_VECT0R(a+b),8);VHDL操作

30、符VHDL 得各種表達式由操作數與操作符組成,其中 ,操作數就是各種運算得對象 ,而操作符則規定運算得方式。操作符種類及對應得操作數類型(Logical Operator) (Relational Operator) (Arithmetic Operator) (Sign Operator)在 VHDL 中 ,一般有四類操作符 :邏輯操作符關系操作符算術操作符符號操作符3、2、8 屬性(ATTRIBUTE描述與定義語句 屬性從指定得客體或對象中獲取關心得數據或信息。利用屬性可以使VHDL源代碼更加簡明扼要,易于理解;語法 : 對象'屬性 預定義得屬性 :數值類屬性與信號類屬性 數值類屬

31、性 :獲取數組或一般數據得相關信息。VHDL預先定義得、可綜合得數值類屬性:LEFT索引得左邊界值RIGHT索引得右邊界值HIG H索引得上限值LOW:索引得下限值LENGTH索引得長度值RANGE索引得位寬范圍REVERSE_RANG索引得反向位寬范圍例:VARIABLE my_vector : BIT_VECTOR (5 DOWNTO 0); 各屬性如下 :my_vector 'LEFT0506my_vector ' RIGHTmy_vector 'HIGHmy_vector 'LOWmy_vector ' RANGEmy_vector '

32、LENGTH (5 DOWNTO 0)my_vector ' REVERSE_RANGE(0 TO 5)例:TYPE number IS INTEGER RANGE 9 DOWNTO 0;LEFT;-I=9RIGTH;-I=0HIGH;-I=9LOW;-I=0 :通常就是不可綜合得I:=number'I:=number'I:=number'I:=number' 枚舉類型數值得屬性VAL(pos):指定位置(pos)得值P OS(value)給定數值得位置序號 LEFTOF(value)給定數值得左側值RIGHTOF(value)給定數值得右側值下一個值S

33、UCC(value)返回數據類型定義中該數據值得 P RED(value)返回數據類型定義中該數據值得前一個值TYPE week IS(monday,tuesday,wednesday,thursday,friday,saturday,sunday); 那么根據上面得屬性函數定義,不難得出如下得結果 :week'POS(tuesday)=1 week'VAL(3)=thursdayweek'SUCC(thursday)=friday week'PRED(thursday)=wednesday week'LEFTOF(friday)=thursday we

34、ek'RIGHTOF(friday)=Saturday 信號類屬性 :VHDL 預定義得 ,對于信號 s:EVENT:如果s值發生了變化,則返回值為true,否則為false ,常用于于時鐘信號得判定。STABLE如果s值保持不變,則返回值為true,否則為false。ACTIVE如果s值被處理,則返回值為true,否則為false。QUIET<time>:如果在指定得time內s值保持不變,則返回值為true,否則為false。LAST_EVENT返回從上一次事件發生得時間到當前時間得時間差。LAST_ACTIVE最后一次s被處理到當前所經歷得時間長度值。LAST_VAL

35、UE最后一次變化前s得值;除EVENT與STABLE屬性就是可以綜合得之外,其它得屬性都不可綜合,僅用于仿真。其中以EVENT最為常用。屬性EVENT通常用于確定時鐘信號得邊沿。例如:clock EVENT-檢測以clock為屬性測試項目得事件clock EVENT AND clock='T ;-檢測 clock 得上升沿clock EVENT AND clock= O'-檢測 clock 得下降沿'EVENT與ACTIVE有何區另U?事件發生:信號值得發生變化,如由 0'變到 1'就是一個事件,而 0'變到 0'則不就是 一個事件 ,原

36、因就是信號值沒有變。信號活躍 :信號值得任何變化 ,如由 0'變到 1'就是一個信號活躍 ,而信號從 0'變到 0' 也就是一個信號活躍。怎么理解這句話啊?所有得事件都就是活躍 ,但并非所有得活躍都就是事件改錯: 例:“1”計數器錯誤LIBRARY IEEE;USE IEE、E STD_LOGIC_116、4 ALL;ENTITY count_one ISPORT ( din :IN STD_LOGIC_VECTOR (7 DOWNTO 0);ones:OUT INTEGER RANGE 0 TO 8);END count_one;ARCHITECTURE te

37、st OF count_one ISSIGNAL temp: INTEGER RANGE 0 TO 8;BEGINPROCESS (din)BEGINtemp<=0;FOR i IN 0 TO 7 LOOPIF(din(i)='1') THENtemp<=temp+1;END IF;END LOOP;ones<=temp;END PROCESS;END test;例:“1”計數器正確LIBRARY IEEE;USE IEE、E STD_LOGIC_116、4 ALL;ENTITY count_one ISPORT ( din :IN STD_LOGIC_VEC

38、TOR (7 DOWNTO 0);ones:OUT INTEGER RANGE 0 TO 8);END count_one;ARCHITECTURE test OF count_one ISBEGINPROCESS (din)VARIABLE temp: INTEGER RANGE 0 TO 8;BEGINtemp:=0;FOR i IN 0 TO 7 LOOPIF(din(i)='1') THEN temp:=temp+1;END IF;END LOOP;ones<=temp;END PROCESS;END test;例: 合法與非法得數組賦值 :TYPE row IS

39、 ARRAY(7 DOWNTO 0) OF STD_LOGIC;TYPE array1 IS ARRAY(0 TO 3) OF row;TYPE array2 IS ARRAY(0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0);TYPE array3 IS ARRAY(0 TO 3,7 DOWNTO 0) OF STD_LOGIC; SIGNAL x: row;SIGNAL y: array1;SIGNAL z: array2;SIGNAL u: array3 x(1)<=y(1)(3) 合法x(1)<=z(2)(3)合法x(2)<=u(2,1)

40、合法y(1)(2)<=z(0)(0);合法z(0)(3)<=u(3,0);合法x<=z(1);-非法,類型不匹配,x就是row類型,而z(1)就是STD_LOGIC_VECTO類型得。x<=u(2);非法 ,u 必須帶兩個索引值 ; x<=u(2,2 DOWNTO 0);非法,x就是row類型得,而右側就是STD_LOGIC類型得。z(0)<=u(2,2 DOWNTO 0);-非法,z(0)就是STD_LOGIC_VECTO類型得,右側就是STD_LOGIC類型得,數據類型不匹配。 u(1,5 DOWNTO 1)<=z(2)(4 DOWNTO 0);-

41、非法 ,類型不匹配。y(1)(7 DOWNTO 3)<=x(4 DOWNTO 0);-合法。z(1)(7 DOWNTO 3)<= z(2)(4 DOWNTO 0);合法。u(1,5 DOWNTO 1)<=z(2)(4 DOWNTO 0); 非法 ,數據類型不匹配。代碼:【例 3、1】或門得描述LIBRARY IEEE;USE IEE、E STD LOGIC 1164、ALL;ENTITY or1 ISPORT( a,b:IN STD_LOGIC; y:OUT STD LOGIC);END or1;ARCHITECTURE example1 OF or1 IS BEGINy&l

42、t;=a OR b;END example1;【例 3、 2】半加器得描述LIBRARY IEEE;USE IEE、E STD LOGIC 1164、ALL ;ENTITY h_adder ISPORT( a,b:IN STD LOGIC; so,co:OUT STD LOGIC);END h_adder ;ARCHITECTURE example2 OF h_adder ISBEGINso<=a XOR b;co<=a AND b;END example2;【例 3、3】2 選 1 數據選擇器得描述LIBRARY IEEE;USE IEE、E STD_LOGIC_1164、 AL

43、L;ENTITY mux21 ISPORT ( a, b: IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC);END mux21;ARCHITECTURE example3 OF mux21 IS BEGINy<=a WHEN s= 0' ELSEb;END ARCHITECTURE example3; 【例3、3】2選1數據選擇器得描述 (另一種編程方法 )LIBRARY IEEE;USE IEE、E STD_LOGIC_1164、 ALL; ENTITY mux21 IS PORT(a,b:IN STD_LOGIC;s:IN S

44、TD_LOGIC; y:OUT STD_LOGIC);END mux21;ARCHITECTURE example3 OF mux21 IS BEGINy<=(a AND NOT s) OR (b AND s); END ARCHITECTURE example3; 【例 3、 4】鎖存器得描述 LIBRARY IEEE;USE IEE、E STD_LOGIC_1164、 ALL; ENTITY latch1ISPORT ( dena:IN STD_LOGIC;:IN STD_LOGIC; :OUT STD_LOGIC);qEND latch1;ARCHITECTURE example4

45、 OF latch1 IS BEGINPROCESS (d,ena)BEGINIF ena='1' THENq<=d;END IF;END PROCESS;END example4;例 :h_adder 合法mux21,合法and 非法 ,關鍵詞不能作為標識符 _Decoder 非法,起始不能為下劃線3DOP 非法 ,起始不能為數字 Large#number 非法 , “ #”不能成為標識符得構成符號 Data_bus 非法 ,不能有雙下劃線Copper_非法,最后字符不能為下劃線D-Link 非法 , “-”不能成為標識符得構成符號Verilog hdl知識點 :4、

46、2、 6 操作符操作符也稱為運算符,就是Verilog HDL預定義得函數名字,這些函數對被操作得對象 (即操作數 )進行規定得運算 ,得到一個結果。操作符通常由13個字符組成,例如,“ +”表示加操作,“=”(兩個=字符)表示邏 輯等操作 ,“= = =” (3 個=字符)表示全等操作。有些操作符得操作數只有1 個,稱為單目操作 ;有些操作符得操作數有 2 個,稱為雙目操作 ;有些操作符得操作數有 3 個,稱為三目操作。1 、 算術操作符 (Arithmetic operators) 常用得算術操作符 :+(加)、-(減)、*(乘)、/(除)、%(求余)、*( 求冪)其中 %就是求余操作符

47、, 在兩個整數相除得基礎上 ,取出其余數。例如 ,5 % 6 得值為 5;13 % 5得值就是 3。算術操作符得主要性質 :任意操作數如有一位就是 x或Z則結果為X。 求余數操作得結果符號與第一個操作數符號相同。;在賦值語句中 ,算術運算得結果整數除法將截斷小數部分 (沒有四舍五入 )。 算術運算結果得位寬由操作數中位寬最大者得位寬決定 位寬由目標變量得位寬決定。2、邏輯操作符 (Logical operators ) 邏輯操作符包括 :&&(邏輯與 )、|( 邏輯或 )、! (邏輯非 )注意 : 非零得位矢量被當作 1 處理。比如 :a=b0010, b= b000 1 ;

48、則 a&&b=1, a | b=1, !a=0 如果操作數中包含X或乙則結果視具體情況而定。比如 :'b1| 'bx=1, b1&&'bx=x, !x=x3、位運算 (Bitwise operators)位運算就是將兩個操作數按對應位進行邏輯操作。 位運算操作符包括 :(按位取反 )、&(按 位與卜1(按位或)、A(按位異或)、A或A(按位同或)。在進行位運算時 ,當兩個操作數得位寬不同時,計算機會自動將兩個操作數按右端對齊,位數少得操作數會在高位添 0 補齊。注意:如操作數包含X或Z得位,則0&x=0; 1|x=1; 0

49、&z=0; 1|z=1;其她情況相應得位結果 均為 X。4、關系操作符 (Pelational operators) 關系操作符有 :(小于)、 =(小于等于 )、 (大于)、 =(大于等于 )。 其中 ,=也就是賦值運算得賦值符號。,如果關系就是真 ,則計算結果 ,則計算結果不定 (為 x)。0 補齊。關系運算得結果就是 1 位邏輯值。在進行關系運算時 為 1;如果關系就是假 ,則計算結果為 0;如果某個操作數得值不定如果兩個操作數位寬不同 ,位寬較短得操作數在高位添5、等式操作符 (Equality operators)等值操作符包括 := =(等于)、! =(不等于 )、= =

50、=(全等)、! = =(不全等 )4種。 等值運算得結果也就是 1位邏輯值 ,當運算結果為真時 ,返回值 1;為假則返回值 0。 相等操作符 (= =)與全等操作符 (= = =)得區別就是 :當進行相等運算時 ,如果某些位就是不 定或高阻狀態,其相等比較得結果就會就是X;而進行全等運算時,對不定或高阻狀態位也進行比較,當兩個操作數完全一致時 ,其結果得值才為 1(真),否則結果為 0(假)。全等與不全等操作符不可綜合6、縮減操作符 (Reduction operators) 縮減操作符包括 :&(與)、&(與非)、|( 或)、 |( 或非)、A(異或卜A或A(同或)。縮減操作

51、運算法則與位運算操作相同作運算時 ,對操作數進行與、與非、或、或非、異或、同或等縮減操作運算 結果。例如,A = 8' b11010001,則& A = 0,|A = 1。縮減操作符得主要性質 :對于縮減與 :只要操作數中有一位就是或z則結果為X,否則結果為1。對于縮減或 :只要操作數中有一位就是或Z則結果為X,否則結果為0。對于縮減異或 :只要操作數中有一位就是,但操作得運算對象只有一個。在進行縮減操1 位得操作,產生0,結果為 0;如果操作數所有位都不為1,結果為 1;如果操作數所有位都不為0 且包含 x1 且包含 xx或乙結果為X;如果操作數所有位都不為x或Z,則如有偶數

52、個1,結果為0,有奇數個1,則結果為1。縮減與非 ,縮減或非與縮減異或非得結果與上述相反。轉移操作符 (Shift operators) 轉移操作符包括 :7、>>(邏輯右移 )、操作數操作數操作數 操作數<<(邏輯左移 )、 >>>(算術右移 )、 <<<(算術左移 )<<n;/將操作數得內容左移n位,同時從右邊開始用0來填補移出得位數。» n; /將操作數得內容右移 n位,同時從左邊開始用 0來填補移出得位數。<<< n;/將操作數得內容左移>>> n;/將操作數得內容右移

53、n 位 ,同時從右邊開始用 0 來填補移出得位數。 n 位 ,同時從左邊開始用 0(對無符號數 ) 或符號位 ( 對有符號數 )來填補移出得位數。n 總就是被視為無符號數8、條件操作符 (Conditional operators)條件操作符為 :? : 條件操作符得操作數有3 個,其使用格式為操作數 = 條件 ? 表達式 1:表達式 2;即當條件為真 (條件結果值為 1)時,操作數達式 2。= 表達式 1;為假 (條件結果值為 0)時 ,操作數 = 表9、位并接操作符 (Concatenation operators)并接操作符為:并接操作符得使用格式為操作數1得某些位,操作數2得某些位,操作數n得某些位;即將操作數1得某些位與操作數2得某些位與與操作數 n得某些位并接在一起構成一 個位寬更大得數。注意 :位寬未明確指定得數不能作為操作數。 并接操作符可以指定拼接重復得次數,使用格式為 :重復次數操作數1得某些位,操作數2得某些位,操作數n得某些位 ;例如 : 2 4'b1101

溫馨提示

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

評論

0/150

提交評論