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

文章介绍了如何利用VCS工具进行低功耗仿真,包括使用VCSNLP进行PASimulation,创建可复用的UPF文件,讨论了低功耗验证的目的和目标,强调了硬宏仿真模型的要求以及TestBench在PA仿真中的作用。此外,还提到了使用VCS进行RTL级PA仿真的步骤,强调了UPF配置在仿真过程中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文连接:https://www.mx1980.cn/blog/2020/09/16/%E4%BD%BF%E7%94%A8vcs%E8%BF%9B%E8%A1%8C%E5%B8%A6upf%E7%9A%84rtl%E4%BD%8E%E5%8A%9F%E8%80%97%E4%BB%BF%E7%9C%9F/

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

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== 编辑

要创建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
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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
<think>好的,我需要帮助用户找到关于VCS在NLP场景下进行低功耗仿真的方法和教程。首先,用户提到的“VCS NLP”可能有些混淆,因为NLP通常指自然语言处理,但在VCS上下文中,NLP代表的是Native Low Power,是Synopsys VCS工具的低功耗仿真功能。因此,我需要澄清这一点,避免用户误解。 接下来,用户的需求是寻找VCS进行低功耗仿真的方法,特别是使用UPF(Unified Power Format)。根据提供的引用内容,VCS的NLP功能支持动态低功耗仿真,也称为PA Simulation。引用[1]提到VCS NLP可以进行UPFRTL低功耗仿真,并且有相关文档和demo可用。引用[2]和[3]则具体指出了demo的位置和启动方法,以及如何用Verdi分析UPF文件。 我需要将这些信息整理出来,分步骤说明实现方法。首先,用户需要确认VCS版本是否支持NLP,然后参考官方文档。接下来,学习提供的demo,路径在$VCS_HOME/doc/examples/NLP/MVSIM_NATIVE_DEMO。启动仿真的步骤包括准备UPF文件、设置环境变量、编译和运行仿真,以及结果分析。此外,可能还需要提到如何利用Verdi进行调试。 用户可能会遇到的问题包括路径是否正确,UPF编写是否符合规范,以及仿真中的功耗状态切换是否正确。因此,在注意事项中需要提醒用户检查这些方面。最后,生成相关问题,帮助用户深入理解,比如如何编写UPF文件或分析仿真结果。 需要确保回答结构清晰,步骤详细,并正确引用提供的资料。同时,避免使用Markdown格式,保持自然的中文表达,符合用户的要求。</think>关于VCS低功耗仿真(Native Low Power, NLP)中的实现方法,以下是基于Synopsys工具链的技术实现路径: ### 一、VCS NLP低功耗仿真原理 VCS NLP通过解析UPF(Unified Power Format)文件实现动态功耗状态模拟。其核心功能包括: 1. **电源域建模**:通过UPF定义电源开关、隔离单元、电平转换器等低功耗器件[^1] 2. **状态追踪**:实时监测电源域的状态切换(ON/OFF/RETENTION) 3. **功耗验证**:检测电源控制信号与功能逻辑的交互时序 ### 二、具体实现步骤 #### 1. 环境准备 ```bash # 设置VCS环境变量 export VCS_HOME=/path/to/vcs/installation export PATH=$VCS_HOME/bin:$PATH ``` #### 2. 工程配置 ```tcl # vcs_opt文件示例 -upf power_plan.upf -power_top power_domains -sverilog +define+LOW_POWER_SIM ``` #### 3. 仿真流程 ```bash # 编译阶段 vcs -sverilog -power=upf power_plan.upf -debug_access+all design.sv tb.sv # 运行阶段 ./simv -power=power_plan.upf +power=verbose ``` ### 三、关键调试方法 1. **波形分析**: ```bash verdi -ssf power_states.fsdb # 加载电源状态波形 ``` 2. **日志解析**: ```log # 典型输出信息 Power Domain PD_CPU: Transition ON->OFF @ 250ns Isolation cell ISO_1: Enable assertion detected ``` ### 四、参考资源 1. 官方Demo路径: `$VCS_HOME/doc/examples/NLP/MVSIM_NATIVE_DEMO`(包含完整UPF验证场景)[^2] 2. 调试技巧: - 使用`+power=report`参数生成电源状态转换报告 - 通过`upf_checker`工具预处理UPF文件语法
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值