9.布局种子
设计者一般不喜欢在他们的设计流程或实现工具中可能有一定程度随机性的概念。但是,注意到对于带一组约束的给定设计布局不会整体确定是重要的。换言之,对于任何给定的设计没有单个最优的布局,至少,没有可能在布局过程自身之前用当今的技术方便地确定。事实上如图16-13所示,为布局过程确定最佳的起始点,甚至对于自动布局器,这完全不是一个清楚的问题。
因此,布局工具需要类似于随机数产生过程被“播种”。一个种子的准确定义是从设计者的观点抽象的一位,但是为了有用的目的不同的种子本质上提供布局器稍微不同的起始点,布局过程的其余部分由此分支,这在图16-14中说明。
一些厂商扩展此法超出简化初始值为布局过程的其他“随机”参数的范围,例如各种约束的相对加权、预期的布局距离和估计布线拥挤等,Xilinx把这个称为“成本表”,它影响各种布局参数,但是抽象为整数(1、2、3等)。每个整数对应一组不同的起始条件和布局参数,但是因为低层次的复杂性,它被抽象为单个数字,实际功能从参数表无法看出。
调整布局种子的好处是用户可以在满足时序约束时“取另一个建立”,实际上不改变设计中任何东西。这可以用称为多行程布局和布线的过程自动化。当这个选项选择时,布局布线工具将运行实现多次,自动地在每次运行改变种子。当然这将要求大量的时间产生有效的结果,所以一般利用整个夜晚运行目标设计总是不满足可接受方式的时序约束。
需要注意的是:布局布线算法实际上完全与种子无关,各种参数的任何改变有很小的影响。一些较新的设计者运行的风险是花费大量的时间瞄准这类优化满足他们的时序约束,代替了他们设计中的真正的问题。调整布局器的种子只应该作为最后的手段,在所有的结构改变已经用完、所有的约束已经添加、时序冲突十分微小(几百皮秒或更小)的时候使用。
多行程布局和布线的种子变化只应该作为最后的手段使用。
只有当可重复性不是关键问题时,这才可以使用。如果时序紧到以致需要种子来满足时序,则RTL或约束的任何其他的改变很有可能导致设计中新的随机行为,并要求多次用种子的新变化运行布局器。因此,采用这类方法,在做了小的变化时,设计者在时序闭合中没有重复性。重复性的问题将在下一节讨论。
10.指导布局和布线
对设计者很通常的情况是花费几天或几周的时间围绕一个设计来满足时序,甚至多半利用上面描述的自动种子变化,只面对可以起伏通过已有布局的小改变和时序特性完全改变。在这一点上,设计者可能必须重新优化设计和可能寻找一个新的种子允许时序闭合。
为了避免小的改变引起逻辑元件布局多米诺效应,接着改变整个性能特性(不考虑由于小的变化重新实现每一件事情有关的运行时间),FPGA布局布线工具常常提供影响前面实现的布局布线的指导选项。
布局的指导将发现所有的元件匹配旧的实现,锁定相同位置的相同元件。这个策略的好处是运行时间惊人地减少,指导的元件的时序特性维持相同。因此,如上面描述的指导模式可以提供设计者一个手段,用布局布线过程中相应的小变化引起小的改变。
跟随小变化的布局布线过程应该利用一个指导文件最大化一致性和最小化运行时间。
11.小结
应该在任何优化发生之前产生一组完全的约束。
如果FPGA运行其中的系统设计在确定的温度和电压条件内,则FPGA时序分析可以并且应该在相同的条件下执行。
调整电压和温度设置不要求FPGA实现任何改变,可以提供一个方便的手段增量地改善最坏条件的性能。
布局努力对性能有主要的影响,而布线努力有相对小的影响。
逻辑复制应该只利用在关键路径网线,它带有不可能实际放置的多个负载。
在要求门级仿真时跨层次优化不是合乎需要的。
当封装寄存器进I/O时为高速设计可能要求额外的流水线寄存器。
设置封装因子可以帮助决定真实的利用率。
当额外的寄存器已经添加来分割布线延时,不应该利用寄存器排序。
用多次通过布局和布线的种子变化只应该利用作为最后的手段。
跟随小变化的布局布线过程应该利用一个指导文件最大化一致性和最小化运行时间。