时钟域切换:
MUX?
这种方式是不行的。
在时钟切换的瞬间,会出现glitch,上升沿的突然出现,会导致两边的时序不满足要求。
方案:
打三拍通过一个ICG门控,再输出。
RTL:
使能指示信号(cgm_sel)变动之后,经过两级同步器,过两拍,原使能无效(assign ind_in0 = in0_en_sync2),再在原时钟域打一拍(或上in0_en_syn3),in0_used变为低电平(注意这时候打一拍的作用!让原来已经被停掉的时钟留出空当,保证时序不会违例!这也是前面需要打两拍的原因,这个关键的触发器不能产生亚稳态问题,输入必须经过同步器保证),紧接着in1_en变为高电平,这个高电平再在自己的时钟域打两拍同步之后传到ICG单元,由于ICG的作用,新时钟一定是在低电平处使能的。
再次强调,就是为了打这么一拍才加上了两级同步器!