VHDL的可综合性.ppt_第1页
VHDL的可综合性.ppt_第2页
VHDL的可综合性.ppt_第3页
VHDL的可综合性.ppt_第4页
VHDL的可综合性.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六讲VHDL的可综合性,6.1VHDL语言结构向硬件的映射,EDA工业界普遍认为,有效的VHDL建模风格是控制综合结果最为有力的手段。 为了建立有效的VHDL代码,设计师应了解VHDL语言结构与综合结果的关系。 应该指出的是,由于综合算法的不同,对于同样的硬件描述,不同的CAD综合工具可能会得到不同的综合结果。,VHDL语言在创立时,主要是为了满足仿真的需要。自从VHDL被用于综合以来,都是对VHDL的子集进行处理,这就是所谓的可综合的VHDL子集。不同综合工具支持的可综合子集不尽相同,通常有如下要求:,(1)延时描述(after语句、wait for语句)等被忽略。 仿真时,为了具备一定精

2、度,往往在源代码中含有延时语句。这些延时语句信况比较复杂,有时是最大延时约束,有时是典型经验值,还有些是人为加入的,所以现在所有的综合工具都忽略源代码中的延时语句。有些工具干脆把这些语句处理为语法错误。大部分工具忽略延时语句后,给出警告提示。而综合时间约束则在综合过程中通过综合命令输入。,(2)支持有限类型。 VHDL具有丰富的类型定义,但是有些类型不具备硬件对应物。不可能被综合,如文件类型。通常可综合类型包括枚举类型(包括自定义状态、预定义Bit类型和IEEE 9值逻辑类型等)、整数、数组等。其余像浮点数类型、记录类型等只得到有限支持而时间类型等完全不能被综合。,(3)进程的书写要服从一定的

3、限制。 在仿真时,VHDL进程可以任意书写。而在综合时,通常要求一个进程内只能有一个有效时钟,有的工具还有进一步的限制。,(4)可综合代码应该是同步式的设计。 现在的EDA综合工具普遍推荐使用同步式设计风格,即整个芯片电路的状态只能在时钟信号有效时发生改变,也就是说,电路状态不会在仅有数据信号变化而时钟处于无效状态时改变,并且电路中的时钟信号应该都是从同一主时钟经过分频或其他运算得到。当然设计师也可以尝试其它风格的设计,如异步式电路,但这时综合工具产生的结果往往还需要设计师的进一步优化或调整,一、VHDL类型 VHDL语言中的对象有常量(constant)、信号(signal)和变量(vari

4、able)三种,它们都必须定义为如下某种类型。类型定义说明了对象可以使用的数值,并隐含表示了可以对其进行的操作。,1.可综合类型 面向综合的建摸都支持这样一些类型:枚举类型、整数、一维数组。比较先进的综合工具现在一般也可以处理二维数组和简单的记录类型。,(1)核举类型 枚举类型通过列出所有可能的取值来定义,例如:,以上Std_ulogic的定义实际是对01等字符进行了重载(overload),由于这个定义已经成为IEEE标淮,并且描述的是电路连线的状态,因此综合时并不会产生额外硬件。而对于抽象层次更高的BOOLEAN和State-type,则需要进行状态编码,这也是枚举类型在综合时最主要的问题

5、,现在还没有统一的方法解决。一般来说,状态编码是把状态值编码为位矢量(bit-Vector,Std-ulogic-Vector或Std-logic-vector),矢量长度是能够表示所有状态的最短位宽。例如,State-type的4个状态值可以分别校编码为“00”,“01“,”10“和”11”,Boolean类型编码办0和1。,(2)整数类型 可综合的整数类型定义总是有界的,例如:,对整数类型进行综合时,综合工具首先将其翻译为位矢量,矢量长度仍取能够满足需要的最短位宽。如果使用默认的整数类型,大部分综合工具按32位处理,因此,建议使用于类型定义(subtype)明确指出整数的范围,以便于综合工

