陳飛,張天宏,張文豪
(南京航空航天大學 江蘇省航空動力系統重點實驗室,南京 210016)
Zynq平臺的TTP/C總線控制器同步算法設計
陳飛,張天宏,張文豪
(南京航空航天大學江蘇省航空動力系統重點實驗室,南京210016)
為了保證TTP/C集群內各個節點之間時鐘基準的一致性,設計了一種基于Welch-lynch中值增量修正法的時鐘同步算法,充分利用了Zynq芯片的可編程邏輯單元和程序處理單元,在自主設計的TTP/C總線控制器上對時鐘同步算法進行實驗。實驗表明,所設計的時鐘同步算法能夠保證各個測試節點的時鐘同步誤差在±30μs范圍內。
時鐘同步;Zynq;TTP/C;Welch-lynch
由歐洲委員會資助開發的分布式實時容錯系統TTA (Time-Triggered Architecture,時間觸發構架),不僅解決了以往事件觸發方式因隨機發送數據引起的可預測性低的問題,而且很好地解決了多任務數據傳輸時存在的通信延遲和時間偏移不確定等問題。1993年,在TTA架構的基礎上,TTP/C(Time-Triggered Protocol/Automotive Class C,時間觸發協議C類標準)被首次提出,其是一種用于互聯電子模塊的、分布式容錯實時系統的通信協議,主要的面向對象是航空航天領域[1]。與面向汽車電子領域的TTP/A協議相比,TTP/C協議規范在安全性、可用性和可組合性等方面具有更加嚴苛的要求,更符合分布式實時系統對數據總線的性能要求。
節點間統一的時鐘基準是TTP/C集群正常運行的基本前提,但溫度、電壓的變化和晶振老化等因素會使時鐘源的頻率偏離標稱值。此外,單粒子反轉事件也可能會導致某個節點本地時鐘發生突變[2-4]。這些因素都會引起集群失去同步、發生時間槽混疊,進而導致節點之間通信失敗。為了保證TTP/C集群各個節點之間工作時鐘的一致性,本文設計了一種基于Welch-Lynch中值增量修正法的同步算法,以此修正各節點的本地時間,實現各節點的全局時間準確可靠,保證時間觸發集群的通信可靠性和實時性。
目前,時鐘同步算法有很多種,如區間時鐘同步法、概率時鐘同步法和Welch-Lynch時鐘同步法等[2,4]。其中,基于中值平均值的Welch-Lynch同步算法具有良好的單節點容錯功能且易于實現,本文采用此算法,下面對該方法進行詳細介紹。
假設節點i在t時刻由TTP/C總線獲得其他(n-1)個節點的本地時間pci(t),并在收到這些時間的時刻與節點i的本地時間作差得到(n-1)個時鐘誤差Δpcij(t)(1≤j ≤(n-1))。將這(n-1)個時鐘誤差使用冒泡法進行排序后,放到數組A[n-1]中,其中A[0]≤A[1]≤…≤A[n-2]。假設集群最多可容忍f個節點的故障,則節點i相對于全局時鐘的誤差為:

其中,為了保證能夠容忍f個節點的故障,同步總節點數n≥(3f+1)。根據TTP/C協議的單節點故障要求,同步算法只能容忍單節點故障,當節點數少于4時,該算法不再具有同步能力[2,4]。
基于Welch-lynch時鐘同步法,本文利用Zynq的可編程邏輯單元實現TTP/C總線控制器各節點的時鐘同步需求[5],如圖1所示。1 MHz信號發生器利用100 MHz的時鐘輸入信號,依據時鐘同步算法模塊提供的臨時分頻系數計算產生標準1 MHz的時鐘信號,供本地時鐘計數器產生本地時鐘。

圖1 時鐘同步模塊架構圖
Welch-lynch算法只是在理論上給出了一種計算節點本地時鐘和全局時鐘誤差的方法,在具體實現時,還需要根據這個誤差對節點的本地時鐘進行校正。本文設計了一個臨時分頻系數,在100 MHz時鐘驅動下,對本地時鐘計算的標準1 MHz時鐘脈沖進行修正,如圖2所示。當不存在時間誤差時,臨時分頻系數為100,1 MHz信號發生器在100 MHz時鐘驅動下計數100次產生1個脈沖信號;當本地時鐘比全局時鐘快時,臨時分頻系數增大,1 MHz信號發生器產生的1 MHz時鐘變慢,本地時鐘與全局時鐘的誤差將會減小,直到不存在誤差;反之臨時分頻系數減小,誤差降低。

圖2 標準脈沖頻率修正原理
因此臨時分頻系數的產生對時鐘同步的效果至關重要,時鐘誤差計算模塊的工作原理如圖3所示。
當(n-1)個時鐘誤差計算結束時,使能冒泡排序功能,將時鐘誤差數組進行升序排列,然后采用Welch-lynch算法計算時鐘誤差,并產生臨時分頻系數,對本地時鐘進行校正。需要注意的是,受到時序的限制,冒泡排序法不能在一個時鐘周期內完成,需要經過多個時鐘周期分步實現。針對4個節點時的冒泡排序程序代碼如下:

圖3 時鐘誤差計算模塊工作原理

針對所設計的時鐘同步算法,本文設計了一個包含上位機和4個測試節點的驗證平臺。在實驗測試時,通過上位機界面對比集群中各個節點在未使用同步算法和使用同步算法的本地時鐘和全局時鐘的誤差,來證明本文設計的同步時鐘算法的有效性,圖4為未使用同步算法時各個節點的工作狀態,圖5為使用本文所設計的同步算法后各個節點的工作狀態。

圖4 未使用同步算法的同步誤差測試界面

圖5 添加同步算法的時鐘誤差
圖4中集群運行約13 min后,各個節點的本地時鐘與全局時鐘誤差一直增大。由于各個節點誤差值不同,所以圖中各個節點的Y軸范圍也不同。為了能夠更直觀地看出變化趨勢,在表1中給出了和圖4對應時間段每隔10 s的同步誤差。由圖4和表1可以得出以下結論:
①在不添加同步算法的條件下,隨著時間的推移,本地時鐘與全局時鐘的誤差隨著時間的推移逐漸增大,這在一定程度上也體現了各個節點之間的本地時鐘誤差在逐漸增大;
②各個節點相對全局時鐘誤差正負和大小均不同,這是由于各個節點所使用的時鐘晶振的穩定度不同而造成的;
③對比向負方向偏移量最大的節點3和向正方向偏移量最大的節點1可知,在150 s內,兩個節點的時鐘偏差最大可達:
(140-114)+(366-298)=94μs
則單位時間的最大偏差量為:


表1 每隔10 s各個節點的同步誤差(單位:μs)
43
Synchronization Algorithm for TTP/C Bus Controller Based on Zynq
Chen Fei,Zhang Tianhong,Zhang Wenhao
(Jiangsu Province Key Laboratory of Aerospace Power System,Nanjing University of Aeronautics and Astronautics,Nanjing 210016,China)
A clock synchronization algorithm based on Welch-lynch is designed to ensure that the clock error between each node in the TTP/C cluster is within the range of requirements.The clock synchronization algorithm is tested on the TTP/C bus controller which is developed on the program and logic processing units of Zynq chip.The experiment results show that the clock error between each node is within±30μs,and the clock synchronization algorithm is effective.
clock synchronization;Zynq;TTP/C;Welch-lynch
V233.7
A