新聞中心

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

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

作者: 時間:2018-08-31 來源:網(wǎng)絡 收藏

本文引用地址:http://butianyuan.cn/article/201808/388146.htm

  3.4 解碼路由器詳細設計方案

  3.4.1 解碼路由器系統(tǒng)整體模塊圖

  如下圖3.4-1所示,為解碼路由器的整體模塊圖

  

  3.4-1 解碼路由器系統(tǒng)整體模塊圖

  3.4.2系統(tǒng)中各單元模塊的功能與時序

  1、Input_arbiter:采用輪詢策略,當fifo非空時從fifo接收數(shù)據(jù),根據(jù)mac header判斷數(shù)據(jù)是否為IP數(shù)據(jù)包,若是,則將數(shù)據(jù)發(fā)送到DRAM讀寫控制模塊,同時將信源號、代編號發(fā)送到CAM讀寫控制模塊。

  可用一個兩狀態(tài)的狀態(tài)機實現(xiàn):即輪詢判斷輸入和數(shù)據(jù)輸出:在FIFO非空時讀數(shù)據(jù),并根據(jù)數(shù)據(jù)包的類型發(fā)送到DRAM讀寫控制器或output fifo中,若是IP數(shù)據(jù)包,同時將信源號、代編號發(fā)送給CAM讀寫控制。

主要信號列表:

信號名稱

位寬 bit

I/O

描述

Wr_vld_arb

1

寫DRAM控制器有效

Out_data_0

64

輸出至DRAM的data

Out_ctrl_0

8

輸出至DRAM德ctrl

Src_gen_seq

24

信源號、代的編號

Cam_vld

1

寫CAM控制器有效

Port_num_dram

2

數(shù)據(jù)的接收端口號

Out_data_1

64

輸出至output arbiter的data

Out_ctrl_1

8

輸出至output arbiter的ctrl

Wr_vld_1

1

輸出至output arbiter信號有效

2、output_arbiter

  

  圖3.4-2 output_arbiter結構圖

  本模塊的結構如圖3.4-2所示,由兩個輸入fifo和一個輸出仲裁器組成,兩個fifo緩存來自SRAM和input_arbiter的數(shù)據(jù)包,Output_arbiter的作用是將解碼后的數(shù)據(jù)發(fā)送到MAC層。由于對于非IP數(shù)據(jù)包我們并沒有對其進行編碼,所以在解碼路由器中由input_arbiter判斷后直接輸出output_arbiter;對于編碼后的IP數(shù)據(jù)包,在解碼后先暫存到SRAM中,再發(fā)送出去。本模塊就是輪流判斷并接收來自SRAM和input_arbiter的數(shù)據(jù),并將數(shù)據(jù)包發(fā)送到MAC層。

輸入輸出信號列表:

信號名稱

位寬bits

I/O

描述

out_data_3

64

O

輸出至MAC層的數(shù)據(jù)總線

out_ctrl_3

8

O

輸出至MAC層的控制總線

out_wr_3

1

O

輸出有效

out_rdy_3

1

I

MAC層空閑標志

dcod_data_0

64

I

已經(jīng)解碼的IP數(shù)據(jù)包的數(shù)據(jù)總線

dcod_ctrl_0

8

I

已經(jīng)解碼的IP數(shù)據(jù)包的控制總線

wr_vld_0

1

I

寫有效

wr_rdy_0

1

O

接收數(shù)據(jù)空閑標志

non_ip_data

64

I

非IP數(shù)據(jù)包數(shù)據(jù)總線

non_ip_ctrl

8

I

非IP數(shù)據(jù)包控制總線

wr_vld_1

1

I

寫有效

wr_rdy_1

1

O

接收數(shù)據(jù)空閑標志

  3、decoded_reg_grp

  本模塊分別與decode_control_panel,decoder和SRAM_contrl相連接,主要作用是記錄信源的某代數(shù)據(jù)包是否已經(jīng)解碼,并將相應的解碼信息輸出給其他模塊,模塊結構如圖3.4-3:

  

  圖3.4-3:decoded_reg_grp模塊圖

端口列表:

信號名稱

位寬bits

I/O

描述

rd_dcod_reg_req_0

1

I

讀取解碼標志位請求

rd_dcod_src_gen_0

12

I

要讀取的數(shù)據(jù)包的信源號和代編號

req_ack_vld_0

1

O

輸出有效

alredy_decod_0

1

O

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

rd_dcod_reg_req_1

1

I

