<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > 基于網(wǎng)絡(luò )編碼的多信源組播通信系統,包括源代碼,原理圖等 (三)

基于網(wǎng)絡(luò )編碼的多信源組播通信系統,包括源代碼,原理圖等 (三)

作者: 時(shí)間:2018-08-31 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/201808/388146.htm

③decode_control_sm

該模塊的功能是按照輪詢(xún)策略,控制decoder解碼儲存在DRAM中的數據包。通過(guò)查詢(xún)CAM中的數據包的存儲地址,將查詢(xún)到的地址輸出給DRAM讀寫(xiě)控制模塊,從而找到解碼所需要的數據,同時(shí)將要查詢(xún)的數據包的信源號和代的編號發(fā)送給解碼模塊。若不能查找到解碼因子,則將信號Pkt_not_find置為有效電平,通知decoder無(wú)法解碼,同時(shí)將狀態(tài)轉到解碼下一個(gè)數據包的狀態(tài)上。在開(kāi)始查找CAM時(shí),要等待儲存一定數量的數據包,在我們的系統里面,暫定為32。

狀態(tài)機處理控制流程如圖3.4-13:

圖3.4-13:decode_control_sm狀態(tài)機及數據處理流程

  6、decoder

  decoder是整個(gè)解碼路由器的核心之一,它的主要功能是接收來(lái)自DRAM的編碼后的IP數據包,在decode_control_panel模塊的控制下對數據包進(jìn)行解碼,它包括多個(gè)小模塊,其整體圖和內部結構圖如3.4-14和3.4-15所示:

  

  圖3.4-14 decoder整體結構圖

  

  圖3.4-15:decoder內部結構圖

 ?、?header_parser

  分析接收到的數據包,如果已經(jīng)被編碼,根據包頭提取信源號、代號、長(cháng)度和系數給運算控制模塊,如果沒(méi)有被編碼,則查詢(xún)解碼標志寄存器,如果已經(jīng)解碼并儲存在二級緩存中,則該數據包只是一個(gè)解碼因子,把數據發(fā)送到fwd_sel,若沒(méi)有解碼,則同時(shí)發(fā)送到capsulation和forward sel。如果數據是編碼后的數據包,則將數據包去掉包頭后將數據發(fā)送給forward sel模塊。當發(fā)送到最后的64位數據時(shí),eop信號有效,指明是數據包的最后有效字節。

  下圖所示為輸入輸出接口圖3.4-16:

  

  圖3.4-16:header_parser模塊圖

其輸入輸出端口列表如下:

信號名稱(chēng)

位寬bits

I/O

描述

in_rdy

1

O

數據輸出輸入允許信號

out_data

64

I

輸入的數據包的data_bus

out_ctrl

8

I

輸入數據包的ctrl_bus

data_vld

1

I

輸入數據有效

rd_dcod_reg_req_0

1

O

讀取解碼標志位請求

rd_dcod_src_gen_0

12

O

要讀取的數據包的信源號和代編號

req_ack_vld_0

1

I

輸入有效

alredy_decod_0

1

I

解碼標志(“1”代表已經(jīng)解碼,“0”代表未解碼)

Uncod_data

64

O

未編碼數據包的數據總線(xiàn)

Uncod_ctrl

8

O

未編碼數據包的控制總線(xiàn)

Wr_vld

1

O

寫(xiě)capsulation數據有效

Out_rdy

1

I

輸出capsulation允許信號

fwd_rdy

1

I

輸出fwd_sel允許信號

out_vld

1

O

輸出fwd_sel有效

pay_load

64

O

輸出fwd_sel數據(不含包頭)

eop

4

O

最后指示一個(gè)有效字節的指示

uncod

1

O

指明輸出的數據包是否編碼

src_gen_num

12

O

Decoder接收到的數據包的信源號和代的編號

len_0

16

O

被編碼的第一個(gè)數據包的有效載荷的長(cháng)度

len_1

16

O

被編碼的第二個(gè)數據包的有效載荷的長(cháng)度

coef_0

8

O

被編碼的第一個(gè)數據包的編碼系數

coef_1

8

O

被編碼的第二個(gè)數據包的編碼系數

hp_info_vld

1

O

輸出信息有效

encod_pkt_trans_fi

1

O

編碼數據包傳輸完畢標志

oc_info_vld

1

I

解碼控制輸入信息有效

uncod_pkt_need

1

I

