vhdl中信号都能进行哪些运算?
1个回答
展开全部
VHDL提供了6种预定义的运算操作符,分别是:赋值运算符,逻辑运算符,算术运算符,关系运算符,移位运算符,并置运算 符。
VHDLl赋值运算符:
在VHDL中,赋值运算符用来给信号、变量和常数赋值。赋值运算符包括以下3种:
<=用于对SIGNAL赋值。
:= 用于对VARIABLE,CONSTANT和GENERIC赋值,也可用于赋初始值。
=>给矢量中的某些位赋值,或对某些位之外的其他位(常用OTHERS表示)赋值。
VHDL逻辑运算符
在VHDL中,逻辑运算符用来执行逻辑运算操作。操作数必须是BIT,STD_LOGIC或STD_ULOGIC类型的数据(或者是这些数
据类型的扩展,即BIT_VECTOR,STD_LOGIC_VECTOR或STD_ULOGIC_VECTOR)。
VHDL的逻辑运算符有以下几种:
-NOT--取反
-AND--与
-OR--或
-NAND--与非
-NOR--或非
-XOR--异或
XNOR是"同或"运算符,它在VHDL87中没有定义,在VHDL93中被引入。注意,从上至下,这些运算符的优先级是递减的。
VHDL算术运算符:
在VHDL中,算术运算符用来执行算术运算操作。操作数可以是INTEGER,SIGNED,UNSIGNED或REAL数据类型,其中
REAL类型是不可综合的。如果声明了ieee库中的包集std_logic_signed和std_logic_unsigned,即可对STD_LOGIC_VECTOR类
型的数据进行加法和减法运算。
VHDL语言有以下8种算术运算符:
+ 加
- 减
* 乘
/ 除
** 指数运算
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)通常是不可综合的。
VHDL关系运算符:
在VHDL中,关系运算符用来对两个操作数进行比较运算。
VHDL有以下6种关系运算符:
= 等于
/= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于
这里需要注意的是:
关系运算符左右两边操作数的数据类型必须相同,这些关系运算符适用于前面所讲的所有数据类型。
VHDL移位运算符:
在VHDL中,移位操作符用来对数据进行移位操作,它们是在VHDL93中引入的。其语法结构为:
<左操作数><移位操作符><右操作数>
其中,左操作数必须是BIT_VECTOR类型的,右操作数必须是INTEGER类型(前面可以加正负号)的。
VHDL中的移位操作符有以下几种:
sll 逻辑左移------数据左移,右端空出来的位置填充'0'
srl 逻辑右移------数据右移,左端空出来的位置填充'0'
sla 算术左移-------数据左移,同时复制最右端的位,在数据左移操作后填充在右端空出的位置上
sra 算术右移-------数据右移,同时复制最左端的位,在数据右移操作后填充在左端空出的位置上
rol 循环逻辑左移-----数据左移,同时从左端移出的位依次填充到右端空出的位置上
ror 循环逻辑右移------数据右移,同时从右端移出的位依次填充到左端空出的位置上
VHDL 并置运算符:
在VHDL中,提供了一种并置操作符 , 它的符号如下所示 :
& 或者(,,,,)-用来进行位和位矢量的连接运算
这里 , 所谓位和位矢量的连接运算是指将并置操作符右边的内容接在左边的内容之后以形成一个新的位矢量.
通常采用并置操作符进行连接的方式很多 : 既可以将两个位连接起来形成一个位矢量 , 也可以将两个位矢量连接起来以形成一个
新的位矢量 , 还可以将位矢量和位连接起来形成一个新的矢量。
例:
SIGNAL a, b:std_logic;
SIGNAL d, e: std_logic_vector (3 DOWNTO 0);
SIGNAL g: std_logic_vector (7 DOWN TO 0);
c<=a & b; 两个位连接
f <= a & d; 位和一个位矢量连接
采用并置操作符的过程中 , 设计人员常常采用一种称为聚合连接的方式。
聚合连接就是 :将上面直接连接中的并置操作符换成逗号 , 然后再使用括号将连接的位括起来。
例: SIGNAL a, b, c, d: std _logic;
SIGNAL q: std_logic_ vector (4 DOWNTO 0);
q<=a&b&c&d&a;
若采用聚合连接的方式 , 那么可以写成如下几种形式 :
q <= (a, b, c, d, a);
q <= (3 = > b, 2 = > c, 1 = > d, OTHERS = > a);
VHDLl赋值运算符:
在VHDL中,赋值运算符用来给信号、变量和常数赋值。赋值运算符包括以下3种:
<=用于对SIGNAL赋值。
:= 用于对VARIABLE,CONSTANT和GENERIC赋值,也可用于赋初始值。
=>给矢量中的某些位赋值,或对某些位之外的其他位(常用OTHERS表示)赋值。
VHDL逻辑运算符
在VHDL中,逻辑运算符用来执行逻辑运算操作。操作数必须是BIT,STD_LOGIC或STD_ULOGIC类型的数据(或者是这些数
据类型的扩展,即BIT_VECTOR,STD_LOGIC_VECTOR或STD_ULOGIC_VECTOR)。
VHDL的逻辑运算符有以下几种:
-NOT--取反
-AND--与
-OR--或
-NAND--与非
-NOR--或非
-XOR--异或
XNOR是"同或"运算符,它在VHDL87中没有定义,在VHDL93中被引入。注意,从上至下,这些运算符的优先级是递减的。
VHDL算术运算符:
在VHDL中,算术运算符用来执行算术运算操作。操作数可以是INTEGER,SIGNED,UNSIGNED或REAL数据类型,其中
REAL类型是不可综合的。如果声明了ieee库中的包集std_logic_signed和std_logic_unsigned,即可对STD_LOGIC_VECTOR类
型的数据进行加法和减法运算。
VHDL语言有以下8种算术运算符:
+ 加
- 减
* 乘
/ 除
** 指数运算
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)通常是不可综合的。
VHDL关系运算符:
在VHDL中,关系运算符用来对两个操作数进行比较运算。
VHDL有以下6种关系运算符:
= 等于
/= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于
这里需要注意的是:
关系运算符左右两边操作数的数据类型必须相同,这些关系运算符适用于前面所讲的所有数据类型。
VHDL移位运算符:
在VHDL中,移位操作符用来对数据进行移位操作,它们是在VHDL93中引入的。其语法结构为:
<左操作数><移位操作符><右操作数>
其中,左操作数必须是BIT_VECTOR类型的,右操作数必须是INTEGER类型(前面可以加正负号)的。
VHDL中的移位操作符有以下几种:
sll 逻辑左移------数据左移,右端空出来的位置填充'0'
srl 逻辑右移------数据右移,左端空出来的位置填充'0'
sla 算术左移-------数据左移,同时复制最右端的位,在数据左移操作后填充在右端空出的位置上
sra 算术右移-------数据右移,同时复制最左端的位,在数据右移操作后填充在左端空出的位置上
rol 循环逻辑左移-----数据左移,同时从左端移出的位依次填充到右端空出的位置上
ror 循环逻辑右移------数据右移,同时从右端移出的位依次填充到左端空出的位置上
VHDL 并置运算符:
在VHDL中,提供了一种并置操作符 , 它的符号如下所示 :
& 或者(,,,,)-用来进行位和位矢量的连接运算
这里 , 所谓位和位矢量的连接运算是指将并置操作符右边的内容接在左边的内容之后以形成一个新的位矢量.
通常采用并置操作符进行连接的方式很多 : 既可以将两个位连接起来形成一个位矢量 , 也可以将两个位矢量连接起来以形成一个
新的位矢量 , 还可以将位矢量和位连接起来形成一个新的矢量。
例:
SIGNAL a, b:std_logic;
SIGNAL d, e: std_logic_vector (3 DOWNTO 0);
SIGNAL g: std_logic_vector (7 DOWN TO 0);
c<=a & b; 两个位连接
f <= a & d; 位和一个位矢量连接
采用并置操作符的过程中 , 设计人员常常采用一种称为聚合连接的方式。
聚合连接就是 :将上面直接连接中的并置操作符换成逗号 , 然后再使用括号将连接的位括起来。
例: SIGNAL a, b, c, d: std _logic;
SIGNAL q: std_logic_ vector (4 DOWNTO 0);
q<=a&b&c&d&a;
若采用聚合连接的方式 , 那么可以写成如下几种形式 :
q <= (a, b, c, d, a);
q <= (3 = > b, 2 = > c, 1 = > d, OTHERS = > a);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询