关于时序优化的方法

时序优化:
优化是让设计获得更高的工作频率,也就是FPGA通常说的性能和吞吐率。

时序约束:
主要用于规范设计的时序行为,表达设计者期望满足的时序条件,指导综合和布局布线阶段的优化算法。

约束的作用:
提高设计的工作频率,对于很多数字电路设计来说,提高工作频率非常重要,高工作频率意味着高处理能力;通过附加时序约束可以控制逻辑的综合、映射、布局和布线,以减少逻辑和布线延时,从而提高工作频率;获得正确的时序分析报告。

时序优化的方法:

  1. 插入寄存器减少组合逻辑层数
    不宜在一个寄存器前放置过多的组合逻辑,如果一个功能涉及的组合逻辑过于复杂,最好是将组合逻辑较均匀的分布在各个寄存器前面。
  2. 逻辑展平设计
    逻辑展开(Flatten Logic Structures)。里面应该包含了连个知识点。第一是逻辑复制,特别是针对大扇出(详情在altera的官方视频资料中有提到),通常使用generate或者是在综合器中设定。第二个是消除代码中的优先级。这里需要多说一句:现在的工具很智能,就算你写成if else 有优先级的结构,有时候也能综合出并行结构。如果并行也符合你的设计要求,为了安全起见,最好还是写成case这种并行结构比较好。
  3. 合理放宽时序约束
    1.) 当芯片设计中有多个时钟域时,对于那些通过FIFO隔开的时钟域之间,并不需要有太严格的约束。
    2.) 如果这些不相关的异步时钟是通过同一个MMCM产生的,如果不对这些异步时钟单独约束,那么按照软件的默认行为,这些异步时钟之间的路径是按同步路劲的分析方法进行分析的。这种默认行为的结果就是,一些不应该那么严格约束的路劲被过约束了。
    3.) 针对这种现象,一种可行的方案是:对同一个MMCM输出的多个异步时钟分别进行时序约束,并且只需约束两时钟域之间异步线路的最大布线延迟,而不需将异步线路中时序逻辑与LUT的响应时间纳入时序约束的范围。
    4.) Tip3中提及的时序约束方案的示例如下:
    NET “CLKA” TNM_NET = “GRP_A”;
    NET “CLKB” TNM_NET = “GRP_B”;
    TIMESPEC TS_Path_A_B = FROM “GRP_A” TO “GRP_B” 5 ns DATAPATHONLY;
  4. 寄存器平衡 (Register Balancing)。
      寄存器平衡就是在你的关键路径中移动你的寄存器。第一就是你手动移动 —— 改代码。第二就是设定综合器让它自己移动 —— 不到万不得已不这么干,因为这么多导致代码移植性变差。
  5. 均衡设计
    均衡设计的思想是把 Critical Path 上的组合逻辑拿出一部分放在 short path 上进行,从而缩短 Critical Path 的延迟。参考链接
  6. 路径重组(并行化设计)
    并行化设计的思想是将一个逻辑函数分解为几个小一些的逻辑函数并行计算,从而减少关键路径上的延迟 。优化设计结构,缩小关键路径,串行变并行,需要很好的硬件设计知识。
  7. 时序优化的迭代技巧
    1.)需要对原有架构、规格、关键电路非常熟悉。
    多次实践证明不清楚原有设计的情况下做出的方案,往往只会越改越烂。判断是否熟悉的标准是能够讲清楚整个模块代码->能够自己画出整个微架构->能够提出有效的PPA优化方案。其实指一条经验是并不特指高频设计,是做好设计的基本功,缺陷率高同学往往问题就出现在这里。
    2.)建立把代码通过人脑转化成电路的能力。
    verilog描述的就是电路,时序优化也是在电路上进行精简。这个技能我认为掌握了本科的数字电路课程就可以做到,加法器、锁存器、比较器、多路选择器、布尔表达式化解等。另外对for循环展开、if esle分支、按位运算等常见写法进行电路转换。写代码时需要能感知Critical path,并算出其大概的逻辑级数。
    3.)可以考虑关键微架构打散重构。
    时序优化不动微架构可能走不太远。
    4.)对多级Pipeline进行调整和规划。
    流水线上每一级的逻辑都要均匀和紧凑,遇到关键路径是要往前和往后看是否有余量可以借用。下面是一种向前借余量的范例,我们内部俗称追拍。
    5.)在性能与时序之间trade off。
    在时序优化过程中常用的一种手段就是牺牲部分非关键场景的性能,敢于牺牲一些边缘场景的性能。
    6.)时钟Gating专项优化,时序与门控精度的trade off。
    我优化的模块的一个典型的特点是低功耗要求很高,几乎所有Always块都会有综合自动生成的时钟门控。由于时钟树长差异和Setup要求更严,时钟门控的E端时序要求比D端时序更加恶劣。所以写Always块的时钟门控时,对时序的考虑需要更加精细,E端的逻辑级数要求比D端少8级左右。
    7.)优先朝着根节点进行时序优化。
    每一次优化都尽可能找到路径靠近起始位置去优化,让一次优化影响面更广,优化收益更大。提高系统运行速度。
    dc约束

参考链接:

  1. FPGA时序约束
  2. 时序优化的若干策略
  3. FPGA中改善时序路径的方法
  4. RTL时序优化的迭代技巧
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
FPGA时序优化方法是为了提高FPGA设计的性能和可靠性,以确保电路在硬件上可以按照预期的时序工作。以下是一些常见的FPGA时序优化方法: 1. 时钟分频:将高频时钟分频为低频时钟,以减少电路的工作频率,提高时序容限。可以通过使用PLL或DCM来实现时钟分频。 2. 时钟缓冲:在FPGA设计中使用时钟缓冲可以减小由于时钟信号在跨越长距离线路时引起的延迟。 3. 状态机优化:通过优化状态机的设计,减少状态转换的复杂度,改善时序延迟。 4. 时序约束:对于复杂的FPGA设计,时序约束可以指定电路的最大时延、最小时延等要求,帮助FPGA综合工具生成更为准确的电路布局和时序。 5. 逻辑路径优化:通过优化逻辑路径,例如重新分配逻辑元件、减少逻辑深度等,来减小时期延迟。 6. 硬件资源分配:合理分配FPGA的硬件资源,如布线中的查找表、寄存器等,有助于改善时序性能。 7. 前端设计优化:在FPGA设计的早期,通过合理的前端设计,包括选择合适的算法、控制电路和数据通路等,可以减小后期时序优化的难度。 8. 时钟域分区:将FPGA设计划分为多个独立的时钟域,通过使用时钟域互联器件等方式,减少时序冲突。 综上所述,FPGA时序优化方法包括时钟分频、时钟缓冲、状态机优化时序约束、逻辑路径优化、硬件资源分配、前端设计优化和时钟域分区等。通过这些方法的应用,可以改善FPGA设计的时序性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值