6、具进行优化。如果是负整数,通常编码为正数的补码。综合后的电路中,整数以矢量形式出现,但通常只能以整个矢量为单位访问,即不能单独访问每一位。,(3)数组 现在综合工具都能够处理一维数组,例如,对于word类型,综合工具通常将其综合为总线。MyRAM类型实际是二维的,这种用两个一维数组代替一个两维数组是常用的综合建模技巧。现在先进的综合工具如synospys DC可以将其综合为RAM,一般综合工具至少可以把它综合为寄存器。,(4)记录类型 记录类型在定义复杂数据类型时非常方便,能够把不同数据类型的数据组织在一起统一访问。但是,EDA工业界对综合工具是否应该支持记录类型还没有统一意见,因此大多数综合

7、工具不提供这种能力或只能把组合了简单数据类型的记录进行综合。,2.可综合子集,VHDL在1989年首次公布时,就提供了两个程序包(package):Standard和TextI(),其中定义了各种预定义数据类型。这些预定义数据类型中,类型Integer,Bit,Bit-Vector,Boolean,Character和子类型Natural,Positive是可综合的。类型File,Access和Real则不可被综合。,1992年,IEEE颁布了标准程序包Std_logic_1164,其中定义了9值数据类型Std_ulogic,即相应的决断类型Std_logic。在第4章也已经介绍了这个程序包,

8、这里从综合的角度予以讨论。9值数据类型定义如下:,Type std_ulogic is(U,X,0,1,Z,W,L,H,-);0,1,Z,-在仿真和综合时的处理方式是一致的。U和W在仿真是是未初始化状态,综合时通常不必考虑。现在”H和L在综合时没有统一的方法。仿真时,X表示未知态;综合时,X一般当作无关态处理,即等价于。,2004年,IEEE批准了一种修订标准IEEE 1076.6-2004,该标准提供了VHDL RTL综合子集的重要扩展。新改进版包括VHDL几乎每一个特性,能被用于在RTL级进行建模并综合。此外还包括触发器和锁存器建模的扩展语义导引。用户将能够以多种不同风格编写一个RTL模型

9、,每一种都符合标准。此外,这项标准提供了极为重要的保证,即保证模型在众多接受RTL输入的不同工具之间的便携性。”这项标准化将最终帮助RTL确认。,主要支持以下类型综合: a) BIT, BOOLEAN, BIT_VECTOR b) CHARACTER and STRING c) INTEGER d) STD_ULOGIC, STD_ULOGIC_VECTOR, STD_LOGIC, and STD_LOGIC_VECTOR e) SIGNED and UNSIGNED,二.VHDL对象,VHDL语言中有三类对象,常量(constant),变量(Variable),信号(Signal),它们是V

10、HDL程序中的数据的载体。,1.常量 常量仅被计算一次。在很多情况下,可以通过使用常量引导综合器获得优化的结果在综合过程中,常量被处理的方式很多,主要有下述情况。 a)当常量被用来描述真值表、ROM等,或被用于信号赋值,常量在综合时会形成对应的硬件。 b)在常量作为算术运算的一个操作数出现时,综合工具常会对这一算术运算实施特定的优化措施。当然,这样一来常量与综合结果中的硬件就不是一一对应了。例如,优化综合工具用左移一位实现乘2操作,用右移一位实现除法操作。,d)常量传播。在下面的VHDL代码中,由于数组ROM和ROM(5)的索引都是常数,因此WORD4实际上也成为常数,在进一步的优化中,WOR

11、D4将作为常量被处理。这就是常量传播。,c)常量在作为条件表达式的一部分(例如下面的代码)时综合工具会对整个语法结构进行布尔优化。,2.变量和信号,变量和信号有着不同的仿真行为,同样在综合过程中,它们也会产生不同的结果。一般说来,尽量使用变量能够获得比较好的综合结果,因为这样做使得优化的余地较大。但是,并不是所有的综合工具都支持变量的综合,这是需要特别注意的。同时,使用信号可以较好地保持综合前后在IO上的一致性(这里把进程内对信号的读写统称为IO),而且在需要锁存中间结果的时候,经常有必要使用信号。 下面用一个例子来说明变量与信号的不同综合结果,其源代码如下。图514分别是结构体A和B对应的综

