您好,欢迎访问三七文档
第四章VHDL语言元素4.1VHDL语言的客体4.2VHDL语言的数据类型4.3VHDL数据类型转换4.4VHDL词法规则与标识符4.1VHDL语言的客体VHDL语言中,可以赋予一个质的对象就称为客体。客体主要包括以下三种:变量(VARIABLE)、常量(CONSTANT)、信号(SIGNAL)。4.1.1常量(CONSTANT)(常数)定义一个常数主要是为了使设计实体中的某些量易于阅读和修改。常数说明就是对某一常数名赋予一个固定的值。通常在程序开始前进行赋值,该值的数据类型在说明语句中说明。常数说明语句格式为:CONSTANT常数名:数据类型:=表达式;例如:CONSTANTVcc:REAL:=5.0;CONSTANTFbus:BIT_VECTOR:=“1011”;CONSTANTDelay:TIME:=10ns;注:常量是一个恒定不变的值,一旦做了数据类型和赋值定义,它在程序中就不能再改变。4.1.2变量(VARIABLE)变量只能在进程和子程序中用,是一个局部量,不能将信息带出对它做出定义的当前设计单元。与信号不同,变量的赋值是理想化数据传输,其赋值是立即生效的,不存在任何的延时行为。变量定义语句的格式为:VARIABLE变量名:数据类型:约束条件:=初始值;例如:VARIABLEn:INTEGERRANGE0TO15:=2;VARIABLEa:INTEGER;变量赋值语句的格式为:目标变量名:=表达式;赋值语句“:=”右边的表达式必须与目标变量具有相同的数据类型,这个表达式可以是一个运算表达式也可以是一个数值。变量赋值语句左边的目标变量可以是单值变量,也可以是变量的集合。例如定义变量:VARIABLEx,y:REAL;VARIABLEa,b:BIT_VECTOR(0TO7);x:=100.0y:=1.5+xa:=b;a:=“1010101”;a(3to6):=(‘1’,’1’,’0’,’1’);a(0to5):=b(2to7);a(7):=‘0’;4.1.3信号(SIGNAL)信号是电子电路内部硬件连接的抽象。它可以作为设计实体中的并行语句模块间交流信息的通道。信号及其相关的延时语句明显地体现了硬件系统的特征。信号定义语句的格式为:SIGNAL信号名:数据类型:约束条件:=初始值;例如:SIGNALgnd:BIT:=‘0’;SIGNALdata:STD_LOGIC_VECTOR(7DOWNTO0);信号赋值语句表达式为:目标信号名=表达式;符号“=”表示赋值操作,即将数据信息传入。数据信息传入时可以设置延时过程,这与器件的实际传播延时十分接近。因此信号值的代入采用“=”代入符,而不是像变量赋值时那样用“:=”。但信号定义时初始赋值符号“:=”,即仿真的时间坐标是从赋初始值开始的。信号赋值语句举例:x=y;a=‘1’;s1=s2AFTER10ns;注意:变量和信号都必须先定义,后赋值。注意赋值符“=”和“:=”的差别。信号与变量的区别:信号和变量是VHDL中重要的客体,他们之间的主要区别有:·信号赋值至少要有δ延时;而变量赋值没有。·信号除当前值外有许多相关的信息,如历史信息和投影波形;而变量只有当前值。·进程对信号敏感而不对变量敏感。·信号可以是多个进程的全局信号;而变量只在定义他们的顺序域可见(共享变量除外)。·信号是硬件中连线的抽象描述,他们的功能是保存变化的数据值和连接子元件,信号在元件的端口连接元件。变量在硬件中没有类似的对应关系,他们用于硬件特性的高层次建模所需要的计算中。4.2VHDL语言的数据类型在对VHDL的客体进行定义时,都要指定其数据类型。VHDL有多种标准的数据类型,并且允许用户自定义数据类型。在VHDL语言语义约束中,对类型的要求反映在赋值语句的目标与源的一致,表达式中操作的一致,子类型中约束与类型的一致等许多方面。4.2.1VHDL中预定义的数据类型(编程者可直接使用)预定义类型在VHDL标准程序包STANDARD中定义,在应用中自动包含进VHDL的源文件,不需要USE语句显示调用。数据类型说明如下。1.整数(INTEGER)整数与数学中整数的定义相似,可以使用预定义运算操作符,如加“+”、减“-”、乘“×”、除“÷”进行算术运算。在VHDL语言中,整数的表示范围为-2147483647~2147483647,即从-(231-1)到(231-1)。2.实数(REAL)在进行算法研究或实验时,作为对硬件方案的抽象手段,常常采用实数四则运算。实数的定义值范围为-1.0E+38~+1.0E+38。实数有正负数,书写时一定要有小数点。例如:-1.0,+2.5,-1.0E+383.位(BIT)用来表示数字系统中的信号值。位值用字符‘0’或者‘1’(将值放在引号中)表示。与整数中的1和0不同,‘1’和‘0’仅仅表示一个位的两种取值。位数据可以用来描述数字系统中总线的值。位数据不同于布尔数据,可以用转换函数进行转换。4.位矢量(BIT_VECTOR)位矢量是用双引号括起来的一组数据。例如:“001100”,X“00bb”。在这里位矢量前面的X表示是十六进制。用位矢量数据表示总线状态最形象也最方便,在VHDL程序中将会经常遇到。使用位矢量时必须注明位宽,即数组中元素个数和排列,例如:SIGNALs1:BIT_VECTOR(15DOWNTO0);5.布尔量(BOOLEAN)一个布尔量具有两种状态,“真”或者“假”。虽然布尔量也是二值枚举量,但它和位不同没有数值的含义,也不能进行算术运算。它能进行关系运算。例如,它可以在if语句中被测试,测试结果产生一个布尔量TRUE或者FALSE。6.字符(CHARACTER)字符也是一种数据类型,所定义的字符量通常用单引号括起来,如‘a’。一般情况下VHDL对大小写不敏感,但对字符量中的大小写则认为是不一样的。例如,‘B’不同于‘b’。字符量中的字符可以是从a到z中的任一个字母,从0到9中的任一个数以及空格或者特殊字符,如$,@,%等等。包集合standard中给出了预定义的128个ASCⅡ码字符,不能打印的用标识符给出。字符‘1’与整数1和实数1.0都是不相同的,当要明确指出1的字符数据时,则可写为:CHARACTER(‘1’)。7.字符串(STRING)字符串是由双引号括起来的一个字符序列,也称字符矢量或字符串组。字符串常用于程序的提示和说明。字符串举例如下:VATIABLEstring_1:STRING(0TO3);┇string_1:=“abcd”;8.时间(TIME)时间是一个物理量数据。完整的时间量数据应包含整数和单位两部分,而且整数和单位之间至少应留一个空格的位置。例如55sec,2min等。在包集合STANDARD中给出了时间的预定义,其单位为fs,ps,ns,μs,ms,sec,min和hr。例如:20μs,100ns,3sec。在系统仿真时,时间数据特别有用,用它可以表示信号延时,从而使模型系统能更逼近实际系统的运行环境。9.错误等级(SEVERITYLEVEL)错误等级类型数据用来表征系统的状态,共有4种:note(注意),warning(警告),error(出错),failure(失败)。在系统仿真过程中可以用这4种状态来提示系统当前的工作情况,从而使设计人员随时了解当前系统工作的情况,并根据系统的不同状态采取相应的对策。10.大于等于零的整数(自然数)(NATURAL),正整数(POSITIVE)这两种数据是整数的子类,NATURAL类数据为取0和0以上的正整数;而POSITIVE则只能为正整数。上述10种数据类型是VHDL语言中标准的数据类型,在编程时可以直接引用。如果用户需使用这10种以外的数据类型,则必须进行自定义。但大多数的CAD厂商已在包集合中对标准数据类型进行了扩展。例如,数组型数据等,请同学们注意。4.2.2用户自定义的数据类型可以由用户定义的数据类型有:·枚举(ENUMERATED)类型;·整数(INTEGER)类型;·实数(REAL)、浮点数(FLOATING)类型;·数组(ARRAY)类型;·存取(ACCESS)类型;·文件(FILE)类型;·记录(RECORDE)类型;·时间(TIME)类型(物理类型)。4.2.3IEEE预定义标准1.标准逻辑位STD_LOGIC数据类型IEEE‘93增加了多值逻辑包STD_LOGIC_1164,使得“STD_LOGIC”数据具有9种不同的值。其定义如下所示:TYPESTD_LOGICIS(‘U’,--初始值‘X’,--不定‘0’,--0‘1’,--1‘Z’,--高阻‘W’,--弱信号不定‘L’,--弱信号0‘H’,--弱信号1‘—’--不可能情况);2.标准逻辑矢量STD_LOGIC_VECTOR数据类型在使用中,标准逻辑矢量数据类型的数据对象赋值时,必须考虑位矢的宽度.同位宽、同数据类型的矢量才能进行赋值。例:….TYPEt_dateISARRAY(7DOWNTO0)OFSTD_LOGIC;SIGNALdatabus,memory:t_date;VARIABLErega:t_date;…..datebus=rega;….datebus=memory;….4.2.4枚举类型枚举类型用特殊的字符来表示一组实际的二进制数.例如:TYPEm_stateIS(state1,state1,state1,state1)SIGNALpresent_state,next_state:m_state;默认state1为’00’state2为’01’;…4.2.5数组类型数组可以是一维,也可以是多维.但是VHDL只支持一维数组.数组的元素可以是任意数据类型.TYPE数组名ISARRY(数组范围)OF数据类型例1:TYPEdata_bus1IS(7DOWNTO0)OFREAL;TYPEdata_bus2IS(7DOWNTO0)OFSTD_LOGIC;TYPEdata_bus3IS(7DOWNTO0,X)OFSTD_LOGIC;TYPE数组名ISARRY(NATURALRANGE)OF数据类型;例2:TYPEdateISARRY(NATURALRANGE))OFBIT;VARIABLEva:date(1TO6);4.3VHDL数据类型转换在VHDL程序设计中不同的数据类型的对象之间不能代入和运算。实现他们之间数据类型的转换有3种方法:·类型标记法;·函数转换法;·常数转换法。4.3.1用函数进行类型转换VHDL语言中,程序包中提供了变换函数,这些程序包有3种,每个程序包中的变换函数不一样。现列表如下。·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_STD_LOGIC_VECTOR(A,位长)由UNSINGED,SINGED转换为INTEGERSTD_LOGIC_UNSINGED包集合函数:CONV_INTEGER(A)由STD_LOGIC_VECTOR转换为INTEGER·STD_LOGIC_UNSINGED包集合函数:CONV_INTEGER(A)由INTEGER,UNSINGED,SINGED转换为STD_LOGIC_VECTORLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYqijianISPORT(input:INSTD_LOGIC_VECTOR(2DOWNTO0);output:outSTD_LOGIC_VECTOR(7DOWNTO0));ENDqijian;ARCHITECTUREaOFqijianI
本文标题:数字电路基础
链接地址:https://www.777doc.com/doc-3585973 .html