基于 VCS-NLP 的动态低功耗仿真验证介绍
🔥点击查看精选 IC 技能树系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥
📢 声明:
- 🥭 作者主页:【MangoPapa的CSDN主页】。
- ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/129384557】。
- ⚠️ 本文目的为 个人学习记录 及 知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
- ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
- 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
- 📧 邮箱:mangopapa@yeah.net
- 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)
文章目录
- 1. 低功耗仿真是什么
- 1.1 低功耗技术
- 1.2 UPF 简介
- 2. 低功耗验证验什么
- 3. 低功耗仿真流程
- 3.1 常用 FLow
- 3.2 仿真具体步骤
- 3.3 Verdi Debug 手段
- 4. 其他参考及友链
简单记录下基于 VCS NLP 的动态低功耗验证仿真与 Debug 相关内容。
1. 低功耗仿真是什么
低功耗仿真(Low Power Simulation, LPS)是指对做了低功耗设计的芯片进行低功耗相关功能的仿真验证。低功耗仿真通常包括静态仿真和动态仿真,通过低功耗仿真,能够提前发现低功耗相关设计缺陷并减少返工。
1.1 低功耗技术
在低功耗仿真之前需要搞清楚低功耗技术有哪些。以下几篇文章介绍得挺好:
- 数字IC(SoC)低功耗设计方法总结
- 低功耗设计方法 (1) 功耗构成和类型
- 低功耗设计方法 (2) 系统与架构级低功耗设计
- 低功耗设计方法 (3) RTL级低功耗设计
总结下来,常用的低功耗技术有:
- 静态低功耗技术
- 多阈值工艺(Multi-Vt Design)
- 门控电源(Power Gating)
- 体偏置(Body Bias)
- 动态低功耗技术
- 多电压阈(Multi-Voltage Domain)
- 预计算
- 门控时钟(Clock Gating)
- 门级优化技术
- 毛刺的消除
- 逻辑级优化
- 物理级优化
- 控制输入向量
- RTL级的一些低功耗设计方法
- 并行结构与流水结构
- 资源共享与优化编码
- 操作数隔离
1.2 UPF 简介
芯片设计中,为了实现低功耗设计意图,各家有各家的方法。Synopsys 采用统一电源格式 (Unified Power Format, UPF) 文件来描述芯片设计中的低功耗设计意图。关于 UPF 的语法及使用我们不作介绍,可以参考 Synopsys NLP 文档,或参考以下几篇文章:
- Lower power design & UPF 学习
- VCS Native Low Power (NLP) (synopsys.com)
- 低功耗验证(一) CMOS基础,功耗分类,低功耗方法
- 低功耗验证(二)UPF,低功耗流程,VCS NLP
- 低功耗和UPF介绍
- 低功耗设计——基于UPF进行设计
2. 低功耗验证验什么
为了实现低功耗,设计了什么我们就验什么。对于前端验证而讲,我们更关注动态低功耗技术。在仿真的时候,我们较多关注的地方有:
- 电源网络描述是否正确
电压域
(Power Domain) 划分是否正确,供电电压是否正确。- 电压域边界的
供电端口
(Supply Port) 是否正确,供电网络 (Supply Ner) 连接是否正确。 电源开关
(Power Switch) 的输入、输出及使能信号是否正确。
- 电源状态表 (Power State Table, PST) 覆盖率,是否覆盖全,是否出现了非预期的状态切换
- 低功耗单元实现是否正确。
隔离 (Isolation) 单元
,确保钳位值(Clamp Value)正确,尤其是防止 Power Off Domain 传播 X/Z 或非预期的值到 Power On Domain。电压转换 (Level Shifting)单元
。信号在不同电压域之间传播时需要做电压转换,要确保是否有做,转换方向是否正确。寄存器保持 (Retention) 单元
。有些寄存器需要在 Power Off 后保持原来的值,应采用保持寄存器。电源开关单元
。
- Power Sequence。Power Sequence 一般是 DV 根据 Power Spec 的要求在 tb 里写的,确保按照该顺序能够正常上下电及正常工作。要确保 PMU 中的 FSM 完全遍历,且能够从不同的 Sleep Mode 唤醒。
- 其他
- Power Domain 上下电、Free-run clock 等的断言
- 形式验证
3. 低功耗仿真流程
VCS 提供了 VC LP (Low Power) 及 NLP (Native Low Power) 这两个工具分别来做静态低功耗检查及动态低功耗仿真。我们只看下基于 VCS NLP 的动态低功耗仿真流程。
VCS NLP 集成了低功耗仿真的功能,能够与 VCS 协同仿真,只需要采用以下方式来指定 UPF 文件即可实现带 UPF 的低功耗仿真:
vcs -upf <upf_file>
3.1 常用 FLow
有两种常用的低功耗仿真 Flow:一种是传统的 UPF-prime Flow
,该 Flow 需要设计人员在不同阶段提供 3 个不同的 UPF;另一种是 Synopsys 推荐的 Golden UPF Flow
,该 Flow 只需要在最开始提供一个能够在前仿和门仿中复用的 Golden UPF。两种 Flow 流程图如下图所示。Golden UPF Flow 详查文档:Golden UPF Flow Application Note。可复用的 Golden UPF 写法参考:Writing Reusable UPF For RTL And Gate-Level Low Power Verification。
总结一下,按照时间顺序,低功耗仿真分为以下几个阶段:
-
RTL+UPF
。此时 RTL 为逻辑综合前的 RTL, RTL 还没有插入 Low Power Cell (Isolation, Retention, Level Shifter, Power Switch 等) 和 PG (Power & Ground) Pin,VCS 根据 UPF 插入虚拟 Cell 和 Net。此时的低功耗仿真采用的 RTL 中具备 Power Supply Port 和 Power Domain,采用了具备电源信息的模拟硬核(Hard Macro),具有 X-Propagation 特性,更贴近门仿结果。 -
netlist+UPF’
。此时采用 DC 逻辑综合后的门级网表,已经插入了部分 Low Power Cell (Isolation, Retention, Level Shifter),尚未插入 PG 和 Power Switch 。采用的 UPF 为逻辑综合后生成的 UPF’。此步骤非必须,看项目需求。 -
netlist+UPF’’
及PG Netlist
。此时采用物理实现后的门级网表。一般来讲没必要用 VCS NLP 带 UPF’’ 跑仿真,PG Netlist 里已经包含了各种 Low Power Cell、PG Pin 等 Power Aware 相关供电网络,直接用 vcs 跑 PG Netlist 即可 (不带 UPF)。
3.2 仿真具体步骤
-
找 DE/FEINT 要到 UPF 文件。
-
在 TB 中对 DUT 按照上下电顺序及时序开关电源。一般采用 UPF package 的 supply_on、supply_off 函数给指定端口供电,可以在 initial 块内也可以在 always 块内。示例如下:
// 必须 import UPF:* 才能调用 supply_on, supply_off 函数 import UPF::*; initial beign// Hierarchy 用 ‘/’ 而非 ‘.’,错用不报 Error 报 Warningsupply_on("VDD", 1.1); supply_on("VSS", 0); end
-
在 UPF 中设置设计属性。
-
该 UPF 通常为 DV 自己新建的 UPF,编译时采用的 UPF 也为该 UPF。该 UPF 中将 DE/FEINT 提供的 UPF load 进来,便于添加自定义的设计属性。
load /xxx/xxx/de_feint.upf
-
设置 initial 块的
SNPS_reinit
。initial 块常见于 PHY 等 Simulation Behavior Model 内,且 Model 分为带 PG 和不带 PG 两种(独立文件或 macro 隔离)。默认情况下 initial 块默认只执行一次,为确保某 Power Domain 内的 initial 块在 Power ON-OFF-ON 之后能够重新执行,需要在 UPF 内开启 initial 块的 reinit。示例如下:set_design_attributes -attribute {SNPS_reinit TRUE} \ -models {model1 model2 model3} -transitive TRUE // 设置 -transitive TRUE 后,其他模块相关属性默认为 FALSE。
-
对 ROM 等不受 UPF 掉电影响的模块设置
UPF_dont_touch
,确保其 Always On。set_design_attributes -attributes {UPF_dont_touch TRUE} \ -models {model1 model2 model3}
-
其他设计属性
-
-
vcs 编译,根据实际情况添加 vcs 编译选项
-upf <upf_file>
指定低功耗仿真所用的 UPF 文件路径(必须)。这样 VCS 在编译的时候会自动调用 NLP 工具。- 指定 Power Top(必须)。一般将 tb top 作为一个 always on 的 power domain 作为 Power Top。指定 Power Top 的两种方式:
- 通过 vcs 编译选项
-power_top <top_module_name>
指定; - 或在 UPF 中通过
set_design_top <tb/dut>
指定 Power Top。
- 通过 vcs 编译选项
-power
指定相关 vcs 编译选项(可选),可多次叠加指定,有两种形式:-power=<opt1>+<opt2>+… 或 -power=<opt1> -power=<opt2>。较为常用的选项有:-power=accurate
,跳过插入虚拟 Isolation Cell。-power=attributes_on
,开启 vcs_reinit,vcs_dont_reinit,vcs_always_on,vcs_dont_trigger_on_wakeup 属性。-power=cov_pst
,开启 PST 覆盖率收集。
-
simv 仿真,根据实际情况添加 vcs 仿真选项。常用选项有:
-power <power_options>
指定仿真运行时 upf 相关配置(可选),power_options 可以为 tcl 文件。-xprop
打开 X 态传播检查(可选)。建议打开。
-
查看波形及 Log 进行 Debug
- log report 目录名为
mvsim_native_reports
,其中的 WARNING 和 ERROR 均需清理。
- log report 目录名为
以下几篇文章讲低功耗仿真流程讲得挺好,可重点参考:
- 使用 VCS 和 Verdi 的 UPF 低功耗仿真流程
- 低功耗验证(二)UPF,低功耗流程,VCS NLP
- 使用 VCS 进行带UPF的RTL低功耗仿真
3.3 Verdi Debug 手段
跟 VCS-NLP 仿真配套的,可用 verdi 进行 Power Aware Debug。使用 VCS-NLP 进行仿真跑出的波形,直接用 verdi 打开波形加载 UPF,即可看到相关 Power Aware 信息。Power Aware Debug 中的 Verdi 使用重点参考以下几篇文章:
- 使用 VCS 和 Verdi 的 UPF 低功耗仿真流程
- 使用 VCS 进行带UPF的RTL低功耗仿真
4. 其他参考及友链
- VCS Native Low Power (NLP) User Guide
- Golden UPF Flow Application Note
- Verdi® Power-Aware Debug User Guide
- Writing Reusable UPF For RTL And Gate-Level Low Power Verification
- VCS带UPF的RTL低功耗仿真介绍
- VCS自带的UPF低功耗仿真demo介绍
- 一个UPF低功耗仿真的简单例子- IC验证讨论
🔥 精选往期 IC 技能树相关博文,请查看【 数字 IC 技能树】专栏🔥
⬆️ 返回顶部 ⬆️
相关文章:

