物理综合优化在老版本QII中是全局设置的,从Quartus II 9.0开始支持对模块(module)、节点(node)等局部进行物理综合优化设置。
随着设计规模越来越大,设计的复杂程度越来越高,外围接口也越来越复杂,逻辑设计的时序收敛的挑战也越来越严峻。在保证代码效率等其他手段的前提下,Altera的QuartusII软件提供一种叫物理综合(Physical Synthesis)的优化手段来提高设计的时序收敛。关于如何提高设计的时序收敛,QII handbook详细介绍了许多办法,这里简单罗列:关键性模块做好规划、好的设计及代码风格、层次化设计方式以及对于目标器件的了解另外就是好的且正确的约束也很重要。
我们看到QuartusII软件中有很多设置,默认的设置都基于“平均效果”,是综合考虑了速度(speed)、面积(area)以及成本(cost)等因素。不同的设计需要不同的设置,从来没有一种最优设置可以符合所有的设计项目。同样物理综合也是这样的一种设置,不同的设计需要进行不同的设置,甚至要考虑是否需要使能。对于设计优化来说,软件还提供一种指导来帮助设计者进行工程项目的设置,即Timing Optimization Advisor
在开始进入正题之前,先搞清楚两个概念物理综合和逻辑综合。首先是逻辑综合,所谓逻辑综合是将HDL描述语言转换成不含布局布线信息且能够映射(map)到物理器件的门电路过程。如下图的转换过程
因为逻辑综合没有包含布局布线的信息,所以对于逻辑综合后的时序信息仅限于转换后的门级电路或者器件内部逻辑单元或者节点间逻辑单元级数等时延信息(这些仅跟具体器件相关,是事先已确定的参数),而对于内部互联时延这时候是无法加以分析的。其次是物理综合,所谓物理综合是通过改变网表的布局(placement)从而或者不错的综合结果。传统设计的时延可能大部分取决于逻辑时延,但是最新的器件设计时延更多取决于内部互联时延。如此一来,节点(nodes)的位置以及各个节点之间的布线(route)就显得非常重要。厂家的综合工具洞悉自己器件的物理特性(比如时序、面积、功耗、布线资源、PLL、RAM及全局信号等等),所以会在不改变设计功能的情况下调整网表的布局或者修改增加部分节点从而达到改变设计性能、设计资源利用率等目的。请记住一点,即设计在布局完之前节点间的时延预估都是毫无意义的。
对于何时使用物理综合,个人建议是在修改代码以及约束等因素等无果的情况下可以开始考虑物理综合。因为物理综合带来性能提高或者面积利用率提高的同时会给你带来编译时间的增加,所以需要你综合考虑衡量。
启动物理综合设计Assignments->Settings->Compilation Process Settings->Physical Synthesis Optimizations,如下图所示
如上图所示,主要分两大部分,一部分用来优化performance,一部分优化area。所谓的effort level这里不做解释。详细介绍各个优化选项之前,先来介绍一下我们之前提到的从QII9.0开始的针对单个模块或节点物理综合的实现。如下图所示,
在Assignment Edtor里的Logic Options可以针对特定的module设置物理综合优化,这种方式非常适合于增量编译设计模式,因为基于团队的设计,有些模块可能设计完成,而有的模块可能还未完成,如果使能全局物理综合优化不但增加编译时间,而且对于未设计完成的模块也根本毫无效果。下面开始具体介绍各个物理综合优化选项:
一、针对性能(performance)的物理综合优化选项
1、Perform Physical synthesis for combinatorial logic
FPGA中的主要逻辑资源是LE或者ALU,组成LE和ALU的除了寄存器以为就是查找表(LUT)。本选项就是优化组合逻辑关键路径所经过的逻辑层数,如下图所示:
上图从左到右转换,使得关键信号critical所经过的路径减少,另外,本选项仅影响相应逻辑单元中的LUT对于寄存器并无影响。
该选项对于Memory Block、DSP Block以及IOE的输入无法改变,对于驱动全局信号也无法改变,另外对于被约束布局与同一个LAB的信号不产生影响。
2、Perform Register Retiming
通过移动寄存器中组合逻辑中的位置来平衡寄存器之间的路径时延,如下图所示
上图左半边,第一个寄存器和第二个寄存器之间逻辑时延为10ns,而第二个和第三个之间组合逻辑时延是5ns,我们考虑在一个时钟周期为9ns的系统中,那么第二个寄存器的建立时间就会出现问题。通过使能该选项调整寄存器位置如右半边所示三个寄存器之间的时延分别是8ns和7ns,虽然关键路径总时延未变,但是系统性能却获得了提升,可以稳定run在9ns的系统中。
我们知道通过加流水(pipeline)也可以解决大组合逻辑延时问题,但是pipeline和register retiming不同,pipeline是通过增加pipeline register来达到目的,同时增加了路径时延,而register retiming只是调整各级之间逻辑位置。当然如果设计中进行了pipeline设计,再使能本选项的时候也会对pipeline增加的register进行retiming。
Register Retiming的例外, 驱动硬逻辑(hard logic)的寄存器、影响时序约束的寄存器、驱动混合信号的寄存器以及被约束位于同一LAB的寄存器等。
3、Perform automatic asynchronous signal pipelining
异步信号时序问题,一般叫做Recovery Timing Issue和Removal Timing Issue,一般多出现在高速时钟域的异步负载(load)和清零(clear)信号上。先来明确两个概念:
Recovery Time:即异步信号在时钟沿到来前必须稳定的最小时间;
Removal Time:即异步信号在时钟沿到来后必须稳定的最小时间。
这两个概念有的类似于同步设计中的建立时间和保持时间。我们来看一个问题,所有的寄存器都有异步复位信号,当异步复位释放的时候,该异步信号很难保证同时到达所有的寄存器,这就有可能导致有些寄存器会“错过”一个时钟沿,那么在这一个时钟周期内这些寄存器的状态就是不可控了,这时就出现了在TimeQuest报告的recovery failure或者removal failure。本优化选项就是通过自动在异步信号路径上插入流水寄存器来改善这些fail path上的recovery time或者removal time问题。如下图所示
4、Perform register duplication
通常FPGA的buffer都允许高扇出net,但是由于每个fan-out的路径不同,所以在某些关键路径上就容易出现时序问题。记住一句话:“Timing failures from fan-out are more often a matter of where than of how many”,最差路径一般都是最远的路径,本选项通过寄存器复制优化长多扇出长路径上的时序。
注意在复制寄存器的时候有时候有必要也会复制一些组合逻辑。
下面来看看本选项的一些例外情况,跨时钟域的寄存器、影响时序约束的寄存器、被约束位于同一个LAB中的寄存器以及被看作Virtual I/O的寄存器。
二、Physical Synthesis Optimizations for Fitting
适用于Fitter阶段的优化手段,其功能就是使得设计优化可以fit进目标器件,其实就是针对面积(area)的优化。
1、 Physical Synthesis for Combinational Logic
即在fitting的时候针对组合逻辑的优化,本选项只会在“no-fit”事件发生的时候才会起作用,尽可能的减少逻辑使用,提高资源使用率。
2、 Logic to Memory Mapping
顾名思义就是在fitting的时候将部分逻辑移到未使用的Memory块里,同样也是在资源紧张和“no-fit”出现的时候该选项才起作用。
用户377235 2013-4-19 14:51
楼主辛苦,对我相当有帮助,万分感激!!!
用户821944 2010-4-1 12:00
用户1383215 2009-11-20 18:55
ash_riple_768180695 2009-11-19 20:31
ilove314_323192455 2009-11-19 15:10