chap4VHDL的数据类型和运算操作符_第1页
chap4VHDL的数据类型和运算操作符_第2页
chap4VHDL的数据类型和运算操作符_第3页
chap4VHDL的数据类型和运算操作符_第4页
chap4VHDL的数据类型和运算操作符_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章VHDL语言的数据类型及运算操作符,数字型文字整数文字:整数都是十进制的数,如:5,678,0,156E2(=15600),45_234_287(=45234287)实数文字:实数也都是十进制的数,但必须带有小数点,如:1.335,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499)以数制基数表示的文字:用这种方式表示的数由五个部分组成。SIGNALd1,d2,d3,d4,d5,:INTEGERRANGE0TO255;d1=10#170#;-(十进制表示,等于170)d2=16#FE#;-(十六进制表示,等于254)d3=2#1111_1110#;-(二进制表示,等于254)d4=8#376#;-(八进制表示,等于254)d5=16#E#E1;-(十六进制表示,等于2#1110000#,等于224)物理量文字(VHDL综合器不接受此类文字)。如:60s(60秒),100m(100米),k(千欧姆),177A(177安培),VHDL文字规则,字符串文字,包括字符和字符串。字符是以单引号括起来的数字、字母和符号。例如,0,A,a都是字符。字符串包括文字字符串和数值字符串。(1)文字字符串(用双引号括起来)ERROR,BothSandQequalto1,X,BB$CC“,(2)数值字符串,B:二进制基数符号,表示二进制位0或1,在字符串中的每位表示一个Bit。,O:八进制基数符号,在字符串中的每一个数代表一个八进制数,即代表一个3位(BIT)的二进制数。,X:十六进制基数符号(0F),代表一个十六进制数,即一个4位的二进制数。,data1=B1_1101_1110-二进制数数组,位矢数组长度是9data2=O15-八进制数数组,位矢数组长度是6data3=XAD0-十六进制数数组,位矢数组长度是12data4=B101_010_101_010-二进制数数组,位矢数组长度是12data5=101_010_101_010-表达错误,缺B。data6=0AD0-表达错误,缺X。,标识符,它是用户给常量、变量、信号、端口、子程序或参数定义的名字。命名规则:l有效的字符:包括26个大小写英文字母,数字包括09以及下划线“_”。l任何标识符必须以英文字母开头。l必须是单一下划线“_”,且其前后都必须有英文字母或数字即最后不能为下划线。l标识符中的英语字母不分大小写。l允许包含图形符号(如回车符、换行符等),也允许包含空格符。VHDL93标准支持扩展标识符,即以反斜杠来定界,允许以数字开头,允许使用空格及两个以上的下划线。例如,74LS193,ABOY等为合法的表示符。,下标名,格式:标识符(表达式),下例的两个下标名中一个是m,属不可计算,另一个是3,属可计算的。SIGNALa,b:BIT_VECTOR(0TO3);SIGNALm:INTEGERRANGE0TO3;SIGNALy,z:BIT;y=a(m);-不可计算型下标表示z=b(3);-可计算型下标表示,VHDL语言中凡是可以赋予一个值的对象均称为客体。VHDL语言客体包括信号(signal)变量(variable)和常量(constant)。,4.1VHDL语言的客体及其分类,在电子电路设计中,这3类客体通常都具有一定的物理含义。信号对应地代表物理设计中某一条硬件连接线;常数对应地代表数字电路中的电源和地等;变量代表暂存某些值的载体。,1常数(Constant)常数是一个固定的值。所谓常数说明,就是对某一常数名赋予一个固定的值。,CONSTANT常数名:常数类型:=表达式,例:CONSTANTdelay1:TIME:=15ns;CONSTANTVcc:REAL:=5.0;,2变量变量只能在进程语句、函数语句和过程语句结构中定义和使用,它是一个局部变量,可以多次进行赋值。,VARIABLE变量名:数据类型约束条件:=初始表达式;,例:VARIABLEx,y:integer;VARIABLEtemp:OUTSTD_LOGIC_VECTOR(7DOWNTO0);,3信号信号作为设计实体中并行语句模块间的信息交流通道;可看作硬件连线的一种抽象表示,信号通常在结构体、程序包和实体中说明。它既可以容纳当前值,也可以保持历史值。与触发器的记忆功能有良好的对应关系。信号有外部端口信号和内部信号之分。外部端口信号即为引脚,内部信号是用来描述设计单元内部的信息传输,除了没有外部端口信号的流动方向外,其他相同。实体中的端口,在其结构体中都可以看成是一个信号,不必另外定义。,SIGNAL信号名:数据类型约束条件表达式,例:SIGNALground:BIT:=0;SIGNALqout:STD_LOGIC_VECTOR(4DOWNTO0);,4信号和变量的区别,值的代入形式不同,信号值的代入符号“=”,而变量的赋值语句为“:=”。,(2)信号用于作为电路中的信号连线,变量用于作为进程中局部数据存储单元通常,变量的值可以传送给信号,但是信号的值却不能传递给变量。,(3)信号是全局量,是一个实体内部各部分之间,在整个结构体内的任何地方都能适用;而变量是局部量,只允许定义并作用于进程和子程序中。变量须首先赋值给信号,然后由信号将其值带出进程或子程序。,(4)操作过程不相同。在变量的赋值语句中,该语句一旦执行,其值立刻被赋予新值。在执行下一条语句时,该变量的值就用新赋的值参与运算。在信号赋值语句中,该语句虽然已被执行,但新的信号值并没有被立即代入,因而下一条语句执行时,仍使用原来的信号值。(5)在进程中只能将信号列入敏感表,变量不能。因为只有信号才能将进城程外的信息带入进程内部,或将进程内的信息带出进程。,x=b+c;x=b+a;y=b+c;y=b+c;,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED;ENTITYexamISPORT(clk:instd_logic;qa:OUTSTD_LOGIC_VECTOR(3DOWNTO0);qb:OUTSTD_LOGIC_VECTOR(3DOWNTO0);ENDexam;,ARCHITECTUREcomparOFexamISSIGNALb:STD_LOGIC_VECTOR(3DOWNTO0):=0000;BEGINPROCESS(clk)VARIABLEa:STD_LOGIC_VECTOR(3DOWNTO0):=0000;BEGINIFclkeventANDclk=1THENa:=a+1;a:=a+1;b=b+1;-这条语句对程序运行结果无影响,b=b+1;ENDIF;qa=a;-变量的值可以传送给信号,信号将其值带出进程或子程序qb=b;ENDPROCESS;ENDcompar;,由于变量的赋值指令执行后,其赋值行为是立刻进行的,在每次启动进程,变量a都要被连加两次1;而信号b的运行结果相当于每次进程只执行了一次加1操作,这是因为当信号的赋值语句被执行后,赋值行为并不立刻发生,而须等进程执行结束后才根据最近一次的对b赋值的语句将有关值代入b,a:=a+1;a:=a+1;b=b+1;b=b+1;ENDIF;qa=a;qb=b;,【例1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISSIGNALA,B:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLKEVENTANDCLK=1THENA=D1;B=A;Q1=B;ENDIF;ENDPROCESS;END;,【例2】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)VARIABLEA,B:STD_LOGIC;BEGINIFCLKEVENTANDCLK=1THENA:=D1;B:=A;Q1=B;ENDIF;ENDPROCESS;END;,图1例1的RTL电路图2例2的RTL电路,在VHDL语言中,每个客体都有特定的数据类型。为了能够描述各种硬件电路,创建高层次的系统和算法模型,VHDL具有很宽的数据类型。除了有很多预定义的数据类型可直接使用外,用户还可自定义数据类型,这给设计人员带来了较大的自由和方便。,4.2VHDL语言的数据类型,标量型(ScalarType),复合类型(CompositeType),存取类型(AccessType),文件类型(FilesType),1VHDL标准数据类型,(1)位(Bit)。在数字系统中,信号值通常用一个位来表示。位值的表示方法是,用字符0或1放在单引号中(0和1)表示。,(2)位矢量(Bit_Vector)。位矢量是用双引号括起来的一组位数据。例如,“001100”,H“00BE”。,(3)布尔量(Boolean)。一个布尔量有两种状态,“真”或者“假”。布尔量初值通常为FALSE。,(4)整数(Integer)。VHDL中,整数的表示范围为-21474846472147484647,即-(231-1)到(231-1)。,(5)实数(Real)。实数的定义值范围为-1.0E+48+1.0E+48。实数有正负数,书写时一定要有小数点。,(6)字符(Character)。字符也是一种数据类型,所定义的字符量通常用单引号括起来,如A。,(7)字符串(String)。字符串是由双引号括起来的一个字符序列,也称为字符矢量或字符串数组。如“VHDLProgrammer”。字符串常用于给出程序的说明。,(8)时间(Time)。时间是一个物理量数据。完整的时间数据应包含整数和单位两部分,而且整数和单位之间至少应留一个空格的位置。如10ns,55min等。,(9)错误等级(SeverityLevel)。错误等级类型数据用来表示系统的状态,共有四种等级:NOTE(注意),WARNING(警告),ERROR(出错),FAILURE(失败)。在系统仿真过程中,操作人员根据这四种状态的提示,随时了解当前系统的工作情况并采取相应的对策。,(10)大于等于0的整数(natural),正整数(positive)。,2.IEEE预定义标准逻辑位与矢量,(1).标准逻辑位STD_LOGIC数据类型STD_LOGIC定义如下:TypeSTD_LOGICis(U,X,0,1,Z,W,L,H,-);注意:数据类型为大写字母。STD_LOGIC所定义的9种数据的含义是:U表示未初始化的;X表示强未知的;0表示强逻辑0;1表示强逻辑1;Z表示高阻态;W表示弱未知的;L表示弱逻辑0;H表示弱逻辑1;-表示忽略。(2).标准逻辑矢量(STD_LOGIC_VECTOR)数据类型STD_LOGIC_VECTOR类型定义如下:TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE)OFSTD_LOGIC;,3其他预定义标准数据类型STD_LOGIC_ARITH包中,(1).无符号数据类型(UNSIGNEDTYPE),(2).有符号数据类型(SIGNEDTYPE),十进制的8可以作如下表示:UNSIGNED(1000),两则无符号数据定义的示例:VARIABLEvar:UNSIGNED(0TO10);SIGNALsig:UNSIGNED(5TO0);,例如:SIGNED(0101)代表+5,5SIGNED(1011)代表5,枚举类型(Enumerated)。这类数据应用广泛,可以用字符来代替数字,简化了逻辑电路中状态的表示,提高了程序可阅读性。,4用户定义的数据类型,TYPE数据类型名IS(元素,元素,.),TYPEweekIS(sun,mon,tue,wed,thr,fri,sat);,TYPEcon_statesIS(st0,st1,st2,st4,st4,st5);.SIGNALcurrent_stat,next_stat:con_states;.current_stat=st4;,(2)整数类型(Integer)。整数类型的表示范围是32位有符号的二进制数范围,这么大范围的数及其运算在EDA过程中用硬件实现起来将消耗极大的资源。,TYPE整数类型名IS约束范围,TYPEdigitISRANGE0TO9;,TYPEmemISARRAY(0TO5,7downto0)OFSTD_LOGIC;CONSTANTromdata:mem:=(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,1),(0,0,0,0,0,0,1,0),(0,0,0,0,0,1,0,0),(0,0,0,0,1,0,0,0),SIGNALdata_bit:STD_LOGIC;.Data_bit=romdata(3,7);.,(4)用户自定义子类型。用户对已定义的数据类型作一些范围限制,由此形成了原数据类型的子类型。,SUBTYPE子类型名IS数据类型名范围,例如,在STD_LOGIC_VECTOR基础上所形成的子类型:SUBTYPEibusISSTD_LOGIC_VECTOR(4DOWNTO0);,SIGNALs_integ:INTEGERRANGE0TO9;SUBTYPEabcISINTEGERRANGE0TO9;TYPEcdeISRANGE0TO9;VARIABLEsub_v:abc;-有两个变量分别定义为上述的VARIABLEtyp_v:cde;-类型s_integ=sub_v;-是正确的,因为sub_v是abc类型,而abc是整数类型的子类型,所以sub_v可以赋值给整数类型s_integ=typ_v;-是错误的,因为typ_v是cde类型,而cde是新的数据类型,所以虽然cde类型的范围也是09,但它不可以直接赋值给整数类型。,5.数据类型的转换,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.All;ENTITYadd5ISPORT(num:INSTD_LOGIC_VECTOR(2DOWNTO0);ENDadd5;ARCHITECTURErtlOFadd5ISSIGNALin_num:INTEGERRANGE0TO5;BEGINIn_num=CONV_INTEGER(num);.,在VHDL语言中共有4类操作符,可以分别进行逻辑运算、关系运算、算术运算和并置运算。需要提醒的是,被操作符所操作的操作数之间必须是同类型的,且操作数的类型应该和操作符所要求的类型相一致。,4.3VHDL语言的运算操作符,操作符的优先级,NOT取反;AND与;OR或;NAND与非;NOR或非;XOR异或;XNOR同或(VHLD-94新增逻辑运算符)。,1逻辑运算符,【例】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,因而不能相互作用,表达错误。,+加;-减;*乘;/除;MOD求模;REM取余;+正(一元运算);-负(一元运算);*指数;ABS取绝对值。SLL,SRL,SLA,SRA,ROL,ROR六个移位操作符,2算术运算符,在算术运算中,一元运算的操作数可以为任何数据类型。加法和减法的操作数规定均为整数类型。乘除法的操作数可以同为整数或实数。使用算术运算符,要严格遵循赋值语句两边的数据的位长一致,否则编译时将出错。,求和操作符,【例8-19】VARIABLEa,b,c,d,e,f:INTEGERRANGE0TO255;.a:=b+c;d:=ef;,移位操作符,移位操作符的语句格式是:标识符移位操作符移位位数;,例:假设A=“11010001”ASLL1;-最低位用零补充,最高位移出结果为“10100010”。ASRL1;-最高位用零补充,最低位移出结果为“01101000“。ASLA1;-最低位用零补充,最高位移出,与SLL同结果为“10100010”。ASRA1;-最高位保持不变,并将其数值移向次低位,最低位移出结果为”11101000。,求积操作符,符号操作符,求积操作符包括*(乘)、/(除)、OD(取模)和RED(取余)四种操作符。,符号操作符“+”和“”的操作数只有一个,混合操作符,【例8-22】SIGNALa,b:INTEGERRANGE8to7;SIGNALc:INTEGERRANGE0to15;SIGNALd:INTEGERRANGE0to3;a=ABS(b);c=2*d;,混合操作符包括乘方“*”操作符和取绝对值“ABS”操作符两种,=等于;/=不等于;大于;=大于等于。,3关系运算符,在关系运算符的左右两边是运算操作数,不同的关系运算符对两边的操作数的数据类型有不同的要求。其中等号和不等号适用于所有类型的数据,其他关系运算符则适用于整数和实数、位等枚举类型以及位矢量等数组类型的关系运算。,SIGNALa:STD_LOGIC_VECTOR(4DOWNTO0);SIGNALb:STD_LOGIC_VECTOR(2DOWNTO0);a=11001;b=111;IF(ab,但由于a的第三位是0,而b的第三位是1,应此从左往右比较时,判定ab,这样的结果显然是错误的。然而这种情况通常不会在实际编程时产出错误,因为多数的编译器在编译时会自动为位数少的数据增补0。,并置运算(或连接运算),用符号“USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmux4ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErtlOFmux4ISSIGNALsel:STD_LOGIC_VECTOR(1DOWNTO0);BEGINsel=a,5.重载操作符为了方便各种不同数据类型间的运算操作,V

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论