李志宏
(上海芯易恒联科技有限公司,上海 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,也满足了系统要求低功耗和不允许加风扇等一系列严苛要求,根据测试和现场运行,效果良好,完全满足实际需求。■