FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-所有问题-其他-正文

数字IC笔试题中,关于‘时钟门控(Clock Gating)’的低功耗设计,通常会考察哪些具体电路实现和时序分析问题?

硅农预备役2024硅农预备役2024
其他
10小时前
0
0
3
低功耗设计是笔试重点,时钟门控更是基础。除了概念,面试官常会问:1. 基于锁存器的时钟门控单元电路图是怎样的?为什么用锁存器不用触发器?2. 时钟门控引入后,对时钟树的 skew 和 latency 有什么影响?3. 在综合和静态时序分析(STA)时,如何处理门控时钟?希望得到一些结合电路和流程的深入解析。
硅农预备役2024

硅农预备役2024

这家伙真懒,几个字都不愿写!
51001K
分享:
数字IC后端面试中,关于‘功耗分析(Power Analysis)’通常会问哪些问题?如何从报告中分析出功耗热点和优化方向?上一篇
2026年春招,芯片公司的‘模拟版图工程师’岗位,对于没有流片经验的应届生,面试主要考察哪些版图绘制技能和基础理论?下一篇
回答列表总数:10
  • 逻辑综合学习者

    逻辑综合学习者

    这个问题很实际,我面试时被问过,后来做项目也踩过坑。简单说,笔试常考的就是 ICG 电路、时序影响、STA 设置。

    电路图方面,标准 ICG 是锁存器 + 与门。锁存器 D 接 enable,CLK 接原始时钟(假设低电平透明),Q 接与门的一个输入,另一个输入接原始时钟,输出就是门控时钟。锁存器的作用是防止使能信号变化时产生毛刺。因为当 CLK 为低时,锁存器透明,enable 直接传到 Q;当 CLK 变高时,锁存器锁存当前的 enable 值,在整个高电平期间保持不变。这样与门输出的时钟只在 enable 为高且 CLK 为高时才有效,避免了 enable 在时钟高电平时变化导致的毛刺。如果用触发器,需要时钟沿触发,容易因时序对齐问题产生短脉冲。

    对时钟树 skew 和 latency 的影响:门控单元相当于在时钟路径上插入逻辑,会增加 latency。如果门控单元放在时钟源附近,那么门控后的时钟树需要重新平衡,可能会增加 skew。通常,在 CTS 阶段,工具会把门控单元当作时钟树的一部分,进行缓冲和平衡,以控制 skew。但要注意,门控使能信号本身是数据信号,它的延迟会影响门控时钟的有效性,所以也要约束使能路径的时序。

    综合和 STA 处理:综合时,一般用 compile_ultra 或类似命令,工具会自动识别时钟门控结构并映射到工艺库中的 ICG 单元。如果没有自动识别,可能需要手动实例化 ICG 单元。在 STA 中,关键是要设置正确的时钟门控检查。使用 set_clock_gating_check 命令指定建立保持时间要求,通常基于库中 ICG 单元的时序信息。同时,要检查使能信号到锁存器的时序,以及门控时钟到寄存器的时钟路径。在 PrimeTime 等工具中,还需要考虑门控时钟的传播和约束。

    常见坑:一是使能信号可能来自不同时钟域,需要同步处理,否则亚稳态可能传到门控时钟;二是门控时钟的时钟质量(duty cycle、jitter)可能受影响,需要验证;三是在 DFT 测试时,门控时钟可能妨碍扫描链测试,需要插入测试模式绕过门控。笔试时如果能提到这些,会加分。

    2小时前
  • 单片机新手

    单片机新手

    笔试里问时钟门控,其实是想看你有没有实际理解,不是光背概念。我当年被问过好几次,总结下来就三个核心点:电路、时序影响、STA处理。

    第一,电路实现。标准时钟门控单元是用锁存器做的,一个锁存器加一个与门。锁存器在时钟低电平时透明,高电平时锁存。为什么用锁存器不用触发器?因为锁存器在电平期间透明,能避免使能信号(enable)和时钟边沿对齐问题。如果用触发器,使能信号需要在时钟沿前满足建立时间,但使能信号本身可能来自同一个时钟域,容易产生毛刺或时序违例。锁存器在时钟为低时采样使能,当时钟变高时,锁存值稳定,再和时钟相与,输出门控时钟。这样能确保门控时钟不会产生毛刺,这是关键。

    第二,对时钟树的影响。门控单元通常会放在时钟树的根部或分支点。如果放在根部,门控后的时钟到各个寄存器的路径可能引入额外的 skew 和 latency。因为门控单元本身有延迟,而且工具在平衡时钟树时,需要把门控单元当作时钟树的一部分来平衡。所以,时钟门控会增加整体时钟树的 latency,也可能导致 skew 增加,如果布局不好。通常做法是在设计时把门控单元当作时钟树的一部分,在 CTS(时钟树综合)阶段一起优化。

    第三,STA 处理。综合时,需要把时钟门控单元识别出来,设置成“integrated clock gating cell”(ICG),工具会特殊处理其时序。在 STA 中,主要检查两个路径:一是使能信号到锁存器的时序(锁存器是电平敏感的,所以检查 setup/hold 要在电平窗口内);二是门控时钟输出到寄存器的时序。要注意设置时钟门控的约束,比如 set_clock_gating_check 来定义建立保持时间检查。如果处理不好,可能导致门控时钟产生毛刺,功能出错。

    总之,笔试时画清楚电路图,解释锁存器防毛刺原理,说明对时钟树的影响和 STA 约束方法,基本就能过关了。

    2小时前
  • 硅农预备役2024

    硅农预备役2024

    2. 笔试常考点和流程实操

    你提的这几个确实是笔试和面试高频题。我结合项目经验说一下。

    电路图:就是 latch + AND。Latch的D接使能EN,CLK接原始时钟CLK(注意是负电平透明,所以接反相时钟也行,看工艺库)。Latch的Q接AND的一个输入,AND另一个输入接原始时钟CLK。输出就是门控时钟GCLK。画图时注意标出latch是电平敏感。

    为什么是latch?上面说了防毛刺。笔试可能会让你画出使能信号在不同时间变化时,用D触发器方案会产生毛刺的波形图,用latch方案则是干净的波形。关键点:latch在CLK=0时透明,EN变化会直接影响到输出,但此时CLK=0,与门输出还是0。当CLK从0变1时,EN已经被锁住,与门输出是一个从0到1的干净上升沿。

    对skew/latency影响:实际项目中,时钟门控单元(ICG)是标准单元库的一部分,有固定的延迟和transition特性。CTS时,工具会把ICG像其他buffer/inverter一样插入时钟树进行平衡。但要注意,ICG的使能信号是数据路径,它的时序也很关键(setup/hold),如果使能信号来得太晚,可能导致门控时钟第一个脉冲缺失。所以前端综合时就要对使能路径加约束,后端要检查。

    综合和STA处理:
    综合阶段,一般代码里会用专门的时钟门控单元例化,或者用综合指令(如`// synopsys clock_gate`)引导工具自动插入。工具会进行clock gating check,检查使能信号在latch关闭前的setup时间(类似setup check,但针对电平敏感锁存器)。
    STA阶段,主要做三件事:一是定义生成时钟(create_generated_clock -name GCLK -source [get_pins ICG/CLK] -divide_by 1 -combinational [get_pins ICG/GCLK]),二是设置时钟门控检查(set_clock_gating_check -setup 0.5 -hold 0.1 [get_cells ICG]),具体值看库。三是像分析普通时序路径一样分析使能信号路径。

    常见坑:忘了设clock_gating_check,导致hold问题没发现;门控时钟的生成时钟定义错了源点;使能路径的时钟域没搞清楚,导致跨时钟域问题被忽略。

    7小时前
  • 数字IC萌新

    数字IC萌新

    1. 锁存器门控电路和时序影响

    锁存器门控电路通常是一个与门加一个锁存器。使能信号先经过锁存器,锁存器在时钟为低电平时透明,在时钟为高电平时保持。锁存器的输出再和时钟信号进行与操作,产生门控后的时钟。

    为什么用锁存器不用触发器?核心是为了避免毛刺。如果直接用触发器,使能信号在时钟有效沿变化,与门输出可能会产生一个窄脉冲(毛刺),这个毛刺会被后续电路当作有效时钟沿,导致功能错误。锁存器在时钟低电平时采样使能,在时钟变高前锁存,保证了在时钟高电平期间,与门的另一个输入是稳定的,这样与门输出就是一个干净的、从低到高的完整时钟脉冲,没有毛刺。

    对时钟树的影响:插入时钟门控单元后,它本身会带来额外的延迟(cell delay)和转换时间(transition time)。对于被门控的时钟路径,它的 latency 会增加(因为多了个门)。更重要的是,它会影响 skew。工具在做时钟树综合(CTS)时,会把门控单元当作时钟树的一部分进行平衡。设计不好会导致门控时钟路径和始终开启的时钟路径之间 skew 变大,引发时序问题。所以后端流程里,通常会把门控单元放在时钟树的早期(靠近根节点),或者把它纳入 CTS 的平衡目标里。

    STA处理:在综合和STA阶段,工具需要识别时钟门控结构。通常通过 set_clock_gating_check 命令来设置。这个命令会告诉工具在门控时钟的使能信号和时钟信号之间建立时序检查,确保使能信号在锁存器关闭(时钟上升沿)前足够时间稳定,防止毛刺。分析时,门控后的时钟会被当作生成的时钟(generated clock)来处理,需要定义其源和分频/门控关系。

    7小时前
  • FPGA实验小白

    FPGA实验小白

    来,直接上干货,针对你提的这几个点。

    1. 电路实现:就是低电平透明的锁存器接一个与门。锁存器的D接使能EN,CLK接主时钟(注意是反相,因为低电平透明),Q输出接与门的一个输入,与门另一个输入接主时钟,输出就是门控时钟GCLK。不用触发器就是为了防glitch,上面那位说得很清楚了。

    2. 对skew和latency的影响:简单说就是会增加且更难控制。门控单元本身的延迟增加了整体clock latency。更麻烦的是skew,因为使能信号EN是数据信号,它的布线延迟通常没有被像时钟树那样精心平衡,导致EN到达不同门控单元的时间有差异,这直接造成了门控时钟输出的相位差,即插入skew。所以先进工艺里都用ICG,并且CTS会把ICG也纳入平衡范围。

    3. 综合和STA处理:
    综合阶段,现在都用工具自动插入。你写“always @(posedge clk) if (!en) q <= q; else q <= d;”这种,综合工具能推断出门控。但最好用专门的RTL编码风格或者直接例化工艺库里的ICG单元,这样更可控。

    STA阶段是核心。你需要做两件事:
    第一,创建生成时钟。用命令比如 create_generated_clock -name GCLK -source [get_ports clk] -divide_by 1 -master_clock clk [get_pins gating_cell/Y]。这里-divide_by 1是因为它只是门控,不是分频。
    第二,设置时钟门控检查。用 set_clock_gating_check 命令。工具会自动检查EN信号在锁存器锁存窗口(CLK低电平)的建立保持时间。如果EN是多个信号组合产生的,这条路径的时序就必须满足,否则会关闭失败或产生毛刺。

    一个常见的坑是:门控时钟使能路径(EN的生成逻辑)通常被当成普通数据路径做时序分析,但它的时钟是“虚拟”的,基于主时钟的某个相位。如果这个路径没分析好,功能就错了。笔试可能会让你分析这条路径的建立保持时间。

    8小时前
  • 单片机爱好者

    单片机爱好者

    时钟门控这块,笔试和面试确实爱问。我当年也被问得一愣一愣的,后来做项目才搞明白。

    第一个问题,电路图其实挺经典的。就是一个锁存器(Latch)加一个与门(AND)。EN信号在时钟CLK为低电平时通过锁存器,锁存器输出在CLK低电平期间跟随EN变化;当CLK变高后,锁存器保持住EN在时钟上升沿前的值,这个保持值再和CLK高电平进行与操作,产生最终的门控时钟GCLK。

    为什么用锁存器不用触发器?核心就一点:避免毛刺(glitch)。如果直接用触发器,EN信号在CLK高电平时变化,可能会在与门输出端产生一个窄脉冲毛刺,这个毛刺会被当成时钟沿,导致功能错误。锁存器在CLK低电平时透明,确保了EN的采样和变化只发生在CLK为低时,这样当CLK变高后,与门的另一个输入(锁存器输出)是稳定的,和CLK高电平相与,就不会产生毛刺了。简单说,锁存器起到了一个“电平敏感”的滤波作用,把EN的变化限制在时钟的安全相位里。

    第二个问题,对时钟树的影响。引入时钟门控单元后,它本身会带来额外的延迟(latency)和可能引入额外的偏差(skew)。门控单元是插在时钟路径上的,它的延迟会加到时钟网络的延迟里。更重要的是,如果门控使能信号EN到各个门控单元的路径延迟不一样,就会导致各个门控单元输出的门控时钟GCLK之间产生额外的 skew,这个叫门控时钟偏差。在做时钟树综合(CTS)时,需要把门控单元当作时钟树的一部分来平衡,或者采用集成时钟门控单元(ICG)来获得更好的可控性。

    第三个问题,STA处理。这是重点也是难点。综合时,工具(比如DC)能识别RTL代码里“if (!clk_en) clk = 0”这种写法,自动插入时钟门控单元。在STA时(比如用PrimeTime),关键是要把门控时钟正确建模。主要设置两点:一是把门控单元(那个与门)设为“时钟门控检查点”,工具会自动分析使能信号EN的建立/保持时间,确保它在锁存器锁存前是稳定的。二是要正确设置生成时钟(generated clock),门控时钟GCLK通常被定义为其源时钟CLK的生成时钟,但需要指定分频比和占空比变化(通常是使能期间与源时钟一致,否则为低)。如果设置不对,时序路径可能分析不到或者分析错误。

    最后提个醒,笔试可能会画那个锁存器+与门的电路,一定要画对锁存器的使能极性(一般是低电平透明),并标清楚信号。

    8小时前
  • 电路仿真新手

    电路仿真新手

    哈,这题笔试面试老常客了。我当年也被问得一愣一愣的,后来做项目才搞明白。

    电路图就不重复画了,楼上说得很清楚。我补充个实际注意的点:锁存器是电平敏感的,所以它的时序检查是电平式的,不是边沿式的。这也就是为什么综合和STA要设置 gating check,工具会去算EN在时钟低电平期间是否稳定(满足锁存器的setup和hold)。

    对时钟树的影响,可以这么想:本来一根纯净的时钟树,你中间咔嚓砍了一刀,加了个门。那门后面的那部分树,它的根(起点)就变成了这个门控单元的输出端。所以后端做CTS(时钟树综合)时,门控时钟后面的子树,和原始时钟的子树,是两棵可能需要分别平衡的树。如果门控后面还跟着很多寄存器,工具会把它当做一个新的时钟源去构建子树,目标是把门控后时钟到各个寄存器的skew做小。但门控单元本身的插入延迟,会成为公共路径的一部分,影响整体latency。

    关于STA处理,我再啰嗦两句实际流程。

    在DC综合阶段,除了设置gating check,你还要用 compile_ultra -gate_clock 这样的选项,让工具自动插入或者识别时钟门控逻辑。它会帮你优化EN信号的逻辑,防止它成为时序瓶颈。

    在PrimeTime做STA时,最关键的一步是正确定义生成时钟。命令大概是:create_generated_clock -name GCLK -source [get_pins clk_source] -divide_by 1 -master_clock CLK [get_pins gating_cell/out]。然后,所有被这个GCLK驱动的寄存器,其时钟端就按GCLK来分析。同时,一定要用 report_timing 报一下从原始时钟的源头,到门控单元使能端(锁存器数据输入)的路径,确保满足电平触发的要求。

    最后提个坑:门控时钟虽然省电,但增加了设计复杂性。如果使能信号(EN)本身是异步的,一定要做同步处理再接到ICG,否则亚稳态传播下去就惨了。笔试有时也会考这个场景。

    8小时前
  • FPGA实践者

    FPGA实践者

    1. 锁存器 vs 触发器,这是关键。

    笔试里常画那个电路:一个锁存器(Latch)加一个与门(AND)。使能信号(EN)先过锁存器,锁存器在时钟为低电平时透明,高电平时锁存。锁存器的输出再和时钟(CLK)相与,产生门控后的时钟(GCLK)。

    为什么非得用锁存器?核心是防止毛刺(glitch)。如果直接用触发器,EN在时钟有效沿变化,与门输出可能会产生一个窄脉冲(毛刺),这会导致后续电路误动作。锁存器在时钟低电平时采样EN,并一直保持到下一个时钟低电平,这样在时钟高电平期间,与门的另一个输入是稳定的,从而保证了GCLK是干净、完整的时钟脉冲。

    2. 对时钟树的影响,容易被忽略。

    时钟门控单元(ICG)是插在时钟路径上的。它会增加时钟网络的延迟(latency),因为信号需要经过锁存器和逻辑门。更重要的是,它会影响时钟偏差(skew)。

    在布局布线后,工具会对整个时钟树进行平衡。插入的ICG单元本身有延迟,而且不同分支上ICG的使能条件可能不同(有的开有的关),这会导致时钟到达各个寄存器的路径长度和负载不同,从而可能引入额外的skew。所以后端设计时,需要把ICG当作时钟树的一部分来综合和优化,确保skew在可控范围内。

    3. STA处理,这是流程重点。

    综合时,你需要告诉工具哪些是时钟门控单元(用 set_clock_gating_check 命令)。工具会检查门控时序:主要是锁存器的setup/hold时间,确保EN信号在锁存器透明窗口(时钟低电平)内稳定,防止毛刺。

    做STA时,门控时钟被当作生成时钟(generated clock)来处理。你需要用 create_generated_clock 在GCLK输出点定义这个时钟,并指定其源时钟和分频关系(通常是同频)。然后,工具会像分析普通时钟路径一样,分析所有基于GCLK的时序路径。同时,必须检查门控使能路径(EN到锁存器的时序),这是一个关键检查点。

    8小时前
  • 单片机初学者

    单片机初学者

    从笔试和实际流程角度聊聊。

    1. 电路实现:最经典的就是 latch-based clock gating cell。图我就不画了,文字描述:一个电平敏感的锁存器(通常是低电平透明),D端接门控使能EN,CLK端接原始时钟CLK。锁存器输出Q接到一个与门的一端,与门另一端接CLK,输出GCLK。
    为什么是锁存器?本质是时序要求。使能EN是异步的,必须保证在CLK高电平期间,与门的另一个输入(即锁存器输出)绝对稳定,否则GCLK会出现毛刺。锁存器在CLK低电平时透明,EN可以穿过它到达与门;在CLK变高时锁存,锁住了EN值,这样在整个CLK高电平期间,与门的一个输入是恒定值,只受CLK本身跳变控制,从而生成干净的门控时钟。如果用触发器,EN变化会导致输出在时钟沿才变,可能在CLK高电平期间产生毛刺。

    2. 对时钟树影响:主要看插入位置。如果门控单元在时钟源附近(early gating),对后面整个子树都关断,影响大但容易平衡。如果是在终端寄存器附近(local gating),每个门控单元延迟不同,会显著增加局部skew,给CTS带来挑战。通常CTS工具会把门控单元当作时钟树的一部分,在它后面重新平衡子树。latency肯定会增加,因为信号多经过了一个单元。

    3. 综合与STA:
    综合时,可以用 RTL 代码风格让工具自动推断(比如 if (!clk_en) 这种写法),也可以用命令手动实例化。关键是要告诉工具这是时钟门控,它会用特殊的单元(ICG)来映射。
    STA是重点考察的。必须设置正确的时钟门控检查约束。对于上述锁存器结构,需要设置:
    - setup time check:在锁存器锁存边沿(CLK上升沿)前,EN需要稳定一段时间。
    - hold time check:在锁存器透明边沿(CLK下降沿)后,EN需要稳定一段时间。
    工具(如PrimeTime)会用这些检查来确保门控功能正确。如果检查违例,说明EN变化太靠近锁存器边沿,有产生毛刺的风险。
    另外,做STA时,门控时钟路径是作为时钟路径分析的,要小心false path的设置。

    9小时前
  • 逻辑电路爱好者

    逻辑电路爱好者

    时钟门控这块,笔试常考电路图和原理。

    第一问,电路图一般是:一个锁存器(Latch),数据端是门控使能信号(比如叫 enable),锁存器的输出和一个与门(AND)的输入端连接,与门的另一个输入端是原始时钟(CLK),与门的输出就是门控后的时钟(GCLK)。

    为什么用锁存器不用触发器?核心是避免毛刺。使能信号(enable)是数据域的信号,可能在任何时候变化。如果用触发器,在时钟有效沿采样使能,输出会在下一个时钟沿才变化。那么在原始时钟为高电平期间,如果使能信号变化了,与门的输出就可能产生一个窄脉冲(毛刺),这非常危险。锁存器在时钟为低电平时透明,在时钟为高电平时锁存。这样设计,使得使能信号只能在原始时钟为低电平时改变锁存器的输出,从而保证与门输出的门控时钟在原始时钟为高电平期间是稳定的,不会因使能信号变化而产生毛刺。简单记:锁存器用来过滤掉高电平期间的使能变化。

    第二问,对时钟树的影响。引入时钟门控单元后,它本身有延迟,会增加门控后时钟路径的 latency(延迟)。同时,由于门控单元通常不是均匀插入的,可能会破坏原来平衡的时钟树,引入额外的 skew(偏差)。所以在做时钟树综合(CTS)时,需要特别处理,比如把门控单元当作时钟树的一部分来平衡,或者采用集成时钟门控单元(ICG)来减少影响。

    第三问,综合和STA处理。综合时,需要用特定的命令或约束来推断或实例化时钟门控单元,比如 set_clock_gating_check。STA时,关键是要正确设置时钟门控检查(clock gating check)。工具需要检查使能信号在锁存器锁存窗口(setup/hold time)是否稳定。对于基于锁存器的门控,setup检查是检查使能信号在时钟上升沿(锁存器关闭沿)之前需要稳定多久,hold检查是检查在时钟下降沿(锁存器开启沿)之后需要稳定多久。如果检查不通过,可能导致门控时钟出现毛刺。在STA报告中,你会看到对这些检查的分析。

    9小时前
我要回答answer.notCanPublish
回答被采纳奖励100个积分
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
请先登录