原创 基于Cyclone V GX FPGA的TDC设计及测试结果分析

2024-4-20 10:41 1365 8 7 分类: FPGA/CPLD 文集: TDC

基于Cyclone V GX FPGA的TDC设计及测试结果分析

概述

       基于老工艺的FPGA的TDC已经经过验证测试,可以安全可靠的用于产品。在逻辑资源受限的情况下,单通道TDC测量精度可以做到15ps左右,如果给予足够资源的情况下可以进一步提升精度。

之前已经分析了28nm器件逻辑资源的结构,与老工艺器件还是有些差别,如果应用这种工艺器件来实现TDC是否可以从老器件无缝移植过来呢?这是本文需要探讨的问题。

新老工艺相对TDC设计的不同挑战

       使用老工艺FPGA进行TDC设计的时候,设计者首先面临的最大挑战是LAB之间以及LAB内部存在超大时延,所以TDC设计者在进行TDC设计的时候首先需要将这些超大BIN进行“切割”后平滑,否则TDC的精度会受到限制。

新工艺在ALTERA高端器件的表现(或者从公开发表的有关竞争对手Xilinx器件的论文同样提到)就是这种“超大”BIN已经消失,各延时单元的延时已经解决并得到均衡。可是从之前我们对应CycloneVGX器件逻辑单元的分析发现,这种超大时延仍然存在LAB之间。更为严重的情况是,每间隔一个延时单元,出现0延时的单元。这为TDC设计者带来了额外的挑战,意味着很可能大量的0尺寸BIN出现。这个结论在公开发表的论文中已经得到证实,如图1所示。

图1:通过码密度测试得到的BIN尺寸(a),TDL延时链中不同BIN尺寸对应的计数直方图(b)

       从图1中b可以看出,大量统计位于0尺寸的BIN,也就是说延时链中大量单元的延时时间是0。

该论文讨论了作者使用了优化方法来解决上述问题,该办法非常灵巧,通过BIN重新定位解决了0尺寸BIN“乱入”等问题。这个方法在需要使用Xilinx器件设计TDC的时候也有应用到。通过研究,个人理解此方法比较繁琐,可能需要大量的离线迭代最终统计得到重定位的BIN,经过一段时间的尝试,放弃此方法,采用其它方法同样解决了上述问题。

初步测量结果

       Cyclone第五代器件逻辑单元ALM中包含4个寄存器,所以延时单元与寄存器的比例是1:2。那么在形成TDC的时候,存在两种可能,使用顶部寄存器锁存还是选择底部寄存器锁存。甚至不加约束,让编译器自己选择寄存器锁存,只不过这样的话锁存的寄存器一致性大打折扣。

测试结果显示,不管使用顶部寄存器锁存还是使用底部寄存器锁存,实验结果差别并不大。如图2所示为实测结果。

图2:使用400MHz采用时钟采集延时链Tap输出结果

       上述测试结果中,总共占用了486个延时单元,测试显示第11个延时单元有一个超大延时,延时结果大概56ps左右。剩余单元的延时尺寸均被压制在30或30ps之内。出现这个问题的原因,初步分析应该是使用的512个延时单元的延时链长度不足导致的。

如何处理第一个LAB较大延时?

        在上面图2的实验结果中,在第一个LAB中出现几个延时较大(最大57ps,远大于平均值,即5ps)的延时单元。能想到的办法无非是两个,第一个是增大采样时钟到500MHz,这个方法在Cyclone V系列器件里似乎很难实现,内部逻辑很难保证稳定跑在这个速率。第二个方法就是增长延时链长度到640,然后截断出现大延时的延时单元。如图3所示,采用640个延时单元后,采用截断8个,初始段仍然存在超大尺寸BIN(类似事件“堵车”堵塞一样)。对比如2和图3,图3后段还存在空间,那么是否可以将截断长度增大,看看是否能解决此问题呢?

图3中最大延时单元出现在第14个(cell - 13)上,所以需要截断cell13之前的延时单元,经过实验发现不能随意截取,否则编译器会报布局错误(原因不明),经过不断尝试发现将截断点选择在cell-23上能通过编译,结果如图4所示,当增大截断长度后,确实可以解决该问题。图5测试查找表校准曲线。注意图4中平均BIN尺寸是5.5ps。

图3:640个延时单元 截断前面8个,最大延时为48ps

