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

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

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

④门控时钟的处理
  我们在门级网表中加入门控时钟之后,有时候需要对门控时钟进行修修改改,比如说删除一些门控时钟之类的。下面我们就来介绍一下常见的一些门控时钟处理。
  ·重新连接门控时钟
如下图所示:
      
上面的左边图中,寄存器A由CG1触发(也就是原来由上面的门控单元CG1进行控制)。由于寄存器A距离门控时钟单元CG2更接近,我们更想让寄存器A与门控单元CG2进行连接来减少连线的长度,因此我们需要进行重新连接。重新连接后,寄存器A由CG2触发,如上面右边的图所示。上面重新连接所使用的命令如下所示:
    rewire_clock_gating   -gating_cell  CG2  -gated_objects  {reg_A}
  此外,我们可以使用rewire_clock_gating的-proximity选项,使用这个选项后,Power Compiler会自动重新连接寄存器,使时钟门控单元CG到寄存器的连线最短:
      rewire_clock_gating  -proximity


  ·重新平衡门控时钟的扇出
如下图所示:
    
  左图是原来的设计。当我们对电路进行优化时(比如使用compiler_utral -retiming 或者 optimize_registers命令),设计中的寄存器可能被移动或删除,如中图所示。
  寄存器优化后,门控时钟的扇出不平衡。而门控时钟有最小和最大扇出的约束,对于每一个单独的CG单元(如中图所示)最小扇出的条件不能满足。Power Compiler就需要相关的命令重新平衡门控时钟的扇出,使用的命令如下所示:
    rewire_clock_gating   -balance_fanout
使用上述命令后,Power Compiler将CG单元合并,以满足最小/最大扇出的约束。重新平衡后的设计如右图所示。




  ·合并门控时钟
  如果两个或以上的门控时钟单元的输人逻辑相等,它们可以被合并。合并只能在一个层次内部进行。合并后,冗余的逻辑被删除。如下图所示:
    
合并的命令为"merge_clock_gating_cells"


  ·删除门控时钟
  有时候,我们需要删除某些门控时钟,这个时候我可以使用remove_clock_gating命令。该命令即一些选项如下所示:
    remove_clock_gating
      [-gating_cells    CG_cells_list]
      [-gated_registers   gated_register_list]
      [-all]  [hier]
如下图所示:
    

上图上半部分是使用了-gated_registers这个选项,将原来的门控单元删除,换成“使能-载入”模式;上图的下半部分是使用了-gating_cells这个选项,原来的一个门控时钟删除。
  因此我们可以通过指定门控时钟单元或通过指定寄存器删除门控时钟。如果在使用删除门控时钟命令时用了开关选项“-all",当前设计中的所有门控时钟都会被删除。




⑤手动插入门控时钟
  上面介绍的是使用EDA工具,配合代码自动生成门控时钟。我们也可以以手工的方式设计门控时钟,下面是一个手动设计门控时钟的的代码例子:
assign Gated_Clock  =  Clock&Enable  ;
always@(posedge Gated_Clock or negedge Reset)begin
    if(!Reset)
          Data_ Out<=8’b0;
    else
Data Out<=Data Out+8'b1
end
对于手工门控时钟,Power Compiler将不插入时钟门控单元,也不能对它进行操作(比如重新平衡之类的)。

  手工门控时钟可以被取代,取代的脚本如下:
······
create_clock   -period   5   [get_ports   clk]
set_clock_gating_style   ...
replace_clock   -gating_cells
······
取代前后的电路如下所示:
    

取代手工门控时钟的好处在于:取代后,它可以避免产生潜在的毛刺(glitch),也可以允许在它上使用其他的CG命令。例如我们可以使用remove_clock_gating命令去掉门控时钟或使用rewire_clock_gating命令重新连接门控时钟。
   门控时钟的低功耗设计到这里就介绍完了,关于门控的STA、DFT和CTS的问题我们就不进行介绍了。


  (5)其他
  有的时候,我们不经意间就会引入多余的翻转,多余翻转就引起的多余的功耗。下面是多余翻转的例子(类似于操作数隔离):

      
  上图中,当load_out无效时,如果laod_op有效,那么数据就会进行操作,也就是存在相应的翻转。因为输出是无效的,所以这些翻转是多余的,消耗了功耗,但却没有输出。因此我们就要注意,当load_out无效时,load_op也要设置为无效,这样就可以节省部分功耗。
  对于上面的多余翻转,可以进行相应的压缩来节省功耗,如下所示:
      
sel_in同时控制了数据输入和多路选择器的输出。SEL=0时,读入A和B,选通操作1;SEL=1时,读入C和D,选通操作2;这时候就可以减少另一半操作引起的翻转,从而减少了功耗。
  对于这种数据输入,然后进行操作选择性输出的,可以进行相应的门控来减少多余的翻转,从而减少功耗。

  结合综合进行RTL级的低功耗就如上所述了,重点是门控时钟的使用和操作数隔离技术,这是我们前端设计人员需要懂的。
返回列表