jake的个人空间 https://blog.eetop.cn/1592 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

组合逻辑实现clock gating的坑

已有 480 次阅读| 2024-9-30 08:22 |系统分类:芯片设计

使用组合逻辑实现clock gating会遇到一些“坑”。缺乏经验的前端往往会把这些“坑”留给后端


先看一个使用AND gate实现clock gating的例子。实验电路如下。

and_clk_gate_schematic.png

SDC里时钟周期约束为100ns5% uncertainty

先看Tempus怎么报Clock Gating Setup Check

report_timing_clock_gating_setup.png

94.478ns slackOK

再看Tempus怎么报Clock Gating Hold Check

report_timing_clock_gating_hold.png

非常糟糕,-49.556ns slack,差了几乎半个clk周期。


为什么会这样?首先我们要从设计角度来分析。使用组合逻辑实现clock gating时,需要特别注意enable到达时钟控制逻辑门的时间,这个时间要落在受控时钟的inactive region,只有这样才能保证产生的gated clock没有毛刺。


以上面电路为例。假设enable(A2)有一个0->1的变化。如果这个enable 0->1的变化会出现在输入时钟为高电平的区间,经过AND后受控时钟高电平会被切掉一部分,造成gated clock第一个高电平输出为一个窄脉冲。假设launch有很大的skewenable(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区间。

§  对于ANDNAND实现的clock gating,工具推测时钟为active high (infer active high clock)。时钟inactive区间为时钟低电平时间。

§  对于ANDNAND实现的clock gating,工具做clock gating setup check时,capture用的是inactive区间结束时刻的clock edge。在上面这个例子里就是受控时钟的下一个rising edge

§  对于ANDNAND实现的clock gating,工具做clock gating hold check时,capture用的是inactive区间开始时刻的clock edge。在上面这个例子里就是受控时钟的falling edge

Picture1.png

1ANDNAND实现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,如下如下面这个实验电路。


and_clk_gate_inv_clk_schematic.png

这里enable的锁存触发器前加了个INV,下降沿产生enable

report_timing_clock_gating_setup_clk_inv.png

Setup没问题,slack比以前少了半个周期。launch用的是clock falling edgecapture用的仍然是受控时钟inactive区间结束时刻的clock edge,即下一个clock rising edge

report_timing_clock_gating_hold_clk_inv.png

Hold也没问题,launch用的是clock falling edgecapture用的仍是受控时钟inactive区间开始时刻的clock edge,即clock falling edge


需要注意的是,对于使用ORNOR实现的clock gating,工具做分析时有些不同。

§  对于ORNOR实现的clock gating,工具推测时钟为active low (infer active low clock)。时钟inactive区间为时钟高电平时间。

§  对于ORNOR实现的clock gating,工具做clock gating setup check时,capture用的是inactive区间结束时刻的clock edge,即受控时钟的falling edge

§  对于ORNOR实现的clock gating,工具做clock gating hold check时,capture用的是inactive区间开始时刻的clock edge,即受控时钟的rising edge

Picture2.png

2ORNOR实现的clock gating,工具clock gating setup check, hold check使用的clock edge


下面是一个使用OR gate实现clock gating的例子。实验电路如下。

s3_or_ck_gate.png


report_timing_clock_gating_setup_or_ck_gate.png

这里launch用的是clock rising edge,无争议。capture用的却是受控时钟inactive区间结束时刻的clock edge,即fallinge edge

report_timing_clock_gating_hold_or_ck_gate.png


总结一下。

使用组合逻辑实现clock gating时,为了保障产生的gated clock无毛刺,设计上要保障enable到达控制逻辑门的时间在受控时钟的inactive region,不要给后端挖坑。

工具在分析组合逻辑实现的clock gating时,会遵循gated clock无毛刺的原则对enabletiming进行特殊分析。



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 6

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 261

    粉丝
  • 95

    好友
  • 333

    获赞
  • 293

    评论
  • 2498

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-10-5 19:16 , Processed in 0.013504 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部