您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > VHDL对象_数据类型和运算符
数据对象数据类型VHDL的运算符数据对象VHDL语言中,可以赋予一个值的对象就称为客体。客体主要包括以下三种:常量(CONSTANT)、变量(VARIABLE)、信号(SIGNAL)。1常量(CONSTANT)(常数)定义一个常数主要是为了使设计实体中的某些量易于阅读和修改。常数说明就是对某一常数名赋予一个固定的值。通常在程序开始前进行赋值,该值的数据类型在说明语句中说明。常数说明语句格式为:CONSTANT常数名:数据类型:=表达式;例如:CONSTANTVcc:REAL:=5.0;CONSTANTm:STD_LOGIC_VECTOR(0TO3):=“1011”;CONSTANTDelay:TIME:=10ns;注:常量是一个恒定不变的值,一旦做了数据类型和赋值定义,它在程序中就不能再改变。2变量(VARIABLE)变量只能在进程和子程序中用,是一个局部量,不能将信息带出对它做出定义的当前设计单元。与信号不同,变量的赋值是理想化数据传输,其赋值是立即生效的,不存在任何的延时行为。变量定义语句的格式为:VARIABLE变量名:数据类型约束条件:=初始值;例如:VARIABLEnum:INTEGERRANGE0TO127:=20;VARIABLEm,n:INTEGER;变量赋值语句的格式为:变量名:=表达式;赋值语句“:=”右边的表达式必须与目标变量具有相同的数据类型,这个表达式可以是一个运算表达式也可以是一个数值。变量赋值语句左边的目标变量可以是单值变量,也可以是变量的集合。例如定义变量:VARIABLEa,b:REAL;VARIABLEx,y:BIT_VECTOR(0TO7);a:=11.0;x(0to5):=y(2to7);3信号(SIGNAL)信号是电子电路内部硬件连接的抽象,它的性质类似于连接线。它可以作为设计实体中的并行语句模块间交流信息的通道。信号及其相关的延时语句明显地体现了硬件系统的特征。信号定义语句的格式为:SIGNAL信号名:数据类型:=初始值;例如:SIGNALgnd:BIT:=‘0’;SIGNALdata:STD_LOGIC_VECTOR(7DOWNTO0);信号赋值语句表达式为:信号名=表达式;符号“=”表示赋值操作,即将数据信息传入。数据信息传入时可以设置延时过程,这与器件的实际传播延时十分接近。因此信号值的代入采用“=”代入符,而不是像变量赋值时那样用“:=”。但信号定义时初始赋值符号“:=”,即仿真的时间坐标是从赋初始值开始的。信号赋值语句举例:x=y;a=‘1’;D1=D2AFTER10ns;注意:变量和信号都必须先定义,后赋值。注意赋值符“=”和“:=”的差别。信号与变量的区别1、使用方式2、作用范围3、赋值符号4、赋值后的变化标准数据类型STD库的STANDARD包集预定义了位(BIT)、布尔(BOOLEAN)、整数(INTEGER)和实数(REAL)数据类型。不需要USE语句显示调用整数(INTEGER)整数与数学中整数的定义相似,可以使用预定义运算操作符,如加“+”、减“-”、乘“×”、除“÷”进行算术运算。在VHDL语言中,整数的表示范围为-2147483647~2147483647,即从-(231-1)到(231-1)。实数(REAL)实数有正负数,书写时一定要有小数点。例如:-1.0,+2.5,-1.0E+38位(BIT)数据类型有2种取值:‘0’和‘1’。例如:这两种数据类型的信号可作如下声明:SIGNALx:BIT;--将x声明为位(BIT)数据类型的信号SIGNALy:BIT_VECTOR(3DOWNTO0);--将y声明为位矢量SIGNALz:BIT_VECTOR(0TO3);--将z声明为位矢量(BIT_VECTOR)数据类型的信号,位宽4位,最右边的一位是最高位(MSB)位(BIT)数据类型和位矢量(BIT_VECTOR)数据类型的信号的赋值:x=‘1’;--位(BIT)数据类型的值应放在单引号之中y=“1000”;--位矢量(BIT_VECTOR)数据类型的值应放在双引号之中,这里MSB=’1’z=“1110”;--这里MSB=’0’y=X“8”;--采用十六进制y=O“10”;--采用八进制位串是被双引号引起来的扩展的数字序列,格式:基数说明符“数字字符串”。基数符有“B”、“O”、“X”,他们的含义如下。B:二进制基数符号,表示二进制位0或1,在字符串中每一个位表示一个BIT。O:八进制基数符号,在字符串中每一个数代表一个八进制数,即代表一个3位(BIT)的二进制数。X:十六进制基数符号,代表一个十六进制数,即代表一个4位二进制数。例如:B“0001_1011”,O“207”,X“A0F”位串:VHDL语言中用于表示位矢量STD_LOGIC和STD_LOGIC_VECTORIEEE库的STD_LOGIC_1164包集预定义了STD_LOGIC和STD_ULOGIC数据类型。STD_ULOGIC数据类型比STD_LOGIC数据类型多一个表示初始不定值‘U’使用这类数据信号,必须包含下面两条声明语句:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;有符号数(SIGNED)和无符号数(UNSIGNED)数据类型IEEE库的STD_LOGIC_ARITH包集作了预定义这两种数据类型的声明和赋值举例如下:SIGNALx:SIGNED(3DOWNTO0);--声明信号x为有符号数SIGNALx:UNSIGNED(3DOWNTO0);--声明信号y为无符号数x=“0101”;y=“0101”;x=“1101”;y=“1101”;和STD_LOGIC和STD_ULOGIC数据类型相似都支持算术运算,不支持逻辑运算,这点又与整数相同有符号类型数据代表有符号数值,即可以是正数,0,负数;最左边的位为符号位。二进制补码是常用的计数方法,方便进行加减运算。无符号类型数据代表无符号数值,最左边的位为最高位。如:Unsigned(“0110”)代表:Unsigned(“1010”)代表:如:signed(“0110”)代表+6;signed(“1010”)代表-6610无符号(Unsigned)和有符号(Signed)类型定义位置:有符号(Signed)和无符号(Unsigned)逻辑信号定义在库IEEE的程序包STD_LOGIC_ARITH中。常用的预定义的程序包STD_LOGIC_1164程序包STD_LOGIC_ARITH程序包STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包std_logic_1164.all;定义标准逻辑类型数据std_logic_signed.all;有符号的算术运算std_logic_unsigned.all;无符号的算术运算std_logic_arith.all;定义了有符号与无符号类型,及基于这些类型上的算术运算数据类型转换不同类型的数据不能直接进行运算,当不同类型的数据需要进行运算时,它们需要进行数据类型的转换操作。有两种常用的方法可以实现数据类型的转换:一种方法是写一段专门用于数据类型转换的VHDL代码;另一种方法是调用预定义的数据类型转换函数。·STD_LOGIC_1164包集合函数函数TO_STDLOGICVECTOR(A)由BIT_VECTOR转换为STD_LOGIC_VECTOR函数TO_BITVECTOR(A)由STD_LOGIC_VECTOR转换为BIT_VECTOR函数TO_STDLOGIC(A)由BIT转换为STD_LOGIC函数TO_BIT(A)由STD_LOGIC转换为BIT.STD_LOGIC_ARITH包集合函数函数:CONV_INTEGER(A)由UNSINGED,SINGED转换为INTEGER函数:CONV_STD_LOGIC_VECTOR(A,位长)由INTEGER,UNSINGED,SINGED转换为STD_LOGIC_VECTOR包集合·STD_LOGIC_UNSINGED包集合函数:CONV_INTEGER(A)由STD_LOGIC_VECTOR转换为INTEGERVHDL的运算符在VHDL语言中的6类运算符,赋值运算符、逻辑运算、算术运算、关系运算、移位运算和并置运算。需要指出的是操作符操作的对象是操作数,且操作数的类型应该和操作符所要求的类型相一致。另外,运算操作符是有优先级的,例如,逻辑运算符not,在所有操作符中优先级最高。赋值运算符赋值运算符包括以下3种:=——用于对信号赋值。:=——用于对变量和常量赋值,也可以对信号、变量和常量赋初值。=——向矢量数据中的位进行赋值。例如:SIGNALx:STD_LOGIC_VECTOR(3DOWNTO0):=”1000”;VARIABLEy:STD_LOGIC_VECTOR(3DOWNTO0):=”1000”;接着向它们进行赋值:x=“0001”;--向信号赋值“0001”x=(0=‘1’,OTHER=‘0’);--向信号赋值“0001”y:=“0001”--向变量赋值“0001”y:=(0=‘1’,OTHER=‘0’);--向变量赋值“0001”逻辑运算符在VHDL语言中,共有6种逻辑运算符,他们分别是:NOT取反;AND与;OR或;NAND与非;NOR或非;XOR异或。XNOR同或这6种逻辑运算符可以对“STD_LOGIC”和“BIT”等逻辑型数据、“STD_LOGIC_VECTOR”逻辑型数组及布尔数据进行逻辑运算。必须注意,运算符的左边和右边,以及代入的信号的数据类型必须是相同的。算术运算符VHDL语言中有5类算术运算符,他们分别是:·求和操作符:+(加)、-(减)·求积操作符:*(乘)、/(除)、MOD(求模)、REM(取余)·符号操作符:+(正)、-(负)·混合操作符:**(指数)、ABS(取绝对值)关系运算符VHDL语言中有6种关系运算符,他们分别是:=等于;/=不等于;小于;=小于等于;大于;=大于等于;SLL(逻辑左移)SRL(逻辑右移)SLA(算术左移)SRA(算术右移)ROL(逻辑循环左移)ROR(逻辑循环右移)移位运算符y=xSLL2;--逻辑左移2位,执行后y=“00100”y=xSRL2;--逻辑右移2位,执行后y=“00010”y=xSLA2;--算术左移2位,执行后y=“00111”--移空的位用首位来填补y=xSRA2;--算术右移2位,执行后y=“00010”y=xROL2;--循环逻辑左移2位,执行后y=“00101”y=xROR-2;--循环逻辑右移2位,但是由于右操作数前有负号,实际执行循环逻辑左移2位,执行后y=“00101”X=01001并置运算符&和(,,,)第一种并置运算符的具体使用如下:x=“1111”;y=“0000”;z=x&y;--执行后,z=“11110000”第二种并置运算符的具体使用如下:z=(‘1’,’0’,’1’,’0’,’1’,’1’);--执行后,z=“101011”VHDL操作符的优先顺序运算符优先级NOT,ABS,**最高优先级*,/,MOD,REM+(正号),-(负号)+,-,&SLL,SLA,SRL,SRA,ROL,ROR=,/=,,,=,=AND,OR,NAND,NOR,XOR,XNOR最低优先级并行语句(6种)并行信号赋值语句进程语句(Process)块语句(Block)并行过程调用语句元件例化语句(Component)生成语句并行信号赋值语句简单信号赋值语句选择信号赋值语句条件信号赋值语句简单信号赋值语句格式:赋值目标=表达式;例如:and1=(NOTx3)AND(NOTx2);and2=(NOTx3)AND(NOTx1);and3=(NOTx3)AND(NOTx0);y_eg=and1ANDand2ANDand3;选择信号赋值语句:格式:WITH选择表达式SELECT赋值目标=表达式W
本文标题:VHDL对象_数据类型和运算符
链接地址:https://www.777doc.com/doc-4923609 .html