一種全硬件tcp協(xié)議棧實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種全硬件TCP協(xié)議棧實(shí)現(xiàn)方法,尤其是一種基于ASIC或者FPGA器 件,通過全硬件方式實(shí)現(xiàn)TCP/IP協(xié)議棧中網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層和傳輸層的方法。屬于大規(guī) 模集成電路設(shè)計(jì)以及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002] 隨著信息技術(shù)的發(fā)展,功能化模塊化的設(shè)計(jì)思想已經(jīng)逐漸成為了實(shí)現(xiàn)復(fù)雜功能的 必要選擇,實(shí)現(xiàn)方式也從復(fù)雜的高度集成的單一設(shè)備向功能分立的系統(tǒng)實(shí)現(xiàn)方式轉(zhuǎn)變。這 種設(shè)計(jì)思想和實(shí)現(xiàn)方式能夠顯著減低實(shí)現(xiàn)復(fù)雜度,使設(shè)計(jì)、調(diào)試和維護(hù)等操作簡單化。比如 在衛(wèi)星地面站或者雷達(dá)中,需要多種信號采集設(shè)備、信號處理設(shè)備以及顯示設(shè)備。這就需要 一種成熟開放、傳輸距離遠(yuǎn)、方便靈活的通信協(xié)議來實(shí)現(xiàn)各設(shè)備之間的信息交互。作為當(dāng)前 發(fā)展最為成熟、應(yīng)用最為廣泛的TCP/IP協(xié)議和以太網(wǎng)技術(shù)已經(jīng)成為了網(wǎng)絡(luò)通信的標(biāo)準(zhǔn),其 優(yōu)點(diǎn)在于通信速率高、傳輸距離遠(yuǎn)、方便靈活和抗干擾能力強(qiáng)。
[0003] -般來講,實(shí)現(xiàn)以太網(wǎng)網(wǎng)絡(luò)接口的方法主要有軟件和硬件兩種方式。
[0004] 軟件方式是采用通用型處理器(INTEUAMD的X86架構(gòu)的處理器)或者嵌入式處理 器(ARM、IBM的RISC架構(gòu)的處理器),其上能夠運(yùn)行各種操作系統(tǒng),通過操作系統(tǒng)中的軟件 實(shí)現(xiàn)的TCP/IP協(xié)議來實(shí)現(xiàn)網(wǎng)絡(luò)通信。這種實(shí)現(xiàn)方式的優(yōu)點(diǎn)是簡化了繁瑣的硬件設(shè)計(jì)并且 比較靈活。然而缺點(diǎn)也比較明顯,當(dāng)網(wǎng)絡(luò)速度達(dá)到吉比特?cái)?shù)量級時,主CPU越來越繁忙,其 中大部分處理負(fù)荷都是來自對TCP/IP協(xié)議的處理,比如對IP數(shù)據(jù)包的校驗(yàn)處理、對TCP數(shù) 據(jù)流的可靠性和一致性處理。大量協(xié)議數(shù)據(jù)還需要通過I/O中斷進(jìn)行操作,不斷在網(wǎng)絡(luò)接 口緩沖區(qū)和應(yīng)用程序內(nèi)存之間進(jìn)行數(shù)據(jù)交換,這些額外負(fù)擔(dān)極大地降低了主CPU的處理效 率,增加了應(yīng)用計(jì)算的平均等待時間。按照CPU對網(wǎng)絡(luò)數(shù)據(jù)流的處理比率分析,大概CPU每 處理1比特網(wǎng)絡(luò)數(shù)據(jù),就將消耗1Hz的處理性能,也就是說需要2GHz的CPU處理能力滿負(fù) 荷運(yùn)行才能滿足1GB以太網(wǎng)數(shù)據(jù)流的處理要求。面對網(wǎng)絡(luò)帶寬和速度的飛速增長,這種傳 統(tǒng)的通過軟件進(jìn)行TCP/IP協(xié)議處理的方式已經(jīng)越來越成為高性能網(wǎng)絡(luò)通信的瓶頸。
[0005] 硬件方式是通過FPGA或者ASIC使用全硬件的方式來實(shí)現(xiàn)TCP/IP協(xié)議棧,囊括了 TCP/IP協(xié)議棧全部的四層結(jié)構(gòu),獨(dú)立于CPU運(yùn)作,信息的進(jìn)棧/出棧,封包/解包等網(wǎng)絡(luò)數(shù) 據(jù)處理全部在實(shí)現(xiàn)了TCP/IP協(xié)議棧的FPGA或者ASIC芯片中進(jìn)行,卸載掉了CPU對于龐 大數(shù)據(jù)處理的負(fù)載,從而使CPU保持高效運(yùn)轉(zhuǎn)且能夠?qū)崿F(xiàn)高速網(wǎng)絡(luò)傳輸,同時也避免了CPU 受到網(wǎng)絡(luò)攻擊的危險(xiǎn),增加了CPU工作的安全性。該技術(shù)通常被成為TCPOffloadEngine (TOE)技術(shù)。
[0006]美國專利US6996070B2 "TCP/IPOFFLOADDEVICEWITHREDUCEDSEQUENTIAL PROCESSING" 和美國專利US8402142B2"SYSTEMANDMETHODFORTCP/IPOFFLOAD INDEPENDENTOFBANDWIDTHDELAYPRODUCT"給出了兩種實(shí)現(xiàn)方法,實(shí)現(xiàn)了TOE功能。但是 其存在兩個主要的缺陷,首先應(yīng)用領(lǐng)域有限制,很難移植到嵌入式領(lǐng)域;其次從設(shè)計(jì)上來講 其層次化比較模糊,實(shí)現(xiàn)架構(gòu)比較復(fù)雜。
[0007] 另外商用化的TOE芯片主要有美國Broadcom公司的BCM5709C系列和韓國WIZnet 公司的W5100系列芯片。目前,國內(nèi)還沒有類似的專利和芯片。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明旨在解決傳統(tǒng)的通過軟件進(jìn)行TCP/IP協(xié)議處理方式帶來的網(wǎng)絡(luò)通信的瓶 頸。本發(fā)明基于大規(guī)模集成電路器件,通過全硬件的方式實(shí)現(xiàn)TCP/IP協(xié)議棧中網(wǎng)絡(luò)接口 層、網(wǎng)絡(luò)層和傳輸層,極大的提高了CPU的處理效率和網(wǎng)絡(luò)傳輸速率。
[0009] 本發(fā)明的目的是通過以下技術(shù)方案實(shí)現(xiàn)的。
[0010] 本發(fā)明的一種全硬件TCP協(xié)議棧實(shí)現(xiàn)方法在實(shí)現(xiàn)上采用了如下五種設(shè)計(jì)思想和 技術(shù):1)分層設(shè)計(jì)思想;2)接收和發(fā)送通道分離;3)標(biāo)準(zhǔn)化的控制和數(shù)據(jù)接口技術(shù);4)多 級狀態(tài)機(jī);5)數(shù)據(jù)多級緩存和高效預(yù)取技術(shù)。旨在提高傳輸速度、降低設(shè)計(jì)難度、提高設(shè)計(jì) 可重用性。
[0011] 本發(fā)明的一種全硬件TCP協(xié)議棧實(shí)現(xiàn)方法其硬件平臺使用網(wǎng)絡(luò)接口芯片100、外 置PHY芯片101和DDR芯片102構(gòu)成。其中網(wǎng)絡(luò)接口芯片100為主控制芯片,實(shí)現(xiàn)了TCP/ IP協(xié)議棧數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層和傳輸層的功能,可采用FPGA(FieldProgrammableGate Array,現(xiàn)場可編程門陣列),也可使用ASIC(Application_SpecificIntegratedCircuit, 專用集成電路)實(shí)現(xiàn)。外置PHY芯片101實(shí)現(xiàn)了TCP/IP協(xié)議棧的物理層功能,可選擇性 比較廣泛,只要支持Mil、GMII、SGMII和RGMII等標(biāo)準(zhǔn)接口的芯片都可以用在本發(fā)明中, 比如MARVELL公司的88E1111、REALTEK公司的RTL8201CP、MICREL公司的KSZ8001L/S和 KSZ8041NL。DDR芯片實(shí)現(xiàn)數(shù)據(jù)緩沖,主要是為了適應(yīng)比較復(fù)雜情況的網(wǎng)絡(luò)情況和比較大的 網(wǎng)絡(luò)抖動,在比較簡單的網(wǎng)絡(luò)環(huán)境中也可以使用網(wǎng)絡(luò)接口芯片100中的內(nèi)部RAM做為數(shù)據(jù) 緩沖。
[0012] 本發(fā)明的一種全硬件TCP協(xié)議棧實(shí)現(xiàn)方法,其中所述的網(wǎng)絡(luò)接口芯片100由MAC 模塊1、MAC控制模塊2、組包模塊3、解包模塊4、ARP模塊5、IP模塊6、ICMP模塊7、TCP模 塊8、數(shù)據(jù)交互引擎9、DDR控制器10和配置和管理模塊11構(gòu)成。其功能和連接方式為:MAC 模塊1與外部的PHY芯片連接,其輸入接口與組包模塊3相連,輸出接口與解包模塊4相 連,控制和狀態(tài)接口與MAC控制模塊2相連;MAC控制模塊2與MAC模塊1交互發(fā)送接收狀 態(tài)信息以及流控制信息,分別控制組包模塊3和解包模塊4的發(fā)送和接收;解包模塊4會根 據(jù)頭信息判斷接收包類型,把不同類型的包發(fā)送給ARP模塊5和IP模塊7處理;IP模塊7 把接收的ICMP包發(fā)給ICMP模塊6處理,把數(shù)據(jù)包去掉IP包頭之后交給TCP模塊8處理; TCP模塊8通過標(biāo)準(zhǔn)的存儲器接口方式把接收的數(shù)據(jù)發(fā)送到數(shù)據(jù)交互引擎9,并從數(shù)據(jù)交互 引擎9得到需要發(fā)送的數(shù)據(jù);數(shù)據(jù)交互引擎9和DDR控制器11相連,完成數(shù)據(jù)緩沖,并且該 模塊還實(shí)現(xiàn)了芯片外部接口邏輯;配置和管理模塊10通過配置接口分別于TCP模塊8和數(shù) 據(jù)交互引擎9相連。
[0013] 本發(fā)明的一種全硬件TCP協(xié)議棧實(shí)現(xiàn)方法,其中所述的MAC模塊1由管理數(shù)據(jù)接 口仲裁11、地址配置寄存器組12、傳輸引擎13、接收引擎14、流量控制模塊15、PHY接口控 制邏輯16構(gòu)成;解包模塊3由接收計(jì)數(shù)器21、接收參數(shù)寄存器組22、有效性判斷和接收分 配模塊23構(gòu)成;組包模塊4由發(fā)送狀態(tài)機(jī)41、幀成形模塊42、發(fā)送數(shù)據(jù)緩沖43構(gòu)成;ARP 模塊5由ARP包檢測和一些功能邏輯構(gòu)成;ICMP模塊6由PING應(yīng)答數(shù)據(jù)緩沖61、CRC生成 模塊62構(gòu)成;IP模塊7由IP包有效性判斷模塊71、IP包頭生成72、IP包頭緩沖RAM73構(gòu) 成。TCP模塊8由主控制狀態(tài)機(jī)81、TCP接收引擎82、TCP發(fā)送引擎83、TCP包解析和參數(shù) 提取模塊84和發(fā)送合成復(fù)用模塊85構(gòu)成;數(shù)據(jù)交互引擎9由主機(jī)接口控制模塊91、讀寫 訪問控制模塊92、接收數(shù)據(jù)通道93和發(fā)送數(shù)據(jù)通道94構(gòu)成;配置和管理模塊10由系統(tǒng)寄 存器組和中斷控制單元構(gòu)成。
[0014] 本發(fā)明的一種全硬件TCP協(xié)議棧實(shí)現(xiàn)方法,其數(shù)據(jù)的接收包括如下步驟: 1. MAC模塊接收PHY輸出的數(shù)據(jù),完成對以太網(wǎng)幀的解包操作,在這個過程中會比較目 的地址是否為本機(jī)目的地址,以及判斷幀是否正確。如果正確,MAC模塊會去掉幀頭部和尾 部然后把數(shù)據(jù)發(fā)送到解包模塊; 2. 解包模塊會根據(jù)頭信息判斷接收包類型,如果是ARP包會發(fā)給ARP模塊處理,ARP模 塊處理完成之后產(chǎn)生的ARP應(yīng)答包會通知組包模塊發(fā)送,如果是IP數(shù)據(jù)包會發(fā)送給IP模 塊處理; 3. IP模塊內(nèi)部的IP包有效性判斷模塊會分析IP包頭的參數(shù)信息和CRC是否正確。如 果是ICMP包會發(fā)給ICMP模塊處理,ICMP模塊處理完成之后產(chǎn)生的ICMP應(yīng)答包通過組包 模塊發(fā)送,如果是TCP數(shù)據(jù)包會去掉IP頭然后發(fā)送給TCP模塊處理; 4. TCP模塊中的TCP包解析和參數(shù)提取模塊得到TCP包頭中的參數(shù),判斷TCP包類型。 如果是數(shù)據(jù)包會交給TCP接收引擎處理,TCP接收引擎中的接收控制狀態(tài)機(jī)會根據(jù)設(shè)置的 條件發(fā)送數(shù)據(jù)應(yīng)答包,并且把接收的數(shù)據(jù)放入接收數(shù)據(jù)緩沖,存儲控制模塊從緩沖中讀出 數(shù)據(jù)交給數(shù)據(jù)交互引擎; 5. 接收的數(shù)據(jù)在數(shù)據(jù)交互引擎的接收數(shù)據(jù)通道內(nèi)再做一級緩存,然后啟動讀寫訪問控 制模塊把接收的數(shù)據(jù)放入DDR緩存,并且通過主機(jī)接口控制模塊生成接收數(shù)據(jù)中斷通知主 機(jī)取數(shù)據(jù); 6. 主機(jī)接口控制模塊在有數(shù)據(jù)接收的時候會啟動讀寫訪問控制模塊從DDR預(yù)取數(shù)據(jù), 等待主機(jī)讀取。
[0015] 本發(fā)明的一種全硬件TCP協(xié)議棧實(shí)現(xiàn)方法,其數(shù)據(jù)的發(fā)送包括如下步驟: 1. 主機(jī)把需要發(fā)送的數(shù)據(jù)通過數(shù)據(jù)交互引擎送入DDR緩存; 2. 數(shù)據(jù)交互引擎的發(fā)送數(shù)據(jù)通道通過讀寫訪問控制模塊從DDR預(yù)取數(shù)據(jù)放入發(fā)送 FIFO中緩存。發(fā)送BUF寫狀態(tài)機(jī)判斷到發(fā)送FIFO有數(shù)據(jù)后會啟動讀FIFO操作,然后把需 要發(fā)送的數(shù)據(jù)按照幀長度送入發(fā)送BUFA和發(fā)送BUFB,在這個過程中完成數(shù)據(jù)CRC的計(jì)算。 如果是重傳操作,重傳BUF控制狀態(tài)機(jī)會從DDR中讀取出重傳數(shù)據(jù)放入重傳BUF,同樣在寫 入過程中也完成數(shù)據(jù)CRC的計(jì)算。數(shù)據(jù)準(zhǔn)備好之后通知TCP模塊有數(shù)據(jù)需要發(fā)送; 3. TCP發(fā)送引擎在發(fā)送控制狀態(tài)機(jī)的控制下生成TCP包頭存入TCP包頭緩沖模塊,然后 通知IP模塊發(fā)送。因?yàn)榘l(fā)送和接收同時進(jìn)行,所以發(fā)送請求會經(jīng)過發(fā)送合成復(fù)用模塊復(fù)用 TCP發(fā)送引擎和TCP接收引擎的發(fā)送請求; 4. IP模塊根據(jù)TCP模塊提供的發(fā)送數(shù)據(jù)包的信息生成IP包頭存入IP包頭緩沖模塊, 通知組包模塊發(fā)送; 5. 在組包模塊的發(fā)送狀態(tài)機(jī)的控制下,從IP模塊讀出IP頭,從TCP模塊讀出TCP頭, 從數(shù)據(jù)交互引擎讀出待發(fā)送的數(shù)據(jù),然后根據(jù)以太網(wǎng)幀格式生成正確的以太網(wǎng)幀送入MAC 模塊