您好,欢迎访问三七文档
VHDL的各种表达式由操作数和操作符组成,其中,操作数是各种运算的对象,而操作符则规定运算的方式。四、VHDL语言的操作符在VHDL中,一般有四类操作符:1.操作符种类及对应的操作数类型逻辑操作符(LogicaOperator)关系操作符(RelationaOperator)算术操作符(ArithmeticOperator)符号操作符(SignOperator)VHDL操作符列表VHDL操作符优先级2.各种操作符的使用说明(2)注意操作符之间的优先级别。当一个表达式中有两个以上的运算符时,可使用括号将这些运算分组。(1)严格遵循在基本操作符间操作数是同数据类型的规则;严格遵循操作数的数据类型必须与操作符所要求的数据类型完全一致的规则。(4)关系操作符的作用是将相同数据类型的数据对象进行数值比较(=、/=)或关系排序判断(、=、、=),并将结果以布尔类型(BOOLEAN)的数据表示出来,即TRUE或FALSE两种。(3)VHDL共有七种基本逻辑操作符,对于数组型(如STD_LOGIC_VECTOR)数据对象的相互作用是按位进行的。(5)表中所列的17种算术操作符可以分为求和操作符、求积操作符、符号操作符、混合操作符、移位操作符等五类操作符。求和操作符包括加减操作符和并置操作符。求积操作符包括*(乘)、/(除)、MOD(取模)和REM(取余)四种操作符。符号操作符“+”和“-”的操作数只有一个,操作数的数据类型是整数。混合操作符包括**(乘方)操作符和取ABS(绝对值)操作符两种。六种移位操作符号SLL、SRL、SLA、SRA、ROL和ROR都是VHDL'93标准新增的运算符,在1987标准中没有。例如:将“1101”执行各种1位移位操作,其移位操作后的结果移位操作符的语句格式是:标识符号移位操作符号移位位数;并置操作符&用于进行位的连接,例如:“VH”&“DL”的结果为“VHDL”‘0’&‘1’的结果为“01”SIGNALa:STD_LOGIC;SIGNALc:STD_LOGIC_VECTOR(2DOWNTO0);则可以:c=(a&a&a);或c=(a,a,a);--不适用位矢量间的连接为了方便各种不同数据类型间的运算,VHDL允许用户对原有的基本操作符重新定义,赋予新的含义和功能,从而建立一种新的操作符,这就是重载操作符,定义这种操作符的函数称为重载函数。事实上,在程序包STD_LOGIC_UNSIGNED中已定义了多种可供不同数据类型间操作的算符重载函数。3.重载操作符Synopsys的程序包STD_LOGIC_ARITH、STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED中已经为许多类型的运算重载了算术运算符和关系运算符,因此只要引用这些程序包,SINGEND、UNSIGEND、STD_LOGIC和INTEGER之间即可混合运算,INTEGER、STD_LOGIC和STD_LOGIC_VECTOR之间也可以混合运算。操作符可以用以产生电路。就提高综合效率而言,使用常量值或简单的一位数据类型能够生成较紧凑的电路,而表达式复杂的数据类型(如数组)将相应地生成更多的电路。五、VHDL语言的属性描述VHDL中可以具有属性的项目如下:某一项目的特定属性或特征通常可以用一个值或一个表达式来表示,属性的值与对象(信号、变量和常量)的值完全不同,在任一给定的时刻,一个对象只能具有一个值,但却可以具有多个属性。VHDL还允许设计者自己定义属性。类型、子类型;过程、函数;信号、变量、常量;实体、结构体、配置、程序包;元件;语句标号。预定义的属性函数功能表综合器支持的属性有:LEFT、RIGHT、HIGH、LOW、RANGE、REVERSE_RANGE、LENGTH、EVENT及STABLE。信号类属性中,最常用的当属EVENT。1)信号类属性例如:语句“CLOCK'EVENT”就是对以CLOCK为标识符的信号,在当前的一个极小的时间段内发生事件的情况进行检测。所谓发生事件,就是电平发生变化,从一种电平方式转变到另一种电平方式。CLOCK'EVENTANDCLOCK=‘1’是对CLOCK信号上升沿的测试。即一旦测试到CLOCK有一个上升沿时,此表达式将返回一个布尔值TRUE。CLOCK'EVENTANDCLOCK=‘0’RISING_EDGE(CLOCK)FALLING_EDGE(CLOCK)PROCESS(CLOCK)ISIF(CLOCK'EVENTANDCLOCK=‘1’)THENQ=DATA;ENDIF;ENDPROCESS;语句“NOT(clock’STABLEANDclock='1')”的表达方式是不可综合的。以下两语句的功能是一样的。(NOTclock’STABLEANDclock='1')(clock’EVENTANDclock='1')注意:2)值类属性例:VARIABLEx:INTEGER;sdown:INSTD_LOGIC_VECTOR(8DOWNTO0);则有:x:=sdown’left;--x值为8x:=sdown’right;--x值为0x:=sdown’length;--x值为9x:=sdown’low;--x值为03)数据区间类属性例:...SIGNALy1:INSTDLOGICVECTOR(0TO7);...FORiINy1'RANGELOOP...ATTRIBUTE属性名:数据类型;ATTRIBUTE属性名OF对象名:对象类型IS值;例如Synplify综合器支持的特殊属性都在synplify.attributes程序包中,使用前加入以下语句即可:LIBRARYsynplify;USEsynplicity.attributes.all;4)用户定义属性例:ATTRIBUTEPINNUM:STRING;ATTRIBUTEPINNUMOFClk:signalis1;ATTRIBUTEPINNUMOFClr:signalis2;ATTRIBUTEPINNUMOFQ:signalis17,16,15,14;VHDL语言要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必须具有确定的数据类型,并且只有数据类型相同的量才能互相传递和作用。而且相同类型,但位长不同的也不能直接代入,否则EDA工具在编译综合时会报告类型错。VHDL语言提供了许多标准的数据类型;用户也可自定义数据类型,这样使VHDL语言的描述能力和自由度进一步提高。因此,为了熟练地使用VHDL语言编写程序,必须很好地理解各种数据类型的意义。
本文标题:数字电子技术5
链接地址:https://www.777doc.com/doc-71224 .html