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

操作符的優(yōu)先級
一、邏輯運(yùn)算符
在VHDL語言中邏輯運(yùn)算符共有6種,它們分別是:
NOT——取反;
AND——與;
OR——或;
NAND——與非;
NOR——或非;
XOR——異或。
這6種邏輯運(yùn)算符可以對“STD_LOGIC”和“STD_LOGIC_VECTOR”等數(shù)據(jù)進(jìn)行邏輯運(yùn)算。必須注意,運(yùn)算符的左邊和右邊,以及代入的信號的數(shù)據(jù)類型必須是相同的。
當(dāng)一個(gè)語句中存在兩個(gè)以上的邏輯表達(dá)式時(shí),在C語言中運(yùn)算有自左至右的優(yōu)先級順序的規(guī)定,而在VHDL語言中,左右沒有優(yōu)先級差別。例如,在下例中,如去掉式中的括號,那么從語法上來說是錯(cuò)誤的:
x <=(a AND b)OR(NOT c AND d);
當(dāng)然,如果一個(gè)邏輯表達(dá)式中只有“AND”,“OR”,“XOR”運(yùn)算符,那么改變運(yùn)算順序?qū)⒉粫?huì)導(dǎo)致邏輯的改變。此時(shí),括號是可以省略的。例如:
a <= b AND c AND d AND e;
a <= b OR c OR d OR e;
在所有邏輯運(yùn)算符中NOT的優(yōu)先級最高。
二、 算術(shù)運(yùn)算符
VHDL語言有10種算術(shù)運(yùn)算符,它們分別是:
十——加;
— ——減;
* ——乘;
/——除;
MOD ——求模;
REM ——取余;
+——正;(一元運(yùn)算)
— ——負(fù);(一元運(yùn)算)
** ——指數(shù);
ABS ——取絕對值。
在算術(shù)運(yùn)算中,對于一元運(yùn)算的操作數(shù)(正、負(fù))可以為任何數(shù)值類型(整數(shù)、實(shí)數(shù)、物理量)。加法和減法的操作數(shù)也和上面一樣,具有相同的數(shù)據(jù)類型,而且參加加、減運(yùn)算的操作數(shù)的類型也必須相同。乘除法的操作數(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ù)。
若對“STD_LOGIC_VECTOR”進(jìn)行“+”(加)、“一”(減)運(yùn)算時(shí),兩邊的操作數(shù)和代入的變量位長如不同,則會(huì)產(chǎn)生語法錯(cuò)誤。另外,“*”運(yùn)算符兩邊的位長相加后的值和要代入的變量的位長不相同時(shí),同樣也會(huì)出現(xiàn)語法錯(cuò)誤。
三、關(guān)系運(yùn)算符
VHDL語言中有6種關(guān)系運(yùn)算符,它們分別是:
=——等于;
/=———不等于;
<——小于;
<=———小于等于;
>——大于;
>=——大于等于。
在關(guān)系運(yùn)算符的左右兩邊是運(yùn)算操作數(shù),不同的關(guān)系運(yùn)算符對兩邊的操作數(shù)的數(shù)據(jù)類型有不同的要求。其中等號“=”和不等號“/=”可以適用所有類型的數(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)算符對位矢量數(shù)據(jù)進(jìn)行比較時(shí),比較過程是從最左邊的位開始。自左至右按位進(jìn)行比較的。在位長不同的情況下,只能按自左至右的比較結(jié)果作為關(guān)系運(yùn)算的結(jié)果。例如,對3位和4位的位矢量進(jìn)行比較:
SIGNAL a:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL b:STD_LOGIC_VECTOR(2 DOWNTO 0);
a <= “1010”; --10
b <= “111”; --7
IF( a > b) THEN
┇
ELSE
┇
上例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”中對“STD_LOGIC_VECTOR”關(guān)系運(yùn)算重新作了定義,使其可以正確的進(jìn)行關(guān)系運(yùn)算。注意在用時(shí)必須首先說明調(diào)用該包集合。
四、并置運(yùn)算符
并置運(yùn)算符“&”用于位的連接。例如,將4個(gè)位用并置運(yùn)算符”&”連接起來就可以構(gòu)成一個(gè)具有4位長度的位矢量。兩個(gè)4位的位矢量用并置運(yùn)算符“&”連接起來就可以構(gòu)成8位長度的位矢量。
如en是b(0)~b(3)的允許輸出信號,
tmp_b <= b AND (en & en & en & en)文章來源:http://www.zghlxwxcb.cn/news/detail-462655.html
這個(gè)語句表示b的4位位矢量由en進(jìn)行選擇得到一個(gè)4位位矢量的輸出。文章來源地址http://www.zghlxwxcb.cn/news/detail-462655.html
到了這里,關(guān)于VHDL的運(yùn)算操作符的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!