4.4时钟树单元/连线
4.4.1 时钟门控的原理
在典型的数字芯片中,时钟网络的功耗可以占到总量的50%,这是一个庞大的数字。一个行之有效的方案是使用时钟门控,将当前未工作逻辑的时钟树关闭。比如下面的逻辑,在EN是0时,可以将右侧的register bank的时钟关闭。
图6
时钟门控逻辑加入的方式有两种:手动和自动。
a) 手动方式
在每个IP模块的时钟根节点加入,EN信号可以由程序设定产生。
b) 自动方式
dc_shell > set_clock_gating_style (options) 选择时钟门控的方式和条件
dc_shell > analyze -f design.v 读入设计
dc_shell > elaborate MY_DESIGN 构造设计
dc_shell > insert_clock_gating 将符合条件的逻辑门控
dc_shell > create_clock -period 10 -name CLK 创建时钟
dc_shell > propagate_constraints -gate_clock 加入时钟门控单元的时序约束
手动和自动结合的方式可以达到最好的效率。
4.4.2 gating 单元的选择
a)latch-based(图7)
图7
b)latch-free(图8)
(图8)
通过set_clock_gating_style的下列选择,设计者可以控制门控单元的选取,如图9所示。
图9
选择考虑:
1)latch:用还是不用,是个问题。
latch-free的方案中,EN信号必须在时钟负沿前稳定,否则时钟会出现毛刺, 造成只留给EN产生逻辑半个时钟周期的时间。latch-based方案则不存在这个限制,但引入latch使时序分析,测试复杂性增加。故选择哪种方案需要设计者权衡决定。
2)正沿/负沿寄存器需要指定不同的门控单元
比如latch-based方案:正沿FF用and门,负沿FF用or门
3)integrated clock-gating cell/普通单元
在生成库的过程中,可以创建专门的集成时钟门控单元,以获得较好的时序。