陳飛,張?zhí)旌?張文豪
(南京航空航天大學(xué) 江蘇省航空動(dòng)力系統(tǒng)重點(diǎn)實(shí)驗(yàn)室,南京 210016)
Zynq平臺(tái)的TTP/C總線控制器同步算法設(shè)計(jì)
陳飛,張?zhí)旌?張文豪
(南京航空航天大學(xué)江蘇省航空動(dòng)力系統(tǒng)重點(diǎn)實(shí)驗(yàn)室,南京210016)
為了保證TTP/C集群內(nèi)各個(gè)節(jié)點(diǎn)之間時(shí)鐘基準(zhǔn)的一致性,設(shè)計(jì)了一種基于Welch-lynch中值增量修正法的時(shí)鐘同步算法,充分利用了Zynq芯片的可編程邏輯單元和程序處理單元,在自主設(shè)計(jì)的TTP/C總線控制器上對(duì)時(shí)鐘同步算法進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)表明,所設(shè)計(jì)的時(shí)鐘同步算法能夠保證各個(gè)測(cè)試節(jié)點(diǎn)的時(shí)鐘同步誤差在±30μs范圍內(nèi)。
時(shí)鐘同步;Zynq;TTP/C;Welch-lynch
由歐洲委員會(huì)資助開(kāi)發(fā)的分布式實(shí)時(shí)容錯(cuò)系統(tǒng)TTA (Time-Triggered Architecture,時(shí)間觸發(fā)構(gòu)架),不僅解決了以往事件觸發(fā)方式因隨機(jī)發(fā)送數(shù)據(jù)引起的可預(yù)測(cè)性低的問(wèn)題,而且很好地解決了多任務(wù)數(shù)據(jù)傳輸時(shí)存在的通信延遲和時(shí)間偏移不確定等問(wèn)題。1993年,在TTA架構(gòu)的基礎(chǔ)上,TTP/C(Time-Triggered Protocol/Automotive Class C,時(shí)間觸發(fā)協(xié)議C類標(biāo)準(zhǔn))被首次提出,其是一種用于互聯(lián)電子模塊的、分布式容錯(cuò)實(shí)時(shí)系統(tǒng)的通信協(xié)議,主要的面向?qū)ο笫呛娇蘸教祛I(lǐng)域[1]。與面向汽車電子領(lǐng)域的TTP/A協(xié)議相比,TTP/C協(xié)議規(guī)范在安全性、可用性和可組合性等方面具有更加嚴(yán)苛的要求,更符合分布式實(shí)時(shí)系統(tǒng)對(duì)數(shù)據(jù)總線的性能要求。
節(jié)點(diǎn)間統(tǒng)一的時(shí)鐘基準(zhǔn)是TTP/C集群正常運(yùn)行的基本前提,但溫度、電壓的變化和晶振老化等因素會(huì)使時(shí)鐘源的頻率偏離標(biāo)稱值。此外,單粒子反轉(zhuǎn)事件也可能會(huì)導(dǎo)致某個(gè)節(jié)點(diǎn)本地時(shí)鐘發(fā)生突變[2-4]。這些因素都會(huì)引起集群失去同步、發(fā)生時(shí)間槽混疊,進(jìn)而導(dǎo)致節(jié)點(diǎn)之間通信失敗。為了保證TTP/C集群各個(gè)節(jié)點(diǎn)之間工作時(shí)鐘的一致性,本文設(shè)計(jì)了一種基于Welch-Lynch中值增量修正法的同步算法,以此修正各節(jié)點(diǎn)的本地時(shí)間,實(shí)現(xiàn)各節(jié)點(diǎn)的全局時(shí)間準(zhǔn)確可靠,保證時(shí)間觸發(fā)集群的通信可靠性和實(shí)時(shí)性。
目前,時(shí)鐘同步算法有很多種,如區(qū)間時(shí)鐘同步法、概率時(shí)鐘同步法和Welch-Lynch時(shí)鐘同步法等[2,4]。其中,基于中值平均值的Welch-Lynch同步算法具有良好的單節(jié)點(diǎn)容錯(cuò)功能且易于實(shí)現(xiàn),本文采用此算法,下面對(duì)該方法進(jìn)行詳細(xì)介紹。
假設(shè)節(jié)點(diǎn)i在t時(shí)刻由TTP/C總線獲得其他(n-1)個(gè)節(jié)點(diǎn)的本地時(shí)間pci(t),并在收到這些時(shí)間的時(shí)刻與節(jié)點(diǎn)i的本地時(shí)間作差得到(n-1)個(gè)時(shí)鐘誤差Δpcij(t)(1≤j ≤(n-1))。將這(n-1)個(gè)時(shí)鐘誤差使用冒泡法進(jìn)行排序后,放到數(shù)組A[n-1]中,其中A[0]≤A[1]≤…≤A[n-2]。假設(shè)集群最多可容忍f個(gè)節(jié)點(diǎn)的故障,則節(jié)點(diǎn)i相對(duì)于全局時(shí)鐘的誤差為:
其中,為了保證能夠容忍f個(gè)節(jié)點(diǎn)的故障,同步總節(jié)點(diǎn)數(shù)n≥(3f+1)。根據(jù)TTP/C協(xié)議的單節(jié)點(diǎn)故障要求,同步算法只能容忍單節(jié)點(diǎn)故障,當(dāng)節(jié)點(diǎn)數(shù)少于4時(shí),該算法不再具有同步能力[2,4]。
基于Welch-lynch時(shí)鐘同步法,本文利用Zynq的可編程邏輯單元實(shí)現(xiàn)TTP/C總線控制器各節(jié)點(diǎn)的時(shí)鐘同步需求[5],如圖1所示。1 MHz信號(hào)發(fā)生器利用100 MHz的時(shí)鐘輸入信號(hào),依據(jù)時(shí)鐘同步算法模塊提供的臨時(shí)分頻系數(shù)計(jì)算產(chǎn)生標(biāo)準(zhǔn)1 MHz的時(shí)鐘信號(hào),供本地時(shí)鐘計(jì)數(shù)器產(chǎn)生本地時(shí)鐘。
圖1 時(shí)鐘同步模塊架構(gòu)圖
Welch-lynch算法只是在理論上給出了一種計(jì)算節(jié)點(diǎn)本地時(shí)鐘和全局時(shí)鐘誤差的方法,在具體實(shí)現(xiàn)時(shí),還需要根據(jù)這個(gè)誤差對(duì)節(jié)點(diǎn)的本地時(shí)鐘進(jìn)行校正。本文設(shè)計(jì)了一個(gè)臨時(shí)分頻系數(shù),在100 MHz時(shí)鐘驅(qū)動(dòng)下,對(duì)本地時(shí)鐘計(jì)算的標(biāo)準(zhǔn)1 MHz時(shí)鐘脈沖進(jìn)行修正,如圖2所示。當(dāng)不存在時(shí)間誤差時(shí),臨時(shí)分頻系數(shù)為100,1 MHz信號(hào)發(fā)生器在100 MHz時(shí)鐘驅(qū)動(dòng)下計(jì)數(shù)100次產(chǎn)生1個(gè)脈沖信號(hào);當(dāng)本地時(shí)鐘比全局時(shí)鐘快時(shí),臨時(shí)分頻系數(shù)增大,1 MHz信號(hào)發(fā)生器產(chǎn)生的1 MHz時(shí)鐘變慢,本地時(shí)鐘與全局時(shí)鐘的誤差將會(huì)減小,直到不存在誤差;反之臨時(shí)分頻系數(shù)減小,誤差降低。
圖2 標(biāo)準(zhǔn)脈沖頻率修正原理
因此臨時(shí)分頻系數(shù)的產(chǎn)生對(duì)時(shí)鐘同步的效果至關(guān)重要,時(shí)鐘誤差計(jì)算模塊的工作原理如圖3所示。
當(dāng)(n-1)個(gè)時(shí)鐘誤差計(jì)算結(jié)束時(shí),使能冒泡排序功能,將時(shí)鐘誤差數(shù)組進(jìn)行升序排列,然后采用Welch-lynch算法計(jì)算時(shí)鐘誤差,并產(chǎn)生臨時(shí)分頻系數(shù),對(duì)本地時(shí)鐘進(jìn)行校正。需要注意的是,受到時(shí)序的限制,冒泡排序法不能在一個(gè)時(shí)鐘周期內(nèi)完成,需要經(jīng)過(guò)多個(gè)時(shí)鐘周期分步實(shí)現(xiàn)。針對(duì)4個(gè)節(jié)點(diǎn)時(shí)的冒泡排序程序代碼如下:
圖3 時(shí)鐘誤差計(jì)算模塊工作原理
針對(duì)所設(shè)計(jì)的時(shí)鐘同步算法,本文設(shè)計(jì)了一個(gè)包含上位機(jī)和4個(gè)測(cè)試節(jié)點(diǎn)的驗(yàn)證平臺(tái)。在實(shí)驗(yàn)測(cè)試時(shí),通過(guò)上位機(jī)界面對(duì)比集群中各個(gè)節(jié)點(diǎn)在未使用同步算法和使用同步算法的本地時(shí)鐘和全局時(shí)鐘的誤差,來(lái)證明本文設(shè)計(jì)的同步時(shí)鐘算法的有效性,圖4為未使用同步算法時(shí)各個(gè)節(jié)點(diǎn)的工作狀態(tài),圖5為使用本文所設(shè)計(jì)的同步算法后各個(gè)節(jié)點(diǎn)的工作狀態(tài)。
圖4 未使用同步算法的同步誤差測(cè)試界面
圖5 添加同步算法的時(shí)鐘誤差
圖4中集群運(yùn)行約13 min后,各個(gè)節(jié)點(diǎn)的本地時(shí)鐘與全局時(shí)鐘誤差一直增大。由于各個(gè)節(jié)點(diǎn)誤差值不同,所以圖中各個(gè)節(jié)點(diǎn)的Y軸范圍也不同。為了能夠更直觀地看出變化趨勢(shì),在表1中給出了和圖4對(duì)應(yīng)時(shí)間段每隔10 s的同步誤差。由圖4和表1可以得出以下結(jié)論:
①在不添加同步算法的條件下,隨著時(shí)間的推移,本地時(shí)鐘與全局時(shí)鐘的誤差隨著時(shí)間的推移逐漸增大,這在一定程度上也體現(xiàn)了各個(gè)節(jié)點(diǎn)之間的本地時(shí)鐘誤差在逐漸增大;
②各個(gè)節(jié)點(diǎn)相對(duì)全局時(shí)鐘誤差正負(fù)和大小均不同,這是由于各個(gè)節(jié)點(diǎn)所使用的時(shí)鐘晶振的穩(wěn)定度不同而造成的;
③對(duì)比向負(fù)方向偏移量最大的節(jié)點(diǎn)3和向正方向偏移量最大的節(jié)點(diǎn)1可知,在150 s內(nèi),兩個(gè)節(jié)點(diǎn)的時(shí)鐘偏差最大可達(dá):
(140-114)+(366-298)=94μs
則單位時(shí)間的最大偏差量為:
表1 每隔10 s各個(gè)節(jié)點(diǎn)的同步誤差(單位:μ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