《VHDL词法基础》PPT课件.ppt

上传人:牧羊曲112 文档编号:5577299 上传时间:2023-07-30 格式:PPT 页数:45 大小:373.50KB
返回 下载 相关 举报
《VHDL词法基础》PPT课件.ppt_第1页
第1页 / 共45页
《VHDL词法基础》PPT课件.ppt_第2页
第2页 / 共45页
《VHDL词法基础》PPT课件.ppt_第3页
第3页 / 共45页
《VHDL词法基础》PPT课件.ppt_第4页
第4页 / 共45页
《VHDL词法基础》PPT课件.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《《VHDL词法基础》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《VHDL词法基础》PPT课件.ppt(45页珍藏版)》请在三一办公上搜索。

1、第2章 VHDL词法基础,2.1 标识符2.2 对象2.3 数据类型2.4 类型转换2.5 词法单元2.6 运算操作符,2.1 标识符,标识符用来定义常数、变量、信号、端口、子程序或参数的名字。VHDL有87版和93版之分。87版的标识符规则经扩展后,形成了93版的标识符规则。87版为短标识符,扩展部分称为扩展标识符。93版含短标识符和扩展标识符两部分。,由英文字母、数字、下划线构成。必须是英文字母开头,结尾不能是下划线,也不能出现连续下划线。EDA工具综合、仿真时,短标识符不区分大小写。VHDL的保留字、属性不能用作标识符。如ENTITY,ARCHITECTURE,END,BUS,USE,W

2、HEN,WAIT,IS,一、短标识符规则,扩标用反斜杠界定。如:multi_screens。允许包含图形符号、空格符。如:mode A,$100等。反斜杠之间的字符可用保留字。如:buffer,entity等。扩标的界定符两个斜杠之间可以用数字打头。如:100$,2chip,4screens等。扩标中允许多个下划线相连。如:Four_screens,TWO_Computer_sharptor等。扩标区分大小写。如:EDA 与eda不同。扩标与短标不同。如:COMPUTER 与Computer不同。,二、扩展标识符规则,三、下标名及下标段名下标名用于指示数组型变量或信号的某一元素。下标段名用于指

3、示数组型变量或信号的某一段元素,其语句格式:,注:TO下标由低到高;DOWNTO下标由高到低。,数组类型信号名或变量名(表达式1 TO/DOWNTO 表达式2);,数据对象(Data Objects)接受不同数据类型的赋值。四种对象:常量(CONSTANT)、变量(VARIABLE)、信号(SIGNAL)、文件(FILES)。其中文件类型是VHDL93标准中新通过的。,2.2 对象,一、常量(CONSTANT),常量定义形式:CONSTANT 常量名:数据类型:=表达式;,例:CONSTANT FBUSBIT_VECTOR:=“010110”;CONSTANT VCCREAL:=5.0;CON

4、STANT DELYTIME:=25 ns;,常量设置使得设计实体中的常数易阅读和修改。如将位矢的宽度定义为一个常量,只要修改这个常量就能改变宽度,从而改变硬件结构。常量是一个恒定不变的值,一旦作了数据类型的赋值定义后,在程序中不能再改变,有全局意义。常量与表达式类型必须一致,只能是标量类型或复合类型。常量的可视性(其使用范围取决于定义的位置):定义在程序包中的常量,具有最大全局化特征,可以用在调用此程序包的所有设计实体中;定义在设计实体中的常量,其有效范围为这个实体定义的所有的结构体;定义在设计实体的某一结构体中的常量,则只能用于此结构体;定义在结构体的某一单元的常量,如一个进程中,则这个常

5、量只能用在这一进程中。,常量使用要点,变量是一个局部量,只能在进程和子程序中使用,不能将信息带出对它作出定义的当前设计单元。变量赋值立即发生,无延时行为。VHDL不支持变量附加延时语句。变量常用在实现某种算法的赋值语句中。变量的初值不是必需的,综合器将略去所有初值。变量数值的改变是通过变量赋值来实现的,其赋值语句的语法格式:目标变量名:=表达式;,二、变量(VARIABLE),变量定义格式:VARIABLE 变量名:数据类型 约束条件:=表达式;,例:VARIABLE A:INTEGER;-定义A为整数型变量VARIABLE B,C:INTEGER:=2;-定义B和C为整型变量,初始值为2VA

