理解综合过程
大多数的综合工具,其综合的过程一般都分两个:systhesis和optimization。
systhesis是把行为级的描述通过一定的算法转成门级描述,这一过程与具体的工艺库无关、更与用户的约束无关。
Optimization是将已经转化成门级的描述,在用户的约束下,通过算法映射到相应的工艺库中的器件上。对ASIC而言是映射到厂商的Gate库,而对FPGA而言即映射到FPGA器件的单元结构中(FPGA与ASIC的库是不同的)。
从这两个过程看,如果设计人员的代码风格不一样,那么在第一步systhesis过程时就基本决定了设计的性能(对ASIC而言,设计最后转成的是Gate,而器件库中一般也是Gate,所以影响相对于FPGA要少)。这里想要说明的是代码风格对于FPGA设计的重要性。
以下是16选1的选择器(MUX)的实现,图1采用的是二进制译码如(Case语句)的描述方式,而图2是采用BUFt的描述方式(采用三态Buffer来实现对路选择器)。
图1 使用二进制描述的MUX 图2 采用内部的三态线描述MUX综合工具的性能
不同的综合工具,其针对的目标器件不一样,综合工具本身的性能也有差异,这导致同一一个设计最后由不同的综合工具综合得到的结果也不不同。目前的综合工具有Synplify,XST,Galileo,DC (Design Complier)等。其中DC主要用于ASIC,Synplify是Synplicity公司出品的,且是目前成长最快的综合工具。
这里要说明的是,不论是哪一家的综合工具,对FPGA设计的综合都必须紧密低地结合目标器件的结构(FPGA器件内部结构各厂家存在差异),否则无法更好地利用FPGA资源,发挥不出最大的性能。这也是为什么用Xilinx的板子就会采用Xilinx的开发套件,用Altera就使用Quartus开发工具。
目前综合工具一直该不断改善,试图做到充分利用FPGA的器件,但很难高效地利用,这需要一个过程。
代码风格对综合性能的影响
综合器暂时还无法完全利用FPGA器件,充分利用器件提供的性能,导致性能差强人意。为了得到更好的性能,会对一些设计采用core,但这是基于FPGA器件(特有工艺)的代码设计,将会降低设计代码的重用性能、FPGA设计与ASIC设计的兼容性。
考虑到综合工具不是万能 的,在代码设计的时候,采用恰当的代码风格来提高电路的性能,对FPGA设计(以Xilinx为例),其要求的代码风格:
1.资源共享的应用限制在同一个module中。这样综合工具才能最大限度发挥其资源共享的综合作用。
2. 尽可能将Critical Path上所有相关逻辑放在同一个module中。这样综合工具能发挥最佳的综合效果。
3.Critical Path所在的module与其它module分别综合,对critical path采用速度有限的综合策略,对其他module采用面积优先的综合策略。
4.尽可能去Register所有的Output。这样的话,方便加约束,并且一条路径上的组合逻辑不。可能分散在各个module中。可以比较方便地达到面积、速度双赢的目的。
5.一个module的Size不能太大,具体的大小得看综合工具了。
6.一个module尽量采用一个始终,或者整个设计只有一个时钟。
网友评论