引言
中國散裂中子源實驗的簡圖如圖1所示,其原理是把中子束打在被測樣品(例如新藥品或機翼材料)上,探測被反射的中子位置就能計算出樣品的內(nèi)部結(jié)構(gòu)圖像,其特點如下: A/D采集通道多,每個通道的數(shù)據(jù)帶寬高,且需要把現(xiàn)場采集的數(shù)據(jù)傳到遠(yuǎn)程服務(wù)器上。因此,要求數(shù)據(jù)傳輸模塊既要成本低、微型化、具備網(wǎng)絡(luò)功能,也要數(shù)據(jù)帶寬高。
圖1 中國散裂中子源實驗簡圖
單片機或ARM具有微型化、低成本的特點,但數(shù)據(jù)帶寬和靈活性不滿足本項目;工控計算機數(shù)據(jù)處理能力強,有網(wǎng)絡(luò)接口,但是體積過大,成本高;傳統(tǒng)高能物理實驗采用的VME系統(tǒng)也因體積大、數(shù)據(jù)帶寬有限而不適合用在中國散裂中子源實驗上。
FPGA有很高的性能,而且內(nèi)部還集成PowerPC處理器、千兆網(wǎng)MAC等硬核資源,這使得在一塊FPGA上就能構(gòu)建一個完整的片上系統(tǒng),使整個系統(tǒng)體積可以做的很小。在FPGA片內(nèi)PowerPC硬核上移植嵌入式linux操作系統(tǒng),用軟件來實現(xiàn)網(wǎng)絡(luò)傳輸協(xié)議可以解決用FPGA硬件描述語言實現(xiàn)TCP/IP協(xié)議難度大的問題。FPGA的高性能、高可靠性和Linux的靈活性完美結(jié)合在一個片內(nèi),能較好地滿足本項目的需求。
1 系統(tǒng)的總體構(gòu)成及層次
本系統(tǒng)可以分為5個層次,如圖2所示,
最低層為外圍電路硬件層,每一層都是建立在其下一層之上。
2 系統(tǒng)外圍電路的簡介
本文在硬件上采用了實驗室自行設(shè)計的電路板,用的是帶PowerPC的xilinx Virtex4 FPGA,電路如圖3所示。
圖3 系統(tǒng)的硬件模塊框圖
3 SOPC的構(gòu)建
SOPC (System on a Programmable Chip) 即可編程片上系統(tǒng),把整個系統(tǒng)放到一塊硅片上,是一種特殊的嵌入式系統(tǒng),具有靈活的設(shè)計方式,可裁減、可擴充、可升級,并具備軟硬件在系統(tǒng)可編程的功能。
3.1 開發(fā)工具
Xilinx 公司提供了FPGA開發(fā)工具EDK(Embedded Development Kit),它帶有大量可配置可定制的IP核,可以大大提高設(shè)計的效率,使設(shè)計者把主要精力放在設(shè)計系統(tǒng)架構(gòu)上,能很方便的對FPGA進(jìn)行模塊化的重構(gòu)和裁剪,提高設(shè)計的靈活性,減少了外圍器件,符合SOPC的思想。
3.2 SOPC的總體構(gòu)成
SOPC系統(tǒng)構(gòu)建完成后的框圖如圖4所示,其中PowerPC405是已經(jīng)固化在FPGA內(nèi)部的硬核,工作頻率設(shè)為300MHz,配置時要選擇cache選項,否則運行嵌入式Linux會很慢。PowerPC405通過PLB(Process Local Bus)總線核和各個IP模塊互聯(lián)構(gòu)建了一個完整的SOPC系統(tǒng)。
圖4 FPGA內(nèi)部各個IP模塊框圖
3.3 內(nèi)存端口的設(shè)置
MPMC (Multi-Port Memory Controller)是DDR2內(nèi)存控制器的IP核,它最多可以接八個數(shù)據(jù)端口,這樣的好處是多個設(shè)備都可以通過各自的端口共享內(nèi)存,本論文使用了四個端口:port0和port1都通過plb總線連接在PowerPC上,分別用于傳輸指令和數(shù)據(jù),port2端口采用的是NPI(Native Port Interface)接口,用于接收A/D模塊傳輸過來的用戶數(shù)據(jù),port3采用SDMA (Soft Direct Memory Access)接口,通過locallink總線和千兆網(wǎng)IP核相連。在對MPMC配置時要根據(jù)內(nèi)存的型號、大小等實際參數(shù)來設(shè)置。
3.4 用戶自定義數(shù)據(jù)接口IP核
開發(fā)工具雖然提供了一些常用的IP核,但是對于一些特定要求的邏輯,需要用戶自己開發(fā)。由于從A/D采集板傳送過來的數(shù)據(jù)速度很大,所以本論文在MPMC 的port2上采用NPI接口把A/D模塊傳過來的數(shù)據(jù)直接送入DDR2中。需要用硬件描述語言編寫基于NPI接口的邏輯,并且還要編寫基于PLB總線的IP核來實現(xiàn)對數(shù)據(jù)傳輸?shù)目刂?,例如?shù)據(jù)傳輸開始與停止、握手方式、數(shù)據(jù)包的大小等等。
3.5 千兆三態(tài)以太網(wǎng)硬核的配置
三態(tài)以太網(wǎng)TEMAC (Tri-Mode Ethernet Media Access Controller)是嵌在FPGA內(nèi)部的硬核。本論文通過LocalLink總線使其連在內(nèi)存控制器MPMC上,采用SDMA方式,使得數(shù)據(jù)直接從內(nèi)存到網(wǎng)絡(luò)接口而不必經(jīng)過PowerPC的搬運, 這樣在很大程度上減輕了CPU的負(fù)擔(dān),提高了數(shù)據(jù)傳輸速度。
4 板級支持包的生成
4.1板級支持包工具的選擇和設(shè)置
先在http://git.xilinx.com/網(wǎng)站上下載device-tree.git,它是板級支持包(BSP)生成工具。解壓后放在EDK安裝目錄下的EDKswlibbsp,之后點擊Software-->
Software Platform Settings就可以發(fā)現(xiàn)并選擇它了,如圖5所示。
圖5 板級支持包工具的選擇
在device-tree下要把 bootargs的設(shè)置成console=ttyUL0,而不是默認(rèn)的console =ttyS0,否則超級終端將沒有輸出。這是因為我們在調(diào)試時需要RS232串口作為超級終端,用的是XPS UART Lite核,但板級支持包默認(rèn)的卻是UART16500核。
4.2 dts(device tree)文件的生成
xilinx.dts文件是板級支持包工具device tree生成的,它記錄了硬件信息。正是這個文件的存在操作系統(tǒng)才能知道本系統(tǒng)有哪些硬件及其屬性。在EDK菜單中選擇Software-->generate Libraries and BSP就會生成xilinx.dts文件。
5嵌入式Linux的移植
5.1安裝用于PowerPC的交叉編譯鏈并設(shè)置環(huán)境變量
先下載并安裝德國DENX公司提供的開發(fā)環(huán)境編譯套件ELDK4.1,用source 命令設(shè)置路徑和交叉編譯環(huán)境變量,再用export ARCH=powerpc命令使其支持PowerPC架構(gòu)。
5.2 準(zhǔn)備Linux內(nèi)核及根文件系統(tǒng)
這不是一般的Linux內(nèi)核,而是專門針對Xilinx FPGA的linux-2.6-xlnx.git??梢缘絞it.xilinx.com網(wǎng)站下載最新版本的Linux內(nèi)核。在http://xilinx.wikidot.com/網(wǎng)上下載根文件系統(tǒng)鏡像壓縮文件ramdisk.image.gz,把ramdisk.image.gz拷貝到內(nèi)核文件夾的arch/powerpc/boot文件夾中。
5.3準(zhǔn)備 device tree文件
需要把把EDK工程中板級支持包工具生成的xilinx.dts復(fù)制到嵌入式Linux內(nèi)核文件夾arch/powerpc/boot/dts中,這樣linux才能根據(jù)這個文件給硬件設(shè)備添加相應(yīng)的驅(qū)動。
5.4內(nèi)核的裁剪與定制
用命令make 40x/ virtex4_defconfig載入ML405開發(fā)板的內(nèi)核配置,再用make menuconfig打開內(nèi)核定制圖形界面進(jìn)行裁剪和定制,使?jié)M足自己的特定需求,需要選上TCP/IP協(xié)議。如果需要調(diào)試就要把串口驅(qū)動 xilinx uartlite serial port support選上。這樣才能使用RS2323作為超級終端。保存配置后用make zImage命令就可以生成內(nèi)核鏡像文件了。
6 測試結(jié)果與分析
在EDK中選把硬件文件燒錄到FPGA中, 把Linux鏡像文件下載到內(nèi)存中運行,這樣一個系統(tǒng)就能運行起來了。編寫一個基于socket的網(wǎng)絡(luò)通信程序,把FPGA作為客戶端,把PC機作為服務(wù)器端,從FPGA不斷的向PC發(fā)送基于TCP協(xié)議的數(shù)據(jù)包,來測試每次發(fā)送的數(shù)據(jù)包大小和傳輸速度之間的關(guān)系。當(dāng)發(fā)送的數(shù)據(jù)包大小為30000Byte時,用tcp/ip協(xié)議傳輸?shù)乃俾适?0Mb/s,用udp協(xié)議傳輸?shù)乃俾适?35Mb/s。
在一定范圍內(nèi),每次發(fā)送的數(shù)據(jù)包越大,則網(wǎng)絡(luò)傳輸速率就越大。傳輸?shù)乃俣燃磁cpowerpc、內(nèi)存、內(nèi)部總線的頻率及位寬有關(guān)系,也與操作系統(tǒng)及應(yīng)用程序有關(guān)系。
7結(jié)束語
本文詳細(xì)的介紹了基于Linux和FPGA的嵌入式千兆網(wǎng)數(shù)據(jù)傳輸?shù)膶崿F(xiàn)方法,測試結(jié)果表明傳輸速度能滿足設(shè)計指標(biāo)。由于FPGA和linux都具有很大的靈活性,會給將來系統(tǒng)的升級和變更帶來很大方便。