一个UPF低功耗仿真的简单例子
时间:10-02
整理:3721RD
点击:
关于什么是UPF以及电源域等等概念赛宝龙在这里就不多说了,有兴趣的可以查阅IEEE1801-2013标准。
先上低功耗要求,即power intent:顶层模块为TOP,而TOP中例化了一个子模块,其例化名为instA1,具体的代码如下所示:
inst的模块的代码:
TOP模块的代码:
顶层TOP 的供电轨道为VDD和VSS,而instA1的供电轨道为VDDA和VSS,并且当VDD掉电后instA1的out1端口也被关掉,out2不受VDD的影响。首先我们编写power intent 文件:
在power intent文件中,我们根据要求创建了两个电源域,并且为电源域指定了供电端口和供电线,并将供电端口和供电线进行连接构成供电网络,而且我们还为两个电源域显式的指定了主供电线网络,最后根据要求,VDD掉电后instA1的out1也将被关掉,这样我们需要为instA1的out1端口指定相对的供电线VDD。
写好了powerintent文件后,我们需要构建测试平台:
按照通常的testbench的写法,同时要模拟电源行为,我们使用了supply_on和supply_off函数,这两个函数是upf标准中定义的两个标准库函数,其中supply_on函数接受两个参数:参数一为字符串常量,所取值应该为power intent文件中定义的供电端口名,参数二为电压值。supply_off函数只有一个字符串常量参数。
写好testbench之后,我们需要使用synopsys公司的mvtool和vcs工具进行仿真:与一般的仿真步骤类似,仿真RTL+UPF也可以分为三步模式,不过赛宝龙更喜欢一步到位,具体命令为:
vcsmvsim-debug_all-upfdemo.upf-sverilog$ARCHPRO_ROOT/templates/upf_package.sv*.v &
其中ARCHPRO_ROOT应该在你的.cshrc或者.bashrc中设置为环境变量,指向你的mvtool安装的根路径。
执行上述命令,编译无误后,用dve观察仿真结果为:
由仿真图可以看到instA1的out1有一段时间被corrupt掉了,而这段时间正是VDD掉电时,当VDD重新上电instA1的out1又恢复正常了;instA1的out2输出不受VDD掉电的影响。
【注:欢迎大家关注赛宝龙的微信公众号:赛宝龙。赛宝龙将不定期推送关于SystemC高层次综合(HLS)方面的技术文章】
好文章!顶
谢谢小编的分享,从这个简单例子大概知道利用upf的进行电源低功耗仿真的简单流程。
谢谢赛宝龙,原来安装完mvtools后,里边自带UG的。
说得很对,你是UPF老手
set_related_supply_net -object_list {u_TOP/instA1/out1} -power VDD -ground VSS
感谢分享,请问第三个截图最后一段命令是什么?看不大清楚,还有这是UPF 2.X?
说的挺好的。例子简单也实用。可以再介绍一下各种option,比如-lps_verbose等。
一般upf脚本后端会出,对验证来说,主要是验证低功耗流程是否符合预期,即,
①增加的low power流程不能影响芯片本身功能的正确性,比如通过电源关断来降低芯片功耗,则关断再打开后,芯片还可以正常work。这部分可以利用原有的self-check验证环境来确认。
②利用log文件分析,上述仿真命令-lps_verbose和UPF文件会为仿真输出与low power相关的warning, error以及assertion信息,通过log文件可以check流程的正确性;
③自动的assertion checker分析,使用-lps_verify选项可以自动检查电源关断顺序(隔离->复位->断电)和电源打开过程(上电->解复位->解隔离),如不满足该时序要求,会自动报错;
④利用覆盖率保证验证完备性,使用-lps_vplan选项依据UPF文件生成low power验证计划,通过波形查看工具提供的coverage接口,得到low power相关的功能覆盖率;