超大规模集成电路VHDL.ppt
《超大规模集成电路VHDL.ppt》由会员分享,可在线阅读,更多相关《超大规模集成电路VHDL.ppt(56页珍藏版)》请在三一办公上搜索。
1、第2章 VHDL词法基础,2.1 标识符 2.2 数据对象 2.3 数据类型 2.4 类型转换 2.5 词法单元 2.6 运算符与操作符 2.7 属性,标识符规则是VHDL语言中符号书写的一般规则。不仅对电子系统设计工程师是一个约束,同时也为各种各样的EDA工具提供了标准的书写规范,使之在综合仿真过程中不生产生歧义,易于仿真。VHDL语言有两个标准版:VHDL87版和VHDL93版。VHDL87版的标识符语法规则经过扩展后,形成了VHDL93版的标识符语法规则。前一部分称为短标识符,扩展部分称为扩展标识符。VHDL93版含有短标识符和扩展标识符两部分。,2.1 标识符,短标识符规则:短标识符由
2、字母、数字以及下划线字符组成,且具有以下特征要求:第一个字符必须是字母;最后一个字符不能是下划线;不允许连续两个下划线;在标识符中大、小写字母是等效的。VHDL中的注释文字一律为2个连续的连接线“-”,可以出现在任一语句后面,也可以出现在独立行;VHDL的保留字(关键字)不能用于标识符;,2.1.1 短标识符,如下标识符是非法的:_ tx_clk 8B10B large#number link_ _bar select rx_clk_,例如:如下标识符是合法的:tx_clk Three_state_Enable sel7D HIT_1124,-标识符必须起始于字母,-只能是字母、数字、下划线,
3、-不能有连续两个下划线,-关键字(保留字)不能用于标识符,-最后字符不能是下划线,扩展标识符规则:扩展标识符是VHDL93版增加的标识符书写规则:(1)扩展标识符用反斜杠来定界。例如:multi_screens,eda_centrol等都是合法的扩展标识符。(2)允许包含图形符号、空格符。例如:mode A,$100,p%name等。(3)反斜杠之间的字符可以用保留字。例如:buffer,entity,end等。(4)扩展标识符的界定符两个斜杠之间可以用数字打头。如:100$,2chip,4screens等。(5)扩展标识符中允许多个下划线相连。例如:Four_screens,TWO_Comp
4、uter_sharptor等。(6)扩展标识符区分大小写。例如:EDA 与eda不同。(7)扩展标识符与短标识符不同。例如:COMPUTER 与Computer不同。,2.1.2 扩展标识符,2.2 数据对象,在VHDL中,凡是可以赋予一个值的客体称为数据对象。常用的数据对象为常量、变量、信号和文件,其中文件类型是VHDL93标准中新通过的。对象说明的一般书写格式为:对象类别 标识符表:子类型标识:初值;对象说明举例:CONSTANTT1,T2:time:30ns,-常量说明VARIABLESUM:read;-变量说明SIGNALCLOCK:bit;-信号说明FILE input:Text I
5、S IN“STD_INPUT”-文件说明,2.2.1 常量,常量(CONSTANT)常量是指在设计描述中不会变化的值。在VHDL描述中,一般用常量名代替数值。,常量说明语句的一般格式为:CONSTANT 常量名,常量名:数据类型:=取值;,例:8位寄存器宽度指定:CONSTANT width:integer:8;设计实体的电源供电电压指定:CONSTANT vcc:real:5.0;某一模块信号输入/输出的延迟时间:CONSTANT delay:time:100ns;,常量所赋值和定义的数据类型应一致。常量一旦赋值就不能再改变。若要改变常量值,必须要改变设计,改变实体中的常量说明,然后重新编译
6、。常量必须在程序包、实体、结构体或进程的说明区域中对常量的标识符、类型、常量值进行指定。定义在程序包中的常量由所在的实体或结构体调用。定义在实体内的常量仅在实体内使用,定义在进程内的常量仅在进程内使用。,常量的使用规则,变量(VARIABLE)变量是暂存数据的量。,变量说明语句的格式是:VARIABLE 变量名,变量名:数据类型:=初始值;,例如:VARIABLE count:INTEGER RANGE 0 TO 99:=0VARIABLES result:std_logic:0;变量赋初值VARIABLES x,y,z:integer;VARIABLES count:integer rang
7、e 0 TO 255:10;,赋值语句中的表达式必须与目标变量具有相同的数据类型。,变量赋值语句格式为:目标变量名:=表达式;,变量是一个局部量,它只用于进程和子程序。变量必须在进程或子程序的说明区域中加以说明。变量赋值是直接的、非预设的,它在某一时刻仅包含一个值。变量的赋值立即生效,不存在延时行为。变量常用在实现某种运算的赋值语句中。变量赋值和初始化赋值符号用“:”表示。变量不能用于硬件连线和存储元件。,变量的使用规则,在仿真模型中,变量用于高层次建模。在系统综合时,变量用于计算,作为索引载体和数据暂存。在进程中,变量的使用范围在进程之内。若将变量用于进程之外,必须将该值赋给一个相同类型的信
8、号,即进程之间传递数据靠的是信号。,变量的使用规则,2.2.3 信号(SIGNAL)信号是电子电路内部硬件实体相互连接的抽象表示。信号能够代表连线,也可内连元件,端口也是一种信号。,信号说明语句的格式为:SIGNAL 信号名,信号名:数据类型:=初始值;,例如:SIGNAL count:BIT_VECTOR(3 downto 0);-计数器宽度 SIGNAL sys_clk:BIT:0;-系统时钟信号,信号赋值语句格式为:目标信号名=表达式;,赋值语句中的表达式必须与目标信号具有相同的数据类型。信号通常在构造体、包集合和实体中说明;信号不能在进程中 说明(但可以在进程中使用)。“:”表示对信号
9、直接赋值,表示信号初始值不产生延时。“”表示代入赋值,代入赋值法允许产生延时。例如:T1 T2 after 20ns;信号包括I/O引脚信号以及IC内部缓冲信号,有硬件电路与之对应,故信号之间的传递有实际的附加延时。硬件中的信号总是同时工作的,即信号同时在各个模块中流动,这就是硬件电路的并发性。HDL体现了实际电路中信号“同时”流动的这种基本特性。,信号和变量的主要区别:,1.变量 是一个局部量,只能用于进程或子程序中;信号 是一个全局量,它可以用来进行进程之间的通信。,2.变量赋值 立即生效,不存在延时行为;信号赋值 具有非立即性,信号之间的传递具有延时性。,4.信号赋值 可以出现在进程中,
10、也可以直接出现在结构体中,但它们的运行含义不同:前者属顺序信号赋值,此时的赋值操作要视进程是否已被启动;后者属并行信号赋值,其赋值操作是各自独立并行发生的。,3.变量 用作进程中暂存数据的单元;信号 用作电路中的信号连线。,5.在进程中变量和信号的赋值形式与操作过程不同:在变量的赋值语句中,该语句一旦被执行,其值立即被赋予变量。在执行下一条语句时,该变量的值即为上一句新赋的值。在信号的赋值语句中,该语句即使被执行,其值不会使信号立即发生代入,在下一条语句执行时,仍使用原来的信号值。直到进程结束之后,所有信号赋值的实际代入才顺序进行处理。因此,实际代入过程和赋值语句的执行是分开进行的。如例a所示
11、。,例a 信号和变量值代入的区别举例 PROCESS(a,b,c,d)BEGIN d=a;x=b+d;d=c;y=b+d;END PROCESS;结果:x=b+c;y=b+c;PROCESS(a,b,c)VARIABLE d:std_logic_vector(3 downto 0);BEGIN d:=a;x=b+d;d:=c;y=b+d;END PROCESS;结果:x=b+a;y=b+c;,当进程运行时,信号赋值将自上而下顺序执行,但第一项赋值操作并不会发生,这是因为信号赋值是在进程结束时才起作用。因为在进程结束更新时,d的最后一个赋值为c,因此执行结果为该式。,2.2.4 文件,文件(fi
12、les)是传输大量数据的客体,包含一些专门数据类型的数值。在仿真测试时,测试的输入激励数据和仿真结果的输出都要用文件来进行。在IEEE1076标准中,TEXTIO程序包中定义了文件I/O传输的方法。它们是对过程的定义,调用这些过程就能完成数据的传递。procedure Readline(F:in Text;L:out Line);procedure Writeline(F:out Text;L:in Line);Procedure Read(L:inout Line;Value:out std_logic;Good:out boolean);procedure Read(L:inout Lin
13、e;Value:out std_logic);procedure Read(L:inout Line;Value:out std_logic_vector;Good:out boolean);,2.3 数据类型,VHDL是一种强类型的语言。对象的数据类型 定义了该对象可以具有的值和对该对象可以进行的运算的限制。在VHDL中,这种限制是被强制执行的。VHDL提供了多种标准的数据类型。在VHDL描述中,每个信号、常量、变量都要指定它的数据类型,以确定它能保持那一类数据。VHDL对数据类型的定义相当严格,在进行赋值或变换过程中都要进行类型检查。VHDL不允许不同类型的数值相互赋值或使用类型不允许的运
14、算符进行运算。这种特性可以帮助设计者在设计前期发现错误。,1.标准数据类型 VHDL提供的10种标准数据类型。,(1)Integer(整数)。取值范围为(2311)(2311)。在电子系统中,整数可以用进制来表示。整数不能看作矢量,不能单独对某一位操作。整数不能用于逻辑运算,只能用于算术运算。对象的数据类型定义为整数时,范围应有约束。例如:variable a:integer range 255 to 255;在电子系统设计过程中,整数可以用来抽象地表达总线的状态。,(2)Real(实数)。取值范围为 1.0E+38+1.0E+38。和整数一样,实数能被约束。由于实数运算需要大量的资源,因此综
15、合工具常常并不支持实数类型。有些数可用实数表示,也可用整数表示。例如99.0是实数,99是整数,两数具有相同的值;但两者具有不同的类型。在有关文献中,实数类型也称为浮点类型(FLOATING TYPE)。但大多数EDA工具不支持浮点运算。,(3)Bit(位)。只有两种取值,即 0 和 1,可用于描述信号的取值。位通常用单引号来括住其位的值。如:TYPE BIT IS(0,1);位的值0,1表示信号的状态;布尔量的值0,1表示假,真。两者的意义不一样。,(4)Bit_Vector(位矢量)。是用双引号括起来的一组数据,每位只有两种取值:0 和 1。在其前面可加以数制标记,如X(16进制)、B(2
16、进制、默认)、O(8进制)等。位矢量常用于表示总线的状态。,(5)Boolean(布尔量)。又称逻辑量。有“真”、“假”两种状态,分别用TRUE和FALSE标记。布尔量没有数量多少的概念,不能进行算术运算,只能进行关系运算和逻辑运算。布尔量常用来表达信号的状态,或者总线上的控制权,仲裁情况,忙、闲状态等。若某个客体被定义为布尔量,则EDA工具对设计进行仿真时,自动地对其赋值情况进行核查。,(6)Character(字符)。是用单引号括起来的一个字母(AZ,az)、数字(09)、空格或一些特殊字符(如$、%等)。VHDL语言对大小写英文字母不敏感,但区分字符量中的大小写。A,a,B,b,都认为是
17、不同的字符。字符1,2仅是符号。,(7)String(字符串)。是用双引号括起来的一个字符序列。字符串区分大、小写字母。常用于程序的提示和结果说明等。例如“VHDL”,“STRING”,“MULTI_SCREEN COMPUTER”等。,(8)Time(时间)。时间的取值范围从(2311)(2311)。时间由整数值和时间单位组成。常用的时间单位有:fs、ns、s、ms、s、min、hr等。时间类型一般用于仿真,而不用逻辑综合。时间常用于指定时间延时和标记仿真时刻。,时间单位的描述规范说明如下:TYPE_TIME IS RANGE-2147483647 to 2147483847UNITS FS
18、;PS=1000fs;Ns=1000ps;Us=1000Ns;Ms=1000us;Sec=1000ms;Min=60 sec;Hr=60 min;End units;,上述10种数据类型是VHDL中标准的数据类型,在编程时可以直接引用。如果用户需使用其它的数据类型,则必须进行自定义。,(9)Natural(自然数)和Positive(正整数)。是整数类型的子类型。自然数取值范围为0(2311);正整数是大于 0 的整数。,(10)Severity Level(错误等级)。错误等级分为:NOTE(注意)、WARNING(警告)、ERROR(出错)、FAILURE(失败)四级,用于提示系统的错误等
19、级。错误等级这个数据类型用于表示电子系统工作状态。,标准数据类型,IEEE库STD_LOGIC_1164程序包中定义的STD_LOGIC类型和STD_LOGIC_VECTOR类型。(VHDL93标准)STD_LOGIC类型的数据可以具有九种取值,其含义如下:U:初始值X:不定态0:强制01:强制1Z:高阻态W:弱信号不定态L:弱信号0H:弱信号1_:不可能情况(可忽略值)其中,“X”方便了系统仿真,“Z”方便了双向总线的描述。,STD_LOGIC_VECTOR类型定义如下:TYPE STD_LOGIC_VECTOR IS ARRAY(NATURAL RANGE)OF STD_LOGIC;,2.
20、用户自定义数据类型 VHDL允许用户自己定义数据类型。,常用的用户自定义数据类型主要有:(1)枚举(Enumerated)类型。通过列举某类变量所有可能的取值来加以定义。对这些取值,一般使用自然语言中有相应含义的单词或字符序列来代表,以便于阅读和理解。,自定义数据类型说明语句的一般格式是:TYPE 数据类型名,数据类型名 IS 数据类型定义;,枚举类型定义的格式为:TYPE 数据类型名 IS(元素1,元素2,);,该数据类型括号中的值自左向右按升序排列,中间用逗号分隔。在VHDL中,对其中每一个元素都赋予一个位置编号,最左边的元素开始记为“0”,向右依次递增“1”。这为“属性”提供了一个访问位
21、置编号的机制。,例如,在程序包STD_LOGIC_1164中对STD_LOGIC的定义为TYPE STD_LOGIC IS(U,X,0,1,Z,W,L,H,_);,(2)数组(ARRAY)类型。又称为向量,是多个相同类型的数据集合。它可以是二维的和多维的。,数组类型定义的格式为:TYPE 数据类型名 IS ARRAY(范围)OF 元素类型名;,范围一项规定数组下标的类型和范围。默认的下标类型是整型,但也可以使用其它数据类型,这就需要在范围中标明下标的类型。例如:TYPE count1 IS ARRAY(STD_LOGIC _ DOWNTO U)OF INTEGER;,多维数组需要用两个以上的范
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超大规模集成电路 VHDL
链接地址:https://www.31ppt.com/p-6489431.html