FPGA中时序违例的解决方法_vivado综合后保持时间为例怎么办
建立时间时序违例的解决方法
导致建立时间时序违例一般是,①扇出(Fanout)过大;②逻辑级数(Levels)过大。
扇出过大
FPGA支持的最大扇出和器件型号、运行频率有关。
减低扇出的方法:
①尽量将高扇出信号端口以寄存器形式输出,让vivado工具帮助自动进行复制与优化;
②对于wire变量可以设置(max_fanout=n);
③如果是复位信号的高扇出
1)对使能信号复位,对数据信号和延迟打拍信号尽量不复位;
2)可以用BUFG驱动复位信号。
逻辑级数过大
最简单的方法就是多插寄存器,增加流水线级数,打断过长的组合逻辑路径
保持时间时序违例的解决方法
保持时间时序违例一般是异步处理问题,对于一个信号的跨时钟域问题,一般使用双寄存器法,为了降低MTBF(Mean Time Between Failures,平均无障碍时间),这两个寄存器最好位于同一个slice中,直接在代码指定,如下:
(* ASYNC_REG = “TRUE” ) ( keep = “true” *)reg sync0_reg, sysnc1_reg;
Vivado工具的策略选择
①implementation阶段勾选上Post-Place Phys Opt Design和Post-Route Phys Opt Design。
其中Post-Place Phys Opt Design:对时序违例的路径进行优化
Post-Route Phys Opt Design:通过实际的布线延时值进行逻辑,布局,布线优化
②可以在Strategy中选择策略,策略种类繁多,除了Default,可以选择Performance_Explore来对时序进一步优化,如果在Place阶段时序已经收敛,但是Route阶段不收敛,可以选择Performance_NetDelay_high,来进一步对布线资源进行优化。