0 引言
虛擬儀器以其性?xún)r(jià)比高,、開(kāi)放性強(qiáng)等優(yōu)勢(shì)迅速占領(lǐng)了市場(chǎng),, 并成為測(cè)控儀器新的經(jīng)濟(jì)增長(zhǎng)點(diǎn)。步入信息化時(shí)代最顯著的標(biāo)志就是信息網(wǎng)絡(luò)在各行業(yè)中的滲透和普及,, 其中以太網(wǎng)最為典型,。以太網(wǎng)作為一種成本低廉、吞吐能力強(qiáng),、適應(yīng)性好,、網(wǎng)絡(luò)管理能力日益提高的網(wǎng)絡(luò), 它可以方便地將數(shù)據(jù)采集系統(tǒng)納入局域網(wǎng)甚至Internet,。
而以太網(wǎng)總線(xiàn)則有可能代替現(xiàn)行的其他總線(xiàn)方式而成為虛擬儀器數(shù)據(jù)采集系統(tǒng)的首選接口,。
1 以太網(wǎng)接口的總體設(shè)計(jì)
1.1 以太網(wǎng)接口設(shè)計(jì)方案選擇
以太網(wǎng)接口的設(shè)計(jì)通常有三種方案: 其一是采用FPGA實(shí)現(xiàn)物理層、網(wǎng)絡(luò)層,、接入層和傳輸層等各層的描述, 該方案要自行實(shí)現(xiàn)復(fù)雜的TCP/IP協(xié)議,, 難度較大,; 二是基于物理層網(wǎng)絡(luò)控制器和微處理器來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)傳輸, 該方案的優(yōu)點(diǎn)是靈活性強(qiáng),, 可以針對(duì)不同的系統(tǒng)采用不同的協(xié)議,,可實(shí)現(xiàn)協(xié)議的精簡(jiǎn); 三是采用專(zhuān)用的協(xié)議處理芯片實(shí)現(xiàn)以太網(wǎng)數(shù)據(jù)傳輸,, 該方案的硬件電路相對(duì)簡(jiǎn)單,, 開(kāi)發(fā)周期短, 并有越來(lái)越多的芯片可供選擇,, 且集成了多種協(xié)議,, 使用十分方便。
本設(shè)計(jì)采用第三種接口方案,, 即采用專(zhuān)用的TCP/IP協(xié)議集成芯片,, 并由FPGA實(shí)現(xiàn)對(duì)協(xié)議處理芯片的控制,, 從而實(shí)現(xiàn)以太網(wǎng)數(shù)據(jù)傳輸。協(xié)議處理芯片選用內(nèi)部固化了TCP/IP協(xié)議的W3150A+并配合物理層芯片RTL8201,, 該方法硬件電路相對(duì)簡(jiǎn)單,, 并可利用邏輯硬件實(shí)現(xiàn), 從而使系統(tǒng)設(shè)計(jì)更加簡(jiǎn)單,、緊湊,。
1.2 以太網(wǎng)控制芯片W3150A+簡(jiǎn)介
W3150A+是WIZnet公司專(zhuān)門(mén)為以太網(wǎng)互聯(lián)和嵌入式系統(tǒng)推出的TCP/IP協(xié)議棧芯片。W3150A+能夠?qū)崿F(xiàn)TCP,、UDP,、IP Ver.4、DHCP,、ARP和ICMP等協(xié)議,, 同時(shí), 網(wǎng)絡(luò)接口層(包括MAC子層和DLC子層) 也可在該芯片中實(shí)現(xiàn),。同時(shí)還能提供四路網(wǎng)絡(luò)連接,, 其內(nèi)部有16KB的雙口RAM可作為數(shù)據(jù)緩沖區(qū), 并可支持全雙工模式,, 同時(shí)帶有標(biāo)準(zhǔn)的MII接口,, 可方便連接物理層接口芯片。
此外,, WIZnet公司還提供了Socket API程序包,,可以加速應(yīng)用程序的開(kāi)發(fā)。
圖1所示是W3150A+芯片的結(jié)構(gòu)框圖,。由圖1可見(jiàn),, W3150A+主要由4部分組成。其中第一部分是MCU接口,。W3150A+提供有直接總線(xiàn)接口,、間接總線(xiàn)接口和SPI 總線(xiàn)接口。既適合與類(lèi)似8051單片機(jī)的總線(xiàn)連接,, 也非常適合與只有IO口而沒(méi)有總線(xiàn)接口的控制器連接,; 第二部分是TCP/IP協(xié)議棧。W3150A+已經(jīng)完全固化了從MAC層,、網(wǎng)絡(luò)層到傳輸層所需要的協(xié)議,, 因此, 用戶(hù)無(wú)需了解這些協(xié)議的具體實(shí)現(xiàn)方法和實(shí)現(xiàn)代碼,; 第三部分是接收和發(fā)送緩沖區(qū),, 通過(guò)以太網(wǎng)進(jìn)行通信的數(shù)據(jù)就是通過(guò)這些緩沖區(qū)來(lái)交換的; 第四部分是以太網(wǎng)物理層接口(MII接口)。W3150A+可以與物理層芯片RTL8201無(wú)縫連接,, 從而實(shí)現(xiàn)10/100BaseT以太網(wǎng)物理接口,。
圖1 W3150A+芯片結(jié)構(gòu)圖
W3150A+內(nèi)部的寄存器分為兩個(gè)存儲(chǔ)器和兩類(lèi)寄存器。兩個(gè)存儲(chǔ)器分別用于數(shù)據(jù)傳輸?shù)妮斎牒洼敵觯?兩類(lèi)寄存器分別是通用寄存器和端口寄存器,, 每類(lèi)寄存器都含有大量的狀態(tài)字控制寄存器,。下面簡(jiǎn)要介紹比較重要的狀態(tài)字控制寄存器。
Sn_MR: 端口n模式寄存器,, 該寄存器用于設(shè)置端口的選項(xiàng)或協(xié)議類(lèi)型,;
Sn_CR: 端口n命令寄存器, 該寄存器用來(lái)設(shè)置端口的初始化,、關(guān)閉,、建立連接、斷開(kāi)連接,、數(shù)據(jù)傳輸以及命令接受等,;
Sn_IR: 端口n中斷寄存器, 該寄存器用于顯示建立和中止連接,、接收數(shù)據(jù),、發(fā)送完成以及時(shí)間溢出等信息;
Sn_PORT: 端口n的端口號(hào)寄存器,, 該寄存器可在TCP或UDP模式下設(shè)定對(duì)應(yīng)的端口號(hào),;
S_TX_FSR: 端口n發(fā)送存儲(chǔ)器剩余空間寄存器, 該寄存器用于指示用戶(hù)可以使用的發(fā)送數(shù)據(jù)空間的大小,, 在發(fā)送數(shù)據(jù)前,, 用戶(hù)必須先檢查剩余空間的大小, 然后控制發(fā)送數(shù)據(jù)的字節(jié)數(shù),;
Sn_TX_RR: 端口n發(fā)送存儲(chǔ)器讀指針寄存器,, 該寄存器用于指示端口在發(fā)送過(guò)程完成后發(fā)送存儲(chǔ)器的當(dāng)前位置。當(dāng)端口n的命令寄存器收 到SEND 命令后,, 可隨即從當(dāng)前Sn_TX_RR 到Sn_TX_WR 的數(shù)據(jù)中發(fā)送出去,, 發(fā)送完成后,Sn_TX_RR的值自動(dòng)改變,;
Sn_TX_WR: 端口n傳輸寫(xiě)指針寄存器, 該寄存器可指示向TX存儲(chǔ)器寫(xiě)入數(shù)據(jù)時(shí)的地址,;
Sn_RX-RSR: 端口n接收數(shù)據(jù)字節(jié)數(shù)寄存器,,該寄存器只是端口接收數(shù)據(jù)緩沖區(qū)接收數(shù)據(jù)的字節(jié)數(shù), 通??捎蒘n_TX_RR到Sn_TX_WR的值計(jì)算得出,, 向端口n命令寄存器寫(xiě)入RECV命令后,寄存器的值將自動(dòng)改變,, 并可以接收遠(yuǎn)程對(duì)端的數(shù)據(jù),;
Sn_RX_RD: 端口n接收緩沖區(qū)讀指針寄存器,, 該寄存器只是端口接收過(guò)程完成后的讀地址信息。
W3150A+內(nèi)部有4 個(gè)獨(dú)立的端口(Socket) ,,它們的狀態(tài),、控制分別映射在第二到第五寄存器區(qū)。主要用于實(shí)現(xiàn)端口工作模式的控制(TCP服務(wù)器,、TCP客戶(hù)端,、UDP或PPPOE等)、設(shè)置該端口的端口號(hào),, 設(shè)置該端口目的主機(jī)IP地址和端口號(hào),, 以及端口接收和發(fā)送數(shù)據(jù)控制等。
2 以太網(wǎng)接口的硬件設(shè)計(jì)
本接口的硬件設(shè)計(jì)主要包括FPGA 與W3150A+的接口設(shè)計(jì),, 物理層芯片RTL8201與W3150A+的接口設(shè)計(jì)以及時(shí)鐘模塊和電源模塊的設(shè)計(jì),。其硬件設(shè)計(jì)框圖如圖2所示。
圖2 硬件設(shè)計(jì)結(jié)構(gòu)框圖,。
2.1 W3150A+與FPGA的接口設(shè)計(jì)
隨著半導(dǎo)體技術(shù)的飛速發(fā)展,, FPGA (FieldProgrammable Gate Array) 的計(jì)算能力、容量以及可靠性有了很大的提高,。它正以高度靈活的用戶(hù)現(xiàn)場(chǎng)編程功能,、反復(fù)可改寫(xiě)功能、高可靠性等優(yōu)點(diǎn),, 成為數(shù)字電路,、數(shù)字信號(hào)處理等領(lǐng)域的新寵。
考慮到成本,、實(shí)用性以及功耗,, 本設(shè)計(jì)選用的FPGA 芯片是Altera 公司MAXII 系列的EPM570GT100C4。MAXII系列器件是一種非易失性CPLD,, 采用0.18μm的制造工藝,, 并包含有240到2210個(gè)邏輯單元和8Kbits非易失性存儲(chǔ)器, 它相對(duì)于其他的CPLD可以提供快速,、穩(wěn)定,、數(shù)量更多的I/O管腳。
W3150A+與微處理器芯片的接口方式有三種: 直接總線(xiàn)接口模式,、間接總線(xiàn)接口模式和SPI模式,。其中直接總線(xiàn)接口模式適用于大數(shù)據(jù)量傳輸?shù)那闆r; SPI模式的接口連線(xiàn)較少,, 適用于數(shù)據(jù)量不大,, 傳輸速率相對(duì)較低的情況; 間接總線(xiàn)接口模式下的數(shù)據(jù)傳輸性能則介于它們兩者之間。本系統(tǒng)采用直接總線(xiàn)接口模式,, 以便最大限度地提高數(shù)據(jù)的傳輸速率,。其具體的接口電路如圖3所示。
圖3 W3150A+與FPGA的接口電路,。
2.2 物理層芯片與W3150A+的接口設(shè)計(jì)
RTL8201BL是一個(gè)單端口的物理層收發(fā)器,,它只有一個(gè)MII/SNI (媒體獨(dú)立接口/串行網(wǎng)絡(luò)接口) 接口??捎糜趯?shí)現(xiàn)全部的10/100M以太網(wǎng)物理層功能,, 包括物理層編碼子層(PCS)、物理層介質(zhì)連接設(shè)備(PMA),、雙絞線(xiàn)物理媒介相關(guān)子層(TP-PMD),、10Base-Tx編解碼和雙絞線(xiàn)媒介訪(fǎng)問(wèn)單元(TPMAU)。PECL接口可支持連接一個(gè)外部的100Base-FX光纖收發(fā)器,。這款芯片使用先進(jìn)的CMOS工藝制作,, 可以滿(mǎn)足低壓低功耗的需求。
RTL8201BL與W3150A+可通過(guò)標(biāo)準(zhǔn)MII接口相連,, 其中引腳RX_CLK,、RXDV、RXD [0:3] 以及COL用于數(shù)據(jù)的接收,, 而TX_CLK,、TXE、TXD[0:3] 用于數(shù)據(jù)的發(fā)送,。其具體的電路圖如圖4所示,。
圖4 物理層芯片與W3150A+的接口電路。
3 數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)過(guò)程
通過(guò)控制器對(duì)寄存器進(jìn)行讀寫(xiě)訪(fǎng)問(wèn)操作,, W3150A+就可以進(jìn)行網(wǎng)絡(luò)連接,。下面介紹具體的操作過(guò)程。
首先應(yīng)進(jìn)行初始化,。初始化設(shè)置包括基本設(shè)置,、網(wǎng)絡(luò)信息設(shè)置, 端口存儲(chǔ)器信息設(shè)置等,, 設(shè)置完后就可進(jìn)行數(shù)據(jù)傳輸,。數(shù)據(jù)傳輸可以采用TCP、UDP,、IP_RAW和MAC_RAW模式進(jìn)行,, 并可在端口n模式寄存器(Sn_MR)的協(xié)議類(lèi)型中選擇通信模式。其中,, 基本設(shè)置包括模式寄存器(MR)、中斷屏蔽寄存器(SIMR)、重發(fā)時(shí)間寄存器(RTR),、重發(fā)計(jì)數(shù)寄存器(RCR) 等,; 設(shè)置網(wǎng)絡(luò)信息包括設(shè)定網(wǎng)關(guān)(GAR)、設(shè)定源硬件地址(SHAR),、設(shè)定子網(wǎng)掩碼(SUBR),、設(shè)定源IP地址(SIPR) 等; 而設(shè)置端口存儲(chǔ)器信息則主要是設(shè)定發(fā)送緩沖區(qū)和接收緩沖區(qū)的大小分配,, 具體可通過(guò)設(shè)置RMSR,、TMSR寄存器實(shí)現(xiàn)。
本系統(tǒng)在FPGA芯片EPM570GT100C4的基礎(chǔ)上可利用軟件Quartus II來(lái)開(kāi)發(fā)邏輯控制功能,, 從而實(shí)現(xiàn)對(duì)W3150A+的控制,。其主要端口如下:
nrst: 復(fù)位輸入鍵, 低電平有效,;
clk : 時(shí)鐘輸入,;
nwrst 復(fù)位輸出, 可復(fù)位W3150A + 和
RTL8201,;
nwr: 對(duì)W3150A+寫(xiě)使能信號(hào),, 低電平有效;
nrd: 對(duì)W3150A+讀使能信號(hào),, 低電平有效,;
ncs: W3150A+片選信號(hào), 低電平有效,;
address: 15位地址信號(hào),;
data: 8位數(shù)據(jù)信號(hào);
本接口通信設(shè)計(jì)采用的是UDP通信方式,, 其通信流程圖如圖5所示,。
圖5 UDP通信流程圖。
端口初始化主要是對(duì)端口進(jìn)行初始化,, 包括設(shè)置UDP模式,、設(shè)置端口號(hào), 設(shè)置OPEN命令,;通過(guò)Sn_RX_RSR寄存器的值可檢測(cè)是否收到數(shù)據(jù),, 若非零, 即進(jìn)入數(shù)據(jù)接收處理,; 接收處理時(shí),, 首先讀取Sn_RX_RSR寄存器的值, 即接收數(shù)據(jù)字節(jié)數(shù),, 然后計(jì)算偏址和實(shí)際物理地址,, 再根據(jù)物理地址讀取數(shù)據(jù),。在讀取數(shù)據(jù)過(guò)程中, 如果物理地址到達(dá)該端口設(shè)定的高限地址,, 則先讀高限地址的數(shù)據(jù),, 然后將物理地址改為基地址, 然后再?gòu)幕刂防^續(xù)讀取剩余的數(shù)據(jù),。讀完所有的數(shù)據(jù)后,, 可將Sn_RX_RR的值加上讀取的數(shù)據(jù)長(zhǎng)度, 然后寫(xiě)入Sn_RX_BASE,, 最后再向端口n的指令寄存器寫(xiě)入RECV命令,。
發(fā)送數(shù)據(jù)? /發(fā)送處理的實(shí)現(xiàn)過(guò)程是首先讀取S_TX_FSR寄存器的值以便能使用發(fā)送數(shù)據(jù)空間的大小來(lái)計(jì)算偏址和實(shí)際物理地址,, 然后再?gòu)奈锢淼刂穼?xiě)入要發(fā)送的數(shù)據(jù),。在發(fā)送數(shù)據(jù)過(guò)程中, 如果物理地址已到達(dá)該端口設(shè)定的高限地址,, 則先將數(shù)據(jù)寫(xiě)入高限地址,, 然后再將物理地址改為基地址, 接著從基地址繼續(xù)寫(xiě)入數(shù)據(jù),。寫(xiě)完所有的數(shù)據(jù)后,, 再將Sn_TX_WR的值加上發(fā)送的數(shù)據(jù)長(zhǎng)度, 然后寫(xiě)入Sn_TX_BASE,, 最后向端口n的指令寄存器寫(xiě)入SEND命令,。
發(fā)送完成的確定可在發(fā)送(SEND) 命令后,通過(guò)檢測(cè)Sn_CR的值來(lái)判斷數(shù)據(jù)是否全部發(fā)送完成,。
當(dāng)遠(yuǎn)程對(duì)端不存在或數(shù)據(jù)傳輸不正常時(shí),, 將產(chǎn)生超時(shí)錯(cuò)誤。此次可以通過(guò)對(duì)Sn_IR (TIMEOUTbit) 檢測(cè)來(lái)判斷是否超時(shí),。
當(dāng)操作全部完成時(shí),, 應(yīng)關(guān)閉窗口, 即將Sn_CR寄存器置為CLOSE,。
4 結(jié)束語(yǔ)
本文介紹了以太網(wǎng)接口的設(shè)計(jì)及其數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)過(guò)程,。利用本文的方法可以使以太網(wǎng)接口正常運(yùn)行, 故可為后續(xù)的虛擬儀器開(kāi)發(fā)奠定基礎(chǔ),。事實(shí)上,, 本方法已經(jīng)過(guò)多次試驗(yàn)證明: 完全滿(mǎn)足工程需要。