0731-84728105
15116127200
基于(yú)FAST的(de)TSN交換(6)基于(yú)FPGA的(de)PTP時(shí)間同步實現v2
發布時(shí)間:2019-04-02
     時(shí)間同步是(shì)TSN交換實現的(de)前提。802.1AS規範定義了(le/liǎo)TSN網絡同步的(de)方法,其基本思路還是(shì)利用IEEE 1588v2定義的(de)PTP協議,将網絡中所有的(de)時(shí)間從設備與時(shí)間主設備的(de)時(shí)間進行同步。在(zài)基于(yú)FAST流水線的(de)TSN實現中,與PTP協議相關的(de)邏輯主要(yào / yāo)有接收控制邏輯(RXC),PTP-UDA模塊以(yǐ)及PTP-UDO模塊。這(zhè)三個(gè)模塊密切協同實現PTP時(shí)間同步而(ér)不(bù)需要(yào / yāo)軟件參與。
一、FAST-TSN-04的(de)PTP實現模型
      在(zài)FAST-TSN-04的(de)PTP協議實現模型如下圖所示,主要(yào / yāo)由RxC、PTP-UDA和(hé / huò)PTP-UDO模塊組成。其中RxC模塊位于(yú)FPGA OS内部,是(shì)FAST平台固有的(de)邏輯,而(ér)PTP-UDA和(hé / huò)PTP-UDO是(shì)FAST擴展的(de)流水線模塊,隻有需要(yào / yāo)支持PTP協議的(de)流水線才需要(yào / yāo)嵌入這(zhè)兩個(gè)模塊。

圖1 FAST-TSN-04的(de)PTP實現模型
   (1)主要(yào / yāo)功能模塊
     每個(gè)從接口接收的(de)分組首先進入RxC模塊。RxC模塊首先不(bù)加區分的(de)爲(wéi / wèi)每個(gè)分組打上(shàng)48比特接收時(shí)間戳。接收時(shí)間戳被填寫在(zài)分組的(de)元數據中,随着分組一同進入FAST流水線處理。由于(yú)接口時(shí)鍾頻率爲(wéi / wèi)125MHz,因此時(shí)間戳的(de)精度爲(wéi / wèi)8ns。RxC模塊位于(yú)輸入緩存之(zhī)前,因此輸出(chū)緩存的(de)擁塞和(hé / huò)調度機制不(bù)影響接收時(shí)間戳标記的(de)準确度。
     PTP-UDA模塊位于(yú)FAST流水線的(de)開始,負責PTP協議的(de)處理。根據軟件配置,PTP-UDA可以(yǐ)工作在(zài)時(shí)間主模式或是(shì)時(shí)間從模式。PTP-UDA内部的(de)狀态機控制整個(gè)時(shí)間同步過程,由于(yú)時(shí)間同步完全由硬件實現,因此同步過程中不(bù)需要(yào / yāo)followup消息,主從之(zhī)間隻交換sync、delay_req和(hé / huò)delay-resp三類消息,關于(yú)PTP消息詳細的(de)交互流程以(yǐ)及offset的(de)計算已有大(dà)量文章介紹,本文不(bù)再贅述。
     若PTP-UDA工作在(zài)時(shí)間從模式,則每次同步都會産生一個(gè)本地(dì / de)時(shí)鍾與主時(shí)鍾的(de)偏差offset,該offset用于(yú)修正本地(dì / de)的(de)全局時(shí)間。PTP-UDO模塊位于(yú)輸出(chū)緩存之(zhī)後,PTP-UDO模塊根據輸出(chū)分組元數據中協議标準類型(PST)來(lái)判斷該分組是(shì)否爲(wéi / wèi)PTP的(de)sync/delay-req/delay-resp分組。
     如果輸出(chū)分組是(shì)上(shàng)述PTP分組,則該分組在(zài)PTP協議頭中會攜帶透明時(shí)鍾(Transparent Clock)字段TC,PTP-UDO模塊會根據分組頭部攜帶的(de)時(shí)間戳信息,當前時(shí)間信息計算分組從PTP-UDA發出(chū)經交換緩存和(hé / huò)輸出(chū)緩存的(de)延時(shí),将該延時(shí)累計到(dào)透明時(shí)鍾字段中。如果分組不(bù)是(shì)上(shàng)述PTP分組,則PTP-UDO模塊将該分組發出(chū)而(ér)不(bù)做任何修改。
   (2)多時(shí)鍾域時(shí)鍾同步
     在(zài)基于(yú)FPGA的(de)FAST千兆交換實現過程中,FPGA内部最多有2N+1個(gè)時(shí)鍾域,其中N爲(wéi / wèi)接口數目。其中每個(gè)千兆接口都有一個(gè)獨立的(de)接收時(shí)鍾,該時(shí)鍾頻率與通信對端的(de)發送時(shí)鍾一緻。每個(gè)接口都有一個(gè)發送時(shí)鍾,負責将數據通過GMII/RGMII接口發送給PHY芯片。同時(shí)還有一個(gè)獨立于(yú)接收和(hé / huò)發送接口時(shí)鍾的(de)核心時(shí)鍾,作爲(wéi / wèi)FAST流水線的(de)工作時(shí)鍾。
     雖然FAST-TSN-04的(de)接口時(shí)鍾和(hé / huò)核心時(shí)鍾都額定爲(wéi / wèi)125MHz,但可能存在(zài)細微的(de)差别。例如兩個(gè)20ppm的(de)125MHz晶振,設基于(yú)這(zhè)兩個(gè)晶振的(de)時(shí)間每秒偏差爲(wéi / wèi)D,則: Dmax=8ns*(125M*(1+20ppm)-125M*(1-20ppm))=40us 因此FPGA内部不(bù)同時(shí)鍾域的(de)時(shí)間信息之(zhī)間也(yě)需要(yào / yāo)同步,片上(shàng)跨時(shí)鍾域的(de)時(shí)間同步有單信号同步和(hé / huò)多信号同步等方式,這(zhè)裏不(bù)再贅述。
