新闻中心

EEPW首页>消费电子>设计应用> 基于网络编码的多信源组播通信系统,包括源代码,原理图等 (三)

基于网络编码的多信源组播通信系统,包括源代码,原理图等 (三)

作者: 时间:2018-08-31 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/201808/388146.htm

③decode_control_sm

该模块的功能是按照轮询策略,控制decoder解码储存在DRAM中的数据包。通过查询CAM中的数据包的存储地址,将查询到的地址输出给DRAM读写控制模块,从而找到解码所需要的数据,同时将要查询的数据包的信源号和代的编号发送给解码模块。若不能查找到解码因子,则将信号Pkt_not_find置为有效电平,通知decoder无法解码,同时将状态转到解码下一个数据包的状态上。在开始查找CAM时,要等待储存一定数量的数据包,在我们的系统里面,暂定为32。

状态机处理控制流程如图3.4-13:

图3.4-13:decode_control_sm状态机及数据处理流程

  6、decoder

  decoder是整个解码路由器的核心之一,它的主要功能是接收来自DRAM的编码后的IP数据包,在decode_control_panel模块的控制下对数据包进行解码,它包括多个小模块,其整体图和内部结构图如3.4-14和3.4-15所示:

  图3.4-14 decoder整体结构图

  图3.4-15:decoder内部结构图

  ① header_parser

  分析接收到的数据包,如果已经被编码,根据包头提取信源号、代号、长度和系数给运算控制模块,如果没有被编码,则查询解码标志寄存器,如果已经解码并储存在二级缓存中,则该数据包只是一个解码因子,把数据发送到fwd_sel,若没有解码,则同时发送到capsulation和forward sel。如果数据是编码后的数据包,则将数据包去掉包头后将数据发送给forward sel模块。当发送到最后的64位数据时,eop信号有效,指明是数据包的最后有效字节。

  下图所示为输入输出接口图3.4-16:

  图3.4-16:header_parser模块图

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

信号名称

位宽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”代表已经解码,“0”代表未解码)

Uncod_data

64

O

未编码数据包的数据总线

Uncod_ctrl

8

O

未编码数据包的控制总线

Wr_vld

1

O

写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

最后指示一个有效字节的指示

uncod

1

O

指明输出的数据包是否编码

src_gen_num

12

O

Decoder接收到的数据包的信源号和代的编号

len_0

16

O

被编码的第一个数据包的有效载荷的长度

len_1

16

O

被编码的第二个数据包的有效载荷的长度

coef_0

8

O

被编码的第一个数据包的编码系数

coef_1

8

O

被编码的第二个数据包的编码系数

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所示为状态机处理流程:

图3.4-17:header_parser状态机处理流程

② forwd_sel

该模块功能主要是转发数据包:接收来自header_parser的数据包,若uncod=0,则表明数据包是编码后数据包,将已经编码后的数据包的载荷转换为72bits后,将数据发送到RAM读写控制器,否则发送到decod_operation。当有反馈输入请求时,若输出到decod_operation 的数据线空闲时,将反馈数据发送到decod_operation。

本模块的端口列表如下:

信号名称

位宽bits

I/O

信号描述

fwd_rdy

1

O

输入fwd_sel允许信号

out_vld

1

I

输入fwd_sel有效

pay_load

64

I

输入fwd_sel数据总线(不含包头)

eop

4

I

最后指示一个有效字节的指示

uncod

1

I

指明输出的数据包是否编码

wr_req

1

O

写RAM请求

encod_data

72

O

写RAM的数据总线

ram_data_vld

1

O

数据有效

encod_data_eop

4

O

数据包结束标志,指明最后一个有效字节

wr_ack

1

I

写RAM响应

uncod_data_vld

1

O

输出至dcod_operation的数据有效

uncod_data_factor

64

O

输出至dcod_operation的数据总线

uncod_data_eop

4

O

数据包结束标志,指明最后一个有效字节

dcod_rdy

1

I

输出至dcod_operation允许信号

fd_back_ack

1

O

接受反馈响应

fd_back_vld

1

I

反馈数据有效标志

fd_back_req

1

I

反馈请求

fd_back_data

64

I

反馈数据总线

fd_back_data_eop

4

I

反馈数据结束标志,指明最后一个有效字节

③ RAM读写控制器

在写数据时,先从运算控制模块中得出要储存的RAM号,接着RAM读写控制器将从收到forward sel 模块收到的数据存到片内RAM里面去。在读数据时,根据dcod_operation模块提供的ram号,从相应的ram中读取数据,由于使用的是双端口ram,因此读写可以同时进行。模块信号列表如下:

信号名称

位宽bits

I/O

信号描述

wr_req

1

I

写RAM请求

encod_data

72

I

写RAM的数据总线

ram_data_vld

1

I

数据有效

encod_data_eop

4

I

数据包结束标志,指明最后一个有效字节

wr_ack

1

O

写RAM响应

wr_ram_num

2

I

要写入的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

数据包结束标志,指明最后一个有效字节

ram_data

72

O

读RAM的数据总线

ram_vld

1

O

读RAM数据有效

RAM读写时序图如图3.4-18:

图3.4-18:RAM读写时序

每个RAM由双端口block RAM组成,位宽为72位,深度为180,因此读写的地址位宽均为8位。由于RAM的读写控制时序是固定的,所以在此不再赘述。

④ operation_control

运算控制(operation_control)是decoder模块的控制核心,它和decode_control_panel配合,完成对编码数据包的解码。

输入输出信号列表:

信号名称

位宽bits

I/O

信号描述

Pkt_vld

1

I

要解码的数据包输出有效标志

Pkt_decoding

12

I

正在解码的数据包的信源号、代编号

Decod_com

