1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第十讲,VHDL,的运算符,本讲知识点:,算术运算符,逻辑运算符,运算符,操作符和操作数间的运算应注意:,VHDL,中共有四类操作符:,逻辑操作符、关系操作符、算术操作符和连接操作符,基本操作符间操作数是同数据类型,操作数的数据类型必须与操作符所要求的数据类型一致,注意操作符之间的优先级,通常在一个表达式中有两个以上的算符时,需要使用括号将这些运算分组,若其中的算符相同且为,AND,、,OR,、,XOR,中的一种则不需使用括号。,1、逻辑运算符:,逻辑运算符共有7种,分别是:,操作符 功能 操作数类
2、型,AND,与,bit,、,std_logic,等及其一维向量,OR,或,同上,NOT 取反,同上,NAND 与非,同上,NOR 或非,同上,XOR 异或,同上,XNOR 同或,同上,当一个语句种存在两个以上的逻辑表达式时,在语言种运算有自左至右的优先级顺序规定,而,在语言中,左右没有优先级差别,。,这,7,种逻辑运算符可以对“,STD_LOGIC”,和“,BIT”,等的逻辑型数据、“,STD_LOGIC_VECTOR”,逻辑型数组及布尔型数据进行逻辑运算。必须注意,,运算符的左边和右边,以及代入的信号的数据类型必须是相同的,。,例子:,SIGNAL,a,,,b,,,c,:,STD_LOGIC
3、VECTOR(3,DOWNTO,0),;,SIGNAL,d,,,e,,,f,,,g,:,STD_LOGIC_VECTOR(1,DOWNTO,0),;,SIGNAL,h,,,i,,,j,,,k,:,STD_LOGIC,;,SIGNAL,l,,,m,,,n,,,o,,,p,:,BOOLEAN,;,.,a=b,AND,c;,-b,、,c,相与后向,a,赋值,,a,、,b,、,c,的数据类型同属,4,位长的位矢量,d=e,OR,f,OR,g;,-,两个操作符,OR,相同,不需括号,h=(i,NAND,j),NAND,k,;,-NAND,不属,and,、,or,、,xor,三种算符,必须加括号,l=(
4、m,XOR,n),AND,(o,XOR,p);,-,操作符不同,必须加括号,h=i,AND,j,AND,k;,-,两个以操作符都是,AND,,不必加括号,h=i,AND,j,OR,k;,-,两个操作符不同,未加括号,表达错误,a=b,AND,e;,-,操作数,b,与,e,的位矢长度不一致,表达错误,h=i,OR,l;,-i,的数据类型是位,STD_LOGIC,,而,l,的数据,-,类型是布尔量,BOOLEAN,,因而不能相互作用,表达错误,。,2,、算术运算符,VHDL,的算术运算符共有十几种,其中常用的有如下几种:,操作符 功能 操作数类型,加法 整数,减法 整数,*乘法 整数和实数,SLL
5、等 移位,bit,或布尔类型的一维数组,(,SLL SLR SLA SRA ROL ROR),在运用算术运算符对如下的数据类型进行运算时,应注意:,(,1,),unsigned,signed,:需打开,std_logic_arith,程序包;,(,2,),std_logic,:需打开,std_logic_unsigned,或,std_logic_signed,程序包;,1.,求和操作符,2.,求积操作符,*,(,乘,),、,/(,除,),、,MOD(,取模,),、,RED(,取余,),3.,符号操作符,“,+”,和“”,4.,混合操作符,“*”“,ABS”,maxplus2,不支持“,MOD”,、“,RED”,运算,5.,移位操作符,SLL,、,SRL,、,SLA,、,SRA,、,ROL,、,ROR,要求操作数的数据类型必须为,1,维数组,元素必须为,bit,或,BOOLEAN,类型;操作符右边必须为整形。,逻辑左移和右移:移空的位用,0,填补;,逻辑左、右环移:数据内环行移动。,算术左、右移:其移空的为用最初的首位填补。,移位操作符的语句格式是:,标识符 移位操作符 移位位数,;,5.,移位操作符,