可程式設計邏輯/VHDL 運算子
外觀
< 可程式設計邏輯
本頁將討論 VHDL 運算子。
本文中使用的一些縮寫
- int - 整數,一種資料型別
- sl - std_logic,一種資料型別(在大多數情況下可以替換為 bit)
- slv - std_logic_vector,一種資料型別(在大多數情況下可以替換為 bit_vector)
- slu - std_logic_unsigned - ieee 庫的一部分。
- sls - std_logic_signed - ieee 庫的一部分。
- iff - "當且僅當"
邏輯運算子
[edit | edit source]此列表遠未完善。
| 運算子 | 示例 | 描述 |
|---|---|---|
| sl and sl | a_sl <= b_sl and c_sl a_sl <= ieee.std_logic_1164."and"(b_sl, c_sl); |
當且僅當 b_sl 和 c_sl 均為 '1' 時,a_sl 為 '1'。 |
| slv and slv | a_slv <= b_slv and c_slv a_slv <= ieee.std_logic_1164."and"(b_slv, c_slv); |
應用於 a_slv、b_slv、c_slv 中的每個相應位。 a_slv、b_slv、c_slv 必須具有相同的長度(例如 8 位) |
| sl or sl | a_sl <= b_sl or c_sl a_sl <= ieee.std_logic_1164."or"(b_sl, c_sl); |
當且僅當 b_sl 或 c_sl 中至少有一個為 '1' 時,a_sl 為 '1'。 |
| slv or slv | a_slv <= b_slv or c_slv a_slv <= ieee.std_logic_1164."or"(b_slv, c_slv); |
應用於 a_slv、b_slv、c_slv 中的每個相應位。 a_slv、b_slv、c_slv 必須具有相同的長度(例如 8 位) |
| sl xor sl | a_sl <= b_sl xor c_sl a_sl <= ieee.std_logic_1164."xor"(b_sl, c_sl); |
當且僅當 b_sl 和 c_sl 中恰好只有一個為 '1' 時,a_sl 為 '1'。 |
| slv xor slv | a_slv <= b_slv xor c_slv a_slv <= ieee.std_logic_1164."xor"(b_slv, c_slv); |
應用於 a_slv、b_slv、c_slv 中的每個相應位。 a_slv、b_slv、c_slv 必須具有相同的長度(例如 8 位) |
| not sl | a_sl <= not b_sl a_sl <= ieee.std_logic_1164."not"(b_sl); |
a_sl 將是 b_sl 的反轉,即當且僅當 b_sl = '0' 時為 '1'。 |
| not slv | a_slv <= not b_slv a_slv <= ieee.std_logic_1164."not"(b_slv); |
應用於 a_slv、b_slv 中的每個相應位。 a_slv、b_slv 必須具有相同的長度(例如 8 位) |
| sl nand sl | a_sl <= b_sl nand c_sl a_sl <= ieee.std_logic_1164."nand"(b_sl, c_sl); |
當且僅當 b_sl 或 c_sl 中至少有一個為 '0' 時,a_sl 為 '1'。 等效於 not (sl and sl) |
| slv nand slv | a_slv <= b_slv nand c_slv a_slv <= ieee.std_logic_1164."nand"(b_slv, c_slv); |
應用於 a_slv、b_slv、c_slv 中的每個相應位。 a_slv、b_slv、c_slv 必須具有相同的長度(例如 8 位) |
| sl nor sl | a_sl <= b_sl nor c_sl a_sl <= ieee.std_logic_1164."nor"(b_sl, c_sl); |
當且僅當 b_sl 和 c_sl 均為 '0' 時,a_sl 為 '1'。 等效於 not (sl or sl) |
| slv nor slv | a_slv <= b_slv nor c_slv a_slv <= ieee.std_logic_1164."nor"(b_slv, c_slv); |
應用於 a_slv、b_slv、c_slv 中的每個相應位。 a_slv、b_slv、c_slv 必須具有相同的長度(例如 8 位) |
| sl xnor sl | a_sl <= b_sl xnor c_sl a_sl <= ieee.std_logic_1164."xnor"(b_sl, c_sl); |
當且僅當 b_sl 和 c_sl 均為 '1' 或 '0' 時,a_sl 為 '1'。 等效於 not (sl xor sl) |
| slv xnor slv | a_slv <= b_slv xnor c_slv a_slv <= ieee.std_logic_1164."xnor"(b_slv, c_slv); |
應用於 a_slv、b_slv、c_slv 中的每個相應位。 a_slv、b_slv、c_slv 必須具有相同的長度(例如 8 位) |
算術運算子
[edit | edit source]關係運算符
[edit | edit source]移位和旋轉
[edit | edit source]| 此頁面或部分是一個未開發的草稿或提綱。 您可以幫助 開發作品,或者您可以在 專案室 請求幫助。 |
運算子
[edit | edit source]符號運算子
[edit | edit source]符號運算子是單目運算子,即只有一個右運算元,它必須是數值型別。表示式求值的結果與運算元型別相同。有兩個符號運算子(表 12)。
表 12 : 符號運算子
| + | 身份 |
| - | 否定 |
當使用 ( + ) 符號運算子時,運算元將保持不變,但在 ( - ) 符號運算子的情況下,將返回帶有否定符號的運算元的值。由於優先順序較低,表示式中的符號運算子不能直接位於乘法運算子、求冪運算子 (**) 或 abs 和 not 運算子之前。當使用這些運算子時,應將符號運算子及其運算元括在括號中(示例 7)。
乘法運算子
[edit | edit source]乘法和除法運算子是針對所有整數、浮點數預定義的。在某些情況下,它們也可能用於對物理型別物件進行運算。另一方面,mod 和 rem 運算子僅針對整數定義。當使用 mod 和 rem 運算子時,運算元和結果都將具有相同的整數型別。乘法運算子如表 13 所示。
表 13. 乘法運算子
| * | 乘法 |
| / | 除法 |
| mod | 模數 |
| rem | 餘數 |
其他運算子
[edit | edit source]表 14 顯示了兩個其他運算子。
表 14. 其他運算子
| ** | 求冪 |
| abs | 絕對值 |
abs 運算子只有一個運算元。它允許定義運算元的絕對值。結果與運算元型別相同。求冪運算子有兩個運算元。此運算子針對任何整數或浮點數定義。右運算元(指數)必須是整數型別。當指數是正整數時,左運算元將被自身重複乘以。當指數是負數時,結果將是指數的逆,指數等於右運算元的絕對值(示例 9)。如果指數等於 0,則結果將為 1。
示例
[edit | edit source]示例 1
[edit | edit source]v := a + y * x;
首先執行乘法 y*x,然後將 a 加到乘法的結果中。這是因為乘法運算子比加法運算子具有更高的優先順序。
示例 2
[edit | edit source]variable We1, We2, We3, Wy : BIT := '1';
Wy := We1 and We2 xnor We1 nor We3;
對於 We1、We2、We3 的初始值等於 '1',結果將被分配給變數 Wy,且等於 '0'。
示例 3
[edit | edit source]variable Zm1: REAL := 100.0;
variable Zm2 : BIT_VECTOR(7 downto 0) := ('0','0','0','0','0','0','0','0');
variable Zm3, Zm4 : BIT_VECTOR(1 to 0);
Zm1 /= 342.54 -- True
Zm1 = 100.0 -- True
Zm2 /= ('1', '0', '0', '0', '0', '0', '0', '0') -- True
Zm3 = Zm4 -- True
Example 4
Zm1 > 42.54 -- True
Zm1 >= 100.0 -- True
Zm2 < ('1', '0', '0', '0', '0', '0', '0', '0') -- True
Zm3 <= Zm2 -- True
示例 5
[edit | edit source]variable Zm5 : BIT_VECTOR(3 downto 0) := ('1','0','1','1');
Zm5 sll 1 -- ('0', '1', '1', '0')
Zm5 sll 3 -- ('1', '0', '0', '0')
Zm5 sll -3 -- Zm5 srl 3
Zm5 srl 1 -- ('0', '1', '0', '1')
Zm5 srl 3 -- ('0', '0', '0', '1')
Zm5 srl -3 -- Zm5 sll 3
Zm5 sla 1 -- ('0', '1', '1', '1')
Zm5 sla 3 -- ('1', '1', '1', '1')
Zm5 sla -3 -- Zm5 sra 3
Zm5 sra 1 -- ('1', '1', '0', '1')
Zm5 sra 3 -- ('1', '1', '1', '1')
Zm5 sra -3 -- Zm5 sla 3
Zm5 rol 1 -- ('0', '1', '1', '1')
Zm5 rol 3 -- ('1', '1', '0', '1')
Zm5 rol -3 -- Zm5 ror 3
Zm5 ror 1 -- ('1', '1', '0', '1')
Zm5 ror 3 -- ('0', '1', '1', '1')
Zm5 ror -3 -- Zm5 rol 3
constant B1: BIT_VECTOR := "0000"; -- four element array
constant B2: BIT_VECTOR := "1111"; -- four element array
constant B3: BIT_VECTOR := B1 & B2; -- eight element array, ascending
-- direction, value "00001111"
subtype BIT_VECTOR_TAB is BIT_VECTOR (1 downto 0);
constant B4: BIT_VECTOR_TAB := "01";
constant B5: BIT_VECTOR:= B4 & B2; -- six element array, descending
-- direction, value "011111"
constant B6 : BIT := '0' ;
constant B7 : BIT_VECTOR := B2 & B6;-- five element array, ascending
-- direction, value "11110"
constant B8: BIT := '1';
constant B9: BIT_VECTOR := B6 & B8; -- two element array, ascending
-- direction value "01"
z := x * ( -y) -- A legal expression
z := x / (not y) -- A legal expression
相同的表示式沒有括號將是非法的。
variable A,B :Integer;
variable C : Real;
C:= 12.34 * ( 234.4 / 43.89 );
A:= B mod 2;
2 ** 8 = 256
3.8 ** 3 = 54.872
4 ** (-2) = 1 / (4**2) = 0.0625
- 所有用於標準型別的預定義運算子都在包 STANDARD 中宣告。
- 運算子 not 被歸類為雜項運算子,僅用於定義優先順序。否則,它被歸類為邏輯運算子。