讀取解碼標志位請求

rd_dcod_src_gen_1

12

I

要讀取的數(shù)據(jù)包的信源號和代編號

req_ack_vld_1

1

O

輸出有效

alredy_decod_1

1

O

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

set_req

1

I

置位請求

set_src_gen

12

I

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

set_info_vld

1

I

置位信息有效

set_ack

1

O

置位請求響應

reset_req

1

I

復位請求

reset_src_gen

12

I

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

reset_info_vld

1

I

復位信息有效

reset_ack

1

O

復位請求響應

 ?、?讀解碼標志

  當decoder模塊或decode_control_panel讀取解碼標志時,將查詢結果輸出,alredy_decod_0和alredy_decod_1為“1”時表示本次查詢的數(shù)據(jù)包已經(jīng)解碼,為“0”時表示未被解碼,以與decoder接口為例,讀取解碼標志的時序如圖3.4-4:

  

  圖3.4-4:讀解碼標志位時序圖

 ?、?寫解碼標志位

  當decoder把一個數(shù)據(jù)包解碼成功后,就把相應的解碼標志位置1,當SRAM_control將一個數(shù)據(jù)包發(fā)送出去后,再將相應的解碼標志位置0,以置位為例,解碼標志位的寫時序如圖3.4-5:

  

  圖3.4-5:置位解碼標志寄存器

  4、DRAM控制器:接收數(shù)據(jù),并順序存儲到DRAM中去。

  注意:我們將DRAM分為三塊,分別對應于數(shù)據(jù)接收的三個信道,即第0個信道的數(shù)據(jù)存儲到DRAM的第0塊,第1個信道的數(shù)據(jù)存儲到DRAM的第1塊……信道號由port_num給出。由于DRAM是按照block讀寫的,因此每個block大小為2034字節(jié),位寬為144位。

  

  圖3.4-6:DRAM控制器模塊圖

① DRAM控制器與DRAM的接口與讀寫時序:

Signal Group

Signal Name

Direction

Bits

Description

Request Negotiation

p_wr_req

from user logic to block-of-data rd/wr module

1

1=request for write transfer (data are from user logic to DRAM), 0=otherwise

Request Negotiation

p_wr_ptr

from user logic to block-of-data rd/wr module

PKT_MEM_PTR_WIDTH

the start address of DRAM for transfer. Each unit is 16-byte piece

Request Negotiation

p_wr_ack

from block-of-data rd/wr module to user logic

1

1=the arbiter acknowledges that the write requester can proceed, 0=otherwise

Data Transfer

p_wr_data_vld

from user logic to block-of-data rd/wr module

1

1=the write data is valid, 0=otherwise

Data Transfer

p_wr_data

from user logic to block-of-data rd/wr module

PKT_DATA_WIDTH

the data transferred from user logic to DRAM

Data Transfer

p_wr_full

from block-of-data rd/wr module to user logic

1

1=notify the user logic to pause transfer the next clock cycle until this signal is deasserted, 0=otherwise

Data Transfer

p_wr_done

from block-of-data rd/wr module to user logic

1

1=this is the last write and no more write will be accepted for this block-of-data, 0=otherwise

寫DRAM時序如圖3.4-7:

圖3.4-7 寫DRAM時序圖

讀端口:

Signal Group

Signal Name

Direction

Bits

Description

Request Negotiation

p_rd_req

from user logic to block-of-data rd/wr module

1

1=request for read transfer (data are from DRAM to user logic), 0=otherwise

Request Negotiation

p_rd_ptr

from user logic to block-of-data rd/wr module

PKT_MEM_PTR_WIDTH

the start address of DRAM for transfer. Each unit is 16-byte piece

Request Negotiation

p_rd_ack

from block-of-data rd/wr module to user logic

1

1=the arbiter acknowledges that the read requester can proceed, 0=otherwise

Data Transfer

p_rd_rdy

from block-of-data rd/wr module to user logic

1

1=block-of-data rd/wr module has data for user logic to read, 0=otherwise

Data Transfer

p_rd_en

from user logic to block-of-data rd/wr module

1

1=user logic reads out one word of data from the block-of-data rd/wr module, 0=otherwise

Data Transfer

p_rd_data

from block-of-data rd/wr module to user logic

PKT_DATA_WIDTH

data transferred from block-of-data rd/wr module to user logic

Data Transfer

p_rd_done

from block-of-data rd/wr module to user logic

1

1=this is the last read data and no more data will be read for this block-of-data, 0=otherwise