基于 VCS-NLP 的动态低功耗仿真验证介绍
🔥点击查看精选 IC 技能树系列文章🔥 🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥 📢 声明: 🥭 作者主页:【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#…...

ESP32-S3 自带usb/jtag初步尝试体验
一、背景 最近在做一台小机器,设备初步规划使用几个实体按钮,这样方便用户戴手套操作。但因为设备有一些需要配置的参数,有需要配备屏幕。但是开发时间比较紧。考虑再三,决定先在初步配备一个简单的控制箱。控制箱上不带屏幕。后…...
前端性能优化总结
前端性能优化是指在设计和开发网站时,采取一些措施来提升网站的性能。这对用户来说是非常重要的,因为高性能的网站可以带来更好的用户体验,同时也有助于提升搜索引擎排名。一、常见前端性能优化措施常见的前端性能优化方法有:压缩…...

React(四) ——hooks的使用
🧁个人主页:个人主页 ✌支持我 :点赞👍收藏🌼关注🧡 文章目录⛳React Hooks💸useState(保存组件状态)🥈useEffect(处理副作用)🔋useCallback(记忆函数&#…...

iphone手机热点卡顿多次断连解决办法
文章目录解决方法检查一下几个地方:1.个人热点是否打开2.查看手机是否为4g3.查看手机的最大兼容性开关是否关闭!!很重要解决方法 检查一下几个地方: 1.个人热点是否打开 这个个人热点容易自动断开,先检查一下是不是…...

设置Typora图床(Github)
PicGo,Github,Typora Nodejs下载: Node.js PicGo下载: GitHub - Molunerfinn/PicGo: A simple & beautiful tool for pictures uploading built by vue-cli-electron-builder 选择downloads或release. 然后进行安装。 Gith…...

jira提交bug规范
一、目的 1)方便开发人员根据bug描述快速进行定位问题原因,减少沟通成本。 2)规范bug编写,可以提现测试团队的专业性、严谨性。 3)可以帮助产品、项目经理及其它人员快速了解bug。 二、说明 本文档主要描述了技术产…...

