劉 源,張 剛
(太原理工大學(xué)信息工程學(xué)院,太原 030024)
可靠UDP協(xié)議棧的FPGA實(shí)現(xiàn)
劉 源,張 剛
(太原理工大學(xué)信息工程學(xué)院,太原 030024)
基于Xilinx公司的Virtex-5系列FPGA開發(fā)板,采用VHDL硬件描述語言,并運(yùn)用模塊化的設(shè)計(jì)理念,參考TCP_IP協(xié)議棧的工作機(jī)制,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)具有接收確認(rèn)及漏發(fā)重發(fā)功能的可靠的UDP_IP網(wǎng)絡(luò)通信協(xié)議棧。同時(shí),設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)以太網(wǎng)控制器,該控制器與UDP_IP協(xié)議一起構(gòu)成一個(gè)完整的網(wǎng)絡(luò)通信鏈路協(xié)議。經(jīng)過上板測試驗(yàn)證,該通信協(xié)議棧能正確高效地完成網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收等工作,且穩(wěn)定性良好。
可靠UDP,通信協(xié)議,F(xiàn)PGA,VHDL
傳統(tǒng)的網(wǎng)絡(luò)通信設(shè)備依賴操作系統(tǒng)本身內(nèi)置的TCP_IP協(xié)議棧來實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備之間的數(shù)據(jù)通信,此種方式需要消耗設(shè)備大量的CPU資源,在一定程度上束縛了CPU效能的發(fā)揮。為此,本設(shè)計(jì)提供了一種硬件方式實(shí)現(xiàn)的UDP_IP協(xié)議棧,采用此種硬件協(xié)議的網(wǎng)絡(luò)設(shè)備,數(shù)據(jù)通信功能可以作為一個(gè)模塊而單獨(dú)存在,可以大大減少CPU資源的占用。由于UDP協(xié)議是不可靠的協(xié)議,其并不能保證數(shù)據(jù)傳輸?shù)耐暾?,為此本設(shè)計(jì)對(duì)傳統(tǒng)的UDP協(xié)議做了改進(jìn),使其具備接收確認(rèn)及丟包重發(fā)等保證數(shù)據(jù)可靠性傳輸?shù)幕咎卣?。同時(shí)本設(shè)計(jì)還設(shè)計(jì)實(shí)現(xiàn)了一個(gè)以太網(wǎng)控制器,它與上層協(xié)議一起用于從物理鏈路介質(zhì)發(fā)送和接收數(shù)據(jù)。經(jīng)過仿真驗(yàn)證及上板調(diào)試驗(yàn)證,該UDP協(xié)議棧能正確、快速高效地完成網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收等工作,較好地實(shí)現(xiàn)了網(wǎng)絡(luò)數(shù)據(jù)通信功能,達(dá)到了本文設(shè)計(jì)的要求。
UDP_IP協(xié)議棧是一系列具有特定結(jié)構(gòu)的協(xié)議的總稱,它是網(wǎng)絡(luò)設(shè)備接入互聯(lián)網(wǎng)的標(biāo)準(zhǔn)協(xié)議,網(wǎng)路上的設(shè)備只要支持該標(biāo)準(zhǔn),就可以與其他設(shè)備進(jìn)行數(shù)據(jù)通信[1]。
UDP_IP協(xié)議棧按照功能劃分可以分為4個(gè)層次,自上而下分別為應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層。其中應(yīng)用層中包含了大量的客戶端普遍需要的協(xié)議,例如FTP、HTTP、SMTP等,這里其主要用來作為應(yīng)用程序與外界進(jìn)行數(shù)據(jù)交換的通道。傳輸層有兩個(gè)不同服務(wù)類型的協(xié)議,即傳輸控制協(xié)議TCP和用戶數(shù)據(jù)報(bào)協(xié)議UDP。TCP協(xié)議提供的是可靠的無差錯(cuò)的數(shù)據(jù)傳輸服務(wù),在進(jìn)行數(shù)據(jù)傳輸前要先與對(duì)方設(shè)備進(jìn)行3次握手連接,且對(duì)發(fā)送的每段數(shù)據(jù)都要進(jìn)行接收確認(rèn),因此,其控制機(jī)制比較復(fù)雜,傳輸速度相對(duì)來說比較慢,它適用于那些對(duì)數(shù)據(jù)傳輸?shù)臏?zhǔn)確度要求較高但對(duì)傳輸速度不作太多要求的場合。UDP協(xié)議在進(jìn)行數(shù)據(jù)傳輸時(shí)不用與對(duì)方設(shè)備提前建立連接,其不對(duì)發(fā)送的數(shù)據(jù)進(jìn)行接收確認(rèn),所以其提供的是不可靠的數(shù)據(jù)傳輸。它適用于那些對(duì)數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性要求比較高但對(duì)數(shù)據(jù)傳輸差錯(cuò)要求比較低的場合。因?yàn)閁DP協(xié)議具有傳輸速度快效率高且控制機(jī)制簡單等優(yōu)點(diǎn),并且它的可靠性可以加以改進(jìn),所以本設(shè)計(jì)的傳輸層采用改進(jìn)的可靠UDP協(xié)議[2]。網(wǎng)路層主要負(fù)責(zé)添加及解析IP頭并控制數(shù)據(jù)在網(wǎng)絡(luò)上面的傳輸,是UDP_IP協(xié)議棧的重要組成部分,處在該層的有IP協(xié)議、ICMP協(xié)議等。鏈路層位于UDP_IP協(xié)議的最下層,它主要用來校驗(yàn)數(shù)據(jù)以及對(duì)發(fā)送或接收的數(shù)據(jù)進(jìn)行幀格式的封裝或拆封以便于在物理鏈路上進(jìn)行傳輸,位于該層的協(xié)議有ARP協(xié)議、RARP協(xié)議等。
本設(shè)計(jì)是以UDP_IP協(xié)議棧為基礎(chǔ),采用分層次模塊化的設(shè)計(jì)方法,從上到下分為3個(gè)模塊即UDP協(xié)議控制器模塊、IP協(xié)議控制器模塊和以太網(wǎng)控制器模塊,其中每個(gè)模塊內(nèi)部都有相應(yīng)的數(shù)據(jù)處理控制器來控制數(shù)據(jù)的處理,以此來模擬實(shí)現(xiàn)UDP_IP協(xié)議棧中的各層協(xié)議的功能。各個(gè)模塊彼此處理各自的數(shù)據(jù),模塊之間通過先進(jìn)先出FIFO隊(duì)列來進(jìn)行數(shù)據(jù)的接收和發(fā)送,以此來實(shí)現(xiàn)各個(gè)模塊之間數(shù)據(jù)處理過程的相對(duì)獨(dú)立,同時(shí)也便于優(yōu)化結(jié)構(gòu)設(shè)計(jì)以及出錯(cuò)查找。其原理結(jié)構(gòu)如圖1所示。發(fā)送數(shù)據(jù)時(shí),在UDP協(xié)議控制器模塊中,數(shù)據(jù)從應(yīng)用層傳輸過來后先在重發(fā)隊(duì)列里面復(fù)制一份用來作為重發(fā)的備份數(shù)據(jù),接下來再進(jìn)行UDP數(shù)據(jù)頭的封裝。封裝好的數(shù)據(jù)再依次傳入IP協(xié)議控制器和以太網(wǎng)控制器,以完成數(shù)據(jù)幀格式的封裝然后再發(fā)送到物理鏈路上。接收數(shù)據(jù)時(shí),數(shù)據(jù)從物理鏈路上下來后要依次經(jīng)過以太網(wǎng)控制器和IP協(xié)議控制器,在這期間完成數(shù)據(jù)包的拆封最終取出UDP格式的數(shù)據(jù)傳遞到UDP協(xié)議控制器里面。接下來,漏發(fā)檢測控制模塊用來完成對(duì)接收數(shù)據(jù)的校驗(yàn)及數(shù)據(jù)完整性的檢驗(yàn),并決定數(shù)據(jù)是否需要進(jìn)行重新發(fā)送,如需重發(fā),則向數(shù)據(jù)發(fā)送端發(fā)送一個(gè)重發(fā)請求,發(fā)送端接到該請求后再依次重新發(fā)送相應(yīng)的數(shù)據(jù)包。如不需要重發(fā),則取出數(shù)據(jù)傳遞給應(yīng)用層。其中,數(shù)據(jù)處理控制器利用狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換來控制數(shù)據(jù)傳輸模塊內(nèi)部數(shù)據(jù)的封裝、拆封、校驗(yàn)等一系列處理動(dòng)作。
圖1 UDP協(xié)議??偟脑斫Y(jié)構(gòu)
2.1 UDP協(xié)議的可靠性機(jī)制原理及UDP協(xié)議控制模塊的設(shè)計(jì)
UDP協(xié)議控制器模塊主要用來對(duì)發(fā)送數(shù)據(jù)進(jìn)行包頭的封裝和對(duì)接收數(shù)據(jù)進(jìn)行包頭的拆封,以及對(duì)接收到的數(shù)據(jù)包進(jìn)行校驗(yàn)確認(rèn)和漏發(fā)檢測等工作。為了增強(qiáng)UDP數(shù)據(jù)傳輸?shù)目煽啃裕枰獙?duì)原有的UDP協(xié)議的格式稍作修改,在UDP原有包頭的后面新增加了2字節(jié)的包序列號(hào)字段和2字節(jié)的重發(fā)包序號(hào)字段,修改后的UDP報(bào)文格式如圖2所示。
圖2 UDP報(bào)文格式
其中,包序列號(hào)用來標(biāo)記所發(fā)送的UDP數(shù)據(jù)序列,該序列號(hào)與重發(fā)隊(duì)列中的數(shù)據(jù)段序號(hào)一致,系統(tǒng)初始化時(shí)都置為0x”0001”;重發(fā)包序號(hào)在UDP發(fā)送端正常發(fā)送數(shù)據(jù)時(shí)置為零,當(dāng)接收端檢測到有漏發(fā)的UDP包或UDP校驗(yàn)出錯(cuò)而需要發(fā)送端重新發(fā)送該包數(shù)據(jù)時(shí),則該字段填入需要重發(fā)的包序列號(hào)。UDP校驗(yàn)和與UDP包序列號(hào)一起來對(duì)接收到的數(shù)據(jù)包的正確性和完整性進(jìn)行檢驗(yàn)。
檢錯(cuò)重發(fā)和漏發(fā)重發(fā)機(jī)制的具體原理流程如圖3所示。在UDP接收端有一個(gè)UDP包序號(hào)寄存器,該寄存器用來寄存最近一次成功接收到的UDP數(shù)據(jù)包的包序列號(hào),該寄存器初始化值為1。當(dāng)UDP接收端接收到UDP包后,進(jìn)行UDP校驗(yàn),校驗(yàn)采用二進(jìn)制反碼求和算法,如果校驗(yàn)和出錯(cuò),則取出該包序列號(hào),然后向發(fā)送端發(fā)送一個(gè)包含本序列號(hào)的重發(fā)請求,同時(shí)丟棄該包數(shù)據(jù)。如果校驗(yàn)和沒有錯(cuò)誤,則進(jìn)入下一環(huán)節(jié),即進(jìn)行UDP包序列完整性的檢驗(yàn)。
在完整性檢驗(yàn)環(huán)節(jié),如果該UDP包的16位包序列號(hào)的值等于包序號(hào)寄存器的值,即序列號(hào)匹配成功,則說明該UDP包與接收到的上一UDP包是連續(xù)的,可以取出該包中的應(yīng)用層數(shù)據(jù),同時(shí)包序號(hào)寄存器值自動(dòng)加1,來指向下一個(gè)想要接收的包;否則如果不相等,則將該UDP包存入接收緩存隊(duì)列中,同時(shí)遍歷緩存隊(duì)列中其他的UDP包。如果緩存隊(duì)列中有UDP包的序列號(hào)等于包序號(hào)寄存器的值,即匹配成功,則從緩存當(dāng)中移出該UDP包,提取出包中的應(yīng)用數(shù)據(jù)后丟棄該包,同時(shí)包序號(hào)寄存器的值加1;如果緩存隊(duì)列當(dāng)中沒有UDP包匹配成功,則啟動(dòng)一個(gè)定時(shí)器,在定時(shí)時(shí)刻到來之前包序號(hào)寄存器持續(xù)的與后面收到的UDP包相匹配,匹配成功則關(guān)閉定時(shí)器同時(shí)取出應(yīng)用數(shù)據(jù)并更新包序號(hào)寄存器的值,不成功則把該UDP包存入緩存隊(duì)列,然后繼續(xù)匹配下一個(gè)UDP包。如果定時(shí)時(shí)間到了,還沒有匹配成功,則向發(fā)送端發(fā)送一個(gè)包含缺省包序號(hào)的重發(fā)請求。發(fā)送端收到重發(fā)請求后從該請求中取出需要重發(fā)的包序號(hào),然后從重發(fā)隊(duì)列中找到該包對(duì)應(yīng)的數(shù)據(jù),后再從該數(shù)據(jù)處重新依次發(fā)送后面的數(shù)據(jù)。
圖3 重發(fā)機(jī)制流程
下面以數(shù)據(jù)的接收過程為例來說明數(shù)據(jù)的處理流程,其狀態(tài)流程如下頁圖4所示。接收端的數(shù)據(jù)處理及漏發(fā)檢測控制器的控制狀態(tài)可以劃分為8個(gè)狀態(tài),系統(tǒng)啟動(dòng)后先進(jìn)行復(fù)位,復(fù)位完成后狀態(tài)機(jī)處于receive_idle狀態(tài),復(fù)位時(shí)數(shù)據(jù)進(jìn)行初始化,初始化包序號(hào)寄存器的值為‘1’同時(shí)初始化校驗(yàn)緩存的值為‘0’,當(dāng)receive_start為高電平時(shí)說明數(shù)據(jù)開始進(jìn)行接收,接下來依次進(jìn)入receive_sourceport和receive_destport狀態(tài),分別接收數(shù)據(jù)的源端口號(hào)和目的端口號(hào),再接下來進(jìn)入receive_length狀態(tài),接收數(shù)據(jù)包長度,該長度包含UDP包頭和用戶數(shù)據(jù)兩部分。數(shù)據(jù)包長度接收完成后進(jìn)入receive_check狀態(tài),該狀態(tài)下完成接收到的數(shù)據(jù)的校驗(yàn)和檢驗(yàn),UDP校驗(yàn)和的具體算法為:校驗(yàn)緩存的初始字段設(shè)為0,然后把8字節(jié)的UDP包頭和12字節(jié)的UDP偽包頭分別拆分為2字節(jié)進(jìn)行32位的累加,得到32位的累積和之后再把該累加和的高16位與低16位累加取反,即得到校驗(yàn)和[3]。發(fā)送時(shí)把校驗(yàn)和添加到UDP包頭即可,接收時(shí)再重新做一遍相同的計(jì)算,如果校驗(yàn)計(jì)算結(jié)果中的各位數(shù)字全為1,則說明校驗(yàn)正確,狀態(tài)機(jī)接下來進(jìn)入receive_sequence狀態(tài),否則進(jìn)入receive_retrans狀態(tài)。狀態(tài)機(jī)處于receive_sequence狀態(tài)時(shí)接收端需要對(duì)接收到的數(shù)據(jù)是否有漏包的情況進(jìn)行檢驗(yàn),具體檢驗(yàn)過程為:狀態(tài)機(jī)跳轉(zhuǎn)到receive_sequence狀態(tài)后就馬上提取出包序號(hào)的值并與包序號(hào)寄存器里面存儲(chǔ)的值相比較,如果接收到的16位包序號(hào)的值等于包序號(hào)寄存器的值,則進(jìn)入receive_data狀態(tài)接收用戶數(shù)據(jù)同時(shí)包序號(hào)寄存器的值加1,否則如果接收到的包序號(hào)與包序號(hào)寄存器的值不一致,則暫存該UDP包到接收緩存隊(duì)列里面,同時(shí)比對(duì)緩存隊(duì)列中其他的UDP包的序號(hào)是否與包序號(hào)寄存器當(dāng)中的值相等。緩存中如有UDP包與包序號(hào)寄存器的值匹配成功,則從緩存當(dāng)中移出該包,接著狀態(tài)機(jī)進(jìn)入receive_data狀態(tài)接收該包的應(yīng)用數(shù)據(jù),并同時(shí)更新包序列寄存器的值。如果沒匹配成功,則啟動(dòng)一個(gè)定時(shí)器,同時(shí)狀態(tài)跳轉(zhuǎn)到receive_idle狀態(tài),開始接收下一個(gè)UDP包。在該定時(shí)器的時(shí)間段內(nèi),如果后續(xù)接收到的UDP包的序列號(hào)與包序號(hào)寄存器里的值一致,則定時(shí)器清零,與此同時(shí)狀態(tài)機(jī)進(jìn)入receive_data狀態(tài)接收數(shù)據(jù),并且更新包序號(hào)寄存器的值;不一致則把UDP包存入緩存隊(duì)列中,然后狀態(tài)機(jī)跳轉(zhuǎn)到receive_idle狀態(tài),繼續(xù)接收下一個(gè)包,并繼續(xù)比對(duì)下一個(gè)UDP包的序號(hào)。如果定時(shí)時(shí)間到了,還沒接收到所要的數(shù)據(jù)包,則進(jìn)入receive_retrans狀態(tài)。在receive_retrans狀態(tài),需要把校驗(yàn)出錯(cuò)的包序號(hào)或漏發(fā)的包序號(hào)的值發(fā)送給本地的數(shù)據(jù)發(fā)送端,讓發(fā)送端重新發(fā)送相應(yīng)的數(shù)據(jù)包[4]。待receive_data狀態(tài)結(jié)束后,即一個(gè)UDP包的應(yīng)用數(shù)據(jù)已經(jīng)接收完成,則進(jìn)入receive_idle狀態(tài)開始準(zhǔn)備下一個(gè)UDP包的接收。
2.2 IP協(xié)議控制器的設(shè)計(jì)
IP協(xié)議控制器主要用來完成IP報(bào)頭信息的添加以及IP報(bào)頭的拆封解析等工作。其中報(bào)頭的封裝和解封都由狀態(tài)機(jī)來控制執(zhí)行,通過字節(jié)計(jì)數(shù)器的計(jì)數(shù)值作為判定條件,從而實(shí)現(xiàn)狀態(tài)的跳轉(zhuǎn)來執(zhí)行各狀態(tài)的相應(yīng)的操作。以數(shù)據(jù)發(fā)送端為例,其狀態(tài)機(jī)的狀態(tài)跳轉(zhuǎn)過程如圖5所示。
圖4 UDP接收端狀態(tài)流程圖
圖5 IP協(xié)議控制器發(fā)送端狀態(tài)流程
trans_idle為等待狀態(tài);trans_iphead狀態(tài)時(shí)設(shè)置IP的版本號(hào)、首部長度及服務(wù)類型;trans_length狀態(tài)時(shí)統(tǒng)計(jì)數(shù)據(jù)總長度,并把結(jié)果存放在IP頭里面;trans_flag狀態(tài)時(shí)在IP頭相應(yīng)位置填入IP的標(biāo)識(shí)、標(biāo)志、片偏移等數(shù)值;trans_ttl狀態(tài)時(shí)設(shè)置8位生存時(shí)間;trans_protocol狀態(tài)設(shè)置傳輸層的協(xié)議類型,此處設(shè)置為0X11,表示UDP協(xié)議;trans_check狀態(tài)時(shí)設(shè)置16位的首部校驗(yàn)和,其計(jì)算方法與UDP協(xié)議里面的校驗(yàn)方法類似,都采用二進(jìn)制反碼累加求和的方法;trans_sourceIPaddress狀態(tài)時(shí)添加源IP地址;trans_desIPaddress狀態(tài)時(shí)添加目的IP地址;trans_data狀態(tài)時(shí)開始填充上層數(shù)據(jù)。
2.3 以太網(wǎng)控制器的設(shè)計(jì)
以太網(wǎng)控制器主要用來控制數(shù)據(jù)在信道上的傳輸以及把網(wǎng)絡(luò)層傳輸過來的數(shù)據(jù)進(jìn)行幀格式的封裝,并進(jìn)行半字節(jié)數(shù)據(jù)的拆分,從而與物理層芯片接口相適配以便于在物理通道上進(jìn)行傳輸[5]。同樣地當(dāng)接收到來自物理層芯片的數(shù)據(jù)時(shí),它需要把半字節(jié)數(shù)據(jù)重新合并成一個(gè)字節(jié)并進(jìn)行幀頭拆封以及數(shù)據(jù)校驗(yàn)等工作,校驗(yàn)無誤后再把鏈路層以上的數(shù)據(jù)傳遞給上層去做進(jìn)一步的處理。在以太網(wǎng)控制器里面還有一個(gè)ARP協(xié)議,它要實(shí)現(xiàn)IP地址與物理地址的映射,當(dāng)本地緩存中所存儲(chǔ)的映射鍵值對(duì)當(dāng)中沒有所要的IP地址所對(duì)應(yīng)的物理地址時(shí),它需要發(fā)送一個(gè)包含目的IP地址的ARP請求,ARP應(yīng)答當(dāng)中包含目的IP地址所對(duì)應(yīng)的物理地址,收到ARP應(yīng)答后就可以向所要發(fā)送的以太網(wǎng)幀頭中添加對(duì)應(yīng)的物理地址了。在本設(shè)計(jì)中,以太網(wǎng)控制器接收端的工作流程如圖6所示。
圖6 以太網(wǎng)控制器接收端的狀態(tài)流程
本設(shè)計(jì)的驗(yàn)證分為仿真驗(yàn)證和上板聯(lián)網(wǎng)驗(yàn)證。設(shè)計(jì)階段采用Xilinx公司的ISE開發(fā)軟件進(jìn)行編碼設(shè)計(jì),設(shè)計(jì)完成后采用modelsim仿真工具進(jìn)行仿真,仿真結(jié)果表明該協(xié)議棧的設(shè)計(jì)程序能正確完成數(shù)據(jù)的發(fā)送和接收等工作,圖7是該協(xié)議棧發(fā)送端輸出的仿真數(shù)據(jù)。上板聯(lián)網(wǎng)驗(yàn)證采用Xilinx公司的Virtex-5 FPGA開發(fā)板,兩塊V5板子通過網(wǎng)線同時(shí)連接到校內(nèi)網(wǎng)當(dāng)中,通過實(shí)現(xiàn)兩個(gè)板子間的相互通信,來驗(yàn)證復(fù)雜網(wǎng)絡(luò)環(huán)境下的該可靠UDP協(xié)議棧的可靠性。上板聯(lián)網(wǎng)驗(yàn)證如圖8所示。程序在板子上面加載完成后,其中的一塊板子A通過網(wǎng)線經(jīng)由校內(nèi)網(wǎng)向另一塊板子B所在的IP地址發(fā)送數(shù)據(jù),同時(shí)在PC機(jī)上面通過wireshark抓包工具來抓取板子A所發(fā)送的數(shù)據(jù)包,抓包結(jié)果如圖9所示。為了測試FPGA接收端接收到的數(shù)據(jù),采用chipscope工具來抓取板子B中的FPGA芯片內(nèi)部接收到的網(wǎng)絡(luò)數(shù)據(jù),圖10為用chipscope抓取到的接收端的數(shù)據(jù)。抓包結(jié)果表明B能正確地接收到A所發(fā)送的數(shù)據(jù),且沒有出現(xiàn)丟包的情況,說明該協(xié)議棧能在較復(fù)雜的網(wǎng)絡(luò)環(huán)境下正確完整地接收數(shù)據(jù),達(dá)到了設(shè)計(jì)要求。
圖7 發(fā)送端modelsim仿真數(shù)據(jù)
圖8 上板聯(lián)網(wǎng)驗(yàn)證
圖9 發(fā)送端wireshark抓包數(shù)據(jù)
圖10 接收端chipscope抓包數(shù)據(jù)
傳統(tǒng)的UDP協(xié)議不能保證數(shù)據(jù)在傳輸過程當(dāng)中的可靠性,為此本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)可靠的硬件UDP_IP協(xié)議,同時(shí)還設(shè)計(jì)了一個(gè)以太網(wǎng)控制器,它與UDP_IP協(xié)議一起構(gòu)成一個(gè)完整的通信鏈路,實(shí)驗(yàn)驗(yàn)證結(jié)果表明該硬件協(xié)議能正確完整地完成網(wǎng)絡(luò)數(shù)據(jù)的接收和發(fā)送工作,達(dá)到了設(shè)計(jì)的要求。
[1]徐俊.基于FPGA的嵌入式TCP/IP協(xié)議棧的實(shí)現(xiàn)[D].上海:華東師范大學(xué),2008.
[2]王玨,何秋燕,王露凱.基于UDP改進(jìn)的可靠傳輸協(xié)議設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2015,11(3):71-73.
[3]ZHANG J F,ZHAN P F,ZHANG G.Ethernet controller and serial interface conversion technology based on FPGA[J].Applied Mechanics and Materials, 2013 (423):2671-2674.
[4]靳海力.具有補(bǔ)發(fā)機(jī)制的增強(qiáng)型可靠UDP的實(shí)現(xiàn)[J].小型微型計(jì)算機(jī)系統(tǒng),2010,31(5):904-907.
[5]程鵬,張剛.基于FPGA的10M/100M以太網(wǎng)控制器的設(shè)計(jì)[J].太原理工大學(xué)學(xué)報(bào),2008,39(5):27-29.
FPGA Implementation of a Reliable UDP Protocol Stack
LIU Yuan,ZHANG Gang
(School of Information Engineering,Taiyuan University of Technology,Taiyuan 030024,China)
The paper design is based on Xilinx’s development board family of Virtex-5,and it uses hardware description language VHDL as the design language as well as using the concept of modular design,implemented a reliable UDP_IP network communication protocol stack with the function of receipt confirmation and retransmit the missed data which reference TCP_IP stack mechanism.At the same time,an Ethernet controller is designed and implemented,together with UDP_IP protocol,it forms a complete network communication link protocol.After download to the board,it has identified that the communication protocol stack can receive and transmit network data correctly,efficiently and stably.
reliable UDP,communication protocol,F(xiàn)PGA,VHDL
TP302.1
A
10.3969/j.issn.1002-0640.2017.07.030
1002-0640(2017)07-0139-05
2016-05-12
2016-06-29
劉 源(1989- ),男,河南南陽人,碩士研究生。研究方向:Soc集成電路設(shè)計(jì)。