发明内容
本发明的目的之一在于提供一种时钟切换方法,用于根据时钟选择信号进行第一时钟信号clk1和第二时钟信号clk2的切换,包括以下步骤:
a、对所述时钟选择信号进行处理,生成第一时钟选择信号和第二时钟选择信号;其中,当所述时钟选择信号从选通clk1的状态跳变到选通clk2的状态时,第一时钟选择信号在保持选通clk1的状态至少一个clk1脉冲时进行跳变;第二时钟选择信号在所述第一时钟选择信号跳变后,保持当前阻断clk2的状态至少两个clk2脉冲时进行跳变;
b、将所述第一、第二时钟选择信号作为门控使能信号,分别对clk1、clk2进行门控处理;
c、将门控处理后生成的信号进行组合输出。
为了进一步消除毛刺,在所述步骤b中,当所述第一、第二时钟选择信号阻断clk1或clk2输出时,优选经门控处理后生成高电平1。为了实现该目的,可以将所述第一、第二时钟选择信号分别与所述的clk1、clk2进行逻辑“或”操作,在第一或第二时钟选择信号为高电平1时,通过“或”操作输出高电平1,以阻断clk1或clk2的输出。
再进一步的,在所述步骤c中,对门控处理后生成的信号进行逻辑“与”操作,以实现信号的组合输出。
作为形成所述第一、第二时钟选择信号的一种具体处理方式,在所述步骤a中,对所述时钟选择信号在第一时钟域进行至少一次同步处理后,生成所述的第一时钟选择信号;对所述第一时钟选择信号在第二时钟域进行至少两次同步处理后,进行取反操作,进而生成所述的第二时钟选择信号。
优选的,对所述时钟选择信号在第一时钟域进行两次同步处理后,生成所述的第一时钟选择信号;对所述第一时钟选择信号在第二时钟域进行三次同步处理后,进行取反操作,进而生成所述的第二时钟选择信号。
本发明的目的之二在于提供一种时钟切换装置,同样用于根据时钟选择信号进行第一时钟信号clk1和第二时钟信号clk2的切换,包括四组D触发器、第一时钟门控处理模块、第二时钟门控处理模块和组合处理模块;其中,
第一组D触发器的数据端接收所述的时钟选择信号,时钟端接收clk1,输出端输出第一时钟选择信号;
第二组D触发器的数据端接收所述的第一时钟选择信号,时钟端接收clk2,输出端连接第三组D触发器的反相复位端;
第三组D触发器的数据端接收所述的时钟选择信号,时钟端接收clk2,输出端通过反相器输出第二时钟选择信号;
第四组D触发器的数据端接收所述的第二时钟选择信号,时钟端接收clk1,输出端连接第一组D触发器的反相置位端;
第一时钟门控处理模块,接收所述第一时钟选择信号,并作为门控使能信号,对所述clk1进行门控处理;
第二时钟门控处理模块,接收所述第二时钟选择信号,并作为门控使能信号,对所述clk2进行门控处理;
组合处理模块,将门控处理后生成的信号进行组合输出。
采用上述的四组D触发器对时钟选择信号进行处理,以生成用于控制clk1、clk2选通输出的门控使能信号,即第一时钟选择信号和第二时钟选择信号,进而可以达到去除毛刺和亚稳态的设计目的。具体来讲,当所述时钟选择信号从选通clk1的状态跳变到选通clk2的状态时,利用所述第一组D触发器,可以使第一时钟选择信号在保持选通clk1的状态至少经历一个clk1脉冲时进行跳变;利用第二、第三组D触发器,可以使第二时钟选择信号在所述第一时钟选择信号跳变后,保持当前阻断clk2的状态至少经历两个clk2脉冲时进行跳变;反之亦然,即当所述时钟选择信号从选通clk2的状态跳变到选通clk1的状态时,利用所述第三组D触发器,可以使第二时钟选择信号在保持选通clk2的状态至少经历一个clk2脉冲时进行跳变;利用第一、第四组D触发器,可以使第一时钟选择信号在所述第二时钟选择信号跳变后,保持当前阻断clk1的状态至少经历两个clk1脉冲时进行跳变。
进一步的,所述第一时钟门控处理模块为或门,接收所述的第一时钟选择信号和clk1;所述第二时钟门控处理模块也为或门,接收所述的第二时钟选择信号和clk2;所述组合处理模块为与门,对两路或门输出的信号进行“与”运算后输出。
优选的,所述的每一组D触发器均由两个D触发器串联组成,其中,第二组D触发器的输出端连接第三组D触发器中后一级D触发器的反相复位端;第四组D触发器的输出端连接第一组D触发器中后一级D触发器的反相置位端。
再进一步的,所述第一组D触发器的反相复位端接收***复位信号。
与现有技术相比,本发明的优点和积极效果是:本发明的时钟切换方法及切换装置相比现有解决方案在去除亚稳态方面的特性更优,而且无论时钟选择信号在任何时刻发生变化,都不会引起输出时钟出现窄脉冲,即毛刺现象。此外,本发明对输入时钟频率没有要求,可以实现任何频率时钟之间的平滑切换,确保***运行的稳定性。
结合附图阅读本发明实施方式的详细描述后,本发明的其他特点和优点将变得更加清楚。
具体实施方式
下面结合附图对本发明的具体实施方式作进一步详细地说明。
本发明为了解决现有时钟切换电路在时钟选择信号clk_sel发生跳变时,容易在输出的时钟信号中产生毛刺的问题,改变传统直接将时钟选择信号clk_sel作为门控使能信号,对第一时钟信号clk1和第二时钟信号clk2进行门控处理的设计方式,而是对所述的时钟选择信号clk_sel进行处理,生成分别用于控制第一时钟信号clk1和第二时钟信号clk2输出/阻塞的第一时钟选择信号ff1_Q和第二时钟选择信号ff5_Q_n,即将公式(1)修改为:
clk_out=(ff1_Q or clk_1)and(ff5_Q_n or clk_2)
在时钟选择信号clk_sel发生跳变时,让ff1_Q和ff5_Q_n不同时变化,而是以特定的顺序进行变化,使两路时钟信号clk1、clk2均“阻塞”,然后再把需要输出的一路时钟信号选通输出,以避免毛刺的产生。
以clk_sel从0变到1为例进行说明。假设clk_sel为0时,fff_Q=0,ff5_Q_n=1;clk1选通,clk2阻塞。某时刻,clk_sel由0变为1,为避免毛刺,先让ff1_Q=1,并保持ff5_Q_n=1,使两路时钟信号clk1、clk2均阻塞;然后,再把ff5_Q_n变为0,让clk2选通输出。
下面通过两个具体的实施例,来详细阐述本发明所提出的时钟切换方法以及时钟切换装置的具体设计方法及工作原理。
实施例一,本实施例提出了一种时钟切换方法,参见图3所示,包括以下步骤:
S301、接收第一时钟信号clk1、第二时钟信号clk2、以及用于对所述clk1、clk2进行切换输出的时钟选择信号clk_sel。
S302、对所述时钟选择信号clk_sel进行处理,以生成第一时钟选择信号ff1_Q和第二时钟选择信号ff5_Q_n。
其中,ff1_Q用于对clk1进行使能控制,ff5_Q_n用于对clk2进行使能控制。当clk_sel处于选择clk1输出的状态时,ff1_Q进入选通clk1输出的状态,ff5_Q_n进入阻塞clk2输出的状态;当clk_sel处于选择clk2输出的状态时,ff1_Q进入阻塞clk1输出的状态,ff5_Q_n进入选通clk2输出的状态。而当clk_sel发生跳变时,为了避免输出的时钟信号出现毛刺或者亚稳态问题,需要对ff1_Q和ff5_Q_n的跳变时序进行特殊控制。在本实施例中,当clk_sel从选通clk1的状态跳变到选通clk2的状态时,首先使ff1_Q在保持选通clk1的状态至少一个clk1脉冲时(即到达下一个clk1脉冲时),再进行跳变,即跳变成阻塞clk1输出的状态;而后,ff5_Q_n在ff1_Q跳变后,保持当前阻断clk2的状态至少两个clk2脉冲时(即到达之后的第二个clk2脉冲时),再进行跳变,即跳变成选通clk2输出的状态。
举例说明:假设clk_sel=0时,表示选通clk1;clk_sel=1时,表示选通clk2。当clk_sel=0时,ff1_Q=0,ff5_Q_n=1;此时clk1选通,clk2阻塞,时钟输出信号clk_out输出clk1,参见图4所示的波形图。当clk_sel由0变为1时,ff1_Q维持0至少到达下一个clk1脉冲时,再变为1,即让clk1的前一个周期的波形输出完,然后将时钟输出信号clk_out置为1。此后,ff5_Q_n在维持1至少两个clk2脉冲后,即到达ff1_Q变为1之后的第二个clk2脉冲时,跳变为0,使时钟输出信号clk_out转而输出clk2,即从一个完整的clk2时钟周期开始输出时钟信号clk2。反之亦然,即当clk_sel由1变为0时,ff5_Q_n首先维持0至少到达下一个clk2脉冲时,再变为1,即让clk2的前一个周期的波形输出完,然后将clk_out置为1。此后,ff1_Q在维持1至少两个clk1脉冲后,跳变为0,使clk_out转而输出clk1,即从一个完整的clk1时钟周期开始输出第一时钟信号clk1。由此无论clk_sel在何时发生跳变,均可避免在clk_out波形中出现毛刺或者亚稳态问题。
如何由clk_sel来产生所述的第一时钟选择信号ff1_Q和第二时钟选择信号ff5_Q_n呢?本实施例提出了以下设计方案,以clk_sel从0变到1为例进行说明:
首先,对clk_sel在第一时钟域(即clk1所在的时钟域)进行至少一次同步处理,以生成所述的第一时钟选择信号ff1_Q;
其次,对ff1_Q在第二时钟域(即clk2所在的时钟域)进行至少两次同步处理;
然后,进行取反操作,进而生成所述的第二时钟选择信号ff5_Q_n。
同理,当clk_sel从1变到0时,则将上述步骤中的clk1与clk2互换,并将ff1_Q与ff5_Q_n互换即可。即首先对clk_sel在第二时钟域进行至少一次同步处理,以生成所述的第二时钟选择信号ff5_Q_n;然后对ff5_Q_n在第一时钟域进行至少两次同步处理后,进行取反操作,进而生成所述的第一时钟选择信号ff1_Q。
为了彻底解决亚稳态问题,本实施例优选对clk_sel在第一时钟域进行两次同步处理后,生成ff1_Q;对所述ff1_Q在第二时钟域进行三次同步处理后,进行取反操作,进而生成ff5_Q_n,参见图5所示的波形图,这里仅以clk_sel从0变到1为例进行了说明。
S303、将ff1_Q和ff5_Q_n作为门控使能信号,分别对clk1、clk2进行门控处理。
在这里,为了避免在时钟输出信号clk_out中出现窄脉冲,本实施例优选设计成在ff1_Q和ff5_Q_n阻断clk1或clk2输出时,经门控处理后输出高电平1。为了实现该目的,可以将ff1_Q和ff5_Q_n分别与所述的clk1、clk2进行逻辑“或”操作,当ff1_Q或ff5_Q_n为1时,通过“或”操作输出高电平1,从而阻断clk1或clk2的输出。而当需要选通clk1或clk2输出时,只需将ff1_Q或ff5_Q_n置为0即可。
S304、将门控处理后生成的信号进行组合输出。
在本实施例中,可以采用对步骤S303门控处理后生成的信号进行逻辑“与”操作的方式实现信号组合。例如:当ff1_Q=0,ff5_Q_n=1时,通过门控处理后分别输出clk1和1,对二者进行“与”运算,即输出clk1;当ff1_Q=1,ff5_Q_n=0时,通过门控处理后分别输出1和clk2,对二者进行“与”运算,即输出clk2;而当clk_sel发生跳变的一段期间内,由于ff1_Q=1,ff5_Q_n=1,因此通过门控处理后均输出1,进行“与”运算后输出1,即clk_out在clk_sel发生跳变的一段期间内保持高电平1的状态,通过对所述期间进行合理设置,可以规避毛刺和亚稳态问题的出现。
实施例二,本实施例是为实现实施例一所述时钟切换方法所提出的硬件电路架构图,参见图6所示,包括四组D触发器D1~D4、第一时钟门控处理模块U1、第二时钟门控处理模块U2和组合处理模块U3。其中,第一组和第四组D触发器D1、D4工作在第一时钟域,即其时钟端CP接收第一时钟信号clk1;第二组和第三组D触发器D2、D3工作在第二时钟域,即其时钟端CP接收第二时钟信号clk2。***输出的用于切换clk1、clk2的时钟选择信号clk_sel分别传输至第一、第三组D触发器D1、D3的数据端D,且经过第一组D触发器D1同步处理生成第一时钟选择信号ff1_Q,分别输出至第二组D触发器D2的数据端D以及第一时钟门控处理模块U1。所述第二组D触发器D2的输出端Q连接第三组D触发器D3的反相复位端RD,通过第三组D触发器D3的输出端Q输出的信号经反相器U4进行取反操作后,生成第二时钟选择信号ff5_Q_n分别输出至第四组D触发器D4的数据端D以及第二时钟门控处理模块U2;而所述第四组D触发器D4的输出端Q则连接第一组D触发器D1的反相置位端SD,第一组D触发器D1的反相复位端RD接收***输出的复位信号Reset_n。
当然,***输出的复位信号Reset_n也可以同时传输给第一组、第二组、第四组D触发器D1、D2、D4的反相复位端RD,在***复位时,控制其同步复位。为简便起见,优选仅通过第一组D触发器D1的反相复位端RD来接收***输出的复位信号Reset_n。
第一时钟门控处理模块U1接收第一时钟选择信号ff1_Q和第一时钟信号clk1,将ff1_Q作为clk1的门控使能信号,控制clk1的输出时序。同理,第二时钟门控处理模块U2分别接收第二时钟选择信号ff5_Q_n和第二时钟信号clk2,将ff5_Q_n作为clk2的门控使能信号,控制clk2的输出时序。在本实施例中,所述门控处理模块U1、U2可以采用逻辑或门实现,当门控使能信号为1时,阻断时钟信号的输出,使输出恒为1;当门控使能信号为0时,保持时钟信号畅通输出,即输出clk1或clk2。
组合处理模块U3接收第一时钟门控处理模块U1和第二时钟门控处理模块U2输出的信号,进行组合后生成时钟输出信号clk_out。在本实施例中,当门控处理模块U1、U2选用逻辑或门时,所述组合处理模块U3可以采用一个逻辑与门实现,对门控处理模块U1、U2输出的信号进行与操作后输出。
图6所示时钟切换电路的工作原理是:当***复位时,置复位信号Reset_n为低电平有效状态,控制第一组D触发器D1复位,输出0,即ff1_Q=0。此时,ff7_Q=0,ff5_Q_n=1,即第一时钟选择信号有效,选通clk1输出;第二时钟选择信号无效,阻塞clk2,由此经组合处理模块U3组合输出clk1。即在时钟切换装置处于复位状态时,默认输出clk1。
复位操作结束后,若***输出的时钟选择信号clk_sel=0,则各组D触发器D1~D4维持现有状态,即D1输出0,控制D2输出0,通过D2控制D3复位,使D3输出0,经反相器U4取反后,输出1,进而控制D4输出1,向D1输出无效的置位信号。此时,由于ff1_Q=0、ff5_Q_n=1,因此clk_out=clk1。
当clk_sel从0变为1时,利用第一组D触发器D1可以延迟ff1_Q跳变为1的时间,即让ff1_Q保持0至少到达下一个clk1脉冲时再跳变为1,阻断clk1,使第一时钟门控处理模块U1输出1。此时,由于ff5_Q_n仍为1,使第二时钟门控处理模块U2仍输出1,因此,经组合处理模块U3输出的clk_out=1。当ff1_Q由0变为1后,经过至少一个clk2脉冲后,通过第二组D触发器D2输出1,即ff7_Q=1,使传输至第三组D触发器D3的复位信号无效,放开D3,使D3在经历至少一个clk2脉冲后,输出1,即ff5_Q=1,取反后输出第二时钟选择信号ff5_Q_n=0,由此开始选通clk2输出,参见图4所示的波形图。与此同时,由于ff5_Q_n变为0,在下一个clk1脉冲到来时,D4输出0,向D1输出有效的置位信号,控制D1保持输出1,即ff1_Q=1。
同理,当clk_sel从1变为0时,表示输出时钟要求切换到clk1,与上述跳变过程的推导方法类似,由于D3的存在,使第二时钟选择信号ff5_Q_n在维持0至少一个clk2脉冲后跳变为1,阻断clk2的输出;由于D4、D1的存在,使第一时钟选择信号ff1_Q在保持输出1至少两个clk1脉冲后,跳变为0,选通clk1输出,参见图4所示的波形图。
在每一组D触发器D1~D4中可以仅设置一个D触发器,其所处理生成的时钟切换波形如图4所示。当然,也可以采用多个D触发器串联的方式来构建每一组D触发器。本实施例优选采用两个D触发器串联的方式组建每一组D触发器D1~D4,如图7所示,以使装置在去除毛刺和亚稳态方面的特性最优。
图7中,ff0、ff1是一对D触发器,串联构成第一组D触发器D1,输入时钟为clk1,用来解决将clk_sel转换到clk1时钟域时的亚稳态问题。同理,ff4、ff5是一对D触发器,输入时钟为clk2,串联构成第三组D触发器D3,用来解决将clk_sel转换到clk2时钟域时的亚稳态问题。ff6、ff7串联构成第二组D触发器D2,工作在第二时钟域,其时钟端CP均接收第二时钟信号clk2;ff2、ff3串联构成第四组D触发器D4,工作在第一时钟域,其时钟端CP均接收第一时钟信号clk1。时钟选择信号clk_sel分别传输至第一、第四组D触发器中的前一级触发器ff0、ff4,其输出端Q分别连接至该组后一级触发器ff1、ff5的数据端D,通过ff1的输出端Q输出第一时钟选择信号ff1_Q,通过ff5输出的信号经反相器取反后,输出第二时钟选择信号ff5_Q_n。所述反相器可以采用逻辑非门Nor实现。通过ff1输出的ff1_Q同时传输至第一时钟门控处理模块(本实施例以逻辑或门Or1为例进行说明)和第二组D触发器中的前一级触发器ff6,经ff6、ff7进行两次同步处理后,输出ff7_Q至ff5的反相复位端RD。通过非门Nor输出的第二时钟选择信号ff5_Q_n同时传输至第二时钟门控处理模块(本实施例以逻辑或门Or2为例进行说明)和第四组D触发器中的前一级触发器ff2,经ff2、ff3进行两次同步处理后,输出ff3_Q至ff1的反相置位端SD。所述或门Or1、Or2分别接收clk1、clk2,并与接收到的ff1_Q或ff5_Q_n进行“或”运算后,输出至组合处理模块进行组合输出。本实施例采用逻辑与门And来接收两个或门Or1、Or2输出的信号,进行“与”运算后,生成时钟输出信号clk_out。由此可以得到时钟输出信号的逻辑公式为:
clk_out=(ff1_Q or clk_1)and(ff5_Q_n or clk_2) (2)。
采用图7所示的时钟切换电路架构,当***输出的时钟选择信号clk_sel为0时,时钟输出信号clk_out为clk1;当clk_sel为1时,输出时钟clk_out为clk2,***输出的复位信号Reset_n为简便起见,仅传输至第一组D触发器ff0、ff1的反相复位端RD。
由于ff1_Q是clk1时钟域的,转换到clk2时钟域使用时,必须用ff6、ff7这对触发器去掉亚稳态。而ff5_Q_n是clk2时钟域的,转换到clk1时钟域时,需要用ff2、ff3这对触发器去掉亚稳态。
当电路处于复位状态时,即Reset_n=0时,ff1_Q的值为0,ff7_Q的值也为0,这样导致ff5_Q_n的值为1。将各个逻辑信号值代入公式(2),由此可知输出时钟clk_out为clk1。
时钟切换可以分为两种情况:
1)clk_sel从0变为1;
复位信号Reset_n变为1后,时钟切换电路进入正常工作状态。假设刚开始clk_sel=0,由上面的分析可知,clk_out为clk1。假设在某个不确定的时刻clk_sel由0跳变成1,经ff0、ff1进行两次同步处理后,使ff1_Q在经历两个clk1脉冲时,才稳定地跳变为1。由电路可知,在ff1_Q变为1的那个瞬间,ff7_Q是0,把ff5_Q_n保持在1,此时输出时钟为:
(ff1_Q or clk1)and(ff5_Q_n or clk2)=1。
由或门和与门的逻辑特性,由于ff1_Q一直为1时,输出clk_out将不依赖于clk1,只有当ff5_Q_n变成0时,才把clk2切换成输出。由于ff7_Q用来做ff5的复位信号,所以当ff7_Q变成1时才使ff5退出复位状态。从电路可以推出,当ff1_Q在clk1的上升沿变为1后,由于需要经过ff6、ff7进行两次同步处理,因此需要经过两个clk2脉冲,ff7_Q才能变为1。从ff1_Q跳变为1到ff7_Q跳变为1的这段时间,输出时钟一直保持在1,当在两个clk2脉冲的上升沿到来后,ff7_Q变为1导致ff5退出复位状态,并在下一个clk2脉冲的上升沿到来时,使ff5_Q变为1,从而使ff5_Q_n变为0,输出时钟clk_out切换到clk2。此时,由于clk_out原本为1,在clk2的上升沿切换时钟,可以完全避免小的时钟毛刺产生。
clk_sel从0变为1的时钟切换波形参见图8所示。
2)clk_sel从1变为0;
clk_sel从1变为0意味着输出时钟切换到clk1,根据第一种情况的推导方法可知:假设在某个不确定的时刻clk_sel由1跳变成0,经ff4、ff5进行两次同步处理后,使ff5_Q_n在经历两个clk2脉冲的上升沿时,才稳定地跳变为1。由于此时的ff1_Q仍然保持在1,因此输出时钟clk_out=1。
由于ff3_Q用来做ff1的置位信号,所以当ff3_Q变成1时才能使ff1退出置位状态。从电路可以推出,当ff5_Q_n在clk2的上升沿变为1后,由于需要经过ff2、ff3进行两次同步处理,因此需要经过两个clk1脉冲,ff3_Q才能变为1。从ff5_Q_n跳变为1到ff3_Q跳变为1的这段时间,输出时钟一直保持在1,当在两个clk1脉冲的上升沿到来后,ff3_Q变为1导致ff1退出置位状态,并在下一个clk1脉冲的上升沿到来时,使ff1_Q变为0,输出时钟clk_out切换到clk1。此时,由于clk_out原本为1,在clk1的上升沿切换时钟,同样可以完全避免小的时钟毛刺产生。
本实施例的时钟切换装置利用异步复位和置位的原理,来处理时钟选择信号clk_sel。同时,在任何涉及时钟域转换的地方都对亚稳态进行了处理。所以,无论时钟选择信号clk_sel在任何时候变化都不会引起输出时钟出现窄的毛刺时钟,也不会有任何亚稳态问题,其效果与现有技术相比更加优越。
当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的普通技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。