数字IC经典电路(5)——glitch_free_clock_switch的实现(无毛刺时钟切换电路简介及Verilog实现)

前言

  数字电路中,无毛刺时钟切换电路(glitch-free clock switching circuit)是在多时钟域设计和高速数字电路中保时钟信号在切换时不会引入不必要的毛刺(glitch),从而避免不稳定的操作或错误的信号传输。

  毛刺(Glitch)是指在信号切换过程中的瞬时不稳定性而产生的短暂且不期望的脉冲或信号波动。毛刺通常会在信号的过渡阶段(例如从低电平到高电平,或从高电平到低电平)产生,并且其持续时间非常短,组合逻辑会不可避免的产生毛刺,而由于组合逻辑后通常会存在Latch/DFF用于滤波,因此属于组合逻辑电路对于毛刺的容忍度相对较高,毛刺虽然会影响输出,但只要不在输入变化时发生,它通常不会导致系统整体故障。

  先进工艺制程中,毛刺(glitch)的宽度通常与多种因素相关,特别是与晶体管开关速度、信号传播延迟、寄生效应、电源噪声等紧密相关。随着工艺节点的缩小,毛刺的宽度和特性会发生变化,通常受以下几个方面的影响:

1. 晶体管开关速度

  在先进的工艺制程(如7nm、5nm及更小节点)中,晶体管的开关速度显著提高。更小的晶体管能够更快地响应输入信号的变化,导致信号的过渡更加迅速。理论上,随着开关速度的增加,毛刺的持续时间可能会更短(宽度更窄)。但同时,先进工艺节点中的寄生电容和寄生电感会变得更复杂,可能会导致毛刺的幅度增加,即便其宽度较窄。

  较小的制程节点:开关速度更快,毛刺宽度通常较小,可能达到皮秒级别(ps)。
  较大的制程节点:开关速度较慢,毛刺可能持续更长时间(纳秒级别)。

2. 寄生效应

  在先进的工艺中,寄生电容和寄生电感的影响变得更加显著。随着晶体管尺寸减小,寄生效应(尤其是寄生电容)会对信号的过渡产生较大的影响,导致毛刺的产生更加复杂。寄生效应可能会导致信号在切换过程中出现不稳定,导致宽度较长的毛刺。因此,即使在较小的工艺节点中,寄生效应仍然是一个不能忽视的因素,可能会在某些情况下拉长毛刺的宽度

3. 信号传播延迟与毛刺宽度

  信号在电路中的传播延迟会直接影响毛刺的宽度。在更小的制程节点中,虽然晶体管的速度较快,但由于寄生电容和电感的增加,信号在电路中传播的速率可能不均匀,导致某些路径上的信号较慢,产生时序误差,从而引发较长时间的毛刺。此外,设计中的时钟树、时序优化等因素也会影响毛刺的持续时间。

  较小的工艺节点:虽然晶体管开关速度更快,但寄生效应增加,传播延迟差异可能导致毛刺持续时间的增加。
  较大的工艺节点:传播延迟差异可能较小,但信号的过渡速度较慢,毛刺可能持续时间更长。

4. 电源噪声的影响

  在先进制程中,电源噪声的影响变得更加重要。较低的电源电压和更小的晶体管尺寸使得电源噪声对电路的影响更为显著,尤其是在高速操作时。电源噪声可能导致电路在切换过程中的不稳定性,产生毛刺。通常,电源噪声会影响毛刺的幅度,但也可能引起毛刺的宽度增加。

5. 工艺不一致性

  由于先进工艺制程中晶体管和其他组件的尺寸越来越小,制造过程中产生的偏差也可能影响毛刺的宽度。即便在同一款芯片的不同部分,工艺上的微小差异也可能导致不同的信号响应速度,从而影响毛刺的持续时间。

项目简介

  项目列举了常用的几种经典以及改进后的可综合glitch_free_clock_switch 模块,并基于VCS完成功能/gate/post(40nm)仿真验证

