继续项目总结输出系列,之前比较定向的学习过自动时钟门控的结构,这篇相当于在之前的文章基础上进一步的学习。
【芯片设计】关于自动时钟门控的一探究竟
在自动时钟门控之外,还有时钟自门控的技术可用于功耗优化,这个是在本项目里我第一次关注的,印象中之前并没有配置过这个选项。自动时钟门控和时钟自门控两个词太接近了,还是采用sdc中的说法称之为XOR自门控吧,先看看sdc模板中对XOR自门控的描述。
# Use -self_gating option in addition to -gate_clock for potentially saving# additional dynamic power, in topographical mode only. Registers that are# not clock gated will be considered for XOR self gating.# XOR self gating should be performed along with clock gating, using -gate_clock# and -self_gating options. XOR self gates will be inserted only if there is# potential power saving without degrading the timing.# An accurate switching activity annotation either by reading in a saif# file or through set_switching_activity command is recommended.# You can use "set_self_gating_options" command to specify self-gating# 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的违例。因此真的应用该选项时,工具必然有一套计算规则来衡量是否可以加入,在目前项目经历里个人觉得不算太实用。
系列文章入口——
【芯片设计】SoC 101(一):绪论 | 【芯片设计】FIFO漫谈(零)从无处不在的FIFO开始说起 | 【芯片设计】计算机体系结构(一)虚拟内存 | 【芯片设计】深入理解AMBA总线(零)绪论
| 【芯片设计】握手协议的介绍与时序说明 | 【芯片设计】复位那些小事 —— 复位消抖 | 【芯片设计】快速入门数字芯片设计(一)Introduction | 【芯片验证】UVM源码计划(零)下定决心读源码前的自测环节
| 【芯片设计】异步电路碎碎念(一) 到底什么是异步电路
| 【芯片设计】从RTL到GDS(一):Introduction
| 其他文章链接——
【芯片验证】sva_assertion: 15道助力飞升的断言练习 | 【芯片验证】可能是RTL定向验证的巅峰之作 | 【芯片验证】RTL仿真中X态行为的传播 —— 从xprop说起 | 【芯片验证】年轻人的第一个systemVerilog验证环境全工程与解析 |
【芯片设计】verilog中有符号数和无符号数的本质探究
| 【芯片设计】论RTL中always语法的消失术 | 【芯片设计】代码即注释,注释即代码 | 【芯片设计】700行代码的risc处理器你确实不能要求太多了 |
入职芯片开发部门后,每天摸鱼之外的时间我们要做些什么呢 | 如何计算系统的outstanding 和 burst length? | 芯片搬砖日常·逼死强迫症的关键词不对齐事件 | 熟人社会里,一群没有社会价值的局外人 |
|