欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VCS带UPF的RTL低功耗仿真介绍

程序员文章站 2024-03-21 17:23:46
...


前言

最近在做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低功耗仿真。主要的内容都是入门级需要了解和注意的,并没有涉及到深入的低功耗分析。

相关标签: 随笔 vcs