FPGA/ASIC技术
一个好的FPGA设计一定是包含两个层面:良好的代码风格和合理的约束。时序约束作为FPGA设计中不可或缺的一部分,已发挥着越来越重要的作用。毋庸置疑,时序约束的最终目的是实现时序收敛。时序收敛作为 FPGA设计的重要验证手段之一,是保证FPGA正常工作的必要条件。那么当时序无法收敛时我们应该采取怎样的措施呢?
首先需要明确一点,与ISE有显著不同,在Vivado中综合是时序驱动的综合,综合后的时序报告是可信的,因此要在综合之后就开始阅读时序报告,进行时序分析。
如下图所示,总体而言,在综合之后,如果时序未收敛(可以有-300ps的slack),那么此时所能做的就是优化代码或者相关的模块,还有就是优化约束。这时更多关注的是代码风格引发的问题。这和UltraFAST设计方法学的理念是一致的,尽可能地尽早发现潜在的问题,在设计前端把问题解决掉。在生成综合后的时序报告时,有一个选项值得大家注意,如下图红色标记所示。为了发现关键路径(Slack最差的路径)可以将Interconnect设置为none,意味着相应的线延迟为0,这时就只有门级延时(本身综合后的网表就只有门级延时)。
布局布线后如果时序未收敛,可采取的措施更多的关注于相应的布局布线策略以及时序约束的合理性,可见,此时我们所能采取的措施相对单一一些,尽管也可以重新优化RTL代码,但需要重新综合、布局布线,必然费时费力。因此,在开始FPGA设计时最好遵循UltraFAST设计方法学所提供的设计理念,在写代码时做到心中有时序目标。
良好的代码风格可以确保综合后网表的高质量。因此,在写代码时要注意:
(1) 合适的复位:对于复位要遵循“全局复位局部化,异步复位同步化”的原则;
(2) 尽可能少的控制集:控制集由CLK、CE、RST构成,控制集种类过多会导致触发器分散到不同的SLICE中,导致线延时过大,同时也降低了资源的利用率;
(3) 避免使用锁存器:锁存器会导致触发器资源浪费,因此,可将锁存器转换为带使能的触发器;
(4) 与器件结构相匹配的代码描述:例如Xilinx 7系列FPGA中的触发器是高有效,那么代码描述时也要采用高有效,以使描述对象能够很好地映射到目标器件中。
时钟的FPGA设计中必然会用到的资源,规划好时钟的个数以及时钟之间的关系至关重要,这直接决定了时钟资源的利用率。显然,时钟个数过多会给时序收敛带来一定挑战。
(1) 确保合理的时钟约束,通过report_clock_networks查看约束对象是否为root clock,通过report_clock_interatcion来查看时钟之间的关系;通过report_cdc来查看跨时钟域之间的路径约束是否合理;
(2) 多周期路径与伪路径约束越少越好;
如果线延时过大,可通过两种方法来降低线延时:代码优化和手工布局。
Vivado提供了五大类实现策略,同时支持运行多个Implementation,如下图所示。因此,在Vivado中尝试不同的策略将变得非常容易。
全部0条评论
快来发表一下你的评论吧 !