李志宏
(上海芯易恒聯科技有限公司,上海 201114)
IEC61850標準1是目前國內電力系統自動化領域廣泛應用的標準標準。IEC61850標準里面的數據采用SV和GOOSE包傳輸,包含了大量的數據信息。如果將電站內的所有SV和GOOSE數據采集到一個設備上,可以有效地統籌處理,但是這樣需要很高的運算處理能力,傳統的CPU無法滿足設計要求。研究發現,SV和GOOSE數據包格式相對固定,比較適合采用FPGA來處理,系統只要用普通的CPU來處理一些其他算法和管理任務就可以了。引入FPGA設計以后,整個系統對CPU的性能要求急劇降低,極大地降低了功耗,提高了處理效率,滿足了系統的處理能力和散熱要求。
JEC61850數據集中器需要完成GOOSE、SV數據包的接收和GOOSE數據包的發送。其中,接收GOOSE和SV包的站點最多為96個站點,對于GOOSE數據包每個站點最多支持128個GOOSE的變量(兩比特數值,其他類型不支持),但一共不超過4 096個GOOSE變量;對于SV數據包,每個站點最多支持16個SV的變量(32位浮點數),這樣一共最多支持96×16=1536個SV的值。對于發送GOOSE數據包,最多支持96個站點,一共不超過4 096個GOOSE變量。
在本系統中,FPGA需要完成4個GE(千兆口),2個FE(百兆口)的GOOSE和SV的數據采集、SV數據分析,以及完成GOOSE數據包的產生和發送。對于SV數據包,為了減輕CPU負擔,FPGA還按照設計完成大量的DSP運算,CPU收取到的就是經過處理之后的純數據,然后按照需求進行某些算法處理;在發送GOOSE數據包時,CPU只需要寫FPGA的寄存器,然后FPGA將自動產生GOOSE數據包并將其發送出去;另外,所有的原始數據和分析之后的數據,由FPGA直接存儲到SATA硬盤中,這些處理都無須CPU干預。
圖1是FPGA架構框圖,包含數據發送、數據接收、系統管理接口、時鐘選擇與異步鐘處理和內部RAM資源、數據瓶頸與調度五大部分。

圖1 FPGA 架構框圖
在接收端,FPGA從GE和FE口收到數據包,先打上IEEE 1588 2時間戳,同時進行包分類,如果是IEEE 1588的數據包就轉到CPU,進行IEEE 1588的處理,如果是SV和GOOSE數據包,就提取對應的包頭,利用包頭進行CAM3查找,對應出SV和GOOSE的分類項(共8 192個地址),最多同時可以處理4 096路GOOSE開關量和1 536路SV的模擬量,然后將包頭剝離,只存儲其數據和相應的地址,緩存在每個GE和FE口對應的2 KB的QUEUE內,再做接收調度(RX_ARB)。
對于GOOSE數據包,將對比老的數據,然后和新的數據比對,按照算法得出結果,直接緩存到對應的4 096個GOOSE的寄存器,如果有變化則產生中斷,供CPU讀取。4 096路數據最多中斷CPU一次,避免頻繁中斷CPU,提高CPU的利用率。
對于SV數據包,將首先緩存所有的模擬量到對應的1 536路的RAM中,同時從DDR里面讀取出以前緩存的數據,將這兩組數據合起來輸入到SV的DSP運算模塊,計算結果存入對應的1 536個SV的寄存器,供CPU使用;同時把新的數據更新并存入DDR里面,DDR的老數據對應的丟棄掉一組。
所有的數據結果都將打上時間戳,直接按照順序存入SATA硬盤,此時SATA硬盤利用FPGA順序讀寫,沒有文件系統。系統設置了兩個SATA接口,如果一個硬盤滿或損壞,則自動切換到另一個硬盤并告警,CPU不參與硬盤的讀寫。
在發送端,CPU會預先配置好要發送包的包頭,然后朝對應的寄存器寫入需要發送的GOOSE值,FPGA發現寄存器變化之后,自動讀出包頭,按照GOOSE協議的處理流程將GOOSE值和包頭一起拼包,然后根據CPU的預先配置發送到對應的以太網接口。
CPU同時會產生IEEE 1588的數據包,寫入FPGA后,FPGA將根據CPU的預先配置將其發送到對應的以太網接口。
為了可以通過網絡管理整個系統,FPGA還外置了一個GE口,數據可以通過管理的GE口和FE口進行數據交互。這個GE口連接到CPU的GE口,這樣通過兩個FE口,就可以實時和CPU進行數據交互,管理整個系統。
在本系統中,有四組時鐘,GE口的收發是GMII接口,采用125 MHz的隨路時鐘;FE口的收發是MII接口,采用的是25 MHz的時鐘。SV運算采用FPGA內部的DSP進行,時鐘選用的是75 MHz。SATA的時鐘選擇的是120 MHz。整個系統其他模塊的時鐘都采用125 MHz時鐘。所有的異步數據都用異步的FIFO或雙口RAM進行異步數據交互。
在GE和FE的接收端,FPGA實時處理完數據包的接收和CAM的數據包分類得到數據的地址,同時按照數據包的內容檢出GOOSE和SV的數據,因為數據包的包頭都丟棄了,所以此時每個端口數據的速度已經遠低于1 Gbps的數據,故此將數據緩存在每路一個2 KB的QUEUE中已經滿足要求。
對于SV的數據,這個系統中每次最多一共1 536路,所以采用兩個2K×32比特的RAM進行存儲,當存儲滿一次之后,直接寫入DDR備用。
對于SV的處理模塊,數據處理需要前面多幀,所以需要一個8個2KB的RAM讀出DDR的數據,然后送給SV模塊處理。為了并行處理,本處RAM采用乒乓模式,在處理0組RAM數據的同時,從DDR讀取1組RAM的數據,在處理1組RAM數據的同時,從DDR讀取0組RAM的數據。讀出的數據同時寫入到SATA硬盤。
在數據發送時,對于GE口的發送,因為GE口發送速度達到1 Gbps,所以發送的RAM選擇2 KB即可達到線速,而FE因為速度慢,為了提高效率,選擇4 KB字節的RAM,如果4 KB的RAM寫滿,則GOOSE_ARB阻塞。實際上,因為設計時整個系統發送的數據遠低于100 Mbps,所以本設計滿足系統需求。
對于SV的數據處理,用到了FPGA內部的DSP資源,時鐘選取75 MHz比較容易布線通過,系統選取了75 MHz時鐘。系統設計要求同時處理1 536路SV數據,每路SV數據4 000 MHz的采樣率,所以每秒必須運算1536×4000 MHz=6144000次,DSP算法按照設計5個時鐘周期處理完一個數據,速度達到15 000 000次/秒,遠大于6 144 000,所以完全可以處理。
因為系統設計要求最多支持4 096路GOOSE開關量和1536路SV,同時系統最多同時支持96個站點,每個站點的GOOSE最大可以到128個變量,所以,必須要采用一定的數據結構,才能盡可能地節約FPGA的地址空間,這也是本系統設計的難點。下面將對數據格式進行描述。
如圖2,SV數據保存在DDR2內,第一列表示所有數據,256條數據為一次大循環,超過256又從0開始覆蓋存儲。第二列表示每一條數據包含96組數據,第三列表示每組最多16個數值,第一行是數據標識,后面跟16個浮點數值。