二、PTP協議同步實現
   (1)時(shí)間信息的(de)标記和(hé / huò)處理
     基于(yú)RxC、PTP-UDA和(hé / huò)PTP-UDO模塊的(de)FAST-TSN-04的(de)PTP時(shí)間同步實現原理如下圖所示。每個(gè)sync/delay_req/delay-resp的(de)協議分組都由PTP-UDA發出(chū)和(hé / huò)接收。
     FAST-TSN-04需要(yào / yāo)發送PTP分組時(shí), PTP-UDA産生PTP分組,并将分組從PTP-UDA離開的(de)時(shí)間t0填寫到(dào)分組的(de)元數據中,假設該分組到(dào)達PTP-UDO時(shí)間爲(wéi / wèi)t1,則該分組在(zài)交換機内部的(de)延時(shí)将會填寫到(dào)分組的(de)透明時(shí)鍾域TC中,随分組從網絡接口發出(chū)。

圖2 PTP協議分組處理流程
      FAST-TSN-04接收PTP分組時(shí)首先将接收時(shí)間戳t2填寫到(dào)分組元數據中,然後送到(dào)FAST流水線的(de)PTP-UDA模塊,設PTP-UDA模塊收到(dào)分組的(de)時(shí)間爲(wéi / wèi)t3。後續的(de)PTP分組處理有兩種情況。
     一是(shì)分組的(de)目的(de)MAC是(shì)本地(dì / de)接口MAC地(dì / de)址,則該分組會送到(dào)本地(dì / de)PTP-UDA處理。本地(dì / de)PTP-UDA首先對分組的(de)透明時(shí)鍾域進行修正,增加值爲(wéi / wèi)該分組進入FPGA後的(de)延時(shí)t3-t2,然後再對分組數進行解析,根據PTP協議要(yào / yāo)求進行後續處理。
     二是(shì)分組目的(de)不(bù)是(shì)本地(dì / de)MAC,即該分組需要(yào / yāo)被TSN交換機轉發。PTP-UDA不(bù)處理該分組,直接将分組送FAST流水線進行後續交換處理。設分組到(dào)達輸出(chū)接口的(de)PTP-UDO時(shí)間爲(wéi / wèi)t4,則分組在(zài)交換機中的(de)延時(shí)t4-t2将被累加到(dào)TC域中。
   (2)同步計算關鍵時(shí)間點的(de)獲取
     基于(yú)PTP的(de)時(shí)間同步原理如下圖所示,時(shí)間從設備通過與時(shí)間主設備的(de)三種類型分組的(de)交互獲取四個(gè)關鍵的(de)時(shí)間點信息,T1,T2,T3和(hé / huò)T4,并根據這(zhè)些關鍵時(shí)間點信息計算自己時(shí)間與時(shí)間主設備時(shí)間的(de)偏差offset,并根據這(zhè)個(gè)偏差調整自己的(de)時(shí)間計數器。

