Spyglass是常用的RTL分析工具,可以在RTL的设计阶段对语法、跨异步、功耗等进行分析,可以使设计者在较短的时间内检查并发现当前RTL设计中存在的语法问题、跨异步问题以及功耗的走势。
本文将主要介绍Spyglass的功耗分析功能,将从Spyglass power功能的介绍、所需要提供的信息、执行流程、常用配置、结果分析和存在局限这六个方面对Spyglass power功能进行介绍。
1. Spyglass power功能介绍
Spyglass在执行功能中是通过goal选择当前要执行的具体功能的,在Spyglass power这个子分支下,goal主要包含:
- power_audit:执行审计,检查设计、仿真数据和技术库的一致性,并列出功率估计中使用的关键参数。该目标创建pe_audit Report报告,该报告详细描述了功率估计如何理解各种输入。
- power_activity_check:分析仿真的testbench,并生成随时间变化的图表,这有助于功耗分析确定哪个仿真模型以及仿真模型的的时间片段对功耗分析有用。
- power_gen_pesd:生成功耗必要信号列表,用于功耗估计。这个goal可以减少以FSDB格式表示的模拟数据的大小。
- power_calibration:根据参考设计生成校准数据。它生成SGDC文件,该文件显示当前设计中的单元分配百分比和参考设计中的时钟缓冲区信息。此外,该目标还基于输入设计和相应的SPEF文件创建了高级电容模型。同时,用于从设计中提取平均回转。
- power_est_average:估计设计的平均功率。可以通过SGLIB文件中标准单元库提供功率数据,使用波形文件提供活动数据,如VCD、FSDB、virtual FSDB或SAIF。早期评估时,也可以使用时钟或关键信号的有效值来进行平均功耗分析。
- power_est_profiling:根据预期的时间间隔内的的波形文件来计算时钟、寄存器、mem的功耗信息。使用这些信息可以识别设计中低效的时钟门控、冗余的内存访问条件和类似的power bug信息。
- power_reduction_adv:发现设计中的节能机会,并报告由此实现的节能效果。对于没有添加enable的寄存器,此目标查找新的enable信号。对于已经具有enable的寄存器,此目标将找到比原始enable更强的enable,该enable将在更长的时间内关闭时钟。此外,这个goal评估了当设计中的内存被等效的一半大小的内存或等效的四分之一大小的内存替换时的功耗节省。
- power_mem_reduction:在设计流程的早期使评估使用更先进工艺的寄存器和mem所能节省的功耗。
2. SPyglass power所需信息
- project文件:
- top信息:提供当前功耗分析环境的RTL顶层。
- filelist信息:提供当前功耗分析环境的RTL的filelist。
- sgdc文件:提供当前功耗分析环境中的相关约束信息。
- sglib文件:提供当前功耗分析环境中lib库的相关信息,包括mem和cell的lib。
- 其他配置:提供当前功耗分析环境中各种配置信息,具体的命令见第四节。
- sglib文件:
通过spyglass_lc将后端的lib库转化成Spyglass更容易识别的sglib,便于功耗分析;
- sgdc文件:
- current_design:提供当前功耗分析环境中的顶层
- activity_data:提供当前仿真的波形文件、仿真的sim_topname、仿真有效数据的起始时间和节数时间(可以有多段),Spyglass会通过上述三个信息得到功耗分析的有效数据。
- 时钟接口约束:对仿真的时钟接口进行约束,告知仿真环境时钟接口的频率。
3. Spyglass power流程
1)生成sglib文件(必须)
根据后端提供的lib库文件生产Spyglass可以快速分析的sglib文件,根据lib库中的功耗数据对cell和mem的行为进行功耗分析。
命令:
spyglass_lc -include_opt_data -outsglib ${outsglib_name} -wdir ${result_dir} -gateslib ${lib_path}
2)检查power安装环境(可跳过)
对power功耗分析环境进行检查。
命令:
spyglass -project ${prj_name}.prj (-batch) -goal power/power_audit
3)生成fsdb或vcd波形(必须)
此处多由仿真验证环境提供,此处不再赘述。
4)检查activity data信息(可跳过)
根据sgdc文件提供的波形和对应的约束信息,检查activity信息是否有误。
命令:
spyglass -project ${prj_name}.prj (-batch) -goal power/power_activity_check
5)进行具体的功耗分析(必须)
真正对RTL进行功耗分析,分析类型有多种,这里以power_est_average和power_est_profiling为例。
spyglass -project ${prj_name}.prj (-batch) -goal power/power_est_average
spyglass -project ${prj_name}.prj (-batch) -goal power/power_est_profiling
此处goal的选择根据用户自身需要决定。
PS:上文中的命令加入-batch则是直接执行,不加-batch则是在GUI下执行。
4. Spyglass power常用配置
Spyglass power的相关配置非常多,此处仅介绍最常用的几种,如有其他需求可以查询Spyglass的用户手册
1)获取文件
readfile -type sourcelist ${filelist} #获取RTL的filelist信息
readfile -type sgdc ${sgdc} #获取功耗分析的约束文件
readfile -type sglib ${sglib} #获取从后端lib库中生成的sglib文件
2)参数设置
set_option top ${top_name} #设置当前的top名称
set_option projectwdir ${result} #设置当前功耗仿真的结果生成路径
set_option ebableSV yes #使能SystemVeriog
set_option define {MACOR MACRO} #设置功耗分析中需要的宏定义,也可以在RTL中定义
set_option mthresh {mem size} #设置mem的水线
set_option libext {.svh} #设置当前环境识别库中以.svh作为尾缀的文件
set_option incdir {include_dir} #设置当前环境需要include的文件路径
set_option ignore {file} #设置当前环境需要忽视的文件
set_option stop {instance} #设置当前功耗分析需要黑盒掉的例化实体
5. Spyglass power结果分析
在执行完功耗分析后,再次打开spyglass并在内部打开刚执行完项目对应的.prj文件,就可以在spyglass中查看到功耗分析结果的表格,表格会根据RTL实体的层级进行划分,详细展示当前波形下各个模块的静态功耗、动态功耗,面积,clock gating比例等信息,用户可以根据这些信息进一步思考如何进行低功耗设计。
6. Spyglass power存在局限
由于前端功耗分析无法包含时序相关信息,因此前端功耗分析结果仅仅是根据lib库文件提供的信息和有效时间段内的波形信息分析出的功耗结果,这些结果不能体现时序、拥塞等对功耗的影响,因此和真正的功耗结果会有一定的偏差,偏差结果和综合结果的好坏有直接关系。
因此Spyglass工具在功耗分析中应该仅作为辅助低功耗设计的辅助工具,而不能作为功耗分析准确结果进行使用。