原创 基于FPGA的TDC设计中使用PLL来模拟HIT

2024-4-20 11:13 1376 6 6 分类: FPGA/CPLD 文集: TDC

基于FPGA的TDC设计中使用PLL来模拟HIT


概述

        在进行基于FPGA的TDC设计时,为了测试方便,一般通过PLL来模拟外部“HIT”,这是进行码密度测试基本操作。通常的做法是需要FPGA片外提供两个非同源的时钟,一个用于系统时钟以及TDC的高速锁存时钟,另外一个用于产生模拟HIT。假如使用片内的PLL,那么就没必要这么麻烦了。

读本文之前,还可以参考之前博客https://mbb.eet-china.com/blog/1010859-213148.htmlhttps://mbb.eet-china.com/blog/1010859-213159.html

乘除因子的真相

Phase-locked loop PLL Block Diagram

图1:PLL框图

       如图1所示为PLL的内部结构框图,那么所谓的PLL的乘除因子与内部的这些counter的关系如下所示:

  • FREF = FIN / N
  • FVCO = FREF × M = FIN × M/N
  • FOUT = FVCO / C = (FREF × M) / C = (FIN × M) / (N × C)

       其实我们在讲乘除因子的时候必须搞清楚PLL的几个counter,即M、N以及C计数器。首先我们可以确定的是Megawizard里“Clock multiplication factor”就等于M计数器的值,而“Clock division factor”等于N计数器的值乘以C计数器的值,这些可以从上述公式里找到答案。

在进行PLL输出时钟设置的时候,Megawizard一般不提供,且ALTERA也不建议客户直接去设置M、N以及C计数器,而是通过设置乘除因子来设置PLL,编译器会自动设置这些计数器的值。只有高级应用,即高级用户可以通过特殊方式来设置M、N以及C计数器来配置PLL。另外,应用ECO工具手动修改FPGA设计的时候也可以修改这些计数器以及其他参数。

一个TDC模拟HIT设计实例

        有篇参考论文上提到过一个利用FPGA的PLL产生HITs的例子,其中有两个问题一直没弄明白。最近几天通过不断的做实验终于搞清楚了问题,特总结一篇记录与此以备后查。

        整个例子如图2所示,外部给FPGA一个100MHz的时钟,第一个PLL由100MHz产生一个387.5MHz的TDC时钟。第二个PLL产生一个33.68MHz的HIT时钟。我所说的问题,第一是为什么20MHz时钟要从FPGA外面兜一圈;第二是作者给出两个PLL的输出时钟之间的相位关系有256种组合,而没有直接给出原因。

图2:关联校准脉冲发生器

        首先谈第一个问题,由于作者没有给出其具体使用的器件型号,所以这里我猜测这个20MHz在FPGA外部兜一圈的原因也许是因为作者使用的器件的PLL不支持逻辑时钟作为其输入,而必须是从FPGA引脚来的时钟才能作为PLL的输入,而ALTERA早期的Cyclone系列就有此限制。另外,早期的ALTERA器件也不支持PLL级联,所以也没有从第一个PLL产生一个20MHz来驱动第二个PLL。还有就是《PLL那些事之乘除因子》一文中有提到PLL的输出受限于PLL的FVCO,所以第一个PLL输出一个387.5MHz时钟后,无法再输出33.68MHz或者20MHz。否则,图2完全可以只用一个PLL产生387.5MHz和33.68MHz这两个时钟。

        接着谈第二个问题,即387.5MHz和33.68MHz这两个时钟之间为何相位关系就有256种组合呢?分别用CLKH和CLKL来代替387.5MHz和33.68MHz这两个时钟。根据图2,可以得到CLKH=100*,而CLKL=100**。因此将第二个等式代入第一个等式我们得到CLKH=CLKL*5**=CLKL*,反过来也就是2945*TH=256*TL,也即是说低速时钟和高速时钟有256种不同的相位关系组合,因为每256个时钟周期低速时钟和高速时钟关系重复一次。所以,图2所示的使用PLL在FPGA内部产生TDC的模拟HIT输入是可行的。图2所示的这些256种可能的脉冲平均分布在2580ps范围内,那么每两个相邻脉冲的时间间隔就是10.08ps,这个值可以通过求n*29687.5和2580的模来得到(29687.5ps是33.68MHz时钟的周期)。图2还显示了一种增加HIT和TDC时钟之间的时间关系可能性的办法,即通过相移90度得到另外一个33.68MHz时钟,这样模拟的HIT多出一倍,同理,通过改变相移可以继续增加HIT的种类。

