一、电路结构

模块clk_mux_gate_16由16 选 1 组合 MUX、三级同步寄存器 bit_sync、ICG 集成时钟门组成,由 CSR 寄存器下发两路控制信号:时钟选择cfg_clk_mux_sel、全局时钟使能cfg_clk_en_i。
组合 MUX:负责切换多路输入时钟,但选择信号异步变化会在输出glitch_clk产生毛刺,不可直接输出;
bit_sync 三级同步链:以glitch_clk为采样时钟,同步异步使能信号,消除亚稳态,将使能跳变约束在时钟上升沿;
ICG 时钟门:内部锁存结构仅在时钟低电平阶段响应使能变化,从硬件根源杜绝开关时钟产生毛刺,最终输出纯净clk_o。
二、标准三段式切换操作流程
为隔绝 MUX 切换毛刺,软件严格依照下述顺序配置寄存器:
步骤 1:拉低cfg_clk_en_i,关断输出时钟 配置 CSR 将时钟使能置 0,经过三级同步后 ICG 使能变为低电平,ICG 截断时钟通路,clk_o恒定为低电平,后端电路无时钟输入,进入安全状态。
步骤 2:改写cfg_clk_mux_sel,切换时钟源 在时钟输出关闭状态下修改多路选择值,MUX 切换时钟源时产生的毛刺被闭锁的 ICG 完全隔离,不会传递到模块输出端口。
步骤 3:拉高cfg_clk_en_i,释放稳定时钟 等待 MUX 输出时钟波形恢复规整、同步链路状态刷新完成后,拉高时钟使能。同步后的使能只会在时钟上升沿翻转,此时 ICG 内部锁存处于锁定状态;待时钟电平拉低后,ICG 才放行时钟,输出无毛刺的目标时钟波形。
三、对应 WaveDrom 时序波形

第一步:cfg_clk_en_i配置成0,使能逐级同步拉低,输出时钟clk_o 关闭;
第二步:配置cfg_clk_mux_sel,修改多路选择,glitch_clk出现毛刺,输出clk_o 依旧保持低电平;
第三步:cfg_clk_en_i配置成1,使能逐级同步拉高,ICG模块在时钟低电平窗口平稳输出全新时钟,全程无毛刺脉冲