基于網(wǎng)絡(luò)編碼的多信源組播通信系統(tǒng),包括源代碼,原理圖等(二)
的填充長度:因?yàn)椴煌瑪?shù)據(jù)源的數(shù)據(jù)包的長度可能不一樣,為了便于編碼計(jì)算,將它們前位補(bǔ)0使得長度一致。由于一個(gè)典型的以太網(wǎng)數(shù)據(jù)包的長度在500~1500字節(jié)之間,所以填充長度不超過1000字節(jié)。另外,我們還要考慮MAC層的最大傳送單元(MTU)的限制,即編碼后的MAC幀的長度不能超過1518字節(jié)。由此可以計(jì)算出,被編碼的數(shù)據(jù)包的最大長度是1499字節(jié)
本文引用地址:http://m.butianyuan.cn/article/201612/326828.htm⑥編碼系數(shù):即隨機(jī)選擇的編碼矢量的系數(shù),是在一個(gè)GF256的有限域中隨機(jī)選擇。
?、叽木幪?hào):即被編碼的數(shù)據(jù)包的代的編號(hào),是按照順序產(chǎn)生的編號(hào),目的是方便解碼。
?、喟男旁刺?hào):4位,對進(jìn)入編碼路由器的數(shù)據(jù)包的信源進(jìn)行編號(hào),其目的是為了方便解碼,在我們目前的體系中,最多允許8個(gè)數(shù)據(jù)包同時(shí)被編碼。注意:當(dāng)信源數(shù)少于8個(gè)時(shí),例如有3個(gè),則分別將對應(yīng)的數(shù)據(jù)包的信源號(hào)分別填為0000,0001,0010,其余的都填寫為1111。
2.4.5 轉(zhuǎn)發(fā)(組播)路由器R工作流程
在實(shí)際的應(yīng)用中,R應(yīng)該是具有組播功能的路由器,即可以運(yùn)行網(wǎng)際組播管理協(xié)議IGMP和多播路由選擇協(xié)議DVMRP等,從而它可以知道網(wǎng)絡(luò)的局部的拓?fù)浜蜐M足組播成員的要求。為了初期容易實(shí)現(xiàn),我們將其功能簡化為轉(zhuǎn)發(fā)功能(即廣播功能)。
2.4.6數(shù)據(jù)包的解碼
(1) 高速緩存和CAM的使用
數(shù)據(jù)包的解碼由DC解碼路由器完成。每個(gè)解碼路由器DC有三個(gè)輸入通道,分別連接到R0,R1,R2其解碼的策略是:我們先在DC中開辟三塊不同的高速緩存(DRAM)和與之分別對應(yīng)的3個(gè)CAM,它們分別對應(yīng)于R0、R1、R2,緩存和CAM的大小為代的編號(hào)的大小,即 =1024,在這三個(gè)緩存中存放按照順序接收到的數(shù)據(jù)。根據(jù)前面的數(shù)據(jù)處理過程,顯然,對應(yīng)于每個(gè)緩存中的數(shù)據(jù),雖然有的是真正編碼后的數(shù)據(jù)包,有的只是在IP數(shù)據(jù)包前增加了一個(gè)包頭,但我們都可以認(rèn)為是NCP數(shù)據(jù)包。在將數(shù)據(jù)存入高速緩存的同時(shí),提取NCP數(shù)據(jù)包頭中的信源號(hào)和代的編號(hào),將它們存入到內(nèi)容可尋址存儲(chǔ)器CAM(content addressable memory),則CAM的輸出即為對應(yīng)數(shù)據(jù)在高速緩存的地址。
使用CAM的原因是:由于經(jīng)過編碼,以及網(wǎng)絡(luò)環(huán)境非理想,解碼路由器收到的encoded packet可能是亂序的。因此考慮使用CAM做檢索鏈接,以便快速尋址當(dāng)前解碼所需要的packet。 (2) 解碼順序
根據(jù)實(shí)際情況的考慮,目前有兩種解碼的順序,一種情況是按照信源號(hào)和代的編號(hào)的順序進(jìn)行解碼,第二種情況是按照緩存及其緩存地址的順序來解碼。
在已知網(wǎng)絡(luò)拓?fù)涞那闆r下,我們按照信源號(hào)和代的編號(hào)的順序來進(jìn)行解碼,即對于信源采用輪詢策略,對于內(nèi)部代的編號(hào)采用小數(shù)優(yōu)先策略。例如,在我們的拓?fù)鋱D中,解碼順序是:S(1,1),S(2,1),S(3,1)→S(1,2),S(2,2),S(3,2)→……S(1,n),S(2,n),S(3,n)……。
在未知網(wǎng)絡(luò)拓?fù)涞那闆r下,我們按照高速緩存的地址順序來進(jìn)行解碼,即先對高速緩存采用輪詢策略,對每個(gè)緩存中,采用地址由小到大的順序進(jìn)行解碼,如圖2.4-7所示,進(jìn)行解碼的順序是PZ1
→PX1→ PY1→ PZ2→ PX2→PY2→PZ3……
高速緩存1 高速緩存2 高速緩存3
地址 數(shù)據(jù)包 地址 數(shù)據(jù)包 地址 數(shù)據(jù)
01 PZ1 01 PX1 01 PY1
02 PZ2 02 PX2 02 PY2
03 PZ3 03 PX3 03 PY3
04 …… 04 …… 04 ……
……
圖2.4-7 按照高速緩存的地址順序來進(jìn)行解碼
上面的兩種解碼方式各有優(yōu)點(diǎn):在一般情況下,按照信源號(hào)和代的編號(hào)的順序來進(jìn)行解碼可獲得較高的解碼速率,但在網(wǎng)絡(luò)環(huán)境惡化的情況下,其丟包率(無法解碼的概率)會(huì)比第2中方案高一些。由于在我們已有的網(wǎng)絡(luò)環(huán)境一般較好,為了體現(xiàn)網(wǎng)絡(luò)編碼的傳輸?shù)母咝?,我們按照?種順序進(jìn)行解碼。
(3) 解碼流程
為了避免高速緩存的寫數(shù)據(jù)溢出,我們將設(shè)置二級(jí)緩存,二級(jí)緩存也有3個(gè),可用SRAM構(gòu)造,將SRAM分為3塊地址上獨(dú)立的區(qū)域,每個(gè)SRAM 大小為256×1800bytes,分別對應(yīng)不同的信源,我們將解碼后的數(shù)據(jù),根據(jù)其代的編號(hào),分別暫存在對應(yīng)SRAM的對應(yīng)地址上。例如,將S(1,1)存儲(chǔ)在SRAM1的第1個(gè)地址空間,S(2,4)則存儲(chǔ)在SRAM2的第4個(gè)地址空間。每個(gè)RAM各有1個(gè)讀、寫指針,可以同時(shí)按順序讀寫數(shù)據(jù),按照地址由小到大的順序讀出的數(shù)據(jù)被發(fā)送到輸出隊(duì)列中。
如圖2.4-8所示為數(shù)據(jù)包的解碼過程,每個(gè)告訴緩存各有1個(gè)讀、寫指針,在解碼過程中,讀取緩存是按照解碼的順序進(jìn)行的,而在寫緩存是按地址順序?qū)懙摹?/p>
圖2.4-8:數(shù)據(jù)包解碼流程
(4) 解碼策略與方法
我們按照信源號(hào)和代的編號(hào)的順序來進(jìn)行解碼,即對于信源采用輪詢策略,對于內(nèi)部代的編號(hào)采用小數(shù)優(yōu)先策略。例如,在我們的拓?fù)鋱D中,解碼順序是:S(1,1),S(2,1),S(3,1)→S(1,2),S(2,2),S(3,2)→……S(1,n), S(2,n), S(3,n)……
假定我們按照上述順序準(zhǔn)備解碼S(1,x),解碼程序如圖9:
圖2.4-9 數(shù)據(jù)包S(1,x)的解碼過程
無法求解一個(gè)數(shù)據(jù)包的原因可能是:該數(shù)據(jù)包由于延遲或者丟失,在CAM中搜尋不到,再有就是線性相關(guān),無法解出來。在我們的系統(tǒng)中,由于其拓?fù)涞奶厥庑裕瑳]有線性相關(guān)的情況,因此無法解碼的情況只發(fā)生在解碼因子丟失的情況下。
解碼子任務(wù):解碼子任務(wù)的輸入是包頭信息,由調(diào)用它的程序給出,輸出有兩個(gè)變量:解碼后的數(shù)據(jù)包和解碼標(biāo)志,解碼標(biāo)志告訴調(diào)用它的程序是否可以解碼,我們假定現(xiàn)在要對S(i,j)解碼,子任務(wù)流程如圖2.4-10:
圖2.4-10:解碼子任務(wù)流程 (5) 解碼后數(shù)據(jù)包暫存SRAM的讀寫策略
我們將解碼后的數(shù)據(jù)包暫存在SRAM中等待發(fā)送,每個(gè)信源對應(yīng)一個(gè)SRAM區(qū)域,同一個(gè)信源的解碼后的人數(shù)據(jù)包存儲(chǔ)在同一個(gè)RAM中,存儲(chǔ)地址為該包的代的編號(hào)。每個(gè)RAM各有一個(gè)讀指針,寫數(shù)據(jù)按照RAM的地址大小順序?qū)懭?。讀數(shù)據(jù)時(shí)按照信源編號(hào)和代的大小讀取。由于發(fā)送速率一般會(huì)高于解碼速率,因此RAM不用很大,暫定為256×1800。
每讀取一個(gè)數(shù)據(jù)后,指針加1,若讀取某個(gè)SRAM時(shí)無數(shù)據(jù)(可能是延遲或丟失造成),則不用等待,直接進(jìn)行下一個(gè)SRAM的讀取,3次輪詢之后還沒有到達(dá),則強(qiáng)行加讀指針加1,讀取下一個(gè)數(shù)據(jù)包。如圖2.4-11所示為SRAM的讀寫操作。
圖2.4-11 二級(jí)緩存SRAM的讀寫操作
(6)舉例說明
為了更清楚地顯示整個(gè)解碼的操作過程,我們以DC3為例,圖2.4-12顯示的是DC3的3個(gè)高速緩存和CAM,解碼過程如下
圖2.4-12 數(shù)據(jù)包S(1,x)解碼過程
數(shù)據(jù)包S(1,x)解碼過程如下:
先將S(1,x)的包頭3個(gè)CAM中搜索,在CAM1中得到索引為00,我們利用該索引得到S(1,x)在高速緩存1的地址為00,從高速緩存1讀取數(shù)據(jù),得到a S(1,x)+b S(2,y),為了求解S(1,x)我們調(diào)用解碼子任務(wù)先求解S(2,y),為了防止出現(xiàn)死循環(huán),解碼子任務(wù)只在CAM2和CAM3中搜尋S(2,y),在CAM2中得到地址為02,于是讀取高速緩存2的02地址數(shù)據(jù),得到eS(2,y)+f S(3,z),于是再調(diào)用子任務(wù)求解S(3,z),在CAM3中搜索S(3,z)后解出S(3,z), 于是可以解出S(2,y),最后再解出S(1,x),同時(shí),分別將S(3,z)、 S(2,y) 、S(1,x)存入SRAM3,SRAM2,SRAM1相應(yīng)的地址中。
2.5 系統(tǒng)軟硬件接口及相關(guān)軟件功能
在系統(tǒng)中,并非只有硬件邏輯在不同的模塊之間處理數(shù)據(jù)包,而且還有相應(yīng)的軟件和控制程序。如圖2.5-1所示,是數(shù)據(jù)包在系統(tǒng)中的通道與處理流程。數(shù)據(jù)在系統(tǒng)中的通道分為data bus和register bus,data bus主要進(jìn)行數(shù)據(jù)的硬件處理,register bus則是軟硬件的接口。在數(shù)據(jù)傳輸?shù)拿總€(gè)階段對軟件應(yīng)該是可控的、透明的,這些軟件在更高層次上執(zhí)行更復(fù)雜的算法和協(xié)議,或者處理一些異常情況,同時(shí),對于系統(tǒng)開發(fā)人員,也應(yīng)該是可控的,因?yàn)殚_發(fā)人員往往需要配置和調(diào)試硬件。使用通用的寄存器接口就可以使數(shù)據(jù)處理對軟件透明化,這是靠映射內(nèi)部的硬件寄存器來完成的,即所謂的存儲(chǔ)映射技術(shù)。對于軟件來講,映射寄存器相當(dāng)于一個(gè)I/O接口,它可以由軟件訪問和修改。
圖2.5-1:系統(tǒng)中的register bus 和data bus
Register bus中每個(gè)模塊的register連接在一起,組成一個(gè)信息環(huán)路。這些register塊中存儲(chǔ)了數(shù)據(jù)處理在每個(gè)
評(píng)論