陳 龍 劉淑芬 姜 宏 葉有時 趙云富
北京控制工程研究所,北京100190
在分布式實時系統(tǒng)中,時鐘同步是進行數(shù)據(jù)調(diào)度和任務(wù)執(zhí)行的關(guān)鍵技術(shù)之一,它提供了確定事件發(fā)生時間先后順序的機制,保證了節(jié)點發(fā)送和接收消息等在時間邏輯上的正確性[1]。在時間確定性網(wǎng)絡(luò)中,通過使用時鐘同步協(xié)議等策略保證高精度的時鐘同步。NTP協(xié)議作為最早提出的時鐘同步協(xié)議,通過UTC時間報文校正主機時間,同步精度可達到毫秒級[2]。在TTE(時間觸發(fā)以太網(wǎng))中使用IEEE 1588時鐘同步協(xié)議,使用時間戳進行透明時鐘傳輸,實現(xiàn)亞微秒級的時鐘同步。Yin Hongtao等通過FPGA實現(xiàn)了1588時鐘同步,同步精度達到了50ns[3]。
SpaceWire總線協(xié)議專門針對航天應(yīng)用而設(shè)計,具有高速(最高傳輸速率為400Mbps)、可靠、低功耗等諸多優(yōu)點[4],被成功應(yīng)用于“Mars Express”火星探測器、“Rosetta Spacecraft”彗星探測項目和“Cryosat”地球環(huán)境遙感衛(wèi)星等諸多項目中[5]。北京控制工程研究所對SpaceWire ECSS-E-50-12C標(biāo)準(zhǔn)進行了改進,結(jié)合光纖重量輕、寬帶寬、抗干擾能力強的特點,研制了SpaceWire光纖總線,進一步提高了總線速率[6],實現(xiàn)了2Gbps的高速傳輸。
總線速率的提升,對時鐘同步提出了更高要求。改進前SpaceWire ECSS-E-50-12C標(biāo)準(zhǔn)規(guī)定通過Time-Code(時間碼)分發(fā)的方法保證節(jié)點的時鐘計數(shù)一致,同步精度很難達到10μs[4]。改進后,在SpaceWire光纖總線中,吉比特每秒的傳輸速率下,消息的傳輸時間縮短到微秒級,消息間隔進一步縮短,因此需要更高精度的時鐘同步提供保障。
SpaceWire ECSS-E-50-12C標(biāo)準(zhǔn)中使用了基于Time-Code(時間碼)廣播的主從式時間同步。在協(xié)議中規(guī)定了唯一的主節(jié)點,其他節(jié)點作為從節(jié)點。主節(jié)點的時鐘為參考時鐘,并通過網(wǎng)絡(luò)廣播包含6bits時間計數(shù)的Time-Code讓從節(jié)點與主節(jié)點計數(shù)保持一致來實現(xiàn)時間同步[4]。Time-Code如下圖:
圖1 Time-code消息
ESC為時間消息幀頭,1、0為時間碼標(biāo)志,T0到T7為8比特時間計數(shù),其中6比特為計數(shù)值,2比特為預(yù)留位。當(dāng)從節(jié)點接收到Time-Code時,首先將計數(shù)值取出,然后與本地計數(shù)器值比較,若本地計數(shù)值比接收的計數(shù)值少1,則更新本地計數(shù)值并接收處理后續(xù)消息,否則只更新本地計數(shù)值并返回錯誤信號。
1)計時精度不高且計時長度短。從節(jié)點的時間計數(shù)值完全依賴Time-Code信號,計時精度受Time-Code的同步間隙限制,間隙越短精度越高。在實際過程中同步間隙不可能太短[9],因此計時精度低。6位時間碼最大的計數(shù)值為64,超過64后需要循環(huán)計數(shù),計時長度太短。在光纖總線系統(tǒng)中,短消息的傳輸在微秒內(nèi)完成,消息間隔小,原協(xié)議規(guī)定的時間計數(shù)遠遠不能滿足計時精度和長度要求。需要提高計數(shù)器位數(shù),并延長計時長度;
2)延時誤差不可控。原協(xié)議規(guī)定的時鐘同步方式,傳輸延時受節(jié)點數(shù)量和鏈路傳輸速率影響[7],且通過6位的時間碼無法計算延時時間。另外由于忽略了消息處理延時的抖動,導(dǎo)致延時誤差不可控。在SpaceWire光纖總線系統(tǒng)中除了根據(jù)光纖總線節(jié)點特性設(shè)計時間戳來計算延時誤差,同時需要考慮延時計算策略來控制延時抖動;
3)頻率偏差無法補償。在使用本地時鐘計數(shù)的過程中,不同節(jié)點間時鐘頻率大小可能不同,且物理時鐘晶振的穩(wěn)定性受環(huán)境溫度以及工作時長的影響,時鐘頻率會產(chǎn)生漂移。在一個同步周期內(nèi),時鐘頻率偏差的積累會對同步精度造成較大影響。因此在提高晶振性能的同時,需要通過有效的方式來消除時鐘頻率偏差的影響。使用固定時鐘頻率調(diào)整的方式受經(jīng)驗限制,且無法實時動態(tài)調(diào)整,考慮設(shè)計動態(tài)的時鐘頻率補償方法。
在高速Spacewire光纖總線系統(tǒng)中,針對以上問題,對原協(xié)議規(guī)定的時鐘同步方式進行了改進:1)采用節(jié)點的本地時鐘設(shè)計了32位高精度的時鐘計數(shù)機制,提高時鐘計數(shù)的精度和長度;2)參考IEEE1588協(xié)議,在時間消息傳輸過程中用打時間戳的方式計算時鐘延時進行延時補償,并通過計算平均延時時間來減少延時抖動對同步精度的影響;3)增加頻率偏差補償,通過對時鐘頻率偏差的計算來動態(tài)調(diào)整時鐘計數(shù)。改進的時鐘同步方式如圖2所示:
圖2 時鐘同步改進原理圖
為了滿足時鐘計數(shù)的精度和長度要求,改進了原協(xié)議中從節(jié)點使用6位計數(shù)器的時鐘計數(shù)方式,將主節(jié)點的參考時鐘和從節(jié)點本地時鐘設(shè)為32位,并通過設(shè)置標(biāo)識來實現(xiàn)進位計算。32位時鐘計數(shù)寄存器如圖3所示:
圖3 32位時鐘計數(shù)
前2位是標(biāo)識位,“00”表示時鐘計數(shù),“01”表示進位計數(shù)。當(dāng)標(biāo)識位是“00”時,后30位表示時鐘計數(shù)值,每當(dāng)時鐘輸入跳變一次,產(chǎn)生一個時鐘節(jié)拍tick,時鐘計數(shù)加1;當(dāng)標(biāo)識位是“01”時,后30位表示進位計數(shù),每當(dāng)時鐘計數(shù)記滿時,進位計數(shù)加1,同時時鐘計數(shù)值清零。如果通過數(shù)字時鐘計數(shù)表示當(dāng)前參考時鐘值,則參考時鐘Tclock0(t)等于Tick0(t),為時鐘計數(shù)N00(t)和進位計數(shù)N01(t)之和。
Tclock0(t)=Tick0(t)=N00(t)+N01(t)*Ncount
(1)
其中,Ncount為時鐘計數(shù)最大值,即230。通過這種方式能夠產(chǎn)生最大精度的時鐘值,同時有效增加計時長度。例如,當(dāng)時鐘頻率為125MHz時,時鐘計數(shù)精度為8ns,當(dāng)進位計數(shù)全部記滿時,能夠記的最大位數(shù)為260,通過計算能夠?qū)崿F(xiàn)最大的計時長度為8.59*109s。
在主從式時間同步過程中,延時通過在時間消息中加蓋時間戳來計算。平均延時通過請求-響應(yīng)的方式計算,可以減少消息處理過程中延時抖動的影響。如圖4所示:
圖4 時鐘延時計算
在t0時刻,當(dāng)主節(jié)點發(fā)送時間消息時,產(chǎn)生一個使能信號,將此時的時鐘值Tclock0(t0)存入時間戳寄存器;在t0′時刻,從節(jié)點接收到信號,并通過硬件電路進行時間消息判斷,在t0″時刻,解析完成,產(chǎn)生使能信號,將此時的時鐘值Tclock1(t0″)存入時間戳寄存器。類似的方式,將從節(jié)點響應(yīng)消息的發(fā)送時刻Tclock1(t1″),主節(jié)點接收時刻Tclock0(t1)通過時間戳的使能信號存入時間戳寄存器。由于解析時間消息造成的延時抖動Latency0′和Latency1′通過時間差值來消除,因此計算時鐘延時為:
(2)
在t時刻的時鐘延時均值為Tlatency(t)
(3)
其中,n為t時刻前,寄存器中Tlatency的個數(shù)。
由于操作系統(tǒng)和協(xié)議棧的影響,時間戳標(biāo)記越靠近硬件單元精度越高。在SpaceWire光纖總線系統(tǒng)中,網(wǎng)絡(luò)接口主要由光電/電光轉(zhuǎn)換模塊(光模塊)組成,因為光信號不能直接用于判斷消息內(nèi)容,所以在硬件電路中設(shè)計時間消息檢測模塊來使能時間戳信號。
為了應(yīng)對時鐘頻率偏差的動態(tài)變化,提出了使用時鐘計數(shù)寄存器來計算頻率偏差值和動態(tài)調(diào)整計數(shù)的方法。時鐘頻率偏差計算如圖5:
圖5 時鐘頻率偏差計算
本地時鐘頻率與參考時鐘頻率的關(guān)系可以通過固定時間段內(nèi),產(chǎn)生時鐘節(jié)拍的比值來衡量:
(4)
其中,fclock0(t1)和fclock1(t1))為t0到t1時刻參考時鐘和本地時鐘的時鐘頻率,ΔN和Δn′為t0到t1時刻參考時鐘和本地時鐘的時鐘計數(shù),由公式(1)知:
ΔN=Tick0(t1)-Tick0(t0)
(5)
Δn′=Tick1(t1′)-Tick1(t0′)+
latency1-latency0
(6)
latency0和latency1為t0時刻和t1時刻時鐘消息從主節(jié)點到從節(jié)點的延時,假設(shè)同一路徑的延時差值不大,則差值約為0。其中Tick0(t0)、Tick0(t1)、Tick1(t0′)和Tick1(t1′)的值,通過時間戳的使能信號存入時鐘計數(shù)寄存器。本地時鐘的時
鐘調(diào)整頻率fadjust(tn)為:
(7)
從節(jié)點在tn時刻收到的外部時鐘值Texternal(tn),由式(3)得平均時延Tlatency(tn),通過對時鐘信號進行延時補償即為本時刻的參考時鐘值Tsyn(tn):
Tsyn(tn)=Texternal(tn)+Tlatency(tn)
(8)
由以上計算的參考時鐘值對本地時鐘進行相位補償,同時由計算的時鐘調(diào)整頻率對本地時鐘計數(shù)進行動態(tài)修正,得到此時的本地時鐘值Tclock1(t):
Tclock1(t)=Tick1(t)+Tsyn(tn)-Tclock1(tn)+
(Tick0(t)-Tick0(tn))*fadjust(tn)
(9)
本地時鐘與參考時鐘的時鐘偏差為Toffset(t):
Toffect(t)=Tclock0(t)-Tclock1(t)
(10)
max(Toffect(t))即為時鐘同步精度。
為了測試改進前后的時鐘同步效果,通過Modelsim建立了時鐘同步模型,并進行了仿真驗證。
圖6為含有主節(jié)點和從節(jié)點的SpaceWire光纖總線系統(tǒng)時鐘同步模塊示意圖。
圖6 時鐘同步模塊示意圖
Master_en為主從節(jié)點標(biāo)志信號,值為1時,節(jié)點為主節(jié)點, 系統(tǒng)中有且只有一個主節(jié)點;為0時,節(jié)點為從節(jié)點。Tn_t為發(fā)送時刻節(jié)點的時鐘值,即式(9)中的Tclockn(t);Tn_oi為時間戳寄存器計算的時鐘差值,即式(2)中Tclockn(t1)-Tclockn(t0);Tn_oo為時鐘計數(shù)寄存器計算的時鐘節(jié)拍差值,即式(5)中的ΔN。Time_in_stamp和Time_out_stamp為時間戳信號,通過網(wǎng)絡(luò)接口中的時間消息判斷單元使能。在消息發(fā)送和接收過程中都加入了最大80ns的隨機傳輸延時以及8ns的隨機延時抖動。
時間消息的格式為:“地址”(8bits)+“時間消息標(biāo)識”(8bits)+“Tn_t”(64bits)+“Tn_oi”(32bits)+“Tn_oo”(32bits)。
仿真驗證中,首先測試了使用SpaceWire ECSS-E-50-12C標(biāo)準(zhǔn)規(guī)定的時鐘同步方法,主節(jié)點和從節(jié)點基于Time-Code分發(fā)進行時間計數(shù)同步。然后對時鐘同步方式進行改進,測試了主從節(jié)點在不同時鐘頻率情況下,使用時鐘延時調(diào)整模塊的結(jié)果。最后加入動態(tài)時鐘頻率調(diào)整模塊后,測試了時鐘同步精度。
在光纖總線系統(tǒng)中,主節(jié)點的時鐘頻率設(shè)為125MHz,調(diào)整同步間隙為10ms,測試原協(xié)議使用Time-Code分發(fā)結(jié)果如圖7:
圖7 原協(xié)議時鐘同步仿真結(jié)果
時鐘同步精度通過直接比較一段時間內(nèi)時鐘計數(shù)差值來衡量,測得最大時鐘計數(shù)偏差為1,計算的同步精度約為10ms。其計時精度為10ms,且最大計數(shù)為64,所以計時長度只有640ms。
在對時鐘同步的改進中,用32位的時鐘計數(shù)表示當(dāng)前時間,使最小的計時精度達到8ns。為了模擬子節(jié)點的時鐘偏差,從節(jié)點中的時鐘計數(shù)采用100MHz的本地時鐘,與主節(jié)點時鐘頻率相差25MHz。同樣在10ms的同步間隙下進行時鐘同步測試。
圖8 時鐘延時調(diào)整的時鐘同步仿真結(jié)果
加入時鐘延時調(diào)整后,時鐘同步效果如圖8,通過時間戳計算得平均延時為12個時鐘計數(shù),即96ns,同步后時鐘延時為-2,即-16ns。最大計數(shù)偏差24997,時鐘同步精度約為199976ns。
在延時補償?shù)幕A(chǔ)上繼續(xù)調(diào)整時鐘頻率進行動態(tài)時鐘計數(shù)修正,時鐘同步效果如圖:
圖9 加入動態(tài)頻率調(diào)整的時鐘同步仿真結(jié)果
在3個時鐘同步間隙完成了25MHz時鐘頻率偏差的調(diào)整。在第一個時鐘同步間隙,時鐘頻率修正存在誤差,時鐘計數(shù)差值隨時間增大,最大差值為20;第二個同步間隙時鐘頻率偏差被進一步調(diào)整,最大時鐘計數(shù)差值穩(wěn)定為10;第三個同步間隙開始,時鐘計數(shù)偏差幾乎不變,此時頻率修正達到穩(wěn)定。時鐘計數(shù)偏差絕對值最大值為3,同步精度約為24ns。
最后統(tǒng)計了在不同時鐘同步間隙下,3種情況的時鐘同步結(jié)果,如表1。
表1 不同改進方法下時鐘同步參數(shù)測試結(jié)果
由統(tǒng)計結(jié)果可以看出,原協(xié)議的時鐘同步精度與時鐘同步間隙有關(guān),時鐘同步間隙越短,時鐘同步精度越高,在實際應(yīng)用中最高能達到微秒級。改進后的時鐘同步方法能夠明顯改善時鐘同步精度,當(dāng)加入時鐘延時調(diào)整,使用時間戳寄存器計算平均延時后,時鐘延時被降低到約16ns。但是只進行時鐘延時補償,同步精度依然受同步間隙影響較大,需要進行更加精細(xì)的調(diào)整。加入時鐘頻率調(diào)整后,使用時鐘計數(shù)寄存器進行動態(tài)時鐘計數(shù)修正,時鐘同步效果明顯被提升,時鐘同步精度達到納秒級。
仿真結(jié)果表明,改進后的時鐘同步方法能夠有效解決SpaceWire ECSS-E-50-12C標(biāo)準(zhǔn)中time-code時間分發(fā)的同步精度問題。在SpaceWire光纖總線中,改進后的時鐘同步使用了本地時鐘進行32位的時鐘計數(shù),計時精度提高到了8ns,計時長度提升到8.59*109s。采用物理單元打時間戳計算平均時鐘延時,可以準(zhǔn)確計算傳輸延時,降低延時抖動的影響,延時誤差約為16ns。采用時鐘計數(shù)寄存器計算時鐘頻率偏差,通過動態(tài)修正時鐘計數(shù)補償時鐘頻率偏差,進一步提高時鐘同步精度達到了24ns,能夠滿足高速SpaceWire光纖總線時鐘同步的需求。