專利名稱:基于fpga的以太網接口驅動裝置的制作方法
技術領域:
本發明涉及以太網接口驅動程序,尤其是一種基于FPGA(現場可編程門陣列) 技術的以太網接口驅動裝置。
背景技術:
隨著信息化和網絡技術的發展,以太網技術被用于工業控制和信息化生活的 各個方面,極大的提高了我們的生活水平。以太網接口是連接以太網的關鍵,而 FPGA具有極好的靈活性。采用FPGA設計以太網接口,它不但可以簡化系統而且 還可以降低成本。
對FPGA在以太網接口控制中的使用進行研究與實踐,并且開發出具有自主知
識產權的IP控制核,無疑會使我國逐漸擺脫對國外類似核心控制芯片的依賴,具
有良好的經濟核社會效益。
1982年12月IEEE802. 3標準的出現,標志著以太網技術標準的起步,同時
也標志著符合國際標準、具有高度互通性的以太網產品的面世。IEEE802.3標準
規定以太網是以10Mbps的速度運行,采用載波偵聽多路訪問/沖突檢測(簡稱為
CSMA/MD)介質存取控制(簡稱為MAC)協議在共享介質上傳輸數據的技術。
以太網從出現至今,僅僅經過不到20年的發展時間,其運行速度卻提高了兩
個數量級,從10Mbps到100Mbps到了 1000Mbps,乃至最近出現的10Gbps的以太
網原型,這是一個非常令人心動的變革。而以太網低廉的端口價格和優越的性能,
使得以太網在不到20年的發展時間里,占據了整個局域網市場的85%左右,從
而使得CSMA/MD協議在局域網協議中居于統治地位,成了局域網協議的事實標準,
也使得以太網成了局域網的代名詞。事實上,以太網提高的兩個數量級的這個速
度是其在介質上傳輸數據的實際速度,并不是以太網傳輸有用數據的速度。無論 是以太網、快速以太網,還是高速以太網,MAC層協議采用相同的CSMA/MD協議, 也采用相同的以太網802. 3的幀結構傳輸數據。以太網這種采用相同的協議和傳 輸幀結構,使得以太網在對已有投資的保護基礎上,完成對網絡性能的升級。802.3 標準中規定的以太網幀是由64位前同步信號、96位地址、16位類型/長度字段、 46_1500字節的數據和32位校驗等幾部分組成,并且CSMA/MD還規定,在連續 傳輸兩個以太網幀時,必須等待至少96位的幀間隙時間,如果在這段時間信道內 一直沒有數據,就說明此時信道空閑,才允許此站點發送下一個以太網幀。可以 看出,在一個以太網幀中,只有46 — 1500字節的數據才是有效數據,其它的字節 均是消耗。因此,以太網的連續發送數據的情況下,每發送一個以太網幀就總共 至少要消耗掉304位的額外開銷。因此,10Mbps/100MbpsAGbps僅是在介質上傳 輸數據的實際速度,通常將這個速度稱為端口線速度,或稱為信道帶寬;而其傳 輸有用數據的速度,無論是從理論上還是在實際中是都要小于端口線速度,通常 將這個速度稱為端口吞吐量。
以太網驅動的設計大多是使用芯片控制的,現在比較常用的方法有
(1)利用RTL8019AS芯片和單片機。 RTL8019AS是一個高度集成的以太網控制器,它提供了一種簡單的解決方案 以實現具備全雙工和掉電模式特性的即插即用NE2000兼容的以太網適配器。由于 具備3種等級掉電模式控制特性,所以對于GREEN PC系統RTL8019AS是網絡設 備的理想選擇。全雙工功能使得RTL8019AS能夠同時收發全雙工以太網交換機雙 絞線鏈路上的數據。這個特性不僅使得信道帶寬從10Mbps增加到20Mbps,而且 避免了由于基于以太網CSMA/CD協議的信道競爭特性引起的性能惡化[3]。設計人 員利用單片機編寫控制模塊來實現對該芯片輸入輸出的協調控制。由于該芯片功 能比較強大,如適用于IEEE802. 3協議、10Base5、 10Base2、 10BaseT;支持8
位、16位數據總線,8個中斷申請線以及16個I/0基地址選擇;全雙工,收發可 同時達到10Mbps的速率,具有休眠模式,可以降低功耗;內置16KB的SRAM用于 收發緩存。所以大多數設計者都對該芯片情有獨鐘。
(2) 利用IIM7010模塊與TMS320VC33。
TMS320VC33是TI的第一代浮點DSP芯片,作為數字中頻接收機的主控制器。 XC2S100EPQ208為XILINX公司推出的SPARTAN-IIE系列FPGA中的一款,在接收 機中主要控制AD采集,實現解調,為IIM7010提供相應的控制信號。1IM7010的 讀寫信號,片選信號,W3100A的復位信號等都是由FPGA給出。
數字中頻接收機與外部設備進行以太網通信采用客戶/服務器模式,接收機作 為服務器,采用TCP協議。DSP控制程序采用C語言編寫。通過設計DSP, FPGA 與IIM7010模塊的接口電路和驅動程序,實現數字中頻接收機的以太網通信。
(3) 利用CS8900A和TMS320VC32
該芯片是Cirrus Logic公司生產的一種局域網信號處理芯片,內部繼承了片 上RAM,其模擬前端包括曼徹斯特編解碼器,始終恢復電路,10BASE2T收發器和濾 波器及一個AUI接口。 CS8900A的MAC引擎負責以太網數據幀的發送和接收,檢測和 處理沖突,生成和檢測幀引導頭,自動生成和校驗CRC碼。CS8900A的20位地址線 和TMS320VC32地址線低20位相連;通過一片CPLD擴展TMS320VC32的外部控制功能, 控制CS8900A的中斷請求,復位和讀寫操作[2]。
以上三種是較為常用的以太網接口驅動設計的方案。但是由于芯片本身的成 本問題,對于一些特殊環境來說它的成本還是偏貴了一些,并且由于TCP/IP協 議本身的復雜性和繁瑣性,利用芯片來完成以太網接口驅動的設計就不太讓人滿 息。
發明內容
為了克服已有以太網接口驅動裝置的成本高、通用性差、靈活性低、實用性
差的不足,本發明提供一種能夠降低成本、具有很強的通用性、靈活性和實用性 的基于FPGA的以太網接口驅動裝置。
本發明解決其技術問題所采用的技術方案是
一種基于FPGA的以太網接口驅動裝置,包括以太幀生成模塊,用于產生以
太幀數據,并完成IP數據包和以太幀的封裝,將CRC循環校驗碼放置在數據的最 后;CRC循環校驗模塊,用于將傳過來的數據進行CRC校驗,并輸出CRC循環校 驗碼;以太幀輸出模塊,用于將輸入的數據加上IP報頭和以太幀前端并輸出;以 太幀前端控制模塊,用于將UDP格式的數據包輸入到FPGA芯片的RAM中并且從中 獲取長度信息,并且根據TCP/IP協議中對IP報頭的要求依次產生數據,生成IP 報頭,對IP數據包進行處理,加上以太幀前端,并按照時序輸出;輸出端口選擇 模塊,用于控制以太幀和IP報頭的順序;IP數據報控制模塊,用于將輸入的數 據緩存設定的時鐘后輸出;IP數據報輸出模塊,用于將輸入的UDP數據報按照 TCP/IP協議加上IP報頭,然后按照時序輸出。
作為優選的一種方案所述的以太網接口驅動裝置還包括IP報頭控制模塊, 用于獲取UDP報中的長度數據,并計算頭標校驗和;IPRAM控制模塊,用于將輸 入的數據放入RAM里,并在恰當的時機輸出UDP報中的數據長度;IP數據報數據 輸出端口模塊,用于調節IP報頭和數據的時序。
進一步,所述的CRC循環校驗模塊為八位并行CRC-32循環校驗模塊,CRC校 驗碼的生成多項式是
CRC32校驗產生器預先將移位寄存器值置為全1;八位并行CRC-32循環校驗模塊 輸出一個32位的校驗碼。
本發明的技術構思為通過FPGA來實現現有技術中的芯片的大部分功能。基
于FPGA的設計技術是發展迅速的一項技術。使用FPGA設計以太網接口驅動可以 充分利用FPGA所具有的可編程、控制邏輯實現方式靈活的特點,使設計出的以太 網接口控制具有很強的通用性、靈活性和使用性。設計者能夠根據協議的要求自 行更改設計內容,在價格便宜的前提下使得功能更符合使用場合。
在網絡中本發明選用IP協議,以下簡述一下IP協議的內容
互聯網把它的基本傳輸單元稱為IP數據報(datagram),有時成為Internet 數據報。
IP數據報符合典型數據分組的一般格式,分為報頭(或稱首部)和數據區兩 部分。
(1) 版本和協議類型
IP數據報中的第一個域為版本(VERS)域,長度為4比特。表示數據報所對 應的IP協議版本號。不同的IP協議版本,其數據報格式有所不同。當前的IP 協議版本好為"4"。
IP數據報中的協議(PROTOCOL)域表示創建該數據報數據區數據的高級協議 的類型比如TCP (6), UDP (17), ICMP (1)等。協議類型代碼是有一個中央管理 機構管理的,在整個Internet范圍內保持一致。
(2) 長度
IP數據報頭含兩個長度域報頭長(HLEN)和總長(TOTAL LENGTH)。 報頭是一個4個比特域,指出32比特(4字節)為單位的報頭長度。 一個不含選 項域和填充域的普通IP數據報其報頭長度取值為"5"。總長域知識整個IP數據 報的長度,以字節為單位。其中包含報頭長以及數據長。由于總長度為16比特, 所以IP數據報最長可達到65535個字節。
(3) 服務類型與優先權 服務類型規定大隊本數據報的處理方式。該域長度為一個字節,分為六個子
域。取全"1"。
(4) 頭校驗和
"頭校驗和"(HEADER CHECKSUM)域用于保證報頭數據的完整性,IP協議 報頭校驗和算法很簡單設"頭校驗和"初值為0,然后對報頭數據每16位求異 或,結果取反,便得到校驗和。在IP數據報中只含報頭校驗和,而不對數據區校 驗。
(5) 地址
在IP數據報的報頭中,兩個地址域是"信源地址"(SOURCE ADDRESS)和"信 宿地址"(DESTINATION ADDRESS)域。這32比特的域分別表示本IP數據報最初 發送者和最終接收者的地址,在整個數據報傳輸過程中,無論經過什么路徑,無 論如何分片,此兩域均保持不變。
為了簡化本程序,所以IP數據報的分片和片偏移部分皆為"0",即不對UDP 數據報進行分片處理。對IP數據報的處理主要集中在獲取長度信息和計算校驗和 上,由于長度信息的可變性所以對于每個不同的UDP數據報,其IP數據報報頭都 是不相同的。程序需要對傳輸過來的UDP數據報報頭進行判斷和處理,從中獲取 出整個數據的長度信息并進行合適的處理,得出IP數據報的長度值,并用這個值 去計算校驗和。
基于FPGA的以太網端口驅動的設計和應用,主要包括TCP/IP協議中IP數據 包的設計和以太幀結構的設計,實現對UDP數據包的合適處理,使其能夠在特定情 況下在以太網中傳輸。基于FPGA的設計能夠最終做到軟件的仿真和硬件調試。在 輸出端能夠看到符合以太網傳輸協議的幀結構的產生。由于應用環境的特殊性和 自身水平的限制,本發明現在所設計的以太幀發射過程中去除了 CSMA/CD的過程, 這大大減少的工作量,也便于利用FPGA來完成這項工作。
將UDP格式的數據包輸入到FPGA芯片的RAM中并且從中獲取長度信息,并且
根據TCP/IP協議中對IP報頭的要求依次產生合理的數據,生成合適的IP報頭, 放在UDP數據包的開始形成IP數據包格式。然后將IP數據包緩存幾個時鐘用來 產生正確的以太幀前端,同時將IP數據包輸入至CRC循環校驗碼程序,當數據 傳輸完畢后產生的CRC循環校驗碼放置于數據包的最后,同時在IP數據包前端 產生以太幀前端數據,通過如此處理的數據串就形成合適以太網傳輸的以太幀格 式。整個發明都是在FPGA芯片上進行程序的編寫并且下載到FPGA芯片上進行硬 件的調試來實現的。
實現過程數據經過IP的處理后已經成為IP數據包,然后將IP數據包 緩存數個時鐘,同時輸出以太幀的前端數據,包括前端,目的地址,源地址和長 度數據。特別是長度需要從原來的數據中獲取之。將此數據放在IP數據包的甜 端合適時間輸出。
本發明的有益效果主要表現在1、能夠降低成本;2、具有很強的通用性、
靈活性和實用性。
圖l是UDP偽首部格式圖。
圖2是以太幀結構。
圖3是IP數據報結構。
圖4是基于FPGA的以太網接口驅動裝置的總體結構圖。
圖5是基于FPGA的以太網接口驅動裝置的總體功能結構圖。
圖6是程序流程圖。
圖7是以太幀功能實現。
圖8是輔助程序功能圖。
具體實施例方式
下面結合附圖對本發明作進一步描述。
參照圖1 圖8, 一種基于FPGA的以太網接口驅動裝置,包括以太幀生成
模塊,用于產生以太幀數據,并完成IP數據包和以太幀的封裝,將CRC循環校驗 碼放置在數據的最后;CRC循環校驗模塊,用于將傳過來的數據進行CRC校驗, 并輸出CRC循環校驗碼;以太幀輸出模塊,用于將輸入的數據加上IP報頭和以太 幀前端并輸出;以太幀前端控制模塊,用于將UDP格式的數據包輸入到FPGA芯片 的RAM中并且從中獲取長度信息,并且根據TCP/IP協議中對IP報頭的要求依次 產生數據,生成IP報頭,對IP數據包進行處理,加上以太幀前端,并按照時序 輸出;輸出端口選擇模塊,用于控制以太幀和IP報頭的順序;IP數據報控制模 塊,用于將輸入的數據緩存設定的時鐘后輸出;IP數據報輸出模塊,用于將輸入 的UDP數據報按照TCP/IP協議加上IP報頭,然后按照時序輸出。
所述的以太網接口驅動裝置還包括IP報頭控制模塊,用于獲取UDP報中的 長度數據,并計算頭標校驗和;IPRAM控制模塊,用于將輸入的數據放入RAM里, 并在恰當的時機輸出UDP報中的數據長度;IP數據報數據輸出端口模塊,用于調 節IP報頭和數據的時序。
所述的CRC循環校驗模塊為八位并行CRC-32循環校驗模塊,CRC校驗碼的生 成多項式是
CRC32校驗產生器預先將移位寄存器值置為全1;八位并行CRC-32循環校驗模塊
輸出一個32位的校驗碼。
本實施例將UDP格式的數據包輸入到FPGA芯片的RAM中并且從中獲取長度信
息,并且根據TCP/IP協議中對IP報頭的要求依次產生合理的數據,生成合適的
IP報頭,放在UDP數據包的開始形成IP數據包格式。然后將IP數據包緩存幾
個時鐘用來產生正確的以太幀前端,同時將IP數據包輸入至CRC循環校驗碼程 序,當數據傳輸完畢后產生的CRC循環校驗碼放置于數據包的最后,同時在IP 數據包前端產生以太幀前端數據,通過如此處理的數據串就形成合適以太網傳輸 的以太幀格式。整個發明都是在FPGA芯片上進行程序的編寫并且下載到FPGA 芯片上進行硬件的調試來實現的。
實現過程數據經過IP的處理后已經成為IP數據包,然后將IP數據包 緩存數個時鐘,同時輸出以太幀的前端數據,包括前端,目的地址,源地址和長 度數據。特別是長度需要從原來的數據中獲取之。將此數據放在IP數據包的前 端合適時間輸出。
整個程序以ethernet為頂層文件,包括四個模塊ethfirstl, ethoutl, num 和crc。 crc的作用是產生CRC循環校驗碼,ethfirstl的作用是生成以太幀, 它又包括四個模塊ip, ethc, ipcome和ethout. ethc的作用是產生以太幀前端 結構,特別是取得IP數據的長度。ip的作用是產生IP數據包,主要是對IP 包頭進行處理,它包括三個模塊dac. ipramcontrol和ipout。 dac的作用是從 ROM中讀取一些固定的數據,并且從UDP中取得長度信息,放在IP報頭規定的 位置,同時進行計算,取得頭標校驗和。ipramcontrol的作用是控制輸入的數 據,在合適的時機讀取數據。并按照順序將輸入數據依次輸出,便于處理。具 體設計框圖見附圖。
以太幀生成模塊ethernet. v,這是整個程序的頂層文件,它包括四個模塊, 分別是,crc.v, num. v, ethoutl. v和ethfirstl. v。它的作用是纟各各個模塊 的功能綜合在一起產生以太幀數據。數據經過ethfirstl. v的處理后已經完成 了 IP數據包和以太幀的封裝。然后將從ethfirstl. v傳來的數據(通過ipdata 端口)進行CRC循環檢驗(crc.v),然后加在數據的最后,利用num.v來計數, 并在合適的時間加載在數據的最后,用ethoutl. v來選擇輸出。完成整個程序
的功能。
CRC循環校驗模塊crc. v,八位并行CRC-32循環校驗模塊,它的作用是將 傳輸過來的數據進行CRC校驗,并輸出校驗結果。本發明選擇的CRC校驗碼的
CRC- 32校驗產生器會在初始狀態的時候預先將移位寄存器值置為全1,如果沒 有這樣的預設置,就不能正確地保護數據包開始為0的數據位。此程序將從data 端口輸入的數據進行八位并行運算并得出一個32位的校驗碼。
計數模塊num.v:對long端口的長度數據進行計數,當計到相應長度時輸 出一個高電平。
輸出端口選擇模塊ethoutl. v:當num. v給出高電平時輸出CRC校驗數據, 否則輸出ethfirst. v的數據。
以太幀輸出模塊ethfirsetl.v:將輸入的數據加上IP報頭和以太幀前端 并輸出。它包括四個模塊,分別是ethc.v,ethout.v,ipcome. v和ip. v。它的 作用是將各個模塊綜合在一起。
以太幀前端控制模塊ethc. v:對IP數據包進行處理,加上以太幀前端, 并按照時序輸出。主要是獲取IP包長度。
輸出端口選擇模塊ethout. v是控制以太幀和IP報頭的順序。
IP數據報控制模塊ipcorae.v:簡單的緩存程序,將輸入的數據緩存7個時 鐘后輸出以保證時序的準確性。
IP數據報輸出模塊ip.v:將輸入的UDP數據報按照TCP/IP協議加上IP 報頭,然后按照時序輸出。它包括三個模塊分別是dac. v, ipramcontrol. v和 ipout.v。它的作用是將各個模塊綜合在一起。IP功能實現過程將數據放至 32位的RAM中保存,同時從已經寫好的ROM中提取IP報頭中固定的數據,在第 5和第6個時鐘從RAM中先讀取UDP的長度,并經過處理后放在IP報頭長度的 位置。將原有數據和IP長度數據綜合計算得出頭標校驗和的值。然后完整的輸 出IP報頭,RAM中的數據在32個時鐘后按照順序輸出。
IP報頭控制程序dac.v:輸出符合IP報頭的數據串。主要包括獲取UDP報 中的長度數據,并計算"頭標校驗和"。
IPRAM控制模塊ipramcontrol. v:將輸入的數據放入一個32字節的RAM 里,并在恰當的時機輸出UDP報中的數據長度。
IP數據報數據輸出端口模塊ipout. v:調節IP報頭和數據的時序。
本實施例編寫的程序要通過"可編程通信系統教學實驗箱"進行硬件調 試,此試驗箱的主要芯片為FPGA芯片EPlK30TC144-3。利用邏輯分析儀來觀察 輸出數據的準確性。為了便于觀察,本發明設計了幾個特別的模塊來輔助。
8分頻器divide8. v將8位并行的數據串行輸出,設計分頻器用于時鐘處理。 設計32分頻器divide32. v是由于試驗箱的時鐘過高,不便觀察,將其分頻后 能產生合適的時鐘信號。
數據產生器data.v產生輸入數據,當總體復位信號reset信號來時,開始產 生數據,每128個時鐘變換一次,分別是OF和OO。并串轉換器將8位并行的數 據串行輸出。
將編寫的程序寫入EP1K30TC144-3芯片中進行調試。利用邏輯分析儀來進 行觀察。將輸出結果與仿真結果相比較,結果完全相同.可知此程序能夠適用于 該芯片.并輸出適合以太網傳輸的以太幀。
權利要求
1、一種基于FPGA的以太網接口驅動裝置,其特征在于所述的以太網接口驅動裝置包括以太幀生成模塊,用于產生以太幀數據,并完成IP數據包和以太幀的封裝,將CRC循環校驗碼放置在數據的最后;CRC循環校驗模塊,用于將傳過來的數據進行CRC校驗,并輸出CRC循環校驗碼;以太幀輸出模塊,用于將輸入的數據加上IP報頭和以太幀前端并輸出;以太幀前端控制模塊,用于將UDP格式的數據包輸入到FPGA芯片的RAM中并且從中獲取長度信息,并且根據TCP/IP協議中對IP報頭的要求依次產生數據,生成IP報頭,對IP數據包進行處理,加上以太幀前端,并按照時序輸出;輸出端口選擇模塊,用于控制以太幀和IP報頭的順序;IP數據報控制模塊,用于將輸入的數據緩存設定的時鐘后輸出;IP數據報輸出模塊,用于將輸入的UDP數據報按照TCP/IP協議加上IP報頭,然后按照時序輸出。
2、 如權利要求1所述的基于FPGA的以太網接口驅動裝置,其特征在于所述的 以太網接口驅動裝置還包括IP報頭控制模塊,用于獲取UDP報中的長度數據,并計算頭標校驗和;IPRAM控制模塊,用于將輸入的數據放入RAM里,并在恰當的時機輸出UDP報中 的數據長度;IP數據報數據輸出端口模塊,用于調節IP報頭和數據的時序。
3、 如權利要求1或2所述的基于FPGA的以太網接口驅動裝置,其特征在于所 述的CRC循環校驗模塊為八位并行CRC-32循環校驗模塊,CRC校驗碼的生成多項式是<formula>formula see original document page 3</formula>CRC32校驗產生器預先將移位寄存器值置為全1;八位并行CRC-32循環校驗模塊 輸出一個32位的校驗碼。
全文摘要
一種基于FPGA的以太網接口驅動裝置,包括以太幀生成模塊,用于產生以太幀數據,并完成IP數據包和以太幀的封裝,將CRC循環校驗碼放置在數據的最后;CRC循環校驗模塊,用于將傳過來的數據進行CRC校驗并輸出校驗碼;以太幀輸出模塊,用于將輸入的數據加上IP報頭和以太幀前端并輸出;以太幀前端控制模塊,用于對IP數據包加上以太幀前端并按照時序輸出;輸出端口選擇模塊,用于控制以太幀和IP報頭的順序;IP數據報控制模塊,用于將輸入的數據緩存設定的時鐘后輸出;IP數據報輸出模塊,用于將輸入的UDP數據報按照TCP/IP協議加上IP報頭,按照時序輸出。本發明能夠降低成本、具有很強的通用性、靈活性和實用性。
文檔編號H04L12/56GK101184030SQ20071015651
公開日2008年5月21日 申請日期2007年11月6日 優先權日2007年11月6日
發明者孟利民, 羅佳波, 陶明淵 申請人:浙江工業大學