劉文彬,張文愛
(太原理工大學(xué) 信息工程學(xué)院,山西 太原030024)
動態(tài)軌道衡是一種安裝在鐵路上的對通過的列車實現(xiàn)不停車動態(tài)檢測的稱量設(shè)備。整個軌道衡系統(tǒng)中,數(shù)據(jù)采集與傳輸部分位于系統(tǒng)最前端,它的采樣速率、傳輸穩(wěn)定性等指標(biāo)直接決定了系統(tǒng)的性能和工作效率。因此,要提高動態(tài)軌道衡的性能與稱量速度,首先應(yīng)從數(shù)據(jù)采集與傳輸系統(tǒng)著手。
傳統(tǒng)動態(tài)軌道衡數(shù)據(jù)采集與傳輸系統(tǒng)多使用單片機、ARM等器件設(shè)計,一旦制作完成,修改和升級將十分困難。但由于軌道衡使用領(lǐng)域廣泛且應(yīng)用環(huán)境多變,因此傳統(tǒng)設(shè)計大多只適用某一領(lǐng)域,可升級性和通用性較差。與傳統(tǒng)方法不同,SoPC設(shè)計用FPGA芯片作為核心,通過IP復(fù)用技術(shù)將一系列IP核組成可編程片上系統(tǒng),為動態(tài)軌道衡數(shù)據(jù)處理系統(tǒng)帶來了靈活、可裁剪等新特性,為適應(yīng)不同領(lǐng)域的應(yīng)用需求提供了簡單易行的解決方案。
本文根據(jù)SoPC設(shè)計方法與IP復(fù)用技術(shù)的思想[1],提出了由高精度高速模/數(shù)轉(zhuǎn)換器(ADC)AD7714、以太網(wǎng)控制器ENC28J60、IP核和FPGA芯片構(gòu)成的新型動態(tài)軌道衡數(shù)據(jù)采集與傳輸系統(tǒng)的SoPC設(shè)計方案及實現(xiàn)方法。該系統(tǒng)充分體現(xiàn)了SoPC設(shè)計的優(yōu)勢,具有開發(fā)時間短、靈活高效、易于升級等特點。
在動態(tài)軌道衡數(shù)據(jù)處理領(lǐng)域,已有許多采用FPGA器件的設(shè)計,但這些設(shè)計大部分只將其用于數(shù)據(jù)采集控制,在數(shù)據(jù)傳輸部分(如以太網(wǎng)傳輸)仍使用單片機進行控制。這樣并未構(gòu)成完整的SoPC設(shè)計,不僅增加了系統(tǒng)的體積,還限制了系統(tǒng)的整體運行速度。在需要根據(jù)不同使用環(huán)境對系統(tǒng)進行調(diào)整時十分困難,無法充分體現(xiàn)使用FPGA器件進行SoPC設(shè)計的優(yōu)勢與靈活性。
本文根據(jù)動態(tài)軌道衡的應(yīng)用需求,設(shè)計了一款完全基于SoPC方案的FPGA數(shù)據(jù)采集與傳輸控制系統(tǒng)。系統(tǒng)設(shè)計采用Altera公司的Quartus II集成開發(fā)環(huán)境和EP1C12芯片開發(fā)平臺,通過使用已有IP核與自主設(shè)計IP核相結(jié)合的方法完成開發(fā)。設(shè)計使用IP復(fù)用技術(shù)將整個系統(tǒng)集成至一片F(xiàn)PGA芯片,不僅極大地節(jié)約了系統(tǒng)開發(fā)時間與成本,同時由于FPGA芯片的現(xiàn)場可編程特性,通過軟件編程即可改變系統(tǒng)的硬件功能,使系統(tǒng)的更改與升級工作變得十分簡便,賦予了系統(tǒng)靈活高效、易于升級的特點,對應(yīng)用廣泛、使用環(huán)境多樣的動態(tài)軌道衡十分有利。另外,F(xiàn)PGA器件優(yōu)秀的并行處理能力與低功耗特性使其優(yōu)勢更加突出。
系統(tǒng)總體結(jié)構(gòu)如圖1所示,可分為數(shù)據(jù)采集、以太網(wǎng)傳輸和SoPC控制核心3部分。數(shù)據(jù)采集部分包含3片ADC對8路信號同時采樣,F(xiàn)PGA芯片突出的并行處理能力很好地協(xié)調(diào)了各芯片的協(xié)同工作。SoPC控制核心系統(tǒng)內(nèi)部由多個IP核構(gòu)成,處理器核心CPU采用Nios II軟核處理器,采樣轉(zhuǎn)換控制IP使用開發(fā)環(huán)境提供的SPI控制核,以太網(wǎng)芯片控制IP使用自主設(shè)計的以太網(wǎng)控制器ENC28J60專用控制IP核。
圖1 數(shù)據(jù)采集與傳輸系統(tǒng)結(jié)構(gòu)框圖
ADC選用ADI公司的AD7714,該芯片最高可實現(xiàn)24 bit無誤碼轉(zhuǎn)換,同時具有SPI兼容的三線接口,控制簡單。它的模擬輸入端可以配置為5路準(zhǔn)差分輸入或3路全差分輸入。通過實驗發(fā)現(xiàn),準(zhǔn)差分輸入時信號干擾較大,所以采用全差分輸入來抑制共模干擾。對8路傳感器信號進行轉(zhuǎn)換需要3片AD7714芯片。AD7714的電路原理如圖2所示,傳感器信號由P1接口輸入,AD7714三線SPI接口、主時鐘輸入端及DRDY引腳由P2引出并與控制模塊相連。
圖2 AD7714電路原理圖
對數(shù)據(jù)采樣的控制采用了開發(fā)環(huán)境提供的SPI控制IP核。數(shù)據(jù)采樣電路與控制模塊的連接如圖3所示。INA128將毫伏級傳感器信號放大至A/D轉(zhuǎn)換量程范圍內(nèi)[2],AD780提供A/D轉(zhuǎn)換所需的2.5 V基準(zhǔn)電壓[3]。AD7714主時鐘MCLK由FPGA芯片內(nèi)部的鎖相環(huán)PLL(Phase Lock Loop)產(chǎn)生,設(shè)置SPI核的時鐘頻率為5 kHz,寄存器位寬為8 bit,空閑時鐘相位為0。AD7714數(shù)據(jù)轉(zhuǎn)換狀態(tài)由引腳指示,當(dāng)為0時說明數(shù)據(jù)寄存器有更新,即產(chǎn)生了新的采樣數(shù)據(jù)。因此在控制模塊中添加一個通用IO引腳來監(jiān)視的狀態(tài)變化[4],當(dāng)有新數(shù)據(jù)產(chǎn)生時,由軟件程序控制讀取采樣數(shù)據(jù)。
圖3 數(shù)據(jù)采集電路與控制模塊
數(shù)據(jù)傳輸由以太網(wǎng)通信實現(xiàn),設(shè)計采用以太網(wǎng)控制器ENC28J60。ENC28J60是Microchip Technology公司推出的帶有標(biāo)準(zhǔn)串行外設(shè)接口SPI(Serial Peripheral Interface)的獨立以太網(wǎng)控制器,任何配備SPI接口的控制器都可以使用該芯片作為以太網(wǎng)接口[5]。設(shè)計采用現(xiàn)成的ENC28J60網(wǎng)絡(luò)模塊進行開發(fā)。
現(xiàn)有的設(shè)計都是用SPI核加通用I/O口的方式對ENC28J60進行控制,并沒有專用的控制IP核。這樣的設(shè)計方法在不同的系統(tǒng)中需要較大的改動,無法體現(xiàn)IP復(fù)用的設(shè)計理念。因此本設(shè)計開發(fā)了基于Avalon總線標(biāo)準(zhǔn)的專用控制IP核。Avalon總線是Altera公司提供的一個開放的總線標(biāo)準(zhǔn),基于其標(biāo)準(zhǔn)的設(shè)計完全免費,并且其接口標(biāo)準(zhǔn)與Wishbone等常用的片上總線相似,只需極少的改動便可在不同的系統(tǒng)下移植和使用,充分體現(xiàn)了IP復(fù)用的設(shè)計理念[6]。
2.2.1 IP核接口設(shè)計
IP核接口信號包含兩組,一組是與網(wǎng)卡芯片之間的接口,另一組是Avalon從接口信號。IP核與ENC28J60之間的接口是固定的,有SPI接口信號sck、ss_n、mosi、miso和中斷輸入接口int_n、wol_n。對 于Avalon總 線 信號,一個Avalon從外設(shè)中可以包含任意的信號類型,在這里根據(jù)IP核的需求而定[7]。設(shè)計所用到的Avalon從接口信號及描述如表1所示,表中N為程序中用類屬參數(shù)定義的數(shù)據(jù)線寬度,方便修改以適應(yīng)不同的應(yīng)用。
表1 Avalon從接口信號
2.2.2 IP核內(nèi)部邏輯設(shè)計
專用IP核內(nèi)部由寄存器邏輯和任務(wù)邏輯構(gòu)成。寄存器邏輯包含狀態(tài)寄存器EJSTAT、控制寄存器EJCTRL、接收數(shù)據(jù)寄存器RXDATA和發(fā)送數(shù)據(jù)寄存器TXDATA。狀態(tài)寄存器中的各位表示IP核的狀態(tài),包括接收溢出錯誤標(biāo)志、發(fā)送溢出錯誤標(biāo)志、接收/發(fā)送寄存器空標(biāo)志以及ENC28J60芯片中斷標(biāo)志,通過控制寄存器相應(yīng)位置1可以使能各標(biāo)志中斷功能。接收和發(fā)送數(shù)據(jù)寄存器是有效數(shù)據(jù)的暫存空間。
任務(wù)邏輯由輸入輸出邏輯、寄存器操作邏輯以及有限狀態(tài)機FSM(Finite State Machine)3部分組成。其中有限狀態(tài)機是任務(wù)邏輯的核心,負責(zé)完成SPI數(shù)據(jù)的輸入/輸出、狀態(tài)寄存器相應(yīng)位清零或置位操作。FSM共有N+1個狀態(tài),狀態(tài)轉(zhuǎn)移如圖4所示。sysen是控制寄存器中系統(tǒng)使能控制位,高電平有效,表示進入系統(tǒng)操作,否則系統(tǒng)不工作。
圖4 FSM狀態(tài)轉(zhuǎn)移圖
狀態(tài)0為系統(tǒng)的初始狀態(tài),此狀態(tài)下令SPI時鐘輸出使能端無效,再判斷系統(tǒng)是否使能,由判斷結(jié)果決定進入下一狀態(tài)或停留在該狀態(tài)。當(dāng)SYSEN=1,系統(tǒng)進入狀態(tài)N+1,說明即將開始數(shù)據(jù)操作,該狀態(tài)使能SPI時鐘sck與從機選擇信號ss_n輸出,為數(shù)據(jù)操作做準(zhǔn)備。狀態(tài)N~狀態(tài)1為有效數(shù)據(jù)移位操作狀態(tài),在這N個狀態(tài)中完成相應(yīng)的數(shù)據(jù)移入和移出操作。在完成N位數(shù)據(jù)操作之后,如果系統(tǒng)使能位依然有效,則系統(tǒng)進入下一個數(shù)據(jù)操作循環(huán),否則系統(tǒng)回到狀態(tài)0。
以上接口設(shè)計和內(nèi)部邏輯在Quartus II環(huán)境下使用VHDL語言編程實現(xiàn)。編譯報告顯示程序正確無誤,共用220個邏輯單元,占邏輯單元總數(shù)的2%。最終以太網(wǎng)數(shù)據(jù)傳輸模塊結(jié)構(gòu)如圖5所示。
圖5 以太網(wǎng)傳輸模塊
構(gòu)建SoPC控制核心的工作使用SoPC Builder組件完成。SoPC Builder是一個自動化SoPC硬件系統(tǒng)開發(fā)工具,它可以使設(shè)計者在很短的時間內(nèi)定義一個完整的硬件系統(tǒng)[5]。它提供了簡單方便的用戶圖形界面,設(shè)計人員只需在該環(huán)境下添加所需的模塊,再通過添加片上總線將各個模塊組合起來即可構(gòu)成完整的SoPC系統(tǒng)。
SoPC控制核心開發(fā)第一步是為系統(tǒng)添加CPU,設(shè)計選用Altera公司的Nios II嵌入式軟核,與其他常見的嵌入式軟核相比,Nios II具有更高的主頻且占用較少的邏輯資源;然后,在SoPC Builder環(huán)境下添加SPI核和自主設(shè)計的網(wǎng)卡控制IP核;最后,通過Avalon片上總線將各控制模塊與Nios II軟核連接起來,就構(gòu)成了數(shù)據(jù)采集與傳輸系統(tǒng)的SoPC控制核心,其內(nèi)部結(jié)構(gòu)如圖6所示。
圖6 SoPC控制核心內(nèi)部結(jié)構(gòu)圖
Altera提供了Nios II軟件集成開發(fā)環(huán)境Nios II IDE,所有處理器軟件開發(fā)任務(wù)(如編輯、調(diào)試等)都在該環(huán)境下完成。
設(shè)計選用嵌入式實時操作系統(tǒng)μC/OS-II,它的結(jié)構(gòu)簡潔精練,可讀性很強,同時又具備了實時操作系統(tǒng)的全部功能[8]。Nios II IDE開發(fā)環(huán)境中提供了μC/OS-II工程,通過添加工程即可方便地實現(xiàn)操作系統(tǒng)移植。
針對不同的功能進行程序設(shè)計,從操作系統(tǒng)的角度來講,就是針對要實現(xiàn)的功能在系統(tǒng)中添加任務(wù),由內(nèi)核對各個任務(wù)進行管理和調(diào)度。μC/OS-II中用戶任務(wù)代碼的一般結(jié)構(gòu)如下:
本設(shè)計中需要添加的用戶任務(wù)包括A/D采樣與轉(zhuǎn)換控制程序和以太網(wǎng)傳輸控制程序。用戶任務(wù)由可中斷和不可中斷的代碼組成,宏定義OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()控制何時響應(yīng)中斷和何時屏蔽中斷[8],可根據(jù)需要在用戶任務(wù)中添加多個不可中斷代碼段,以實現(xiàn)不同的任務(wù)需求。
3.1.1 A/D采樣與轉(zhuǎn)換控制程序
A/D采樣與轉(zhuǎn)換控制采用了Altera提供的SPI核,與IP核一起提供操作函數(shù)alt_avalon_spi_command()。設(shè)計直接調(diào)用該函數(shù),把它添加至用戶代碼部分,通過設(shè)置不同的參數(shù)完成A/D采樣控制。
AD7714的所有操作都從寫通信寄存器開始,寫入通信寄存器的數(shù)據(jù)決定下一次操作是讀或?qū)懖僮鳎约皩δ膫€寄存器進行操作。通信寄存器寫操作程序如下:
其中,alt_avalon_spi_command()的參數(shù)的含義依次是:SPI_BASE和1用于選擇SPI從設(shè)備;參數(shù)1和writedata分別表示寫入數(shù)據(jù)長度和數(shù)據(jù)地址;參數(shù)0和NULL表示不進行讀出操作(如果需要進行讀操作,就在這兩個參數(shù)位置上填寫讀出數(shù)據(jù)長度和讀出數(shù)據(jù)存儲地址);最后一個參數(shù)0表示操作后釋放從設(shè)備。
寫通信寄存器操作完成后即可進行對其他寄存器的操作,如讀數(shù)據(jù)寄存器等,同樣使用alt_avalon_spi_command()函數(shù),操作完成后芯片返回到等待對通信寄存器寫操作的狀態(tài)。
3.1.2 以太網(wǎng)傳輸控制程序
自主設(shè)計IP核的軟件使用C語言編寫完成,程序包括兩部分,一是定義IP核內(nèi)部寄存器映像的C頭文件enc28j60_ctrl_ip.h,為操作底層硬件提供符號化常量;另一部分是硬件的驅(qū)動程序enc28j60_ctrl_ip.c,提供對硬件底層操作的基本程序。
驅(qū)動程序主要是通過對寄存器的操作來實現(xiàn)不同的功能,因此用到Altera提供的寄存器存取函數(shù)IOWR()和IORD(),例如對發(fā)送數(shù)據(jù)寄存器TXDATA寫操作函數(shù)IOWR(enc28j60_ctrl_ip_base,3,data),其中enc28j60_ctrl_ip_base是IP核的基地址,3是發(fā)送數(shù)據(jù)寄存器偏移地址,data是要寫入的數(shù)據(jù)。
以太網(wǎng)控制IP核驅(qū)動程序需要結(jié)合TCP/IP協(xié)議棧才能進行以太網(wǎng)通信操作[9]。設(shè)計選用Interniche公司的NicheStack嵌入式TCP/IP協(xié)議棧,它具有體積小、易移植等優(yōu)點[10]。與操作系統(tǒng)的移植相似,Nios II IDE開發(fā)環(huán)境中提供了NicheStack示例工程,通過添加工程即可實現(xiàn)協(xié)議棧移植。
系統(tǒng)的主要操作流程如圖7所示。當(dāng)系統(tǒng)上電復(fù)位完成后,控制核心先對各芯片進行配置,AD7714芯片的配置從寫通信寄存器開始,包括增益設(shè)置、信號極性和通道設(shè)置等;然后對網(wǎng)卡芯片ENC28J60進行配置,也就是對網(wǎng)卡芯片進行初始化設(shè)置,包括接收/發(fā)送緩沖器設(shè)置、MAC初始化設(shè)置和PHY初始化設(shè)置等;芯片配置完成之后,系統(tǒng)進入循環(huán)接收采樣數(shù)據(jù)狀態(tài),系統(tǒng)輪詢AD7714的DRDY引腳,當(dāng)其為低電平時說明產(chǎn)生新的采樣數(shù)據(jù),則系統(tǒng)讀取數(shù)據(jù);數(shù)據(jù)讀取完成之后,送至ENC28J60通過以太網(wǎng)發(fā)送;數(shù)據(jù)發(fā)送完成之后,系統(tǒng)繼續(xù)輪詢引腳,如此循環(huán)。
圖7 系統(tǒng)操作流程
通過下載至EP1C12開發(fā)板并連接AD7714數(shù)據(jù)采集板和ENC28J60網(wǎng)絡(luò)模塊對系統(tǒng)進行了實際測試??刂坪诵墓ぷ髟?0 MHz時鐘頻率下,AD7714主時鐘頻率為2.5 MHz,結(jié)果顯示系統(tǒng)運行良好,數(shù)據(jù)采集與傳輸過程穩(wěn)定。本設(shè)計改變了傳統(tǒng)動態(tài)軌道衡數(shù)據(jù)采集與傳輸系統(tǒng)的設(shè)計方法,完全采用SoPC設(shè)計方法與IP復(fù)用技術(shù)。數(shù)據(jù)傳輸部分使用自主開發(fā)的專用IP核,該IP核在軟件仿真測試和實際運行測試中都表現(xiàn)良好。整個系統(tǒng)具有靈活方便、易于升級的優(yōu)點,可以應(yīng)用于不同的環(huán)境。
目前系統(tǒng)的數(shù)據(jù)處理仍需在上位機完成。下一步將利用FPGA芯片優(yōu)秀的并行處理能力,把數(shù)據(jù)處理部分以IP核的形式集成至控制核心,使數(shù)據(jù)處理IP核經(jīng)過調(diào)整可適應(yīng)不同的要求,或者設(shè)計成針對不同應(yīng)用的IP核,這樣整個系統(tǒng)通過軟件編程下載即可實現(xiàn)完全不同的功能,應(yīng)用前景十分廣闊。
[1]KEATING M,BRICAUD P.Reuse methodology manual[M].Berlin:Springer,2002.
[2]Texas Instruments.INA128 data sheet[Z].2005.
[3]Analog Devices.AD780 data sheet[Z].2004.
[4]張文愛,姜敏,趙磊.基于FPGA的動態(tài)軌道衡數(shù)據(jù)采集系統(tǒng)[J].同濟大學(xué)學(xué)報,2010,38(10):1525-1528.
[5]Microchip Technology.ENC28J60 data sheet[Z].2008.
[6]李蘭英.Nios II嵌入式軟核SoPC設(shè)計原理及應(yīng)用[M].北京: 北京航空航天大學(xué)出版社,2006.
[7]Altera Corporation.Avalon interface specifications[Z].2011.
[8]任哲.嵌入式實時操作系統(tǒng)μC/OS-II原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2009.
[9]FALL K R,STEVENS W R.TCP/IP illustrated volume 1:the protocols(2nd edition)[M].Addison-Wesley Educational Publishers Inc,2011.
[10]Altera Corporation.Ethernet and the NicheStack TCP/IP Stack-Nios II edition[Z].2011.