现在的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
UPF反映了design的power intent,要用到项目开发的不同阶段,从RTL,Gate一直到P&R。所以最初创建时候要考虑到这个因素,努力创建广泛适用的UPF,尽量避免面向不同工具做不必要的修改。UPF具有良好的一致性,对项目成功帮助巨大。
现在通常使用的“Golden UPF flow”,就是在RTL阶段创建一个原始的golden UPF,随后的DC/IC工具均会在golden UPF的基础上添加更为详尽的信息。工程师在创建Golden UPF时,不仅考虑综合工具能用,也要考虑仿真工具也能用,因为这两个工具所能支持的UPF语句集合存在差异。
要创建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。
现在的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》
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的正常工作。
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”
一般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
% vlogan [-sverilog] [options] file/filelist
% vhdlan [options] file/filelist
% vcs -upf
Elaboration时需要使用-upf 编译选项,这样VCS工具就会自动调用VCS-NLP。
如果UPF中已经使用set_design_top知道了design top,则 -power_top 可以省略。
这里使用的upf应该是top design对应的upf,在这个upf内一般会引用其他tcl/upf文件。
% simv [options]
% simv [options] -power power_config.tcl #加载运行时的upf相关配置
注意这里的tcl中只能加入运行时使用的属性,例如下面这句必须在elab时加入upf中,在运行时加入不行
set_design_attributes -attribute SNPS_reinit TRUE
本博客所有文章均同步发表于www.mx1980.cn/blog