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

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: HOU_TX

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

[复制链接]
 楼主| 发表于 2023-4-7 08:46:06 | 显示全部楼层


jake 发表于 2023-4-6 22:15
以图为例,UAND0/B接的是CLKA,在SDC中应该有create_clock约束加到CLKA这个net上。工具看到CLKA穿过UAND0 ...


谢谢前辈,祝前辈一顺百顺
 楼主| 发表于 2023-4-7 17:12:28 | 显示全部楼层


jake 发表于 2023-4-6 22:15
以图为例,UAND0/B接的是CLKA,在SDC中应该有create_clock约束加到CLKA这个net上。工具看到CLKA穿过UAND0 ...


前辈,您好,又叨扰了,是这样的,做芯片需要百分之百的正确,所以有一些疑问还是想确认一下
我的应用是下图


                               
登录/注册后可看大图



手动实例化一个ICG去控制整个模块的时钟,
DC综合约束的过程中,对时钟方面约束如下
     set CLK_NAME clk
      create_clock -period $CLK_PERIOD [get_ports $CLK_NAME]    ;
      set_ideal_network                                                                [get_ports $CLK_NAME ]          ;
      set_dont_touch_network                                                            [get_ports $CLK_NAME ]          ;
      set_drive                    0                                             [get_ports $CLK_NAME ]          ;
      set_clock_uncertainty            -setup     $CLK_UNCERTAINTY        [get_ports $CLK_NAME ]          ;
      set_clock_transition             -max       $CLK_TRANSITION         [get_ports $CLK_NAME ]
      set_clock_latency   -source      -max       $CLK_SRC_LATENCY        [get_ports $CLK_NAME ]        
      set_clock_latency                -max       $CLK_LATENCY            [get_ports $CLK_NAME ]

       没有对GCLK做任何约束

       因为是手动直接在代码中实例化的,没有在DC综合约束文件里有任何的关于clock_gating 的约束指令
疑问1 ,在综合阶段,针对于module A ,查看时序分析结果,发现都是以CLK为时钟进行分析,没有以gclk 为时钟的,这个对吗
        (根据前辈的之前指导,个人的理解如下,
           1、ICG,类似于时钟插buff一样,时钟会穿过ICG去做时序检查?不知道怎么理解正确不)
           2、因为DC综合约束的过程中, 设定 clk 为 ideal network ,所以DC在约束分析的过程中直接忽略ICG 带来的时钟skew问题?直接把gclk 当成clk 来做时序约束。PT阶段需要检查ICG带来的skew问题?)
           PS:不知道上面俩个理解正确不?
疑问2.gclk 需要约束吗?(个人理解,应该是不需要)





发表于 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 09:41:36 | 显示全部楼层


jake 发表于 2023-4-8 06:55
1. 正解,工具会穿过ICG找到挂在gclk上的flop,并把gclk当作clk的一部分

2. 综合不做CTS, 整个clk netwo ...


收到,感谢前辈
 楼主| 发表于 2023-4-8 19:37:16 | 显示全部楼层


HOU_TX 发表于 2023-4-8 09:41
收到,感谢前辈


前辈,实在不好意思,又打扰您了,多次打扰实在抱歉,在练习过程中遇到问题,百度Google 又质询了身边好多人,都实在找不到答案,故实在厚脸皮冒昧再次叨扰。


手动实例插入门控时钟,在编译和约束阶段,没有做任何的clock-gating 约束等,正常的complie --->>compile_ultra

ICG stanard cell 如下

                               
登录/注册后可看大图



                               
登录/注册后可看大图

lib 的信息如下

                               
登录/注册后可看大图


查看DC综合timing 报告如下
max

                               
登录/注册后可看大图

这里怎么感觉不对呢,按照上面的standard cell 信息,个人理解是,posedge上升沿触发,(非门)等同于下降沿latch的与门 clock-gating .
疑问1  如上图的红色 框 “clock clk (rise edge )”, 这里不应该是检查下降沿的吗,
(ps:多次打扰,不知道前辈方便留个联系方式,给前辈转个红包,以表心意)

发表于 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-8 23:56:46 | 显示全部楼层


jake 发表于 2023-4-8 23:33
换个说法。

为什么CK下降沿不需要查E,因为CK下降沿后CK=0,ECK为0,E在下降沿前无论是什么值都不会影响 ...


create_clock -name CLKA -period 10 -waveform {0 5} \[get_ports CLKA]
create_clock -name CLKB -period 10 -waveform {0 5} \[get_ports CLKB]


                               
登录/注册后可看大图


                               
登录/注册后可看大图

发表于 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-16 14:31:06 | 显示全部楼层


jake 发表于 2023-4-6 22:15
以图为例,UAND0/B接的是CLKA,在SDC中应该有create_clock约束加到CLKA这个net上。工具看到CLKA穿过UAND0 ...


您好,想请假一下,综合的时候因为clock gating单元驱动的寄存器比较多,里面的与门负载导致的延迟比较大,如何告诉综合工具这里与门先用理想的延迟呢,希望负载导致的延迟放在时钟树综合的时候去做
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2025-1-3 16:40 , Processed in 0.068799 second(s), 5 queries , Gzip On, Redis On.

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