macro/mem的电流取决于mem的运行模式,例如读、写、同时读写、空闲等,每个模式的电流在AVM中有定义:
state_boolean avm_读_worse “CLKA” “MEA & WEA & !LS”
state_boolean avm_写_worse “CLKB” “MEB & !LS”
state_boolean avm_读写_worse “CLKA & CLKB” “MEB & (MEA & WEA) & !LS”
state_boolean 空闲 “!CLKA | !CLKB”
...
并且AVM文件中有每个mode模式的电流值:
Leakage_I {
VDD VSS 2.2e-04
}
Peak_I avm_读_worse {
VDD VSS 1.59e-01
}
Peak_I avm_写_worse {
VDD VSS 1.66e-01
}
Peak_I avm_读写_worse {
VDD VSS 3.25e-01
}
...
在计算mem电流或功耗时需指定mem的运行模式,有两种指定mem运行模式的方法,一种是通过mode_sequence,一种是通过mode_probabilities:
- Mode Sequence: 读 | 读 | 写 | 空闲 | 读 | 读 | 写 | 空闲 | …
- Mode Probabilities:读 0.2、写 0.3、空闲 0.5
计算功耗时会计算mem给定模式序列的平均功耗或给定模式概率的平均功耗,mem的功耗值就指定为该平均功耗。
上述方法需要指定mode的具体名称,对于不同IP vendor,mode名称可能不同,这时可使用redhawk工具内置的模式(内置隐藏变量,名称使用_开头_结尾):
例如:
- high_energy_mode 最高能量模式
- leakage_only_mode 只有leakage
- off_mode leakage都没有
例如,mem的avm中定义的read write worst电流最大,即为_high_energy_mode_。当如下设置时,mem的功耗计算如下:
mode_probabilities:{
‘high_energy_mode’:1.0,
‘leakage_only_mode’:0.0
}
Mem current=(1.0 * avm_读写_worst) + (0.0 * Leakage_I)
上述1.0/0.0的设置是最悲观的场景,用于前期快速识别mem IR风险,后期再酌情根据波形放松。