6、RIABLE count:integer range 0 TO 255:=10;,变量使用要点,例:SIGNAL S1:STD_LOGIG:=0;-定义了一个标准位的单值信号S1,初始值为低电平SIGNAL S2,S3:BIT;-定义了两个为BIT的信号S2和S3SIGNAL S4:STD_LOGIC_VECTOR(15 DOWNTO 0);-定义了一个标准位矢的位矢量信号,共16个信号元素,三、信号(SIGNAL),信号定义格式:SIGNAL 信号名:数据类型 约束条件:=表达式;,信号不但可以容纳当前值,也可以保持历史值。这一属性与触发器的记忆功能有很好的对应关系。信号的初值不是必需的,而

7、且仅在仿真中有效。与变量相比,信号的硬件特征更为明显,它具有全局性特性。“:”表示对信号直接赋值,不产生延时。“”表示代入赋值,是变量之间信号的传递,代入赋值法允许产生延时。例如:T1 T2 AFTER 20ns;在EDA工具综合时,信号应在结构体中描述清楚。,信号类似于连接线。信号可以作为设计实体中并行语句模块间的信息交流通道。,信号使用要点,四、文件(files),文件(files)是传输大量数据的客体,包含一些专门数据类型的数值。在仿真测试时,测试的输入激励数据和仿真结果的输出都要用文件来进行。在IEEE1076标准中,TEXTIO程序包中定义了文件I/O传输的方法。它们是对过程的定义,

8、调用这些过程就能完成数据的传递。,从硬件电路系统来看,常量相当于电路中的恒定电平,如GND或VCC接口,而变量和信号则相当于组合电路系统中门与门间的连接及其连线上的信号值。从行为仿真和VHDL语句功能上看,信号和变量的区别主要表现在接受和保持信息的方式与传递的区域大小上。从综合后所对应的硬件电路结构来看,信号一般将对应更多的硬件结构,但在许多情况下,信号和变量并没有什么区别。虽然EDA仿真器允许变量和信号设置初始值,但在实际应用中,EDA综合器并不会把这些信息综合进去。,五、常量、变量和信号三者的使用比较,VHDL是一种强类型语言,要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量

9、都必须具有确定的数据类型,并且只有数据类型相同的量才能互相传递和作用。数据类型按使用目的分:,2.3 数据类型,用于EDA综合的数据类型,如标量型(SCALAR TYPE)和复合类型(COMPOSITE TYPE)。用于EDA仿真的数据类型,如存取类型(ACCESS TYPE)。,数据类型按其产生的来源分:标准数据类型自行定义数据类型:,数据类型按其性质分:标准类型:如枚举类型、整数类型、物理类型等复合类型:数组类型、记录类型,此数据类型都是在VHDL标准程序包STANDARD中定义的,在实际使用中,已自动包含进VHDL的源文件中,因而不必通过USE语句以显式调用。,一、标准数据类型,VHDL

10、预定义的标准数据类型(10种),布尔(BOOLEAN)数据类型是二值枚举型数据类型,取值有FALSE和TRUE两种。布尔量没有数量多少的概念,不能进行算术运算,只能进行逻辑运算。布尔量常用来表达信号的状态,或者总线上的控制权,仲裁情况,忙、闲状态等。若某个客体被定义为布尔量,则EDA工具对设计进行仿真时,自动地对其赋值情况进行核查。,位矢量(BIT_VECTOR)数据类型由多个BIT组成的数组,BIT是其元素;使用时必须指出其 元素个数和排列。,位(BIT)数据类型位用来表示一个信号的值。位通常用单引号括起来。如 TYPE BIT IS(0,1);位的值0,1表示信号的状态;布尔量的值0,1表

11、示假,真。两者的意义不一样。,例:SIGNAL A:BIT_VECTOR(7 DOWNTO 0);SIGNAL B:BIT_VECTOR(3 DOWNTO 0);SIGNAL C:BIT;B=A(7 DOWNTO 4);A(7 DOWNTO 4)=A(3 DOWNTO 0);A(3 DOWNTO 0)=B;A(7)=C;,字符(CHARACTER)数据类型用单引号引起来,如A。有大小写区分,如B不同于b。,整数(INTEGER)数据类型其数代表正整数、负整数和零。对象的数据类型定义为整数时,范围应有约束。例:VARIABLE A:INTEGER RANGE-128 TO 128;整数常量的书写

12、方式示例如下:2-十进制整数10E4-十进制整数16#D2#-十六进制整数 2#11011010#-二进制整数,自然数(NATURAL)和正整数(POSITIVE)数据类型自然数是整数的一个子类型,是非负的整数,即零和正整数;正整数也是整数的一个子类型,它包括整数中非零和非负的数值。,实数(REAL)数据类型VHDL的实数类型类似于数学上的实数,或称浮点数。实数类型仅能在EDA仿真器中使用,EDA综合器不支持,因为其实现相当复杂,目前在电路规模上难以承受。实数常量的书写方式举例如下:65971.333333-十进制浮点数 8#43.6#E+4-八进制浮点数 43.6E-4-十进制浮点数,字符串

