李海濤 ,李斌康 ,2,田 耕 ,2,阮林波 ,2,呂宗瞡
(1.西北核技術(shù)研究所,陜西 西安 710024;2.強脈沖輻射環(huán)境模擬與效應(yīng)國家重點實驗室,陜西 西安 710024)
時間是物理學(xué)的7 個基本物理量之一[1],在物理學(xué)發(fā)展中起到重要作用,精確地獲取研究對象的時間信息具有重要意義。對時間信息的獲取可以由時間數(shù)字轉(zhuǎn)換器(Time to Digital Converter,TDC)來實現(xiàn),TDC 將時間信息轉(zhuǎn)換為二進制數(shù)字編碼,輸出到后端分析,得到具體時間信息。TDC 廣泛應(yīng)用在高能物理、衛(wèi)星授時、導(dǎo)航定位、數(shù)字通信、醫(yī)學(xué)成像等領(lǐng)域[2-5]。
TDC 有多種實現(xiàn)方法,包括直接計數(shù)法、時間間隔擴展法、時間幅度轉(zhuǎn)換法、多相位時鐘法、游標法、抽頭延遲鏈法、差分延遲鏈法等,各種方法既可以獨立使用,又可以配合使用,實現(xiàn)從低精度到高精度、從細時間到粗時間的時間測量。從技術(shù)上劃分,TDC 的實現(xiàn)可以分為模擬方法和數(shù)字方法;從平臺上劃分,TDC 可以在專用集成電路平臺 (Application Specific Integrated Circuit,ASIC)、FPGA 等平臺上實現(xiàn)。ASIC-TDC 的測量精度、穩(wěn)定性較高,一般都是針對某一特定場景應(yīng)用設(shè)計,不具有通用性和可擴展能力,并且開發(fā)ASIC 芯片的周期很長;FPGA-TDC 具有開發(fā)周期短、成本低、設(shè)計靈活等優(yōu)點,但是精度和穩(wěn)定性較差。隨著半導(dǎo)體制造工藝的進步,F(xiàn)PGA-TDC 的測量精度和穩(wěn)定性等同步提高,實現(xiàn)高精度FPGA-TDC 具有重要研究意義。
目前,實現(xiàn)高精度FPGA-TDC 的研究主要集中在幾個方面[2,6-9]:(1)FPGA-TDC 的實現(xiàn),使用FPGA 內(nèi)部資源實現(xiàn)高精度TDC,把時間信息轉(zhuǎn)換成二進制數(shù)字編碼;(2)TDC 碼寬的自動校準,選擇合適的校準方法,校準TDC碼寬,降低FPGA 制造工藝、工作電壓、工作溫度(Process、Voltage、Temperature,PVT)等對TDC 的影響;(3)針對TDC碼寬的不一致性,如何降低測量誤差,進一步提高測試精度;(4)動態(tài)監(jiān)測并實時校準TDC 碼寬,針對特殊要求(如航天等)進行冗余設(shè)計等。對FPGA-TDC 的研究主要集中在前述的第1、第3 方面,在不同F(xiàn)PGA 平臺上實現(xiàn)進位鏈TDC。受限于進位鏈的線性度,TDC 的線性較差,導(dǎo)致時間測量精度下降。通過多鏈單次測量求平均[1,8,10]或者單鏈多次測量求平均[11-12]的方法,可以提高TDC 的線性和時間測量精度。對TDC 的碼寬的動態(tài)監(jiān)測、冗余設(shè)計等,一般應(yīng)用在航空航天等特殊領(lǐng)域[2]。對于單鏈TDC 的碼寬校準和抽頭方式方面(前述第2 方面),缺少較為深入的研究。
本文利用Xilinx 公司28 nm 工藝的Kintex-7 FPGA內(nèi)部的進位鏈資源,通過進位鏈實現(xiàn)TDC,共使用128個進位鏈,細時間測量范圍大于5 ns。并給出碼寬校準的誤差計算公式,采用碼密度校準方法對TDC 進行逐位校準,測量得到4 抽頭模式、2 抽頭模式下的TDC 典型碼寬,給出不同抽頭模式的TDC 典型性能參數(shù)。
典型的進位鏈TDC 原理如圖1 所示,包含了脈沖信號調(diào)理、時鐘產(chǎn)生分發(fā)設(shè)計、進位鏈設(shè)計、溫度計碼轉(zhuǎn)二進制編碼編碼電路設(shè)計、自動校準設(shè)計等。脈沖信號(待測信號或隨機校準信號)經(jīng)過脈沖信號調(diào)理單元稱為待測信號,從下方進入到進位鏈中;待測信號一般小于一個TDC 主時鐘周期,確保級聯(lián)延遲鏈輸出為溫度計碼;溫度計碼經(jīng)過2 拍寄存以避免亞穩(wěn)態(tài)傳播,進入到編碼部分,采用改進的折半查找法完成溫度計碼的編碼,輸出對應(yīng)的二進制碼;采用碼密度校準方法建立查找表,將二進制碼對應(yīng)的查找表的結(jié)果輸出到后端處理,便可獲得高精度的時間信息。接下來結(jié)合FPGA 的具體邏輯資源,介紹進位鏈TDC 的實現(xiàn)。
圖1 進位鏈TDC 典型原理
基于Kintex-7 芯片內(nèi)部的進位鏈資源實現(xiàn)TDC,Kintex-7 系列FPGA 的基本邏輯單元為可配置邏輯塊(Configurable Logic Block,CLB),每個CLB 中包含兩個Slice 結(jié)構(gòu),每個Slice 內(nèi)部進位鏈結(jié)構(gòu)如圖2 所示,設(shè)計時可直接調(diào)用Xilinx 提供的原語例化進位鏈。hit 信號從第一個進位鏈的CYINIT 端口輸入[13],輸入的hit 脈沖經(jīng)過脈沖信號調(diào)理之后,待測信號沿著進位鏈向上傳播,CIN 和COUT 用來連接上下相鄰的進位鏈形成進位鏈,其附近的4 個寄存器可分別寄存O0~O3 或CO0~CO3抽頭的4 個輸出,進位鏈的綜合版圖如圖3 所示,可以采用多種抽頭方式引出數(shù)據(jù)并寄存,不同抽頭方式對應(yīng)的時間分辨率不同,包括1 抽頭、2 抽頭、4 抽頭等,圖中顯示為2 抽頭方式,抽頭分別為CO0、CO3。
圖2 slice 內(nèi)部典型進位鏈示意
圖3 進位鏈綜合后版圖(跨時鐘域)
進位鏈TDC 中觸發(fā)器陣列寄存的數(shù)據(jù)是溫度計碼,當沒有脈沖信號時,進位鏈中所有的抽頭輸出均為0;當有脈沖信號進入進位鏈時,進位鏈輸出信號將從最低級開始逐級發(fā)生0-1 跳變,待測信號經(jīng)過的進位鏈抽頭將輸出數(shù)字編碼1,沒有經(jīng)過的進位鏈抽頭將輸出數(shù)字編碼0,可以根據(jù)進位鏈抽頭輸出的1 的個數(shù)來判斷待測信號在進位鏈中的延時[14]。當抽頭較多時,溫度計碼位數(shù)很多,會占用大量存儲資源,且不便于下一步的數(shù)據(jù)運算處理,故常常需要將溫度計碼轉(zhuǎn)換為二進制碼。
有多種方法可以把溫度計碼轉(zhuǎn)換成二進制碼,如順序查找法、折半查找法、累加查找法等[11-12,15-16],轉(zhuǎn)換的核心思想都是通過查找溫度計碼中1-0(0-1)跳變的位置,達到統(tǒng)計溫度計碼中1 或0 的個數(shù)的目的。根據(jù)文獻[1]的研究結(jié)果,受到進位鏈固有的超前進位特性影響,抽頭數(shù)據(jù)的溫度計碼可能會發(fā)生冒泡(bubble)現(xiàn)象,即是抽頭所在的物理位置和時間的對應(yīng)關(guān)系并非嚴格遞增,如對同一個延時的溫度計碼,沒有冒泡的溫度計碼是“0000…1111…1111”,冒泡的溫度計碼是“0000…1101…1111”。在編碼時充分考慮了冒泡的問題,使用改進的折半查找法進行編碼,編碼時采用對最后16 bit 溫度計碼直接數(shù)1 的方法解決溫度計碼的冒泡問題,采用pipeline 的方式進行逐級編碼以減小TDC 的死時間,改進的折半查找法具有效率高、資源占用少等優(yōu)點。
如前述,進位鏈TDC 受PVT 等因素的影響[17-18],其包含的延遲單元延時會發(fā)生變化,每次使用之前需要進行校準,建立新的查找表,TDC 的校準方法主要有平均校準和逐位(bin-by-bin)校準兩種方法。平均校準的優(yōu)點是可以對TDC 進行快速校準,但是所得到的只是所有延遲單元抽頭的平均延遲時間,無法對TDC 中每個延遲單元進行校準,會導(dǎo)致較大的測量誤差;碼密度法可以對進位鏈中每一個延遲單元抽頭進行逐位校準,通過碼密度測試可以精確標定每個延遲單元的延時。
碼密度校準方法采用和TDC 主時鐘不相干的隨機信號,以確保在多次測量之中,隨機信號近似均勻地落在TDC 的延時路徑上。研究表明[1],為了盡可能降低延遲單元的時間誤差,需要增加校準次數(shù),增加校準次就會增加校準時間、增加資源占用量,使用時需要根據(jù)項目指標要求折中考慮。校準誤差和校準次數(shù)之間的關(guān)系式如式(1)所示:式中,N 為校準次數(shù);k 為級聯(lián)鏈抽頭數(shù)目;T 為參考時鐘周期,T=5 ns;σi為單個延遲單元的標準差;στ為平最大標準差。根據(jù)式(1)推導(dǎo)可知:本文實現(xiàn)的碼密度校準次數(shù)為106,對應(yīng)的TDC 延遲時間的最大標準差小于5 ps。
在Kintex-7 FPGA 平臺上,通過進位鏈實現(xiàn)了TDC,使用128 個進位鏈,細時間測量范圍大于5 ns,5 ns 為TDC 主時鐘周期。進位鏈延時大于5 ns,這是因為:(1)可以保證TDC 輸出為溫度計碼,不會出現(xiàn)全1 碼;(2)進位鏈自身的延時受到PVT 等因素的影響,本身延時就有變化,5 ns 延遲鏈對應(yīng)的抽頭數(shù)目并不是一個固定值196(這也正是每次上電都需要自動校準TDC 延時的原因之一);(3)進位鏈數(shù)目為2 的冪指數(shù),方便后續(xù)的編碼解碼工作等。
從圖2 中可以看到,每個進位鏈最多可以輸出4 個抽頭,可以從CO0~CO3、O0~O3 共8 個抽頭中的抽出任意4 個,一般采用CO0~CO3 共4 個抽頭,輸出編碼為溫度計碼,可以達到較高的時間分辨,4 抽頭方式的TDC的典型碼寬值如圖4 所示,(1)4 抽頭方式的碼寬差別過大,非線性較差;(2)根據(jù)文獻[1]、[3]、[5]的研究成果,使用該抽頭方式,受到進位鏈固有的超前進位特性影響,溫度計碼會發(fā)生冒泡現(xiàn)象,即在編碼時需要充分考慮冒泡問題,增加了編碼電路的復(fù)雜度,增加編碼時間;(3)抽頭過多,也會增加編碼部分的資源占有量??梢钥吹剑? 抽頭方式下,一個進位鏈總的典型延時約53 ps,后續(xù)的2 個抽頭方式下,一個進位鏈總的典型延時平均約50 ps(如圖5 所示),兩者之間的差別是統(tǒng)計誤差導(dǎo)致的,延時誤差值(3 ps)也在文中提到的平均校準誤差值(5 ps)分布之內(nèi)。
圖4 進位鏈4 抽頭典型碼寬
利用布局布線約束,研究1 個進位鏈只引出2 個抽頭的方式(CO1、CO3),即“1tap+3tap”,如圖2 所示的結(jié)構(gòu)1(粗虛線框),第1 個抽頭的延遲單元包括asymmetry factor+2MUXCY,第2 個抽頭的延遲單元包括2MUXCY。這種2抽頭方式的TDC 的非線性要強于4 抽頭方式的TDC,其碼寬如圖5 所示,其非線性如圖6、圖7 所示。
圖5 兩種2 抽頭方式的碼寬
圖6 兩種2 抽頭方式的微分非線性
圖7 兩種2 抽頭方式的積分非線性
為了提高TDC 的線性,本文還研究了另外一種2 抽頭的引出方式(CO0、CO3),即“0tap+3tap”,如圖2 所示結(jié)構(gòu)2(實線框),第1 個抽頭的延遲單元包括asymmetry factor+MUXCY,第2 個抽頭的延遲單元包括3MUXCY。這種抽頭方式的TDC 的非線性較以上兩種抽頭方式的TDC 都好,其碼寬如圖5 所示,其非線性如圖6、圖7 所示??梢钥吹?,“0tap+3tap”的2 抽頭方式的碼寬更均勻,非線性也更好一些,時間分辨率約25 ps(對應(yīng)最低有效位(Least Significant Bit,LSB)),微分非線性范圍為-0.84~3.1 LSB,積分非線性范圍為-5.2~2.2 LSB。
在圖5~圖7 中可以看到,每隔100 個抽頭就會有兩個超寬碼(ultra-wide bin),平均的碼寬約為25 ps,超寬碼約為110 ps。這是因為FPGA 上每個時鐘域中最多含有50 個進位鏈結(jié)構(gòu),每個進位鏈引出2 個抽頭,共100個抽頭,之后再進位鏈就需要跨時鐘域,超寬碼就是跨時鐘域時產(chǎn)生的,如圖3 虛線框所示,本文實現(xiàn)的TDC共使用128 個進位鏈,上下跨越了3 個時鐘域,虛線框即是兩個時鐘域的交界處,兩個時鐘域交界處共產(chǎn)生了4 個超寬碼,分別是94、95、193、194。
本文在Kintex-7 FPGA 上,通過進位鏈實現(xiàn)TDC,共使用128 個進位鏈,細時間測量范圍大于5 ns。給出TDC碼寬校準的誤差計算公式,校準次數(shù)106,采用碼密度校準方法對TDC 碼寬進行逐位校準;研究進位鏈的兩種抽頭方式(“0tap+3tap”“1tap+3tap”),并測量其碼寬、非線性等。在滿足測量指標要求的情況,推薦使用“0tap+3tap”的2 抽頭方式,該抽頭方式的TDC 可以獲得較優(yōu)的非線性和較高的時間測量精度,時間分辨率約為25 ps(對應(yīng)LSB),微分非線性范圍為-0.84~3.1 LSB,積分非線性范圍為-5.2~2.2 LSB。研究發(fā)現(xiàn),進位鏈TDC 一旦跨時鐘域,就不可避免引入超寬碼(ultra-wide bin)的問題,這會降低TDC 的時間測量精度,可以采用多種方法降低這種影響,包括多鏈單次平均測量[1,8,10]、單鏈多次平均測量(wave union A、wave union B、Ripple method)[11-12]等方法。