3.7.3 算数操作符
算术操作符可以分为求和操作符、求积操作符、符号操作符、混合操作符、移位操作符等五类操作符。
(1)求和操作符
求和操作符包括加、减操作符。加减操作符的运算规则与常规的加减法是一致的,VHDL规定它们的操作数的数据类型是整数。对于大于位宽为4的加法器和减法器,VHDL综合器将调用库元件进行综合。
【例3.8】
在综合后,由加减运算符(+,-)产生的组合逻辑门所耗费的硬件资源的规模都比较大,但当加减运算符的其中一个操作数或两个操作数都为整型常数,则只需很少的电路资源。
(2)求积操作符
求积操作符包括*(乘)、/(除)、MOD(取模)和REM(取余)四种操作符。VHDL规定,乘与除的数据类型是整数和实数(包括浮点数)。在一定条件下,还可对物理类型的数据对象进行运算操作。
但需注意的是,虽然在一定条件下,乘法和除法运算是可综合的,但从优化综合、节省芯片资源的角度出发,最好不要轻易使用乘除操作符。对于乘除运算可以用其他变通的方法来实现。
操作符MOD和REM的本质与除法操作符是一样的,因此,可综合的取模和取余的操作数必须是以2为底数的幂。MOD和REM的操作数数据类型只能是整数,运算操作结果也是整数。
(3)符号操作符
符号操作符“+”和“-”的操作数只有一个,操作数的数据类型是整数,操作符“+”对操作数不作任何改变,操作符“-”作用于操作数后的返回值是对原操作数取负,在实际使用中,取负操作数需加括号。如:
z :=x *(-y);
(4)混合操作符
混合操作符包括乘方“**”操作符和取绝对值“ABS”操作符两种。VHDL规定,它们的操作数数据类型一般为整数类型。乘方运算的左边可以是整数或浮点数,但右边必须为整数,而且只有在左边为浮点时,其右边才可以为负数。一般的,VHDL综合器要求乘方操作符作用的操作数的底数必须是2。
(5)移位操作符
六种移位操作符号SLL、SRL、SLA、SRA、ROL和ROR都是VHDL'93标准新增的运算符,在1987标准中没有。VHDL'93标准规定移位操作符作用的操作数的数据类型应是一维数组,并要求数组中的元素必须是BIT或BOOLEAN的数据类型,移位的位数则是整数。在EDA工具所附的程序包中重载了移位操作符以支持STD_LOGIC_VECTOR及INTEGER等类型。移位操作符左边可以是支持的类型,右边则必定是INTEGER型。如果操作符右边是INTEGER型常数,移位操作符实现起来比较节省硬件资源。
其中SLL是将位矢向左移,右边跟进的位补零;SRL的功能恰好与SLL相反;ROL和ROR的移位方式稍有不同,它们移出的位将用于依次填补移空的位,执行的是自循环式移位方式;SLA和SRA是算术移位操作符,其移空位用最初的首位来填补。
移位操作符的语句格式是:
标识符号移位操作符号移位位数;
【例3.9】
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。