| |
使用组合逻辑实现clock gating会遇到一些“坑”。缺乏经验的前端往往会把这些“坑”留给后端。
先看一个使用AND gate实现clock gating的例子。实验电路如下。
SDC里时钟周期约束为100ns,5% uncertainty。
先看Tempus怎么报Clock Gating Setup Check。
有94.478ns slack,OK。
再看Tempus怎么报Clock Gating Hold Check。
非常糟糕,-49.556ns slack,差了几乎半个clk周期。
为什么会这样?首先我们要从设计角度来分析。使用组合逻辑实现clock gating时,需要特别注意enable到达时钟控制逻辑门的时间,这个时间要落在受控时钟的inactive region,只有这样才能保证产生的gated clock没有毛刺。
以上面电路为例。假设enable端(A2)有一个0->1的变化。如果这个enable 0->1的变化会出现在输入时钟为高电平的区间,经过AND后受控时钟高电平会被切掉一部分,造成gated clock第一个高电平输出为一个窄脉冲。假设launch有很大的skew,enable(A2) 0->1出得比较晚,gated clock第一个高电平输出就会变成一个毛刺。我们知道时钟路径上的毛刺会造成时序电路混乱,兵家大忌!上面例子里工具报了很大的hold violation,其实更多是对designer的灵魂拷问 -- 是不是真的不在乎时钟路径上出现一个毛刺?是不是SDC漏了set_disable_clock_gating_check?
为了保障gated clock没有毛刺,工具会对组合逻辑实现的clock gating做特殊分析,并在clock gating setup check, hold check的时候检查enable到达控制逻辑门的时间落在受控时钟的inactive区间。
§ 对于AND,NAND实现的clock gating,工具推测时钟为active high (infer active high clock)。时钟inactive区间为时钟低电平时间。
§ 对于AND,NAND实现的clock gating,工具做clock gating setup check时,capture用的是inactive区间结束时刻的clock edge。在上面这个例子里就是受控时钟的下一个rising edge。
§ 对于AND,NAND实现的clock gating,工具做clock gating hold check时,capture用的是inactive区间开始时刻的clock edge。在上面这个例子里就是受控时钟的falling edge。
图1:AND,NAND实现clock gating,工具clock gating setup check, hold check使用的clock edge
有些场景clock经过一些组合逻辑并不是为了产生gated clock。譬如将内部时钟mux出来做测试,这时候经过一堆组合逻辑后出来的并非是通常意义的gated clock,而是仅用于观测,即使第一个高电平变成一个毛刺也无所谓。这种场景SDC加上set_disable_clock_gating_check可以避免不必要的clock gating setup/hold check。还有个小技巧 – 设计里可以加一个CTS exclude buffer,后端做CTS的时候可以排除clock path上的不需要考虑的组合逻辑。
有些场景确实会用AND后产生的gated clock驱动时序电路,这时候就不能盲目加上set_disable_clock_gating_check了。完全靠后端加BUF去修会很麻烦,最好的是在设计的时候就考虑到,在设计上保障不给后端”挖坑”。设计上最简单的fix就是用下降沿产生enable,如下如下面这个实验电路。
这里enable的锁存触发器前加了个INV,下降沿产生enable。
Setup没问题,slack比以前少了半个周期。launch用的是clock falling edge,capture用的仍然是受控时钟inactive区间结束时刻的clock edge,即下一个clock rising edge。
Hold也没问题,launch用的是clock falling edge,capture用的仍是受控时钟inactive区间开始时刻的clock edge,即clock falling edge。
需要注意的是,对于使用OR,NOR实现的clock gating,工具做分析时有些不同。
§ 对于OR,NOR实现的clock gating,工具推测时钟为active low (infer active low clock)。时钟inactive区间为时钟高电平时间。
§ 对于OR,NOR实现的clock gating,工具做clock gating setup check时,capture用的是inactive区间结束时刻的clock edge,即受控时钟的falling edge。
§ 对于OR,NOR实现的clock gating,工具做clock gating hold check时,capture用的是inactive区间开始时刻的clock edge,即受控时钟的rising edge。
图2:OR,NOR实现的clock gating,工具clock gating setup check, hold check使用的clock edge
下面是一个使用OR gate实现clock gating的例子。实验电路如下。
这里launch用的是clock rising edge,无争议。capture用的却是受控时钟inactive区间结束时刻的clock edge,即fallinge edge。
总结一下。
使用组合逻辑实现clock gating时,为了保障产生的gated clock无毛刺,设计上要保障enable到达控制逻辑门的时间在受控时钟的inactive region,不要给后端挖坑。
工具在分析组合逻辑实现的clock gating时,会遵循gated clock无毛刺的原则对enable的timing进行特殊分析。