第4讲-VHDL的语法要素-EDA课件-.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第4讲-VHDL的语法要素-EDA课件-.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 语法 要素 EDA 课件
- 资源描述:
-
1、第4讲 VHDL的语法要素4.1 VHDL的的词法元素词法元素4.2 VHDL的数据对象的数据对象4.3 VHDL的数据类型的数据类型4.4 VHDL的操作符的操作符 4.1 VHDL的的词词法元素法元素词法元素指不可以拆分为其他更小元素的字符串,它是VHDL中的最小单位。VHDL设计文件可认为是由词法元素的序列和分隔符组成的。VHDL中的词法元素的类型有分界符、标识符、注释和字符文字。词法元素必须完全处于同一行中。下面分别进行介绍。4.1.1 分界符分界符相邻的词法元素通过任意数量的分界符分开,在某些情况下,当两个词法元素连写会被当作一个词法元素时,两个词法元素之间必须加分隔符。常用空格来区
2、分同一个语句中的两个词法元素,例如“ENTITY adder IS”。在一个完整的语句末尾,必须用“;”表示语句的结束。4.1.2 标识符标识符 标识符规则是VHDL中符号书写的一般规则,用以表示VHDL语句中的变量、块、进程等对象和关键词。VHDL有两个标识符标准,分别是VHDL87标准和VHDL93标准。VHDL93标准规定的标识符也称为扩展标识符,VHDL87标准规定的标识符称为短标识符。1短标识符短标识符VHDL中的短标识符是遵守以下规则的字符序列:(1)短标识符由有效字符构成。有效字符为大、小写英文字母(AZ,az)、数字(09)和下划线(_)。(2)短标识符必须以英文字母打头。(3
3、)短标识符中的下划线前后必须都有英文字母或数字。(4)短标识符不区分大、小写。规定所有关键词不能由用户声明为对象名。VHDL87标准规定的关键词如下:举例说明:如下所示是合法的标识符:COUNT cout C_OUT BB2_5CVHSIC WT FFT DecoderA_B_C xyZ h333 STORE_NEXTITEM如表4.1所示是不合法的标识符及其错误原因。表表4.1 非法的标识符及其错误原因非法的标识符及其错误原因非法标识符错 误 原 因My-name含有非法符号“-”H¥B含有非法符号“¥”LOOP为VHDL关键词_ABC第一个字符不是英文字母Decoder_下划线后没有字母或
4、数字A_C含有连续两个下划线,每个下划线前后方都不完全是字母或数字alDha 2含有非法的空格AB AC含有非法的空格2扩展标识符扩展标识符扩展标识符具有以下特性:(1)扩展标识符两端由反斜杠确定。例如,“valid”、“_ABC”等都是合法的扩展标识符。(2)扩展标识符中间允许包含图形符号和空格符。例如,“&My Name”、“$l0ms”、“*L 50ms”等都是合法的扩展标识符。(3)反斜杠之间的字符可以用保留字。例如,“1abel”、“PORT”和“enitiy”等都是合法的扩展标识符。(4)每两个反斜杠之间可以用数字打头。例如,“12mspulse”、“20_puls”和“50”都是
5、合法的扩展标识符。(5)扩展标识符允许多个下划线相连。例如,“A_B”、“my_projects”等都是合法的扩展标识符。(6)扩展标识符区分大小写。例如,“CLK”与“clk”分别表示两个不同的标识符。(7)扩展标识符与短标识符不同。例如,“CLK”与“CLK”分别表示两个不同的标识符。(8)实体名一般不使用扩展标识符。4.1.3 注释注释注释是用分界符“-”开头,必须放在一行语句末的词法元素。它可以跟在一行之中的合法词法元素之后,也可以是该行唯一的词法元素。注释的内容不影响编译器和仿真程序,其目的是为了增加程序的可读性。注释中可包括所有特殊字符。表4.2所示的是注释的一些例子。表表4.2
6、注释语句示例注释语句示例注释格式解 释-注释语句该行只有一句注释C=A;-注释语句注释词法元素在VHDL赋值语句之后 -较长的注释语句第一行 -较长的注释语句第二行 -较长的注释语句最后一行对于较长的注释,可以采用分行注释的方法,为便于阅读,每行的分界符要对齐 4.1.4 字符文字字符文字字符文字用来指定用于标量对象初始化的常量值,包括单个字符文字、字符串文字、位串文字和数字。1单个字符文字单个字符文字单个字符文字是仅包括一个字符的词法元素,其格式为在两个撇号之间插入一个字符。该字符可以是任何字符,包括空格和特殊符号。以下是单个字符文字的例子:A,B、!、1、0、字符可用来定义一个新的数据类型
7、。2字符串文字字符串文字字符串文字是在两个引号之间插入一串可显示字符而得到的词法元素。一个字符串文字的长度指的是串中字符的个数(将双引号记为一个字符)。字符串主要用来作注释或信息提示。举例说明:VHDL study 长度为10的字符串,包括一个空格 长度为0的字符串,不包括任何内容 A 长度为1的字符串,与A不同 长度为1,包括一个引号$,#,|长度为5的字符串,包含特殊字符$、#和|字符串文字词法元素必须写在一行中,长度超过一行的串在前一行的末尾必须使用连接符“&”将两行连接起来。以下是一个连接示例:“This is a long string literal that will not f
8、it on one”&line which requires using the concatenation operator.3位串文字位串文字位串文字用来表示数码矢量,它是由进制标志符和数字字符串组成的词法元素。进制标志符及其对应的数字串如表4.3所示。表4.3 位 串 文 字进制标志符表示的意义对应的数字串示 例D二进制0,1D0100101O八进制07O45X十六进制09,AFX1F 位串文字用于指定二进制寄存器的内容的初始状态。位串文字也可被直接指定为位串,而不使用任何进位标志符。位串文字中可添加下划线字符,以提高文字的可读性,下划线字符不会影响位串的值。位串文字的长度即位串中位的个
9、数,与进位标志符无关。下划线不影响位串文字的长度。然而,在未指定字符文字的进制标志符时,不允许使用下划线。4数字数字数字表示的是一个数,是标量,而位串文字所表示的是一串0、1位信号,是矢量。数字可分为实型和整型数字。实型数字含有一个小数点;整型数字不包含小数点。根据进制的不同,数字还可分为十进制数字和基数字两类。十进制数字必须以数字作为第一个字符。对于用科学计数法描述的十进制数,可以使用指数符号“E”或者“e”,只有实型十进制数才允许指数为负。基数字用于表示其他进制的数字。基数字包括一个基标志、数字位和可选的指数位,在数字位前后各有一个“#”分界符,为增加可读性,可以在数字位中增加下划线,下划
10、线不会对数值有任何影响。在基数字中不允许出现其他的非法字符。表4.7所示即为基数字的例子。表表4.7 基数字及其意义基数字及其意义基数字所表示的数值2#1_0110#十进制的4610#46#十进制的468#56#十进制的4616#2E#十进制的4616#8F#E1十进制的2288,即十进制的143164#3#e2十进制的48,即十进制的3422#1.1111_01#e8二进制的111110100,即十进制的500举例说明举例说明:十进制整数表示的数量121225_45025 4505E25005e2500000151551e051表表4.4 十进制整数及其意义十进制整数及其意义表表4.5 十进
11、制实数及其意义十进制实数及其意义十进制实数表示的数量1.21.25.0e05.05.25E25255.0e-20.050.000_12540.000 125 401.51.55.1e02510表4.6所示为非法十进制数字及其错误原因。表表4.6 非法十进制数字及其错误原因非法十进制数字及其错误原因非法十进制数错误原因1e-2实数中未确定小数点.25未用数字开头5.25 E2字符E前面有空格5.0e-2字符e后面有空格45,458出现非法字符“,”4.2 VHDL的数据对象的数据对象1常常量量 固定值,不能在程序中被改变 增强程序的可读性、可维护性和可移植性 在综合后,连接到电源和地 可在Lib
12、rary、Entity、Architecture、Process中进行定义,其有效范围也相应限定常量说明的一般格式如下:CONSTANT 常量名:数据类型:=表达式;如:CONSTANT data:INTEGER:=50;该语句定义了一个名为“data”的整数常数,并且赋予初值50。2变量变量只能在Process、Function和Procedure中定义,并只在其内部有效。它是一个局部量,在仿真过程中执行到变量赋值语句后,变量被即时赋值。临时数据,没有物理意义。变量说明语句的一般格式如下:VARIABLE变量名:数据类型:=初值表达式;如:“VARIABLE t,m:INTEGER;”语句表
13、示定义了两个名为t和m的整型变量。“VARIABLE a:INTEGER:=50;”语句表示定义了一个名为a的整型变量,并且赋初值50。变量赋值使用数字符号“:=”,如:variable result:std_logic:=0;result:=result+1;3信号信号信号可认为是电路中的连线,它除了没有数据流动方向说明以外,其他性质几乎和前面所述的“端口”概念一致。信号的使用范围是结构体、包集合和实体说明。信号定义语句的一般格式如下:SIGNAL信号名:数据类型约束条件:=表达式;在VHDL中对信号赋值采用“=”作为赋值符号,如 signal count:bit_vector(3 down
14、to 0):=“0011”;Count=count+1;信号赋值的时刻是按仿真时间,即信号值的改变需要按照仿真时间的计划表行事,某一个正在进行的进程中对信号赋值的操作需要等到该进程结束后才会生效。信号与变量的区别(1)architecture rtl of start is signal count:integer range 0 to 7;begin process(clk)begin if(clkevent and clk=1)then count=count+1;if(count=0)then carryout=1;else carryout=0;end if;end if;end pr
15、ocess;end rtl;architecture rtl of start is begin process(clk)variable count:integer range 0 to 7;begin if(clkevent and clk=1)then count:=count+1;if(count=0)then carryout=1;else carryout=0;end if;end if;end process;end rtl;信号与变量的区别(2)architecture rtl of sig is signal a,b:std_logic;begin process(a,b)b
16、egin a=b;b=a;end process;End architecture rt1;architecture rt1 of var is begin processvariable a,b:std_logic;begin a:=b;b:=a;end process;end architecture rtl;4.3 VHDL的数据类型的数据类型VHDL要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必须具有确定的数据类型。不同类型的数据间无法直接进行操作,数据类型相同而位长不同时,也不能直接代入。1布尔布尔(BOOLEAN)类型类型布尔类型在程序包STANDARD中定义的
17、源代码如下:TYPE BOOLEAN IS (FALSE,TRUE);布尔类型实际上是一个二值枚举数据类型。根据其定义,该数据类型的取值范围为TRUE(真)和FALSE(伪)两种。综合器用一个二进制位表示BOOLEAN型变量或信号。布尔量不属于数值,因此不能应用于计算操作,它只能通过关系运算符获得。4.3.1 VHDL标准程序包标准程序包 STANDARD中定义的数据类型中定义的数据类型VHDL标准程序包STANDARD中定义了10种标准数据类型。例如,当a=b时,在IF语句中的关系运算表达式(a=b)的结果是布尔量TRUE。综合器将TRUE转变为信号量“1”,将FALSE转变为信号量“0”。
18、布尔量常用来表示信号的状态或者总线上的情况。如果某个信号或者变量被定义为布尔量,那么用EDA工具对设计进行仿真时,系统自动对其赋值进行核查。一般布尔类型的数据对象的初始值为FALSE。2位位(BIT)类型类型位类型属于二值枚举数据类型,程序包STANDARD中定义的源代码如下:TYPE BIT IS (0,1);根据定义,其取值也只能是“0”或者“1”,位通常用来表示一个信号值。位值的表示方法是,用字符“0”或者“1”表示。位“1”和“0”与整数中的1和0不同,“1”和“0”仅表示一个位的两种取值,没有数值意义。位类型只能进行逻辑运算,运算结果仍然是位。3位矢量位矢量(BIT_VECTOR)类
19、型类型位矢量只是基于位数据类型的数组,在程序包STANDARD中对位矢量定义的源代码如下:TYPE BIT_VECTOR IS ARRAY(Natural Range)OF BIT;依照位矢量的定义,在声明位矢量时必须注明位宽,即数组中的元素个数和排列。例如:SIGNAL data:BIT_VECTOR(7 DOWNTO 0);该语句表示声明一个名为data的位矢量信号,共有8位,各位的排列分别是data7,data6,data0。元素的排列必须为自然数。位矢量数字的格式为用双引号括起来的一组位数据。例如,“01000010”表示一个8位的位矢量;x“FF”表示一个十六进制的位矢量,VHDL编
20、译器将其等价为“11111111”。4整数整数(INTEGER)类型类型整数类型的数包括正整数、负整数和零。可以使用预定义的运算操作符,如加“+”、减“-”、乘“*”、除“”等进行算术运算。在VHDL中,整数的取值范围是2 147 483 647+2 147 483 647,即可用32位有符号的二进制数表示。VHDL综合器无法综合未限定范围的整数类型的信号或变量。如下是一个定义整数类型变量的语句:VARIABLE a:INTEGER RANGE 127 TO 127;该语句中定义了一个名为a的整数类型变量,并且限制其范围在(127,127)区间内。5自然数自然数(NATURAL)和正整数和正整
21、数(POSITIVE)类型类型自然数和正整数都是整数的子集。自然数包括零和正整数;而正整数是大于零的整数,是自然数的子集。4.实数实数(REAL)类型类型VHDL的实数类型也称浮点类型,类似于数学上的实数。其取值范围为1.0E38+1.0E38。在书写时需要加上小数点,否则会与整数混淆。通常情况下,由于直接通过硬件实现浮点类型的表达是相当复杂的,在电路规模上难以承受,应用极少,因此VHDL综合器不支持实数,实数类型仅能在VHDL仿真器中使用。7字符字符(CHARACTER)类型类型字符类型通常用单引号引起来,如 A。字符类型已在STANDARD程序包中作了定义,与标识符不同,字符类型是区分大小
22、写的,如 B不同于 b。当要明确指出1的字符数据时,可写为CHARACTER(1)。8字符串字符串(STRING)类型类型字符串(或称为字符串数组)类型是字符类型的一个非约束型数组,它必须用双引号标明。VHDL综合器支持字符串类型。9时间时间(TIME)类型类型时间类型数据是VHDL中定义的一个物理量数据。时间类型数据一般用于仿真,而不用于逻辑综合。完整的时间类型数据包含整数和物理量单位两部分,而且整数和物理量单位之间至少应留一个空格的位置,如55 ms,2 min。10错误等级错误等级(SEVERITY_LEVEL)类型类型错误等级类型数据用来表示系统的状态。它分为4种:NOTE(注意)、W
展开阅读全文