项目难度:⭐
项目推荐度:⭐⭐⭐
项目推荐天数:1~2天

1)CLK_Switch0

  Figure 1 采用了一种普通的Mux作为时钟切换单元,当SELECT信号处于CLK1和CLK0跳变沿时,非常容易产生Glitch。

Figure 1: Normal Clock Switch Mux(Glitch)

2)CLK_Switch1

  Figure 2是一种传统风格的glitch_free_clock_switch, 门控信号的产生过程如下,由外部切换信号和内部控制信号共同产生时钟切换控制信号,并经过两级电平信号同步器,再以时钟下降沿采样后,gating 时钟,得到无毛刺的输出时钟,并经过逻辑门输出,由于SEL信号同时钟信号CLK_A/CLK_B为异步关系,因此,在无毛刺 clock mux中最好使用双同步器而不是单DFF。

Figure 2: Conventional Glitch-Free Clock Switch (3DFF/Glitch_Free)

  Figure 3是基于传统风格的glitch_free_clock_switch, 减少一级DFF,用于提升切换速度。门控信号的产生过程如下,由外部切换信号和内部控制信号共同产生时钟切换控制信号,并经过两级电平信号同步器,再以时钟下降沿采样后,gating 时钟,得到无毛刺的输出时钟,并经过逻辑门输出,由于SEL信号同时钟信号CLK_A/CLK_B为异步关系,因此,在无毛刺 clock mux中最好使用双同步器而不是单DFF。

  这两种电路的其目的是处理不相关(即完全异步)的时钟。该解决方案基本上由两个交叉耦合的触发器链(作为双触发器同步器)和一些逻辑组成。时钟与使能信号相结合,最终产生输出时钟。输出时钟。

  交叉耦合可防止两个时钟同时启用,而利用双触发器同步器可防止产生毛刺和亚稳态。

Figure 3: Conventional Glitch-Free Clock Switch (2DFF/Glitch_Free)

3)CLK_Switch2/3

  基于传统结构的glitch_free_clock_switch电路结构,可以继续拓展出以下两个glitch_free_clock_switch, 首先均采用上升沿触发的DFF,用以适用于占空比变化的时钟域切换,上述混合使用上升沿和下降沿的电路中,需要时钟占空比达到50%,而在实际芯片工作中,随着PVT等因素的不同,占空比无法精确保证,Figure 4和Figure 5展示的glitch_free_clock_switch均采用相同触发沿的DFF,避免了clock jitter对于clk switch的影响,提高适用范围。

Figure 4: Conventional Glitch-Free Clock Switch (2DFF/Glitch_Free/NAND Style)
Figure 5: Conventional Glitch-Free Clock Switch (2DFF/Glitch_Free/NOR Style)

4)New_CLK_Switch0

  一种新型的glitch_free_clock_switch 结构如Figure 6所示,为每个时钟源添加了一个定时器,用于观察时钟信号的活动情况,并指示相应时钟是否处于非活动状态。定时器只对当前未被输入 sel 选择的时钟激活。因此,如果下一个时钟源 clk1 被选中,定时器 Timer_clk0 将被激活,反之亦然。最后,每个定时器都会产生一个禁用信号(disable_clk0/1),一旦检测到超时,该信号就会被确认。

Figure 6: Novel clock Glitch-Free Clock Switch (2DFF/Glitch_Free)

5)New_CLK_Switch1

  另一种改进型的glitch_free_clock_switch 结构如Figure 7所示,该结构将时钟使能逻辑插入到同步器中,在选择源时钟时,通过消除源时钟变化时的时钟glicth,可以提供稳定的时钟源。该种结构的优势在于可以通过分组集成,利于将多路时钟信号切换到指定输出。

Figure 7: Novel clock Glitch-Free Clock Switch (2DFF/Glitch_Free)

仿真结果

