(南瑞集團(tuán)公司(國(guó)網(wǎng)電力科學(xué)研究院),南京 210003)
以太網(wǎng)以其結(jié)構(gòu)簡(jiǎn)單、成本低廉、傳輸速率高和帶寬易拓展的特點(diǎn)已經(jīng)應(yīng)用在工業(yè)領(lǐng)域當(dāng)中,未來(lái)工業(yè)以太網(wǎng)將在工業(yè)自動(dòng)化控制系統(tǒng)的設(shè)備之間互聯(lián)和信息集成中發(fā)揮不可替代的作用[1]。
同時(shí),IEC61850已經(jīng)成功應(yīng)用在智能變電站中,為變電站能夠完備實(shí)現(xiàn)信息標(biāo)準(zhǔn)化和設(shè)備之間的互操作提供了通信標(biāo)準(zhǔn)。近年來(lái),應(yīng)國(guó)家電網(wǎng)的發(fā)展要求,國(guó)內(nèi)傳統(tǒng)水電廠向智能水電廠方向全面發(fā)展以適應(yīng)智能電網(wǎng)的要求將是一個(gè)必然的趨勢(shì)和全新的目標(biāo)[2]。IEC61850 ED2已經(jīng)將其應(yīng)用領(lǐng)域拓展到水電廠中,成為水電廠智能化建設(shè)的通信標(biāo)準(zhǔn)。實(shí)現(xiàn)IEC61850通信的基礎(chǔ)是以太網(wǎng)[3],而以太網(wǎng)技術(shù)主要集中在物理層(PHY)和介質(zhì)訪問(wèn)控制層(MAC)的實(shí)現(xiàn)上[4]。MAC定義了數(shù)據(jù)幀在介質(zhì)上的傳輸,線路控制、差錯(cuò)校驗(yàn)和流量控制等功能也由MAC實(shí)現(xiàn),是以太網(wǎng)控制器的核心。
FPGA即現(xiàn)場(chǎng)可編程門列陣,作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路,既解決了定制電路的不足又克服了原有的可編程器件門電路有限的缺點(diǎn)。FPGA具有強(qiáng)大的并行計(jì)算能力,可以在一個(gè)時(shí)鐘周期內(nèi)完成更多的操作任務(wù),且不使用任何操作系統(tǒng),穩(wěn)定性能得以提高,能夠滿足GOOSE/ SV等實(shí)時(shí)性和可靠性要求高的報(bào)文傳輸。
同時(shí),F(xiàn)PGA具有豐富的硬件資源,與傳統(tǒng)的芯片相比,F(xiàn)PGA可通過(guò)調(diào)用內(nèi)置的IP核大大縮短設(shè)計(jì)周期。所以,對(duì)基于FPGA支持IEC61850通訊標(biāo)準(zhǔn)的工業(yè)以太網(wǎng)MAC的研究顯得尤為重要。
普通以太網(wǎng)最初設(shè)計(jì)是用于商業(yè)用途而非工業(yè)過(guò)程領(lǐng)域,強(qiáng)調(diào)的是網(wǎng)絡(luò)節(jié)點(diǎn)之間的平衡性和帶寬的共享,采用的介質(zhì)訪問(wèn)控制方法是CSMA/CD,因此標(biāo)準(zhǔn)的共享以太網(wǎng)存在延時(shí)不確定的問(wèn)題。
標(biāo)準(zhǔn)的以太網(wǎng)不限定節(jié)點(diǎn)訪問(wèn)網(wǎng)絡(luò)的時(shí)刻,即節(jié)點(diǎn)訪問(wèn)網(wǎng)絡(luò)是事件驅(qū)動(dòng)而非時(shí)間驅(qū)動(dòng),因此多點(diǎn)共享式以太網(wǎng)中,數(shù)據(jù)沖突不可避免;同時(shí)標(biāo)準(zhǔn)的以太網(wǎng)不支持報(bào)文或節(jié)點(diǎn)優(yōu)先級(jí)的設(shè)定,發(fā)生沖突后所有節(jié)點(diǎn)都采用相同的退避機(jī)制,且時(shí)間隨機(jī)。所以普通以太網(wǎng)難以滿足IEC61850通訊實(shí)時(shí)性的要求。
工業(yè)過(guò)程控制領(lǐng)域中通常不會(huì)有持續(xù)的大流量的數(shù)據(jù)傳輸,常規(guī)以太網(wǎng)的10/100 Mb/s的帶寬是足夠的。信息的端到端時(shí)延主要包括排隊(duì)時(shí)延、發(fā)送時(shí)延和傳輸時(shí)延3個(gè)因素,所以應(yīng)從避免數(shù)據(jù)沖突和保證實(shí)時(shí)數(shù)據(jù)優(yōu)先傳輸入手。全雙工通信中信號(hào)可以同時(shí)雙向傳送,網(wǎng)絡(luò)上的數(shù)據(jù)沖突徹底避免,所以本文的MAC基于全雙工的基礎(chǔ)上進(jìn)行設(shè)計(jì)。
本文在傳統(tǒng)以太網(wǎng)MAC設(shè)計(jì)的基礎(chǔ)上對(duì)其進(jìn)行了改進(jìn)與優(yōu)化,采用全雙工模式設(shè)計(jì),通過(guò)遍歷算法完成對(duì)MAC地址的過(guò)濾,模塊設(shè)計(jì)通過(guò)Verilog行為級(jí)描述語(yǔ)言及調(diào)用IP核相結(jié)合,設(shè)計(jì)更加精簡(jiǎn)同時(shí)避免了傳播過(guò)程中數(shù)據(jù)沖突等問(wèn)題,使其更好地適應(yīng)IEC61850通訊的特點(diǎn)。
基于IEC61850的MAC控制器由BUS總線接口模塊、時(shí)鐘管理模塊、EMAC模塊、中斷模塊、MII/ MDIO接口模塊5個(gè)部分組成,如圖1所示。
BUS模塊負(fù)責(zé)總線接口控制以及16位至32位數(shù)據(jù)總線轉(zhuǎn)換,將接收到的數(shù)據(jù)幀保存到儲(chǔ)存器中,同時(shí)從儲(chǔ)存器中載入需要通過(guò)以太網(wǎng)接口傳輸?shù)臄?shù)據(jù),用于實(shí)現(xiàn)更高層次的以太網(wǎng)協(xié)議。
圖1 以太網(wǎng)MAC控制器的主要組成部分Fig.1 Components of Ethernet MAC controller
時(shí)鐘模塊用于產(chǎn)生整個(gè)系統(tǒng)所需的時(shí)鐘信號(hào)及復(fù)位信號(hào)等。系統(tǒng)輸入25 MHz的主時(shí)鐘信號(hào),通過(guò)PLL分頻后生成500 K,10 M,100 M等時(shí)鐘信號(hào),F(xiàn)PGA內(nèi)部各單元根據(jù)設(shè)計(jì)使用不同的時(shí)鐘單元。CLK_GEN模塊如圖2所示。
圖2 CLK_GEN模塊Fig.2 CLK_GEN module
本文設(shè)計(jì)了4個(gè)相同的EMAC模塊,每個(gè)EMAC模塊下又包含了數(shù)據(jù)緩存模塊、數(shù)據(jù)接收模塊和數(shù)據(jù)發(fā)送模塊。
數(shù)據(jù)緩存模塊用于發(fā)送和接收數(shù)據(jù)的緩沖,以使主機(jī)的傳輸速度與本模塊相匹配。發(fā)送數(shù)據(jù)時(shí),上層主機(jī)先將待發(fā)送的數(shù)據(jù)寫入發(fā)送數(shù)據(jù)緩沖區(qū),然后由發(fā)送模塊將數(shù)據(jù)讀出。
由于FPGA內(nèi)部有豐富的塊RAM資源,本文設(shè)計(jì)的數(shù)據(jù)緩存模塊通過(guò)FPGA配置雙端口RAM來(lái)實(shí)現(xiàn),可支持2個(gè)端口讀寫操作的任何組合。大大簡(jiǎn)化了設(shè)計(jì),節(jié)省了硬件資源,提高了工作效率[5]。
RAM模塊設(shè)計(jì)調(diào)用IP核blk_mem_gen。IP核在嵌入式FPGA設(shè)計(jì)中,指的是已設(shè)計(jì)好的形式為邏輯單元且可用于重復(fù)設(shè)計(jì)的模塊。IP核分為軟核、硬核和固核。軟核是由VHDL等硬件語(yǔ)言描述的功能塊,設(shè)計(jì)周期短、投入少,靈活性和適應(yīng)性方面較好。硬核則是經(jīng)過(guò)完全的布線布局的網(wǎng)表形式提供,較軟核相比,其能更好地適應(yīng)產(chǎn)品設(shè)計(jì)。除了軟核和硬核,固核也是IP核主流的形式之一,其是介于軟核和硬核之間,在FPGA設(shè)計(jì)中可以看成帶有布局規(guī)劃的軟核。
由于IP core通常已通過(guò)設(shè)計(jì)驗(yàn)證,因此在設(shè)計(jì)中直接調(diào)用IP核進(jìn)行設(shè)計(jì)開發(fā),大大縮短了設(shè)計(jì)周期。
發(fā)送模塊從發(fā)送數(shù)據(jù)緩沖區(qū)中獲得要發(fā)送的數(shù)據(jù)并添加MAC層的報(bào)頭和起始分隔符,再將其傳輸給外部PHY芯片。發(fā)送模塊主要包括數(shù)據(jù)發(fā)送狀態(tài)機(jī)模塊、計(jì)數(shù)器模塊和CRC校驗(yàn)?zāi)K。
圖3 發(fā)送狀態(tài)機(jī)轉(zhuǎn)移圖Fig.3 Transfer state machine
本文設(shè)計(jì)的發(fā)送狀態(tài)機(jī)共有7個(gè)狀態(tài):
IDLE 空閑狀態(tài),系統(tǒng)復(fù)位后,此時(shí)MAC進(jìn)入就緒狀態(tài),可以發(fā)送數(shù)據(jù)幀,當(dāng)寄存器的發(fā)送使能位為1,且數(shù)據(jù)有效位為1時(shí),則轉(zhuǎn)入WAIT狀態(tài);
WAIT 等待狀態(tài),等待一個(gè)幀間隔計(jì)時(shí)時(shí)間,當(dāng)計(jì)數(shù)器計(jì)數(shù)與幀間隔時(shí)間相等時(shí), 轉(zhuǎn)入SEND_SFD狀態(tài);
SEND_SFD 幀起始分隔符狀態(tài),該狀態(tài)負(fù)責(zé)添加報(bào)文頭和幀起始分隔符。當(dāng)SFD計(jì)數(shù)達(dá)到7時(shí),即SFD幀添加完畢,若此時(shí)傳輸數(shù)據(jù)有效則轉(zhuǎn)入SEND_FPAME狀態(tài),進(jìn)行數(shù)據(jù)幀的發(fā)送,否則意味著傳輸數(shù)據(jù)為空,進(jìn)而轉(zhuǎn)入SEND_ZERO狀態(tài);
SEND_FRAME 負(fù)責(zé)控制幀的有效數(shù)據(jù)的發(fā)送過(guò)程。在該狀態(tài)可能發(fā)生以下幾種情況:①幀太短,如果在上層的幀數(shù)據(jù)傳送結(jié)束時(shí),幀長(zhǎng)度計(jì)數(shù)器仍小于60 B,則表明該幀是短幀則跳至SEND_ZERO,添加填充碼;②幀長(zhǎng)度超過(guò) 60 B則跳至SEND_CRC狀態(tài),添加CRC字段;
SEND_ZERO 發(fā)送模塊發(fā)送填充字段,直到幀長(zhǎng)度達(dá)到最小幀長(zhǎng)度為止轉(zhuǎn)入SEND_CRC狀態(tài);
SEND_CRC CRC校驗(yàn)碼發(fā)送狀態(tài),待32位CRC校驗(yàn)碼發(fā)送完畢后轉(zhuǎn)至IPG狀態(tài);
IPG 幀間隔計(jì)時(shí)狀態(tài),當(dāng)間隔時(shí)間到則轉(zhuǎn)至空閑狀態(tài)IDLE。
計(jì)數(shù)器模塊又包含等待計(jì)數(shù)、傳輸計(jì)數(shù)、SFD計(jì)數(shù)、CRC計(jì)數(shù)和IPG計(jì)數(shù)等。計(jì)數(shù)器模塊和發(fā)送狀態(tài)機(jī)模塊相互配合,共同完成數(shù)據(jù)幀的發(fā)送過(guò)程。
CRC校驗(yàn)?zāi)K采用CRC-32校驗(yàn)算法,在SEND_ CRC狀態(tài)之前的SEND_FRAME或SEND_ZERO狀態(tài)期間完成32位CRC校驗(yàn)值的生成,提高了傳輸效率。
數(shù)據(jù)接收模塊負(fù)責(zé)接收數(shù)據(jù)的整個(gè)過(guò)程,并判斷接收到的數(shù)據(jù)幀是否受損,若受損則舍棄該報(bào)文。
接收模塊主要組成跟發(fā)送模塊大致相同,主要包括數(shù)據(jù)接收狀態(tài)機(jī)模塊、計(jì)數(shù)器模塊和CRC校驗(yàn)?zāi)K。數(shù)據(jù)接收狀態(tài)機(jī)如圖4所示,共有3個(gè)狀態(tài):
IDLE 空閑狀態(tài),系統(tǒng)復(fù)位后首先進(jìn)入IDLE狀態(tài),完成數(shù)據(jù)的初始化設(shè)置。當(dāng)檢測(cè)到以太網(wǎng)幀的前導(dǎo)碼接收完畢并且接收的數(shù)據(jù)有效時(shí),進(jìn)入RECEIVE狀態(tài);
RECEIVE 接收狀態(tài),當(dāng)報(bào)文接收完畢、前導(dǎo)碼接收出錯(cuò)或者報(bào)文長(zhǎng)度不足則進(jìn)入FRAME狀態(tài);
圖4 接收狀態(tài)機(jī)轉(zhuǎn)移圖Fig.4 Receive state machine
FRAME 當(dāng)檢測(cè)到錯(cuò)誤報(bào)文時(shí)輸出badframe,丟棄該報(bào)文并進(jìn)入IDLE狀態(tài);當(dāng)報(bào)文接收無(wú)誤且CRC校驗(yàn)正確后輸出goodframe,進(jìn)入IDLE狀態(tài)繼續(xù)接收下一幀報(bào)文。
IEC61850通訊中,MMS通訊采用客戶端/服務(wù)器模式,報(bào)文通過(guò)單播“一對(duì)一”發(fā)送,而GOOSE通訊為了提高報(bào)文的實(shí)時(shí)性,采用發(fā)布者/訂閱者通信模式,通過(guò)組播的方式傳輸報(bào)文。為了防止接收到不需要的報(bào)文,因此加入了MAC地址組播過(guò)濾模塊。預(yù)先在EMAC地址過(guò)濾寄存器中配置好相應(yīng)的MAC地址,在報(bào)文接收過(guò)程中,通過(guò)遍歷算法檢測(cè)該報(bào)文的MAC地址是否已被訂閱。通過(guò)對(duì)MAC地址組播過(guò)濾,使其既能一次將數(shù)據(jù)傳送給多個(gè)訂閱的IED(智能電子設(shè)備),又能保證不影響其他未訂閱的IED的正常通訊。
本文采用了TI公司的DP83630SQ以太網(wǎng)PHY芯片,此芯片能適應(yīng)10 M和100 M的以太網(wǎng)通訊速率,支持RMII接口(精簡(jiǎn)獨(dú)立接口)。以太網(wǎng)MAC支持MII接口,在設(shè)計(jì)中Mii to Rmii模塊采用了soft IP core在FPGA內(nèi)部實(shí)現(xiàn)。
MDIO接口為數(shù)據(jù)管理輸入輸出接口,是一種簡(jiǎn)單的雙線串行接口,主要實(shí)現(xiàn)MAC層和PHY層之間數(shù)據(jù)的傳輸控制和狀態(tài)信息的管理。MDIO接口包括2根信號(hào)線MDC和MDIO。MAC層芯片通過(guò)MDIO接口訪問(wèn)PHY層芯片的寄存器,并通過(guò)這些寄存器完成對(duì)PHY層的控制和管理。MDC則為MDIO提供時(shí)鐘信號(hào)。
本文設(shè)計(jì)的MAC控制器采用XILINX Spartan6系列的FPGA實(shí)現(xiàn),并在Modelsim上對(duì)MAC控制器進(jìn)行了仿真驗(yàn)證。圖5、圖6為發(fā)送和接收狀態(tài)仿真波形圖。
從圖5中可以看出傳輸使能信號(hào)為高電平時(shí),在下個(gè)時(shí)鐘上升沿,狀態(tài)機(jī)從 WAIT狀態(tài)進(jìn)入SEND_SFD狀態(tài),開始發(fā)送前導(dǎo)碼。當(dāng)前導(dǎo)碼發(fā)送完畢后進(jìn)入SEND_FRAME狀態(tài)進(jìn)行數(shù)據(jù)幀的發(fā)送。
圖5 發(fā)送模塊波形圖Fig.5 Send module waveform
從圖6中可以看出當(dāng)數(shù)據(jù)幀接收完畢時(shí),接收數(shù)據(jù)有效信號(hào)為低電平,進(jìn)入FRAME狀態(tài),進(jìn)行CRC校驗(yàn)。CRC校驗(yàn)正確,且CRC計(jì)數(shù)器達(dá)到4時(shí),校驗(yàn)完畢,輸出goodframe,并進(jìn)入IDLE狀態(tài)。
圖6 接收模塊波形圖Fig.6 Receive module waveform
本文介紹了一種基于FPGA且支持IEC61850通訊標(biāo)準(zhǔn)的自定義MAC的設(shè)計(jì)方法,通過(guò)仿真驗(yàn)證能夠有效的實(shí)現(xiàn)IEC61850報(bào)文MAC層的通訊,完善了IEC61850標(biāo)準(zhǔn)的在智能變電站中的應(yīng)用以及為其在智能水電廠中的應(yīng)用與發(fā)展起到了積極作用。
[1] XIONG Jian-qiao,XIONG Xiao-song.The research of CNC communication based on industrial Ethernet[J].Electrical Engineering and Control,2011,98:689-694.
[2] 馮漢夫,石爽,馬琴,等.智能水電廠建設(shè)的思考[J].水電自動(dòng)化與大壩監(jiān)測(cè),2010,34(6):1-5.
[3] 黃智宇.基于IEC61850的變電站網(wǎng)絡(luò)通信及裝置的研究[D].大連:大連理工大學(xué),2008.
[4] 丁世勇,譚文文,李桂英.基于FPGA的以太網(wǎng)MAC控制器的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2011,19(21):163-165.
[5] 徐洪波,俞承芳.基于FPGA的以太網(wǎng)MAC子層協(xié)議設(shè)計(jì)實(shí)現(xiàn)[J].復(fù)旦學(xué)報(bào),2004,43(1):50-52.