在KeyStone 器件實現(xiàn)IEEE1588 時鐘方案
摘要
IEEE1588 標準又稱為網絡測量和控制系統(tǒng)的精確時鐘同步協(xié)議標準,是 IEEE 標準委員會頒布的為了滿足定位服務和無線移動通信系統(tǒng)高精度同步要求的標準。隨著 Ethernet 技術的廣泛應用,采用 IEEE1588 方式通過以太網實現(xiàn)時鐘同步方案在網絡上的應用越來越普遍。本文簡要介紹 1588 的原理和常見的實現(xiàn)方式,并詳細介紹 TI KeyStone 架構上的1588 實現(xiàn)方案。
1 概述
1588 是IEEE 規(guī)范定義的網絡實時同步標準 [1] 。它提供一種通過網絡信息交互以獲得精準時鐘信息的標準。和在廣域網上的NTP 協(xié)議比較,1588 最新標準提供高于納秒級別的時鐘精度,可以用來滿足要求在一個相對小的空間范圍內對時鐘同步有嚴格要求的應用場景,例如基站同步,音視頻網橋(AVB),工業(yè)控制,產線控制,軍事應用等。
KeyStone 架構是TI 推出的高性能多核架構,該架構目前已演進了兩代——KeyStone1 和KeyStone2?;贙eyStone 架構,TI 推出多款針對基站和網絡應用的多核芯片。
KeyStone1 家族基于40nm 工藝,包括如下器件型號:
· TCI6616,參見文獻[2]
· TCI6618,參見文獻[3]
· TCI6614 和TCI6612,參見文獻[4]和[5]
· TMS320C6678、TMS320C6674、TMS320C6672 等,參見文獻[6]
KeyStone2 家族基于28nm 工藝,包括如下器件型號:
· TCI6636K2H,參見文獻[7]
· TCI6634K2K,參見文獻[8]
· TCI6638K2K,參見文獻[9]
· TCI6630K2L (即將發(fā)布),參見文獻[10]
本文首先介紹IEEE1588 的基本原理,然后以常見的基于PHY 的IEEE1588 實現(xiàn)方案為參考,介紹KeyStone 架構上支持IEEE1588 的硬件功能。同時,本文總結了在KeyStone1 芯片上實現(xiàn)IEEE1588方案需要注意的實現(xiàn)細節(jié),并對KeyStone2 芯片的1588 方案做初步介紹。
2 IEEE1588 時鐘同步原理
IEEE1588 使用精準時間協(xié)議PTP (Precision Timing Protocol) ,通過端到端的報文交互獲得時鐘參考信息,矯正本地時鐘頻率和相位。1588 協(xié)議基于兩個假設條件:第一,在時鐘源設備和受時鐘設備之間,網絡報文傳輸時間是對稱的。也就是說一個報文從時鐘源設備到受時鐘設備的傳輸時間等于報文從受時鐘設備到時鐘源設備的傳輸時間相同;第二,在PTP 報文交換過程當中,本地時鐘的漂移可以忽略不計。
實際部署時,時鐘源發(fā)送sync 消息,從設備根據(jù)多個sync 消息來計算本地時鐘的偏差。當從設備需要同步本地時鐘相位的時候,發(fā)送delay_req 消息,時鐘源發(fā)送delay_response,從設備根據(jù)獲得的4 個時間值來估計相位的偏差。
對于時鐘源設備,如果在發(fā)送sync 報文時所帶的時間戳就是報文發(fā)送時采集的準確時間,這種模式叫做single step 模式。如果發(fā)送sync 報文的時候所帶的時間戳只是一個近似時間,sync 報文發(fā)送的準確時間不能在發(fā)送sync 報文的時候獲得或者實時插入到sync 報文中,時鐘源設備需要發(fā)一個follow up消息報文,用來傳遞sync 報文的準確發(fā)送時間,這種模式叫做two step 模式。下面介紹的PHY 方案支持時鐘源single step,TI 的KeyStone 架構支持時鐘源two step 模式。
3 1588 芯片實現(xiàn)方案
根據(jù)打時間戳的方式不同,常見的1588 方案分為軟件時間戳方案和硬件時間戳方案。軟件方案通常是通過軟件手段在網絡報文的接收中記錄PTP 報文接收或發(fā)送時間,處理靈活,可以根據(jù)應用場景靈活處理PTP 協(xié)議報文,支持多種封裝格式。但是因為軟件中斷的時間抖動大,軟件時間戳方案的精度較差,在對精度要求不高的情況下使用。硬件方案通過特殊硬件解析PTP 報文,并用硬件記錄報文發(fā)送或接收時間。硬件方案精度高,但是需要特殊硬件解析 PTP 報文,在特殊場景中,例如 PTP over IPSec,報文經過加密,硬件無法解析PTP 報文。根據(jù)硬件方案獲取報文收發(fā)時間地點不同,硬件方案又分在PHY 上集成的1588 方案和MII 集成的1588 方案等。
下面先簡單介紹一下TI 基于PHY 的硬件解決方案作為參考,然后著重介紹KeyStone 架構上的基于MII 和PA 的1588 方案。
3.1 以太網PHY1588 方案 (DP83640)
圖2:DP83640 高精度時鐘同步硬件模塊
DP83640 [11] 是一款百兆網口PHY,集成了1588 功能,對外提供校準過的時鐘和PPS 信號,同時還支持同步以太網功能,直接從物理層獲得遠端時鐘。在支持同步以太網的情況下,使用1588 做相位調整,實驗表明最終的時鐘偏差精度可以達到納秒以下。
83640 timestamp 模塊維護一個本地的1588 計數(shù)器,包括32bit 的秒計數(shù)和30bit 的納秒計數(shù)。PTP 報文中要求的48bit 秒計數(shù)中的高16 位需要軟件維護。上層軟件在發(fā)送一個1588 報文的時候,時間戳中秒計數(shù)的高16 位由軟件設置的,低32 位設置為0。
報文解析模塊用來匹配解析PTP 報文。83640 支持1588 Annex D & E 和Annex F 格式的報文。當PTP 報文送至PHY 時,報文解析硬件檢測到這個PTP 報文的時鐘,在報文發(fā)出時,把本地的時間戳寫到PTP 報文里面,并修改相關的CRC 和CHKSUM 值。83640 支持1588 single step 模式的時鐘源。在報文接收方向,同樣有報文解析硬件。在解析到PTP 報文以后,接收報文的準確時間戳可以插入在報文里,或者通過控制接口上報。
83640 的1588 時鐘模塊對外提供頻率控制接口,軟件通過控制寄存器可以調整輸出的時鐘頻率。1588 時鐘模塊根據(jù)上層軟件的配置,對1588 時鐘模塊的輸入時鐘信號微調,然后分頻輸出。時鐘調整是通過調整每個時鐘周期的時間來實現(xiàn)的。在每個時鐘周期調整的單位是2-32ns。在正常模式下,這個調整機制用來補償本地時鐘和時鐘源的差距。在長期工作以后產生累積同步誤差時,軟件可以調整寄存器的值,在一定時間內,對頻率向上或者向下微調,以補償相位差距。當在相位補償以后,恢復正常頻率補償模式。
軟件協(xié)議棧通過協(xié)議處理以后獲得本地的時鐘與時鐘源的絕對時間差值,然后通過寄存器調整本地絕對時間戳。在修改時,軟件把絕對時間差值寫入寄存器,然后使能修改。這種方法適用初始同步時單次校正本地絕對時間戳。如在正常工作中出現(xiàn)累積相位偏差,應該使用前面介紹的微調方法,避免輸出時鐘抖動。
應用層通過設置83640 的trigger control 模塊來控制輸出PPS 或者其他同步信號。應用可以設置在timestamp 的哪些具體時刻某個GPIO 管腳可以發(fā)生反轉。trigger 的輸出可以線與并輸出到GPIO 管腳,通過線與可以是輸出復雜的周期波形。
83640 方案實現(xiàn)簡單,直接輸出矯正時鐘及相位信號,但是對于復雜傳輸場景支持困難;而且相比不包含IEEE1588 功能的PHY 芯片,83640 的成本要高出許多。
3.2 KeyStone1 1588 方案
KeyStone 架構是TI 推出的高性能多核架構,現(xiàn)在已經有KeyStone1 和KeyStone2 兩種架構。KeyStone 架構中也包含了對IEEE1588 功能的支持。
KeyStone1 系列芯片的1588 方案包括兩個硬件部分:記錄時間戳,發(fā)送同步脈沖。KeyStone1 支持two step 的時間戳模式,同時也能支持1588 協(xié)議中Annex D & E 和Annex F規(guī)定的PTP 報文解析。
對于記錄時間戳,KeyStone1 對于Annex D & E 和Annex F 采用不同的硬件來支持。Annex D & E 使用以太網協(xié)處理(NetCP)里面的包加速器(PA)來支持;Annex F 報文使用以太網交換機(GE Switch)里面的CPTS 模塊來支持 [12-13] 。
對于同步信號的輸出,KeyStone1 里面需要通過Timer64[14]來完成。
軟件通過CPTS 或者PA 獲取到時間戳后,計算需要調整的頻率和相位,然后通過配置Timer64 的周期寄存器來更改Timer64 的輸出周期,調整輸出的相位信息;通過SPI 接口調整外部的VCXO 的輸出頻率,矯正本地時鐘頻率。
3.2.1 Annex D & E PTP 報文處理
PA 內部會維護一個48bit 的計時器,該計時器的頻率與PA 的頻率一致(一般是
350MHz)。由于Annex D & E 報文的承載方式為IP/UDP 承載(報文模式為IPv4 和IPv6),當用戶收到或者發(fā)送一個 IPv4 或 IPv6 的 PTP 報文時,在 PA 側會記錄一個報文接收(或發(fā)送)的時間戳,這個時間戳只有32bit(為48bit 中的低32bit)。這個時間戳保存在用戶指定的QMSS 的某個Queue 的描述符里面。
用戶從Queue 中提取出該描述符:如果是接收,用戶可根據(jù)描述符信息解析報文類型,獲取報文內容,同時讀取32bit 時間戳并換算成絕對時間。如果是發(fā)送,用戶只需讀取時間戳,轉換為1588 48bit 絕對時間后按照1588 two step 的規(guī)則再做報文發(fā)送。
3.2.2 Annex F PTP 報文處理
GE Switch 模塊上的CPTS 模塊支持對1588 Annex F(以太網封裝)的PTP 報文解析,
支持VLAN。在CPSW 邏輯匹配到PTP 報文時,會觸發(fā)一個硬件信號給CPTS 模塊用來觸發(fā)時間戳獲取。
CPTS 的時間戳模塊維護一個32bit 的timer,根據(jù)配置,這個timer 可以工作在二分之一CPU 主頻上。這個timer 是一個free run timer。軟件通過這個timer 換算得到1588 的32bit 納秒時鐘和48bit 秒時鐘。因為timer 只有32bit,所以軟件需要處理timer 反轉事件,用來維護秒信息。CPTS 得到時間事件以后,會將PTP 報文的消息類型和Sequence ID 等信息壓入EVENT FIFO 中,并觸發(fā)中斷讓用戶處理。
3.2.3 同步信號的產生
同步信號需要通過Timer64 來產生。由于Timer64,PA 以及CPTS 都是共用KeyStone 外部的VCXO,因此從時間源上保證各個計時器之間沒有累積誤差。這樣計算出來的各個絕對時間也是固定不變的。
關于同步信號的時間戳,有兩點需要說明:
1. KeyStone 芯片的1588 功能不維護絕對時間戳,時間信息是從CPTS timer 或者PA 的timer 換算出來。這樣也不支持對1588 報文發(fā)送時實時修改,所以在用KeyStone 芯片做時鐘源時,芯片只支持two step 模式。
2. 輸出時鐘方案需使用KeyStone1 芯片上的定時器的輸出。因為CPTS(或PA)上打時間戳的計數(shù)器和定時器使用的時鐘雖然是同源,但是相位不同,產生的PPS 時鐘時,需要軟件參與校正兩個計數(shù)器,并對記錄相應的相位差。具體實現(xiàn)時,需要首先對CPTS(或PA)里面的計數(shù)器和選定的Timer64 計數(shù)器相差相位進行計算。軟件首先操作CPTS(或PA)寄存器,觸發(fā)一個CPTS 時間戳記錄事件(或者發(fā)起一個讀取PA 時間戳寄存器的命令),然后馬上讀取timer64 的值??紤]到cache 問題以及硬件總線上的競爭可能性,軟件應在一個循環(huán)內多次執(zhí)行這個操作,保證執(zhí)行程序加載到 L1 cache 中,兩個時鐘之間的相位差應該可以通過循環(huán)幾次獲得的值平均得到。
3.3 KeyStone2 1588 方案
KeyStone2 架構的TI 芯片對1588 的支持做了改進和增強。CPTS 模塊支持同步以太網(Annex F)和1588 Annex D & E 的報文。在KeyStone2 芯片中,PPS 輸出是直接由CPTS邏輯驅動的。軟件通過設置相關寄存器設置下一個PPS 輸出時timestamp 的值,當計數(shù)器跑到設置的值的時候,硬件觸發(fā)PPS 信號輸出。
相比KeyStone1 的方案,KeyStone2 的主要優(yōu)點在于:
1. 方案簡單,涉及到的硬件和底層器件更少
KeyStone1 需要PA,CPTS,Timer64,QMSS 等外設和加速器來支持整套方案,而KeyStone2 只需要CPTS 一個模塊就可以支持Annex D & E 和Annex F 的PTP 報文,同時也支持同步信號的輸出;
2. 時間戳個數(shù)減少,降低了計算復雜度
KeyStone1 里面需要計算包括PA 時間戳,CPTS 時間戳以及Timer64 的時間戳在內的共計3 個時間戳與PTP 報文的真實時間的絕對時間相差;KeyStone2 里面只有CPTS一個時間戳需要計算;
3. 方案全由硬件邏輯完成,徹底避免了軟件干預同時也提高了同步精度
KeyStone 1 的方案由于記錄時間戳的時間源(PA 和CPTS)與發(fā)送同步信號的時間源(Timer64)是不同的,因此在系統(tǒng)運行的時候需要軟件計算不同時間源的絕對時間差,這樣才能在后面的時間同步中精確調整時間。這里有軟件讀取并計算時間差的工作,這部分工作不可避免的存在軟件誤差,雖然可以通過多次計算取平均等統(tǒng)計手段縮小誤差,但還是對精度存在一定的影響。KeyStone2 中,記錄時間戳和發(fā)送同步脈沖都在CPTS中,因此無需計算兩者的時間差,這樣就避免了軟件干預,也提高了同步精度。
4 KeyStone1 1588 方案實現(xiàn)
前文從原理和方案上描述了KeyStone 中如何實現(xiàn)1588 方案,本章節(jié)以KeyStone1 為例,從技術細節(jié)方面來闡述1588 實現(xiàn)方式。
以Annex F 的PTP 報文為例,1588 的實現(xiàn)主要分為配置Gbe Switch[3]和計算時間偏差兩部分。整體流程如下:當接收(或發(fā)送)一個802.3 的PTP 報文時,Gbe Switch 會自動偵測到PTP 報文的接收(或發(fā)送)時間,并將該時間戳記錄下來;用戶根據(jù)記錄下來的時間戳,配置Timer64 的時間輸出信號,獲取當前需要調整的時間偏差。
4.1 Gbe Switch 配置
KeyStone1 中的 Gbe Switch 是一個集成了1588 PTP 報文檢測的交換機,其中CPTS 用來記錄時間戳,CPSW 用來偵測1588 報文。因此1588 實現(xiàn)方式主要通過配置CPTS 和配置CPSW 來實現(xiàn)。
4.1.1 CPTS 配置
CPTS 是KeyStone1 架構中Gbe Switch 中的一個模塊,請參考文獻 [12] 中的2.3.5 章節(jié)。該章節(jié)詳細介紹了CPTS 模塊的工作場景和寄存器列表。
CPTS 配置步驟如下:
1) 復位CPTS 模塊;
CPTS 的復位通過將TS_CONTROL 寄存器中的CPTS_EN 位域寫0 來實現(xiàn)。
2) 選擇CPTS 時鐘源;
CPTS 時鐘源在CPTS_RFTCLK_SEL 寄存器中選擇,有四種時鐘源可以選擇:SYSCLK3,SYSCLK4,TIMI0 和TIMI1。其中SYSCLK3 是1/2 CPU 時鐘,SYSCLK4是1/3 CPU 時鐘,TIMI0 和TIMI1 分別是兩個外部時鐘輸入pin 腳,原本是作為Timer64 的輸入時鐘,這里也可以復用為CPTS 的時鐘源。
3) 使能CPTS 模塊;
CPTS 的使能通過將TS_CONTROL 寄存器中的CPTS_EN 位域寫1 來實現(xiàn)。當CPTS使能后,CPTS 內部的時間記數(shù)器就會根據(jù)輸入時鐘的頻率開始記數(shù)。
4) 使能CPTS 中斷;
CPTS 模塊中斷使能通過配置INT_EABLE 來完成。CPTS 可以產生多種事件的中斷,主要有:
· Push 中斷:用戶手動觸發(fā)一個 Push 事件,該事件會記錄當前 CPTS 的時間戳,并觸發(fā)中斷;
· 記數(shù)器翻轉中斷:當CPTS 的32bit 記數(shù)器從0xFFFFFFFF 變?yōu)?x00000000 時會自動觸發(fā)一個中斷;
· 記數(shù)器半翻轉中斷:當CPTS 的32bit 記數(shù)器從0x7FFFFFFF 變?yōu)?x80000000時會自動觸發(fā)一個中斷;
· 以太網PTP 報文接收中斷:當接受1 個以太網PTP 報文時觸發(fā)中斷;
· 以太網PTP 報文發(fā)送中斷:當發(fā)送1 個以太網PTP 報文時觸發(fā)中斷;
4.1.2 CPSW 的配置
CPSW 是屬于Switch 的組成部分,可以通過配置CPSW 讓Switch 識別PTP 報文。CPSW 的報文識別功能也通過配置寄存器的方式來實現(xiàn)。需要說明的是,由于Switch 對外有兩個接口(port1 和port2),因此對應的寄存器也有兩份。其寄存器列表如下圖所示:
配置步驟如下:
1)配置LTYPE;
每種以太網報文都有一個類型,CPSW 將根據(jù)這個類型配置偵測用戶需要的報文。根據(jù)以太網報文的定義,IEEE1588 的PTP 報文的類型為0x88F7。用戶需要將這個類型寫入Pn_TS_SEQ_LTYPE 中(n 表示端口號)。
2)配置VLAN ID(如果使能了VLAN 報文的話);
用戶可以定義需要的VLAN ID,在Pn_TS_VLAN 寄存器里面配置。
3)使能CPSW 檢測模塊;
CPSW 的使能包括接收和發(fā)送的使能,需要用戶配置Pn_TS_CTL 里面對應的位域。
4.2 時間偏差的計算和調整
Gbe Switch 完成對PTP 報文的時間戳記錄之后,用戶需要根據(jù)時間戳計算當前需要調整的時間數(shù)。由于真實系統(tǒng)時間是基于Timer64 的時間戳,因此用戶在計算CPTS 的時間戳之后需要換算到真實系統(tǒng)時間。
為了方便說明和計算,在下面的配置中,假定CPU 時鐘為1GHz,CPTS 采用1/3 CPU 時鐘,Timer64 的定時周期為1ms。
4.3 KeyStone1 1588 方案的說明
KeyStone1 的1588 方案主要依靠配置Gbe Switch 和軟件換算時間戳兩部分來完成。需要強調的是,在軟件換算時間的部分,這涉及到具體的1588 時間戳計算算法?;趹玫男枨蠛途刃枨螅S多算法往往比這里介紹的更復雜,但是原理上來說都是相同的。這也是KeyStone架構使用軟件實現(xiàn) 1588 部分的一個優(yōu)勢,用戶可以靈活使用軟件功能來提高 1588 的同步精度。
5 小結
從目前來看,IEEE1588v2 標準已經越來越多的應用在通訊網絡中。由于IEEE1588v2 標準也還在不斷的完善中,因此從技術角度出發(fā),熟悉1588 同步原理,了解并設計不同場景中的1588 方案,不論是從芯片設計角度或者基站整體解決方案角度來說,都是十分必要的。
本文簡要的介紹了IEEE1588 的原理,并分類分析了1588 同步功能在PHY 以及KeyStone1 和KeyStone2 芯片上的應用方案。以太網PHY 實現(xiàn)1588 同步的精度最高,但是成本相對比較昂貴;德州儀器的KeyStone 架構上集成了支持1588 的Switch,用戶可以通過KeyStone 架構靈活實現(xiàn)1588 同步功能,也為用戶的方案設計提供了更多的選擇。