13、(STRING)数据类型字符串数据类型是字符数据类型的一个非约束型数组,或称为字符串数组。字符串必须用双引号标明。如:VARIABLE STRING_VARSTRING(1 TO 7);STRING_VAR:=“A B C D”;,时间(TIME)数据类型VHDL中惟一的预定义物理类型是时间。完整的时间类型包括整数和物理量单位两部分,整数和单位之间至少留一个空格,如55 ms,20 ns。STANDARD 程序包中也定义了时间。定义如下:TYPE TIME IS RANGE-2147483647 TO 2147483647units fs;-飞秒,VHDL中的最小时间单位 ps=1000 fs

14、;-皮秒 ns=1000 ps;-纳秒 us=1000 ns;-微秒 ms=1000 us;-毫秒 sec=1000 ms;-秒 min=60 sec;-分 hr=60 min;-时 end untis;,错误等级(SEVERITY_LEVEL)错误等级用来指示设计系统的工作状态,共有四种可能的状态值:NOTE(注意)、WARNING(警告)、ERROR(出错)、FAILURE(失败)。在仿真过程中,可输出这四种值来提示被仿真系统当前的工作情况。,IEEE预定义的标准逻辑位与矢量在IEEE库的程序包STD_LOGIC_1164中,定义了两个非常重要的数据类型,即标准逻辑位STD_LOGIC 和

15、标准逻辑矢量STD_LOGIC_VECTOR。标准逻辑位STD_LOGIC数据类型STD_LOGIC的定义如下:TYPE STD_LOGIC IS(U,X,0,1,Z,W,L,H,-);各值的含义是:U-未初始化的,X-强未知的,0-强0,1-强1,Z-高阻态,W-弱未知的,L-弱0,H-弱1,-忽略。,注意:在数字器件中能实现的值只有4种:-,0,1,Z。,标准逻辑矢量(STD_LOGIC_VECTOR)数据类型STD_LOGIC_VECTOR定义如下:TYPE STD_LOGIC_VECTOR IS ARRAY(NATURA RANGE)OF STD_LOGIC;,注意:在程序中使用上述两

16、种数据类型前,需加入下面语句:LIBRARY IEEE;,其他预定义标准数据类型如Synopsys公司在IEEE库中加入的程序包STD_LOGIC_ARITH中定义了如下的数据类型:无符号型(UNSIGNED)、有符号型(SIGNED)和小整型(SMAL_INT)。在使用之前,请注意必须加入下面语句:LIBRARY IEEE;,VHDL允许用户自行定义数据类型,它们可以有多种,如:枚举类型(ENUMERA-TION TYPE)整数类型(INTEGER TYPE)数组类型(ARRAY TYPE)记录类型(RECORD TYPE)时间类型(TIME TYPE)实数类型(REA TYPE)等。定义语

17、法类型定义:TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型;子类型定义:SUBTYPE 子类型名 IS 基本数据 RANGE 约束范围;,二、用户自定义数据类型,注意:子类型SUBTYPE只是由TYPE定义的原数据类型的一个 子集,它满足原数据类型(基本)所有约束条件。,枚举类型枚举数据类型是用文字符号来表示一组实际的二进制数的类型(若直接用数值来定义,则必须使用单引号)。,例:TYPE M_STATE IS(STATE1,STATE2,STATE3,STATE4,STATE5);SIGNA CURRENT_STATE,NEXT_STATE:M_STATE;说明:在这里,信号CU

18、RRENT_STATE和NEXT_STATE的数据类型定义为M_STATE,它们的取值范围是可枚举的,即从STATE1STATE5共五种,而这些状态代表五组惟一的二进制数值。,数组类型是将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的数据类型。数组可以是一维(每个元素只有一个下标)或多维(每个元素有多个下标)数组。EDA仿真器支持多维数组,但综合器只支持一维数组。数组的元素可以是任何一种数据类型,用以定义数组元素的下标范围子句决定了数组中元素的个数以及元素的排序方向,即下标数是由低到高,或是由高到低。,限定性数组定义语句格式如下:TYPE 数组名 IS ARRAY(数组范围)O