12、合结果。,三、初值,VHDL中有三种初值;由类型或子类型定义可以得到的默认初值,定义对象时明确指定的初值和进程入口处显示地赋予对象的初值。,以上三种初值的前两种只在仿真时有意义,在综合时将被忽略。第三种形式将被综合器处理,形成对应电路。在集成电路设计中,复位时赋予各个信号初值是很有必要的,否则很有可能出现不定态。因此无论在仿真还是在综合时,都建议使用系统化的方式给信号和变量赋初值,即上述的第三种形式。,四、运算符,1.逻辑运算符 逻辑运算符包括表54中的not和二元逻辑运算符,其操作数可以是bit和Std_logic等类型的标量或同长度的矢量对象,也可以是Boolean类型的对象。这些算符的综

13、合是直截了当的,直接调用逻辑门单元实现即可,但经过优化后,这些算符可能被合并或改变。图515是对下达VHDL代码中逻辑运算符综合的结果。,2.关系运算符 关系算符的综合没有统一的方法,综合工具常利用被比较数的特点作特定的优化。图516是对”运算符综合的例子。,3一元算术运算符 一元算术运算符有三个,即十,一和abs(取绝对值)。对前两个算符,综合工具大都可以用组合逻辑线路实现,如图517的例子。abs算符的处理比较复杂,大部分综合工具尚不能提供支持。,4.二元算术运算符 现在的综合工具,特别是高层次综合工具,都能够直接把十,一,运算综合为相应的运算线路,部分工具也支持除法运算。mod和rem算

14、符通常不被综合工具支持。如果使用IEEE颁布的标准算术运算程序包Std-logic-arith,那么还可以直接描述对Bit或Std-logic类型的标量和矢量对象进行算术运算的电路,并进行综合。通常在综合过程中,综合器先把运算符映射为相应的加法器等综合库提供的专用运算部件,然后进行优化,如果某些运算可以用简单线路实现,综合器则用简单线路取代专用运算部件。,5.运算符,运算行为连接运算,通散用于把一组对象捆绑在一起。由于直到1992年VHDL才引入移位算符,所以也常用连接运算实现移位运算。综合时,一般是在信号之间提供额外的连线实现这一运算。,6.移位运算 移位运算符是1992年VHDL再次修订后

15、引入的特征,在综合时有两种处理方式。对于经过锁存的矢量对象,可以在锁存器之间引入附加的数据通路来实现;对于不需要锁存的矢量对象,处理方式与运算符相同。,五、顺序语句,顺序语句只能在进程中出现,而且其出现顺序直接影响到硬件行为。VHDL能够描述非常复杂的数字电路,很大程度上是由于具有丰富的顺序语句。,1变量赋值,变量的引入使得VHDL具备了极强的造型能力,能够以类似软件编程的方式描述硬件,特别是在行为综合时,如果没有变量,则描述复杂的ASIC行为几乎是不可能的。,变量在综合时要根据整体代码决定其处理方式,主要有以下几种方式:用寄存器锁存变量,也就是说,变量经过综合后形成了寄存器,但是生命期不重叠

16、的变量可以共享一个硬件寄存器;在逻辑优化过程中被消去,即没有硬件对应物;作为一根硬件连线出现(由组合逻辑输出)。,2.信号赋值,信号只能在同步语句(显式或隐含的wait语句)之后改变状态。通常,综合后的信号赋值语句会被化简为最简形式。综合工具处理信号的方式类似于变量,但有以下区别:如果信号需要寄存器锁存,那么被锁存的信号能与其他信号共享硬件寄存器;比较先进的综合工具可以按照设计师的要求,决定是否保持综合前后信号的一致性;出现在形如if CLK1and CLKEvent和thenend if之间或wait until CLK0and CLKEvent这样的时钟沿同步语句之后的信号都要被锁存,而变

17、量则不一定被锁存。,3.if语句,if语句是最频繁出现的条件语句。在综合时,if的处理分三种情况,下面分别讨论。,(1)if语句(包括elseif, else)包含了条件所有可能的取值,称之为完全if语句。这时综合器用多路选择器或基本逻辑门的组合来实现电路,如图520和图521所示,它们分别是下述进程P1和P2综合得到的结果。用多路选择器实现电路时,ifelseif.else中隐含的优先关系会被消去,这是设计师应该注意的。,(2)若if语句的条件末包含所有可能出现的情况,有效条件是对某信号的跳变进行检测,并且在条件满足时是对信号进行赋值操作,那么会生成触发器。一般把触发器和电平锁存器通称为寄存

