基于PCI總線的通用網(wǎng)絡(luò)協(xié)議實驗平臺
摘要:介紹了一種利用以太網(wǎng)專用芯片在Linux操作系統(tǒng)下構(gòu)建基于PCI總線的通用網(wǎng)絡(luò)協(xié)議實驗平臺。通過修改該平臺的軟件部分,可以在實驗平臺上運行私有網(wǎng)絡(luò)協(xié)議,測試協(xié)議性能,從而避免了針對每一種私有網(wǎng)絡(luò)協(xié)議搭建專門的實驗平臺,節(jié)約了成本,縮短了開發(fā)時間。
關(guān)鍵詞:PCI設(shè)備 Linux 通用網(wǎng)絡(luò)實驗設(shè)備
在網(wǎng)絡(luò)技術(shù)快速發(fā)展的今天,根據(jù)用戶特殊的需求,有時需要研發(fā)特殊的私有網(wǎng)絡(luò)協(xié)議,以使網(wǎng)絡(luò)的性能得到優(yōu)化。研究新的網(wǎng)絡(luò)協(xié)議,必須進行仿真以驗證性能,但是網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜,性能指標(biāo)多樣,并且不同的協(xié)議需要的具體測試環(huán)境不同,因此很難用純軟件的方式(如NS2、OPNET)給出網(wǎng)絡(luò)協(xié)議運行性能的有效描述。另一方面,如果針對每一種網(wǎng)絡(luò)協(xié)議搭建專門的測試平臺,則需要大量的人力、經(jīng)費和時間。而采用中硬件相結(jié)合的方法搭建一種通用網(wǎng)絡(luò)協(xié)議實驗平臺,既能很好地測試出整個設(shè)備的性能,又能大幅度節(jié)約開發(fā)成本,縮短開發(fā)時間,是一種切實可行的方法。
為此,本文提出一種通用網(wǎng)絡(luò)協(xié)議實驗平臺的軟硬件設(shè)計方案,并詳細介紹該平臺的中硬件設(shè)計方法。
1 系統(tǒng)設(shè)計的思想
該網(wǎng)絡(luò)實驗平臺設(shè)計的目的是:針對不同的私有網(wǎng)絡(luò)協(xié)議,開發(fā)者可以根據(jù)協(xié)議標(biāo)準(zhǔn)有針對性地修改網(wǎng)絡(luò)層和傳輸層的程序代碼,然后通過本系統(tǒng)測試其協(xié)議的性能。所以,該系統(tǒng)應(yīng)該是一個與協(xié)議無關(guān)且可程控的數(shù)據(jù)傳輸通道。數(shù)據(jù)包經(jīng)過系統(tǒng)傳輸后,更多的工作由傳輸層、網(wǎng)絡(luò)層和上層應(yīng)用程序完成。該系統(tǒng)的整體框架結(jié)構(gòu)如圖1所示。
為了保證實驗平臺的通用性可操作性,采用PC機和與PCI總線接口的網(wǎng)絡(luò)設(shè)備卡(以下簡稱PCI接口卡)組建該平臺。
近年來,Linux操作系統(tǒng)獲得了突飛猛進的發(fā)展,它強大的功能、良好的界面、高效率以及全開放的特性使其具有很強的吸引力。基于以上考慮,在PC機中采用Linux操作系統(tǒng)。按Linux操作系統(tǒng)的設(shè)計標(biāo)準(zhǔn),私有網(wǎng)絡(luò)協(xié)議軟件需要包含傳輸層代碼、網(wǎng)絡(luò)層代碼以及與設(shè)備相關(guān)的驅(qū)動程序,并運行在系統(tǒng)“核心態(tài)”中。在本實驗平臺中,不需要用戶關(guān)心驅(qū)動程序的設(shè)計,但允許將網(wǎng)絡(luò)層和傳輸層代碼運行在Linux“用戶態(tài)”中。
PCI接口卡是基于PCI總線的,它通過合理選擇接口芯片屏蔽PCI總線協(xié)議的多余功能,并使用FPGA芯片把上層傳輸過來的數(shù)據(jù)包進行相應(yīng)的處理(詳見第2節(jié)),然后傳遞到物理層設(shè)備。
2 實驗平臺的硬件設(shè)計
2.1 PCI接口卡結(jié)構(gòu)
PIC接口卡由PCI總線接口芯片、數(shù)據(jù)處理模塊FPGA、數(shù)據(jù)緩存模塊RAM和有線傳輸驅(qū)動模塊LVDS(Low Voltage Differential Signaling Driver)等四部分組成,模塊間的數(shù)據(jù)傳輸如圖2所示。
2.2 芯片的選擇
Winbond公司以太網(wǎng)控制芯片W89C840AF支持高達100Mbps的雙向數(shù)據(jù)傳輸,該芯片不但具有良好的PCI總線接口設(shè)計,而且還有一整套的網(wǎng)絡(luò)數(shù)據(jù)傳輸機制,技術(shù)成熟。所以在此選用W89C840AF,并借用該芯片的網(wǎng)絡(luò)數(shù)據(jù)傳輸機制,通過對芯片合理配置,實現(xiàn)一條從驅(qū)動程序到物理層設(shè)備的透明數(shù)據(jù)傳輸通道,來滿足設(shè)備要求。
FPGA芯片只要能夠提供足夠多的I/O口和內(nèi)部硬件資源即可。RAM是為了滿足不同網(wǎng)絡(luò)協(xié)議以及算法對存儲器的需要而設(shè)置的,對于不同的私有網(wǎng)絡(luò)協(xié)議,根據(jù)實際需要選用適當(dāng)容量的RAM即可,沒有很荷刻的要求。本系統(tǒng)中FPGA芯片選用ACEX1K50TC144,RAM芯片選用CY7C006AC_PLCC,主要考慮的是芯片的速率高、使用簡單并且價格低廉。
有線傳輸信號驅(qū)動模塊選用LVDS芯片對(ds90c401,ds90c402),該芯片對的優(yōu)點是速率高(155Mbps串行數(shù)據(jù)傳輸)、傳輸距離遠、靈敏度高、功耗小。
2.3 PCI接口卡的功能
PCI總線接口芯片(W89C840AF)把從PCI總線上傳輸過來的數(shù)據(jù)封裝成“以太幀”的格式,傳遞給FPGA(RAM可以對傳輸?shù)臄?shù)據(jù)進行緩沖),F(xiàn)PGA去掉前8byte的“以太幀頭”從而獲得數(shù)據(jù)包。然后根據(jù)不同網(wǎng)絡(luò)協(xié)議的數(shù)據(jù)包格式,在FPGA中靈活地設(shè)備相應(yīng)的邏輯功能。如作者目前在研的衛(wèi)星ATM網(wǎng)絡(luò)實驗系統(tǒng),定義了一種私有的ATM協(xié)議,數(shù)據(jù)處理單元將完成以下任務(wù):識別信元頭,按優(yōu)先級對信元進行排隊、存儲、打包并轉(zhuǎn)發(fā)等。
FPGA要完成以上功能,其內(nèi)部模塊需包括以下幾個模塊:“數(shù)據(jù)接口”、“控制接口”、“命令執(zhí)行單元”、“實驗網(wǎng)物理層訪問控制單元”和“信道模擬單元”,如圖3所示。
FPGA把打包后的串行數(shù)據(jù)傳向LVDS,信號經(jīng)過LVDS驅(qū)動后傳到接收方。
在接收方,數(shù)據(jù)的處理與此相反,不再多述。
2.4 W89C840AF與FPGA之間的接口設(shè)計
在PCI接口卡電路板中,芯片之間的接口設(shè)計有三部分:FPGA與W89C840AF之間的接口;FPGA與RAM之間的接口;FPGA與LVDS之間的接口。后面兩個接口比較簡單,所以下面主要介紹FPGA與W89C840AF之間的接口設(shè)計。
W89C840AF與FPGA之間的數(shù)據(jù)接口如圖4所示。MTXCLK和MRXCLK分別是發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的參考時鐘,必須設(shè)置為25MHz。MTXEN和MRXDV的數(shù)據(jù)幀傳輸?shù)闹甘拘盘?,TMXD[3:0]和MRXD[3:0]為4bit寬的數(shù)據(jù)傳輸接口。
W89C840AF芯片與FPGA之間除了傳輸數(shù)據(jù)外,還需要交換控制信息。由于W89C840AF芯片I/O接口有限,可以供暖和W89C840AF芯片的EECK、EEDI、EEDO三條控制線與FPGA交換控制信息。這里構(gòu)建一個類似I2C串行總線協(xié)議的控制總線,其結(jié)構(gòu)和工作時序如圖5所示。
3 實驗平臺的軟件設(shè)計
為了實現(xiàn)從處于“用戶態(tài)”的應(yīng)用程序到處于“核心態(tài)”的驅(qū)動程序間的雙向數(shù)據(jù)傳輸通道,按照Linux操作系統(tǒng)的網(wǎng)絡(luò)相關(guān)代碼的劃分規(guī)則,實驗網(wǎng)絡(luò)結(jié)構(gòu)中用戶層以下的代碼需要嵌入到Linux操作系統(tǒng)的核心代碼樹中,經(jīng)過對內(nèi)核的重新編譯,運行在Linux操作系統(tǒng)的“核心態(tài)”,這樣做比較復(fù)雜。鑒于以上原因,在本設(shè)計中采用了以下處理方法:考慮到“用戶態(tài)”內(nèi)部所有軟件模塊的通信比較簡單,通過調(diào)用UDP/IP協(xié)議的socket,在下層利用UDP/IP數(shù)據(jù)包拆解/封裝程序,構(gòu)造出一個如圖6所示的數(shù)據(jù)傳輸通道。在這里,把“透明通道”定義為“過渡層”。
使用UDP/IP協(xié)議會涉及到Linux操作系統(tǒng)處理IP協(xié)議的相關(guān)內(nèi)容,特別需要注意以下三個方面:(1)去掉系統(tǒng)中所有其它網(wǎng)絡(luò)硬件設(shè)備,關(guān)閉所有Linux操作系統(tǒng)的網(wǎng)絡(luò)服務(wù),關(guān)閉Linux操作系統(tǒng)防火墻;(2)設(shè)備本設(shè)備的IP地址為192.168.0.1(實驗專用IP地址),綁定實驗網(wǎng)絡(luò)設(shè)備為192.168.0.X子網(wǎng)網(wǎng)關(guān),更改“/etc/network”文件設(shè)置為“可以轉(zhuǎn)發(fā)IP包”;(3)調(diào)用一個IP Socket發(fā)送數(shù)據(jù),在特定端口上監(jiān)聽數(shù)據(jù)包的到達。
3.1 “過渡層”的設(shè)計
對于上層傳遞過來的數(shù)據(jù),“過渡層”要完成的任務(wù)是:去掉數(shù)據(jù)包前面的以太網(wǎng)幀頭、IP數(shù)據(jù)包頭、UDP數(shù)據(jù)包頭,從而還原出原始數(shù)據(jù)包,然后傳遞給驅(qū)動部分。反之,下層傳遞過來的數(shù)據(jù)包經(jīng)過相反的數(shù)據(jù)處理后向上層傳遞。
3.2 驅(qū)動程序的設(shè)計
由于W89C840AF是以太網(wǎng)控制芯片,因此可以把PCI接口卡看作網(wǎng)絡(luò)設(shè)備。對于網(wǎng)絡(luò)設(shè)備,Linux操作系統(tǒng)中有一套標(biāo)準(zhǔn)的驅(qū)動程序設(shè)計方法,所以在這里僅介紹驅(qū)動程序設(shè)計中的幾個值得注意的事項。主要有:(1)PCI設(shè)備的探測和注冊函數(shù);(2)W89C840AF芯片的配置;(3)網(wǎng)絡(luò)設(shè)備基本功能函數(shù)組。
PCI設(shè)備探測和注冊函數(shù)可以建立網(wǎng)絡(luò)設(shè)備對象,同時注冊網(wǎng)絡(luò)設(shè)備基本功能函數(shù)組,并參考W89C840AF芯片數(shù)據(jù)傳輸數(shù)據(jù)的說明賦予設(shè)備執(zhí)行“DMA”能力。
關(guān)于W89C840AF芯片的配置,主要是C18/CNCR寄存器的配置。除了打開“傳輸允許”、“接收允許”、“全雙工模式”和“100Mbps傳輸速率模式”等選項外,還要打開“Accept Error Packet”、“Accept Runt Packet”、“Accept Broadcast Packet”、“Accept Multicast Packet”和“Accept All Physical Packet”等選項,從而屏蔽所有與以太網(wǎng)協(xié)議相關(guān)的功能。
網(wǎng)絡(luò)設(shè)備基本功能函數(shù)組的核心是“發(fā)送”、“接收”和“中斷響應(yīng)”這三個基本函數(shù)。“發(fā)送函數(shù)”將發(fā)送的數(shù)據(jù)存入W89C840AF芯片的內(nèi)存空間,然后寫C04/CTSD寄存器,請求芯片發(fā)送數(shù)據(jù)。W89C840AF芯片將接收到的數(shù)據(jù)包傳遞到系統(tǒng)內(nèi)存后就會觸發(fā)中斷,中斷處理函數(shù)響應(yīng)中斷并調(diào)用接收函數(shù),將數(shù)據(jù)包和相應(yīng)的參數(shù)向系統(tǒng)的上層傳遞。
評論