VCS带UPF的RTL低功耗仿真介绍
文章目录
前言
最近在做VCS带UPF文件的低功耗仿真,把这个上手的过程,以及要注意的事项记录一下。
一、UPF文件是什么
UPF(Unified Power Format)文件主要用来描述RTL代码的供电情况。在UPF文件中,描述RTL中的电源域(power_domain)、电源开关(power_switch)以及电源隔离(power_isolation)等。简单的说,在UPF文件里边,通过代码来描述,整颗芯片中,不同RTL层次结构的供电关系。
1.电源域(power_domain)
电源域用来逻辑区分不同的供电模块。
create_power_domain命令定义一个电源域,通常用于电源域中的设计元素列表。电源域是一个或多个电源设计元素的逻辑分组。一个电源域应具有一个电源和地。
2.电源开关(power_switch)
电源开关用来打开或者关闭电源域。
create_power_switch命令在电源域中定义电源开关实例。电源开关在电源域的范围内创建。电源开关只有开或者关两种状态。
3.电源隔离(power_isolation)
电源隔离主要用于不同的电源域之间,其中一个电源域断电后,不对另外一个电源域造成影响。主要是将断电后电源域的输出信号钳位到高或者低电平,防止掉电后的叉态传播。
set_isolation和set_isolation_control命令确定要隔离哪些端口,以及在逻辑层次结构中创建产生的隔离单元的位置。
二、如何快速上手
1.学习VCS自带的demo
VCS工具自带了一个UPF仿真的demo供学习,具体的路径在$VCS_HOME/doc/examples/NLP/MVSIM_NATIVE_DEMO。
2.启动带UPF的仿真
要启动一个带UPF的仿真首先需要写好RLT前仿的测试用例,其次,需要具备几个条件:(1)写好UPF文件;(2)加入编译选项;(3) 在顶层导入UPF库并供电。
1、写好UPF文件
写UPF文件之前,要对整个芯片的供电方案有一个全局的了解,自顶向下的方式,挨个电源域的方式去写。
写UPF时要注意initial块的执行。
initial语句,是在仿真的0时刻开始执行。如果模块是在仿真非0时刻上电,那么上电之后,initial语句,是不会执行的。
在VCS中,需要在UPF中打开SNPS_reinit属性,来确保上电后执行initial块。
set_design_attributes -attribute SNPS_reinit TRUE
在irun中,需要加入set_sim_control命令来控制。具体可以参考如下链接:
https://aijishu.com/a/1060000000119148
2、加入编译选项。
加入的编译选项如下:
- +define+UPF :定义UPF的宏;
- -upf upf_filename.upf :导入UPF文件(irun中的选项是 - upf_1801);
- -power_top TOP:指定UPF供电的顶层。这一条也可以在UPF文件中进行指定。
3、在顶层导入UPF库并供电
在顶层可以加入如下代码:
`ifdef UPF
import UPF::*;
initial beign
supply_on("VDD", 1.1);
supply_on("GND", 0);
end
`endif
3.debug带UPF的仿真
在跑带UPF文件的RTL仿真时,一开始将UPF全部写完去仿真,结果仿真一下就卡死了,卡死的现象是不管等多久,仿真始终停在某一个状态,而且仿真时间不往前走,查看log文件也找不到问题所在。
最后解决的办法是,一开始将所有电源域的电都供上,再一个一个去加入电源开关和电源隔离,加一个跑一下,仿真过了再加下一个,最终解决问题。
总结
本文主要介绍了如何利用VCS,进行带UPF的RLT低功耗仿真。主要的内容都是入门级需要了解和注意的,并没有涉及到深入的低功耗分析。
上一篇: 读取数据库并生成excel文件--PHPExcel
下一篇: 生成并下载excel文件
推荐阅读