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

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

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

在执行insert_clock_gating命令前,我们一般先使用set_clock_gating_style命令来指定要插入门控时钟电路的结构(或者说是插入门控时钟的风格)。下面我们就来介绍一下使用这个set_clock_gating_style命令可以进行插入哪些门控时钟电路结构。  ·-sequential_cell 选项设置是否采用基于锁存器的风格。因为我们的门控时钟有三种形式(不适用锁存器的与门,基于锁存器+离散与门,集成的锁存器+与门),因此就要指定使用哪一种形式:
A:基于锁存器的离散门控单元是默认值,可以通过下面的命令来设置:
    set_clock_gating_style   -sequential_cell  latch
B:不使用锁存器的门控单元,可以通过下面的命令来设置:
    set_clock_gating_style   -sequential_cell  none
C:使用集成的门控单元则不需要使用这个-sequential_cell来设置了,因为-sequential_cell 选项设置是否采用基于锁存器的风格。使用集成的门控单元直接设置参数就可以了,例如可以通过下面的命令来设置使用集成的门控单元:
    set_clock_gating_style    “integrated”
一般推荐使用集成门控这种方式。


  ·-positive_edg_logic选项(简写为-positive或-pos)设置在RTL代码中用上升沿锁存的寄存器(也就是上升沿沿触发的寄存器)采用何种门控逻辑。
     -negative_edg_logic选项(简写为-negative或-neg)设置在RTL代码中用下降沿锁存的寄存器(也就是下降沿触发的寄存器)采用何种门控逻辑。
例如下面的命令:
    set_clock_gating_style  -sequential_cell  none  -pos  “or”
该命令设置了不适用锁存器的风格,然后对于上升沿触发的寄存器,其门控单元使用或门逻辑构成。

    set_clock_gating_style  -neg “integrated”
该命令置在RTL代码中用下降沿锁存的寄存器(也就是下降沿触发的寄存器)使用集成门控时钟单元。

    set_clock_gating_style -positive  “integrated”  -negative “integrated”
该命令设置RTL代码中,无论你的寄存器是上升沿触发还是下降沿触发,控制该寄存器的时钟单元都是使用集成门控时钟单元。


  ·-minimum_bitwidth 选项用于设置进行时钟门控的寄存器阵列的最小宽度。对于宽度小于该设置的寄存器阵列,不进行时钟门控;然而当电路由有公共使能时,会对电路进行分解进行集体门控。例如下面的命令作用与下面的电路:
    set_clock_gating_style  -minimum_bitwidth  4
    
上述命令意味着一个门控时钟至少要触发4个寄存器。左图中有3个寄存器组,每组只有3个寄存器,不能满足至少要有4个寄存器的要求。因此,对于每个组的寄存器,不能用门控时钟。然而,所有的3个寄存器组,都有1个公共的使能信号”a”,我们可以把它分解出来作为控制时钟的门控信号。这样一来,信号“a”控制9个寄存器,它满足最少要触发4个寄存器的要求。因此将上面的命令约束上面左边的电路时,综合得到结果就会成为右边有门控时钟的电路。

  ·-num_stages选项用于设置一个多级门控的级数。在有些设计中,顶层的门控信号会分解成不同的子门控信号。在缺省情况下,仅对跟寄存器阵列相连的门控制信号生成门控逻辑。例如对于下面的电路图:
            
在这个例子中,全局门控信号EN分别跟a,b,c信号组合,然后驱动不同的寄存器阵列。缺省情形下(set_clock_gating_style命令的默认设置为“num_stages”等于“1",缺省时也为1),跟寄存器阵列相连的门控信号   由门控单元给出。
  由于所有的3个寄存器组都有1个公共使能“a",它可以被分解出来产生1个额外(级)的门控时钟单元。在set_clock_gating_style命令加选项“-num_stages 2",就可以产生下图所示的两级门控时钟:
          

使用多级门控时钟,时钟综合器可以尽量地摆放门控时钟单元,使它靠近时钟源,从而最大限度地降低时钟树的功耗。


  ·-control_point与-control_signal选项跟DFT有关,用于设置该门控单元在DFT时是否可控,DFT控制信号是scan-enable还是test-mode,以及DFT控制信号与EN信号的组合逻辑是放在门逻辑中的锁存器之前还是之后。通常,将DFT控制信号与EN信号进行操作,这样在DFT时,可以控制该门控逻辑。例如下面的命令约束:
    set_clock_gating_style  -control_point  before  -control_signal test_mode


  ·-observation_point选项跟DFT有关,用于设置是否要插入观测逻辑,以便在DFT时能看到门控逻辑内部的信号。
例如下面的约束命令:
    set_clock_gating_style   -observation_point  true
则设置插入观测,逻辑,如下图所示:




  除了上述选项外,该命令还有一些其他的选项设置,比如-setup选项设置建立时间约束。-hold选项设置保持时间约束。-observation_logic_depth选项用于设置观察电路中异或门的数目。-max_fanout选项设置一个门控单元所驱动的最大负载数目,定义CG单元最大扇出的一个目的是减少CG后面的时钟延迟,门控时钟单元的扇出越大,它到达寄存器的延迟越长;此外,还有用来约束重新平衡(后面会有对重新平衡进行介绍)。"set_clock_gating_style"命令有很多选项,我们可以在Power Compiler用"man  set_clock_gating_style"命令来查看其详细的使用方法。
==============================================================================
  设置了门控时钟的加入风格之后,我们就可以设置在门级网表电路中加入门控时钟。在Power Compile:里,用insert_clock_gating命令可在GTECH网表上加入门控时钟。这个命令可以单独使用,也可以配合一些选项,设置一些功能,我们下面主要介绍一下-global选项。
我们来看一下下面这段代码:
    always @ (posedge clk)begin
        if (a && b) q=d;
    end
当有多个模块都有这段代码时,单单利用insert_clock_gating命令就会得到下面的带门控时钟的电路:
             
上述电路中,有两个模块都有门控时钟,都是同一个控制信号。那么我们就可以使用insert_clock_gating  -global选项,让门控时钟可以穿越层次结构,插入到设计中。这样一来,既可以省门控时钟,又可以省面积。使用该选项后,综合得到的带门控时钟的电路如下所示:
              
因此使用insert_clock_gating加选项“-global",可以使门控时钟穿越层次结构。如果不用选项“-global",在每个模块里有一个门控时钟单元。
  实现门控时钟的方法就如前面所示,主要是设置门控时钟的风格和加入门控时钟这两个命令以及他们的一些选项。
返回列表