原创 码密度测试

2019-10-31 09:56 3475 7 5 分类: FPGA/CPLD 文集: TDC
FPGA芯片中,受到布局布线以及PVT的影响,无法使得每个延迟单元的延迟时间完全一致,更重要的问题在于我们需要获取每个延迟单元的bin-width,此时可以采用码密度测试来获取每个延迟单元的bin width。
所谓码密度测试,即Code Density Test(CDT),这个概念在ADC测试中经常见到,区别在于ADC中的码密度测试是对幅度随机的电压信号进行量化统计分析,而TDC中的码密度测试是对时间间隔完全随机的信号进行量化统计。测试原理如下图所示:

图1:随机信号码密度测试原理图

延时链中输入大量的随机跳变脉冲,对随机脉冲的上升沿进行采样,采用得到的数据即为码密度数据。由于跳变脉冲Hit信号是随机信号,则Hit信号落在参考时钟周期内(0,T)任何一个相位点的概率相同,即任何一次Hit信号与参考时钟上升沿的间隔时间t也是完全随机的,其中t的范围为(0,T)。

随机时间间隔t

             (1)

如图1(b)所示,当随机时间间隔t的范围为(ti-1,ti)时,说明随机信号Hit落在延迟链中第i个抽头处,其概率为:

                (2)

假设在N次测试过程中,Hit信号停在第i个抽头的次数为h(i),其发生概率为:

                          (3)

当测试次数N无限大时,则有:

              (4)

根据公式(3)和公式(4),则可以求得第i个抽头延时时间为:

                      (5)

根据公式(5)可以依次求出每个延迟单元的延迟时间,进而可以求出i个延迟的累计延时为:

            (6)

但是时间间隔t是落在第i个抽头内部,所以无论TDC的测量值取ti还是ti-1,都会产生较大的测量误差。假设取测量值δ,则ti-1<δ

      (7)

δ=(ti+ti-1)/2  时,标准方差达到最小值(ti+ti-1)²/12,所以应取测量值为:

     (8)

即把测量值校准到延迟单元的中间位置。

公式(8)所确定的测量值需要足够多的测试样本数N才能保证其精确度,但是在实际测试中,测试样本数N不可能无限大,所以,在有限个N次测试中,Hit信号停留在第i抽头的次数h(i)是服从二项分布。其平均值为:

                  (9)

标准差为:

   (10)

由于所有的样本都是随机的,由公式(5)和公式(8)得:

  (11)

假设在一个参考时钟周期T内内插了K个延迟单元,理论情况下这K个延迟单元的延迟时间相等,则有:

  (12)

从公式(11)可知,当i=K时,σt达到最大值为:

    (13)

如果标准误差σtmax要小于10ps,系统参考时钟周期T为5ns,则由公式(13)可得:N要大于250000。

通过以上分析,设计一个如图2所示的校准电路。校准电路模块主要由随机信号产生电路、随机信号保持电路以及校准查表存储电路组成。随机信号产生电路是利用环形振荡器产生随机校准信号;校准查找表存储电路是对TDC校准结果建立累加查找表。

图2:校准电路基本结构

随机信号产生电路

码密度测试需要对大量的随机信号进行量化统计,为了保证延迟链中不对同一个位置进行重复采样,必须使得校准信号与参考时钟无整数倍关系。在数字电路中,通常由奇数个反相器级联构成的环形振荡器来产生随机信号。

FPGA采用的是基于SRAM工艺的查找表结构,没有专门的反相器,都是利用LUT来实现所谓的反相器。图3是基于LUT的环形振荡器结构图,包括偶数个LUT1和一个LUT2。在TDC测量中,只有在校准模式下TDC才会需要环形振荡器产生随机信号对延迟链进行实时地校准,因此对环形振荡器加入了使能控制信号,使得环形振荡器只在校准模式下工作,从而降低电路功率的消耗。查找表LUT1和LUT2配置分别如表1和表2所示。

                                                                              图3:查找表构成环形振荡器结构图

表1:LUT1配置表

表2:LUT2配置表

从表1和表2可以看出,通过把LUT1的内部初始值INIT0-INIT1设置为“10”,便可使LUT1实现反相的功能;LUT2内部初始值INIT0-INIT3设置为“0010”,当I1输入值EN为“0”时,不管I0的输入是“1”还是“0”,LUT2的输出均为0,不会实现反相的功能,即环形振荡器不会起振;当I1输入值EN为“1”时,LUT2对输入信号I0进行反相。所以由偶数个LUT1和一个LUT2级联可以构成环形振荡器,并且通过使能控制信号可以控制环形振荡器的工作状态。环形振荡器核心代码如图4所示:

                                                                         图4:环形振荡器核心Verilog代码

