以下是使用 Innovus Implementation System 进行低功耗设计的详细步骤指南,结合多电源电压(MSV)、电源域管理、电平转换等关键技术,基于 Innovus 用户指南和低功耗设计最佳实践整理:
一、设计准备与初始化
1. 环境设置与设计加载
- 启动 Innovus
bash
innovus -init
- 加载设计数据库(如网表、库文件、lef/def 文件)
tcl
read_verilog design.v ;# 读取RTL或网表 read_lef tech.lef ;# 读取工艺库LEF read_liberty lib.sdc ;# 读取时序库(含功耗模型) read_def design.def ;# 读取物理设计(可选,用于增量设计)
- 设置基本设计约束(如时钟、时序路径)
tcl
create_clock -name clk -period 10 [get_ports clk] set_dont_touch_network [get_clocks clk]
2. 低功耗标准配置
- 选择低功耗设计模式
tcl
set_operating_conditions -min min_lib -max max_lib ;# 设置工作条件(如电压、温度) set_power_analysis_mode -activity_mode average ;# 设置功耗分析模式
二、电源意图定义(CPF/IEEE 1801)
1. 选择低功耗描述标准
- CPF(Common Power Format):用于复杂电源架构(如多电压域、电源关断)。
- IEEE 1801:简化版,适用于基础多电压设计。
推荐:优先使用 CPF,支持更灵活的电源域配置。
2. 加载 CPF 文件
- 创建或加载 CPF 文件(定义电源域、电压、隔离规则等)
tcl
read_cpf design.cpf ;# 读取CPF文件 commit_cpf ;# 提交CPF约束到设计
3. 电源域规划
- 定义电源域(Power Domain)
tcl
create_power_domain -name pd_core -voltage 1.0V -power_switch sw_core ;# 创建核心电源域 create_power_domain -name pd_io -voltage 1.8V -isolation_cell iso_cell ;# 创建IO电源域
- 分配单元到电源域
tcl
set_power_domain -cells [get_cells core/*] -power_domain pd_core set_power_domain -cells [get_cells io/*] -power_domain pd_io
三、低功耗单元插入
1. 电平转换器(Level Shifter)
- 自动插入电平转换器(跨电源域信号需电平转换)
tcl
insert_level_shifters -auto -power_domain_crossing all ;# 自动检测跨域信号并插入 report_level_shifters -summary ;# 检查插入结果
2. 隔离单元(Isolation Cell)
- 定义隔离规则(电源关断时防止浮动信号)
tcl
set_isolation -cells [get_cells pd_core/*] -isolation_cell iso_high -active_high true
- 手动插入隔离单元(可选)
tcl
place_cell -cell iso_high -ref iso_high_inst -site iso_site -position x y
3. 电源开关(Power Switch)
- 配置电源开关(用于动态关断非活跃电源域)
tcl
create_power_switch -name sw_core -domain pd_core -on_voltage 1.0V -off_voltage 0V connect_power_switch -switch sw_core -power_pin VDD -ground_pin VSS
四、物理实现与优化
1. 布局规划(Floorplan)
- 划分电源域物理区域
tcl
create_floorplan -core_area [rectangle 0 0 100 100] -power_domain pd_core create_floorplan -core_area [rectangle 100 0 200 100] -power_domain pd_io
- 放置宏单元(Macro)和 IP 块
tcl
place_macro -cells [get_macros macro1] -position x y -power_domain pd_core
2. 电源网络设计(Power Network)
- 创建电源网格(Power Mesh)
tcl
create_power_mesh -name mesh_core -voltage 1.0V -layers {M4 M5} -spacing 5 create_power_strap -name strap_io -voltage 1.8V -layers {M3} -width 10
- 连接电源引脚
tcl
connect_pg_net -nets {VDD VSS} -power_domain pd_core
3. 时钟树综合(CTS)
- 跨电源域时钟处理
tcl
create_clock_tree -cross_power_domain true -level_shifter_insertion true ;# 允许跨域时钟并插入电平转换器
五、低功耗优化
1. 时序与功耗协同优化
- 启用低功耗优化模式
tcl
set_optimization_mode -type low_power -effort high optimize_design -postCTS ;# 后CTS优化,调整单元驱动强度和阈值电压
2. 电压缩放(Voltage Scaling)
- 动态电压调整(DVS)
tcl
set_voltage -power_domain pd_core -min 0.8V -max 1.0V ;# 定义电压范围 optimize_voltage -power_domain pd_core -target_utilization 0.9 ;# 优化电压以降低功耗
六、验证与分析
1. 功耗分析
- 报告静态功耗( leakage power)
tcl
report_power -type leakage -power_domain pd_core
- 报告动态功耗(switching power)
tcl
report_power -type switching -activity_file activity.csv ;# 需输入活动因子文件
2. 低功耗设计规则检查(LPDRC)
- 验证电源域隔离与电平转换
tcl
check_power_domain -all ;# 检查电源域完整性 check_level_shifters -all ;# 检查电平转换器覆盖 check_isolation -all ;# 检查隔离单元连接
3. 时序验证(含跨域路径)
- 报告跨电源域时序路径
tcl
report_timing -from [get_cells pd_core/*] -to [get_cells pd_io/*] -power_domain_crossing
七、输出与流片准备
1. 生成 GDSII 与报告
- 导出物理设计结果
tcl
write_def design_merged.def ;# 合并后的DEF文件 write_gdsii design.gds -layers {all} ;# 生成GDSII文件
- 导出低功耗报告
tcl
write_power_report power_report.csv -all_domains
关键注意事项
- 电源域边界管理:确保跨域信号均通过电平转换器或隔离单元处理,避免短路或逻辑错误。
- 库文件支持:使用含低功耗单元(如电平转换器、隔离单元)的工艺库,并确认库中包含功耗模型(如 CCI 文件)。
- 增量设计流程:若采用分层设计(Hierarchical Design),需在子模块生成独立 CPF 文件,顶层合并时验证电源域交互。
- 工具自动化:充分利用 Innovus 的自动插入功能(如
insert_level_shifters -auto
),减少手动操作误差。
参考资料
- Innovus User Guide: Design Implementation Capabilities--Low Power Design
- CPF/IEEE 1801 官方文档
- 工艺厂商提供的低功耗设计指南(如 TSMC/Intel/ 三星的 LP Design Kit)
通过以上步骤,可系统地在 Innovus 中实现低功耗设计,平衡性能、功耗与面积目标。