1)仿真环境需求

  •   测试平台包括VCS/DC/Verdi;

  •   仿真包含功能仿真/pre,门级仿真/gate以及DC综合后SDF反标仿真/post;

2)仿真波形

  项目采用40nm工艺库,完成了包括前仿真/pre,门级仿真/gate以及DC综合后仿/post,完成上述几种clock_free_clock_switch的功能及时序验证,并输出面积/功耗等对比数据。参考时钟的设计频率和占空比描述如下:

glitch_free_clock switch Design Spec:
==========================================
clk_A : Period 3334ps 	/Duty Cycle: 45%
clk_B : Period 26581ps	/Duty Cycle: 55%

  项目前仿真/pre,门级仿真/gate以及DC综合后仿/post的波形图如下所示:(Figure 8~10)

Figure 8: Glitch-Free Clock Switch(presim)
Figure 9: Glitch-Free Clock Switch(gatesim)
Figure 10: Glitch-Free Clock Switch(postsim)

   值得注意的是,在合适的testbench setting时,即使是在前仿阶段,都能很明显的发现只采用普通MUX会产生glitch,而在后仿阶段,由于门级延迟会受PVT的影响,glitch则会展现出不均一性,即glitch的宽度会随之变化,这无疑会造成系统的不稳定性。

3)仿真结果

  对上述glitch_free_clock_switch采用相同的DC综合条件,对比面积/Cell/Timing/Power报告,汇总数据如下:

  • 其中,CLK_Switch3面积和Timing 裕量最优,New_CLK_Switch0 Cell数最优;
  • 而综合面积/功耗/Timing等参数,当前New_CLK_Switch1的结构最为推荐,该结构将传统的使能逻辑插入到同步链中,有效节省功耗的同时,尽可能的留下裕量;
Figure 11: Glitch-Free Clock Switch Rpt Compare

总结

项目学习目的:
(1)熟练掌握glitch_free_clock_switch的基本结构及原理;
(2)学习时钟切换相关基本原理;
(3)熟悉 Verilog HDL仿真以及相关流程工具;

参考资料

[1] S. Zeidler, O. Schrape, A. Breitenreiter and M. Krstić, “A Glitch-free Clock Multiplexer for Non-Continuously Running Clocks,” 2020 23rd Euromicro Conference on Digital System Design (DSD), Kranj, Slovenia, 2020, pp. 11-15, doi: 10.1109/DSD51259.2020.00013.
[2] H. Wang et al., “A configurable fault-tolerant glitch-free clock switching circuit,” 2013 IEEE 56th International Midwest Symposium on Circuits and Systems (MWSCAS), Columbus, OH, USA, 2013, pp. 537-540, doi: 10.1109/MWSCAS.2013.6674704.
[3] Jovanovi, Borisav and Milunka Damnjanovi. “Glitch Free Clock Switching Techniques in Modern Microcontrollers.” (2014).
[4] https://www.eetimes.com/techniques-to-make-clock-switching-glitch-free/

