基于数字移相的高精度脉宽测量系统及其FPGA实现
利用DLL功能可以非常快速方便地构建移相计数模块,实现本文前面介绍的测量方法。移相计数模块结构如图5所示。原始时钟通过CLKDLL处理后得到的相位依次相差90°的四路时钟输出为CLK0、CLK90、CLK180和CLK270,它们分别作为四个相同的16位计数器的计数时钟,待测信号连接计数器的使能端,同时控制四个计数器的启动和停止。有了各计数器的计数结果,再通过加法器得到累加的计数个数,最后计算出信号脉宽值。
javascript:window.open(this.src);" style="cursor:pointer;"/>
3 仿真和精度分析
图6给出了FPGA芯片内部布线后用Modelsim进行仿真的结果。在RESET后就启动移相计数模块,开始对待测信号进行测量,完成一次测量后产生READY信号,同时输出测量结果,以供后续部分使用。仿真的结果证明测试系统达到设计目标。
下面进一步对系统做深入的误差分析。造成系统测量脉宽误差的来源主要有系统原理误差TS、时钟相移误差TP和信号延迟误差Td以及计数时钟抖晃TC,如图7所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
由前所述,当80MHz晶振时钟输入时,系统原理误差TS=3.125ns。时钟相移误差为从CLKDLL中出来的四路时钟信号之间本身的相位偏移,根据芯片提供的参数,其最大TP为200ps。计数时钟抖晃是指从CLKDLL中输出的时钟信号本身周期的偏差,其最大TC为60ps。由于计数的时钟周期数较多,故平均后其对整个系统的测量误差影响可以忽略不计。
信号延迟误差即为由于芯片内部各信号传输延迟不一致而造成的四个计数器计数的同步误差。为分析该误差情况,用ISE 5.1提供的Timing Analyzer程序对关键路径做进一步的时间分析,得到的结果如表1所示。
表1 各信号到计数器的延迟分析(单位:ns)
计数器1 | 计数器2 | 计数器3 | 计数器4 | |
计数时钟延迟CLK[090180270] | 3.294 | 3.562 | 3.640 | 3.149 |
待测信号延迟 | 3.962 | 4.665 | 4.843 | 4.767 |
时钟相对信号延迟 | 0.668 | 1.103 | 1.203 | 1.618 |
延迟误差Td | Td=1.618-0.668=0.950 |
表中第一栏为从CLKDLL中出来的计数时钟到各自计数器的延迟时间,第二栏为用来控制计数器启动停止的HF信号到四个计数器的时间。由于需要的是各计数时钟间相对延迟时间,故第三栏给出时钟相对于HF信号到计数器的延迟,即为第一栏和第二栏的差值。由此得出信号延迟误差Td=0.950ns。
故有系统测量误差Γ为:
Γ=TS+TP+Td=4.275ns (2)
即脉宽测量最大误差为±4.275ns。与脉冲计数法比较,同样的80MHz时钟输入,最大测量误差减小到原来的34.2%。
javascript:window.open(this.src);" style="cursor:pointer;"/>
本文在数字移相技术的基础上设计了一种高精度的脉宽测量系统,使测量精度相对于脉冲计数法提高了多倍。若需进一步提高这种方法的测量精度,可以通过以下两个方面进行改进:(1)继续提高晶振频率,寻求速度更快的FPGA芯片。晶振频率越高,系统原理误差越小。(2)减小信号延迟误差。由前面可以看到,信号的延迟误差对系统精度的影响占了很大的比例。减小各计数时钟和待测信号到计数器的信号延迟的差异,可以有效地提高测量精度。由于FPGA内部信号延迟的时间均可以很方便地得到,因此在设计时可以通过调整内部各元件的放置位置以及连线来尽量减小延迟误差,或者通过添加一些门电路来增加延时以使各信号延迟时间尽可能相同。