未編碼的數據包是/否解碼因子(1=是,0=否)

圖3.4-17所示為狀態(tài)機處理流程:

圖3.4-17:header_parser狀態(tài)機處理流程

② forwd_sel

該模塊功能主要是轉發(fā)數據包:接收來(lái)自header_parser的數據包,若uncod=0,則表明數據包是編碼后數據包,將已經(jīng)編碼后的數據包的載荷轉換為72bits后,將數據發(fā)送到RAM讀寫(xiě)控制器,否則發(fā)送到decod_operation。當有反饋輸入請求時(shí),若輸出到decod_operation 的數據線(xiàn)空閑時(shí),將反饋數據發(fā)送到decod_operation。

本模塊的端口列表如下:

信號名稱(chēng)

位寬bits

I/O

信號描述

fwd_rdy

1

O

輸入fwd_sel允許信號

out_vld

1

I

輸入fwd_sel有效

pay_load

64

I

輸入fwd_sel數據總線(xiàn)(不含包頭)

eop

4

I

最后指示一個(gè)有效字節的指示

uncod

1

I

指明輸出的數據包是否編碼

wr_req

1

O

寫(xiě)RAM請求

encod_data

72

O

寫(xiě)RAM的數據總線(xiàn)

ram_data_vld

1

O

數據有效

encod_data_eop

4

O

數據包結束標志,指明最后一個(gè)有效字節

wr_ack

1

I

寫(xiě)RAM響應

uncod_data_vld

1

O

輸出至dcod_operation的數據有效

uncod_data_factor

64

O

輸出至dcod_operation的數據總線(xiàn)

uncod_data_eop

4

O

數據包結束標志,指明最后一個(gè)有效字節

dcod_rdy

1

I

輸出至dcod_operation允許信號

fd_back_ack

1

O

接受反饋?lái)憫?/p>

fd_back_vld

1

I

反饋數據有效標志

fd_back_req

1

I

反饋請求

fd_back_data

64

I

反饋數據總線(xiàn)

fd_back_data_eop

4

I

反饋數據結束標志,指明最后一個(gè)有效字節

③ RAM讀寫(xiě)控制器

在寫(xiě)數據時(shí),先從運算控制模塊中得出要儲存的RAM號,接著(zhù)RAM讀寫(xiě)控制器將從收到forward sel 模塊收到的數據存到片內RAM里面去。在讀數據時(shí),根據dcod_operation模塊提供的ram號,從相應的ram中讀取數據,由于使用的是雙端口ram,因此讀寫(xiě)可以同時(shí)進(jìn)行。模塊信號列表如下:

信號名稱(chēng)

位寬bits

I/O

信號描述

wr_req

1

I

寫(xiě)RAM請求

encod_data

72

I

寫(xiě)RAM的數據總線(xiàn)

ram_data_vld

1

I

數據有效

encod_data_eop

4

I

數據包結束標志,指明最后一個(gè)有效字節

wr_ack

1

O

寫(xiě)RAM響應

wr_ram_num

2

I

要寫(xiě)入的RAM號

info_vld

1

I

數據有效標志

req_ram_num

1

O

讀RAM號請求

rd_ram_num

2

I

需要讀取數據的RAM號

rd_req

1

I

讀RAM請求

ram_data_eop

4

O

數據包結束標志,指明最后一個(gè)有效字節

ram_data

72

O

讀RAM的數據總線(xiàn)

ram_vld

1

O

讀RAM數據有效

RAM讀寫(xiě)時(shí)序圖如圖3.4-18:

圖3.4-18:RAM讀寫(xiě)時(shí)序

每個(gè)RAM由雙端口block RAM組成,位寬為72位,深度為180,因此讀寫(xiě)的地址位寬均為8位。由于RAM的讀寫(xiě)控制時(shí)序是固定的,所以在此不再贅述。

④ operation_control

運算控制(operation_control)是decoder模塊的控制核心,它和decode_control_panel配合,完成對編碼數據包的解碼。

輸入輸出信號列表:

信號名稱(chēng)

位寬bits

I/O

信號描述

Pkt_vld

1

I

要解碼的數據包輸出有效標志

Pkt_decoding

12

I

正在解碼的數據包的信源號、代編號

Decod_com

1

O

數據包解碼完成標志

has_other_factor

1

I

有另外一個(gè)解碼因子

Pkt_not_find

1

I

所需要解碼數據包未找到

pkt_need_src_gen

12

O

