黃超,林川
(南京郵電大學(xué)通信與信息工程學(xué)院,江蘇 南京,210003)
隨著科技的不斷進(jìn)步,人們對(duì)無(wú)線通信的需求不斷增加,各種無(wú)線通信系統(tǒng)得到了迅速普及并作為通信領(lǐng)域研究的熱點(diǎn)得以快速持續(xù)的發(fā)展。與傳統(tǒng)的無(wú)線移動(dòng)通信網(wǎng)絡(luò)相比,無(wú)線自組網(wǎng),即Ad Hoc網(wǎng)絡(luò),沒(méi)有中心控制器,所有節(jié)點(diǎn)分布式運(yùn)行,可以隨時(shí)建立和拆除,所有節(jié)點(diǎn)共同承擔(dān)網(wǎng)絡(luò)的構(gòu)造和管理功能,具有很強(qiáng)的容錯(cuò)性和魯棒性。
同所有的分布式系統(tǒng)一樣,網(wǎng)絡(luò)各節(jié)點(diǎn)的時(shí)鐘同步是Ad Hoc網(wǎng)絡(luò)技術(shù)研究中的一個(gè)重要問(wèn)題。因?yàn)榫W(wǎng)絡(luò)節(jié)點(diǎn)內(nèi)部的硬件時(shí)鐘都具有一定的誤差,因此節(jié)點(diǎn)的本地時(shí)間存在有偏差,然而Ad Hoc網(wǎng)絡(luò)的許多應(yīng)用尤其是在協(xié)同工作時(shí)需要全網(wǎng)節(jié)點(diǎn)或一定范圍內(nèi)的節(jié)點(diǎn)具有一定精度要求的本地時(shí)間,因此Ad Hoc網(wǎng)絡(luò)需要時(shí)鐘同步而且不同的實(shí)際應(yīng)用有不同的同步精度要求。
IEEE 1588的基本功能是使分布式網(wǎng)絡(luò)內(nèi)的最精確時(shí)鐘與其他時(shí)鐘保持同步,它定義了一種精確時(shí)間協(xié)議PTP(Precision Time Protocol),用于對(duì)標(biāo)準(zhǔn)以太網(wǎng)或其他采用多播技術(shù)的分布式總線系統(tǒng)中的傳感器、執(zhí)行器以及其他終端設(shè)備中的時(shí)鐘進(jìn)行亞微秒級(jí)同步。本文提出了一種實(shí)現(xiàn)方案,將IEEE 1588標(biāo)準(zhǔn)的PTP協(xié)議(Precise Time Protocol)應(yīng)用于Ad Hoc網(wǎng)絡(luò),以達(dá)到高精度的網(wǎng)絡(luò)時(shí)鐘同步。
本設(shè)計(jì)采用Xilinx公司的FPGA開(kāi)發(fā)板ML410,PTP節(jié)點(diǎn)的功能實(shí)現(xiàn)就是在FPGA開(kāi)發(fā)板上完成的。EDK提供了眾多的IP核,這些IP核可以直接實(shí)現(xiàn)用戶所需的功能,并能協(xié)同工作。本設(shè)計(jì)還創(chuàng)建了一個(gè)自定義IP核,此IP核實(shí)現(xiàn)了PTP節(jié)點(diǎn)的時(shí)間戳獲取等功能。各IP核連接情況如圖1所示。
圖1 PTP節(jié)點(diǎn)的設(shè)計(jì)
PTP節(jié)點(diǎn)的功能實(shí)現(xiàn)包括硬件和軟件2部分。軟件部分在uClinux中實(shí)現(xiàn),本設(shè)計(jì)將uClinux移植到FPGA開(kāi)發(fā)板中。軟件部分主要完成的任務(wù)有:包括BMC算法在內(nèi)的協(xié)議引擎狀態(tài)機(jī)的實(shí)現(xiàn);消息的組裝、發(fā)送、接收和拆解;向FPGA硬件寫(xiě)入和讀取需要的時(shí)間戳。硬件部分的主要功能有:獲取收發(fā)消息的時(shí)間戳,計(jì)算時(shí)間偏移量和實(shí)現(xiàn)頻率調(diào)節(jié)。
由于開(kāi)發(fā)板上沒(méi)有無(wú)線收發(fā)設(shè)備,本設(shè)計(jì)使用了Intersil公司的PRISM2系列的無(wú)線網(wǎng)卡,無(wú)線網(wǎng)卡的MAC層控制芯片為HFA3841。本設(shè)計(jì)中將無(wú)線網(wǎng)卡通過(guò)PCI接口與FPGA相連接,將MAC層芯片的6個(gè)管腳通過(guò)飛線與FPGA的用戶引腳相連接,這6個(gè)管腳分別為:TXDATA、TXCLK、TX_RDY、RXDATA、RXCLK和RX_RDY。管腳的時(shí)序圖如圖2、圖3所示。
圖2 發(fā)送數(shù)據(jù)時(shí)序圖
圖3 接收數(shù)據(jù)時(shí)序圖
發(fā)送數(shù)據(jù)和接收數(shù)據(jù)時(shí)分別同步與TXCLK和RXCLK兩個(gè)時(shí)鐘,發(fā)送數(shù)據(jù)時(shí)TX_RDY持續(xù)為“1”,接收數(shù)據(jù)時(shí)RX_RDY持續(xù)拉高,這兩個(gè)信號(hào)可以用來(lái)指示數(shù)據(jù)的發(fā)送和接收,所以可以根據(jù)這兩個(gè)信號(hào)來(lái)獲取時(shí)間戳。
本設(shè)計(jì)的軟件部分在uClinux中實(shí)現(xiàn),其主要流程如下:
設(shè)備啟動(dòng)后或收到系統(tǒng)的初始化時(shí)鐘命令時(shí),時(shí)鐘系統(tǒng)處于PTP_INITIALI- ZING狀態(tài),它需要完成定時(shí)器隊(duì)列的初始化,為各數(shù)據(jù)集分配緩沖區(qū)、時(shí)鐘端口配置、通信協(xié)議棧初始化等操作。完成初始化操作后,系統(tǒng)應(yīng)進(jìn)入PTP_LISTENING狀態(tài),偵聽(tīng)網(wǎng)絡(luò)上的PTP消息。為了防止系統(tǒng)長(zhǎng)期處于PTP_LISTENING狀態(tài),設(shè)定了偵聽(tīng)外來(lái)Sync消息的定時(shí)器,時(shí)間為20s,如果定時(shí)器超時(shí),系統(tǒng)自動(dòng)進(jìn)入到主時(shí)鐘狀態(tài)。在偵聽(tīng)時(shí)如果通信端口收到相應(yīng)的PTP 消息,應(yīng)該進(jìn)行最佳主時(shí)鐘算法,如果發(fā)現(xiàn)本地時(shí)鐘系統(tǒng)是最優(yōu)的,那么它將最終進(jìn)入PTP_ MASTER狀態(tài)。
處于PTP_MASTER狀態(tài)的節(jié)點(diǎn)將每隔2s向外發(fā)送Sync消息,發(fā)完Sync消息,打開(kāi)PTP硬件部分對(duì)應(yīng)的驅(qū)動(dòng)文件,并用ioctl()讀取相應(yīng)位的數(shù)據(jù),此數(shù)據(jù)來(lái)自于保存發(fā)送消息時(shí)間戳的寄存器。然后將這個(gè)時(shí)間戳放到Follow_UP消息中發(fā)送出去。當(dāng)處于PTP_MASTER狀態(tài)的節(jié)點(diǎn)收到Delay_Req消息,它在打開(kāi)驅(qū)動(dòng)文件之后,也會(huì)讀取相應(yīng)位的數(shù)據(jù),這些位的數(shù)據(jù)來(lái)自于保存接收PTP消息時(shí)間戳的寄存器。然后將這個(gè)時(shí)間戳封裝到Delay_Resp中發(fā)送出去。
如果PTP節(jié)點(diǎn)收到Sync消息,并根據(jù)BMC算法得出端口的狀態(tài)是PTP_SLAVE,它會(huì)去和發(fā)送Sync消息的時(shí)鐘同步。此時(shí)若發(fā)現(xiàn)需要和當(dāng)前收到的Sync消息包含的時(shí)間同步,系統(tǒng)會(huì)將與這個(gè)Sync消息相對(duì)應(yīng)的Follow_Up消息中的時(shí)間戳寫(xiě)入PTP硬件部分的相應(yīng)位,硬件部分會(huì)用寄存器將這個(gè)數(shù)據(jù)保存起來(lái)。當(dāng)端口處于PTP_SLAVE狀態(tài)的PTP節(jié)點(diǎn)收到Delay_Resp消息時(shí),也會(huì)將這個(gè)消息包含的主時(shí)鐘收到Delay_Req消息的時(shí)間戳寫(xiě)入PTP硬件的相應(yīng)位,硬件部分也會(huì)用寄存器將這個(gè)時(shí)間戳保存起來(lái),并在適當(dāng)?shù)臅r(shí)候利用這些時(shí)間戳求得時(shí)間偏移和調(diào)整頻率。
用戶可以根據(jù)特定需要自定義IP核,但創(chuàng)建的任何IP核都必須適應(yīng)已生成的系統(tǒng),與現(xiàn)有總線相連接需要規(guī)范的接口,EDK對(duì)IP接口有明確的定義,本文只討論用戶邏輯部分。
PTP節(jié)點(diǎn)硬件實(shí)現(xiàn)部分的自定義邏輯了由5個(gè)功能模塊和4個(gè)寄存器模塊組成,頂層模塊將這些子模塊組裝在一起,再加上IPIF(IP接口),形成PTP節(jié)點(diǎn)硬件實(shí)現(xiàn)部分的IP核。該IP核的內(nèi)部結(jié)構(gòu)如圖4所示。
圖4 PTP節(jié)點(diǎn)的自定義IP核
5個(gè)功能模塊分別是:本地時(shí)鐘模塊、發(fā)送消息時(shí)間戳獲取模塊、接收消息時(shí)間戳獲取模塊、本地時(shí)鐘模塊、時(shí)間偏移量計(jì)算模塊、頻率偏移計(jì)算模塊。4個(gè)寄存器模塊分別是:A.發(fā)送消息時(shí)間戳寄存器、B.接收消息時(shí)間戳寄存器、C.Follow_Up消息包含的時(shí)間戳寄存器、D.Delay_Resp消息包含的時(shí)間戳寄存器。
此IP核對(duì)于主從時(shí)鐘都可以和軟件部分協(xié)調(diào)工作。工作過(guò)程如下:
接收消息時(shí)間戳獲取模塊的工作原理和發(fā)送消息時(shí)間戳獲取模塊類(lèi)似,以接收消息時(shí)間戳獲取模塊為例。此模塊不斷檢測(cè)是否有數(shù)據(jù)幀到來(lái),具體的檢測(cè)方法與使用的網(wǎng)絡(luò)技術(shù)相關(guān),詳述見(jiàn)后續(xù)章節(jié)。當(dāng)發(fā)現(xiàn)有數(shù)據(jù)幀到來(lái)時(shí),此模塊會(huì)向本地時(shí)鐘發(fā)送信號(hào),本地時(shí)鐘記錄這個(gè)時(shí)間點(diǎn),接收消息時(shí)間戳獲取模塊繼續(xù)檢測(cè)這個(gè)數(shù)據(jù)幀是不是需要打時(shí)間戳的PTP消息數(shù)據(jù)幀,即端口號(hào)是不是319,如果是,則此模塊會(huì)向本地時(shí)鐘發(fā)送另一個(gè)信號(hào),本地時(shí)鐘會(huì)把之前記錄的時(shí)間戳保存在寄存器B中,以備讀取。
如果本節(jié)點(diǎn)作為主時(shí)鐘,因?yàn)椴恍枰{(diào)整本地時(shí)間,頻率偏移計(jì)算模塊、時(shí)間偏移量計(jì)算模塊以及寄存器C、D并不工作。當(dāng)本節(jié)點(diǎn)發(fā)送完Sync消息時(shí),寄存器A記錄下了Sync消息發(fā)送的時(shí)間戳,接著軟件部分就會(huì)讀取這個(gè)時(shí)間戳,放在Follow_Up消息中發(fā)送。當(dāng)本節(jié)點(diǎn)收到Delay_Req消息時(shí),其接收時(shí)間戳?xí)4嬖诩拇嫫鰾中,然后軟件部分就會(huì)讀取這個(gè)時(shí)間戳,把它放在Delay_Resp消息中發(fā)送。
如果本節(jié)點(diǎn)作為從時(shí)鐘,當(dāng)接收到Sync消息或發(fā)送Delay_Req消息時(shí)會(huì)獲取時(shí)間戳并分別保存到寄存器B、A中,以供兩個(gè)計(jì)算模塊讀取。當(dāng)本節(jié)點(diǎn)收到Delay_Req消息時(shí),如果軟件部分認(rèn)為此時(shí)需要計(jì)算傳輸延遲,會(huì)將Delay_Req消息中包含的時(shí)間戳寫(xiě)入寄存器D。如果寄存器D發(fā)現(xiàn)有數(shù)據(jù)寫(xiě)入,會(huì)通知時(shí)間偏移量計(jì)算模塊使用四個(gè)寄存器的數(shù)據(jù)計(jì)算傳輸延遲。發(fā)現(xiàn)數(shù)據(jù)寫(xiě)入的實(shí)現(xiàn)可以利用64位時(shí)間數(shù)據(jù)的冗余位,軟件部分寫(xiě)入時(shí)間時(shí)會(huì)將這個(gè)位置位,之后再將其復(fù)位,寄存器D會(huì)不斷檢測(cè)這個(gè)數(shù)據(jù)位并作為是否保存此數(shù)據(jù)和發(fā)送時(shí)間偏移量計(jì)算信號(hào)的依據(jù),寄存器C也可采用同樣的發(fā)現(xiàn)機(jī)制。當(dāng)本節(jié)點(diǎn)收到Follow_Up消息時(shí),如果軟件部分認(rèn)為此時(shí)需要更新時(shí)間和頻率,就會(huì)將Follow_Up消息包含的時(shí)間戳寫(xiě)入寄存器C。寄存器C發(fā)現(xiàn)有數(shù)據(jù)寫(xiě)入會(huì)分別通知頻率偏移計(jì)算模塊和時(shí)間偏移量計(jì)算模塊計(jì)算頻率和時(shí)間的偏移,計(jì)算完成后,兩個(gè)模塊會(huì)通知本地時(shí)鐘模塊根據(jù)計(jì)算結(jié)果更新頻率和時(shí)間。
本文將IEEE 1588標(biāo)準(zhǔn)的PTP協(xié)議應(yīng)用于Ad Hoc網(wǎng)絡(luò),設(shè)計(jì)中完成了基于FPGA的PTP節(jié)點(diǎn)的功能,并能實(shí)現(xiàn)Ad Hoc網(wǎng)絡(luò)亞微秒級(jí)的網(wǎng)絡(luò)時(shí)鐘同步。
[1]IEEE std.1588-2002 “IEEE Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems”, 2002.
[2]IEEE Std 802.11-1997 “Wireless Lan Medium Access Control (MAC) And Physical Layer (PHY)Specifications”, 1997.
[3]Juha Kannisto, Timo Vanhatupa, Marko H?nnik?inen,Timo D.H?m?l?inen, ”P(pán)recision Time Protocol Prototype on Wireless LAN”, International Conference on Telecommunications (ICT 2004), August 1-6, 2004.
[4]A.Pakdaman, J.Eidson, T.Cooklev, "IEEE 1588 over IEEE 802.11b",IEEE 802.11 interim meeting, Berlin,Germany, Sept.2004.
[5]Q.Li and D.Rus, “Global clock synchronization in sensor networks,” IEEE Trans.Comput., vol.55, no.2,pp.214-226, Feb.2006.
[6]K.Romer, “Time synchronization in ad hoc networks,”in Proc.2nd ACM Int.Symp.Mobile Ad-Hoc Netw.Comput., Long Beach, CA, 2001,pp.173-182.
[7]M.Mock et al., “Clock synchronization in wireless local area networks,” in Proc.12th Euromicro Conf.Real Time Syst., Jun.2000, pp.183-189.
[8]J.E.Elson, “Time synchronization in wireless sensor networks,” Ph.D.dissertation, UCLA, Los Angeles, CA,2003.
[9]S.Ganeriwal, R.Kumar, and M.Srivastava, “Timingsync protocol for sensor networks,” in Proc.1st Int.Conf.Embedded Networked Sensor Syst., 2003, pp.138-149.
[10]L.Meier, P.Blum, and L.Thiele, “Internal synchronization of drift constraint clocks in ad-hoc sensor networks,” in Proc.5th ACM Int.Symp.Mobile Ad-Hoc Netw.Comput., 2004, pp.90-97.
[11]J.Eidson, Measurement, Control, and Communication Using IEEE 1588.New York: Springer-Verlag, 2006.
[12]T.Cooklev, Wireless Communication Standards: A Study of IEEE 802.11, 802.15, and 802.16.New York:IEEE Press, 2004.