1、好的代码风格
1)代码要跟器件结构相关
2)避免异步复位,异步复位同步化,全局复位局部化
3)层次的边界要加流水寄存
\quad
例如:BRAM中有两级register,第一级在内部,第二级在外部slice里的寄器。不同功能模块内部的寄存器要求的速度也不一样,不同位置的寄存器速度不一样。如ILOGIC中的寄存器对setup要求最高(寄存器最慢),OLOGIC中的寄存器对setup的要求最低(寄存器最快)。Slice中的寄存器速度最快,所以经常在mem,clock模块输出端增加一个slice的register。
4)Block RAM和DRAM的选择
\quad
根据应用需求适当选择
4)流水线技术是提高系统频率的一种方法
2、精准的时序约束
\quad
精简而准确的约束是时序收敛的必要条件,Baseline基线方法是充分条件。
1)检查时序约束命令:
\quad
check_timing
2)小技巧:
\quad
如果约束过紧可以用以下命令:
\quad
set_clock_uncertainty –setup 0.3 [get_clocks my_CLK]
3、管理高扇出网络
\quad
高扇出网络几乎是限制FPGA设计实现更高性能的第一大障碍,所以需要严肃对待设计中的高扇出。
1)查找最大的扇出网络命令:
\quad
Report_high_fanout_nets –load_types –max_nets 2 –timing
2)约束高扇出网络命令
\quad
max_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:伪时钟路径约束
\quad CDC结构问题检查
report_cdc
methodology_checks
\quad 跨时钟域问题检查
report_clock_interation
\quad 查看时钟网络
report_clock_networks
6、少而精的物理约束
\quad
万不得已的时候 不要手动布局LOC,如果要做也是对关键元件关键路径做。
7、选择恰当的策略
\quad
不同的工程包含不同的设计策略:性能、功耗、面积、流程
\quad
可以制订自己的策略,如:利用钩子文件,在设计前设计后调Phys_opt_design
8、共享控制信号
1)尽量整合频率相同的时钟和时钟使能信号;
2)在生成IP时选择“共享逻辑”功能,则可以在不同IP间尽可能的共享时钟资源;
3)复位
\quad
a) 尽量少使用复位
\quad
b) 必须复位时采用同步复位
\quad
c) 用高电平有效复位
\quad
d) 避免异步复位
4)常用命令
\quad
report_control_sets
9、读懂日志和时序报告
1)注重critical warnings 和 errors
2)检查DRC violations
\quad
methodology_checks
\quad
timing_checks
3)设计分析报告
\quad
Report_design_analysis(非常有用)用来报告关键路径上的潜在问题以及设计的拥塞程度。
10、充分发挥tcl的作用