解碼需要的數據包

need_pkt_vld

1

O

所需數據包有效

src_gen_num

12

I

Decoder接收到的數據包的信源號和代的編號

len_0

16

I

被編碼的第一個(gè)數據包的有效載荷的長(cháng)度

len_1

16

I

被編碼的第二個(gè)數據包的有效載荷的長(cháng)度

coef_0

8

I

被編碼的第一個(gè)數據包的編碼系數

coef_1

8

I

被編碼的第二個(gè)數據包的編碼系數

hp_info_vld

1

I

輸入信息有效

encod_pkt_trans_fi

1

I

編碼數據包傳輸完畢標志

oc_info_vld

1

O

解碼控制輸出信息有效

uncod_pkt_need

1

O

未編碼的數據包是/否解碼因子(1=是,0=否)

wr_ram_num

2

O

要寫(xiě)入的RAM號

info_vld

1

O

數據有效標志

req_ram_num

1

I

讀RAM號請求

rd_info_req

1

I

讀取解碼信息請求

dcod_info_vld

1

O

解碼信息有效

ram_num

2

O

解碼數據包的所存儲的RAM號

coef_mut

8

O

乘法系數

coef_div

8

O

除法系數

cap_info_req

1

I

封裝信息請求

dcod_comp

1

I

解碼封裝完成

cap_info_vld

1

O

封裝信息有效

need_feed_back

1

O

需要反饋

pkt_len

16

O

數據包長(cháng)度

src_num

4

O

數據包的信源號

gen_num

8

O

數據報的代編號

Operation_control模塊的主要功能是:接收header_parser發(fā)送過(guò)來(lái)的數據,通過(guò)計算和比較后與decode control panel,告訴decode control panel解碼所需要的數據包和解碼完成標志;給RAM讀寫(xiě)給出RAM號(即存儲在哪個(gè)RAM中);給decode operation模塊提供解碼所需要的系數和RAM號;給capsulation模塊提供源IP和是否需要反饋數據的命令,其控制狀態(tài)如圖3.4-19下:

圖3.4-19:Operation_control狀態(tài)機處理流程

⑤ decode operation

decode operation是解碼運算模塊,它將來(lái)自fwd_sel模塊的未編碼的數據和來(lái)自RAM的編碼數據完成減法和除法運算,還原被編碼的數據。解碼后將數據總線(xiàn)的位寬恢復為64bits。解碼運算模塊的端口列表如下:

信號名稱(chēng)

位寬bits

I/O

信號描述

dcod_payload

64

O

解碼后的數據包的有效載荷

end_payload

4

O

數據包結束標志,指明最后一個(gè)有效字節

payload_vld

1

O

輸出數據有效

wr_rdy

1

I

輸出數據允許信號

uncod_data_vld

1

I

輸入至dcod_operation的數據有效

uncod_data_factor

64

I

輸入至dcod_operation的數據總線(xiàn)

uncod_data_eop

4

I

數據包結束標志,指明最后一個(gè)有效字節

dcod_rdy

1

O

輸入至dcod_operation允許信號

rd_ram_num

2

O

需要讀取數據的RAM號

rd_req

1

O

讀RAM請求

ram_data_eop

4

I

數據包結束標志,指明最后一個(gè)有效字節

ram_data

72

I

讀RAM的數據總線(xiàn)

ram_vld

1

I

讀RAM數據有效

rd_info_req

1

O

讀取解碼信息請求

dcod_info_vld

1

I

解碼信息有效

ram_num

2

I

解碼數據包的所存儲的RAM號

coef_mut

8

I

乘法系數

coef_div

8

I

除法系數

為了快速完成解碼運算,我們在此采取并行除法的方法使之能快速解碼,解碼運算的算法圖如圖3.4-20:

圖3.4-20 decoder_operation內部的并行除法

⑥ capsulation

Capsulation是解碼運算的最后一個(gè)模塊,其主要功能是封裝解碼后的數據包。其主要任務(wù)是:(1)接收來(lái)自decode operation和header_parser的數據;(2)將來(lái)自header_parser的未編碼的數據包去掉NCP包頭;(3)計算新的包頭校驗和,更新TTL;(4)置位解碼標志寄存器;(5)將來(lái)自decode operation模塊的數據,先向運算控制模塊詢(xún)問(wèn)是否要反饋,若需要,則將數據反饋至forward_sel模塊;(6)恢復IP數據包頭;(7)將IP包頭和有效載荷封裝好,并恢復ctrl_bus和module header,將其一起同步發(fā)送出去。

