李茂林
摘? 要: 設(shè)計一種采用FPGA的數(shù)據(jù)采集傳輸系統(tǒng)。以FPGA為邏輯控制核心,通過RS485接口接收上位機指令,數(shù)據(jù)傳輸采用SDLC(同步數(shù)據(jù)鏈路控制)協(xié)議以提高可靠性。FPGA采集六路AD數(shù)據(jù)以及八路溫度數(shù)據(jù),這些數(shù)據(jù)經(jīng)由DSP處理之后存儲至FLASH中。FPGA根據(jù)上位機指令,讀取FLASH中相應(yīng)的數(shù)據(jù)并通過RS485接口上傳至上位機。經(jīng)系統(tǒng)測試驗證,該設(shè)計能夠滿足技術(shù)要求,數(shù)據(jù)的采集、存儲、傳輸均正確,為后續(xù)工作提供了保障。
關(guān)鍵詞: FPGA; 采集傳輸; 存儲; SDLC協(xié)議; FLASH
中圖分類號:TP31? ? ? ? ? 文獻標(biāo)識碼:A? ? 文章編號:1006-8228(2021)04-49-05
Abstract: A data acquisition and transmission system based on FPGA is designed. FPGA is used as the logic control core, and RS485 interface is used to receive instructions from upper computer. SDLC (synchronous data link control) protocol is used for data transmission to improve reliability. FPGA collects six channels of AD data and eight channels of temperature data, which are processed by DSP and stored in FLASH. According to the instructions of the upper computer, FPGA reads the corresponding data in FLASH and uploads it to the upper computer through RS485 interface. It is verified by the system test that the design can meet the technical requirements, and the acquisition, storage and transmission of the data are correct, which provides a guarantee for the follow-up work.
Key words: FPGA; acquisition and transmission; storage; SDLC protocol; FLASH
0 引言
隨著國際形勢的不斷變化,國家安全越來越得到人們的重視。光電系統(tǒng)廣泛應(yīng)用于探測系統(tǒng)、導(dǎo)彈防御、航空、紅外探測等領(lǐng)域。光電探測技術(shù),不僅需要不斷地優(yōu)化復(fù)雜的算法,還需要采集更加準(zhǔn)確的前端數(shù)據(jù)[1]。系統(tǒng)選用FPGA作為主控芯片,利用其強大的并行處理能力,快速高效的完成數(shù)據(jù)的采集、存儲及傳輸任務(wù)。系統(tǒng)設(shè)計對于開展后續(xù)數(shù)據(jù)解算等工作具有重要的意義。
1 系統(tǒng)總體設(shè)計
系統(tǒng)采用Xilinx公司的Spartan6系列XC6SLX45芯片作為邏輯控制核心[2],上電時啟動對六路AD數(shù)據(jù)以及八路溫度的采集,并將采集好的數(shù)據(jù)按照1KHz的頻率通過EMIF接口發(fā)送至DSP,DSP對收到的數(shù)據(jù)進行相應(yīng)的處理。FPGA和DSP通過握手信號進行信息交互,F(xiàn)PGA解析相關(guān)指令并控制FLASH進行擦除、讀寫操作。同時,F(xiàn)PGA通過RS485接口接收上位機發(fā)送的指令信息,在技術(shù)要求規(guī)定的時間內(nèi),完成數(shù)據(jù)的接收及發(fā)送。系統(tǒng)總體設(shè)計框圖如圖1所示。
2 系統(tǒng)總體設(shè)計
2.1 溫度采集模塊
系統(tǒng)采用A/D轉(zhuǎn)換器LTC1863實現(xiàn)對外部8個通道的溫度采集。LTC1863芯片的分辨率為16bit,系統(tǒng)上電啟動后,通過對芯片寫入配置數(shù)據(jù)來完成不同通道數(shù)據(jù)的采集,數(shù)據(jù)傳輸波特率為1Mbps,采樣頻率為1KHz。溫度采集模塊的硬件原理圖如圖2所示。#CS為啟動數(shù)據(jù)轉(zhuǎn)換引腳,初始狀態(tài)時#CS為高電平,當(dāng)它變?yōu)榈碗娖綍r啟動一次A/D轉(zhuǎn)換。在數(shù)據(jù)轉(zhuǎn)換期間,LTC1863接收配置字節(jié),并輸出轉(zhuǎn)換結(jié)果[3]。設(shè)計時,為了降低其他電路對LTC1863輸入端的噪聲及失真影響,在模擬輸入之前增加了濾波電路。
2.2 RS485收發(fā)模塊
系統(tǒng)采用MAX485芯片實現(xiàn)FPGA與上位機的同步半雙工通訊[4]。RS485收發(fā)模塊的硬件原理圖如圖3所示,其中RE與DE管腳分別表示接收使能和發(fā)送使能,且均為低電平有效。當(dāng)系統(tǒng)處于初始化狀態(tài)時,設(shè)置R/DE=0,即接收使能。由FPGA根據(jù)系統(tǒng)時序來控制這兩個管腳的使能切換。為了提高RS485通訊的可靠性,設(shè)計上采用了上拉電阻、下拉電阻以及瞬態(tài)抑制二極管P6KE6.8CA來對該芯片進行保護[5]。
3 系統(tǒng)軟件設(shè)計
系統(tǒng)選用FPGA作為邏輯控制核心,通過RS485接口接收上位機指令。通過對接收到的指令信息進行解析,從而獲取有效數(shù)據(jù)發(fā)送至DSP進行后續(xù)的數(shù)據(jù)處理。DSP將數(shù)據(jù)處理完成后,將通過EMIF接口,采用握手信號作為與FPGA進行數(shù)據(jù)交互的標(biāo)志來對數(shù)據(jù)進行傳輸。FPGA接收到處理好的數(shù)據(jù)后,將其存儲至FLASH中。當(dāng)FPGA接收到指令時,讀取FLASH中的數(shù)據(jù),同時通過RS485接口上傳至上位機進行顯示及處理。系統(tǒng)軟件設(shè)計框圖如圖4所示。
3.1 RS485接收模塊
為提高數(shù)據(jù)傳輸可靠性,F(xiàn)PGA與上位機的通信協(xié)議采用SDLC協(xié)議。它通常作為主從設(shè)備之間進行通訊的一種協(xié)議[6]。SDLC協(xié)議的數(shù)據(jù)傳輸格式如圖5所示,它主要由啟動標(biāo)志0x7E、目的地址、控制信息、數(shù)據(jù)、校驗碼及結(jié)束標(biāo)志0x7E組成[7]。其中控制信息用于區(qū)分該幀數(shù)據(jù)是主設(shè)備發(fā)送的命令,還是從設(shè)備反饋給主設(shè)備的響應(yīng)。
數(shù)據(jù)在傳輸過程中,會對除啟動標(biāo)志及結(jié)束標(biāo)志以外的比特位進行“補0”操作[8],即:若連續(xù)發(fā)送五個“1”,則會補發(fā)一個“0”,然后繼續(xù)按位發(fā)送數(shù)據(jù)。數(shù)據(jù)傳輸波特率為2Mbps。RS485接收模塊由兩部分內(nèi)容組成,底層模塊實現(xiàn)對啟動標(biāo)志及結(jié)束標(biāo)志的識別,并對數(shù)據(jù)進行“去0”操作。頂層模塊實現(xiàn)一幀數(shù)據(jù)的長度計算并進行數(shù)據(jù)發(fā)送。
首先底層模塊為確保RS485模塊上電時收到的0x7E是啟動標(biāo)志,采用一個16bit的移位寄存器對數(shù)據(jù)進行判斷。當(dāng)MAX485芯片管腳RE=0,即接收使能時,采樣1bit并移至移位寄存器MSB,當(dāng)采樣次數(shù)為16時,對該移位寄存器進行判斷。若高8bit字節(jié)為0x7E,而低8bit字節(jié)不為0x7E時,認(rèn)為接收到的0x7E為啟動標(biāo)志,并發(fā)送一個開始標(biāo)志給頂層模塊;若為其他情況,則繼續(xù)進行移位,直至移位寄存器中的值為0x7EXX(XX不為7E)。判斷到啟動標(biāo)志以后,開始對數(shù)據(jù)按位進行“去0”操作。設(shè)計上采用兩個4bit的寄存器count1、count2來對數(shù)據(jù)進行控制。count1用來計數(shù)收到連續(xù)數(shù)據(jù)位為“1”的個數(shù),若計數(shù)不足5時,同時接收到的下一個數(shù)為0,則計數(shù)清零。若計數(shù)為5時,將繼續(xù)接收下一個數(shù)據(jù)并對其進行判斷。若為0,則在該周期內(nèi)不做任何操作,等待接收下一位,且計數(shù)清零。若不為0,則發(fā)送一個異常標(biāo)志給頂層模塊進行處理。count2用來計數(shù)一個完整的字節(jié),當(dāng)經(jīng)過“去0”操作之后的數(shù)據(jù)位計數(shù)至8時,即count2=8時,發(fā)送一個標(biāo)志給頂層模塊,表示一個字節(jié)接收完畢。同時,對16bit移位寄存器的低8bit進行判斷,若為0x7E,則認(rèn)為接收到了結(jié)束標(biāo)志,底層模塊將發(fā)送幀結(jié)束標(biāo)志至頂層模塊。
當(dāng)頂層模塊接收到開始標(biāo)志時,將采樣數(shù)據(jù)至FIFO中,同時進行長度length的累加。當(dāng)接收到結(jié)束標(biāo)志后,將寫數(shù)據(jù)及數(shù)據(jù)長度寫至EMIF接口相應(yīng)地址上,通過與DSP進行握手來完成數(shù)據(jù)的傳輸。圖6為RS485接收模塊流程圖。
3.2 FLASH存儲模塊
FPGA根據(jù)上位機指令對經(jīng)DSP處理后的數(shù)據(jù)進行存儲。依據(jù)指令,外部設(shè)備將發(fā)送八個文件的內(nèi)容至FLASH中進行存儲,因此需要對其文件位置進行扇區(qū)地址劃分。系統(tǒng)上電后,F(xiàn)PGA依據(jù)指令信息,來對指定文件進行扇區(qū)擦除。擦除完成后,將文件內(nèi)容存儲至FLASH指定扇區(qū)相應(yīng)的地址上。FLASH芯片與FPGA通過SPI接口進行信息交互,系統(tǒng)主頻為160MHz,SPI時鐘頻率為40MHz。當(dāng)FPGA接收到讀文件指令時,F(xiàn)PGA將讀取相應(yīng)地址的數(shù)據(jù)并通過SPI接口發(fā)送至RS485發(fā)送模塊進行后續(xù)數(shù)據(jù)處理。圖7為FLASH的寫時序圖。
FPGA進行FLASH寫操作時,首先需要發(fā)送寫使能命令0x06,然后對配置寄存器進行初始化配置[9]。配置完成后依次發(fā)送寫使能命令0x06、寫指令0x02、寫地址、寫數(shù)據(jù)。由于每個文件包含800幀數(shù)據(jù),每一幀有256個數(shù)據(jù)字節(jié),F(xiàn)PGA采用按字節(jié)寫的方式寫數(shù)據(jù)至FLASH中,所以每寫完一個字節(jié),地址加1。當(dāng)寫完800幀數(shù)據(jù)后,F(xiàn)PGA發(fā)送完成標(biāo)志給DSP,以便下一個文件內(nèi)容的寫入。
4 系統(tǒng)測試與驗證
為實現(xiàn)對系統(tǒng)的測試與驗證,分別對RS485收發(fā)模塊以及FLASH存儲模塊進行了仿真測試,并采用chipscope對系統(tǒng)進行在線調(diào)試,驗證了系統(tǒng)功能的正確性。
4.1 RS485接收模塊仿真
由于數(shù)據(jù)在接收時需進行“去0”操作,若在接收的數(shù)據(jù)中,出現(xiàn)連續(xù)‘1的個數(shù)大于5時,系統(tǒng)將會認(rèn)為接收異常,因此需對接收正常與接收異常這兩種情況均進行驗證。編寫仿真文件,輸入數(shù)據(jù)為0x7E、0xd5、0x53、0x9f、0xfb、0xf8、0xf2、0x7d、0xf8、0x7c、0x7c、 0x7E,對RS485接收模塊進行仿真測試,測試結(jié)果如圖8所示。
在數(shù)據(jù)“去0”過程中,error保持0不變,表示接收的數(shù)據(jù)未出現(xiàn)異常?!叭?”輸出的數(shù)據(jù)如圖8中dataout[7:0]所示,對其進行放大顯示,如圖9所示,輸出數(shù)據(jù)為0x7E、0xd5、0x53、0xdf、0x7d、0x7e、0xfe、0xc7、0xf7、0xf9、0x7E,測試結(jié)果與設(shè)計相符。
輸入數(shù)據(jù)為0x7E、0xd5、0x53、0x9f、0xfb、0xff、0xf2、0x7d、0xf8、0x7c、0x7c、 0x7E,對其進行仿真測試,測試結(jié)果如圖10所示,當(dāng)檢測到數(shù)據(jù)0xFF時,即出現(xiàn)連續(xù)五個以上的‘1,認(rèn)為接收異常,error在一個周期內(nèi)置為1,且當(dāng)前這一幀數(shù)據(jù)不再進行發(fā)送。該模塊將重新檢測下一幀數(shù)據(jù)幀頭0x7E,測試結(jié)果與設(shè)計相符。
4.2 FLASH存儲模塊仿真
為驗證FLASH存儲模塊的功能,對其各模塊進行仿真測試。圖11為對FLASH中寫操作模塊進行仿真得到的時序圖。為便于觀察,模擬寫入FLASH的文件1中的數(shù)據(jù)內(nèi)容為0x00-0xFF。當(dāng)該模塊接收到寫字節(jié)標(biāo)志時,將要寫入FLASH的數(shù)據(jù)字節(jié)進行暫存,然后發(fā)送寫使能標(biāo)志、寫指令、寫地址,最后寫入暫存的數(shù)據(jù)。等待寫操作完成后,開始接收下一個字節(jié),并寫入FLASH。圖中寫入文件數(shù)據(jù)首地址為0x010000,隨著數(shù)據(jù)的寫入,地址也在遞增。
4.3 在線調(diào)試
系統(tǒng)采用ISE自帶在線調(diào)試工具Chipscope對系統(tǒng)的輸出進行在線調(diào)試。RS485模塊工作方式采用同步半雙工通訊,因此指令及數(shù)據(jù)的收發(fā)是不同步的。系統(tǒng)對數(shù)據(jù)進行存儲、發(fā)送等操作均需依據(jù)指令信息。為驗證FLASH存儲模塊及RS485數(shù)據(jù)發(fā)送模塊之間的通訊是否正常,首先提前將數(shù)據(jù)0x00-0xFF寫入FLASH中,然后對FLASH的讀取、數(shù)據(jù)的發(fā)送進行在線調(diào)試。由圖12可以看出,發(fā)送一幀的數(shù)據(jù)長度為262,包括幀頭0x7E、目標(biāo)地址0xD5、回應(yīng)幀53、校驗碼0x6980和幀尾0x7E。數(shù)據(jù)發(fā)送長度正確,且實現(xiàn)了RS485模塊的發(fā)送數(shù)據(jù)補零操作。
上位機通過RS485接口接收串行數(shù)據(jù),對其進行“去0”操作后轉(zhuǎn)換成并行數(shù)據(jù)顯示,處理后的數(shù)據(jù)如圖13所示。與系統(tǒng)發(fā)送的數(shù)據(jù)相一致,驗證了該系統(tǒng)測試無異常,在滿足技術(shù)指標(biāo)的前提下,正確實現(xiàn)了數(shù)據(jù)的采集存儲與傳輸。
5 結(jié)束語
本文提出的多路數(shù)據(jù)采集傳輸系統(tǒng)的設(shè)計采用FPGA作為系統(tǒng)控制核心,RS485作為數(shù)據(jù)傳輸接口,正確實現(xiàn)了多路數(shù)據(jù)的采集傳輸。經(jīng)過一次通電24小時測試驗證,數(shù)據(jù)傳輸速率達到2Mbps,且未出現(xiàn)丟幀、亂幀的現(xiàn)象,系統(tǒng)工作穩(wěn)定,實時性好,可靠性高。利用FPGA軟件搭建底層協(xié)議,可移植性好,進而降低了生產(chǎn)成本,為各個生產(chǎn)領(lǐng)域的數(shù)據(jù)采集系統(tǒng)提供了一種非??煽壳腋咝У姆椒?,應(yīng)用前景看好。
參考文獻(References):
[1] 鄧昌晟,劉昱,李海洋,王小松,張海英.ETC系統(tǒng)中HDLC協(xié)議解碼控制器的Verilog HDL實現(xiàn)[J].微型機與應(yīng)用,2017.36(19):30-33
[2] 李果萍,成龍,柴波.基于SDLC協(xié)議的同步RS 485總線控制器的設(shè)計[J].現(xiàn)代電子技術(shù),2009.32(4):152-154
[3] 耿立中,王鵬,馬騁,賈惠波.RS485高速數(shù)據(jù)傳輸協(xié)議的設(shè)計與實現(xiàn)[J].清華大學(xué)學(xué)報(自然科學(xué)版),2008.8:1311-1314
[4] Research on a 485-serial network architecture in intelligent uptown management. NI Haiyan,HU Chao,MA Changwang. Proc 2006 IEEE Conf on Mechatronics and Automation,2006.
[5] 蔣玉峰,張志明,崔麥會,尹業(yè)宏.RS-485圖像數(shù)據(jù)并行傳輸協(xié)議的FPGA設(shè)計與實現(xiàn)[J].電視技術(shù),2012.36(17):71-72
[6] 曹志錦,王永梁.基于RS-485的多機串行通信實驗系統(tǒng)設(shè)計及應(yīng)用[J].實驗技術(shù)與管理,2002.5:65-67,70
[7] 高大勇,劉書信.一種基于FPGA的SDLC協(xié)議的通信板卡的實現(xiàn)[J].計算機光盤軟件與應(yīng)用,2012.12:175,177
[8] 岳絢,楊健.基于VHDL描述語言的高級數(shù)據(jù)鏈路控制協(xié)議實現(xiàn)[J].電氣自動化,2012.34(2):16-18
[9] 陳晨,李志來,徐偉,金光.基于FPGA的高速同步HDLC通信控制器設(shè)計[J].電子設(shè)計工程,2010.18(8):175-178