先吐个槽,数字前端AE 生存环境实属恶劣,按理说AE 只要解决工具端的问题即可,可现实中经常被揪住讨论SDC 如何设置,power 估算该用哪个corner, toggle rate 如何算这些很难概论的问题。周二在某司,某位老兄打了一大叠IEEE 文章在研读toggle rate 计算的问题,兴致勃勃得来找老驴讨论,听完该兄叙述,老驴深深陷入一团迷雾中,于是发文《求助 | toggle rate的计算》求助广大驴友。感谢驴群2.0 的@if 同学,感谢驴群1.0 的@剩凉菜、@刚刚、@白菜王国,感谢驴友@DragonBaby 糖糖、@the1ne. 在以上同学的帮助下,老驴又研读了一些资料,总结于此。
Probability
逻辑功能一定,输入Probability 确定的情况下,输出的Probability 是个定值,Probability 用于leakage 的计算,具体计算方式可回顾《四月清和雨乍晴,静态功耗乱伊心》。此处的Probability 指信号处在状态 “1" 的概率,实际上用duty 更达意。基本逻辑门,Probability 的计算公式为:
除了这个指代信号处于状态"1" 的Probability, 还有一个概念叫Transition Probability, 驴理解的这个概率跟计算输出的toggle rate 相关,如果输入的toggle rate 已知,如果不考虑串扰的影响,那输出的toggle rate 可能可以根据条件概率计算得到。基本逻辑门的 Transition Probability 的计算公式为:
Toggle Rate
真实Toggle Rate 的计算特别复杂,据文献《Toggle Rate Estimation and Glitch Analysis on Logic Circuits 》, 真实的Toggle Rate 受如下因素影响:
- Temporal correlation
- Spatial correlation
- Timing delay of the circuit
- Presence of glitches
该文献引用了17 篇其他研究Toggle Rate 的文献,有兴趣的同学可以深读一下,概括来说,如果要精确计算Toggle Rate 需要SSTA 来支撑。
显然当今各家Power 分析工具都不会用到如此复杂的方式来计算Toggle Rate, 在《An ASIC low Power Primer 》中提到,对于组合逻辑单元, 输出的toggle Rate 可以根据输入的toggle Rate 及对应的逻辑功能仿真得到。驴群2.0 的@if 同学提到可以用蒙特卡洛仿真,或BDD (Binary decision diagram ) 算法拟合,该同学曾用perl 写过一个蒙特卡洛拟合过程,好牛逼!
除了仿真之外,还有一种简单粗暴的方式,根据输入的Probability 和Toggle Rate 计算得到,老驴估计当前主流Power 分析工具都是用这种方式计算的,基本逻辑门的计算公式为:
到此,再回顾《探讨 | 功耗应该在哪个corner 看》,可以更明确地得知工具只能估算 Power, 无法精确。