在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 10090|回复: 23

[求助] 关于clock-gating的疑问,跪求解答

[复制链接]
发表于 2023-4-4 08:39:18 | 显示全部楼层
1. lib里面ICG cell有一个attribute, clock_gating_integrated_cell,综合工具看到这个attribute就知道这是ICG。

2. 写作风格不太好,工具会有困难infer ICG。工具寻找的是这样一种风格。
always @(posedge clk or negedge rst_n) begin
   if (!rst_n) begin
      many_bits_r <= 'h0;
   end
   else begin
      if (condition_a | condition_b | condition_c) begin
         if (condition_a) begin
            ...
         end
         else if (condition_b) begin
            ...
         end
         else begin
            ...
         end
      end
      else begin
         many_bits_r <= many_bits_r;
      end
    end
end

3. 直接在RTL里例化ICG。实际designer在RTL里直接例化ICG,省功耗的效果要比工具加好很多,毕竟工具不知道应用场景。

4. ICG E pin有timing要求,工具读入.lib自然就知道了。感兴趣的话打开.lib看一下
回复

使用道具 举报

发表于 2023-4-4 10:07:21 | 显示全部楼层


   
HOU_TX 发表于 2023-4-3 19:45
感谢大佬在百忙之中回复,不胜感激,相对第四个问题,有点疑惑,就是相对于clock_gating约束,时钟等需要加 ...


通常不需要特别的约束。工具知道穿过ICG的时钟的约束,驱动E的reg通常是同一个时钟,工具知道怎么time这个path。

回复

使用道具 举报

发表于 2023-4-6 12:01:18 | 显示全部楼层


   
三岁就十分拽 发表于 2023-4-5 20:40
你好前辈,请问一下第三点直接在代码里例化ICG,是直接用RTL写一个clock gating模块,然后工具自动将这个 ...


推荐直接例化库里的ICG。

如果用RTL写,综合工具不一定能正确map到ICG。

回复

使用道具 举报

发表于 2023-4-6 22:15:37 | 显示全部楼层


   
HOU_TX 发表于 2023-4-6 02:36
首先感谢前辈的的慷慨,另外还有一个疑惑,冒昧请教一下前辈。
自己也找了资料,心里也有点认知,只是心 ...


以图为例,UAND0/B接的是CLKA,在SDC中应该有create_clock约束加到CLKA这个net上。工具看到CLKA穿过UAND0,默认就会把UAND0当成clock gating cell。

PR,STA工具默认应该也是这样把UAND0当成clock gating cell,不需要加额外的约束。
这个图其实是有重大缺陷的。PR做min分析时通常会报clock gating hold violation。UDFF0/Q后面的圈圈要引入接近半个CLK周期的delay才能拿满足UAND0 clock gating hold。如果CLKA慢,那就几乎不可能实现这么大的delay了。 解决办法就是把 UDFF0 改成 falling edge DFF。
这个问题一点都不小白。有经验的前端都会使用标准的ICG而不是AND,后端几年都不会碰到这样的timing,也就不会注意到这些细节了。

回复

使用道具 举报

发表于 2023-4-8 06:55:13 | 显示全部楼层


   
HOU_TX 发表于 2023-4-7 03:12
前辈,您好,又叨扰了,是这样的,做芯片需要百分之百的正确,所以有一些疑问还是想确认一下
我的应用是 ...


1. 正解,工具会穿过ICG找到挂在gclk上的flop,并把gclk当作clk的一部分

2. 综合不做CTS, 整个clk network当作ideal network。gclk是clk的一部分,也就成了ideal network
按图中所画,不需要对gclk做约束。 图中所画的是这样一个场景:
__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~
_____________________~~__~~__~~__~~__~~______________
gclk起来后的period没有变,沿用clk的period及其他attribute没有问题


有一个场景是这样的。
__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~
_______~~_______~~_______~~______~~_______~~_______~~
如果是特别高速的时钟,可以考虑在gclk上加个create_generated_clock,用edge,工具可以选择慢一些的flop挂在gclk上,可以省功耗,close timing也容易一些
一般速度,不加create_generated_clock也没问题


回复

使用道具 举报

发表于 2023-4-8 23:08:36 | 显示全部楼层
本帖最后由 jake 于 2023-4-8 09:11 编辑


   
HOU_TX 发表于 2023-4-8 05:37
前辈,实在不好意思,又打扰您了,多次打扰实在抱歉,在练习过程中遇到问题,百度Google 又质询了身边好 ...


这个ICG的描述有点误差。
这个cell前端是一个latch。这个latch在CK=0时通过,在CK=1的时候锁存。
如果从CK的角度看,只要E在CK=1之前到来,就能保证E被latch锁存。这样理解posedge可能容易一些。

回复

使用道具 举报

发表于 2023-4-8 23:33:37 | 显示全部楼层


   
HOU_TX 发表于 2023-4-8 05:37
前辈,实在不好意思,又打扰您了,多次打扰实在抱歉,在练习过程中遇到问题,百度Google 又质询了身边好 ...


换个说法。

为什么CK下降沿不需要查E,因为CK下降沿后CK=0,ECK为0,E在下降沿前无论是什么值都不会影响ECK在CK下降沿后输出为0。
为什么CK上升沿需要查E,因为如果E=1,那么ECK会输出1;如果E=0, ECK为0。E在CK上升沿之前的值决定了ECK的输出。从这个意义上讲,posedge是有道理的。

回复

使用道具 举报

发表于 2023-4-9 10:04:56 | 显示全部楼层


   
HOU_TX 发表于 2023-4-8 09:56
create_clock -name CLKA -period 10 -waveform {0 5} \[get_ports CLKA]
create_clock -name CLKB -per ...


这个电路里用的是AND,和ICG完全不同。
这里的关键是gating pin是由CLKA的falling edge产生的。
report里一路是从CLKA falling edge(5)开始算的delay,另一路是从CLKB下一个rising edge(10)开始算的delay。只要gating pin能在CLKB下一个rising edge(10)前到达,就能保证AND可以完整地输出时钟。这里的关键词是"完整“。这种用组合逻辑做clock gate最怕的就是产生一个窄脉冲/毛刺。
用组合逻辑做clock gate要非常非常小心。
回复

使用道具 举报

发表于 2024-1-17 00:01:17 | 显示全部楼层


   
0_hila_0 发表于 2024-1-16 00:31
您好,想请假一下,综合的时候因为clock gating单元驱动的寄存器比较多,里面的与门负载导致的延迟比较大 ...


综合的时候clock path是当成ideal的。
不妨report_timing看一下,launch/capture clock edge的数字应该不包括clock path上ICG的cell delay。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-9-13 14:16 , Processed in 0.018438 second(s), 5 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表