改进型模拟HIT

        图2所示的模拟HIT产生电路相对比较复杂,原因前面提到了,是由于器件本身限制造成的。笔者自己使用的ArriaGX系列FPGA,该系列FPGA的PLL支持片内级联。也可以通过一个PLL同时产生TDC时钟和模拟HIT时钟。实际应用的时候还是用到了PLL级联,这是因为产生TDC时钟的PLL在产生TDC时钟的时候其FVCO频率已经被确定下来,所以在现有FVCO频率下是否能产生合适的用以模拟HIT的时钟还需认真考虑。

笔者实际使用的TDC时钟是250MHz,那么就需要另外一个PLL产生一个低速时钟,并且相位关系越复杂越好(即相关性越差越好)。为了验证上述分析,笔者作了三个实验,这三个实验分别用PLL产生了三个与250MHz时钟不同相位关系的模拟HIT时钟,实验的结果分别如图3、图4和图5所示。

图3:模拟HIT时钟和TDC时钟有10种相位关系

图4:模拟HIT时钟和TDC时钟有19种相位关系

图5:模拟HIT时钟和TDC时钟有205种相位关系

        图3可以明显看出实际测量的结果模拟的HIT和TDC时钟确实只有10种相位关系(不考虑时钟的skew和jitter),而图4虽然看不出19种相位关系,但是时钟的skew,jitter以及延时链的非线性特性,某些相位的HIT很有可能已经重合而连在了一起,但是从数据上还是可以明显分辨出13组独立的数据,那些长连续的数据可以被高度怀疑为两个相邻相位拼接在一起了。图5的测试结果和实际使用随机(random)HIT所得到的测试结果基本相同,如图6所示。

图6:随机HIT测试结果

作者: coyoo, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-1010859.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

默西赛德老男孩 2024-7-3 22:52

请问能否告知图2参考论文来源?感谢!
相关推荐阅读
coyoo 2024-12-25 14:13
ALTERA Cyclone 10器件的使用-8:特定的上电顺序
概述 Intel 要求用户为其10代FPGA器件使用特定的上电和掉电顺序,这就要求用户在进行FPGA硬件设计的时候必须选择恰当的FPGA供电方案,并合理控制完整的供电上电顺序。经过在Cyclone 1...
coyoo 2024-12-22 11:46
AD9218子板在新处理板上表现的问题
概述 新的数据处理板融合了数字和数据处理功能模块,计划采用ADI的4通道串行ADC芯片代替之前的并行ADC。由于初次使用,所以初次设计时预留了AD9218的子板的插槽。 在调试AD9633功能的同时并...
coyoo 2024-12-14 17:15
在Cyclone 10 GX器件上实现高精度TDC探索
概述 Cyclone 10 GX器件的ALM结构与Cyclone V类似,所以在Cyclone 10 GX器件上实现TDC功能理论上是可以完全参考甚至移植自Cyclone V系列的成功案例。但是,现实...
coyoo 2024-12-10 13:28
Cyclone V GX FPGA设计TDC的优化问题
概述 通过前面的研究学习,已经可以在CycloneVGX器件中成功实现完整的TDC(或者说完整的TDL,即延时线),测试结果也比较满足,解决了超大BIN尺寸以及大量0尺寸BIN的问题,但是还是存在一些...
coyoo 2024-12-03 12:20
比较器检测模拟脉冲说明(四)
概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解...
coyoo 2024-11-16 13:54
不同ADC采样同一前端模拟信号时转换用时差异分析
概述 同一组前端模拟信号接入由不同型号ADC组成的模数转换电路时,采样后在FPGA中发现采样用时差异较大。本文主要分析这个时间差异形成的原因,并记录该差异产生对系统造成的影响。系统数字化简介 项目前端...
EE直播间
更多
我要评论
1
6
关闭 站长推荐上一条 /3 下一条