首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

数字IC低功耗设计入门(二)——RTL级低功耗设计(3)

数字IC低功耗设计入门(二)——RTL级低功耗设计(3)

 前面一篇博文我记录了操作数隔离等低功耗设计,这里就主要介绍一下使用门控时钟进行低功耗设计。  (4)门控时钟
  门控时钟在我的第一篇博客中有简单的描述,这里就进行比较详细的描述吧。我们主要学习门控时钟电路是什么、什么使用门控时钟、综合库里的门控时钟、如何使用门控时钟、对门控时钟的一些处理、手动插入门控时钟。我们重点介绍如何使用门控时钟和门控时钟的处理
①门控时钟概述
  门控时钟有两种方案:一种直接针对寄存器的时钟进行门控,一种对模块级别的时钟进行门控。相比之下,直接对寄存器的时钟进行门控更为灵活。因为在很多时候,我们不能保证刚好将不需要门控的寄存器与需要门控的寄存器分配在不同的模块。因此我们主要介绍寄存器级的门控时钟
=============================================================================
下图是门控时钟的一个简单电路图:
              
上述电路图中,将控制信号(EN)直接与时钟信号(CLK)进行操作,以完成门控。门控后的时钟信号GCLK送到寄存器阵列中。这样,当EN为0时,该时钟被关掉。相应的波形如下所示:
        
可以看出,如果EN信号不加控制,会导致门控时钟信号出现毛刺。时钟上的信号出现毛刺是非常危险的。所以在进行门控时,为了使门控时钟不产生毛刺,使能信号必须满足条件:它是寄存器的输出,该寄存器的时钟信号与要门控的时钟信号是相同的。由于上述原因,虽然采用这种门控方式最直接,但在实际中很少采用。
==============================================================================
为了解决这种问题,引入基于锁存器的门控时钟方案,如下图所示:
               
对应的时序图如下所示:
          
可以看到,这种方式消除了EN与CLK组合产生的毛刺对门控时钟的影响。该方法的原理在于:锁存器在CLK为低时透明。这样,EN 信号上的毛刺仅出现在CLK的低电平处,EN1与CLK进行与操作,可以将这部分毛刺消除掉。这样,GCLK上就没有毛刺了。
  不过需要注意的是,如果在电路中,锁存器与与门相隔很远,到达锁存器的时钟与到达与门的时钟有较大的延迟差别,则仍会出现毛刺,下面就来分析一下:
    
上述的右上图中,B点的时钟比A时钟迟到,并且Skew > delay,这种情况下,产生了毛刺。为了消除毛刺,要控制Clock Skew,使它满足Skew >Latch delay(也就是锁存器的clk-q的延时)。上述的右下图中,B点的时钟比A时钟早到,并且|Skew|  > ENsetup 一 (D->Q),这种情况下,也产生了毛刺。为了消除毛刺,要控制Clock Skew,使它满足|Skew|< ENsetup一(D->Q)。
常见的是第一种毛刺,不过我们可以将这个逻辑做成一个单元,这样就基本上能消除上面的那两种毛刺了,即:
          
============================================================================
  通常情况下,时钟树由大量的缓冲器和反相器组成,时钟信号为设计中翻转率最高的信号,时钟树的功耗可能高达整个设计功耗30%。加入门控时钟电路后,由于减少了时钟树的开关行为,节省了开关功耗。同时,由于减少了时钟引脚的开关行为,寄存器的内部功耗也减少了。采用门控时钟,可以非常有效地降低设计的功耗,一般情况下能够节省20%~60%的功耗。
  此外,由于门控时钟不需要用到MUX单元,加入门控时钟电路后,设计的面积也减少了。门控时钟电路的扇出越大,减低功耗和面积的效能越好。当然,扇出太大了,又会产生时序等的问题。
  门控时钟电路非常容易实现,用工具自动插入门控时钟,不需要修改RTL代码,门控时钟与工艺无关。
  这些优点本来应该放在总结处说的,这里提前进行叙述是为了能够给大家一个印象。其中低功耗的优点是通篇进行讲解的,然后降低面积和实现的问题,我们会在后面的具体实现进行讲解。


②综合库中的门控时钟模型
  前面我们说了,门控时钟可以以三种方式实现:一个与门(即不带锁存的门控时钟)、分散的锁存器+与门、集成的锁存器+与门。在综合库中,与门、锁存器是基本逻辑单元,因此可以构成门控时钟。此外,综合库中还专门提供了集成的门控单元。一般情况下,我们使用的是集成的门控单元,因为这个门控单元是对Skew作了控制,不存在前面描述的毛刺问题。
  一个示例的  综合库中的时钟门控单元描述如下所示:
(该综合库模型中,E为门控信号;CK为时钟信号;ENL是锁存器输出;ECK为对输出门控后的时钟信号;statetable描述了该门控单元中内部锁存器的功能。该单元的其他内容描述就不具体描述了,我在Tcl与Design Compiler这个分类的博客里面有对综合库进行具体的介绍。)
          
              





③门控时钟实现
  我们要实现门控时钟,首先就得从RTL代码中进行设置。在RTL代码中将需要门控的寄存器写成“载入-使能”的形式,如下所示:
      always  @(posedge CLK)
         if (EN)
          Q <=D;
上述代码中,如果EN有效,则寄存器在时钟上升沿采样数据,否则保持原值。一般情况下,综合会得到下图右上角的电路,而插入门控时钟的电路为下图右下角的电路:
    
上图的典型综合结果中(即不使用门控时钟的情况),在每个受EN使能控制的寄存器之前加入了一个MUX,当EN信号有效时,寄存器锁存输入信号D;否则保持原值。这种方法也能减少寄存器上的翻转,因而节省翻转功耗。然而,这种“载入一使能”结构中,每个寄存器都有一个MUX,假设MUX面积为4,则8位寄存器需要增加的面积为32。面积越大,意味着芯片成本越高,而且整体的功耗也会增加。另外,这种方式不能消除时钟树上的功耗。
对于右下角的门控时钟形式的综合电路,假设一个门控逻辑的面积为10,一个门控时钟信号可以驱动8位寄存器,则在门控时钟电路中,对每8个寄存器需增加一个门控逻辑,增加的面积为10。由此可以看到,门控时钟的电路比普通综合结果的面积更小、功耗更低。
=============================================================================
  鉴于门控时钟的优点,我们需要把普通的综合结果“转换”为门控时钟的结果,我们主要是通过DC的power compiler来自动实现的。我们主要通过命令来设置门控时钟的风格和通过命令“启动”插入门控时钟。综合工具根据我们所设置的时钟门控的风格,插入相应的门控逻辑。因此,门控时钟的实现主要有两步,一步是设置门控时钟的风格,通过命令set_clock_gating_stale 及其选项来实现;另一步就是在网表中加入门控时钟,通过命令insert_clock_gating来实现。下面我们就来介绍一下这两个设置,由于命令在不同版本的DC中有所不同,命令的具体选项就可能不一样,这里就只介绍一些常用或者说是可能用到的选项。
==============================================================================
返回列表