【数据结构】链表相关题目(中档题)
🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对…...

小菜鸟Python历险记:(第四集)
今天写的文章是记录我从零开始学习Python的全过程。在Python中函数是非常重要的,这里也可以称为方法。在前面分享的几篇文章中用到的方法有print(),str(),int().这些都是方法,而除了上面写的这几种内置方法以外,我们也可以自己在程序中自定义…...

字符函数和字符串函数【下篇】
文章目录🎖️1.函数介绍📬1.8. strstr📬1.9. strtok📬1.10. strerror📬1.11. memcpy📬1.12. memmove📬1.13. memcmp📬1.14. memset🎖️1.函数介绍 📬1.8. st…...

【CSS】盒子模型内边距 ② ( 内边距复合写法 | 代码示例 )
文章目录一、内边距复合写法1、语法2、代码示例 - 设置 1 个值3、代码示例 - 设置 2 个值4、代码示例 - 设置 3 个值5、代码示例 - 设置 4 个值一、内边距复合写法 1、语法 盒子模型内边距 可以通过 padding-left 左内边距padding-right 右内边距padding-top 上内边距padding-…...

uni-app ——使用uploadFile上传多张图片
前言:最近的工作中出现了一个功能点,具体写法我在前面的文章中已经阐述过,不过之前的情况是上传图片调用后端的一个接口,整个表单页面提交的时候调用的是另一个接口,我也从中学到了另外的一种方法,写到这里…...

