使用VCS进行带UPF的RTL低功耗仿真

1. 两个文档

现在的VCS工具都自带了Power Aware仿真工具 VCS NLP(Native Low Power),可以进行动态的低功耗仿真(术语 PA Simulation). Synopsys的两个文档涵盖了这方面的内容。

  1. Synopsys Multivoltage Flow User Guide(smvfug).
  2. VCS Native Low Power(NLP) User Guide(vcsnlpug).

2. 创建PA仿真环境要思考的问题

   2.1 创建通用的UPF 

UPF反映了design的power intent,要用到项目开发的不同阶段,从RTL,Gate一直到P&R。所以最初创建时候要考虑到这个因素,努力创建广泛适用的UPF,尽量避免面向不同工具做不必要的修改。UPF具有良好的一致性,对项目成功帮助巨大。

现在通常使用的“Golden UPF flow”,就是在RTL阶段创建一个原始的golden UPF,随后的DC/IC工具均会在golden UPF的基础上添加更为详尽的信息。工程师在创建Golden UPF时,不仅考虑综合工具能用,也要考虑仿真工具也能用,因为这两个工具所能支持的UPF语句集合存在差异。

Golden UPF flow

要创建RTL仿真和gate仿真能复用的UPF。门级网表和RTL有很多差异,如flatten造成的hierarchy差异等,这篇文章讲了如何在些UPF时采用什么办法解决RTL/Gate的差异:

 Writing Reusable UPF For RTL And Gate-Level Low Power Verification

如在upf中使用到多bit宽信号,尽量单bit分开引用,避免到gate下找不到。以及尽可能使用find_object。

  2.2 低功耗验证的目的 

现在的SOC复杂的高,power domain划分和控制比较复杂,在开发过程中早验证早发现问题,纠错成本就愈低。

     PA RTL仿真和no-PA RTL仿真的区别:

  1. RTL仿真没有power supply port,PA有
  2. RTL仿真没有power domain状态信息,PA有
  3. RTL仿真没有完全里用模拟hard macro的电源信息,PA可以
  4. PA仿真具有的‘X-progagation’特性,可使RTL行为仿真更贴近Gate仿真结果,提前发现问题。

动态RTL PA验证,可以动态复杂系统控制模块的行为和UPF描述的power intent之间的互动,能模拟真实应用中的场景,检验RTL是否存在bug,UPF定义中有没有问题。如RTL状态机的power on/off sequence有没有问题,UPF中的isolation cell设定的clamp value正确与否,这些是UPF静态检查工具(如VCLP)所不具备的优势。

插曲,理解curruption含义:

In formal terms, ‘corruption’ denotes the temporary or permanent change of a signal from its current value to an ‘X’ value due to power disruption. —–《Advanced RTL power-aware verification》

  2.3 低功耗验证的目标 

         PA仿真可以生成覆盖率数据库,可以通过DVE/Verdi来分析覆盖率,除了测试覆盖率达标外,还要从功能上检查这些问题:

  1. 检查所有的电源状态切换都符合期望。有没有不希望的状态切换?
  2. 检查各个PD的上电/掉电序列,确保PSW控制信号,isolation控制信号,reset信号以及retention的Save&Restore控制信号的时序满足要求(如需要,写power-aware assertions)。
  3. 检查可断电的PD所有的输出信号的isolation所设定的clamp value有没有问题。有没有漏掉的output没被isolated?clamp值会不会影响系统中没断电部分的正常工作?例如AXI/AHB的ready信号如果clamp到0,就有可能会block住上电PD的正常工作。   

  2.4 Hard Macro对应的仿真模型有什么要求?

Hard Macro一般是第三方IP,其提供商都会提供HDL仿真模型文件(simulation behavior model, verlog/sv/vhdl文件),有带PG的和不带PG的。有的是两个独立文件,有的是同一个文件,通过宏定义来区分PG和No PG。RTL PA仿真需要使用带PG的仿真模型,在UPF中需要对Hard Macro的power supply进行正确连接。

sim model一般都会使用initial 块,在一般的RTL仿真中,initial块只会在仿真开始运行一次。但PA仿真时,希望initial块在所在PD每次power on时都会运行,否则sim model的行为会出现异常。在VCS中,需要在UPF中打开SNPS_reinit属性,来确保initial块多次执行。

set_design_attributes -attribute SNPS_reinit TRUE

  2.5 Test Bench需要做什么?

一般power supplies是在UPF中定义的,不出现在RTL的port list中,UPF标准提供在TB中可以开关电源的方法:supply_on/supply_off,在使用是应该首先import UPF::*。 具体可参考这篇文章:

How To Connect Your Testbench to Your Low Power UPF Models    

    注意,supply_on/off的第一个参数是目标power supply port的路径,这里一定要使用‘/’,不能使用‘.’, 否则仿真中会报warning,不会起作用。

 supply_on(“tb.u1.VDD”,1.0);

supply_on(“tb/u1/VDD”,1.0);

在TB中添加控制DUT的power supplies的代码如下:

import UPF::*;    // 在module块内外均可以
module testbench;
  ...
  always @(pwr_en) begin
    if(pwr_en)  supply_on("DUT/VDD",1.0);
     else   supply_off("DUT/VDD");
  end
  ...
endmodule

3. 用VCS进行RTL级PA仿真的步骤

   3.1  Analyze这一步和普通RTL仿真一样

    % vlogan [-sverilog] [options]  file/filelist

    % vhdlan [options]  file/filelist

   3.2 Elaboration时需要使用-upf 编译选项 

            % vcs -upf <upf filename> -power_top <module name>

Elaboration时需要使用-upf 编译选项,这样VCS工具就会自动调用VCS-NLP。

如果UPF中已经使用set_design_top知道了design top,则 -power_top 可以省略。

这里使用的upf应该是top design对应的upf,在这个upf内一般会引用其他tcl/upf文件。

    3.3 开始仿真

             % simv [options]

% simv  [options] -power power_config.tcl   #加载运行时的upf相关配置

注意这里的tcl中只能加入运行时使用的属性,例如下面这句必须在elab时加入upf中,在运行时加入不行

set_design_attributes -attribute SNPS_reinit TRUE

参考文献 


  1. Efficient Low Power Verification & Debug Methodology Using Power-Aware Simulation
  2. Writing Reusable UPF For RTL And Gate-Level Low Power Verification

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注