張立國 ,劉 強 ,嚴 偉 ,李福昆 ,吳鵬飛 ,王 博
(1.燕山大學(xué) 電氣工程學(xué)院,河北 秦皇島 066000;2.北京大學(xué) 軟件與微電子學(xué)院,北京 100871)
現(xiàn)場總線(Field bus)是一種工業(yè)數(shù)據(jù)總線,主要解決工業(yè)現(xiàn)場的智能化儀器儀表、控制器、執(zhí)行機構(gòu)等現(xiàn)場設(shè)備間的數(shù)字通信以及這些現(xiàn)場控制設(shè)備和高級控制系統(tǒng)之間的信息傳遞問題[1-6]。
IEC 1158 標準定義的現(xiàn)場總線通信模型由物理層、數(shù)據(jù)鏈路層、應(yīng)用層、用戶層四部分構(gòu)成[7]。其中,物理層負責(zé)數(shù)據(jù)傳輸并可為現(xiàn)場設(shè)備供電,總線數(shù)據(jù)采用曼徹斯特編碼技術(shù)進行編碼[8-15]。本文所設(shè)計的現(xiàn)場總線芯片主要實現(xiàn)物理層功能以及部分數(shù)據(jù)鏈路層功能,實現(xiàn)現(xiàn)場設(shè)備與總線連接。并內(nèi)置AXI4 總線接口,實現(xiàn)與CPU 高速、安全的數(shù)據(jù)交互。
目前已有的符合IEC1158 標準的現(xiàn)場總線芯片有中科博微的FBC0409、美國Smar 公司的FB3050、日本Yamaha公司的YTZ420 等。但上述芯片均不具備協(xié)議擴展能力,僅能應(yīng)用于符合IEC 1158 標準的特定現(xiàn)場總線系統(tǒng)中,應(yīng)用領(lǐng)域單一。且由于與CPU 交互時均使用私有協(xié)議,導(dǎo)致通用性較差。此外,受私有協(xié)議帶寬限制,以及這些私有協(xié)議不具備突發(fā)傳輸能力,導(dǎo)致芯片與CPU 進行數(shù)據(jù)交互的時延較大。
為了解決上述問題,本文設(shè)計了一種符合IEC 1158現(xiàn)場總線標準的現(xiàn)場總線芯片。采用標準AXI 總線接口與CPU 進行數(shù)據(jù)交互,總線位寬為32 位,總線頻率100 MHz,提供3.2 Gb/s 總線帶寬,實現(xiàn)芯片與CPU 的高速且安全數(shù)據(jù)傳輸。同時,芯片內(nèi)置豐富的控制寄存器和狀態(tài)寄存器,可通過AXI 總線配置芯片工作模式或監(jiān)控芯片運行狀態(tài),包括實現(xiàn)協(xié)議擴展。此外,對于使用雙絞線作為現(xiàn)場總線傳輸介質(zhì)的現(xiàn)場總線協(xié)議,本芯片設(shè)計有極性糾正電路,可自動偵測雙絞線載波變化,并在必要情況下進行實時極性糾正,使得現(xiàn)場設(shè)備接入總線時,即使正負極顛倒也能正常工作。
IEC 1158 標準的通信模型基于ISO(International Organization for Standardization,國際標準化組織)的OSI(Open System Interconnection Reference Model,開放式系統(tǒng)互聯(lián)通信參考模型)7 層模型,取其物理層、數(shù)據(jù)鏈路層、應(yīng)用層,并增加用戶層[9-13]。
其中,物理層為現(xiàn)場設(shè)備供電,且采用Manchester 編碼技術(shù)對數(shù)據(jù)進行編碼傳輸,支持點對點、總線型、菊花鏈型、樹型拓撲結(jié)構(gòu),數(shù)據(jù)傳輸速率為32.25 kb/s。
數(shù)據(jù)鏈路層為系統(tǒng)管理內(nèi)核和總線訪問子層訪問總線媒體提供服務(wù),負責(zé)鏈路活動調(diào)度、數(shù)據(jù)的接收與發(fā)送、活動狀態(tài)的探測與響應(yīng)以及總線上各設(shè)備間的鏈路時間同步。
應(yīng)用層定義在設(shè)備間交換數(shù)據(jù)、命令、事件信息以及請求應(yīng)答中的信息格式。
用戶層組成用戶所需的應(yīng)用程序,如規(guī)定的功能塊、設(shè)備描述,實現(xiàn)網(wǎng)絡(luò)管理、系統(tǒng)管理等。
目前符合IEC 1158 標準的現(xiàn)場總線協(xié)議主要有基金會現(xiàn)場總線(Foundation Fieldbus,F(xiàn)F)和PROFIBUS-PA 等。
本文所設(shè)計的芯片架構(gòu)如圖1 所示,實現(xiàn)了IEC 1158 物理層規(guī)范及部分鏈路層功能,如CRC 校驗等。
圖1 芯片架構(gòu)設(shè)計圖
芯片結(jié)構(gòu)主要包括AXI 總線接口模塊、中斷控制器、直接存儲器訪問控制器(Direct Memory Access,DMA)、隨機存取存儲器(Random Access Memory,DMA)、寄存器堆棧、CRC 校驗?zāi)K、地址識別模塊、幀編解碼模塊、曼徹斯特(Manchester)編解碼模塊、總線收發(fā)模塊以及時鐘模塊。
AXI 總線協(xié)議是ARM 公司提出的先進微控制器總線體系結(jié)構(gòu)(Advanced Microcontroller Bus Architecture,AMBA)總線協(xié)議中最重要的部分。AXI 總線協(xié)議由AXIFull、AXI-Lite、AXI-Stream 協(xié)議構(gòu)成。其中AXI-Full 適用于大量數(shù)據(jù)隨機讀寫,且支持突發(fā)傳輸;AXI-Lite 用于數(shù)據(jù)量較小的隨機讀寫,適用于操作寄存器;AXIStream 適用于無地址的順序讀寫。
AXI 總線有5 個獨立傳輸通道,分別是地址通道(寫地址通道、讀地址通道)、數(shù)據(jù)通道(寫數(shù)據(jù)通道、讀數(shù)據(jù)通道)以及應(yīng)答通道。每次進行數(shù)據(jù)傳輸之前,CPU 先通過地址通道告知AXI 從機設(shè)備需要操作的存儲器地址,隨后CPU 或AXI 從設(shè)備將數(shù)據(jù)傳輸數(shù)據(jù)通道。在傳輸完成后,接收方通過應(yīng)答通道回復(fù)發(fā)送方,從而確保數(shù)據(jù)透明傳輸。
本課題芯片采用AXI-Full 總線進行數(shù)據(jù)傳輸、使用AXI-Lite 總線進行芯片配置和狀態(tài)反饋。
其中,AXI-Full 總線通過雙通道DMA 控制器掛載發(fā)送緩存RAM 和接收緩存RAM,緩存RAM 與AXI-Full總線的總線位寬均為32 位,AXI 總線工作頻率為100 MHz,提供3.2 Gb/s 帶寬,保證CPU 與芯片間高速低時延的數(shù)據(jù)傳輸。AXI-Full 總線地址通道為10 位,擁有1 KB的RAM 尋址能力。
AXI-Lite 總線位寬同樣為32 bit,與芯片內(nèi)部的控制寄存器和狀態(tài)寄存器相連,用于配置芯片的地址、工作模式、中斷響應(yīng)、測試模式等功能,并將芯片的工作狀態(tài)如地址信息、所處的工作模式、中斷屏蔽信息等傳輸給CPU,以便實時監(jiān)控芯片工作狀態(tài)。
符合IEC 1158 協(xié)議規(guī)范的現(xiàn)場總線的數(shù)據(jù)幀一般由前導(dǎo)碼、數(shù)據(jù)和特征碼(起始符、結(jié)束符)構(gòu)成[8],其中,前導(dǎo)碼由8 位二進制數(shù)10101010 構(gòu)成,接收端通過檢測前導(dǎo)碼進行判斷數(shù)據(jù)傳輸起始;起始符表示幀數(shù)據(jù)開始,數(shù)據(jù)幀中的數(shù)據(jù)緊跟在起始符之后;結(jié)束符標志著一幀的結(jié)束,芯片檢測到結(jié)束符后復(fù)位接收狀態(tài)。
考慮到符合1158 規(guī)范的現(xiàn)場總線協(xié)議的特征碼各不相同,因此,本文所設(shè)計的芯片設(shè)計有特征碼寄存器,CPU 可配置相應(yīng)寄存器以使芯片能夠識別不同現(xiàn)場總線協(xié)議的特征碼,實現(xiàn)協(xié)議擴展。
發(fā)送數(shù)據(jù)時,CPU 將需要發(fā)送的數(shù)據(jù)編碼成位寬為32 位的數(shù)據(jù),隨后通過AXI-Full 總線發(fā)送給芯片內(nèi)部的發(fā)送緩存RAM。通過32 位AXI 總線傳輸數(shù)據(jù)到RAM中后,將有效數(shù)據(jù)字節(jié)數(shù)寫入芯片內(nèi)部相應(yīng)寄存器,芯片可根據(jù)寄存器值將RAM 中相同字節(jié)的數(shù)據(jù)發(fā)送到總線。配置完數(shù)據(jù)字節(jié)數(shù)后,CPU 配置芯片內(nèi)部控制寄存器的發(fā)送使能位使能芯片發(fā)送。芯片若偵測到發(fā)送使能信號,則向DMA 請求數(shù)據(jù),DMA 根據(jù)發(fā)送數(shù)據(jù)總量寄存器的值從發(fā)送緩存RAM 中讀取相應(yīng)字節(jié)的數(shù)據(jù),之后數(shù)據(jù)進入數(shù)據(jù)處理流水線,為數(shù)據(jù)添加特征碼、計算CRC 校驗碼、添加CRC 幀尾,對數(shù)據(jù)進行Manchester 編碼以及數(shù)據(jù)串行化發(fā)送等。
發(fā)送行為由發(fā)送狀態(tài)機控制,發(fā)送狀態(tài)機各狀態(tài)符號及說明如表1 所示。
表1 發(fā)送狀態(tài)機符號說明
發(fā)送狀態(tài)機狀態(tài)轉(zhuǎn)移圖如圖2 所示。狀態(tài)機輸入信號有發(fā)送使能信號send_en、DMA 控制器輸出的數(shù)據(jù)有效信號din_v、CRC 幀尾計算模塊輸出的CRC 有效信號crc_v。
圖2 發(fā)送狀態(tài)機狀態(tài)轉(zhuǎn)移圖
IDLE 狀態(tài)下,若收到來自CPU 的發(fā)送使能能信號,狀態(tài)機進入RQ 狀態(tài);在RQ 狀態(tài)下,發(fā)送器向DMA 控制器發(fā)送數(shù)據(jù)請求信號,并進入PR 狀態(tài)。在PR 狀態(tài)下,若偵測到輸入數(shù)據(jù)有效信號為高電平,則將來自DMA的數(shù)據(jù)及數(shù)據(jù)有效信號延遲2 個時鐘周期;并讀取前導(dǎo)碼寄存器值,對其進行Manchester 編碼后傳輸?shù)浆F(xiàn)場總線上,發(fā)送完成后進入FS 狀態(tài)。在FS 狀態(tài)下,讀取起始符寄存器,進行Manchester 編碼后將起始符傳輸?shù)浆F(xiàn)場總線上,隨后進入DT 狀態(tài)。在DT 狀態(tài)下開始發(fā)送經(jīng)過延時的數(shù)據(jù),同時啟動閑談定時器。數(shù)據(jù)發(fā)送完成則進入FE 狀態(tài),或閑談定時器溢出后,恢復(fù)到IDLE 狀態(tài);FE 狀態(tài)下發(fā)送經(jīng)過Manchester 編碼的幀結(jié)束符,發(fā)送完成后回到IDLE 狀態(tài)。
芯片的總線數(shù)據(jù)接收模塊偵測現(xiàn)場總線的載波變化,若偵測到電平變化為10101010,則認為現(xiàn)場設(shè)備與總線為正接狀態(tài),則直接將接收到的數(shù)據(jù)輸入到后續(xù)處理模塊;若偵測到01010101,則認為現(xiàn)場設(shè)備與現(xiàn)場總線反接,芯片將接收到的數(shù)據(jù)輸入到極性糾正電路。然后對糾正后的數(shù)據(jù)進行Manchester 解碼,進行地址識別以及CRC 校驗,并將數(shù)據(jù)輸送給DMA 控制器。DMA 控制器將8 位數(shù)據(jù)封裝成32 位數(shù)據(jù)寫入接收緩存RAM,同時,將接收到的字節(jié)數(shù)寫入接收數(shù)據(jù)總量寄存器中,并在數(shù)據(jù)全部寫入RAM 后,根據(jù)目的地址匹配結(jié)果和CRC 校驗結(jié)果判斷是否為本機數(shù)據(jù)以及數(shù)據(jù)是否正確。符合判斷要求則產(chǎn)生中斷信號,并將中斷類型寫入中斷類型寄存器,否則不產(chǎn)生中斷信號。CPU 檢測到中斷后讀中斷類型寄存器的值,若為數(shù)據(jù)就緒中斷,則CPU 讀接收數(shù)據(jù)總量寄存器,并將字節(jié)數(shù)轉(zhuǎn)化為AXI 總線讀取次數(shù),將數(shù)據(jù)讀取到內(nèi)存,并還原數(shù)據(jù)。
數(shù)據(jù)接收過程由接收狀態(tài)機控制,接收狀態(tài)機各狀態(tài)符號及說明如表2 所示。
表2 接收狀態(tài)機符號說明
接收狀態(tài)機狀態(tài)轉(zhuǎn)移圖如圖3 所示。狀態(tài)機輸入信號為接收引腳電平信號rx。
圖3 接收狀態(tài)轉(zhuǎn)移圖
系統(tǒng)啟動后狀態(tài)機處于IDLE 狀態(tài),當偵測到接收引腳rx 有載波時,接收狀態(tài)機和結(jié)束符狀態(tài)機分別進入PR 狀態(tài)和FE 狀態(tài)。在PR 狀態(tài)下,對接收的數(shù)據(jù)進行Manchester 解碼并與前導(dǎo)碼比較并判斷是否極性反接。若極性反接,則將后續(xù)數(shù)據(jù)數(shù)據(jù)極性糾正電路后進行解碼,若所有位全部與前導(dǎo)碼匹配,則結(jié)束符狀態(tài)機進入FS 狀態(tài),接收狀態(tài)機進入FE,否則,均回到IDLE狀態(tài)。FE 狀態(tài)下,狀態(tài)機匹配幀結(jié)束符,若匹配錯誤回到IDLE 狀態(tài),否則在匹配完成后恢復(fù)到IDLE 狀態(tài)。在FS狀態(tài)下,狀態(tài)機按位匹配幀起始符,若全部匹配,則進入DT 狀態(tài),否則,回到RX 狀態(tài)。在DT 狀態(tài)下,當檢測到閑談超時、結(jié)束符匹配狀態(tài)機已檢測到結(jié)束符和檢測到數(shù)據(jù)幀的目的地址與本機地址不符,都恢復(fù)到IDLE 狀態(tài),否則繼續(xù)接收數(shù)據(jù)。
考慮到不同現(xiàn)場總線協(xié)議幀格式不同,無法對全部現(xiàn)場總線協(xié)議進行地址識別,因此,本芯片僅支持對基金會現(xiàn)場總線(Foundation Fieldbus,簡稱FF)協(xié)議進行數(shù)據(jù)幀類型識及與地址識別,對于其他符合IEC 1158 標準的現(xiàn)場總線協(xié)議,芯片將數(shù)據(jù)提交給CPU 后由CPU進行地址識別,數(shù)據(jù)幀丟棄與否由CPU 裁決。
IEC 1158 協(xié)議規(guī)定物理層數(shù)據(jù)需要使用Manchester編碼技術(shù)進行編碼及解碼,本文芯片設(shè)計有全雙工Manchester 編碼及解碼電路,如圖4 所示。采用雙相L Manchester 編碼方式,由8 路并行非門電路及插值電路負責(zé)數(shù)據(jù)編碼,單周期可完成1 字節(jié)數(shù)據(jù)編碼工作。16 位采樣電路負責(zé)對接收端的數(shù)據(jù)進行解碼,單周期可解碼2 字節(jié)Manchester 碼。
圖4 Manchester 編、解碼電路原理圖
現(xiàn)場設(shè)備所處的電磁環(huán)境復(fù)雜,影響現(xiàn)場總線上的數(shù)據(jù)傳輸,導(dǎo)致接收方接收到的數(shù)據(jù)發(fā)生錯誤,為了確保接收方能對數(shù)據(jù)準確性做出正確的判斷,IEC1158 規(guī)定發(fā)送方需在數(shù)據(jù)之后添加16 位CRC 校驗碼。因此,本文芯片設(shè)計有8 位并行模2 運算電路,單周期即可完成1 字節(jié)數(shù)據(jù)的CRC 計算任務(wù)。為發(fā)送的數(shù)據(jù)計算16位CRC 校驗碼,為接收到的數(shù)據(jù)進行CRC 校驗。
所謂的極性糾正是指,當現(xiàn)場總線以雙絞線作為傳輸介質(zhì)時,芯片有能力通過偵測雙絞線上的信號載波變化判斷現(xiàn)場設(shè)備是否與雙絞線反接,若判斷為反接,芯片須具備對雙絞線傳輸?shù)臄?shù)據(jù)進行實時電平糾正的能力,實現(xiàn)不論現(xiàn)場設(shè)備如何掛載于雙絞線上,設(shè)備都能從總線上正確地接收并解析數(shù)據(jù)。如圖5 所示,左側(cè)為正接,右側(cè)為反接。
圖5 現(xiàn)場設(shè)備掛載情況示意圖
當現(xiàn)場設(shè)備與現(xiàn)場總線極性反接時,現(xiàn)場設(shè)備從總線上接收到的電平為正接時的取反,因此,本芯片內(nèi)置極性偵測電路,當偵測到數(shù)據(jù)幀前導(dǎo)碼為10101010 時判斷為正接。當偵測到前導(dǎo)碼為01010101 時判斷為反接,此時調(diào)整門控電路,將芯片的數(shù)據(jù)輸入端口接入同步反相電路進行極性糾正。
此外,本文芯片設(shè)置有極性糾正測試模式寄存器控制位,CPU 可通過AXI-Lite 總線配置此控制位,使能極性糾正測試模式,芯片接收到的數(shù)據(jù)將兩次通過極性糾正電路,模擬反接情況,以便進行芯片功能測試。
對于符合IEC 1158 規(guī)范的各種現(xiàn)場總線協(xié)議,區(qū)別主要在數(shù)據(jù)鏈路層、應(yīng)用層和用戶層,而物理層的數(shù)據(jù)編碼方式及傳輸速率均相同。各現(xiàn)場總線協(xié)議在物理層的差異僅在于數(shù)據(jù)幀的特征碼(起始符和結(jié)束符)不同,以及數(shù)據(jù)的長度不同。為使本芯片通用于符合IEC 1158規(guī)范的各現(xiàn)場總線系統(tǒng),芯片內(nèi)部設(shè)置有可配置的特征碼寄存器。用戶可根據(jù)所使用的現(xiàn)場總線協(xié)議規(guī)定,配置特征碼以實現(xiàn)對不同現(xiàn)場總線協(xié)議的支持,同時可通過閑談寄存器配置滿足不同協(xié)議的總線占用時間要求。
驗證平臺硬件選用黑金基于FPGA 芯片的ZYNQ-7015開發(fā)板,軟件環(huán)境為Vivado 以及Vivado SDK,圖6 為芯片測試架構(gòu)圖,芯片運行在FPGA 上,CPU 為ARM 處理器,驗證所用現(xiàn)場總線協(xié)議為基金會現(xiàn)場總線協(xié)議(FF)。
圖6 芯片測試架構(gòu)
測試流程如圖7 所示,左側(cè)為CPU 驅(qū)動現(xiàn)場總線芯片發(fā)送數(shù)據(jù)的流程圖,右側(cè)為CPU 等待現(xiàn)場總線芯片中斷信號進行相應(yīng)數(shù)據(jù)處理流程圖。系統(tǒng)啟動后,主站及從站CPU 通過AXI-Lite 總線配置現(xiàn)場總線芯片工作模式,主站CPU 將指令通過AXI-Full 總線發(fā)送給現(xiàn)場總線芯片并使能發(fā)送,現(xiàn)場總線芯片偵測到使能信號后采用流水線模式對數(shù)據(jù)進行數(shù)據(jù)處理并發(fā)送到現(xiàn)場總線上。從站現(xiàn)場總線芯片偵測到載波后進行數(shù)據(jù)解碼等處理后產(chǎn)生中斷信號,CPU 響應(yīng)中斷后通過AXI-Lite 總線讀取現(xiàn)場總線芯片的中斷類型寄存器。若為數(shù)據(jù)就緒中斷,則通過AXI-Full 總線讀取現(xiàn)場總線新品內(nèi)部的數(shù)據(jù)緩存。從站CPU 進行裁決后采用與主站相同的工作流程驅(qū)動從站現(xiàn)場總線芯片發(fā)送回復(fù)數(shù)據(jù)。
圖7 芯片測試流程圖
測試所用協(xié)議為符合IEC 1158 標準的基金會現(xiàn)場總線(FF)協(xié)議,通過CPU 配置芯片為內(nèi)部回環(huán)模式后采集到的發(fā)送(主機)與接收(從機)時序。圖8 為測試過程中上位機軟件的部分打印信息,包括讀取的芯片配置信息、工作模式和發(fā)送(TX)及接收(RX)的數(shù)據(jù)。圖9 為芯片測試時抓取的部分波形圖。
圖8 上位機打印的測試過程信息
圖9 芯片測試波形圖
本文介紹了一種支持在IEC 1158 現(xiàn)場總線標準范圍內(nèi)進行協(xié)議擴展的現(xiàn)場總線芯片架構(gòu),擁有AXI 高速CPU 接口、Manchester 編解碼電路、CRC 校驗電路、極性偵測及糾正電路。擁有豐富的控制寄存器及狀態(tài)寄存器,可配置芯片運行模式,如中斷屏蔽模式、回環(huán)模式,極性糾正測試模式等。并基于ZYNQ-7015 開發(fā)板進行了芯片功能驗證,驗證結(jié)果顯示本文所設(shè)計的芯片達到了設(shè)計要求。