高速FPGA设计实现结构和优化_(五)综合优化

速度和面积

  在之前的高级FPGA设计结构实现和优化_(一)结构设计一章中已经讲述过高速度结构设计和面积结构设计,在综合层次,速度和面积优化决定实现RTL将要利用的逻辑拓扑。在这个抽象层次,很少知道FPGA的物理特性。针对目前的讨论,这将与基于布局和布线的互连延时有关,综合工具将利用所谓的导线负载模型,基于各种设计准则统计地估计互连延时。用FPGA设计这些时是隐藏在幕后的,综合工具得到它的估计,往往与最终的结果有显著的不同,由于缺少来自后端的知识,综合工具将主要执行门级优化,基于综合的门级优化将包含如状态机编码、并行与交错多路选择、逻辑复制等事情。速度与面积权衡的基本概念:更快的电路要求更高的并行性和面积的增加。但是由于FPGA的布局图的二阶效应,这个不总是按照预期做到。
  直到布局布线完成,工具才真正知道器件是如何拥挤和布局布线过程的困难。在流程的这一点上,实际的逻辑拓扑已经被综合工具提交,因此如果在综合级优化努力设置为速度,后端工具发现器件过于拥挤,它仍必须试图布局布线所有额外的逻辑。当器件是拥挤的,工具将没有选择,而布局元件到它适合的任何地方,由于次优的路径引入长的延时。因为事实上设计者从经济的原因常常利用尽可能最小的FPGA,这种情况常常发生,导致一般的探索:
  当资源利用率达到100%时,在综合级速度优化不可能总是产生更快的设计。事实上,面积优化实际上可以导致更快速的设计。

资源共享

  结构性资源共享也是在之前的结构设计一章中有过介绍,下面直接来看示例:

module addshare (
    input iDat1,
    input iDat2,
    input iDat3,
    input iSel,
    output oDat
);

assign oDat = iSel? iDat1 + iDat2:iDat1 + iDat3;
    
endmodule

  这个逻辑的直接实现表示在下图中:
在这里插入图片描述
  但是这个电路也可以使用综合提供的资源共享选项获得。资源共享将识别两个加法器操作为两个互不相容的事件,取决于选择位的状态,不是这个加法器被更新,就是另一个加法器被更新,综合工具则能够组合这些加法器和多路选择器其输入。
在这里插入图片描述
  在上述的实现中最大延时不受资源共享优化的影响,但是有些情况则不然,不信看下面的逻辑:

module addshare (
    input [1:0] iSel,
    input iDat1,
    input iDat2,
    input iDat3,
    output oDat
);
assign oDat = (iSel == 0)? iDat1 + iDat2:
              (iSel == 1)? iDat1 + iDat3:
              iDat2 + iDat3;
    
endmodule

  直接的映射会产生如下的结构:
在这里插入图片描述

  在这种情况下最坏的延时将是通过一个加法器和一个多路选择器的路径,由于资源共享启动,加法器被组合成如下情况:
在这里插入图片描述
  可以观察到此时关键路径扩展到三层逻辑,无论如何这实际上会影响到这个路径的时序,不仅取决于被实现的逻辑的规定,而且也与FPGA的可用资源有关。如果路径不是关键路径时,一个智能的综合工具一般将是利用资源共享,也就是运算不是在最坏条件的触发器到触发器时序路径。如果综合工具有这个能力,则这个选项几乎总是被利用。如果不是,设计者必须分析关键路径了解是否这个优化增加附加的延时。

流水线、重新定时和寄存器平衡

  在前面高速度结构设计一章中已经说过这方面的知识,下面用图来演示一下:
在这里插入图片描述
  这里想说的一点是寄存器平衡应该是应用于关键路径

复位对寄存器平衡的影响

  当有许多其他的优化时,复位可能直接影响综合工具利用寄存器平衡的能力。明确地说,如果要求两个触发器组合来平衡逻辑负载时,这两个触发器必须有相同的复位状态。例如,一个有同步复位,另一个有异步复位;或者一个有置位,另一个有复位,二者都是不能组合的,寄存器平衡不会有效果。

重新同步寄存器

  寄存器平衡会有一个问题的一个情况是在信号重新同步的区域。如图所示:
在这里插入图片描述
  如果可使寄存器平衡,跟随重新同步寄存器的逻辑可能推导这些寄存器之间,如下图所示:
在这里插入图片描述
  因为不希望对潜在的准稳态信号执行任何的逻辑操作,以及为信号提供尽可能多的时间变成稳定,重要的是寄存器平衡不影响这些专门的电路。如果可使寄存器平衡,这些电路必须被分析以保证对重新同步不存在影响。大多数综合工具有此能力限制设计防止对单个寄存器的寄存器平衡。

有限状态机编译

  有限状态机(FSM)编译指的是在RTL级自动识别有限状态机,为速度/面积约束的需要重新编码。这意味着只要利用标准的状态机结构,在RTL级的准确编码是不重要的。二进制和顺序编码将与状态表示中的所有触发器有关,因此状态编码是必须的。逻辑丰富或为译码逻辑有多个输入门的FPGA技术将最佳地实现这些状态机。使用one-hot编码,对每个状态设置一个唯一的位。采用这个编码,没有状态译码,状态机通常运行更快,缺点是one-hot编码一般要求更多的寄存器
  在异步输出和低功率器件的应用中,格雷码是one-hot编码的替代,如果状态机的输出或者状态机操作的任何逻辑是异步的,通常最好是用格雷码。这是由于异步电路不能防止竞争条件和毛刺。因此在状态寄存器中两位之间的路径不同可能引起不可预测的行为,并与布局图和寄生参数有关。考虑下面这种情形:
