VHDL 操作符
VHDLVHDLVHDLVHDL操作符操作符操作符操作符EDA技术实用教程1.1逻辑操作符逻辑操作符 VHDLVHDL操作符操作符 逻辑操作符逻辑操作符 (LogicalOperator)关系操作符关系操作符 (RelationalOperator)算术操作符算术操作符 (ArithmeticOperator)符号操作符符号操作符 (SignOperator)重载操作符重载操作符 (OverloadingOperator)严格遵循在基本操作符间操作数是同数据类型的规则。严格遵循在基本操作符间操作数是同数据类型的规则。严格遵循操作数的数据类型必须与操作符所要求的数据类严格遵循操作数的数据类型必须与操作符所要求的数据类型完全一致。型完全一致。表表8-1VHDL操作符列表操作符列表类类 型型操作符操作符功功 能能操作数数据类型操作数数据类型算术操作符算术操作符+加加 整数整数 减减 整数整数&并置并置 一维数组一维数组*乘乘 整数和实数整数和实数(包括浮点数包括浮点数)/除除 整数和实数整数和实数(包括浮点数包括浮点数)MOD取模取模 整数整数REM取余取余 整数整数SLL逻辑左移逻辑左移 BIT或布尔型一维数组或布尔型一维数组SRL逻辑右移逻辑右移 BIT或布尔型一维数组或布尔型一维数组SLA算术左移算术左移 BIT或布尔型一维数组或布尔型一维数组SRA算术右移算术右移BIT或布尔型一维数组或布尔型一维数组ROL逻辑循环左移逻辑循环左移BIT或布尔型一维数组或布尔型一维数组ROR逻辑循环右移逻辑循环右移BIT或布尔型一维数组或布尔型一维数组*乘方乘方整数整数ABS取绝对值取绝对值整数整数表表8-1VHDL操作符列表操作符列表关系操作符关系操作符=等于等于任何数据类型任何数据类型/=/=不等于不等于任何数据类型任何数据类型 大于大于枚举与整数类型,及对应的一维数组枚举与整数类型,及对应的一维数组=大于等于大于等于枚举与整数类型,及对应的一维数组枚举与整数类型,及对应的一维数组逻辑操作符逻辑操作符AND与与BIT,BOOLEAN,STD_LOGICOR或或BIT,BOOLEAN,STD_LOGICNAND与非与非BIT,BOOLEAN,STD_LOGICNOR或非或非BIT,BOOLEAN,STD_LOGICXOR异或异或BIT,BOOLEAN,STD_LOGICXNOR异或非异或非BIT,BOOLEAN,STD_LOGICNOT非非BIT,BOOLEAN,STD_LOGIC符号操作符符号操作符+正正整数整数负负整数整数1.1逻辑操作符逻辑操作符 VHDLVHDL操作符操作符 运算符运算符优先级优先级NOT,ABS,*最高优先级最高优先级*,/,MOD,REM+(正号正号),(负号负号)+,&SLL,SLA,SRL,SRA,ROL,ROR=,/=,=AND,OR,NAND,NOR,XOR,XNOR最低优先级最低优先级表表8-2VHDL操作符优先级操作符优先级1.1逻辑操作符逻辑操作符 VHDLVHDL操作符操作符 【例【例8-16】SIGNALa,b,c:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALd,e,f,g:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALh,I,j,k:STD_LOGIC;SIGNALl,m,n,o,p:BOOLEAN;.a=bANDc;-b、c相与后向相与后向a赋值,赋值,a、b、c的数据类型同属的数据类型同属4位长的位矢量位长的位矢量d=eORfORg;-两个操作符两个操作符OR相同,不需括号相同,不需括号h=(iNANDj)NANDk;-NAND不属上述三种算符中的一种,必须加括号不属上述三种算符中的一种,必须加括号l=(mXORn)AND(oXORp);-操作符不同,必须加括号操作符不同,必须加括号h=iANDjANDk;-两个操作符都是两个操作符都是AND,不必加括号不必加括号h=iANDjORk;-两个操作符不同,未加括号,表达错误两个操作符不同,未加括号,表达错误a=bANDe;-操作数操作数b与与e的位矢长度不一致,表达错误的位矢长度不一致,表达错误h=iORl;-i的数据类型是位的数据类型是位STD_LOGIC,而而l的数据类型是的数据类型是.-布尔量布尔量BOOLEAN,因而不能相互作用,表达错误。因而不能相互作用,表达错误。1.2关系操作符关系操作符 VHDLVHDL操作符操作符 【例【例8-17】ENTITY relational_ops_1 IS PORT(a,b:IN BITVECTOR(0 TO 3);m:OUT BOOLEAN);END relational_ops_1;ARCHITECTURE example OF relational_ops_1 IS BEGIN output=(a=b);END example;1.2关系操作符关系操作符 VHDLVHDL操作符操作符 【例【例8-18】ENTITY relational_ops_2 IS PORT(a,b:IN INTEGER RANGE 0 TO 3;m:OUT BOOLEAN);END relational_ops_2;ARCHITECTURE example OF relational_ops_2 IS BEGIN output=b);ENDexample;1.3算术操作符算术操作符 VHDLVHDL操作符操作符 类类别别算术操作符分类算术操作符分类1求和操作符求和操作符(Addingoperators)+(加加),(减减),(并置并置)2求求 积积 操操 作作 符符(Multiplyingoperators)*,/,MOD,REM3符号操作符符号操作符(Signoperators)+(正正),(负负)4混混 合合 操操 作作 符符(Miscellaneousoperators)*,ABS5移位操作符移位操作符(Shiftoperators)SLL,SRL,SLA,SRA,ROL,ROR表表8-3算术操作符分类表算术操作符分类表1.3算术操作符算术操作符 VHDLVHDL操作符操作符 1.求和操作符求和操作符【例【例8-19】VARIABLEa,b,c,d,e,f:INTEGERRANGE0TO255;.a:=b+c;d:=ef;【例例8-20】PROCEDUREadding_e(a:ININTEGER;b:INOUTINTEGER)IS.b:=a+b;1.求和操作符求和操作符【例【例8-21】PACKAGE example_arithmetic IS TYPE small_INt IS RANGE 0 TO 7;END example_arithmetic;USE WORK.example_arithmetic.ALL;ENTITY arithmetic IS PORT(a,b:IN SMALL_INT;c:OUT SMALL_INT);END arithmetic;ARCHITECTURE example OF arithmetic IS BEGIN c=a+b;ENDexample;1.3算术操作符算术操作符 VHDLVHDL操作符操作符 2.求积操作符求积操作符*(乘)、/(除)、MOD(取模)、RED(取余)3.符号操作符符号操作符“+”、“”1.3算术操作符算术操作符 VHDLVHDL操作符操作符 4.混合操作符混合操作符“*”、“ABS”【例【例8-22】SIGNAL a,b:INTEGER RANGE 8 to 7;SIGNAL c:INTEGER RANGE 0 to 15;SIGNAL d:INTEGER RANGE 0 to 3;a=ABS(b);c=2*d;1.3算术操作符算术操作符 VHDLVHDL操作符操作符 5.移位操作符移位操作符SLL、SRL、SLA、SRA、ROL、ROR移位操作符的语句格式是:移位操作符的语句格式是:标识符标识符移位操作符移位操作符移位位数移位位数;1.3算术操作符算术操作符5.移位操作符移位操作符【例【例8-23】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYdecoder3to8ISport(input:INSTD_LOGIC_VECTOR(2DOWNTO0);output:OUTBIT_VECTOR(7DOWNTO0);ENDdecoder3to8;ARCHITECTUREbehaveOFdecoder3to8ISBEGINoutput=00000001SLLCONV_INTEGER(input);-被移位部分是常数!被移位部分是常数!ENDbehave;谢谢观看!谢谢观看!谢谢观看!谢谢观看!EDA技术实用教程