18、器,因此这实际上是所谓寄存器推断的一种形式。如果赋值号右边为一复杂表达式,则综合器先用组合逻辑电路计算表达式,计算结果送入触发器的数据输入。图5.22是对下述进程FF进行寄存器推断的例子。,(3)第三种情况与第二种类似。也属于于不完全if语句,但有效条件只对信号值进行检测,这时综合器的处理方式也是类似的,只是换为用电平锁存器实现寄存器。,4Case语句,case语句与多路选择器电路的对应关系是显而易见的,但是,建摸时要注意合理使用无关态和others语句,否则会造成电路的复杂化,甚至导致形成时序电路。图5.23是综合下述VHDL代码中case语句的一个例子,注意电路中CODE倍号已被编码为矢量

19、。,5循环语句,VHDL的循环语句有三种:for循环、while循环和无限循环loop end loop,实际上,1oopend loop可以看作是循环条件永远为真的while循环。在行为综合中,循环语句的处理是极其复杂的,第3章对此已作了介绍,这里从寄存器传输级的角度加以讨论。,在寄存器级进行综合,要求for循环的上下界必须是静态已知。例如下面给出了两段VHDL代码,第一段代码中,由于循环上界RG是动态对象,所以是不可综合的。反之,第二段代码则可以被综合工具接受。这段代码通过使用next语句,形成了一个选择性的连线网络,如图524所示。,VHDL定义了next和exit语句来中断循环的正常执

20、行,现在的综合工具都可以处理这两种语言结构。固525是对下述VHDL代码中的循环综合的例子,这个电路对信号中的1进行计数,代码中使用了exit语句。,6.子程序的调用 VHDL的子程序调用有函数和过程两种形式。综合时,比较先进的综合工具允许设计师控制子程序展开或是作为单独模块处理。只有描述硬件行为的子程序才是可综合的,完成效据转换的子程序和决断函数将被综合工具忽略。函数通常被综合为组合逻辑电路,如果过程同时具备输入和输出参数,并且内部没有wait语句,则综合后形成组合逻辑电路,否则形成时序逻辑。,六、并行语句,VHDL的并行语句出现在结构体内,可综合的并行语言结构包括进程、并行赋值语句、块语句

21、、生成语句等。,1.进程 进程是VHDL中描述硬件行为最有力的方式。进程内的语句属于顺序语句,而进程本身则属于并行语句。进程的综合是比较复杂的,主要有这祥一些问题:综合后的进程是用组合逻辑还是时序逻辑电路实现?进程中的对象是否有必要用存储器部件(主要指寄存器、触发器、电平锁存器或RAM)实现?,进程语句结构需要至少一个同步控制点,否则除了初始化阶段,永远不会再次被激活。同步控制点表现在代码中就是同步语句,同步语句可以是wait on(包括以敏感信号列表出现的隐含式waiton语句)或wait until。一般说来,只有一个同步点的进程,或者是具有多个同步点、但是都使用完全相同的同步控制信号,当

22、进程不带要“记忆”在哪一个同步点上被挂起时,不会形成存储器。例如下面的代码所示。,进程中会形成存储器的结构还可能来自变量。有些变量纯粹是运算的中间结果,即所谓工作变量。例如下述的代码中的进程P1,不需要为变量配置寄存器或其他类型的存储器,此时同步语句隐台在进程两次被激活的过程中。概括起来,如果两个同步语句之间的某变量总是在被读之前作为赋值的对象。则不会形成对应的硬件。如果变量需要在进程挂起到下次被激活的过程中存储数据,则显然需要形成硬件存储器,例如下述代码中的进程P2,这种情况可以概括为,在进程的两个同步语句之间,如果至少有一个变量在作为赋值对象之前被读访问至少一次,那么该变量需要硬件存储器。