1

O

数据包解码完成标志

has_other_factor

1

I

有另外一个解码因子

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

被编码的第一个数据包的有效载荷的长度

len_1

16

I

被编码的第二个数据包的有效载荷的长度

coef_0

8

I

被编码的第一个数据包的编码系数

coef_1

8

I

被编码的第二个数据包的编码系数

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

要写入的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

数据包长度

src_num

4

O

数据包的信源号

gen_num

8

O

数据报的代编号

Operation_control模块的主要功能是:接收header_parser发送过来的数据,通过计算和比较后与decode control panel,告诉decode control panel解码所需要的数据包和解码完成标志;给RAM读写给出RAM号(即存储在哪个RAM中);给decode operation模块提供解码所需要的系数和RAM号;给capsulation模块提供源IP和是否需要反馈数据的命令,其控制状态如图3.4-19下:

图3.4-19:Operation_control状态机处理流程

⑤ decode operation

decode operation是解码运算模块,它将来自fwd_sel模块的未编码的数据和来自RAM的编码数据完成减法和除法运算,还原被编码的数据。解码后将数据总线的位宽恢复为64bits。解码运算模块的端口列表如下:

信号名称

位宽bits

I/O

信号描述

dcod_payload

64

O

解码后的数据包的有效载荷

end_payload

4

O

数据包结束标志,指明最后一个有效字节

payload_vld

1

O

输出数据有效

wr_rdy

1

I

输出数据允许信号

uncod_data_vld

1

I

输入至dcod_operation的数据有效

uncod_data_factor

64

I

输入至dcod_operation的数据总线

uncod_data_eop

4

I

数据包结束标志,指明最后一个有效字节

dcod_rdy

1

O

输入至dcod_operation允许信号

rd_ram_num

2

O

需要读取数据的RAM号

rd_req

1

O

读RAM请求

ram_data_eop

4

I

数据包结束标志,指明最后一个有效字节

ram_data

72

I

读RAM的数据总线

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是解码运算的最后一个模块,其主要功能是封装解码后的数据包。其主要任务是:(1)接收来自decode operation和header_parser的数据;(2)将来自header_parser的未编码的数据包去掉NCP包头;(3)计算新的包头校验和,更新TTL;(4)置位解码标志寄存器;(5)将来自decode operation模块的数据,先向运算控制模块询问是否要反馈,若需要,则将数据反馈至forward_sel模块;(6)恢复IP数据包头;(7)将IP包头和有效载荷封装好,并恢复ctrl_bus和module header,将其一起同步发送出去。

端口信号列表如下:

信号名称

位宽bits

I/O

信号描述

decoder_in_rdy

1

I

输出至SRAM允许信号

decoder_in_wr

1

O

输出有效

decoder_in_data

64

O

输出至SRAM数据总线

decoder_in_ctrl

8

O

输出至SRAM控制总线

set_req

1

O

置位请求

set_src_gen

12

O

需要置位的数据包(表示已经解码完毕)

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

数据包长度

src_num

4

I

数据包的信源号

gen_num

8

I

数据报的代编号

dcod_payload

64

I

解码后的数据包的有效载荷

end_payload

4

I

数据包结束标志,指明最后一个有效字节

payload_vld

1

I

输入数据有效

wr_rdy

1

O

输入数据允许信号

fd_back_ack

1

I

接受反馈响应

fd_back_vld

1

O

反馈数据有效标志

fd_back_req

1

O

反馈请求

fd_back_data

64

O

反馈数据总线

fd_back_data_eop

4

O

反馈数据结束标志,指明最后一个有效字节

Uncod_data

64

I

未编码数据包的数据总线

Uncod_ctrl

8

I

未编码数据包的控制总线

Wr_vld

1

I

写capsulation数据有效

Out_rdy

1

O

输入数据包允许信号

封装过程中的状态转换图如图3.4-21:

图3.4-21capsulation封装包头流程图

7、SRAM读写控制器

SRAM读写控制的作用是:①将capsulation模块来的数据写入SRAM中,写入时按照代的大小和信源号写入block中。SRAM按照地址分为3个区域,每个区域存储对应由一个信源。每个区域分为256个block,每个block深度是400,宽度为36bits,可以存储1800字节的数据(即至少可容纳一个正常大小的IP数据包)。②读取数据时按照block逐个读取,读取后的数据直接发送至output_arbiter。在每发送完一个数据包后,对解码标志寄存器复位。

SRAM读写控制器的端口列表如下:

信号名称

位宽bits

I/O

信号描述

decoder_in_rdy

1

O

写SRAM控制器允许信号

decoder_in_wr

1

I

输入有效

decoder_in_data

64

I

输入至SRAM控制器数据总线

decoder_in_ctrl

8

I

输入至SRAM控制器控制总线

reset_req

1

O

复位请求

reset_src_gen

12

O

需要复位的数据包(表示解码后已发送完毕)

reset_info_vld

1

O

复位信息有效

reset_ack

1

I

复位请求响应

dcod_data_0

64

O

输出的IP数据包的数据总线

dcod_ctrl_0

8

O

输出的IP数据包的控制总线

wr_vld_0

1

O

输出有效

wr_rdy_0

1

I

发送数据允许标志

sram_addr

19

O

Sram读/写地址

sram_we

1

O

Sram写使能

sram_bw

4

O

SRAM写入控制信号

sram_wr_data

36

O

SRAM写数据总线

sram_rd_data

36

I

SRAM读数据总线

sram_tri_en

1

O

SRAM写三态控制

SRAM的读写时序如图3.4-22:

图3.4-22 SRAM读写时序


上一页 1 2 3 4 下一页

关键词:通信

评论


相关推荐

技术专区

关闭