您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 10电-第3章-3.5 VHDL操作符
CPLD/FPGA技术与应用孙静物理与机械电子工程学院第3章VHDL设计初步CPLD/FPGA技术与应用3.5VHDL操作符【P3319.9】操作符又称为运算符,其操作对象称为操作数。操作符和操作数相结合就构成了各种VHDL表达式。与其他高级语言相似,VHDL有着丰富的操作符,主要有四类常用的操作符,分别是逻辑操作符、算术操作符、关系操作符和符号操作符。此外还有并置操作符。CPLD/FPGA技术与应用3.5VHDL操作符对于VHDL中的操作符与操作数间的运算有两点需要特别注意:严格遵循在基本操作符间操作数是同数据类型的规则。严格遵循操作数的数据类型必须与操作符所要求的数据类型完全一致。CPLD/FPGA技术与应用3.5VHDL操作符操作符的优先级顺序为:操作符优先级NOT,ABS,**最高优先级最低优先级*,/,MOD,REM+(正号),-(负号)+,-,&SLL,SLA,SRL,SRA,ROL,ROR=,/=,,=,,=AND,OR,NAND,NOR,XOR,XNORCPLD/FPGA技术与应用1.逻辑操作符包括一元逻辑操作符和二元逻辑操作符:一元逻辑操作符:NOT(非)二元逻辑操作符:AND(与)、OR(或)、NAND(与非)、NOR(或非)、XOR(异或)、XNOR(同或)逻辑操作符可以对“STD_LOGIC”和“BIT”等逻辑型数据、“STD_LOGIC_VECTOR”逻辑型数组及布尔数据进行逻辑运算。【注意】①操作符的左边和右边,以及代入的信号的数据类型必须是相同的。CPLD/FPGA技术与应用1.逻辑操作符【注意】②在VHDL中,逻辑操作符左右没有优先组合的区别,一个表达式中如果有多个逻辑操作符,运算顺序的不同可能会影响运算结果,就需要用括号来解决组合顺序的问题。如:q=aANDbORNOTcANDd;这条语句在编译时会给出语法错误信息,可以加上括号改为:q=(aANDb)OR(NOT(cANDd));③如果逻辑表达式中只有AND、OR、XOR这3个操作符中的一种,可以不加括号,因为对于这三种逻辑运算来说,改变运算顺序不会影响逻辑结果。CPLD/FPGA技术与应用P333【例9-22】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,--因而不能相互作用,表达错误CPLD/FPGA技术与应用2.关系操作符包括=、/=、<、<=、>、>=。关系操作符的使用规则如下:两个对象进行比较时,数据类型一定要相同。=(等于)和/=(不等于)适用于所有数据类型的对象之间的比较。大于、小于、大于等于、小于等于适用于整数、实数位、位矢量及数组类型的比较。<=符号有两种含义:代入符和小于等于符,要根据上下文判断。两个位矢量类型的对象比较时,自左至右,按位比较。CPLD/FPGA技术与应用P334【例9-23】ENTITYrelational_ops_1ISPORT(a,b:INBIT_VECTOR(0TO3);m:OUTBOOLEAN);ENDrelational_ops_1;ARCHITECTUREexampleOFrelational_ops_1ISBEGINm=(a=b);--P334,例9-23和9-24有错ENDexample;2.关系操作符CPLD/FPGA技术与应用3.算术操作符包括一元算术操作符和二元算术操作符:一元算术操作符:+(正号)、-(负号)、ABS(求绝对值)二元算术操作符:+、-、*、/、MOD(求模)、REM(求余)、**(乘方运算)类别算术操作符分类1求和操作符(Addingoperators)+(加),-(减)2求积操作符(Multiplyingoperators)*,/,MOD,REM3符号操作符(Signoperators)+(正),-(负)4混合操作符(Miscellaneousoperators)**,ABSCPLD/FPGA技术与应用【例】SIGNALa,b,c,d,e,f,g,h:INTEGERRANGE0TO15;a=b*4;c=d/4;e=fMOD4;g=hREM4;3.算术操作符CPLD/FPGA技术与应用P336【例9-28】SIGNALa,b:INTEGERRANGE-8to7;SIGNALc:INTEGERRANGE0to15;SIGNALd:INTEGERRANGE0to3;a=ABS(b);c=2**d;3.算术操作符CPLD/FPGA技术与应用4.移位操作符包括SLL(逻辑左移)、SRL(逻辑右移)、SLA(算术左移)、SRA(算术右移)、ROL(逻辑循环左移)、ROR(逻辑循环右移)。移位操作符的使用规则如下:逻辑移位用0填补移空的位。算术移位把首位看作符号位,移位时保持符号不变,因此移空的位用最初的首位来填补。循环移位是用移出的位依次填补移空位。移位操作符的语句格式是:标识符移位操作符移位位数;CPLD/FPGA技术与应用【例】10011011SLL1;--00110110--逻辑左移1位,移空位用0填补11011010SLA1;--10110101--算术左移1位,移空位用符号位1填补10011011ROL2;--01101110--循环左移2位,移出的10依次填补移空位4.移位操作符CPLD/FPGA技术与应用P337【例9-29】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;4.移位操作符标准二进制数转换成整型数CPLD/FPGA技术与应用5.并置操作符[P74]并置操作符&,用于将多个位连接成为位矢量,或者将多个位矢量的连接构成更大的位矢量。并置操作符的使用规则如下:操作数的数据类型是一维数组,如BIT,BIT_VECTOR,STD_LOGIC和STD_LOGIC_VECTOR等。如:VH&DL;--VHDL'0'&'1'&'1';--011Abc=a&b;--abc(1)=a;abc(0)=bCPLD/FPGA技术与应用【例】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYdecoder4to8ISPORT(A,B:INBIT_VECTOR(3DOWNTO0);EN:INBIT;Output:OUTBIT_VECTOR(7DOWNTO0));ENDdecoder4to8;ARCHITECTUREbehaveOFdecoder4to8ISBEGINTEMP=BAND(EN&EN&EN&EN);y=a&temp;ENDbehave;5.并置操作符CPLD/FPGA技术与应用5.并置操作符并置操作符也可通过使用集合体的方式实现,即将并置操作符转换成逗号。如:TEMP=BAND(EN,EN,EN,EN);不能采用集合体方式实现矢量的连接。Y=(A,TEMP);--错误表达CPLD/FPGA技术与应用5.并置操作符如:TEMP=(3='1',2='1',1='0',0='1');--TEMP=1101Y=(5='1',3='1',1='1',OTHERS='0');--Y=00101010Y=(5DOWNTO3='1',OTHERS='0');--Y=“00111000
本文标题:10电-第3章-3.5 VHDL操作符
链接地址:https://www.777doc.com/doc-3849835 .html