圖2 SV數據結構
GOOSE包里的數據要完全隨機的映射到0~4095個地址,系統一共支持96組GOOSE數據包,每組最多為128個GOOSE,如果直接配置,需要一張96×128 =12288個12比特(0~4095)的地址,這樣對FPGA的存儲要求太高,為此,設計了二級映射。
如圖3,GOOSE數據映射表保存在FPGA的雙口RAM中,第一級映射GOOSE_PTR表示GOOSE數據包的映射,表示每組GOOSE數據包的映射關系,一共96組,包含下列數據:

圖3 GOOSE數據結構
offset:12bit,數據區的指針地址。
data_offset: 12bit,數據包數據區的開始。
goose_offset:12bit,數據包數據區的內部GOOSE
數據的偏移,GOOSE采用ASN.1編碼,為TLV格式,
即Type-Length-Value。根據格式解析。
第二級映射是GOOSE數據到0~4095個地址的映射,一共95組,包含下列數據:
gooseNum:12bit,表示數據多少,最多支持128個。
goose0-goose127:12bit,每個包最多128個GOOSE
數據,0~4095表示4 096個GOOSE,但是這個GOOSE
數據是可以最少到1個的,可以變化 ,但每組數據都以
36比特為最小單位,如果不滿則空著。
XILINX的雙口RAM可以組成512個地址,數據位寬為36比特的模式,3個12比特正好組成36比特。所以以36比特為單位,第一級GOOSE_PTR占用96個地址。第二級DATA_PTR分為96組,一共4 096個12比特加上96個12比特的gooseNum,因為每組數據必須以36比特為最小單位,所以最多這樣一共占用4096+(96×2)個12比特,一共4 288個12bit,最多1 430個36比特,加上第一級的96比特,一共不超過1 526個36比特,正好占用3個512×36的雙口RAM。采用二級映射,正好滿足系統需求,同時節約了資源。
本系統引入了FPGA替代傳統的CPU設計,完成了多達4路GE口和兩路FE一共4 096路GOOSE的收發及1 536路SV接收處理,極大地降低了CPU的運算要求,采用低功耗的SPARTAN6系列的FPGA,也滿足了系統要求低功耗和不允許加風扇等一系列嚴苛要求,根據測試和現場運行,效果良好,完全滿足實際需求。■