端口信號列表如下:

信號名稱(chēng)

位寬bits

I/O

信號描述

decoder_in_rdy

1

I

輸出至SRAM允許信號

decoder_in_wr

1

O

輸出有效

decoder_in_data

64

O

輸出至SRAM數據總線(xiàn)

decoder_in_ctrl

8

O

輸出至SRAM控制總線(xiàn)

set_req

1

O

置位請求

set_src_gen

12

O

需要置位的數據包(表示已經(jīng)解碼完畢)

set_info_vld

1

O

置位信息有效

set_ack

1

I

置位請求響應

cap_info_req

1

O

封裝信息請求

dcod_comp

1

O

解碼封裝完成

cap_info_vld

1

I

封裝信息有效

need_feed_back

1

I

需要反饋

pkt_len

16

I

數據包長(cháng)度

src_num

4

I

數據包的信源號

gen_num

8

I

數據報的代編號

dcod_payload

64

I

解碼后的數據包的有效載荷

end_payload

4

I

數據包結束標志,指明最后一個(gè)有效字節

payload_vld

1

I

輸入數據有效

wr_rdy

1

O

輸入數據允許信號

fd_back_ack

1

I

接受反饋?lái)憫?/p>

fd_back_vld

1

O

反饋數據有效標志

fd_back_req

1

O

反饋請求

fd_back_data

64

O

反饋數據總線(xiàn)

fd_back_data_eop

4

O

反饋數據結束標志,指明最后一個(gè)有效字節

Uncod_data

64

I

未編碼數據包的數據總線(xiàn)

Uncod_ctrl

8

I

未編碼數據包的控制總線(xiàn)

Wr_vld

1

I

寫(xiě)capsulation數據有效

Out_rdy

1

O

輸入數據包允許信號

封裝過(guò)程中的狀態(tài)轉換圖如圖3.4-21:

圖3.4-21capsulation封裝包頭流程圖

7、SRAM讀寫(xiě)控制器

SRAM讀寫(xiě)控制的作用是:①將capsulation模塊來(lái)的數據寫(xiě)入SRAM中,寫(xiě)入時(shí)按照代的大小和信源號寫(xiě)入block中。SRAM按照地址分為3個(gè)區域,每個(gè)區域存儲對應由一個(gè)信源。每個(gè)區域分為256個(gè)block,每個(gè)block深度是400,寬度為36bits,可以存儲1800字節的數據(即至少可容納一個(gè)正常大小的IP數據包)。②讀取數據時(shí)按照block逐個(gè)讀取,讀取后的數據直接發(fā)送至output_arbiter。在每發(fā)送完一個(gè)數據包后,對解碼標志寄存器復位。

SRAM讀寫(xiě)控制器的端口列表如下:

信號名稱(chēng)

位寬bits

I/O

信號描述

decoder_in_rdy

1

O

寫(xiě)SRAM控制器允許信號

decoder_in_wr

1

I

輸入有效

decoder_in_data

64

I

輸入至SRAM控制器數據總線(xiàn)

decoder_in_ctrl

8

I

輸入至SRAM控制器控制總線(xiàn)

reset_req

1

O

復位請求

reset_src_gen

12

O

需要復位的數據包(表示解碼后已發(fā)送完畢)

reset_info_vld

1

O

復位信息有效

reset_ack

1

I

復位請求響應

dcod_data_0

64

O

輸出的IP數據包的數據總線(xiàn)

dcod_ctrl_0

8

O

輸出的IP數據包的控制總線(xiàn)

wr_vld_0

1

O

輸出有效

wr_rdy_0

1

I

發(fā)送數據允許標志

sram_addr

19

O

Sram讀/寫(xiě)地址

sram_we

1

O

Sram寫(xiě)使能

sram_bw

4

O

SRAM寫(xiě)入控制信號

sram_wr_data

36

O

SRAM寫(xiě)數據總線(xiàn)

sram_rd_data

36

I

SRAM讀數據總線(xiàn)

sram_tri_en

1

O

SRAM寫(xiě)三態(tài)控制

SRAM的讀寫(xiě)時(shí)序如圖3.4-22:

圖3.4-22 SRAM讀寫(xiě)時(shí)序


上一頁(yè) 1 2 3 4 下一頁(yè)

關(guān)鍵詞: 通信

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>