使用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).

                                本博客所有文章均同步发表于www.mx1980.cn/blog

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仿真的区别:

              ① RTL仿真没有power supply port,PA有

              ② RTL仿真没有power domain状态信息,PA有

              ③ RTL仿真没有完全里用模拟hard macro的电源信息,PA可以

              ④ 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来分析覆盖率,除了测试覆盖率达标外,还要从功能上检查这些问题:

             ① 检查所有的电源状态切换都符合期望。有没有不希望的状态切换?

             ② 检查各个PD的上电/掉电序列,确保PSW控制信号,isolation控制信号,reset信号以及retention的Save&Restore控制信号的时序满足要求(如需要,写power-aware assertions)。

             ③ 检查可断电的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

     更多细节,可以参考“Power Aware Libraries:Standardization and Requirements for Questa Power Aware

  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

       

                本博客所有文章均同步发表于www.mx1980.cn/blog

参考文献 


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

 

  • 12
    点赞
  • 151
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Verilator和VCS都是常用的硬件描述语言(HDL)仿真工具,它们可以用于单独的仿真,也可以进行联合仿真。 联合仿真的基本步骤如下: 1. 使用Verilator将Verilog代码编译为C++代码。 2. 在C++代码中添加对VCS的调用。 3. 使用VCS编译C++代码和其他Verilog模块的源代码。 4. 运行联合仿真。 具体实现步骤如下: 1. 编译Verilog代码并生成C++仿真模型: ``` verilator --cc --exe top.v --top-module top --trace make -C obj_dir -j -f Vtop.mk Vtop ``` 2. 编写C++仿真程序以调用VCS库中的函数: ``` #include "verilated_vcd_c.h" #include "Vtop.h" #include "vcs.h" Vtop* top; VerilatedVcdC* tfp; int main(int argc, char** argv) { Verilated::commandArgs(argc, argv); top = new Vtop; tfp = new VerilatedVcdC; Verilated::traceEverOn(true); top->trace(tfp, 99); tfp->open("top.vcd"); vcs_init(); vcs_set_clock(*top, &top->clk, 1); while (!Verilated::gotFinish()) { top->eval(); tfp->dump(top->tick()); vcs_tick(); } tfp->close(); top->final(); return 0; } ``` 3. 编译C++仿真程序: ``` g++ -I obj_dir -I$VCS_HOME/include -o sim main.cpp obj_dir/Vtop__ALL.a $VCS_HOME/lib/libvcs.a $VCS_HOME/lib/libvcsi.a -lpthread -ldl ``` 4. 运行联合仿真: ``` ./sim ``` 需要注意的是,Verilator和VCS使用的是不同的仿真内核,因此在进行联合仿真,可能会遇到不兼容的问题。此外,联合仿真还需要保证Verilog代码的可综合性和正确性,否则可能会导致仿真结果不准确。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值