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