时序优化的几种方法-IC学习笔记(七)

时序一般是指一个设计的时钟速度,一个设计中的任何两个时序单元之间最大延时将决定这个设计的最大时钟速度。在进行设计构想时,就可以提前考虑时序,越顶层的优化所起到的收益越大。下面总结了一些思路,对于设计水平提高有帮助。

1.1 ASIC 设计时序优化方法
  1. 1、主要方法是通用设计“场景化”,减少不会用到的通用设计特性逻辑。

  2. 优化时序的策略是在关键路径中插入寄存器。这种技巧一般多用于高度流水的设计中,因为在这种设计中额外插入寄存器增加的时钟周期延迟并不会违反整个设计的规范要求,从而不会影响到设计的总体功能性实现。相对来说乘法操作非常适合流水,因为乘法运算易于被分开成多级运算。所以通过额外插入寄存器可以将乘法分开成多级流水实现。

  3. 串行逻辑进行并行化处理。关键路径表达式变化为积之和或和之积形式。

  4. 逻辑展开(Flatten Logic Structures),展平逻辑结构。第一是逻辑复制,特别是针对大扇出,通常使用generate或者是在综合器中设定。第二个是消除代码中的优先级。最好写成case并行结构比较好。

  5. 寄存器平衡 (Register Balancing)。寄存器平衡就是在关键路径中移动寄存器。通过将某些时序紧张的stage的部分逻辑前移或者后置,进行WNS的balance。

  6. 寄存器重组,这是最有意思的一个方法,也是体现设计水平的方式。下面给出实例。

    第一版
    1 module randomlogic_1(
     2     output reg [7:0] Out,
     3     input [7:0] A, B, C,
     4     input clk,
     5     input Cond1, Cond2);
     6 always @(posedge clk)
     7     if(Cond1)
     8         Out <= A;
     9     else if(Cond2 && (C < 8))
    10         Out <= B;
    11     else
    12         Out <= C;
    13 endmodule  
    第二版
    1 module randomlogic_2(
     2     output reg [7:0] Out,
     3     input [7:0] A, B, C,
     4     input clk,
     5     input Cond1, Cond2);
     6 
     7 wire CondB = (Cond2 & !Cond1);
     8 
     9 always @(posedge clk)
    10     if(CondB && (C < 8))
    11         Out <= B;
    12     else if(Cond1)
    13         Out <= A;
    14     else
    15         Out <= C;
    16 endmodule
    

    从代码上来看2版好像还比第一版路径更长,因为 out <= B,的路径从 Cond2 && (C < 8) 变成了 (Cond2 & !Cond1) && (C < 8)。实际上发现2版的关键路径真的比1短。

    img

    img

    第2版的路径比第一版的关键路径少一个器件,这种做法从代码上看不出来。需要更高的硬件知识。

  7. 优化verilog的写法。主要是选择逻辑的写法,选择逻辑一级AOI会比一级MUX时延短。比如二选一情况下,if-else或者assign s=c?a:b会综合出MUX,建议使用assign s=c&a | !c&b。读选择逻辑最好不要使用a[index]索引写法。

  8. 对于fanout比较多的信号,低压后期可能有buffer插入,一级buffer两级逻辑需注意。

1.2 FPGA 设计时序优化方法
  1. 异步, 划分不同时钟域:比如系统主体可以工作在100M,特定的子系统要求必须工作在300M+,那么可以将特定模块划分到不同的时钟域里;但异步时钟域不宜太多。
  2. 综合时使用retiming,duplication;physical synthesis优化。
  3. 预算允许可使用速度更快的芯片;这个也许是实现 “不修改RTL又时序收敛” 的最可能的方式。
参考文档

【1】几个FPGA时序优化简单技巧

【2】第一章 时序优化

【3】FPGA中改善时序性能的方法_advanced FPGA design

【4】IC基础(三):设计中常用的时序优化方法

【5】【FPGA——时序篇】时序优化的几种方法

【6】FPGA时序优化的几种方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Paul安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值