由于TDC完成一次校准需要时间,为了使得TDC在未完成本次校准前,不对接下来的随机信号上升沿进行采样,所以每次校准前需要对随机信号进行保持处理,该部分电路结构如图2中紫色线框所示。环形振荡器输出接到D触发器的时钟端,输入端设置为高电平“1”,当随机信号到来时,该触发器就输出一个高电平信号,校准完成后再利用复位端对其清零,然后等待下一个随机信号到了继续进行保持处理,以此类推,直到全部的校准信号完成。

校准查找表存储电路

校准查找表电路主要由图2中Cal_histogram、累加单元、LUT_ram以及一些读写控制逻辑组成。Cal_histogram电路是对TDC中各个抽头的随机跳变次数进行统计存储;累加单元是根据公式(8)把测量值校准到延迟单元的中间位置。LUT_ram是对累加单元处理后的数据建立查找表。在TDC校准模式时,TDC需要根据Cal_histogram中存储值实时地更新查找表LUT_ram;测量模式时,根据编码电路结果读取查找表LUT_ram中对应地址的校准数据。

TDC整个校准操作流程如下:

1. 复位清零。读写控制器1和读写控制器2分别依次生成0-255位作为Cal_histogram和LUT_ram的写地址,将数据0依次写入Cal_histogram和LUT_ram的各个存储单元。

2. 启动码密度测试。每进行一次校准,随机信号会在延迟链被捕获一次,该被捕获的信号通过编码电路得到其在延迟链的位置(地址),在Cal_histogram中该地址中对应的值加1,如此循环直到所有的校准次数完成,其中,校准次数控制器来控制校准次数;读写控制器1控制Cal_histogram中的读写。

3. 建立查找表。全部的校准次数完成后,校准次数控制器启动读写控制2,读写控制器2依次生成0-255位Cal_histogram的读地址,然后经过累加单元依次把数据累加到每一位的中间位置并存入相应地址的LUT_ram中,查找表建立完成后,TDC由校准模式转换到测量模式,并根据编码结果读取LUT_ram相应地址位存储的数据,即可得到校准后的“细”测量结果。每测量完一次,校准电路都会被复位并重新建立查找表。




框图

文章评论6条评论)

登录后参与讨论

coyoo 2020-3-27 09:59

WXY123: 可以提供上述公式中7,10,11,13被遮挡的部分吗,有些地方不是太懂
这是转的别人硕士论文,你去网上搜下,应该可以很容易找到这篇论坛。

WXY123 2020-3-23 15:04

可以提供上述公式中7,10,11,13被遮挡的部分吗,有些地方不是太懂

WXY123 2020-3-23 10:00

coyoo: 他们之间的关系的完全随机的
谢谢您的回复,请问你有关于在FPGA上实现TDC技术比较好的论文推荐一下吗,我现在在做这方面的项目,希望可以查到一些好的参考资料。希望您能介绍一些谢谢。

coyoo 2020-3-20 14:51

WXY123: 大神,请问该如何确定TDC的校准信号与参考时钟,他们之间通常需要满足什么条件呀?谢谢
他们之间的关系的完全随机的

WXY123 2020-3-19 14:12

大神,请问该如何确定TDC的校准信号与参考时钟,他们之间通常需要满足什么条件呀?谢谢

curton 2019-10-31 19:10

学习了
相关推荐阅读
coyoo 2020-04-13 15:19
用SI9000控制阻抗,并得出各种叠层走线参数
1、差分表层(1B)2、差分内层(1B2A)3、差分内层(2B1A)4、单端表层(1B)5、单端内层(1B2A)6、单端内层(2B1A)7、未命名...
coyoo 2020-04-01 15:29
中国进出口商品运输路线图-2011年
试试翻转下:...
coyoo 2020-03-31 11:38
LTspice导入其它厂家器件现有的spice模型
最近在使用LTspice仿真由三极管搭建的放大电路,在选用罗姆的三极管2SC4083的时候,从罗姆的官网下载了其spice模型文件,这个文件后缀是lib。这里介绍一种方法导入我下载到的lib文件,该l...
coyoo 2020-03-20 14:54
共基极放大器,共基极放大器放大电路 (转)
共基极放大器,共基极放大器放大电路 交流信号电压叠加在直流电压上,使晶体管基极、发射极之间的正向电压发生变化,通过晶体管的控制作用,使集电极电流有更大的变化,它的变量在集电极电阻上产生大的电压变量,...
coyoo 2019-10-31 17:09
FPGA Based TDC的编码器
编码方法: 顺序查找:利用for循环,从tc的第0位依次遍历到第一个0-1(或1-0)跳变的位置,输出跳变处的位置序号,完成编码。顺序查找法比较直观,无需任何外加电路就可以抑制bubble现...
广告
我要评论
6
7
广告
关闭 热点推荐上一条 /6 下一条