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
+關注
關注
1660文章
22412瀏覽量
636292 -
振蕩器
+關注
關注
28文章
4172瀏覽量
142881 -
TDC
+關注
關注
0文章
42瀏覽量
14909 -
時間數字轉換器
+關注
關注
0文章
6瀏覽量
1607
原文標題:高精度時間測量就像數碗里的豆子?聊聊FPGA中的TDC原理
文章出處:【微信號:智多晶,微信公眾號:智多晶】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
MCU如何配置固定TDC?
TDC1000-TDC7200EVM外接START和STOP信號時如何不受TDC1000的信號影響?
TDC1011 TDC1011 用于液位感測、流量感測的超聲波感測模擬前端 (AFE)
TDC7200 TDC7200 面向水、燃氣、熱量計量應用的時間數字轉換器
TDC1000 TDC1000:超聲波模擬前端
TDC7201 適用于飛行時間應用的 TDC7201 時間數字轉換器
使用FPGA實現TDC的設計報告資料說明
fpga實現tdc的設計開題報告
聊聊FPGA中的TDC原理
評論