圖3 一次PTP協議時(shí)間同步的(de)過程
     時(shí)間從設備與時(shí)間主設備的(de)交互并獲取四個(gè)關鍵時(shí)間點的(de)詳細方法如下表所示,時(shí)間點标記參見圖1。
   (3)全局時(shí)間的(de)表示與修正
     我們将在(zài)後續文章中,對TSN的(de)CQF轉發模型,以(yǐ)及PTP UDA、PTPUDO以(yǐ)及CFQ UDO模塊的(de)功能實現進行詳細介紹。
     PTP主和(hé / huò)PTP從設備的(de)全局時(shí)間計數器time_cnt均在(zài)PTP-UDA内部維護,長度爲(wéi / wèi)48比特。每隔8ns加1,因此計數器計數的(de)時(shí)長超過200天,這(zhè)對于(yú)TSN交換原型系統來(lái)說(shuō)已經足夠。
     TSN交換系統複位時(shí),time_cnt置爲(wéi / wèi)全0,并随時(shí)鍾自由增加。從設備在(zài)第一次接收到(dào)sync同步幀時(shí),将自己的(de)time_cnt設置爲(wéi / wèi)T1,後續同步過程使用offset修正自己的(de)time_cnt計數器。此外,在(zài)每個(gè)時(shí)鍾同步周期内,每個(gè)TSN設備的(de)time_cnt要(yào / yāo)與外圍時(shí)鍾域的(de)時(shí)間進行一次同步。
三、進一步讨論
   (1)端系統PTP處理的(de)實現
     在(zài)TSN網絡中,時(shí)間主設備可以(yǐ)是(shì)TSN交換機,也(yě)可以(yǐ)是(shì)具有高精度時(shí)間的(de)終端設備。由于(yú)FAST架構的(de)核心就(jiù)是(shì)基于(yú)軟硬件協同的(de)方式進行分組處理,FPGA OS内部已經嵌入DMA通道(dào),實現與CPU軟件進行通信,因此基于(yú)FAST擴展流水線的(de)PTP協議處理可方便的(de)在(zài)網卡上(shàng)實現,而(ér)且不(bù)需要(yào / yāo)任何軟件參與。
   (2)PTP同步頻率
     由于(yú)所有的(de)PTP同步邏輯由FPGA硬件實現,不(bù)會給軟件增加開銷,因此在(zài)規模有限的(de)TSN網絡中,可以(yǐ)增加同步的(de)頻度。根據上(shàng)述分析,當兩個(gè)節點的(de)晶振精度都爲(wéi / wèi)20ppm時(shí),每秒時(shí)間偏差可達40us。若将同步間隔縮小到(dào)1ms,則同步誤差可縮小到(dào)40ns左右,可以(yǐ)滿足絕大(dà)多數TSN場景的(de)需求