数字电子设计和图形渲染等领域,术语“GLITCH”通常指代意外的、短暂的信号异常或视觉错误,可能导致系统行为不稳定或显示不正确。GLITCH在硬件设计和软件渲染中都可能产生,其成因和解决方案各有不同。 ### GLITCH的成因与解决方案(硬件设计) 在硬件设计中,GLITCH通常出现在组合逻辑电路或时序逻辑电路中,可能由信号路径延迟不一致或竞争条件(race condition)引起。例如,当两个信号在组合逻辑中到达时间不同步时,可能会导致输出出现短暂的错误状态。 - **跨时钟域问题**:当信号从一个时钟域传递到另一个时钟域时,若未正确同步,可能会导致GLITCH。解决方案包括使用同步FIFO或双触发器同步器来确保信号在目标时钟域中稳定[^1]。 - **逻辑冒险**:在组合逻辑中,由于路径延迟差异,可能导致输出出现短暂的错误值。可以通过增加冗余逻辑来消除逻辑冒险。 - **电源噪声和地弹**:电源噪声或地弹也可能导致信号出现GLITCH。解决方案包括使用去耦电容、优化电源分配网络(PDN)设计以及确保良好的PCB布局。 ### GLITCH的成因与解决方案(图形渲染) 在图形渲染中,GLITCH通常指视觉上的异常,例如画面撕裂、颜色错误或几何失真。这些GLITCH可能由渲染管线中的错误或资源加载问题引起。 - **Post-Process Glitch**:在后处理阶段,若着色器代码中存在错误或资源加载失败,可能导致画面出现GLITCH。解决方案包括检查着色器代码、确保资源正确加载以及使用调试工具进行问题定位[^2]。 - **同步问题**:在多线程渲染中,若渲染线程与主线程之间的同步不当,可能导致GLITCH。解决方案包括使用适当的同步机制,如互斥锁或信号量,以确保资源在使用前已正确加载。 ### GLITCH的检测与调试 - **静态分析工具**:在硬件设计中,使用静态分析工具(如SpyGlass)可以检测设计中的潜在问题,包括可能导致GLITCH设计缺陷[^1]。 - **动态仿真**:通过动态仿真,可以在运行时观察信号的变化,从而发现GLITCH的出现。动态仿真工具可以提供详细的波形信息,帮助工程师定位问题的根本原因。 - **调试工具**:在图形渲染中,使用调试工具(如GPU调试器)可以帮助开发者检查渲染管线中的错误,包括着色器执行错误或资源加载问题[^2]。 ### GLITCH的预防措施 - **设计验证**:在硬件设计中,进行全面的设计验证可以减少GLITCH的发生。这包括使用形式验证工具检查设计的正确性以及进行充分的仿真测试。 - **代码审查**:在软件开发中,定期进行代码审查可以帮助发现可能导致GLITCH的代码错误。此外,使用版本控制系统可以追踪代码变更,从而更容易找到引入GLITCH的代码段。 - **性能监控**:在系统运行时,使用性能监控工具可以实时检测GLITCH的发生。这些工具可以提供详细的性能数据,帮助工程师快速响应问题。 ### GLITCH的常见案例 - **跨时钟GLITCH**:在一个多时钟设计中,若信号未正确同步,可能导致GLITCH。例如,在一个异步FIFO设计中,若读写指针未正确同步,可能导致数据丢失或重复。 - **后处理GLITCH**:在一个游戏引擎中,若后处理着色器代码中存在错误,可能导致画面出现异常效果。例如,在Unreal Engine中,若后处理材质的参数设置不正确,可能导致画面颜色失真[^2]。 ### GLITCH的修复方法 - **硬件设计修复**:在硬件设计中,修复GLITCH的方法包括修改逻辑设计、增加同步电路或优化时钟分配。例如,在跨时钟设计中,增加双触发器同步器可以有效减少GLITCH的发生。 - **软件修复**:在软件开发中,修复GLITCH的方法包括修改代码、优化资源加载或调整渲染管线。例如,在图形渲染中,若发现后处理着色器导致GLITCH,可以通过修改着色器代码或调整渲染顺序来解决问题。 ### GLITCH的未来发展方向 - **自动化检测工具**:随着设计复杂度的增加,手动检测GLITCH变得越来越困难。未来,自动化检测工具将成为主流,这些工具可以快速识别设计中的潜在问题,并提供修复建议[^1]。 - **智能调试系统**:未来的调试系统将更加智能化,能够自动分析GLITCH的成因并提供修复方案。例如,基于机器学习的调试系统可以根据历史数据预测GLITCH的发生,并提供优化建议。 ### GLITCH的行业应用 - **集成电路设计**:在集成电路设计中,GLITCH的检测与修复是设计验证的重要组成部分。通过使用先进的静态和动态分析工具,设计人员可以确保设计的稳定性与可靠性[^1]。 - **游戏开发**:在游戏开发中,GLITCH的检测与修复是确保游戏质量的关键步骤。开发人员需要使用调试工具和性能监控工具来确保游戏在不同平台上的稳定运行。 ### GLITCH的技术挑战 - **复杂性增加**:随着设计复杂度的增加,GLITCH的检测与修复变得更加困难。设计人员需要面对更多的信号路径和更复杂的时序关系。 - **实时性要求**:在某些应用中,如实时控制系统,GLITCH的检测与修复必须在极短的时间内完成,以确保系统的稳定运行。 ### GLITCH的优化策略 - **优化设计流程**:通过优化设计流程,可以在早期阶段发现并修复GLITCH,从而减少后期修改的成本。例如,在硬件设计中,使用形式验证工具可以在设计初期发现潜在的GLITCH问题[^1]。 - **提高调试效率**:通过使用高效的调试工具和技术,可以加快GLITCH的定位与修复过程。例如,在图形渲染中,使用GPU调试器可以快速发现后处理阶段的GLITCH问题。 ### GLITCH的标准化与规范 - **设计标准**:为了减少GLITCH的发生,行业制定了许多设计标准。例如,在硬件设计中,电子设计规则(ERC)可以确保设计符合工业标准,从而减少GLITCH的风险。 - **编码规范**:在软件开发中,遵循编码规范可以帮助开发者避免常见的GLITCH问题。例如,在图形渲染中,遵循着色器编程的最佳实践可以减少后处理GLITCH的发生。 ### GLITCH的教育与培训 - **设计培训**:为了提高设计人员对GLITCH的认识,许多公司和机构提供专门的培训课程。这些课程涵盖了GLITCH的成因、检测方法和修复策略。 - **开发实践**:通过实际项目开发,开发人员可以积累处理GLITCH的经验。例如,在游戏开发中,开发人员可以通过参与实际项目来学习如何检测和修复后处理GLITCH[^2]。 ### GLITCH的社区与资源 - **开源工具**:许多开源工具可以帮助开发者检测和修复GLITCH。例如,在硬件设计中,开源静态分析工具可以帮助设计人员发现潜在的GLITCH问题。 - **在线资源**:许多在线资源提供了关于GLITCH的详细信息。例如,在图形渲染领域,开发者可以通过阅读博客文章和教程来学习如何处理后处理GLITCH。 ### GLITCH的未来趋势 - **AI辅助设计**:未来,人工智能(AI)将在GLITCH的检测与修复中发挥重要作用。AI可以自动分析设计数据,识别潜在的GLITCH问题,并提供优化建议。 - **云平台支持**:随着云计算的发展,云平台将成为GLITCH检测与修复的重要工具。设计人员可以通过云平台访问高性能计算资源,从而加速GLITCH的检测与修复过程。 ### GLITCH的总结 GLITCH在硬件设计和软件开发中都是一个重要的问题。通过使用先进的检测工具、优化设计流程以及遵循设计标准,可以有效减少GLITCH的发生。未来,随着技术的发展,GLITCH的检测与修复将变得更加智能化和自动化。 ```python # 示例代码:检测后处理GLITCH def detect_post_process_glitch(shader_code): # 检查着色器代码是否存在语法错误 if has_syntax_error(shader_code): return "Syntax error in shader code" # 检查资源是否正确加载 if not resources_loaded(): return "Resources not loaded correctly" # 检查渲染管线配置 if not pipeline_configured(): return "Rendering pipeline not configured correctly" return "No glitch detected" # 模拟函数 def has_syntax_error(code): # 简单模拟语法检查 return "error" in code def resources_loaded(): # 简单模拟资源加载检查 return True def pipeline_configured(): # 简单模拟渲染管线配置检查 return False # 测试示例 shader_code = """ // 着色器代码 void main() { // 正确的代码 } """ result = detect_post_process_glitch(shader_code) print(result) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值