算术运算符
VHDL算术运算符
在VHDL中,算术运算符用来执行算术运算操作。操作数可以是INTEGER,SIGNED,UNSIGNED或REAL数据
类型,其中REAL类型是不可综合的。如果声明了ieee库中的包集std_logic_signed和std_logic_unsigned,
即可对STD_LOGIC_VECTOR类型的数据进行加法和减法运算。
VHDL语言有以下算术运算符:
+ 加
- 减
* 乘
/ 除
** 指数运算
MOD 取模
REM 取余
ABS 取绝对值
上述运算符中,加法、减法和乘法运算符是可以综合成逻辑电路的,对于除法运算,只有在除数为2的n次幕时才
有可能进行综合,此时除法操作对应的是将被除数向右进行n次移位。对于指数运算,只有当底数和指数都是静
态数值(常量或GENERIC参数)时才是可综合的。在算术运算符的使用中,要注意MOD和REM的区别:y MOD x
运算的结果是y除以x所得的余数,运算结果通过信号x返回;y REM x运算的结果是y除以x所得的余数,结果通过
信号y返回。ABS运算返回操作数的绝对值。上述后3个运算符(MOD,REM和ABS)通常是不可综合的。
移位操作符
Verilog
<< :逻辑左移
>> :逻辑右移
<<< :算术左移
>>> :算术右移
VHDL
“SLL” 逻辑左移操作符,最右边空出的位用‘0’填充
“SRL”逻辑右移操作符,最左边空出的位用‘0’填充
“SLA”算术左移操作符,最右边空出的位用原来最右边的位填充
“SRA”算术右移操作符,最左边空出的位用原来最左边的位填充
“ROL” 循环左移操作符,最右边空出的位用原来最左边的位填充
“ROR”循环右移操作符,最左边空出的位用原来最右边的位填充
(2)逻辑运算符
VHDL:
AND (与)
OR (或)
NOT (非)
NAND (与非)
NOR (或非)
XOR (异或)
XNOR (同或)
注意:逻辑运算符操作数的数据类型要求必须是BIT、BOOLEAN、BIT_VECTOR
STD_LOGIC 和STD_LOGIC_VECTOR这5种数据类型之一。或者由BIT、BOOLEAN和
STD_LOGIC构成的一维数组
逻辑运算符NOT的优先级最高,其他没有优先级别
逻辑运算两边的操作数类型必须一致。
在一个表达式中不允许不用括号而把两种不同的运算符结合在一起