李志宏
(上海芯易恒聯(lián)科技有限公司,上海 201114)
IEC61850標準1是目前國內電力系統(tǒng)自動化領域廣泛應用的標準標準。IEC61850標準里面的數(shù)據(jù)采用SV和GOOSE包傳輸,包含了大量的數(shù)據(jù)信息。如果將電站內的所有SV和GOOSE數(shù)據(jù)采集到一個設備上,可以有效地統(tǒng)籌處理,但是這樣需要很高的運算處理能力,傳統(tǒng)的CPU無法滿足設計要求。研究發(fā)現(xiàn),SV和GOOSE數(shù)據(jù)包格式相對固定,比較適合采用FPGA來處理,系統(tǒng)只要用普通的CPU來處理一些其他算法和管理任務就可以了。引入FPGA設計以后,整個系統(tǒng)對CPU的性能要求急劇降低,極大地降低了功耗,提高了處理效率,滿足了系統(tǒng)的處理能力和散熱要求。
JEC61850數(shù)據(jù)集中器需要完成GOOSE、SV數(shù)據(jù)包的接收和GOOSE數(shù)據(jù)包的發(fā)送。其中,接收GOOSE和SV包的站點最多為96個站點,對于GOOSE數(shù)據(jù)包每個站點最多支持128個GOOSE的變量(兩比特數(shù)值,其他類型不支持),但一共不超過4 096個GOOSE變量;對于SV數(shù)據(jù)包,每個站點最多支持16個SV的變量(32位浮點數(shù)),這樣一共最多支持96×16=1536個SV的值。對于發(fā)送GOOSE數(shù)據(jù)包,最多支持96個站點,一共不超過4 096個GOOSE變量。
在本系統(tǒng)中,F(xiàn)PGA需要完成4個GE(千兆口),2個FE(百兆口)的GOOSE和SV的數(shù)據(jù)采集、SV數(shù)據(jù)分析,以及完成GOOSE數(shù)據(jù)包的產生和發(fā)送。對于SV數(shù)據(jù)包,為了減輕CPU負擔,F(xiàn)PGA還按照設計完成大量的DSP運算,CPU收取到的就是經過處理之后的純數(shù)據(jù),然后按照需求進行某些算法處理;在發(fā)送GOOSE數(shù)據(jù)包時,CPU只需要寫FPGA的寄存器,然后FPGA將自動產生GOOSE數(shù)據(jù)包并將其發(fā)送出去;另外,所有的原始數(shù)據(jù)和分析之后的數(shù)據(jù),由FPGA直接存儲到SATA硬盤中,這些處理都無須CPU干預。
圖1是FPGA架構框圖,包含數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、系統(tǒng)管理接口、時鐘選擇與異步鐘處理和內部RAM資源、數(shù)據(jù)瓶頸與調度五大部分。
圖1 FPGA 架構框圖
在接收端,F(xiàn)PGA從GE和FE口收到數(shù)據(jù)包,先打上IEEE 1588 2時間戳,同時進行包分類,如果是IEEE 1588的數(shù)據(jù)包就轉到CPU,進行IEEE 1588的處理,如果是SV和GOOSE數(shù)據(jù)包,就提取對應的包頭,利用包頭進行CAM3查找,對應出SV和GOOSE的分類項(共8 192個地址),最多同時可以處理4 096路GOOSE開關量和1 536路SV的模擬量,然后將包頭剝離,只存儲其數(shù)據(jù)和相應的地址,緩存在每個GE和FE口對應的2 KB的QUEUE內,再做接收調度(RX_ARB)。
對于GOOSE數(shù)據(jù)包,將對比老的數(shù)據(jù),然后和新的數(shù)據(jù)比對,按照算法得出結果,直接緩存到對應的4 096個GOOSE的寄存器,如果有變化則產生中斷,供CPU讀取。4 096路數(shù)據(jù)最多中斷CPU一次,避免頻繁中斷CPU,提高CPU的利用率。
對于SV數(shù)據(jù)包,將首先緩存所有的模擬量到對應的1 536路的RAM中,同時從DDR里面讀取出以前緩存的數(shù)據(jù),將這兩組數(shù)據(jù)合起來輸入到SV的DSP運算模塊,計算結果存入對應的1 536個SV的寄存器,供CPU使用;同時把新的數(shù)據(jù)更新并存入DDR里面,DDR的老數(shù)據(jù)對應的丟棄掉一組。
所有的數(shù)據(jù)結果都將打上時間戳,直接按照順序存入SATA硬盤,此時SATA硬盤利用FPGA順序讀寫,沒有文件系統(tǒng)。系統(tǒng)設置了兩個SATA接口,如果一個硬盤滿或損壞,則自動切換到另一個硬盤并告警,CPU不參與硬盤的讀寫。
在發(fā)送端,CPU會預先配置好要發(fā)送包的包頭,然后朝對應的寄存器寫入需要發(fā)送的GOOSE值,F(xiàn)PGA發(fā)現(xiàn)寄存器變化之后,自動讀出包頭,按照GOOSE協(xié)議的處理流程將GOOSE值和包頭一起拼包,然后根據(jù)CPU的預先配置發(fā)送到對應的以太網(wǎng)接口。
CPU同時會產生IEEE 1588的數(shù)據(jù)包,寫入FPGA后,F(xiàn)PGA將根據(jù)CPU的預先配置將其發(fā)送到對應的以太網(wǎng)接口。
為了可以通過網(wǎng)絡管理整個系統(tǒng),F(xiàn)PGA還外置了一個GE口,數(shù)據(jù)可以通過管理的GE口和FE口進行數(shù)據(jù)交互。這個GE口連接到CPU的GE口,這樣通過兩個FE口,就可以實時和CPU進行數(shù)據(jù)交互,管理整個系統(tǒng)。
在本系統(tǒng)中,有四組時鐘,GE口的收發(fā)是GMII接口,采用125 MHz的隨路時鐘;FE口的收發(fā)是MII接口,采用的是25 MHz的時鐘。SV運算采用FPGA內部的DSP進行,時鐘選用的是75 MHz。SATA的時鐘選擇的是120 MHz。整個系統(tǒng)其他模塊的時鐘都采用125 MHz時鐘。所有的異步數(shù)據(jù)都用異步的FIFO或雙口RAM進行異步數(shù)據(jù)交互。
在GE和FE的接收端,F(xiàn)PGA實時處理完數(shù)據(jù)包的接收和CAM的數(shù)據(jù)包分類得到數(shù)據(jù)的地址,同時按照數(shù)據(jù)包的內容檢出GOOSE和SV的數(shù)據(jù),因為數(shù)據(jù)包的包頭都丟棄了,所以此時每個端口數(shù)據(jù)的速度已經遠低于1 Gbps的數(shù)據(jù),故此將數(shù)據(jù)緩存在每路一個2 KB的QUEUE中已經滿足要求。
對于SV的數(shù)據(jù),這個系統(tǒng)中每次最多一共1 536路,所以采用兩個2K×32比特的RAM進行存儲,當存儲滿一次之后,直接寫入DDR備用。
對于SV的處理模塊,數(shù)據(jù)處理需要前面多幀,所以需要一個8個2KB的RAM讀出DDR的數(shù)據(jù),然后送給SV模塊處理。為了并行處理,本處RAM采用乒乓模式,在處理0組RAM數(shù)據(jù)的同時,從DDR讀取1組RAM的數(shù)據(jù),在處理1組RAM數(shù)據(jù)的同時,從DDR讀取0組RAM的數(shù)據(jù)。讀出的數(shù)據(jù)同時寫入到SATA硬盤。
在數(shù)據(jù)發(fā)送時,對于GE口的發(fā)送,因為GE口發(fā)送速度達到1 Gbps,所以發(fā)送的RAM選擇2 KB即可達到線速,而FE因為速度慢,為了提高效率,選擇4 KB字節(jié)的RAM,如果4 KB的RAM寫滿,則GOOSE_ARB阻塞。實際上,因為設計時整個系統(tǒng)發(fā)送的數(shù)據(jù)遠低于100 Mbps,所以本設計滿足系統(tǒng)需求。
對于SV的數(shù)據(jù)處理,用到了FPGA內部的DSP資源,時鐘選取75 MHz比較容易布線通過,系統(tǒng)選取了75 MHz時鐘。系統(tǒng)設計要求同時處理1 536路SV數(shù)據(jù),每路SV數(shù)據(jù)4 000 MHz的采樣率,所以每秒必須運算1536×4000 MHz=6144000次,DSP算法按照設計5個時鐘周期處理完一個數(shù)據(jù),速度達到15 000 000次/秒,遠大于6 144 000,所以完全可以處理。
因為系統(tǒng)設計要求最多支持4 096路GOOSE開關量和1536路SV,同時系統(tǒng)最多同時支持96個站點,每個站點的GOOSE最大可以到128個變量,所以,必須要采用一定的數(shù)據(jù)結構,才能盡可能地節(jié)約FPGA的地址空間,這也是本系統(tǒng)設計的難點。下面將對數(shù)據(jù)格式進行描述。
如圖2,SV數(shù)據(jù)保存在DDR2內,第一列表示所有數(shù)據(jù),256條數(shù)據(jù)為一次大循環(huán),超過256又從0開始覆蓋存儲。第二列表示每一條數(shù)據(jù)包含96組數(shù)據(jù),第三列表示每組最多16個數(shù)值,第一行是數(shù)據(jù)標識,后面跟16個浮點數(shù)值。
圖2 SV數(shù)據(jù)結構
GOOSE包里的數(shù)據(jù)要完全隨機的映射到0~4095個地址,系統(tǒng)一共支持96組GOOSE數(shù)據(jù)包,每組最多為128個GOOSE,如果直接配置,需要一張96×128 =12288個12比特(0~4095)的地址,這樣對FPGA的存儲要求太高,為此,設計了二級映射。
如圖3,GOOSE數(shù)據(jù)映射表保存在FPGA的雙口RAM中,第一級映射GOOSE_PTR表示GOOSE數(shù)據(jù)包的映射,表示每組GOOSE數(shù)據(jù)包的映射關系,一共96組,包含下列數(shù)據(jù):
圖3 GOOSE數(shù)據(jù)結構
offset:12bit,數(shù)據(jù)區(qū)的指針地址。
data_offset: 12bit,數(shù)據(jù)包數(shù)據(jù)區(qū)的開始。
goose_offset:12bit,數(shù)據(jù)包數(shù)據(jù)區(qū)的內部GOOSE
數(shù)據(jù)的偏移,GOOSE采用ASN.1編碼,為TLV格式,
即Type-Length-Value。根據(jù)格式解析。
第二級映射是GOOSE數(shù)據(jù)到0~4095個地址的映射,一共95組,包含下列數(shù)據(jù):
gooseNum:12bit,表示數(shù)據(jù)多少,最多支持128個。
goose0-goose127:12bit,每個包最多128個GOOSE
數(shù)據(jù),0~4095表示4 096個GOOSE,但是這個GOOSE
數(shù)據(jù)是可以最少到1個的,可以變化 ,但每組數(shù)據(jù)都以
36比特為最小單位,如果不滿則空著。
XILINX的雙口RAM可以組成512個地址,數(shù)據(jù)位寬為36比特的模式,3個12比特正好組成36比特。所以以36比特為單位,第一級GOOSE_PTR占用96個地址。第二級DATA_PTR分為96組,一共4 096個12比特加上96個12比特的gooseNum,因為每組數(shù)據(jù)必須以36比特為最小單位,所以最多這樣一共占用4096+(96×2)個12比特,一共4 288個12bit,最多1 430個36比特,加上第一級的96比特,一共不超過1 526個36比特,正好占用3個512×36的雙口RAM。采用二級映射,正好滿足系統(tǒng)需求,同時節(jié)約了資源。
本系統(tǒng)引入了FPGA替代傳統(tǒng)的CPU設計,完成了多達4路GE口和兩路FE一共4 096路GOOSE的收發(fā)及1 536路SV接收處理,極大地降低了CPU的運算要求,采用低功耗的SPARTAN6系列的FPGA,也滿足了系統(tǒng)要求低功耗和不允許加風扇等一系列嚴苛要求,根據(jù)測試和現(xiàn)場運行,效果良好,完全滿足實際需求?!?/p>