杜志美,文 豐,張凱華
(中北大學(xué) 儀器與電子學(xué)院電子測試技術(shù)國家重點(diǎn)實(shí)驗(yàn)室,太原 030051)
如今信息技術(shù)發(fā)展突飛猛進(jìn),通信方式向著數(shù)據(jù)需求量大、實(shí)時性高、易于組網(wǎng)等方向發(fā)展[1]。集成有TCP/IP協(xié)議的以太網(wǎng)芯片W5300以其成本低、數(shù)據(jù)傳輸距離遠(yuǎn)、易于移植且簡單快捷的實(shí)現(xiàn)高性能數(shù)據(jù)通信等優(yōu)勢得到了廣泛應(yīng)用[2]。開發(fā)者只需要對W5300應(yīng)用層進(jìn)行操作,就可以實(shí)現(xiàn)不同網(wǎng)絡(luò)平臺間的數(shù)據(jù)交互。傳統(tǒng)的以太網(wǎng)系統(tǒng)存在數(shù)據(jù)傳輸不穩(wěn)定,成本較高等缺點(diǎn),且在實(shí)際應(yīng)用中,其傳輸速率很難突破50Mbps[3-4]。
本研究所提出的系統(tǒng)設(shè)計(jì)采用“FPGA+W5300”組合模式,不僅實(shí)現(xiàn)了數(shù)據(jù)快速、穩(wěn)定傳輸,而且極大地降低了開發(fā)難度、提高了數(shù)據(jù)傳輸?shù)膶?shí)時性。
本系統(tǒng)需要設(shè)計(jì)一個客戶端和一個服務(wù)器,并在兩個相對獨(dú)立的系統(tǒng)之間建立連接完成數(shù)據(jù)傳輸,傳輸速度要求達(dá)到80 Mbps,并且數(shù)據(jù)穩(wěn)定可靠。
相比于DSP等控制類芯片,F(xiàn)PGA特有的并行處理能力、高速接口設(shè)計(jì)、豐富的I/O接口資源等優(yōu)勢,使其在高速數(shù)據(jù)處理和邏輯控制等方面具有很高的實(shí)時性,采用FPGA作為主控芯片,可以使不同網(wǎng)絡(luò)系統(tǒng)中數(shù)據(jù)更高速傳輸。為滿足數(shù)據(jù)傳輸速度要求,系統(tǒng)采用“FPGA+W5300”組合模式。系統(tǒng)硬件結(jié)構(gòu)如圖1所示。
圖1 以太網(wǎng)系統(tǒng)硬件結(jié)構(gòu)框圖
FPGA可以根據(jù)W5300地址總線對寄存器尋址,按照W5300寄存器讀寫時序,通過數(shù)據(jù)總線配置和讀取相應(yīng)寄存器的值。本系統(tǒng)采用16位數(shù)據(jù)總線模式,所以BIT16EN接高電平,數(shù)據(jù)總線低8位和高8位都需要與FPGA I/O口連接,接收的數(shù)據(jù)通過FPGA存入Flash。W5300差分輸入和輸出信號對與外部接口之間增加對稱變壓器,保證芯片與外界的隔離與數(shù)據(jù)傳輸過程中系統(tǒng)的可靠性。
W5300硬件接口類型與功能描述如表1所示。W5300擁有8個獨(dú)立并行端口,內(nèi)部集成10BasseT/100BasseT以太網(wǎng)物理層[5],支持直接和間接地址模式。FPGA通過直接訪問每個端口的FIFO寄存器,控制端口TX/RX存儲器數(shù)據(jù)讀取和寫入,從而避免了以往采用FPGA直接處理TCP/IP協(xié)議時的負(fù)荷,極大簡化了程序的編寫,使系統(tǒng)對數(shù)據(jù)的傳輸和處理能力得到極大改善。
表1 W5300接口類型和功能表
本系統(tǒng)通過FPGA直接操作W5300內(nèi)部寄存器。FPGA代碼在ISE14.7編譯環(huán)境下采用硬件描述語言VHDL編寫。并根據(jù)W5300復(fù)位時序、寄存器讀和寫時序完成FPGA對W5300的控制。軟件設(shè)計(jì)流程分為W5300初始化、端口連接、數(shù)據(jù)發(fā)送和接收3個模塊。
W5300初始化包括外部接口配置、網(wǎng)絡(luò)參數(shù)和超時設(shè)置和端口TX/RX存儲器分配[6]。
W5300采用/RESET硬件復(fù)位,復(fù)位信號在保持低電平大于2 μs后保持高電平時間大于10 ms,執(zhí)行復(fù)位。其內(nèi)部鎖相環(huán)將外部25 MHz時鐘源倍頻后產(chǎn)生150 MHz工作時鐘,在復(fù)位有效后鎖相環(huán)鎖定時鐘頻率[7]。
2.1.1外部接口設(shè)置
W5300接口設(shè)置包括模式寄存器配置和中斷配置。
采用直接地址模式(IND=0),可將模式寄存器、通用寄存器和端口寄存器映射到內(nèi)部存儲空間,控制器通過訪問對應(yīng)映射地址來直接訪問相關(guān)寄存器[8],間接地址模式則相反。FPGA在訪問W5300內(nèi)部寄存器時,寄存器地址從系統(tǒng)基地址開始以2字節(jié)遞增方式連續(xù)映射在內(nèi)部存儲器空間。寄存器地址采用大端模式,即寄存器地址的低字節(jié)存儲在實(shí)際物理地址的高字節(jié)。W5300寄存器實(shí)際物理地址為“存儲器空間基地址+寄存器偏移量”,其中W5300寄存器的物理基地址為0x08000。
與W5300中斷相關(guān)的寄存器包括中斷寄存器(IR)和中斷屏蔽寄存器。中斷寄存器數(shù)據(jù)位表示當(dāng)前中斷類型,產(chǎn)生中斷時相應(yīng)數(shù)據(jù)位置1,如果中斷屏蔽寄存器(IMR)相應(yīng)位也為1,則中斷請求輸出引腳/INT置0,向FPGA發(fā)出中斷請求,控制器通過查詢中斷寄存器數(shù)據(jù)位判斷中斷類型并處理中斷。
2.1.2網(wǎng)絡(luò)參數(shù)和超時設(shè)置
為實(shí)現(xiàn)數(shù)據(jù)在多個網(wǎng)絡(luò)系統(tǒng)之間傳輸而不會造成數(shù)據(jù)傳輸混亂,需要對W5300進(jìn)行網(wǎng)絡(luò)參數(shù)配置,包括硬件地址寄存器、網(wǎng)關(guān)IP 地址寄存器、子網(wǎng)掩碼寄存器和本機(jī)IP 地址寄存器。本系統(tǒng)各參數(shù)如表2所示。
表2 網(wǎng)絡(luò)系統(tǒng)參數(shù)配置
TCP是一種可靠數(shù)據(jù)傳輸控制協(xié)議。TCP協(xié)議在數(shù)據(jù)通信中經(jīng)過三次握手驗(yàn)證,保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。為避免驗(yàn)證過程中長時間等待,需要進(jìn)行超時設(shè)置,超時設(shè)置相關(guān)寄存器包括重復(fù)發(fā)送超時寄存器(RTR)和重復(fù)發(fā)送計(jì)數(shù)寄存器(RCR)。W5300超時分為ARP發(fā)送超時和TCP發(fā)送超時兩種。以客戶端向服務(wù)器發(fā)送ARP請求為例,流程如圖2所示。
圖2 ARP請求流程圖
同樣客戶端向服務(wù)器發(fā)送TCP數(shù)據(jù)包后,等待服務(wù)器回應(yīng)ACK響應(yīng),若客戶端在RTR設(shè)置的時間后連續(xù)發(fā)送RCR+1次還未收到ACK響應(yīng),W5300端口狀態(tài)寄存器(Sn_SSR)將變?yōu)镾OCKET_CLOSED,并且數(shù)據(jù)發(fā)送端口中斷寄存器(Sn_IR)相應(yīng)位置1,發(fā)出中斷請求。
2.1.3端口TX/RX存儲器分配
W5300擴(kuò)展了128K通信數(shù)據(jù)存儲器,由16個8K字節(jié)存儲單元組成[9-10]。這些存儲單元可以由存儲器單元類型配置寄存器以8K的倍數(shù)配置為發(fā)送和接收單元,再由存儲器大小配置寄存器分配給每個端口TX存儲器和RX存儲器。
W5300初始化完成后,需要依據(jù)設(shè)計(jì)要求對端口進(jìn)行配置并連接。W5300具有8個獨(dú)立端口,可同時進(jìn)行數(shù)據(jù)通信。以客戶端SOCKET1為例,端口配置和連接流程如圖3所示。
W5300有4個緩沖區(qū)監(jiān)視外接引腳BRDY[3:0],用于實(shí)時監(jiān)測SOCKETn數(shù)據(jù)收發(fā)狀態(tài)。本系統(tǒng)配置了BRDY0和BRDY1分別對SOCKET1 TX/RX存儲器監(jiān)測。在TCP客戶端模式下,客戶端必須在執(zhí)行連接命令之前配置目標(biāo)地址。而服務(wù)器則在端口建立連接后,S1_DIPR和S1_PORTR自動設(shè)置為TCP客戶端IP地址和端口號。端口模式寄存器S1_MR決定了端口通信方式,S1_MR功能描述如表3所示。
在TCP模式下,收到的數(shù)據(jù)包字節(jié)數(shù)為偶數(shù)時隊(duì)列對齊數(shù)據(jù)位“ALIGN=1”,此時刪除數(shù)據(jù)包中的PACKET-INFO,可以極大提高數(shù)據(jù)讀取速度。為了使W5300只接收指定網(wǎng)絡(luò)數(shù)據(jù)包,需要將MF位置1。而ND/IGMPv置1時,端口在收到對端發(fā)送的數(shù)據(jù)包后立刻發(fā)送ACK數(shù)據(jù)包響應(yīng),可以提高TCP通信性能。P0~P3即配置端口通信協(xié)議(TCP、UDP、IPRAW等)或PPPoE SOCKET與PPPoE服務(wù)器之間的操作,開發(fā)者可根據(jù)項(xiàng)目需求自行選擇。
圖3 端口連接流程圖
表3 S1_MR功能表
在對以太網(wǎng)協(xié)議芯片W5300初始化和端口設(shè)置并連接成功后,便可以進(jìn)行數(shù)據(jù)傳輸。首先客戶端主動發(fā)送連接請求數(shù)據(jù)包SYN;服務(wù)器則執(zhí)行偵聽命令,等待客戶端連接。圖4以本系統(tǒng)中SOCKET1為例介紹W5300數(shù)據(jù)發(fā)送和接收流程。
在TCP模式下,當(dāng)ALIGN=1時,RX接收到的數(shù)據(jù)包內(nèi)只含有有效數(shù)據(jù),主機(jī)可以從S1_RX_RSR寄存器直接獲取RX的數(shù)據(jù)包長度;否則數(shù)據(jù)包由2Bytes的PACKET-INFO和有效數(shù)據(jù)組成,數(shù)據(jù)包信息包含在PACKET-INFO內(nèi),數(shù)據(jù)包長度保存在S1_RX_FIFOR寄存器中讀取[11]。數(shù)據(jù)以包為單位讀取,數(shù)據(jù)包長度作為數(shù)據(jù)讀取循環(huán)控制量。當(dāng)數(shù)據(jù)包字節(jié)長度為奇數(shù)時,數(shù)據(jù)最后一個字節(jié)為啞字節(jié),需要直接丟棄。
當(dāng)數(shù)據(jù)發(fā)送完成后,端口中斷寄存器S1_IR(4)自動置1,并需要通過FPGA向W5300S1_IR(4)寫1以清除中斷標(biāo)志位。
圖4 W5300數(shù)據(jù)發(fā)送和接收流程
本設(shè)計(jì)中,采用了TCP/IP通信協(xié)議,實(shí)現(xiàn)了客戶端和服務(wù)器兩個網(wǎng)絡(luò)系統(tǒng)之間的數(shù)據(jù)傳輸。端口連接成功后,首先由客戶端向服務(wù)器發(fā)送打包后的遞增數(shù),服務(wù)器收到數(shù)據(jù)后保存到Flash,再由測試臺通過PXI總線傳輸?shù)诫娔X保存,并通過上位機(jī)軟件分解校驗(yàn)。接收數(shù)據(jù)時序圖如圖5,本系統(tǒng)控制器采用60 M時鐘頻率,11個時鐘周期接收2 Byte數(shù)據(jù),理論傳輸速度為87.27 Mbps。數(shù)據(jù)和校驗(yàn)結(jié)果如圖6所示,結(jié)果無誤碼,無丟幀。
圖5 接收數(shù)據(jù)時序圖
圖6 上位機(jī)軟件報(bào)告和數(shù)據(jù)
此次測試共發(fā)送 5 150 437個數(shù)據(jù)包,其中1KB數(shù)據(jù)為一包。根據(jù)網(wǎng)絡(luò)數(shù)據(jù)開始發(fā)送和數(shù)據(jù)發(fā)送停止時間可以算出以太網(wǎng)數(shù)據(jù)傳輸速度。在進(jìn)行多次大量測試后,均無誤碼和丟幀現(xiàn)象出現(xiàn),以太網(wǎng)數(shù)據(jù)實(shí)際傳輸速度可以達(dá)到85.79 Mbps,與設(shè)計(jì)指標(biāo)相符。
提出了采用“主控制器FPGA+網(wǎng)絡(luò)協(xié)議芯片W5300”組成的網(wǎng)路數(shù)據(jù)傳輸系統(tǒng),重點(diǎn)描述了W5300的寄存器配置流程。實(shí)踐證明系統(tǒng)軟件編寫容易、結(jié)構(gòu)簡單、實(shí)用性強(qiáng)。經(jīng)過大量實(shí)驗(yàn)驗(yàn)證,能夠?qū)崿F(xiàn)不同設(shè)備之間零誤碼傳輸,且速度達(dá)80 Mbps以上。該系統(tǒng)已經(jīng)在高速數(shù)據(jù)圖像傳輸工程中得到應(yīng)用。