01引言
你有没有想过,我们怎么才能精确地测量“时间”?
你可能会说,掐秒表不就完事了?那如果我们要测量的不是“秒”,而是皮秒(ps)——万亿分之一秒的时候,该怎么办?这可不是什么科幻情节,在雷达、激光测距、高能物理实验里,精确到皮秒级的时间测量,是家常便饭。想达到 20 ps 的测量精度,传统“脉冲计数法”(也就是掐秒表)需要 50 GHz 的时钟,如果非得这样的话,你得精通光学和应用物理学,好好读一读这篇《基于克尔光孤子晶体微梳的 49GHz 微波 Q 波段振荡器》,我们贴心的为你放出DOI号:doi: 10.1109/JLT.2019.2930466。
今天我们不谈高大上的物理学,只聊聊如何在 FPGA 中,用一串加法器和 D 触发器,“数清楚时间”——这就是时间数字转换器(TDC)的魅力。
02时间的多米诺骨牌
想象你有一串多米诺骨牌,推倒第一块,它就会一块接一块地倒下去。这个“倒下去”的速度,就是骨牌之间的“传播延迟”。FPGA里的加法器也有类似的“骨牌”——它叫进位链(Carry Chain)。在FPGA里,为了把两个数加起来又快又稳,芯片厂商把加法器的“进位”信号做成了一个专用的、超高速的“高速公路”。这条“高速公路”的延迟,可以短到 20ps!
我们设计一个特殊的加法器串。正常情况下,它在算 111...111 + 000...000,结果是 111...111,风平浪静。但就在某一瞬间,我们给它一个“开始”信号(Start),让它突然开始算 111...111 + 000...001。这个小小的“1”,就像推倒了第一块骨牌,一个“进位”信号会从最低位开始,一级一级地向高位“链式传递”。这个“进位”信号在链上传播的距离,就代表了从“开始”到“现在”过去了多少时间。
但问题来了:我们怎么“看到”这个传播到哪里了呢?答案是:“拍照”!我们在每一个加法器后面,都接一个“小相机”(D触发器),这个“小相机”的快门,由另一个时钟信号(我们叫它“采样时钟”或Strobe)控制。当“快门”一闪,所有“小相机”就同时拍下一张照片,记录下此刻进位信号传播到了哪一级。比如,照片显示前10级都变“0”了,那我们就知道,从“开始”到“拍照”这一刻,进位信号跑了10级。
关键问题来了:每一级进位链到底有多长?我们可以使用一个标准时间来预先测量,例如说看 1 us 内传播了多少级进位链,从而得到每一级的延迟。可现实是,每一级的延迟并不完全一样!FPGA 内部的进位链并不是一颗颗“标准骨牌”。有的块近(Slice 内),有的远(跨 Slice)。这怎么办?别慌,我们可以像摄影测量那样,对每个“骨牌段”单独标尺!
03码密度法:时间标尺的“数豆子法”
我们用了一个很巧妙的方法——码密度法,听起来高大上,其实就像……数豆子!我们让 Start 和 Strobe 信号变成两个不同频率的、不相关的时钟(clk_i 和 clk_d),拍照的频率要显著大于 Start 对应时钟的频率(可以理解为骨牌重新摆放好的操作频率),然后持续反复的摆好、推倒、再拍照。这样操作的目的是为了保证每次拍照的传播时间是随机的,也就是下图中的 t 是在 [0, Tc) 之间随机分布的,Tc 是 clk_d 的周期,也就是拍照的周期。
每次拍,骨牌只倒到某一块,这个“最后倒下的块”的编号是我们关心的。我们反复拍了很多很多次,记录每一块“成为最后倒下者”的次数。次数越多,说明这块延迟时间越长——就像谁碗里的豆子最多,谁“最拖沓”。
这样,我们就得到了整条进位链的延迟分布图,堪比给骨牌链打上精确刻度线!通过这种方法,我们就能精确地测量出每一级进位链的真实延迟时间,无论它是快是慢。然后,我们把这些数据存成一个“查找表”。
一旦我们有了这个“查找表”,TDC就真正“毕业”了,以后再要测量一个时间间隔,我们只需要:给一个“开始”信号,用“快门”拍一张照,得到进位信号传播的“级数”,最后查表把每一级的延迟加起来,就能得到精确的时间!
04总结一下这个妙招
1. 把 TDC 的 Start 和 Strobe 信号换成两个“频率不搭”的时钟;
2. 一次次拍照,记录骨牌(进位链)传播的终点;
3. 每个位置被“命中”的次数越多,说明它的延迟越长;
4. 统计出每一级进位单元的真实延迟,形成查找表,实现时间间隔的高精度换算。
Tip
(本文基于西安智多晶微电子《基于码密度法的TDC_DEMO用户指南》整理,想了解技术细节的朋友可以访问智多晶官网获取)
-
FPGA
+关注
关注
1648文章
22143浏览量
622582 -
振荡器
+关注
关注
28文章
4056浏览量
141388 -
TDC
+关注
关注
0文章
41浏览量
14047 -
时间数字转换器
+关注
关注
0文章
4浏览量
1569
原文标题:高精度时间测量就像数碗里的豆子?聊聊FPGA中的TDC原理
文章出处:【微信号:智多晶,微信公众号:智多晶】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
MCU如何配置固定TDC?
TDC1011 TDC1011 用于液位感测、流量感测的超声波感测模拟前端 (AFE)

TDC7200 TDC7200 面向水、燃气、热量计量应用的时间数字转换器

TDC1000 TDC1000:超声波模拟前端

TDC7201 适用于飞行时间应用的 TDC7201 时间数字转换器

使用FPGA实现TDC的设计报告资料说明

fpga实现tdc的设计开题报告

评论