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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3486|回复: 20

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

[复制链接]
发表于 2023-4-4 08:39:17 | 显示全部楼层 |阅读模式
50资产
1.在综合时候,DC是怎么知道ICG cell 的,或是这么说,DC是怎么知道lib 的standard cell 有Clock-gating 的功能,假如有多个standard cell 有Clock-gating功能,他怎么选择的?

2.看很多资料上说,以下风格才能在DC过程中自动插入ICG。
always@ {posedge clk)    if(valid) begin        dout <= din;    endend
但是如果是以下这个风格呢?是不是不行?如果是不行的话,是不是说明clock-gating只有在特定的条件才可以插入。或者有更好的verilog写法?
always@ {posedge clk)
    if(rst_n)
       dout <= 'b0;
    else if(conditiona)
       dout <= a;
    else if(conditiona)
       dout <= dout  + 1'b1;
    else if(valid) begin        dout <= din;    endend
3.假如说一个项目分很多功能模块,在某种情况下,为了节省功耗,不需要一些功能开启,个人理解的做法是不让对应需要关闭的功能整个模块的时钟开启,
这个时候是不是不能用clock-gating,根据问题2,clock-gating只能是关闭某些特定reg的时钟,不能是关闭整个模块时钟?不知道这么理解对吗?
假如是clock-gating不能关闭整个模块时钟,需要关闭整个模块时钟,需要那些那些技术(跪求给点指导资料或方向说明)


4.如果用到clock-gating 综合的时候时序怎么约束?

最佳答案

查看完整内容

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
发表于 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 09:45:37 | 显示全部楼层
感谢大佬在百忙之中回复,不胜感激,相对第四个问题,有点疑惑,就是相对于clock_gating约束,时钟等需要加入什么约束指令,或者是像正常的约束就好,不用对clock_gating 做特别的约束
发表于 2023-4-4 10:07:21 | 显示全部楼层


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


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

 楼主| 发表于 2023-4-4 10:14:50 | 显示全部楼层
非常感谢前辈的回复,给您添麻烦了,感谢
发表于 2023-4-6 10:40:30 | 显示全部楼层


jake 发表于 2023-4-4 08:39
1. lib里面ICG cell有一个attribute, clock_gating_integrated_cell,综合工具看到这个attribute就知道这是 ...


你好前辈,请问一下第三点直接在代码里例化ICG,是直接用RTL写一个clock gating模块,然后工具自动将这个clock gating模块映射为标准单元库元件;还是直接例化一个标准单元库里的icg呢?
发表于 2023-4-6 12:01:18 | 显示全部楼层


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


推荐直接例化库里的ICG。

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

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


jake 发表于 2023-4-6 12:01
推荐直接例化库里的ICG。

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


谢谢回复!明白了,多谢前辈!
 楼主| 发表于 2023-4-6 16:36:02 | 显示全部楼层


jake 发表于 2023-4-4 08:39
1. lib里面ICG cell有一个attribute, clock_gating_integrated_cell,综合工具看到这个attribute就知道这是 ...


首先感谢前辈的的慷慨,另外还有一个疑惑,冒昧请教一下前辈。
自己也找了资料,心里也有点认知,只是心里需要没有得到权威的确认,心里毛毛的



                               
登录/注册后可看大图

                图片引用CSDN 拾陆楼,并做了更改


1、比如数据launch 端,和数据latch端,检查的时候,时钟是穿过Gating cell ,如蓝色线,去检查launch端的数据到达latch端的时序。

2、一般是什么情况下UAND0 的输出会被认为是时钟,而不是信号。
3、DC 综合的时候需要写入什么约束信息告诉pr、pt,网表里面有clock_gating_cell,  pr、pt的时候有没有可能当成异步时钟,没有进行时序验证.
(PS,问的问题有点小白,打扰了)
发表于 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,也就不会注意到这些细节了。

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

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-1 19:36 , Processed in 0.039961 second(s), 6 queries , Gzip On, Redis On.

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