vhdl 語法總結2


二、        運算操作符和屬性

1.       運算操作符

l  賦值運算符

賦值運算符用來給信號、變量和常數賦值。

<=    用於對SIGNAL類型賦值;

:=     用於對VARIABLE,CONSTANT和GENERIC賦值,也可用於賦初始值;

=>    用於對矢量中的某些位賦值,或對某些位之外的其他位賦值(常用OTHERS表示)。

例:

SIGNAL x: STD_LOGIC;

VARIABLE y: STD_LOGIC_VECTOR(3 DOWNTO 0);  –最左邊的位是MSB

SIGNAL w: STD_LOGIC_VECTOR(0 TO 7);  –最右邊的位是MSB

x <= ‘1’;

y := “0000”;

w <= “1000_0000”;  – LSB位為1,其余位為0

w <= (0 => ‘1’, OTHERS => ‘0’);  – LSB位是1, 其他位是0

l  邏輯運算符

操作數必須是BIT, STD_LOGIC或STD_ULOGIC類型的數據或者是這些數據類型的擴展,即BIT_VECTOR, STD_LOGIC_VECTOR,STD_ULOGIC_VECTOR。

VHDL的邏輯運算符有以下幾種:(優先級遞減)

?   NOT —— 取反

?   AND —— 與

?   OR —— 或

?   NAND —— 與非

?   NOR —— 或非

?   XOR —— 異或

l  算術運算符

操作數可以是INTEGER, SIGNED, UNSIGNED, 如果聲明了std_logic_signed或std_logic_unsigned,可對STD_LOGIC_VECTOR類型的數據進行加法或減法運算。

+ —— 加

-          —— 減

* —— 乘

/ —— 除

** —— 指數運算

MOD —— 取模

REM —— 取余

ABS —— 取絕對值

加,減,乘是可以綜合成邏輯電路的;除法運算只在除數為2的n次冪時才能綜合,此時相當於對被除數右移n位;對於指數運算,只有當底數和指數都是靜態數值(常量或GENERIC參數)時才是可綜合的;對於MOD運算,結果的符號同第二個參數的符號相同,對於REM運算,結果的符號同第一個參數符號相同。

l  關系運算符

=, /=, <, >, <=, >=

左右兩邊操作數的類型必須相同。

l  移位操作符

<左操作數> <移位操作符> <右操作數>

其中左操作數必須是BIT_VECTOR類型的,右操作數必須是INTEGER類型的(可以為正數或負數)。

VHDL中移位操作符有以下幾種:

u  sll  邏輯左移  – 數據左移,右端補0;

u  srl  邏輯右移  – 數據右移,左端補0;

u  sla  算術左移  – 數據左移,同時復制最右端的位,填充在右端空出的位置;

u  sra  算術右移  – 數據右移,同時復制最左端的位,填充在左端空出的位置;

u  rol  循環邏輯左移 — 數據左移,從左端移出的位填充到右端空出的位置上;

u  ror  循環邏輯右移– 數據右移,從右端移出的位填充到左端空出的位置上。

例:x <= “01001”,那么:

y <= x sll 2;  – 邏輯左移2位,y<=”00100”

y <= x sla 2;  – 算術左移2位,y<=”00111”

y <= x srl 3;  – 邏輯右移3位,y<=”00001”

y <= x sra 3;  – 算術右移3位,y<=”00001”

y <= x rol 2;  – 循環左移2位,y<=”00101”

y <= x srl -2;  –相當於邏輯左移2位

l  並置運算符

用於位的拼接,操作數可以是支持邏輯運算的任何數據類型。有以下兩種:

2  &

2  (, , , )

與Verilog中{}的功能一樣。

2.       屬性(ATTRIBUTE)

l  數值類屬性

數值類屬性用來得到數組、塊或一般數據的相關信息,例如可用來獲取數組的長度和數值范圍等。

以下是VHDL中預定義的可綜合的數值類屬性:

d’LOW             –返回數組索引的下限值

d’HIGH            –返回數組索引的上限值

d’LEFT             –返回數組索引的左邊界值

d’RIGHT            –返回數組索引的右邊界值

d’LENGTH       –返回矢量的長度值

d’RANGE          –返回矢量的位寬范圍

d’REVERSE_RANGE   –按相反的次序返回矢量的位寬范圍

例:定義信號 SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);

則有:d’LOW = 0, d’HIGH = 7, d’LEFT = 7, d’RIGHT = 0, d’LENGTH = 8, d’RANGE = (7 DOWNTO 0), d’REVERSE_RANGE = (0 TO 7).

l  信號類屬性

對於信號s,有以下預定義的屬性(可綜合的):

s’EVENT            若s的值發生變化,則返回布爾量TRUE,否則返回FALSE

s’STABLE          若s保持穩定,則返回TRUE,否則返回FALSE

例:clk的上升沿判斷

IF (clk’EVENT AND clk = ‘1’)

IF (NOT clk’STABLE AND clk = ‘1’)

WAIT UNTIL (clk’EVENT AND clk = ‘1’)

3.       通用屬性語句

GENERIC語句提供了一種指定常規參數的方法,所指定的參數是靜態的,增加了代碼的可重用性,類似於Verilog中的parameter與defparam。GENERIC語句必須在ENTITY中進行聲明,由GENERIC語句指定的參數是全局的,不僅可在ENTITY內部使用,也可在后面的整個設計中使用。語法結構如下:

GENERIC (parameter_name: parameter_type := parameter_value);

用GENERIC語句指定多個參數:

GENERIC (n: INTEGER := 8; vector: BIT_VECTOR := “0000_1111”);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM