,,,
(清華大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,北京 100084)
現(xiàn)在航空電子實(shí)時(shí)關(guān)鍵系統(tǒng)的架構(gòu)核心是綜合模塊化航空電子系統(tǒng),未來航空電子系統(tǒng)將向分布式綜合模塊化航空電子系統(tǒng)發(fā)展[1],需要大量實(shí)時(shí)關(guān)鍵數(shù)據(jù)需要傳輸。在分布式實(shí)時(shí)關(guān)鍵系統(tǒng)中有大量的節(jié)點(diǎn),且通過網(wǎng)絡(luò)通信,實(shí)時(shí)數(shù)據(jù)傳輸?shù)目煽啃院脱訒r(shí)直接影響系統(tǒng)的性能。由于分布式的規(guī)模放大了網(wǎng)絡(luò)通信的不確定性[2],所以使網(wǎng)絡(luò)保持一個(gè)高效穩(wěn)定的狀態(tài)是提高系統(tǒng)性能的有效途徑。針對(duì)這個(gè)問題,國(guó)外現(xiàn)在提出了AS6802[3]時(shí)間觸發(fā)以太網(wǎng)(Time triggered Ethernet,TTE)標(biāo)準(zhǔn)以保證網(wǎng)絡(luò)的高通信速率、高實(shí)時(shí)性、高可靠性。時(shí)間觸發(fā)以太網(wǎng)是在以太網(wǎng)的基礎(chǔ)上進(jìn)行實(shí)時(shí)適應(yīng)性改造,在同一網(wǎng)絡(luò)上無縫連接原有的不同類型的應(yīng)用業(yè)務(wù)。同時(shí),時(shí)間觸發(fā)以太網(wǎng)是介質(zhì)訪問控制(Media Access Control,MAC)層服務(wù)質(zhì)量的增強(qiáng),對(duì)于使用異步標(biāo)準(zhǔn)以太網(wǎng)的應(yīng)用是透明的,在分布式應(yīng)用間提供確定的,同步的,無擁塞的通信并且不被任何異步的標(biāo)準(zhǔn)以太網(wǎng)流量負(fù)載影響,是現(xiàn)在國(guó)際上最新的一項(xiàng)新型總線技術(shù)。國(guó)外的TTTech公司已經(jīng)有相應(yīng)的開發(fā)產(chǎn)品[4],已有成功的應(yīng)用案例[5]如美國(guó)的Orion 載人飛船采用基于1000BASE-CX 物理層和雙冗余配置的TTE網(wǎng)絡(luò)綜合互連方案。國(guó)內(nèi)現(xiàn)主要是預(yù)研和開發(fā)階段。
TTE系統(tǒng)主要包括時(shí)間同步算法,TTE交換機(jī)和TTE網(wǎng)絡(luò)控制器等關(guān)鍵部分。針對(duì)嵌入式環(huán)境中單交換機(jī)網(wǎng)絡(luò),設(shè)計(jì)了一種采用FPGA來實(shí)現(xiàn)混合流量實(shí)時(shí)交換的方案并進(jìn)行了物理實(shí)驗(yàn)測(cè)試。文章主要分為五個(gè)部分。第一部分介紹TTE系統(tǒng)整體概況;第二部分介紹TTE交換機(jī)設(shè)計(jì)的整體結(jié)構(gòu);第三部分介紹實(shí)現(xiàn)同步的方法;第四部分進(jìn)行試驗(yàn)測(cè)量驗(yàn)證;第五部分進(jìn)行總結(jié)和問題分析。
整個(gè)時(shí)間觸發(fā)以太網(wǎng)系統(tǒng)如圖1所示。
圖1 時(shí)間觸發(fā)以太網(wǎng)示意圖
整個(gè)網(wǎng)絡(luò)中時(shí)間觸發(fā)以太網(wǎng)交換機(jī)是核心關(guān)鍵部件,TTE交換機(jī)與TTE交換機(jī)之間可以單鏈路或雙鏈路冗余互聯(lián);同時(shí)還包括了TTE網(wǎng)絡(luò)控制器、標(biāo)準(zhǔn)以太網(wǎng)控制器和終端,終端可以接入交換機(jī)上不同端口做備份。針對(duì)單交換機(jī)與各終端星型互聯(lián)的情況下,設(shè)計(jì)的TTE交換機(jī)簡(jiǎn)易結(jié)構(gòu)框圖如圖2所示。
圖2 交換機(jī)基礎(chǔ)結(jié)構(gòu)示意圖
一個(gè)時(shí)間觸發(fā)交換機(jī)主要分為三層,分別是時(shí)間同步層、時(shí)間觸發(fā)(Time-Triggered,TT)交換層、事件觸發(fā)(Event-Triggered,ET)交換層[6]。應(yīng)具有以下功能[7]:
1)支持時(shí)間同步協(xié)議。
2)區(qū)分TT數(shù)據(jù)幀和ET數(shù)據(jù)幀,并實(shí)現(xiàn)TT數(shù)據(jù)幀對(duì)ET數(shù)據(jù)幀的搶占。
3)TT數(shù)據(jù)幀的無存儲(chǔ)轉(zhuǎn)發(fā)以及對(duì)ET數(shù)據(jù)幀按著標(biāo)準(zhǔn)以太網(wǎng)要求的轉(zhuǎn)發(fā)。
4)實(shí)現(xiàn)對(duì)被搶占的ET數(shù)據(jù)幀的重傳。
時(shí)間同步層所發(fā)送的時(shí)間同步協(xié)議幀采用標(biāo)準(zhǔn)的以太網(wǎng)幀格式,在類型字段中定義一個(gè)特定的值(在研發(fā)實(shí)驗(yàn)中定義的測(cè)試值為16位16進(jìn)制數(shù)0x0 889)供TTE網(wǎng)絡(luò)控制器解析。與定義時(shí)間同步協(xié)議幀一樣,在標(biāo)準(zhǔn)以太網(wǎng)幀中類型字段定義另一個(gè)特定值(在研發(fā)實(shí)驗(yàn)中定義的測(cè)試值為16位16進(jìn)制數(shù)0x0 888)表示此數(shù)據(jù)幀是TT數(shù)據(jù),這樣一來通過對(duì)接收到的數(shù)據(jù)幀的類型字段進(jìn)行判斷就能區(qū)別出這是時(shí)間同步幀,還是TT數(shù)據(jù)幀,亦或是ET數(shù)據(jù)幀。
交換機(jī)各功能模塊如圖3所示。
圖3 交換機(jī)功能模塊劃分
此設(shè)計(jì)主要由4個(gè)端口和中央的調(diào)度模塊組成。其中每個(gè)端口完成解析數(shù)據(jù)包、查詢目的MAC以及收發(fā)功能,每接收到一個(gè)ET數(shù)據(jù)幀,就用一個(gè)32位接收描述符與其相匹配,對(duì)于接收到的TT數(shù)據(jù)幀,不占用描述符。同時(shí)將時(shí)間同步協(xié)議幀的發(fā)送功能集成到了端口中,并未集成到調(diào)度模塊,降低調(diào)度模塊設(shè)計(jì)的復(fù)雜度。
狀態(tài)機(jī)如圖4所示。
圖4 接收模塊狀態(tài)機(jī)
其中主要分為5個(gè)接收狀態(tài)。初始復(fù)位之后先進(jìn)入不接收狀態(tài),沒有接收使能時(shí)自然過渡到空閑狀態(tài)。
1)空閑狀態(tài):當(dāng)沒有接收使能時(shí)或者接收使能信號(hào)消失時(shí)要回到空閑狀態(tài),或者在此階段接收到了接收使能信號(hào)但是幀間距不符合要求就要進(jìn)入不接收狀態(tài);
2)等待前導(dǎo)碼狀態(tài):當(dāng)收到了接收使能信號(hào),但是到來的數(shù)據(jù)不是前導(dǎo)碼8位16進(jìn)制數(shù)0x55時(shí),停留在此狀態(tài),若是收到了前導(dǎo)碼8位16進(jìn)制數(shù)0x55則進(jìn)入等待定界符狀態(tài);
3)等待定界狀態(tài):在收到了前導(dǎo)碼8位16進(jìn)制數(shù)0x55后,等待定界符8位16進(jìn)制數(shù)0xd5的到來,當(dāng)定界符到來時(shí),且滿足幀間距要求,就進(jìn)入接收數(shù)據(jù)狀態(tài);
4)接收數(shù)據(jù)狀態(tài):在這個(gè)階段要進(jìn)行數(shù)據(jù)的接收,數(shù)據(jù)接收完后回到空閑狀態(tài),若是在接收階段出現(xiàn)了問題就進(jìn)入不接收狀態(tài)。
5)不接收狀態(tài):當(dāng)有接收使能時(shí),出現(xiàn)了錯(cuò)誤的情況就一直保持在不接收狀態(tài),直到接收使能消失時(shí)才回到空閑狀態(tài)。
調(diào)度模塊中狀態(tài)機(jī)如圖5所示。
圖5 調(diào)度模塊狀態(tài)機(jī)
2.2.1 對(duì)于ET數(shù)據(jù)流量
調(diào)度模塊和發(fā)送模塊協(xié)調(diào)工作,根據(jù)各端口存儲(chǔ)的接收描述符的數(shù)量,對(duì)ET數(shù)據(jù)幀按著輪詢方式[8]進(jìn)行調(diào)度轉(zhuǎn)發(fā),對(duì)于被搶占的ET的調(diào)度待TT數(shù)據(jù)幀轉(zhuǎn)發(fā)完后進(jìn)行重新調(diào)度。ET數(shù)據(jù)幀輸出時(shí)采用隨機(jī)存取存儲(chǔ)器(Random access memory,RAM)緩存,當(dāng)需要對(duì)ET數(shù)據(jù)幀進(jìn)行重傳時(shí),將地址指針重新指到ET數(shù)據(jù)幀在RAM中起始存儲(chǔ)地址處重新開始發(fā)送即可。
2.2.2 對(duì)于時(shí)間同步數(shù)據(jù)幀
在定時(shí)發(fā)送時(shí)間同步協(xié)議幀時(shí),若當(dāng)前發(fā)送端口上有ET數(shù)據(jù)幀正在發(fā)送,直接進(jìn)行搶占;若當(dāng)前發(fā)送端口正在發(fā)送TT數(shù)據(jù)幀,則等待此TT數(shù)據(jù)幀傳送完后,緊接著傳送時(shí)間同步幀。
2.2.3 對(duì)于TT數(shù)據(jù)流量
交換機(jī)對(duì)TT數(shù)據(jù)幀的轉(zhuǎn)發(fā),不管是周期性的TT數(shù)據(jù),還是突發(fā)性的TT數(shù)據(jù),都是基于以太網(wǎng)數(shù)據(jù)幀類型字段值是否為16位16進(jìn)制數(shù)0x0 888,并且會(huì)記錄各端口的TT數(shù)據(jù)輸出緩存是否被占用。
識(shí)別出是TT數(shù)據(jù)幀后,若此時(shí)該TT數(shù)據(jù)幀去往的目的端口正有ET數(shù)據(jù)輸出則立即停止,并等待標(biāo)準(zhǔn)幀間距間隔后,傳輸TT數(shù)據(jù)幀;若此時(shí)該TT數(shù)據(jù)幀去往的目的端口有時(shí)間同步數(shù)據(jù)幀輸出,待時(shí)間同步數(shù)據(jù)幀傳輸完后將TT數(shù)據(jù)幀立即輸出;若此時(shí)端口沒有數(shù)據(jù)傳輸,則直接對(duì)TT數(shù)據(jù)幀立即進(jìn)行轉(zhuǎn)發(fā),這樣就可以做到無存儲(chǔ)轉(zhuǎn)發(fā)。
對(duì)于周期性的TT數(shù)據(jù),可以離線生成調(diào)度表,下載到交換機(jī)所連接到的終端上,在基于搶占的方式下并不需要將離線調(diào)度表下載到交換機(jī)上,只需各個(gè)終端根據(jù)調(diào)度表發(fā)送TT數(shù)據(jù)幀,交換機(jī)對(duì)TT數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā)時(shí)就不會(huì)有沖突。對(duì)于突發(fā)性的TT數(shù)據(jù),在某個(gè)終端進(jìn)行發(fā)送TT數(shù)據(jù)前,先查詢此TT數(shù)據(jù)流量的目的端口的TT數(shù)據(jù)幀輸出緩存是否被占用,若被占用,則此終端此時(shí)不能發(fā)送TT數(shù)據(jù)幀,若沒有被占用,則此終端此時(shí)可以發(fā)送TT數(shù)據(jù)。
發(fā)送模塊中狀態(tài)機(jī)如圖6所示。
圖6 發(fā)送模塊狀態(tài)機(jī)
發(fā)送進(jìn)程只關(guān)心發(fā)送緩存中是否有數(shù)據(jù)需要發(fā)送,只要發(fā)送緩存不空,就進(jìn)行數(shù)據(jù)發(fā)送。主要有7個(gè)狀態(tài),整體是一個(gè)順序執(zhí)行的過程,初始化后進(jìn)入空閑狀態(tài)。
1)空閑狀態(tài):當(dāng)沒有發(fā)送請(qǐng)求或者幀間距不符合要求時(shí)停留在空閑狀態(tài),當(dāng)有發(fā)送請(qǐng)求且此時(shí)幀間距符合要求時(shí)進(jìn)入發(fā)送前導(dǎo)碼狀態(tài)。
2)發(fā)送前導(dǎo)碼狀態(tài):發(fā)送7個(gè)字節(jié)的前導(dǎo)碼8位16進(jìn)制數(shù)0x55,然后進(jìn)入發(fā)送定界符狀態(tài)。
3)發(fā)送定界符狀態(tài):發(fā)送1個(gè)字節(jié)定界符8位16進(jìn)制數(shù)0xd5,然后進(jìn)入發(fā)送數(shù)據(jù)狀態(tài)。
4)發(fā)送數(shù)據(jù)狀態(tài):發(fā)送以太網(wǎng)幀數(shù)據(jù),當(dāng)發(fā)送到還剩最后一個(gè)字節(jié)需要發(fā)送時(shí),進(jìn)入發(fā)送最后1個(gè)字節(jié)狀態(tài)。
5)發(fā)送最后1個(gè)字節(jié)狀態(tài):將最后一個(gè)字節(jié)發(fā)出后直接進(jìn)入結(jié)束狀態(tài)。
6)結(jié)束狀態(tài):在此狀態(tài)中判斷是否數(shù)據(jù)幀已經(jīng)完全發(fā)出,是否需要重傳,若發(fā)送完成進(jìn)入結(jié)束初始化階段。
7)結(jié)束初始化階段:將一些發(fā)送進(jìn)程用到的變量進(jìn)行初始化后回到空閑狀態(tài)。
交換機(jī)中的數(shù)據(jù)從接收端口【N】到輸出端口【M】整體過程如圖7所示。
圖7 3種類型數(shù)據(jù)轉(zhuǎn)發(fā)流程圖
當(dāng)交換機(jī)端口【N】接收到數(shù)據(jù)時(shí)(假設(shè)此數(shù)據(jù)幀去往【M】端口),先判斷數(shù)據(jù)類型字段:
1)如果是ET數(shù)據(jù)幀,將此數(shù)據(jù)幀寫入接收緩存中并分配給此數(shù)據(jù)幀一個(gè)接收描述符。接收完成后,若此數(shù)據(jù)幀CRC校驗(yàn)正確,就將此ET數(shù)據(jù)幀存儲(chǔ)在緩存中的地址,數(shù)據(jù)幀長(zhǎng)度,以及將要去往的目的端口號(hào)等信息寫入描述符當(dāng)中;若此數(shù)據(jù)幀循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check,CRC)校驗(yàn)不正確,則此描述符留給下一個(gè)數(shù)據(jù)幀使用。同時(shí)下一數(shù)據(jù)幀到來時(shí)接著從此校驗(yàn)錯(cuò)誤的數(shù)據(jù)幀起始地址開始存儲(chǔ),直接將原來錯(cuò)誤的數(shù)據(jù)幀覆蓋。調(diào)度程序每次查詢各接收端口的接收描述符是否為空。若不空就讀取接收描述符的信息,調(diào)度程序根據(jù)接收描述符的信息將N口的接收到的ET數(shù)據(jù)幀從接收緩沖中讀出寫入到到【M】端口的ET發(fā)送緩存ET_fifo。
2)如果此數(shù)據(jù)幀是TT數(shù)據(jù)幀,由調(diào)度程序直接將此TT數(shù)據(jù)幀調(diào)度到【M】端口的TT_fifo,并不寫入接收緩存,也不分配接收描述符。
3)當(dāng)定時(shí)時(shí)間到時(shí),發(fā)送時(shí)間同步幀程序會(huì)將時(shí)間同步數(shù)據(jù)幀寫入到各個(gè)端口的TTtime_fifo,其中也包括【M】端口。
4)最終由【M】端口根據(jù)自己端口中3種發(fā)送緩存中是否有數(shù)據(jù)需要發(fā)送,進(jìn)行按優(yōu)先級(jí)的處理,然后再將數(shù)據(jù)輸出。
在分布式系統(tǒng)中,各個(gè)物理分散、彼此相對(duì)獨(dú)立的節(jié)點(diǎn)各自維護(hù)其本地的時(shí)鐘,各時(shí)鐘晶振的頻率穩(wěn)定性、運(yùn)行環(huán)境不一樣,導(dǎo)致即使某一時(shí)刻所有的時(shí)鐘是一致的,一段時(shí)間后這些時(shí)鐘仍然是不一致。若沒有一個(gè)統(tǒng)一的全局時(shí)鐘,就無法保證系統(tǒng)中任意多個(gè)事件間的先后關(guān)系,更無法做到在同一時(shí)刻同步解決相同的問題,因此需要時(shí)間同步。
時(shí)間同步方法按同步作用路徑上可分為主從同步和互同步兩大類。主從同步不存在由從節(jié)點(diǎn)到主節(jié)點(diǎn)的同步作用路徑,如:泛洪時(shí)間同步協(xié)議(The flooding time synchronization protocol ,F(xiàn)TSP[9])、網(wǎng)絡(luò)時(shí)間協(xié)議(Network Time Protocol,NTP[10])、IEEE1588[11]等,優(yōu)點(diǎn)是算法穩(wěn)定性好;缺點(diǎn)是對(duì)主節(jié)點(diǎn)精度可靠性要求高、需要維護(hù)網(wǎng)絡(luò)拓?fù)洌缃⑼綐涞取;ネ饺魏蝺蓚€(gè)節(jié)點(diǎn)間都可能存在同步作用路徑,如:參考廣播時(shí)間同步(Reference Broadcast Time Synchronization,RBS[12])、成對(duì)廣播同步(Pairwise broadcast synchronization,PBS[13])、共識(shí)時(shí)鐘同步(Consensus clock synchronization,CCS[14])等,其優(yōu)點(diǎn)是容錯(cuò)性較好、可參考信息較多;缺點(diǎn)是系統(tǒng)收斂情況較復(fù)雜,通信、計(jì)算開銷較高。
圖8 兩步式同步過程
在TTE AS6802[2]中采用的是互同步策略,指定了兩步式同步方法,如圖8所示:在第一步中,同步主機(jī)向壓縮主機(jī)發(fā)送同步協(xié)議控制幀,壓縮主機(jī)由這些協(xié)議控制幀的相對(duì)到達(dá)時(shí)間計(jì)算出平均值,然后發(fā)送包含時(shí)間校正信息的新的協(xié)議控制幀作為響應(yīng),反饋給同步主機(jī)和同步客戶端。同時(shí)采用了透明時(shí)鐘的機(jī)制,容忍了同步協(xié)議控制幀在收發(fā)過程中的交換延遲,使得其適用于多交換機(jī)網(wǎng)絡(luò)。
而針對(duì)本實(shí)驗(yàn)中所采用的單交換機(jī)網(wǎng)絡(luò)的情況,設(shè)計(jì)采用主從式一步同步方法,如圖9所示。由星型結(jié)構(gòu)中的交換機(jī)每隔固定時(shí)間向各終端節(jié)點(diǎn)發(fā)送含有同步時(shí)間戳的時(shí)間同步數(shù)據(jù)幀,各終端節(jié)點(diǎn)解析出時(shí)間戳來修正自己的本地時(shí)鐘,此方式的時(shí)間同步數(shù)據(jù)幀傳輸延遲的不確定性更小,時(shí)延更短。
圖9 一步式同步過程
設(shè)計(jì)的時(shí)間同步協(xié)議幀的格式如圖10所示。協(xié)議幀采用網(wǎng)絡(luò)互連協(xié)議(Internet Protocol,IP)幀頭,用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol,UDP)幀頭,共72字節(jié)長(zhǎng)(含8字節(jié)前導(dǎo)碼)。在UDP數(shù)據(jù)字段開頭的2個(gè)字節(jié)沒有用,而是從第3個(gè)字節(jié)起,開始存儲(chǔ)8個(gè)字節(jié)的時(shí)間戳。
圖10 時(shí)間同步數(shù)據(jù)幀格式
設(shè)計(jì)的時(shí)間戳格式如圖11所示。
圖11 時(shí)間戳格式
時(shí)間戳共64位,最后4位保留。時(shí)間戳以系統(tǒng)時(shí)鐘周期為一次計(jì)數(shù)周期,每隔一個(gè)計(jì)數(shù)周期,時(shí)間戳中對(duì)應(yīng)系統(tǒng)周期的計(jì)數(shù)值加1。此系統(tǒng)中sysclk為200 Mhz,也就是5 ns記1次數(shù),時(shí)間戳中對(duì)應(yīng)納秒的計(jì)數(shù)值加1,當(dāng)計(jì)數(shù)到199時(shí),對(duì)應(yīng)微秒的計(jì)數(shù)值加1,納秒計(jì)數(shù)值歸0,以此類推。當(dāng)需要進(jìn)位時(shí)向上進(jìn)位加1,當(dāng)每個(gè)字段計(jì)數(shù)到最大值時(shí)歸0。年字段只設(shè)置了6位,是一個(gè)偏移值,最大計(jì)數(shù)到63,實(shí)際應(yīng)用時(shí)另設(shè)置一個(gè)初始值,初始值加上年字段的偏移值就代表當(dāng)前的年份。
如圖12所示,時(shí)間戳記錄的是Txc時(shí)鐘域的時(shí)間同步數(shù)據(jù)幀有效信號(hào)Txdv第一次出現(xiàn)在物理鏈路上,經(jīng)sysclk打兩拍后同步到sysclk時(shí)鐘域的時(shí)刻Ttimestamp:
Ttimestamp=Tsend+t1+Ts+Ts
(1)
式中,Ttimestamp指時(shí)間戳?xí)r間,Tsend指物理線路發(fā)出時(shí)刻,t1指的是使能信號(hào)出現(xiàn)到sysclk第一次采集到使能信號(hào)之間的時(shí)間差,Ts指sysclk的時(shí)鐘周期。在圖中可以看到同步協(xié)議幀中所存儲(chǔ)的時(shí)間戳是隨時(shí)間同步數(shù)據(jù)幀的發(fā)出隨打入,所以從發(fā)送時(shí)間同步數(shù)據(jù)幀的定時(shí)時(shí)刻起,到物理鏈路上發(fā)出同步幀之間的等待時(shí)間也會(huì)記錄到時(shí)間戳中,不用再另外進(jìn)行時(shí)間補(bǔ)償。
圖12 時(shí)間戳打入時(shí)刻仿真圖
在接收端采用同樣的策略,接收端完全接收完8個(gè)字節(jié)時(shí)間戳?xí)r(也就是接收數(shù)據(jù)字節(jié)計(jì)數(shù)從0到59時(shí),此時(shí)共60個(gè)字節(jié))產(chǎn)生Rxc時(shí)鐘域的change信號(hào),由sysclk打兩拍同步到sysclk時(shí)鐘域上,然后接收端再根據(jù)時(shí)間戳的內(nèi)容修正本地時(shí)間,如圖13所示。
圖13 接收端解析時(shí)間戳
接收端修正本地時(shí)間時(shí),不能直接使用時(shí)間戳修正。因?yàn)閺臅r(shí)間同步數(shù)據(jù)幀出現(xiàn)在物理鏈路上,到change信號(hào)同步到sysclk時(shí)鐘域上之間的時(shí)間差為T_delay:
T_delay=T_trans+T60+t2+Ts+Ts
(2)
式中,T_trans指數(shù)據(jù)幀在鏈路上傳播時(shí)間,T60指接收端接收60個(gè)字節(jié)數(shù)據(jù)的時(shí)間,t2指change信號(hào)出現(xiàn)到sysclk第一次采集到change信號(hào)之間時(shí)間差,Ts指sysclk的時(shí)鐘周期。由于發(fā)送端和接收端的sysclk都是采用200 MHz,所以時(shí)間戳接收端相對(duì)于時(shí)間戳發(fā)出端,本地時(shí)間修正為Time_correct:
Time_correct=Timestamp+(t2-t1)+T60+T_trans
(3)
式中,(t2-t1)在(-5 ns,+5 ns)之間,T_trans很小暫時(shí)忽略。而接收端網(wǎng)口phy時(shí)鐘是125 MHz,8 ns一周期,而接收端以200 MHz主時(shí)鐘計(jì)數(shù),所以將T60折算成需要補(bǔ)償?shù)臅r(shí)間戳計(jì)數(shù)值正好是60*8/5=96,是個(gè)整數(shù)值可以整除,便于程序設(shè)計(jì)。這也是為什么要將時(shí)間戳存儲(chǔ)在數(shù)據(jù)幀的第53字節(jié)到第60字節(jié)之間。所以最終本地時(shí)間的計(jì)數(shù)值修正為:
Time_correct=timestamp+96±1
(4)
取平均值:
Time_correct≈timestamp+96
(5)
實(shí)驗(yàn)測(cè)量是基于ALINX7101實(shí)驗(yàn)板。該板使用的FPGA型號(hào)為XC7A100T-2FGG484I,屬Xilinx 公司 Artix-7 系列的產(chǎn)品,速度等級(jí)為 2,溫度等級(jí)為工業(yè)級(jí)。有4個(gè)千兆以太網(wǎng)接口。
先取1個(gè)節(jié)點(diǎn)個(gè)當(dāng)交換機(jī),將寫好的verilog[15]程序燒入,將4個(gè)端口分別連上4臺(tái)測(cè)試電腦PC1至PC4,設(shè)置IP地址分別為192.168.1.1至192.168.1.4,掩碼為255.255.255.0。因?yàn)槭蔷钟蚓W(wǎng)內(nèi)測(cè)試,暫時(shí)不需要設(shè)置網(wǎng)關(guān)。在每臺(tái)PC上開起Iperf3測(cè)試軟件,每臺(tái)PC既當(dāng)服務(wù)端又當(dāng)客戶端,服務(wù)端測(cè)試端口為12345,測(cè)試時(shí)間是10s,測(cè)試軟件的發(fā)包速率是1 Gbit/s,發(fā)送UDP格式的數(shù)據(jù)包。經(jīng)測(cè)試可查看網(wǎng)絡(luò)速率,抖動(dòng),丟包率等情況。如圖14所示。
圖14 測(cè)試網(wǎng)絡(luò)傳輸速度、抖動(dòng)、丟包率
測(cè)試結(jié)果顯示網(wǎng)絡(luò)速率平均值為940 Mbit/s左右,抖動(dòng)平均值為0.04 ms左右,丟包率為0.15%左右。
但由于是軟件測(cè)試,測(cè)試結(jié)果只作為大概一個(gè)性能的估計(jì),其中的測(cè)試數(shù)據(jù)包的丟包率測(cè)試并不是十分準(zhǔn)確。采取用硬件測(cè)試的方法,將4號(hào)端口連接的IP地址為192.168.1.4的臺(tái)式PC機(jī)換成一個(gè)發(fā)固定數(shù)量測(cè)試數(shù)據(jù)幀的FPGA開發(fā)板,測(cè)試數(shù)據(jù)目的MAC為1號(hào)臺(tái)式機(jī)網(wǎng)卡MAC,幀間距在1Gbit/s的速率下為標(biāo)準(zhǔn)的96 ns。在1號(hào)臺(tái)式機(jī)上打開wireshark抓包軟件,在其中端口的interface details中的statistics標(biāo)簽下,可以看到該機(jī)網(wǎng)卡上收到包的統(tǒng)計(jì)信息,測(cè)試開發(fā)板每次固定發(fā)430 000個(gè)數(shù)據(jù)包。在未開始發(fā)送測(cè)試數(shù)據(jù)前,如圖6中右側(cè)兩列所示,只有1號(hào)臺(tái)式向外發(fā)送數(shù)據(jù),并未有接收數(shù)據(jù)統(tǒng)計(jì);當(dāng)開始發(fā)送測(cè)試數(shù)據(jù)時(shí),此時(shí)其他端口無數(shù)據(jù)流量不引入對(duì)1號(hào)口統(tǒng)計(jì)接收數(shù)據(jù)包個(gè)數(shù)的影響,所統(tǒng)計(jì)的數(shù)據(jù)包個(gè)數(shù)完全來自于4號(hào)端口,如圖15中所示,并未發(fā)生丟包。
圖15 FPGA測(cè)試板測(cè)試丟包情況
在modelsim中編寫testbench,指定1端口一直在發(fā)送廣播包,2端口先發(fā)送2個(gè)目的地址為3端口的標(biāo)準(zhǔn)以太網(wǎng)數(shù)據(jù)幀,后發(fā)送2個(gè)目的地址為4端口的時(shí)間觸發(fā)數(shù)據(jù)幀,指定抓取交換機(jī)調(diào)度模塊的相關(guān)信號(hào),可以觀察到2端口的時(shí)間觸發(fā)流量搶占了4端口對(duì)標(biāo)準(zhǔn)流量的輸出;時(shí)間觸發(fā)流量從進(jìn)入到輸出之間有搶占的情況延遲值大概是366.5ns,如圖16所示。無搶占直接轉(zhuǎn)發(fā)時(shí)延遲大概是262.5ns,如圖17所示。
圖16 仿真TT幀有搶占時(shí)延遲
圖17 仿真TT幀無搶占時(shí)延遲
使用FPGA的內(nèi)嵌式邏輯分析儀,抓取物理信號(hào),有搶占時(shí)結(jié)果如圖18所示,看到當(dāng)收到類型格式為TT數(shù)據(jù)幀的時(shí)候,搶占對(duì)類型格式為ET數(shù)據(jù)幀的傳輸,ET數(shù)據(jù)幀有效信號(hào)中斷,等待標(biāo)準(zhǔn)幀間距后發(fā)送TT數(shù)據(jù)幀。有搶占時(shí)TT數(shù)據(jù)幀在交換機(jī)上從接收到發(fā)出的延遲大概是(1808-1761)*8=376 ns。無搶占時(shí)如圖19所示,當(dāng)收到類型格式為TT數(shù)據(jù)幀的時(shí)候,輸出鏈路上無數(shù)據(jù)發(fā)送時(shí),TT數(shù)據(jù)幀在交換機(jī)上的傳輸延遲大概是(1762-1729)*8ns=264 ns。
圖18 ILA抓取TT幀有搶占時(shí)延遲
圖19 ILA抓取TT幀無搶占時(shí)延遲
為了觀測(cè)同步效果,將PC換成7101FPGA板卡,向板卡中燒入可以解析時(shí)間同步幀的程序,同時(shí)在程序中設(shè)定每1 ms通過一個(gè)I/O口輸出一個(gè)持續(xù)時(shí)間200 us高電平,將2個(gè)板卡上的I/O口連接到一臺(tái)示波器上,觀察上下2個(gè)高電平之間的時(shí)間差。如圖20所示。通過對(duì)時(shí)間差的計(jì)算就可以算出同步精度是多少。
圖20 定時(shí)輸出高電平方波
4.3.1 1 s同步一次
以1 s為周期進(jìn)行同步時(shí),1 s鐘內(nèi)會(huì)有1 000次高電平出現(xiàn),系統(tǒng)剛上電測(cè)試時(shí),脈沖之間最小相差7 ns左右,如圖21所示;最大相差582 ns左右,如圖22所示。但隨著系統(tǒng)運(yùn)行時(shí)間增加,脈沖之間最大相差會(huì)增長(zhǎng)到600 ns左右。
圖21 1 s同步一次時(shí)最小同步時(shí)間差
圖22 1 s同步一次時(shí)最大同步時(shí)間差
4.3.2 10 ms同步一次
若是以10 ms為周期進(jìn)行同步時(shí),系統(tǒng)剛上電測(cè)試時(shí),脈沖之間同步的時(shí)間差最小相差200 ps左右, 如圖23所示。最大相差24 ns左右,不會(huì)超過25 ns,如圖24所示;。但隨著系統(tǒng)運(yùn)行時(shí)間增加,芯片溫度升高,最大相差會(huì)增長(zhǎng)到40 ns左右。
圖23 10 ms同步一次時(shí)最小同步時(shí)間差
圖24 10 ms同步一次時(shí)最大同步時(shí)間差
4.3.3 20 ms同步一次
若是以20 ms為周期進(jìn)行同步時(shí),系統(tǒng)剛上電測(cè)試時(shí),脈沖之間時(shí)間差最小相差200 ps左右,如圖25所示;最大相差28 ns左右,不會(huì)超過30 ns,如圖26所示。但隨著系統(tǒng)運(yùn)行時(shí)間增加,最大相差會(huì)增長(zhǎng)到45 ns左右。
圖25 20 ms同步一次時(shí)最小同步時(shí)間差
圖26 20 ms同步一次時(shí)最大同步時(shí)間差
此交換機(jī)設(shè)計(jì)實(shí)驗(yàn)性的融合了TT數(shù)據(jù)和ET數(shù)據(jù)的無縫連接轉(zhuǎn)發(fā),并實(shí)現(xiàn)了TT數(shù)據(jù)轉(zhuǎn)發(fā)的固定延時(shí)的保證,同步時(shí)間精度也達(dá)到了μs級(jí)、ns級(jí)。針對(duì)于TT周期性數(shù)據(jù)的轉(zhuǎn)發(fā)并沒有采用將離線調(diào)度表存儲(chǔ)到交換機(jī)上的策略,而是采用的直接基于搶占的方式,需要判斷出類型域后才能進(jìn)行搶占,這樣做相對(duì)于基于離線調(diào)度提前預(yù)置好輸入與輸出端口之間的連接線路而言,造成了一定延時(shí)的增加,但降低了交換機(jī)設(shè)計(jì)的復(fù)雜度,同時(shí)增加了對(duì)于轉(zhuǎn)發(fā)突發(fā)性TT數(shù)據(jù)幀的靈活性。也帶了一些挑戰(zhàn),比如是否能提前預(yù)知將要到來的是TT數(shù)據(jù)幀以及TT幀將要去往的目的端口,那么就可以像基于離線調(diào)度表一樣,真正做到幾乎是無延遲的轉(zhuǎn)發(fā);針對(duì)于突發(fā)性TT數(shù)據(jù)幀的轉(zhuǎn)發(fā),現(xiàn)在采用的避免沖突的策略是在發(fā)突發(fā)性TT數(shù)據(jù)流量前向交換機(jī)查詢輸出端口的TT發(fā)送緩存是否可用,如何更好的解決避免兩個(gè)來自不同端口的TT流量同時(shí)突發(fā)性的發(fā)往同一個(gè)端口,又是一個(gè)問題。