基于嵌入式Linux和FPGA的千兆網(wǎng)數據傳輸的實(shí)現
3.3 內存端口的設置
MPMC (Multi-Port Memory Controller)是DDR2內存控制器的IP核,它最多可以接八個(gè)數據端口,這樣的好處是多個(gè)設備都可以通過(guò)各自的端口共享內存,本論文使用了四個(gè)端口:port0和port1都通過(guò)plb總線(xiàn)連接在PowerPC上,分別用于傳輸指令和數據,port2端口采用的是NPI(Native Port Interface)接口,用于接收A/D模塊傳輸過(guò)來(lái)的用戶(hù)數據,port3采用SDMA (Soft Direct Memory Access)接口,通過(guò)locallink總線(xiàn)和千兆網(wǎng)IP核相連。在對MPMC配置時(shí)要根據內存的型號、大小等實(shí)際參數來(lái)設置。
3.4 用戶(hù)自定義數據接口IP核
開(kāi)發(fā)工具雖然提供了一些常用的IP核,但是對于一些特定要求的邏輯,需要用戶(hù)自己開(kāi)發(fā)。由于從A/D采集板傳送過(guò)來(lái)的數據速度很大,所以本論文在MPMC 的port2上采用NPI接口把A/D模塊傳過(guò)來(lái)的數據直接送入DDR2中。需要用硬件描述語(yǔ)言編寫(xiě)基于NPI接口的邏輯,并且還要編寫(xiě)基于PLB總線(xiàn)的IP核來(lái)實(shí)現對數據傳輸的控制,例如數據傳輸開(kāi)始與停止、握手方式、數據包的大小等等。
3.5 千兆三態(tài)以太網(wǎng)硬核的配置
三態(tài)以太網(wǎng)TEMAC (Tri-Mode Ethernet Media Access Controller)是嵌在FPGA內部的硬核。本論文通過(guò)LocalLink總線(xiàn)使其連在內存控制器MPMC上,采用SDMA方式,使得數據直接從內存到網(wǎng)絡(luò )接口而不必經(jīng)過(guò)PowerPC的搬運, 這樣在很大程度上減輕了CPU的負擔,提高了數據傳輸速度。
4 板級支持包的生成
4.1板級支持包工具的選擇和設置
先在http://git.xilinx.com/網(wǎng)站上下載device-tree.git,它是板級支持包(BSP)生成工具。解壓后放在EDK安裝目錄下的EDKswlibbsp,之后點(diǎn)擊Software-->
Software Platform Settings就可以發(fā)現并選擇它了,如圖5所示。

圖5 板級支持包工具的選擇
在device-tree下要把 bootargs的設置成console=ttyUL0,而不是默認的console =ttyS0,否則超級終端將沒(méi)有輸出。這是因為我們在調試時(shí)需要RS232串口作為超級終端,用的是XPS UART Lite核,但板級支持包默認的卻是UART16500核。
4.2 dts(device tree)文件的生成
xilinx.dts文件是板級支持包工具device tree生成的,它記錄了硬件信息。正是這個(gè)文件的存在操作系統才能知道本系統有哪些硬件及其屬性。在EDK菜單中選擇Software-->generate Libraries and BSP就會(huì )生成xilinx.dts文件。
5.1安裝用于PowerPC的交叉編譯鏈并設置環(huán)境變量
先下載并安裝德國DENX公司提供的開(kāi)發(fā)環(huán)境編譯套件ELDK4.1,用source 命令設置路徑和交叉編譯環(huán)境變量,再用export ARCH=powerpc命令使其支持PowerPC架構。
5.2 準備Linux內核及根文件系統
這不是一般的Linux內核,而是專(zhuān)門(mén)針對Xilinx FPGA的linux-2.6-xlnx.git??梢缘絞it.xilinx.com網(wǎng)站下載最新版本的Linux內核。在http://xilinx.wikidot.com/網(wǎng)上下載根文件系統鏡像壓縮文件ramdisk.image.gz,把ramdisk.image.gz拷貝到內核文件夾的arch/powerpc/boot文件夾中。
5.3準備 device tree文件
需要把把EDK工程中板級支持包工具生成的xilinx.dts復制到嵌入式Linux內核文件夾arch/powerpc/boot/dts中,這樣linux才能根據這個(gè)文件給硬件設備添加相應的驅動(dòng)。
5.4內核的裁剪與定制
用命令make 40x/ virtex4_defconfig載入ML405開(kāi)發(fā)板的內核配置,再用make menuconfig打開(kāi)內核定制圖形界面進(jìn)行裁剪和定制,使滿(mǎn)足自己的特定需求,需要選上TCP/IP協(xié)議。如果需要調試就要把串口驅動(dòng) xilinx uartlite serial port support選上。這樣才能使用RS2323作為超級終端。保存配置后用make zImage命令就可以生成內核鏡像文件了。
6 測試結果與分析
在EDK中選把硬件文件燒錄到FPGA中, 把Linux鏡像文件下載到內存中運行,這樣一個(gè)系統就能運行起來(lái)了。編寫(xiě)一個(gè)基于socket的網(wǎng)絡(luò )通信程序,把FPGA作為客戶(hù)端,把PC機作為服務(wù)器端,從FPGA不斷的向PC發(fā)送基于TCP協(xié)議的數據包,來(lái)測試每次發(fā)送的數據包大小和傳輸速度之間的關(guān)系。當發(fā)送的數據包大小為30000Byte時(shí),用tcp/ip協(xié)議傳輸的速率是70Mb/s,用udp協(xié)議傳輸的速率是135Mb/s。
在一定范圍內,每次發(fā)送的數據包越大,則網(wǎng)絡(luò )傳輸速率就越大。傳輸的速度即與powerpc、內存、內部總線(xiàn)的頻率及位寬有關(guān)系,也與操作系統及應用程序有關(guān)系。
7結束語(yǔ)
本文詳細的介紹了基于Linux和FPGA的嵌入式千兆網(wǎng)數據傳輸的實(shí)現方法,測試結果表明傳輸速度能滿(mǎn)足設計指標。由于FPGA和linux都具有很大的靈活性,會(huì )給將來(lái)系統的升級和變更帶來(lái)很大方便。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論