19、F 数据类型;说明:其中,数组名是限定性数组类型的名称,可以是任何标识符,其类型与数组元素相同;数组范围明确指出数组元素的定义数量和排序方式,以整数来表示其数组的下标;数据类型即指数组各元素的数据类型。,例1:TYPE STB IS ARRAY(7 DOWNTO 0)OF STD_LOGIC;说明:数组类型的名称是STB,它有八个元素,它的下标排序是7,6,5,4,3,2,1,0,各元素的排序是STB(7),STB(6),STB(1),STB(0)。,例2:TYPE X IS(LOW,HIGH);TYPE DATA_BUS IS ARRAY(0 TO 7,X)OF BIT;说明:首先定义X为两

20、元素的枚举类型,然后将DATA_BUS定义为一个数组类型,其中每一元素的数据类型是BIT。,非限制性数组的定义语句格式如下:TYPE 数组名 IS ARRAY(数组下标名 RANGE)OF 数据类型;说明:其中,数组名是非限制性数组类型的取名;数组下标名是以整数类型设定的一个数组下标名称;符号“”是下标范围待定符号,用到该数组类型时,再填入具体的数值范围;数据类型是数组中每一元素的数据类型。,例1:TYPE BIT_VECTOR IS ARRAY(NATURA RANE)OF BIT;VARABLE VA:BIT_VECTOR(1 TO 6);-将数组取值范围定在16例2:TYPE LOGIC

21、_VECTOR IS ARRAY(NATURA RANGE,POSITIVE RANGE)OF LOGIC;VARIABLE L16_ OBJECT:LOGIC_VECTOR(0 TO7,1 TO 2);-限定范围,记录类型由已定义的、数据类型不同的对象元素构成的数组称为记录类型。定义记录类型的语句格式如下:TYPE 记录类型名 IS RECORD 元素名:元素数据类型;元素名:元素数据类型;END RECORD 记录类型名;,例1:TYPE RECDATA IS RECORD-将RECDATA定义为三元素记录类型ELEMENT1 TIME;-将元素ELEMENT1定义为时间类型ELEMENT

22、2 TIME;-将元素ELEMENT2定义为时间类型ELEMENT3 STD_LOGIC;-将元素ELEMENT3定义为标准位类型END RECORD RECDATA;,例2:利用记录类型定义的一个微处理器命令信息表。TYPE REGNAME IS(AX,BX,CX,DX);TYPE OPERATION IS RECORD OPSTRSTRING(1 TO 10);OPCODEBIT_VECTOR(3 DOWNTO 0);OP1,OP2,RES:REGNAME;END RECORD OPERATION;VARIABLE INSTR1,INSTR2:OPERATION;INSTR1:=(ADD

23、AX,BX,0001,AX,BX,AX);INSTR2:=(ADD AX,BX,“0010,OTHERS=BX);VARIABLE INSTR3OPERATION;INSTR3.OPSTR:=MU AX,BX;INSTR3.OP1:=AX;,2.4 类型转换,不同类型的对象不能代入。对于某一数据类型的变量、信号、常量、文件赋值时,类型一定要一致,否则EDA工具进行综合、仿真等过程中不能通过。为了进行不同类型的数据变换,可以有3种方法:类型标记法、函数转换和常数转换法。,下面介绍常用的两种:类型标记法和函数转换。,类型标记就是类型的名称。类型标记法仅适用于关系密切的标量类型之间的类型转换,即整数

24、和实数的类型转换。标记法转换一般语句格式:数据类型标识符(表达式);,一、类型标记法转换,若:variable I:integer;variable R:real;则有:i:integer(r);r:real(i);,二、函数法转换VHDL语言标准中的程序包提供的变换函数来完成此工作。这些程序包有3种:STD_LOGIC_1164程序包定义的转换函数:函数 TO_STD_LOGIC_VECTOR(A)-由位矢量BIT_VECTOR转换为标准逻辑矢量STD_LOGIC_VECTOR函数 TO_BITVECTOR(A)-由标准逻辑矢量STD_LOGIC_VECTOR转换为位矢量BIT_VECTOR

25、函数 TO_STDLOGICV(A)-由BIT转换为STD_LOGIC函数 TO_BIT(A)-由标准逻辑STD_LOGIC转换BIT,例:SIGNAL b:STD_LOGIC_VECTOR(11 DOWNTO 0);b=TO_STD_LOGIC_VECTOR(H“A0F”)b=TO_STD_LOGIC_VECTOR(B“1010_0000_1111”),std_logic_arith程序包定义的转换函数函数COMV_STD_LOGIC_VECTOR(A,位长);-由integer,singed,unsigned转换成std_logic_vector函数CONVINTEGER(A);-由sig

