1、好的代码风格
1)代码要跟器件结构相关
2)避免异步复位,异步复位同步化,全局复位局部化
3)层次的边界要加流水寄存
\quad例如:BRAM中有两级register,第一级在内部,第二级在外部slice里的寄器。不同功能模块内部的寄存器要求的速度也不一样,不同位置的寄存器速度不一样。如ILOGIC中的寄存器对setup要求最高(寄存器最慢),OLOGIC中的寄存器对setup的要求最低(寄存器最快)。Slice中的寄存器速度最快,所以经常在mem,clock模块输出端增加一个slice的register。

FPGA开发之时序收敛10个小技巧_寄存器

4)Block RAM和DRAM的选择
\quad根据应用需求适当选择

FPGA开发之时序收敛10个小技巧_寄存器_02

4)流水线技术是提高系统频率的一种方法

FPGA开发之时序收敛10个小技巧_异步复位_03

2、精准的时序约束
\quad精简而准确的约束是时序收敛的必要条件,Baseline基线方法是充分条件。

1)检查时序约束命令:
\quadcheck_timing
2)小技巧:
\quad如果约束过紧可以用以下命令:
\quadset_clock_uncertainty –setup 0.3 [get_clocks my_CLK]

3、管理高扇出网络
\quad高扇出网络几乎是限制FPGA设计实现更高性能的第一大障碍,所以需要严肃对待设计中的高扇出。

1)查找最大的扇出网络命令:
\quadReport_high_fanout_nets –load_types –max_nets 2 –timing
2)约束高扇出网络命令
\quadmax_fanout可以限定其扇出值,让工具在实现过程中复制驱动端寄存器来优化。也可以多次物理优化phys_opt_design改善扇出。

4、层次化设计结构
\quad自底向上的设计流程

5、跨时钟域路径的设计和约束
1)缺省模式下所有时钟域都是related
2)同步时钟跨时钟域
\quad拥有相同的源和确定的相位关系
3)异步时钟跨时钟域
\quad源不相同,没有确定相位关系
\quad简单的处理方式:双register(ASYNC_REG),FIFO,握手方式同步
4)常用的约束命令
\quad时钟约束

set_multicycle_path:多时钟路径约束
set_clock_groups:时钟分组,等效set_false_path
set_false_path:伪时钟路径约束
1
2
3
\quadCDC结构问题检查

report_cdc
methodology_checks
1
2
\quad跨时钟域问题检查

report_clock_interation
1
\quad查看时钟网络

report_clock_networks
1
6、少而精的物理约束
\quad万不得已的时候 不要手动布局LOC,如果要做也是对关键元件关键路径做。

7、选择恰当的策略
\quad不同的工程包含不同的设计策略:性能、功耗、面积、流程
\quad可以制订自己的策略,如:利用钩子文件,在设计前设计后调Phys_opt_design

8、共享控制信号
1)尽量整合频率相同的时钟和时钟使能信号;
2)在生成IP时选择“共享逻辑”功能,则可以在不同IP间尽可能的共享时钟资源;
3)复位
\quada) 尽量少使用复位
\quadb) 必须复位时采用同步复位
\quadc) 用高电平有效复位
\quadd) 避免异步复位
4)常用命令
\quadreport_control_sets

9、读懂日志和时序报告
1)注重critical warnings 和 errors
2)检查DRC violations
\quadmethodology_checks
\quadtiming_checks
3)设计分析报告
\quadReport_design_analysis(非常有用)用来报告关键路径上的潜在问题以及设计的拥塞程度。

10、充分发挥tcl的作用