您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 第3节VHDL的数据及文字规则
第3节VHDL的数据及文字规则4.3.1、文字规则4.3.2、VHDL数据对象(DATAOBJECTS)4.3.3、VHDL数据类型(DATATYPES)4.3.4、VHDL中数据类型的转换4.3.1文字规则1.整数5,110,13_254_297(=13254297)2.实数1.0,3.78,34.97E-1(=3.497),18_670_21.453_9(=1867021.4539)3.以数制为基础的文字10#170#,16#FE#4.字符串型文字“ERROR”,‘B’,‘*’,B“1_1010”--二进制数数组,位矢数组长度是5O“17”--八进制数数组,位矢数组长度是6X“AD0”--十六进制数数组,位矢数组长度是12一、数字型文字二、标识符**有效字符A-Z,0-9,_必须以英文字母开始必须单一_,其前后必须为字母或数字标识符字母不分大小写如:_DecoderF2fft,sig_#n,data__bus,returnFFT,sig_n,state0,return1VHDL'93版支持扩展标识符常数、变量、信号、端口、子程序或参数的名字书写要遵守如下规则:三、下标名**下标名的语句格式如下:标识符(表达式)如:Signala,b:bit_vector(0to3);Signalm:integerrange0to3;Signalx,y:bit用来指示数组型变量或信号的某一元素或某一段元素多个下标的组合标识符(表达式方向表达式)方向-----To由低到高DOWNTO由高到低如:signala,z:bit_vector(0to7);--8位位矢量z(0to3)=a(4t07);z(4to7)=a(0to3);SwapaA,0fehA,0efh四、段名4.3.2VHDL数据对象(DATAOBJECTS)共有四类基本数据对象:常量、变量、信号和文件一、常量1.常量是一个恒定不变的值,如果作了数据类型和赋值定义,在程序中就不能再改变。2.常量说明的一般格式如下:3.CONSTANT常量名:数据类型:=表达式;4.常量的使用规则如下:5.常量必须在程序包、实体、结构体、块、进程和子程序等设计单元中对有关项目进行指定例如:CONSTANTVcc:REAL:=5.0;--定义某一个恒定电源CONSTANTdely:TIME:=25ns;--定义某个模块延迟时间2、变量的使用规则如下:(1)变量赋值和初始化赋值都用“:=”表示。(2)变量赋的初值不是预设的,某一时刻只能有一个值。(3)变量不能用于在进程间传递数据。(4)变量不能用于硬件连线和存储元件。(5)仿真时,变量用于建模;综合时,变量充当数据的暂存。例如:VARIABLEa:INTEGER;--定义a为整数型变量VARIABLEb:BIT_VECTOR(0TO5);--定义b为数组型变量二、变量(Variable)1、变量是局部量,在进程和函数结构中作局部的数据存储。变量的赋值立即发生,不存在任何延时。三、信号(Signal)描述硬件系统的基本数据对象,连线。2、语法:SIGNAL信号名:数据类型;3、赋值语法:目标信号名=表达式;如:signala:std_logic_vector(15downto0);a=X”FBFC”;1、信号是描述硬件系统的基本数据对象,是实体间动态数据交换的手段。4、信号和变量之间的区别**①信号的代入过程与代入语句分开处理,执行代入语句不会使信号立即代入;而变量的赋值语句一旦执行,其值立即被赋予变量。②在进程中,信号可以列入敏感表,而变量不能列入敏感表。③仿真过程中,变量使用很少的存储器;而为了调度安排和处理信号属性,信号需要存储更多的信息。④信号可能需要使用WAIT语句来为执行相同迭代做信号赋值的同步处理;而变量不存在这个问题⑤赋值语句不同,信号“=”,变量“:=”在进程中允许同一信号有多个赋值源,其结果只有最后的赋值语句被启动,并进行赋值操作。[例]...SIGNALa,b,c,x,y:INTEGER;...PROCESS(a,b,c)BEGINx=a*b;y=c-x;x=b;ENDPROCESS;A,B,C被列入敏感表不发生赋值x被赋值b。四、文件IEEESTD1076-1987中定义了TEXTIO程序包,它定义了几种文件I/O传输的方式。例如:(1)procedureReadline(F:inText;L:outLine);--读入测试矢量文件的一行(2)procedureWriteline(F:outText;L:inLine);--向测试文件中写一行测试矢量这些文件I/O传输方式实际上是对一些过程的定义,调用这些过程就能完成数据的传递。文件是传输大量数据的对象,可以包含一些专门数据类型的数值。在系统仿真测试时,为方便控制及观察,测试的输入激励数据和仿真结果的输出都要用文件来进行4.3.3VHDL数据类型(DATATYPES)四种基本数据类型:(1)标量类型(ScalarType)(2)复合类型(ComplexType)(3)存取类型(AccessType)(4)文件类型(FileType)重点介绍:•VHDL的预定义数据类型•IEEE标准数据类型•用户自定义数据类型方式概述标量(ScalarType)实数类型、整数类型、枚举类型、时间类型。复合类型(CompositeType)存取类型(accessType)文件类型(FilesType)这四大类型都有预定义,这些数据类型都已在VHDL的标准程序包STANDARD和STD_LOGIC.1164及其它的标准程序包中作了定义,在设计中可以随时调用。一、VHDL的预定义数据类型BOOLEAN真、伪;位(BIT)1,0;位矢量(BIT_VECTOR)字符(CHARACTER)整数(INTEGER)自然数(NATURAL)实数(REAL)字符串(STING)预定义数据类型是VHDL语言中最常用、最基本的数据类型。在使用中它自动包含进VHDL的源文件,不必通过USE语句显示调用。一、VHDL的预定义数据类型时间类型(TIME)错误等级(SEVERITYLEVEL)综合器不支持的类型(物理类型、浮点类型、存取类型、文件类型)等二、IEEE标准数据类型1、IEEE预定义标准逻辑位与矢量(STD_LOGIC_1164):(1)标准逻辑位类型(STD_LOGIC)在程序中使用此数据类型前,需加入语句:LIBRARYIEEE;USEIEEE.STD_LOIGC_1164.ALL;二、IEEE标准数据类型数据类型STD_LOGIC共定义了九种值,具体如下:‘U’--未初始化‘X‘--强未知'0‘--强0'1‘--强1'Z‘--高阻态'W‘--弱未知'L‘--弱0'H‘--弱1'-'--忽略二、IEEE标准数据类型(2)标准逻辑矢量类型(STD_LOGIC_VECTOR):是定义在STD_LOGIC_1164程序包中的标准一维数组,数组中的每一个元素的数据类型都是上述定义的标准逻辑位STD_LOGIC。TYPESTD_LOGIC_VECTORISARRAY(NaturalRange)OFSTD_LOGIC在使用中必须严格考虑位矢的宽度。同位宽和数据类型的矢量间才能进行赋值。描述总线信号,使用STD_LOGIC_VECTOR是最方便的,但需注意总线中的每一根信号线都必须定义为相同的数据类型STD_LOGIC。二、IEEE标准数据类型2、其它预定义标准数据类型:Synopsys公司在IEEE库中加入的程序包STD_LOGIC_ARITH中定义了三种数据类型:有符号型、无符号型和小整型(SMALL_INT)。使用之前,必须加入LIBRARYIEEE;USEIEEE.STD_LOIGC_ARITH.ALL;二、IEEE标准数据类型(1)、有符号数据类型(SIGNEDTYPE)在程序包STD_LOGIC_ARITH中定义如下:typesignedisarray(naturalrange)ofstd_logic;有符号数据类型表示一个有符号的数值,综合器将其解释为补码,数的最高位是符号位。例如SIGNED'(0100)--代表+4SIGNED'(1100)--代表-4--代表?二、IEEE标准数据类型(2)无符号数据类型(UNSIGNEDTYPE)在程序包STD_LOGIC_ARITH中定义如下:typeunsignedisarray(naturalrange)ofstd_logic;无符号数据类型表示一个无符号数,但不能定义负数在综合器中,这个数值被解释为一个二进制数,最左位是二进制数的最高位如果要定义一个变量或信号的数据类型为UNSIGNED,则其位矢长度越长代表的数值就越大。看一个例子:二、IEEE标准数据类型[例]……VARIABLEa:UNSIGNED(0TO8);SIGNALb:UNSIGNED(4TO0);变量a有9位数值,最高位是a(0),而非a(8);信号b有5位数值,最高位是b(4)。最高位是?三、用户自定义数据类型方式1.自定义数据类型方式(1)TYPE语句用法TYPE数据类型名IS数据类型定义OF基本数据类型;或TYPE数据类型名IS数据类型定义;例如:TYPEbyteISARRAY(0TO7)OFSTD_LOGIC;TYPEcolourIS(Red,Green,Yellow,Blou,Violet);2.用户自定义数据类型(1)枚举类型(EnumerationType)(2)整数类型和实数类型(IntegerandRealTypes)(3)数组类型(ArrayType)(4)记录类型(RecordType)三、用户自定义数据类型方式(1)枚举类型(EnumerationType)枚举数据类型是一种特殊的数据类型,即把类型中的各个元素都列举出来。这种数据类型非常直观方便,提高了程序的可读性。其书写格式为:TYPE数据类型名IS(元素...);例如:TYPEPCstateIS(idle,busy,write,read,backoff);SIGNALa,b:PCstate;TYPElogicIS('1','Z','U','0');SIGNALs:logic;(2)整数类型和实数类型(IntegerandRealTypes)实际应用中,VHDL仿真器通常将整数或实数类型作为有符号数处理,VHDL综合器对整数或实数的编码方法是:对用户已定义的数据类型和子类型中的正数,编码为二进制原码;对用户已定义的数据类型和子类型中的负数,编码为二进制补码编码的位数只取决于用户定义的数值的最大值。在综合中,以浮点数表示的实数先转换成相应大小的整数。因此在使用整数时,VHDL综合器要求使用数值限定关键词RANGE,对整数的使用范围作明确的限制。例如:TYPEnumlISrangeoto100;--7位二进制原码TYPEnum2ISRANGE-100TO100;--8位二进制补码(3)数组类型(ArrayType)数组类型属复合类型,是把一组具有相同数据类型的元素集合在一起作为单一对象。它的元素可以是任何一种数据类型,数组可以是一维或多维。虽然VHDL仿真器支持多维数组,但综合器只支持一维数组。VHDL允许定义限定性和非限定性两种不同类型的数组,它们的区别是:限定性数组下标的取值范围在数组定义时就确定了,而非限定性数组下标的取值范围需在后面确定。限定性数组定义格式为:TYPE数组名ISARRAY(数组范围)OF数据类型;非限制性数组的定义格式为:TYPE数组名ISARRAY(数组下标名RANGE)OF数据类型;例如:TYPExISARRAY(2DOWNTO0)ofSTD_LOGIC;TYPEyIS(1ow,high);TYPEdatabusISARRAY(0To7,y)ofBIT;--几个元素?TYPEaISArray(NaturalRange
本文标题:第3节VHDL的数据及文字规则
链接地址:https://www.777doc.com/doc-4895074 .html