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

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

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

②OI的物体选择
  OI并不是什么时候都可以进行使用的(也就是说不是所有的对象(物体)都符合操作数隔离的要求)。此外操作数隔离主要是:满足一定条件下,通过指定操作数隔离的物体来实现的;指定操作数隔离的物体可以通过EDA工具自动执行(我们一般使用这种方法),也可以通过我们手动进行。下面我们就分别介绍一下这两种方式。
  ·EDA工具自动指定操作数隔离的物体
默认情况下,如果操作数隔离的物体满足下列条件,Power Compiler自动选择它(们):
  1.OI物体是算术运算器或层次组合单元。
  2.OI物体的输出是选择性地使用。
  3.运算器必须有非零的翻转率。
  4.仅当工具进行功耗估算后,用操作数隔离具有潜在的功耗可节省,才把它(们)作为OI物体。
自动进行操作数隔离的脚本如下:
set  do_operand_isolation    true
set_operand_isolation_style
read_saif  
……
compile

  ·手动指定操作数隔离的物体
除了使用EDA工具自动选择IO物体,我们也可以手动进行指定,然后进行操作数隔离。手动完成操作数隔离大致可以分为两步:
A:设定操作数隔离的风格为手动(用户自定义模式):
  在约束脚本中加入下面的命令,说明是使用手动的方式指定IO物体:
    set_operand_isolation_style  -user_directives

B:手动指定IO物体:
 手动指定IO物体有下面两种方式:
  1.用命令指定OI物体:set_opreand_isolation_cell,例如:
    set_operand_isolation_cell  [get_cells   U1]
  2.在RTL代码中加综合指引(pragma)
    例如:下面的RTL中加入了综合指令“//synopsys_isolate_operands":
          if(c2 == 1’b1)
            o  = a + b ;
          else
            o  = c + d ; //synopsys_isolate_operands

完成前面A、B两步的设置之后,在使用compile命令进行综合时,如果手动指定的IO物体满足前面的三点:
  1.OI物体是算术运算器或层次组合单元。
  2.OI物体的输出是选择性地使用。
  3.运算器必须有非零的翻转率。
那么综合器就会进行操作数隔离。

③操作数隔离的范围
  有些时候,我们需要在整个设计中指定某些模块要做操作数隔离,某些模块不要做操作数隔离。这时候我就可以使用set_operand_isolation_scope命令来实现了。例如下面的分层模块中:
            
我们只对SUB2模块中的操作数做隔离,其他的模块不做操作数隔离,那么就可以使用下面的示例脚本:
  set_operand_isolation_scope   [get_designs   tops]   false
  set_operand_isolation_scope   [get_designs   sub1]   false
  set_operand_isolation_style
  ······

④隔离逻辑的设置
  实现操作数隔离需要插入相应的隔离逻辑,比如与门或者或门之类的。这些逻辑可以由EDA自动选择,也可以由我们自己手动指定。下面就来介绍这两种方式。
  ·默认的EDA工具选择
 默认情况下,隔离逻辑由工具自动选择。工具根据输入数据连线的静态概率(SP)来选择适合的隔离逻辑为“AND'’门或“OR”门。使用的命令如下所示:
        set_operand_isolation_style   -logic   adaptive
如果SP > 0.5,选择“OR”门作为隔离逻辑
如果SP < 0.5,选择“AND”门作为隔离逻辑

  ·手动
 我们可以手工地选择隔离逻辑,例如下面命令指定用“AND”门作为隔离逻辑:
        set_operand_isolation_style   -logic   AND

  通过前面的描述,我们知道操作隔离的实现可以通过EDA全自动化实现,也可以通过我们指定OI物体的半自动化实现。完成操作数隔离后,我们可以用命令报告设计中的操作数隔离,例如:
    report -operand_isolation  -isolated  -verb命令显示如下的信息:
            
             
              

⑤操作数隔离的复原
   加入隔离逻辑之后,如果时序变差达到不能满足要求的情况,我们就要复原原来的逻辑。复原的方法也是有自动和手动的方法。
  ·自动
 一般情况下,如果加了隔离逻辑后,设计的时序变差了,即当WNS(worst negative slack)大于指定的slack时,EDA工具会使设计自动复原到原来没有操作数隔离的状态。例如下面的脚本适用于如果WNS大于0. 5时,设计自动复原到原来的状态:


  ·手动
 我们也可以用手工的方法复原操作数隔离。用手工的方法进行操作数隔离的复原是在指定的时序路径上删除OI逻辑。这时候不考虑slack。需要执行增量编辑去删除OI逻辑。




最后,提供一个完整的加入操作数隔离的示例脚本,如下所示,使用了默认的隔离逻辑类型操作数隔离的自动恢复

返回列表