讀DRAM時序如圖3.4-8:

圖3.4-8 寫DRAM時序圖

② 其他模塊對DRAM控制器的讀/寫過程:

當DRAM讀寫控制器將一個數(shù)據(jù)包讀/寫完之后, 就將rd_idle/wr_rdy_arb置為1,當外部模塊需要對DRAM進行讀寫時,首先要判斷這兩個信號是否有效,在有效的情況下進行對數(shù)據(jù)的操作。.端口列表如下:

信號名稱

位寬bits

I/O

描述

wr_vld_arb

1

I

Input_arbiter輸入有效

out_data_0

64

I

輸入的數(shù)據(jù)包的data_bus

out_ctrl_0

8

I

輸入數(shù)據(jù)包的ctrl_bus

port_num_dram

2

I

輸入信號的端口號,指明數(shù)據(jù)存放在DRAM的區(qū)域

wr_rdy_arb

1

O

寫空閑信號

port_num_rd

2

I

讀取數(shù)據(jù)包的區(qū)域

addr_vld

1

I

讀地址有效

block_num_rd

8

I

數(shù)據(jù)包存放的block的起始地址

rd_idle

1

O

讀空閑信號

in_rdy

1

I

數(shù)據(jù)輸出輸出允許信號

out_data

64

O

讀出的數(shù)據(jù)包的data_bus

out_ctrl

8

O

輸出數(shù)據(jù)包的ctrl_bus

data_vld

1

O

輸出數(shù)據(jù)有效

(1)當decode_control_panel對DRAM控制器進行讀操作時,將信道號和block地址發(fā)送至DRAM控制器,接著DRAM控制器從DRAM中讀取數(shù)據(jù),當decoder空閑時將數(shù)據(jù)發(fā)送出去,時序圖如3.4-9所示:

圖3.4-9 對DRAM控制器的讀操作

(2)當DRAM控制器進行寫操作時,將按照input_arbiter發(fā)送過來的端口號,按照地址大小順序寫DRAM,時序圖如3.4-10:

圖3.4-10 對DRAM控制器的寫操作

5、decode_control_panel

① 本模塊的內部結構圖如3.4-11所示,它由以下五個模塊組成:cam_info_save, decode_control_sm和3個CAM組成。

圖3.4-11:decode_control_panel內部結構圖

本模塊的輸入輸出端口定義表如下:

端口名稱

位寬 bits

I/O

描述

port_num_cam

2

In

數(shù)據(jù)寫入的CAM號,即信道號

Src_gen_seq

24

In

輸入數(shù)據(jù)包的信源號、代編號

Cam_vld

1

In

寫有效

Cam_rdy

1

Out

寫Cam準備好

rd_idle

1

In

DRAM準備好

block_num_rd

8

Out

讀DRAM的地址

addr_vld

1

Out

讀地址有效

port_num_rd

2

out

要讀取的DRAM的編號

Pkt_vld

1

Out

要解碼的數(shù)據(jù)包輸出有效標志

Pkt_decoding

12

out

正在解碼的數(shù)據(jù)包的信源號、代編號

Decod_com

1

In

數(shù)據(jù)包解碼完成標志

has_other_factor

1

Out

有另外一個解碼因子

Pkt_not_find

1

Out

所需要解碼數(shù)據(jù)包未找到

pkt_need_src_gen

12

In

解碼需要的數(shù)據(jù)包

need_pkt_vld

1

In

所需數(shù)據(jù)包有效

rd_dcod_reg_req_1

1

Out

讀解碼標志寄存器請求

req_ack_vld_1

1

In

標志位有效

Alredy_Decod_1

1

In

解碼標志位

rd_dcod_src_gen_1

12

out

查詢數(shù)據(jù)包是否已經(jīng)解碼

② cam_info_save:

該模塊的主要功能是將輸入的數(shù)據(jù)包的信源號和代的編號按地址大小順序存入到三個cam中,每個cam分別對應于三個數(shù)據(jù)輸入通道。每個CAM的大小是24bits×256,我們要求CAM的讀寫操作可以同時進行,寫數(shù)據(jù)從DIN進入,而讀(查詢)的數(shù)據(jù)從CMP_DIN進入,寫操作時BUSY信號有效,表示不可以響應其他寫請求,圖3.4-12是一個CAM的讀寫操作時序:

圖3.4-12:CAM讀寫過程



關鍵詞: 通信

評論


相關推薦

技術專區(qū)

關閉