23、,信号同样可能在综合后形成硬件。例如下面的代码,综合结果通常为一触发器,这是因为虽然进程内只有一个同步点,但是在进程两次被激活的过程中,Q必须保持原来状态,即使D的状态已经发生改变。,如果进程综合后的电路含有寄存器,那么自然就是时序电路。此外还有什么依据可以判定进程被综合为时序电路呢?概括地说,在以下两种情况下,进程被综合为时序电路: 进程中所有被读访问的信号不在敏感信号列表之内,如下面代码的进程P1; 进程中至少有一个信号不是if或case中每种可能的分支上的赋值对象,如下面代码中的进程P2的信号。,总结以上内容,在下述条件同时满足的情况下,进程会被综合为组合逻辑电路: (1)进程有显示定义

24、的敏感信号列表或进程只有单一的同步控制点。 (2)进程中不含有任何变量,或者有变量,但变量出现在读操作之前(出现在赋值号*的左边);所有被读访问的信号都出现于敏感信号列表中; (3)进程中输出的信号在“条件”的各种可能情况下都被赋值,且赋值号右边不出现该信号。,2信号赋值语句 信号赋值语句的处理是直截了当的,下面的语句(a)被综合成一根硬连线;对于语句(b),R将被当作常数处理;语句(c)被综合为组合逻辑电路。当然,语句(a)和(c)经过逻辑优化后,可能改变形式或者被消去。,3条件和选择赋值语句,VHDL的并行语句有两种方式进行有条件的赋值,即条件赋值whenelse和选择赋值withsele

25、ct.when。实际上这两种语法结构都可以改写为等价的顺序语句。例如下面的并行条件赋值(a)和进程P1内的代码是完全等价的。同时,可以看到进程也满足用组合逻辑电路实现的特点,因此这段代码在综合后会用多选一网络实现,如图526所示。,4.元件例化语句 元件例化语句提供了使用以前建立的模块的手段。在综合过程中,提供综合命令的控制。例化语句调用的元件可以用如下一些方式处理: (1)展平,即取消层次。把元件本身的描述代入上一级描述,然后整体进行综合和优化; (2)只把被例化元件综合一次,然后遇到例化这一元件的语句均使用这一综合结果,也就是说每遇到这个元件的例化语句均在综合结果中加人一个相同模块; (3

26、)只把被例化元件综合一次,但是在每次处理例化元件语句时,根据上下文的代码对元件的接口逻辑重新综合。 元件例化语句常与配置语句联合使用,可以通过配置语句引导综合工具选绎适当的设计版本。,5块语句 块语句有把一些相关并行语句组织到一起和进行保护赋值两种作用。第一种块语句在综合处理上与一般的并行语句没有区别只是有些综合工具可以把一个块结构当作模块来处理、也就是提供了一种层次化的手段,第二种块语句一般用来描述寄存器(触发器或电平锁存器)和三态器件。下面的代码描述了一个下降沿激活的触发器和三态总线连接,图529是三态总线描述的综合后结果。由于DATA是Std_ulogic_vector类型,所以在赋值时

27、进行了类型转换。,6并行过程 并行过程在综合处理上类似于元件例化语句,但是更加灵活。在参数不同时,同一过程可能得到不同的综合结果。并行过程一股在保持层次的条件下单独被综合,并且在同一过程被多次调用时,默认的处理方式是共享这一过程对应的硬件。 7生成语句 生成语句实际上是系统化地例化元件的方式,在综合时与硬件的对应关系是很明显的,七、综合约束 综合时,除了通过编程来控制综合结果之外,一般要设置综合约束来引导综合工具达到需要的综合目的。综合约束的种类很多,例如,对最大最小延时的约束、建立保持时间约束、最大扇出约束等等,但对综合产生最重要影响的是优化目标,常见的优化目标是最快运算速度或最小面积,现在比较先进的工具开始支持面向功耗的优化。通常,综合工具以面积为默认优化目标。因此,即使代码完全相同,如果优化目标不同,仍有可能产生完全不同的综合结果。,现在进入详细设计阶段。前一阶段是结构设计阶段,它通过把定义分解到易于管理的子系统来产生结构模型。现在需要详细设计出层次分解的底层部件。达到门级设计的最直接的方法是首先产生一个寄存器传输级(RTL)模型,然后使用综合工具将其转换为门级电路。本节

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论