1、 VHDL的各种表达式由操作数和操作符的各种表达式由操作数和操作符组成,其中,操作数是各种运算的对象,而组成,其中,操作数是各种运算的对象,而操作符则规定运算的方式。操作符则规定运算的方式。四、四、VHDLVHDL语言的操作符语言的操作符在在VHDL中,一般有四类操作符:中,一般有四类操作符:1操作符种类及对应的操作数类型操作符种类及对应的操作数类型逻辑操作符逻辑操作符(Logica Operator)关系操作符关系操作符(Relationa Operator)算术操作符算术操作符(Arithmetic Operator)符号操作符符号操作符(Sign Operator)VHDL操作符列表操作
2、符列表 VHDL操作符优先级2各种操作符的使用说明各种操作符的使用说明(2)注意操作符之间的优先级别。当一个表注意操作符之间的优先级别。当一个表达式中有两个以上的运算符时,可使用括达式中有两个以上的运算符时,可使用括号将这些运算分组。号将这些运算分组。(1)严格遵循在基本操作符间操作数是同数严格遵循在基本操作符间操作数是同数据类型的规则;严格遵循操作数的数据类据类型的规则;严格遵循操作数的数据类型必须与操作符所要求的数据类型完全一型必须与操作符所要求的数据类型完全一致的规则。致的规则。(4)关系操作符的作用是将相同数据类型关系操作符的作用是将相同数据类型的数据对象进行数值比较的数据对象进行数值
3、比较(=、/=)或关系排或关系排序判断序判断(、=),并将结果以布尔,并将结果以布尔类型类型(BOOLEAN)的数据表示出来,即的数据表示出来,即TRUE或或FALSE两种。两种。(3)VHDL共有七种基本逻辑操作符,对于数组共有七种基本逻辑操作符,对于数组型型(如如STD_LOGIC_VECTOR)数据对象的相互作数据对象的相互作用是按位进行的。用是按位进行的。(5)表中所列的表中所列的17种算术操作符可以分为种算术操作符可以分为求和操作符、求积操作符、符号操作符、求和操作符、求积操作符、符号操作符、混合操作符、移位操作符等五类操作符。混合操作符、移位操作符等五类操作符。求和操作符包括加减操
4、作符和并置操作符。求和操作符包括加减操作符和并置操作符。求积操作符包括求积操作符包括*(乘乘)、/(除除)、MOD(取模取模)和和REM(取余取余)四种操作符。四种操作符。符号操作符符号操作符“+”和和“-”的操作数只有的操作数只有一个,操作数的数据类型是整数。一个,操作数的数据类型是整数。混合操作符包括混合操作符包括*(乘方乘方)操作符和取操作符和取ABS(绝对值绝对值)操作符两种。操作符两种。六种移位操作符号六种移位操作符号SLL、SRL、SLA、SRA、ROL和和ROR都是都是VHDL93标准新增的标准新增的运算符,在运算符,在1987标准中没有。标准中没有。例如:将例如:将“1101”
5、执行各种执行各种1位移位操作,位移位操作,其移位操作后的结果其移位操作后的结果移位操作符的语句格式是:移位操作符的语句格式是:标识符号标识符号 移位操作符号移位操作符号 移位位数;移位位数;并置操作符并置操作符&用于进行位的连接,例如:用于进行位的连接,例如:“VH”&“DL”VH”&“DL”的结果为的结果为“VHDL”VHDL”0&0&11的结果为的结果为“01“01”SIGNAL a:STD_LOGIC;SIGNAL a:STD_LOGIC;SIGNAL c:STD_LOGIC_VECTOR(2 DOWNTO SIGNAL c:STD_LOGIC_VECTOR(2 DOWNTO 0);0)
6、;则可以:则可以:c=(a&a&a);c=(a&a&a);或或 c=(a,a,a);-c=(a,a,a);-不适用位矢量间的连接不适用位矢量间的连接 为了方便各种不同数据类型间的运算,为了方便各种不同数据类型间的运算,VHDL允许用户对原有的基本操作符重新允许用户对原有的基本操作符重新定义,赋予新的含义和功能,从而建立一定义,赋予新的含义和功能,从而建立一种新的操作符,这就是重载操作符,定义种新的操作符,这就是重载操作符,定义这种操作符的函数称为重载函数。事实上,这种操作符的函数称为重载函数。事实上,在程序包在程序包STD_LOGIC_UNSIGNED中已定中已定义了多种可供不同数据类型间操作
7、的算符义了多种可供不同数据类型间操作的算符重载函数。重载函数。3重载操作符重载操作符Synopsys的程序包的程序包STD_LOGIC_ARITH、STD_LOGIC_UNSIGNED和和STD_LOGIC_SIGNED中已经为许多类型的中已经为许多类型的运算重载了算术运算符和关系运算符,因此运算重载了算术运算符和关系运算符,因此只要引用这些程序包,只要引用这些程序包,SINGEND、UNSIGEND、STD_LOGIC 和和 INTEGER之之间即可混合运算,间即可混合运算,INTEGER、STD_LOGIC和和 STD_LOGIC_VECTOR之之间也可以混合运算。间也可以混合运算。操作符
8、可以用以产生电路。就提高综合操作符可以用以产生电路。就提高综合效率而言,使用常量值或简单的一位数据类效率而言,使用常量值或简单的一位数据类型能够生成较紧凑的型能够生成较紧凑的电路电路,而表达式复杂的,而表达式复杂的数据类型数据类型(如数组如数组)将相应地生成更多的电路。将相应地生成更多的电路。五、五、VHDLVHDL语言的属性描述语言的属性描述VHDL中可以具有属性的项目如下:中可以具有属性的项目如下:某一项目的特定属性或特征通常可以用一个值某一项目的特定属性或特征通常可以用一个值或一个表达式来表示,属性的值与对象或一个表达式来表示,属性的值与对象(信号、变信号、变量和常量量和常量)的值完全不
9、同,在任一给定的时刻,一的值完全不同,在任一给定的时刻,一个对象只能具有一个值,但却可以具有多个属性。个对象只能具有一个值,但却可以具有多个属性。VHDL还允许设计者自己定义属性。还允许设计者自己定义属性。类型、子类型;过程、函数;信号、变量、常量;类型、子类型;过程、函数;信号、变量、常量;实体、结构体、配置、程序包;元件;语句标号实体、结构体、配置、程序包;元件;语句标号。预定义的属性函数功能表预定义的属性函数功能表 综合器支持的属性有:LEFTLEFT、RIGHTRIGHT、HIGHHIGH、LOWLOW、RANGERANGE、REVERSE_RANGEREVERSE_RANGE、LEN
10、GTHLENGTH、EVENTEVENT及及STABLESTABLE。信号类属性中,最常用的当属信号类属性中,最常用的当属EVENT。1)信号类属性信号类属性例如:语句例如:语句“CLOCKEVENT”就是对以就是对以CLOCK为标识符的信号,在当前的一个为标识符的信号,在当前的一个极小的时间段内发生事件的情况进行检测。极小的时间段内发生事件的情况进行检测。所谓发生事件,就是电平发生变化,从一所谓发生事件,就是电平发生变化,从一种电平方式转变到另一种电平方式。种电平方式转变到另一种电平方式。CLOCKEVENT AND CLOCK=1 是对是对CLOCK信号上升沿的测试。即一旦测试信号上升沿的
11、测试。即一旦测试到到CLOCK有一个上升沿时,此表达式将返回一个布有一个上升沿时,此表达式将返回一个布尔值尔值TRUE。CLOCKEVENT AND CLOCK=0RISING_EDGE(CLOCK)FALLING_EDGE(CLOCK)PROCESS(CLOCK)IS IF(CLOCKEVENT AND CLOCK=1)THEN Q=DATA;END IF;END PROCESS;语句语句“NOT(clockSTABLE AND clock=1)”的表达方式是不可综合的。的表达方式是不可综合的。以下两语句的功能是一样的。(NOT clockSTABLE AND clock=1)NOT clo
12、ckSTABLE AND clock=1)(clockEVENT AND clock=1)(clockEVENT AND clock=1)注注 意:意:2)值类属性值类属性例:例:VARIABLE x:INTEGER;sdown:IN STD_LOGIC_VECTOR(8 DOWNTO 0);则有:则有:x:=sdownleft;-x值为值为8 x:=sdownright;-x值为值为0 x:=sdownlength;-x值为值为9 x:=sdownlow;-x值为值为0 3)数据区间类属性数据区间类属性例:例:.SIGNAL y1:IN STD LOGIC VECTOR(0 TO 7);.F
13、OR i IN y1RANGE LOOP.ATTRIBUTE 属性名属性名:数据类型数据类型;ATTRIBUTE 属性名属性名 OF 对象名对象名:对象类型对象类型IS 值值;例 如例 如 S y n p l i f y 综 合 器 支 持 的 特 殊 属 性 都 在综 合 器 支 持 的 特 殊 属 性 都 在synplify.attributes程序包中,使用前加入以下语句即可:程序包中,使用前加入以下语句即可:LIBRARY synplify;USE synplicity.attributes.all;4)4)用户定义属性用户定义属性例:例:ATTRIBUTE PINNUM:STRING
14、;ATTRIBUTE PINNUM OF Clk:signal is 1;ATTRIBUTE PINNUM OF Clr:signal is 2;ATTRIBUTE PINNUM OF Q:signal is 17,16,15,14;VHDL语言要求设计实体中的每一个常数、信号、语言要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必须具有确定的数变量、函数以及设定的各种参量都必须具有确定的数据类型,并且只有数据类型相同的量才能互相传递和据类型,并且只有数据类型相同的量才能互相传递和作用。而且相同类型,但位长不同的也不能直接代入,作用。而且相同类型,但位长不同的也不能直接代入,否则否则EDA工具在编译综合时会报告类型错。工具在编译综合时会报告类型错。VHDL语言提供了许多标准的数据类型;用户也可自定义数语言提供了许多标准的数据类型;用户也可自定义数据类型,这样使据类型,这样使VHDL语言的描述能力和自由度进一语言的描述能力和自由度进一步提高。因此,为了熟练地使用步提高。因此,为了熟练地使用VHDL语言编写程序,语言编写程序,必须很好地理解各种数据类型的意义。必须很好地理解各种数据类型的意义。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。