在这里插入图片描述
在这里插入图片描述
  看第一张图会明显看到有潜在的竞争条件,这个问题的一个解决办法就是利用格雷码,格雷码对任何转换值经历一个单个位的改变。在分析编码方案之后格雷码可以利用来安全地驱动异步输出的事实是明显的。为了构造格雷码,利用如下描述的镜像添加序列。
  1)用一个“0”和一个“1”垂直排列开始;
  2)镜像从底部数字的代码;
  3)添加“0”到代码的上半部;
  4)添加“1”到代码的下半部;

  我看到这的时候有点懵,这到底是什么意思呢?后来我发现这和之前学过的DSP中的FFT有点像,但是有细微差别,最后一位0、1、1、0镜像交替变换,倒数第二位0、0、1、1、1、1、0、0镜像交替变换,倒数第三位也是采取镜像交替变换的方法,你把它竖着排列,你就会发现相邻两个格雷码只有一位在变化。

去除不可达到的状态

  大多数状态机编译器将去除无用的状态,并且智能到足以检测和去除不可达到的状态。对于大多数应用,这将帮助优化速度和减少面积。要求保留不可达到的状态的主要应用是为在航空、军事或航天等利用高可靠电路。由于超小的几何尺寸,从太阳系或核事件辐射的例子可能引起触发器自发地改变状态。如果这种情况发生在对人类生命有关的电路中,重要的是确保寄存器状态的任何组合有快速恢复路径。如果在有限状态机中每个可能的状态没有被考虑,这样的事件可能把电路推进到不可以恢复的状态。因此综合工具常常有“安全模式”来覆盖所有的状态,甚至通过正常的操作是不可达到的状态。

黑匣子

  黑匣子在综合流程中被置放在优化模块的网表或者布局图的坐席,它包含在实现流程中较后的设计中。用黑匣子的主要问题是它不可以被综合优化,综合工具围绕它的优化有麻烦。如果综合工具中的时序引擎不知道接口的特性和黑匣子时序的进和出,它必须假设最坏情况的条件和进行相应的优化。忘了说一句,这里的黑匣子应该就是官方提供的IP核,如果说关键路径与黑匣子交会,预测的最坏条件时序是不正确的,将提供完全不正确的最大速度估计,有一种说法是黑匣子的建立和保持时间没有被定义,所以说时序是不准确的。

物理综合

  物理综合已由不同的厂商提供大量的形式,但是归根结底它是物理布局图信息用于优化综合的过程,换言之,或者提供预先的关于布局的物理估计,或者执行实际的物理布局图,综合工具将有更好的负载模型利用,能够用十分接近最后实现的信息来优化一个设计。执行预先布局的物理综合工具将前向注释布局图信息到后端的布局布线工具。在一些方面,物理综合工具在ASIC世界比用FPGA更简单,理由是因为ASIC有灵活的布线资源,延时可以基于布线的两个端点之间的距离统计地估计,在FPGA中,布线资源是固定的,有许多的布线资源(通常是芯片主要区域之间的长线)和大量较慢的布线资源(开关矩阵)来操控局部布线的拥挤
在这里插入图片描述
  上面这张图描述的是抽象布线矩阵的简化视图。从这张图可以看出有布线资源的层次,Low Skew Routing Resources(低偏移线)有长距离围绕FPGA运载带低延时信号的能力,但是仅限于沿所有逻辑元件的范围内,Local Routing Resources(局部布线资源)可以利用来连接局部资源,但是在任何距离上运载信号的能力是无效的,与相邻元件的拥挤密切相关。因此,在点A与点B之间布线的能力将与逻辑元件附近的布线资源有效性和这些资源的利用率有极大的关系。

前向注释和反向注释

  关于这一块知识我理解的不是很清楚,在网上也找不到更多的资料,只能按照书上说的尽量理解,反向注释是到时序闭环的传统路径,综合基于最后的布局布线时序信息的统计估计来实现逻辑。布局布线工具则获取这个网表,产生逻辑结构的物理布局图,然后执行时序分析,任何时序的冲突被反馈,或者到布局工具(较小的冲突一般可以用更好的布局调整),或者对主要的冲突反馈到综合工具。在后面的情形中,设计者产生约束,或者手工通知综合工具一个特定的路径需要紧缩,或者以自动的方式用更灵活的工具。
  虽然上面描述的方法一般把设计带到时序闭环,但主要的缺点是总的设计时间和缺少自动功能关闭整个环路。上面的方法迫使设计者运行工具多次,每次迭代把时序信息反馈送到综合,下面一张图显示了传统的时序闭合流程(反向注释时序冲突)。
在这里插入图片描述
  另一方面,前向注释向前传递有关设计信息,作为一组约束或物理参数,表示或定义由综合所做的假设。利用这个信息驱动后端的实现,由综合的估计会更精确,重新运行流程的需要会最小化。下面这张图显示的是前向注释布局数据。
在这里插入图片描述
  这里的关键是综合和布局紧密耦合,在达到时序闭合之前迭代次数将会十分少。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值