Linux - 进程控制(进程等待)
进程等待必要性之前讲过,子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。另外,进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”的kill -9 也无能为力&#…...
Python 可视化最频繁使用的10大工具
今天介绍Python当中十大可视化工具,每一个都独具特色,惊艳一方。 文章目录Matplotlib技术提升SeabornPlotlyBokehAltairggplotHoloviewsPlotnineWordcloudNetworkxMatplotlib Matplotlib 是 Python 的一个绘图库,可以绘制出高质量的折线图、…...

Windows与Linux端口占用、查看的方法总结
Windows与Linux端口占用、查看的方法总结 文章目录Windows与Linux端口占用、查看的方法总结一、Windows1.1Windows查看所有的端口1.2查询指定的端口占用1.3查询PID对应的进程1.4查杀死/结束/终止进程二、Linux2.1lsof命令2.2netstat命令一、Windows 1.1Windows查看所有的端口 …...

48天强训 Day1 JavaOj
48天强训 & Day1 & JavaOj 1. 编程题1 - 组队竞赛 组队竞赛_牛客笔试题_牛客网 (nowcoder.com) 1.1 读题 1.2 算法思想基础 我们应该尽量的让每一个队伍的中间值都最大化~我们应该尽量的让每一个队伍的最小值都足够小~前33%的不应该都作为每个队伍的最大值~ 接下来…...
崩溃的一瞬间
——我可以忍受黑暗,除非我从未见过光明 原来,人真的会崩溃,如果不是昨夜的眼泪,我到现在还不知道人为什么会在一瞬间崩溃。 刚和认识不久的女孩子聊完天准备入睡。忽然想到自己可能过几个月就要离开这座待了仅一年多的城市…...
13回归网络:HTTP/2是怎样的网络协议?
本篇文章我们先放下实践,回归网络,深入gRPC底层的HTTP/2协议,去探究一下框架底层网络协议的原理,提升对高性能网络协议的认知,相信读完这篇文章以后,我们就可以了解HTTP/2有哪些优势,为什么gRPC要使用HTTP/2作为底层的传输协议。 在众多研究HTTP/2的博客和资料中,最具…...
CSS学习笔记——基础选择器,字体属性,文本属性,三种样式表
文章目录基础选择器标签选择器类选择器多类名使用方式id选择器通配符选择器字体属性字体系列字体字号字体粗细文字样式复合属性文本属性文本颜色对齐文本装饰文本文本缩进行间距CSS的三种样式表行内样式表(行内式)内部样式表(嵌入式ÿ…...

第十四届蓝桥杯三月真题刷题训练——第 16 天
目录 第 1 题:英文字母 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 2 样例输出 2 评测用例规模与约定 运行限制 代码: 第 2 题:单词分析 题目描述 输入描述 输出描述 输入输出样例 运行限制 数组代码&…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...
shell脚本质数判断
shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...
FTXUI::Dom 模块
DOM 模块定义了分层的 FTXUI::Element 树,可用于构建复杂的终端界面,支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...