趙粹臣,楊志家,劉 念
(1.沈陽理工大學 信息科學與工程學院,遼寧 沈陽 110159;2.中國科學院沈陽自動化研究所 中國科學院網絡化控制系統(tǒng)重點實驗室,遼寧 沈陽 110016)
POWERLINK網絡管理的Verilog HDL實現(xiàn)
趙粹臣1,2,楊志家2,劉 念1
(1.沈陽理工大學 信息科學與工程學院,遼寧 沈陽 110159;2.中國科學院沈陽自動化研究所 中國科學院網絡化控制系統(tǒng)重點實驗室,遼寧 沈陽 110016)
為提高協(xié)議棧的通信實時性,利用數(shù)字電路具有的速度優(yōu)勢,設計了一系列電路結構來實現(xiàn)數(shù)據(jù)鏈路及以下層的功能。其中決定通信功能單元運行方式的網絡管理(NMT)居于核心地位。采用數(shù)據(jù)存儲排序電路結構來按順序地存儲事件。在不改變協(xié)議一致性的情況下,定義了新的主狀態(tài),用來讀取事件存儲隊列中的新事件,實現(xiàn)NMT狀態(tài)機的功能,以及在NMT狀態(tài)改變后做相關的處理。利用Verilog HDL語言設計實現(xiàn),用EDA開發(fā)軟件Modelsim SE進行功能仿真,驗證了功能的正確性。
POWERLINK;以太網;Verilog;EDA
在工業(yè)控制系統(tǒng)中,實時可定義為系統(tǒng)在一個可準確預見的時間范圍內對某事件作出反應。反應時間由具體的應用場合決定。過程控制的反應時間只需秒級,但是傳動控制的反應時間則需要微秒級。工業(yè)控制領域對實時性要求很高。工業(yè)以太網的實時響應時間可以達到5~10ms,但是對于響應時間小于5ms的應用,工業(yè)以太網則無法勝任。因此各大公司和組織提出了多種實時以太網解決方案,目前主要有EPA[1]、Ethernet/IP[2]、Modbus-IDA、PROFINET[3]、EtherCAT[4]和Ethernet POWERLINK[5]等。其中Ethernet POWERLINK的性能優(yōu)越,具有很強的競爭力。
Ethernet POWERLINK是一種基于快速以太網,用于數(shù)據(jù)采集及工業(yè)控制領域數(shù)據(jù)傳輸?shù)膶崟r以太網解決方案。該技術遵循OSI模型,其MAC層和PHY都是標準的以太網,而對數(shù)據(jù)鏈路層進行了修改。該技術提供了C語言實現(xiàn)的開源協(xié)議棧,可方便地移植到不同的目標操作系統(tǒng)中。
NMT(Network Management,網絡管理)管理網絡狀態(tài),在協(xié)議棧中居于核心的地位。NMT狀態(tài)機對通信功能單元的運行方式起到決定性作用,協(xié)議棧在某一NMT狀態(tài)下嚴格執(zhí)行某一類功能,所有的功能部分都跟隨NMT狀態(tài)有序運行。無論MN(主站)還是CN(從站)都經由通用初始化過程來啟動狀態(tài)機,而后根據(jù)不同的NodeId(節(jié)點號)來進入屬于MN的狀態(tài)機部分或者CN部分。在開源的POWERLINK代碼協(xié)議棧中,采用C語言實現(xiàn)NMT功能。
Verilog HDL是一種硬件描述語言(HDL:Hardware Description Language),能夠描述數(shù)字系統(tǒng)的行為、數(shù)據(jù)流與結構[6]。采用Verilog HDL描述的狀態(tài)機能夠實現(xiàn)硬件算法。文中將原先由C語言實現(xiàn)的NMT功能改為由Verilog HDL描述的狀態(tài)機實現(xiàn)。
NMT狀態(tài)機由輸入的NMT事件來推動運行,因為有時事件并不能立即得到處理,所以必須有一個數(shù)據(jù)存儲排序結構。因此狀態(tài)機的設計結構應由兩部分組成,一是狀態(tài)機主體部分,一是事件存儲排序結構??傮w結構框圖如圖1所示。
數(shù)據(jù)存儲排序模塊類似于同步FIFO[7](First In First Out,先進先出)結構,但是并不設置full信號,因為事件的數(shù)量有限,并不足以使存儲溢出。該結構深度為32字節(jié),寬度為8bit。
圖1 總體結構框圖
NMT狀態(tài)機主體模塊在處理完之前的事件,并且數(shù)據(jù)存儲排序結構不為空的時候,讀取新的事件作為自身的輸入,推動狀態(tài)機運轉。相比原先由C語言實現(xiàn)的方式,該模塊做了較大調整,新設置若干主體狀態(tài),而原先的狀態(tài)機包含在其中一個主體狀態(tài)中。狀態(tài)機主體右側接口連接用來模擬DLL相關功能的激勵文件,當狀態(tài)改變時,NMT主體部分通知后者,后者做出確認后再取出新的事件。整個執(zhí)行過程如此反復。
2.1 數(shù)據(jù)存儲排序模塊
該模塊的輸入輸出信號如圖2所示。該模塊允許兩個事件端口同時輸入,同時被存儲,而來自CPU的事件存儲位置靠前。
圖2 數(shù)據(jù)存儲排序模塊
各信號的意義見表1。
表1 端口各信號的意義
該模塊深度為32字節(jié),寬度為8bit,每次寫入一個事件,內部寫指針就加1,同時寫入則加2;而讀出一個事件,讀指針則加1。當各指針數(shù)值等于31,再加1時則跳回到0,如此周而復始,當讀指針等于寫指針時,則空信號有效,表示事件已經被取空。
2.2 NMT狀態(tài)機主體模塊
為實現(xiàn)NMT功能,在確保協(xié)議一致性的基礎上,對原先C語言實現(xiàn)的方案作了較大改動,定義了8個主狀態(tài),主狀態(tài)之間的轉換如圖3所示。這8個狀態(tài)及其功能為:
NmtReady:將上一輪的新NMT狀態(tài)寄存器的值賦給舊NMT狀態(tài)寄存器,并且發(fā)出讀信號到存儲隊列;
eventRd:將讀信號清零;
eventGet:將事件存儲隊列輸出的事件寄存以供NMT狀態(tài)機使用;
NmtSm:NMT狀態(tài)機功能主體;
staCh:寄存新的NMT狀態(tài),然后發(fā)送狀態(tài)改變信號,通知數(shù)據(jù)鏈路層(DLL)NMT狀態(tài)已經改變了,DLL會同時寄存新舊兩個狀態(tài);
staCh_n:狀態(tài)改變信號清零,請求DLL處理NMT狀態(tài)改變這一事件并做好相應的一系列準備工作;
dllDeal_n:請求處理信號清零;
dllDealwait:等待DLL處理NMT狀態(tài)改變這一事件,并且做好一系列準備工作,直到得到DLL對處理請求的確認,再跳到NmtReady狀態(tài)。
其中,必須輸出新的NMT狀態(tài)和舊的NMT狀態(tài)給數(shù)據(jù)鏈路層,并且必須準確控制狀態(tài)機,使得它只有等到DLL做好準備才能跳到下一狀態(tài),否則會出現(xiàn)數(shù)據(jù)流的紊亂,進而導致整個系統(tǒng)的功能設計失敗,這一點尤為關鍵。
在圖3中,當主狀態(tài)處于NmtReady,并且事件隊列不空(有新的事件)的時候,主狀態(tài)機發(fā)出讀信號,讀取事件隊列中的事件,開始新一輪的狀態(tài)機循環(huán)。根據(jù)NmtSm狀態(tài)下包含的NMT狀態(tài)機功能主體運行的結果,即NMT狀態(tài)是否改變,可以有兩種狀態(tài)轉換方式:1)當NMT狀態(tài)改變時,則繼續(xù)依次經歷staCh、staCh_n、dllDeal_n、dllDealwait這幾個狀態(tài),而后跳回到NmtReady狀態(tài);2)當NMT狀態(tài)未變時,則直接跳回到NmtReady狀態(tài),結束這一輪循環(huán)。
圖3 主狀態(tài)轉換圖
對于NmtSm狀態(tài)下包含的NMT狀態(tài)機功能主體,可分為兩大部分,一是通用初始化部分,二是主站NMT狀態(tài)機或者從站NMT狀態(tài)機部分。各部分狀態(tài)轉換關系如圖4所示。
GsOff為關閉狀態(tài),通用初始化部分NMT狀態(tài)與所實現(xiàn)的功能為:
GsInitialising:完成基本的節(jié)點初始化;
GsResetApplication:設置制造商特定行規(guī)區(qū)和標準設備行規(guī)區(qū)的參數(shù);
GsResetCommunication:設置通信行規(guī)區(qū)的參數(shù);
GsResetConfiguration:用對象字典中的配置參數(shù)進行設備配置。
圖4陰影部分中的CN狀態(tài)機的NMT狀態(tài)和功能為:
CsNotActive:只監(jiān)視網絡狀態(tài);
CsPreOperational1:接到MN的SoA幀才發(fā)送一幀;
CsStopped:節(jié)點不參與數(shù)據(jù)幀交換,但監(jiān)視SoA幀;
CsPreOperational2:忽略接到的PDO數(shù)據(jù),但響應SoA幀;
CsReadyToOperate:參與周期幀的交換;
CsOperational:CN的正常運行狀態(tài);
CsBasicEthernet:進行傳統(tǒng)以太網通信。
MN狀態(tài)機的狀態(tài)和功能為:
MsNotActive:監(jiān)視網絡狀態(tài),確保沒有其他活動的MN;
MsPreOperational1:開始執(zhí)行POWERLINK短周期;
MsPreOperational2:開始執(zhí)行等時同步POWERLINK周期;
MsReadyToOperate:執(zhí)行等時同步POWERLINK周期;
MsOperational:POWERLINK正常運行狀態(tài);
MsBasicEthernet:進行傳統(tǒng)以太網通信。
圖4 NMT狀態(tài)機功能主體
如圖4所示,狀態(tài)機最初處于GsOff狀態(tài),在事件的推動下,首先經歷一個初始化過程,即圖中的NMT_GS_INITIALISATION,而后根據(jù)具體的配置,決定站點進入MN狀態(tài)機或者CN狀態(tài)機。
在普通的PC機平臺之上,使用仿真軟件Modelsim SE[8]進行功能仿真。仿真模型如圖5所示。用同一個仿真模塊來完成兩個作用:事件來源,以及DLL中與NMT相關的那部分功能。
涉眾型經濟犯罪中,很少是單人作案的,所以大部分涉眾型經濟犯罪都是有組織的。犯罪嫌疑人為了提升可信度,往往會通過合法公司的開設方式實施經濟犯罪,而且在這個過程中需要多個人的分工完成,這也需要組織的嚴密性和合理性[2]。這些犯罪分子往往是通過對社會上不法分子的勾結,并與金融機構的員工串通,實施犯罪。銀行部分內部人員在大量金錢的誘惑下,意志薄弱,難以抵抗腐敗,這也是導致犯罪分子得逞的重要原因。比如,中國銀行廣州分行會計組長利用職務之便與某詐騙公司勾結,偽造存款單據(jù)、偽刻公章,共騙取廣州12家企事業(yè)單位超過8 000萬元。
用Verilog HDL語言編寫激勵信號文件[9],向狀態(tài)機輸送事件,使之從GsOff狀態(tài)一直轉換到MsOperational狀態(tài),而后再關閉到GsOff狀態(tài),通過這一周而復始的過程來檢驗這兩個模塊(NMT狀態(tài)機和數(shù)據(jù)存儲排序模塊)的功能。對于其中的TimerMsPreOp1同時加上一個來自DLL功能區(qū)域的事件DllCeSoa,用來檢驗兩事件同時進入隊列時,隊列能否正確完成排序功能。輸入的事件(只有一個來自DLL功能區(qū)域)及其十六進制編碼按照順序如下:
圖5 仿真模型
SwReset(8′h10)
EnterResetApp(8′h20)
EnterResetCom(8′h21)
EnterResetConfig(8′h23)
EnterMsNotActive(8′h25)
TimerMsPreOp1(8′h27)同時DllCeSoa(8′h0A)
EnterResetConfig(8′h23)
TimerMsPreOp1(8′h27)
AllMandatoryCNIdent(8′h2A)
TimerMsPreOp2(8′h29)
EnterReadyToOperate(8′h2B)
EnterMsOperational(8′h2C)
SwitchOff(8′h2D)關閉
若功能正確,則隨之產生的NMT狀態(tài)變化過程應當為:
GsOff( 16′h0000)
GsInitialising(16′h0019)
GsResetApplication(16′h0029)
GsResetCommunication(16′h0039)
GsResetConfiguration(16′h0079)
MsNotActive(16′h021C)
MsPreOperational1(16′h021D)
GsResetCommunication(16′h0039)
GsResetConfiguration(16′h0079)
MsNotActive(16′h021C)
MsPreOperational1(16′h021D)
MsPreOperational2(16′h025D)
MsReadyToOperate(16′h026D)
MsOperational(16′h02FD)
GsOff(16′h0000)
激勵文件部分代碼如下:
′timescale 1ns/1ns
′define timeslice 20
module NmtTestSig;
always#(′timeslice/2)CLK=~CLK;
initial
begin
CLK=0;
RESET=1;
MNcn=1;
CPU_ADDR=0;
RX_EN=0;
CHANGE_ACK=0;
CPU_EVENT=NoEvent;
RX_EVENT=NoEvent;
#100;
RESET=0;
#(′timeslice+′timeslice/2);
CPU_ADDR=1;
CPU_EVENT=SwReset;
#(′timeslice);
CPU_ADDR=0;
CPU_EVENT=NoEvent;
…………………………以下代碼從略。
仿真結果如圖6所示。
圖6 仿真結果圖
圖6中的NewNmtState表示NMT狀態(tài)發(fā)生改變后的新狀態(tài),OldNmtState則記錄了在NMT狀態(tài)發(fā)生改變后,未改變之前的舊狀態(tài)。從圖6可見,NMT狀態(tài)機最初處于GsOff( 16′h0000)狀態(tài),隨后來自CPU的事件SwReset(8′h10)使狀態(tài)機轉換至GsInitialising(16′h0019)狀態(tài)。CPU按照這種方式,利用輸入事件的方法逐步使NMT狀態(tài)機運轉,事件依次為EnterResetApp(8′h20),EnterResetCom(8′h21),EnterResetConfig(8′h23),EnterMsNotActive(8′h25);隨之變化的狀態(tài)依次為GsResetApplication(16′h0029),GsResetCommunication(16′h0039),GsResetConfiguration(16′h0079),MsNotActive(16′h021C)。在CPU輸入事件TimerMsPreOp1(8′h27)的同時,其他電路也輸入事件DllCeSoa(8′h0A),以此來檢測數(shù)據(jù)存儲排序模塊是否能夠準確存儲同時輸入的事件,隨之的狀態(tài)改變?yōu)镚sResetCommunication(16′h0039),GsResetConfiguration(16′h0079)。在前述事件的依次作用下,NMT狀態(tài)最終轉換到GsOff( 16′h0000)狀態(tài),完成了一個狀態(tài)機循環(huán)。圖中顯示的狀態(tài)變化結果符合預期,所以驗證了設計功能的正確性。
NMT狀態(tài)機是POWERLINK通信協(xié)議棧中的核心模塊,該模塊通常是由C語言實現(xiàn),包含在POWERLINK開源代碼之中?,F(xiàn)對原先的實現(xiàn)方式做了調整,設計了電路排序結構代替原先的數(shù)據(jù)結構,定義了新的主狀態(tài),采用Verilog HDL語言進行描述,經仿真驗證,功能正確可行。
[1]劉寧.EPA 工業(yè)以太網實時性分析及調度方法的研究[D].大連:大連理工大學,2010.
[2]LI W,ZHENG S,CHEN W.Research and Application of Ethernet/IP Industrial Ethernet[J].Electronic Design Engineering,2011,19(9):26-29.
[3]Feld J.PROFINET-scalable factory communication for all applications[C].Factory Communication Systems,2004.Proceedings.2004 IEEE International Workshop on.IEEE,2004:33-38.
[4]Jansen D,Buttner H.Real-time Ethernet:the EtherCAT solution[J].Computing and Control Engineering,2004,15(1):16-21.
[5]Cena G,Seno L,Valenzano A,et al.Performance analysis of Ethernet Powerlink networks for distributed control and automation systems[J].Computer Standards & Interfaces,2009,31(3):566-572.
[6]Reese R B,Thornton M A.Introduction to logic synthesis using Verilog HDL[J].Synthesis Lectures on Digital Circuits and Systems,2006,1(1):1-84.
[7]Tsigas P,Zhang Y.A simple,fast and scalable non-blocking concurrent fifo queue for shared memory multiprocessor systems[C].Proceedings of the thirteenth annual ACM symposium on Parallel algorithms and architectures.ACM,2001:134-143.
[8]Aparna P R,Thomas N.Design and implementation of a high performance multiplier using HDL[C].Computing,Communication and Applications(ICCCA),2012 International Conference on.IEEE,2012:1-5.
[9]李瑛,張盛兵.Verilog Testbench 設計技巧和策略[J].計算機工程與應用,2003,39(10):128-130.
ImplementationofPOWERLINKNetworkManagementUsingVerilogHDL
ZHAO Cuichen1,2,YANG Zhijia2,LIU Nian1
(1. Shenyang Ligong University,Shenyang 110159,China;2. Key Lab. of Networked Control Systems,Shenyang Institute of Automation,Chinese Academy of Science,Shenyang 110016,China)
In order to take advantage of the speediness of digital circuit to improve the real-time performance of protocol stack,a series of circuits are designed to implement the functions of data link layer and layer below.The network management(NMT)which determines the operational mode of communication functional unit is on the core status.A circuit for data storage and sorting is used to store the events orderly.Without changing protocol consistency,a few new main states are defined to read events from the event queue,implement the function of the NMT state machine,and do some relevant treatment after the NMT state has been changed.All of them are designed by Verilog HDL.Finally,the circuits are simulated by Modelsim SE,an EDA development software,and the correctness of the function of them is verified.
POWERLINK;ethernet;Verilog;EDA
2013-11-29
國家863項目(2013AA040301)
趙粹臣(1988—),男,碩士研究生.通訊作者: 楊志家(1968—),男,研究員,研究方向:片上系統(tǒng)設計與驗證.
1003-1251(2014)05-0021-06
TN495
A
馬金發(fā))