26、ned,unsigned转换成integerstd_logic_unsigned程序包定义的转换函数函数CONVINTEGER(A);-由STD_LOGIC_VECTOR转换成integer,#成,#金,一、数字型文字数字型文字的值有多种表达方式,现列举如下:整数文字整数文字都是十进制的数,如:5,678,0,156E2(=15600),45_234_287(=45234287)实数文字实数文字也都是十进制的数,但必须带有小数点,如:188.993,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),1.335,0.0,VHDL

27、文字主要包括数值和标识符。数值型文字主要有数字型、字符串型和位串型等。,2.5 词法单元(文字规则),以数制基数表示的文字用这种方式表示的数由五个部分组成。第一部分,用十进制数标明数制进位的基数;第二部分,数制隔离符号“#”;第三部分,表达的文字;第四部分,指数隔离符号“#”;第五部分,用十进制表示的指数部分,如果是0可省去。,例:10#170#-(十进制数,等于170)2#1111_1110#-(二进制数,等于254)16#E#E1-(十六进制数,等于2#11100000#,等于224)16#F.01#E+2-(十六进制数,等于3841.00),物理量文字(VHDL综合器不接受此类文字)如:

28、60 s(60秒),100 m(100米),k(千欧姆),177 A(177安培),字符是用单引号引起来的ASCII字符,可以是数值,也可以是符号或字母,如:R,A,*,Z。字符串则是一维的字符数组,须放在双引号中。VHDL中有两种类型的字符串:文字字符串和数位字符串。,二、字符串型文字,文字字符串文字字符串是用双引号引起来的一串文字。如:“ERROR”,“BOTH S AND Q EQUA TO L”,“X”,“BB$CC”数位字符串数位字符串也称位矢量,是预定义的数据类型BIT的一维数组,它们所代表的是二进制、八进制或十六进制的数组,其位矢量的长度即为等值的二进制数的位数。,数位字符串的表

29、示首先要有计算基数,然后将该基数表示的值放在双引号中,基数符以“B”、“O”和“X”表示,并放在字符串的前面。它们的含义分别是:B:二进制基数符号,表示二进制数位0或1,在字符串中每一个位表示一个BIT。O:八进制基数符号,在字符串中的每一个数代表一个八进制数,即代表一个3位(BIT)的二进制数。X:十六进制基数符号(0F),字符串中的每一位代表一个十六进制数,即代表一个4位的二进制数。,例:B“1_1101_1110”-二进制数数组,位矢数组长度是9 X“AD0”-十六进制数数组,位矢数组长度是12,VHDL的各种表达式由操作数和操作符组成,其中,操作数是各种运算的对象,而操作符则规定运算的

30、方式。,2.6 运算操作符,一、操作符种类及对应的操作数类型在VHDL中,一般有四类操作符:逻辑操作符(Logica Operator)关系操作符(Relationa Operator)算术操作符(Arithmetic Operator)符号操作符(Sign Operator),注:与书上分类略有区别。前三类操作符是完成逻辑和算术运算的最基本的操作符。,VHDL操作符列表,VHDL操作符优先级,二、各种操作符的使用说明严格遵循在基本操作符间操作数是同数据类型的规则;严格遵循操作数的数据类型必须与操作符所要求的数据类型完全一致的规则。注意操作符之间的优先级别。当一个表达式中有两个以上的运算符时,

31、可使用括号将这些运算分组。七种逻辑操作符,对于数组型(如STD_LOGIC_VECTOR)数据对象的相互作用是按位进行的。关系操作符的作用是将相同数据类型的数据对象进行数值比较(=、/=)或关系排序判断(、=),并将结果以布尔类型(BOOLEAN)的数据表示出来,即TRUE或FALSE两种。17种算术操作符可以分为求和操作符、求积操作符、符号操作符、混合操作符、移位操作符等五类操作符。,求和操作符包括加减操作符和并置操作符。求积操作符包括*(乘)、/(除)、MOD(取模)和REM(取余)四种。符号操作符“+”和“-”的操作数只有一个,操作数的数据类型是整数。混合操作符包括*(乘方)操作符和取ABS(绝对值)操作符两种。六种移位操作符号SLL、SRL、SLA、SRA、ROL和ROR都是VHDL93标准新增的运算符,在1987标准中没有。,例:将“1101”执行各种1位移位操作,其结果如下图所示。,如:VARIABLE V1:STD_LOGIC_VECTOR(3 DOWNTO 0):=(1,1,0,1);V1 SL 1;-(1,0,1,0);,说明:操作符可以用以产生电路。就提高综合效率而言,使用常量值或简单的一位数据类型能够生成较紧凑的电路,而表达式复杂的数据类型(如数组)将相应地生成更多的电路。,注:移位操作符语句格式:标识符号 移位操作符号 移位位数;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号