图4:640个延时单元,400MHz采样,最大延时29ps,其余大都低于20ps

图5:查找表校准曲线

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

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

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

文章评论6条评论)

登录后参与讨论

用户1718849936346 2024-6-20 14:32

没办法私信,没有权限

coyoo 2024-6-15 15:46

sSSSSSoda: 感谢大佬的回复,我看到一篇论文简单的把四个延时合在一块,只取一个reg输出,我把这种方法应用在了我的进位链上,但是发现编译过后,进位链的顺序被打乱了,请 ...
我感觉第一种方法,就是你当前使用的方法类似。你是4个单元合并取一个输出,CycloneV系列是一个ALM包含2个ALUT+4个Reg,其中每个ALM的第二个ALUT从Quartus软件给出的分析显示其延时时间总是为0(具体实际是否为0,还未确认),所以有人将第二个ALUT不用作延时单元,就相当于两个ALUT取一个输出。我不清楚你所谓的四个延时合一块是否跟这个用法类似,我只是直觉似乎类似。

sSSSSSoda 2024-6-14 21:18

coyoo: 公开论文中看到有至少3种方法来解决这个问题。首先,有人非常粗暴地仅使用有延时时间的ALUT,0时间的不用;其次,看到有使用Xilinx器件的用户遇到类似问题,采用 ...
感谢大佬的回复,我看到一篇论文简单的把四个延时合在一块,只取一个reg输出,我把这种方法应用在了我的进位链上,但是发现编译过后,进位链的顺序被打乱了,请问这种方法是不适用吗?以及想请教一下第一种粗暴的方法该怎么实现呢

coyoo 2024-6-14 15:05

sSSSSSoda: 您好 请问您是如何解决延时链中大量单元的延时时间是0这个问题的?
公开论文中看到有至少3种方法来解决这个问题。首先,有人非常粗暴地仅使用有延时时间的ALUT,0时间的不用;其次,看到有使用Xilinx器件的用户遇到类似问题,采用的是离线校准方法;最后,有人发布统计0,1方式来解决此问题。大致,就这些方法吧。

sSSSSSoda 2024-6-14 14:24

大佬您好 可以加个联系方式交流一下吗

sSSSSSoda 2024-5-31 16:20

您好 请问您是如何解决延时链中大量单元的延时时间是0这个问题的?
相关推荐阅读
coyoo 2024-11-16 13:54
不同ADC采样同一前端模拟信号时转换用时差异分析
概述 同一组前端模拟信号接入由不同型号ADC组成的模数转换电路时,采样后在FPGA中发现采样用时差异较大。本文主要分析这个时间差异形成的原因,并记录该差异产生对系统造成的影响。系统数字化简介 项目前端...
coyoo 2024-11-10 13:04
ALTERA Cyclone 10器件的使用-7:FPGA片内RAM资源利用率思考
概述 项目使用的FPGA目标器件为Cyclone 10 GX系列规模最大一颗料,由于功能升级增加了功能模块更多,发现器件片内RAM不够使用了。为了探索片内RAM使用的利用率问题,从代码RTL级与编译软...
coyoo 2024-11-10 12:30
转知乎:幽灵般的人体成像技术-PET
幽灵般的人体成像技术——PET - 知乎...
coyoo 2024-11-09 10:26
AD9633默认情况下调试记录(二)
概述 所谓默认情况,即如器件手册中图2所标示那样。对应AD9633的调试,除了涉及到ADC自身,还需要兼顾前端驱动器,系统中AD9633驱动器使用了差分运算放大器,这里不在赘述,笔者已有相关文章论述。...
coyoo 2024-11-07 10:40
AD9633默认情况下调试记录(一)
AD9633在旁路SPI接口时如何在FPGA逻辑中确认字边界概述 AD9633与FPGA之间的LVDS接口初调试,ADC可以通过SPI接口对其内部寄存器进行各项配置。在SPI接口未调通之前,对LVDS...
coyoo 2024-11-02 12:18
比较器检测模拟脉冲说明(三)
概述 继续说明(二)探讨的比较器使用问题,然后延展到高速比较器选型问题。第四次迭代已经修正了比较器与后级或门器件的互联端接问题,然而比较器输出仍然在较低参考阈值电压设置时出现了问题。本文主要探索该问题...
我要评论
6
8
关闭 站长推荐上一条 /2 下一条