继续项目总结输出系列,之前比较定向的学习过自动时钟门控的结构,这篇相当于在之前的文章基础上进一步的学习。
在自动时钟门控之外,还有时钟自门控的技术可用于功耗优化,这个是在本项目里我第一次关注的,印象中之前并没有配置过这个选项。自动时钟门控和时钟自门控两个词太接近了,还是采用sdc中的说法称之为XOR自门控吧,先看看sdc模板中对XOR自门控的描述。
in addition to -gate_clock for potentially saving Use -self_gating option
in topographical mode only. Registers that are additional dynamic power,
for XOR self gating. not clock gated will be considered
XOR self gating should be performed along with clock gating, using -gate_clock
if there is and -self_gating options. XOR self gates will be inserted only
potential power saving without degrading the timing.
in a saif An accurate switching activity annotation either by reading
command is recommended. file or through set_switching_activity
"set_self_gating_options" command to specify self-gating You can use
options.
翻译一下:在topographical mode下,除了使用-gate_clock选项外,还可以使用-self_gating选项,以节省额外的动态功耗。未进行时钟门控的寄存器将被考虑用于XOR自门控。XOR自门控应与时钟门控一起执行,使用-gate_clock和-self_gating选项。只有在不降低时序性能的情况下,才有可能节省功耗,才会插入XOR自门控。建议通过读取saif文件或通过set_switching_activity命令来准确标注开关活动。您可以使用"set_self_gating_options"命令来指定自门控选项。
这里有一个前提关键词topographical mode,与之对比的是wire-load mode线负载模型,关于这两个DC的工作模式可查询的资料很多。总结来就是:“ 在topographical mode下,Design Compiler支持高水平的物理约束,例如芯片面积、核心区域及形状、端口位置、单元格位置及方向、禁止布线区域边界、布局blockage、预布线、边界定义、过孔、导线层、电压区以及布线禁入区等。此种模式对于前端设计来说使用较少。”所以这次也只是了解了一下,并没有真的在项目中进行实践。
XOR自门控显然是为了解决一个问题,即在工具自动插入时钟门控之后,还有很多的寄存器没有门控的情况下,是否进一步插入以降低功耗。关于这个问题,之前我只知道一种工具的解决方式就是multibit,即通过优化逻辑将若干原本无法生成门控的寄存器通过一个EN端逻辑进行控制形成寄存器组,而后达到满足插入时钟门控的要求(通常为3bit或4bit宽寄存器)。而今天的XOR自门控算是了解到的另外一种方法。
XOR自门控的思路是,对于没有生成时钟门控的寄存器(主要表现为没有EN端的dff类),通过对Q端和D端做异或XOR逻辑生成一个EN信号,进而通过EN信号控制该寄存器生成时钟门控。画个示意图就是这样的结构,这个也很容易理解,当D端和Q端一致的时候那压根寄存器就不需要更新自然可以等效为关断时钟,而二者不一致时再打开时钟即可。
这个结构的弊端也很明显,本来EN端的时序就很可能比D端紧张,现在又要在D的逻辑之后加上一个比较逻辑来生成EN,那时序必然会是大问题。同时寄存器较宽时比较逻辑也会是一笔不小的面积开销。在注释中也说明了:“只有在不降低时序性能的情况下,才有可能节省功耗,才会插入XOR自门控。”我自己在虚拟机里近似的模拟了一下这个比较电路,怎么说呢,48bit的寄存器在D端本来就有逻辑的情况下确实直接超出去了260ps的违例。因此真的应用该选项时,工具必然有一套计算规则来衡量是否可以加入,在目前项目经历里个人觉得不算太实用。
系列文章入口——
【芯片验证】sva_assertion: 15道助力飞升的断言练习 |
【芯片验证】可能是RTL定向验证的巅峰之作 |
【芯片验证】RTL仿真中X态行为的传播 —— 从xprop说起 |
【芯片验证】年轻人的第一个systemVerilog验证环境全工程与解析 |
【芯片设计】verilog中有符号数和无符号数的本质探究 |
【芯片设计】论RTL中always语法的消失术 |
【芯片设计】代码即注释,注释即代码 |
【芯片设计】700行代码的risc处理器你确实不能要求太多了 |
入职芯片开发部门后,每天摸鱼之外的时间我们要做些什么呢 |
如何计算系统的outstanding 和 burst length? |
芯片搬砖日常·逼死强迫症的关键词不对齐事件 |
熟人社会里,一群没有社会价值的局外人 |