一种快速位同步时钟提取方案及实现
时间:08-05
来源:互联网
点击:
在数字通信系统中,同步技术是非常重要的,而位同步是最基本的同步。位同步时钟信号不仅用于监测输入码元信号,确保收发同步,而且在获取祯同步、群同步及对接收的数字码元进行各种处理的过程中,也为系统提供了一个基准的同步时钟。
随着可编程器件容量的增加,设计师倾向于把位同步电路设计在CPLD/FPGA芯片内部。因此,本文采用Quartus II软件设计了一种新型的位同步提取电路,对电路进行了仿真试验,并使用Altera的Cyclone II系列FPGA芯片EP2C5予以实现。
在CPLD/FPGA上实现位同步,最简单直接的办法就是利用FPGA的片上锁相环。但这种锁相环要求的输入时钟范围是10MHz"100MHz,它对于低速数据显得无能为力。而且,对于中低档FPGA来说,锁相环是稀缺资源,很多时候被用作系统时钟锁相。CPLD片上则没有锁相环,大部分应用都需要设计师自己设计位同步电路。
两种位同步提取电路性能分析
目前在CPLD/FPGA上常用的位同步方案可分为两类:一是采用锁相环的闭环相位调整电路,二是采用开环结构的位同步电路。下面用两个典型的设计电路来讨论这两种方案的优缺点。
基于超前滞后型锁相环的位同步提取电路
这种电路一般采用添/扣门结构,如图1所示,每输入一个码元后,根据鉴相器输出是超前还是滞后,通过反馈回路控制的添/扣门来调整相位,使之逼近输入码元的相位。为了提高精度,这种方案只能采用更短的调整脉冲,一旦失步,就需要通过反馈回路重新调整。每一个超前和滞后脉冲仅能调整一步,如果接收码元出现连“0”或是连“1”的情况,锁定时间会很长,使其同步建立时间和调整精度变得相互制约。尽管有此缺点,但由于这种结构具有失锁后的自我调节性,因此,码元消失或是码元相位出现抖动时,同步脉冲不会出现较大变化,仍然可以输出稳定的同步脉冲。
图1 数字锁相环法位同步提取原理框图
采用开环结构的快速位同步电路
由于这种结构没有采用闭环的相位调节电路,所以要求在每一个输入码元跳变沿实现与输出的同步脉冲跳变沿相位对齐。所以,通常采用这种结构的位同步电路能够快速实现同步。其典型实例如图2所示。
图2 开环位同步提取电路框图
跳变沿提取电路的作用是,当产生一个边沿脉冲时,它直接反映了输入信号的真实相位。以它为基准,就可以有效地提取出与输入信号同步的时钟。时钟同步的原理就是利用这个边沿脉冲清零计数器,输出反映输入码元相位的一个高精度时钟源周期的短脉冲。图中状态寄存器保证了在接收码元出现连“0”或是连“1”时仍然会有固定的反映码元时钟的短脉冲输出。可见,这种设计与数字锁相环法相比,优点主要是可以快速提取位同步脉冲,并进行实时输出。另外,这种电路结构要更节省硬件资源。
该电路也有两大缺点,首先,输出S并不是占空比为50%的时钟脉冲,而是间隔不固定的短脉冲。此缺点可以通过增加一个时钟整形电路来解决。第二个缺点是,由于跳变沿提取电路的输出X3(clr)具有对计数器清零的作用,如果跳变沿出现抖动的话,这种跳变沿会和计数器原先的输出产生冲突,造成输出时钟信号占空比大幅度变化,严重时会出现毛刺。这对后续电路功能的实现无疑会产生致命的影响,很可能导致设计失败。
新型快速位同步提取方案
综合以上两种设计的优缺点,本文提出了一种新型的设计方案,其原理框图如图3所示。该方案实现位同步的基本原理是利用输入码元的跳变沿脉冲作为计数器的清零输入信号,这里高精度时钟的频率为F,码元速率为f,取F=2Nf=2N/T(T为输入的不归零码元的宽度)。原理图中的计数器为N进制自动增加计数器。当输入清零信号后,计数器输出翻转。当输入码元出现连“0”或是连“1”时,一个码元的长度为2NT。由于计数器为N进制,计数器的计数值回到0时,计数器的输出仍然翻转,占空比为:NT/2NT=50%。这样就保证了一个输入码元的宽度对应了占空比为50%的时钟信号,即实现了输入码元与计数器输出CLKOUT时钟的同步。
图3中数字滤波器的作用是将输入码元中的窄脉冲干扰滤除掉,这部分电路较简单,在此不作介绍。跳变沿提取电路的作用仍然是提取码元的跳变沿,这部分作用和实现原理与图2介绍的方法相同。其中,跳变沿提取电路如图4所示。
图3 新型位同步提取电路框图
图4 码元跳变沿脉冲产生电路
固定延迟单元的作用是,将经过跳变沿提取电路之后的码元信号进行固定时钟周期的延迟,使之与计数器的输出同相,从而达到位同步。
本设计的关键点是带清零抖动判断的N进制计数器的设计。当计数器清零输入没有抖动,而严格按照t=n×2NT时间出现时(当出现连“1”或是连“0”时,式中n>1,否则n = 1),计数器计到“0”和清零脉冲同时生效,计数器输出翻转,这时的输出时钟是稳定的。计数器的清零输入信号是由码元的边沿脉冲提供的,所谓清零抖动实际上就是输入码元的边沿位置出现抖动,这是符合实际情况的,因为信号的传输路径上不可避免地会产生衰减,并受到干扰,发送方的数据发送时钟也有可能存在抖动。下面讨论这种抖动对N进制计数器输出产生的影响:
1.当输入的不归零码元的跳变沿出现的时间略小于2NT的整数倍时,称之为前向抖动。此时计数器的清零脉冲出现在计数器还没有计数到 “0”的某个计数值的位置,比如当计数器计到N-1时,清零脉冲出现,于是计数器被清零脉冲清零,同时输出脉冲翻转。这种情况会使输出的时钟脉冲比估计的翻转时间提前aT=(0+N-(N-1)+1)T=2T,这对时钟输出不会产生不利影响。而且,时钟的翻转时间实时反映出码元的变化,有利于后续电路功能的实现。
2.当输入的不归零码元的跳变沿出现的时间略大于2NT的整数倍时,称之为后向抖动。此时计数器的清零脉冲出现在计数器计数到“0”之后的某个计数值的位置,比如当计数值为2时,清零脉冲出现。现在来看计数器的输出,首先当计数器计到“0”前,计数器输出一直维持在“0” ;计数器计到“0”后,计数器输出自动翻转为“1”,然后继续计数;当计数值为2时,清零脉冲出现,于是计数器被清零脉冲清零,同时输出脉冲翻转为“0”,计数器输出就会出现持续时间为bT=(2-0)T=2T的窄脉冲。当接收电路的时钟里出现这种不可预测的窄脉冲时,接收电路位同步之后的后续电路的功能也就无法正常实现了,这也就是本文刚开始讨论的采用开环结构的快速位同步电路的缺点。
本文的设计方案中所采用的计数器是利用VHDL语言设计的、带清零抖动判断功能的计数器。具体来说,它可以判断清零抖动为前向抖动还是后向抖动。如果是后者,则忽略此次清零脉冲,同时将此之后的某个计数值减去b,这样做的目的是防止这种抖动带来的影响出现累加。依照以上分析及处理办法,可以设计出带有清零抖动判断功能的计数器。
a:process(clk,clr) begin
if clk'event and clk='1' then
if clr='1' and count>c then countelsif clr='1' and count="0" then countelsif clr='1' and count>0 and countelsif count="N/2" then
if zero='1' then countelsif temp="0" then countelse countend if;
else countend if;
end if;
end process a;
b:process(clk,clkout) begin
if clk'event and clk='1' then
if count="0" then clkoutend if;
end if;
end process b;
程序中count为当前时刻的计数值,当清零信号有效时,首先进行0c。这样可以在码元跳边沿之间的计数值凑够N的整数倍,避免了这种抖动带来的影响出现累加。程序中对清零信号有效且n=0的情况作了特殊考虑。
本设计方案在Altera的Cyclone II系列FPGA芯片EP2C5上进行了实现,在Quartus II环境下,用VHDL硬件描述语言和电路图输入混合设计的方法,完成了整个时钟提取电路的设计,其仿真结果如图5所示。仿真中采用的CLK频率为10MHz,参数取值为N=32、c=4。仿真图中各输入输出标号与图3中标号对应。
图5 仿真波形
随着可编程器件容量的增加,设计师倾向于把位同步电路设计在CPLD/FPGA芯片内部。因此,本文采用Quartus II软件设计了一种新型的位同步提取电路,对电路进行了仿真试验,并使用Altera的Cyclone II系列FPGA芯片EP2C5予以实现。
在CPLD/FPGA上实现位同步,最简单直接的办法就是利用FPGA的片上锁相环。但这种锁相环要求的输入时钟范围是10MHz"100MHz,它对于低速数据显得无能为力。而且,对于中低档FPGA来说,锁相环是稀缺资源,很多时候被用作系统时钟锁相。CPLD片上则没有锁相环,大部分应用都需要设计师自己设计位同步电路。
两种位同步提取电路性能分析
目前在CPLD/FPGA上常用的位同步方案可分为两类:一是采用锁相环的闭环相位调整电路,二是采用开环结构的位同步电路。下面用两个典型的设计电路来讨论这两种方案的优缺点。
基于超前滞后型锁相环的位同步提取电路
这种电路一般采用添/扣门结构,如图1所示,每输入一个码元后,根据鉴相器输出是超前还是滞后,通过反馈回路控制的添/扣门来调整相位,使之逼近输入码元的相位。为了提高精度,这种方案只能采用更短的调整脉冲,一旦失步,就需要通过反馈回路重新调整。每一个超前和滞后脉冲仅能调整一步,如果接收码元出现连“0”或是连“1”的情况,锁定时间会很长,使其同步建立时间和调整精度变得相互制约。尽管有此缺点,但由于这种结构具有失锁后的自我调节性,因此,码元消失或是码元相位出现抖动时,同步脉冲不会出现较大变化,仍然可以输出稳定的同步脉冲。
图1 数字锁相环法位同步提取原理框图
采用开环结构的快速位同步电路
由于这种结构没有采用闭环的相位调节电路,所以要求在每一个输入码元跳变沿实现与输出的同步脉冲跳变沿相位对齐。所以,通常采用这种结构的位同步电路能够快速实现同步。其典型实例如图2所示。
图2 开环位同步提取电路框图
跳变沿提取电路的作用是,当产生一个边沿脉冲时,它直接反映了输入信号的真实相位。以它为基准,就可以有效地提取出与输入信号同步的时钟。时钟同步的原理就是利用这个边沿脉冲清零计数器,输出反映输入码元相位的一个高精度时钟源周期的短脉冲。图中状态寄存器保证了在接收码元出现连“0”或是连“1”时仍然会有固定的反映码元时钟的短脉冲输出。可见,这种设计与数字锁相环法相比,优点主要是可以快速提取位同步脉冲,并进行实时输出。另外,这种电路结构要更节省硬件资源。
该电路也有两大缺点,首先,输出S并不是占空比为50%的时钟脉冲,而是间隔不固定的短脉冲。此缺点可以通过增加一个时钟整形电路来解决。第二个缺点是,由于跳变沿提取电路的输出X3(clr)具有对计数器清零的作用,如果跳变沿出现抖动的话,这种跳变沿会和计数器原先的输出产生冲突,造成输出时钟信号占空比大幅度变化,严重时会出现毛刺。这对后续电路功能的实现无疑会产生致命的影响,很可能导致设计失败。
新型快速位同步提取方案
综合以上两种设计的优缺点,本文提出了一种新型的设计方案,其原理框图如图3所示。该方案实现位同步的基本原理是利用输入码元的跳变沿脉冲作为计数器的清零输入信号,这里高精度时钟的频率为F,码元速率为f,取F=2Nf=2N/T(T为输入的不归零码元的宽度)。原理图中的计数器为N进制自动增加计数器。当输入清零信号后,计数器输出翻转。当输入码元出现连“0”或是连“1”时,一个码元的长度为2NT。由于计数器为N进制,计数器的计数值回到0时,计数器的输出仍然翻转,占空比为:NT/2NT=50%。这样就保证了一个输入码元的宽度对应了占空比为50%的时钟信号,即实现了输入码元与计数器输出CLKOUT时钟的同步。
图3中数字滤波器的作用是将输入码元中的窄脉冲干扰滤除掉,这部分电路较简单,在此不作介绍。跳变沿提取电路的作用仍然是提取码元的跳变沿,这部分作用和实现原理与图2介绍的方法相同。其中,跳变沿提取电路如图4所示。
图3 新型位同步提取电路框图
图4 码元跳变沿脉冲产生电路
固定延迟单元的作用是,将经过跳变沿提取电路之后的码元信号进行固定时钟周期的延迟,使之与计数器的输出同相,从而达到位同步。
本设计的关键点是带清零抖动判断的N进制计数器的设计。当计数器清零输入没有抖动,而严格按照t=n×2NT时间出现时(当出现连“1”或是连“0”时,式中n>1,否则n = 1),计数器计到“0”和清零脉冲同时生效,计数器输出翻转,这时的输出时钟是稳定的。计数器的清零输入信号是由码元的边沿脉冲提供的,所谓清零抖动实际上就是输入码元的边沿位置出现抖动,这是符合实际情况的,因为信号的传输路径上不可避免地会产生衰减,并受到干扰,发送方的数据发送时钟也有可能存在抖动。下面讨论这种抖动对N进制计数器输出产生的影响:
1.当输入的不归零码元的跳变沿出现的时间略小于2NT的整数倍时,称之为前向抖动。此时计数器的清零脉冲出现在计数器还没有计数到 “0”的某个计数值的位置,比如当计数器计到N-1时,清零脉冲出现,于是计数器被清零脉冲清零,同时输出脉冲翻转。这种情况会使输出的时钟脉冲比估计的翻转时间提前aT=(0+N-(N-1)+1)T=2T,这对时钟输出不会产生不利影响。而且,时钟的翻转时间实时反映出码元的变化,有利于后续电路功能的实现。
2.当输入的不归零码元的跳变沿出现的时间略大于2NT的整数倍时,称之为后向抖动。此时计数器的清零脉冲出现在计数器计数到“0”之后的某个计数值的位置,比如当计数值为2时,清零脉冲出现。现在来看计数器的输出,首先当计数器计到“0”前,计数器输出一直维持在“0” ;计数器计到“0”后,计数器输出自动翻转为“1”,然后继续计数;当计数值为2时,清零脉冲出现,于是计数器被清零脉冲清零,同时输出脉冲翻转为“0”,计数器输出就会出现持续时间为bT=(2-0)T=2T的窄脉冲。当接收电路的时钟里出现这种不可预测的窄脉冲时,接收电路位同步之后的后续电路的功能也就无法正常实现了,这也就是本文刚开始讨论的采用开环结构的快速位同步电路的缺点。
本文的设计方案中所采用的计数器是利用VHDL语言设计的、带清零抖动判断功能的计数器。具体来说,它可以判断清零抖动为前向抖动还是后向抖动。如果是后者,则忽略此次清零脉冲,同时将此之后的某个计数值减去b,这样做的目的是防止这种抖动带来的影响出现累加。依照以上分析及处理办法,可以设计出带有清零抖动判断功能的计数器。
a:process(clk,clr) begin
if clk'event and clk='1' then
if clr='1' and count>c then countelsif clr='1' and count="0" then countelsif clr='1' and count>0 and countelsif count="N/2" then
if zero='1' then countelsif temp="0" then countelse countend if;
else countend if;
end if;
end process a;
b:process(clk,clkout) begin
if clk'event and clk='1' then
if count="0" then clkoutend if;
end if;
end process b;
程序中count为当前时刻的计数值,当清零信号有效时,首先进行0c。这样可以在码元跳边沿之间的计数值凑够N的整数倍,避免了这种抖动带来的影响出现累加。程序中对清零信号有效且n=0的情况作了特殊考虑。
本设计方案在Altera的Cyclone II系列FPGA芯片EP2C5上进行了实现,在Quartus II环境下,用VHDL硬件描述语言和电路图输入混合设计的方法,完成了整个时钟提取电路的设计,其仿真结果如图5所示。仿真中采用的CLK频率为10MHz,参数取值为N=32、c=4。仿真图中各输入输出标号与图3中标号对应。
图5 仿真波形
电路 CPLD FPGA Quartus 仿真 Altera 滤波器 VHDL 电路图 相关文章:
- 浅谈E1线路维护技术与应用(01-12)
- R4网络接口和电路域容灾技术(01-05)
- 移动通信网引入IMS的相关探讨(02-21)
- 未来接入网的结构与演进(01-26)
- 电子熔丝在计算机应用中的优势(06-08)
- 高性能、高集成度的TD-SCDMA模拟基带集成电路的实现和应用(01-09)