當(dāng)前位置:首頁 > 消費(fèi)電子 > 消費(fèi)電子
[導(dǎo)讀]  3 系統(tǒng)的詳細(xì)設(shè)計(jì)方案  3.1 概述  在組播網(wǎng)絡(luò)的拓?fù)鋱D中,編碼路由器、轉(zhuǎn)發(fā)路由器和解碼路由器是三個(gè)獨(dú)立的系統(tǒng),各自完成編碼、轉(zhuǎn)發(fā)和解碼的任務(wù)。前面講過,分組

  3 系統(tǒng)的詳細(xì)設(shè)計(jì)方案

  3.1 概述

  在組播網(wǎng)絡(luò)的拓?fù)鋱D中,編碼路由器、轉(zhuǎn)發(fā)路由器和解碼路由器是三個(gè)獨(dú)立的系統(tǒng),各自完成編碼、轉(zhuǎn)發(fā)和解碼的任務(wù)。前面講過,分組的編碼、解碼主要在網(wǎng)絡(luò)層完成。在網(wǎng)絡(luò)層中數(shù)據(jù)通道中,data bus和ctrl bus是同步傳輸?shù)?,二者之間的關(guān)系和格式如圖3.1-1所示:

ctrl bus(8位)

Data bus(64位)

ff

module header

00

Pkt data1

00

……

xy(xy≠00)

Last pkt data

圖3.1-1 數(shù)據(jù)通道中的data bus和ctrl bus

  Ctrl為ff時(shí),表明為一個(gè)數(shù)據(jù)包的包頭,xy為非零數(shù)據(jù),指明最后一個(gè)有效的字節(jié)所在的位置,如01000000指明是第7個(gè),即data[63:48]為有效數(shù)據(jù)。模塊之間數(shù)據(jù)傳輸?shù)倪^程是:若上一個(gè)模塊已經(jīng)處理完畢,想把數(shù)據(jù)傳輸?shù)较乱粋€(gè)模塊,首先判斷輸入信號rdy是否有效,當(dāng)rdy = 1時(shí),將數(shù)據(jù)和控制信號同步發(fā)送出去,同時(shí)wr_vld信號有效,時(shí)序如圖3.1-2所示:

  

 

  圖3.1-2 有效的數(shù)據(jù)傳輸時(shí)序

  3.2 編碼路由器詳細(xì)設(shè)計(jì)方案

  3.2.1編碼系統(tǒng)整體模塊如圖3.2-1所示

  

 

  圖3.2-1:編碼系統(tǒng)整體模塊圖

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

  (1)Input arbiter

 ?、?Input arbiter內(nèi)部結(jié)構(gòu)如圖3.2-2所示:

  

 

  圖3.2-2 Input arbiter內(nèi)部結(jié)構(gòu)圖

② 本模塊輸入輸出信號列表及說明

Signal name

Bit width

Input or output

description

Input_fifo_data_1

64

input

Input data bus from “input FIFO 1”

Input_fifo_ctrl_1

8

input

Input ctrl bus from “input FIFO 1”

Input_fifo_empty_1

1

input

1=input FIFO is empty,0=otherwise

Input_fifo_rd_en_1

1

output

Read enable

Input_fifo_data_2

64

input

Input data bus from “input FIFO 2”

Input_fifo_ctrl_2

8

input

Input ctrl bus from “input FIFO 2”

Input_fifo_empty_2

1

input

1=input FIFO is empty,0=otherwise

Input_fifo_rd_en_2

1

output

Read enable

Data_arbiter_ctrl_1

64

output

Output data bus to “control module”

Ctrl_arbiter_ctrl_1

8

Output

Output ctrl bus to “control module”

Val_arbitrer_ctrl_1

1

Output

1=data from input arbiter 1 to head splitter 1 is valid, 0=otherwise

Rdy_arbiter_ctrl_1

1

Input

1=module “head splitter 1” is ready to receive

Data_arbiter_ctrl_2

64

output

Output data bus to “control module”

Ctrl_arbiter_ctrl_2

8

Output

Output ctrl bus to “control module”

Val_arbitrer_ctrl_2

1

Output

1=data from input arbiter 2 to head splitter 2 is valid, 0=otherwise

Rdy_arbiter_ctrl_2

1

Input

1=module “head splitter 2” is ready to receive, 0=otherwise

Data_arbiter_out_1

64

output

Output data bus to “output arbiter module”

Ctrl_arbiter_out_1

8

Output

Output ctrl bus to “output arbiter module”

Val_arbiter_out_1

1

Output

1=data from input arbiter 1 to output arbiter is valid, 0=otherwise

Rdy_arbiter_out_1

1

Input

1=module “output arbiter” is ready to receive from input arbiter 1, 0=otherwise

Data_arbiter_out_2

64

output

Output data bus to “output arbiter module”

Ctrl_arbiter_out_2

8

Output

Output ctrl bus to “output arbiter module”

Val_arbiter_out_2

1

Output

1=data from input arbiter 2 to output arbiter is valid, 0=otherwise

Rdy_arbiter_out_2

1

Input

1=module “output arbiter” is ready to receive from input arbiter 2, 0=otherwise

clk

1

Input

System clock, running at 125MHz

Rst_n

1

input

System asynchronous reset signal

  ③ 功能描述及數(shù)據(jù)流

  本模塊執(zhí)行輸入仲裁功能。兩個(gè)獨(dú)立的input arbiter模塊分別從兩個(gè)輸入FIFO讀出數(shù)據(jù)包,判斷數(shù)據(jù)包類型,決定輸出端口(非IP包直接送往output arbiter,IP包送往control),輸出數(shù)據(jù)。

  為了判斷數(shù)據(jù)包類型,需要獲取16-bit Ether Type信息,該信息位于每個(gè)數(shù)據(jù)包第二個(gè)double word中的31:16位,若Ether Type為0x0080,則說明此數(shù)據(jù)包為IP數(shù)據(jù)包,若Ether Type值不是0x0080,則說明此數(shù)據(jù)包不是IP數(shù)據(jù)包,將被直接送往output arbiter模塊。

 ?、?關(guān)鍵時(shí)序及狀態(tài)機(jī)

  本模塊的狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)化如圖3.2-3所示

  

 

  圖3.2-3:input arbiter狀態(tài)轉(zhuǎn)換圖

  2、Control

① 子模塊列表

Sub module name

quantity

description

Head_spliter

2

Split head and payload, send head to “head info extractor”, send payload to “FIFO ctrl payload”

Head_info_extractor

2

Receive head from “head splitter”, extract “source number”, generate “generation number”. Store legacy head and packing info head respectively in “FIFO ctrl legacy” and “FIFO ctrl packinginfo”

Control_arbiter

1

Detect ctrl bus to determine whether should process both channels synchronously or hold one channel and process the other.

FIFO ctrl payload

2

Standard FIFO generated by CoreGen, store payload

FIFO ctrl legacy

2

Standard FIFO generated by CoreGen, store legacy head

FIFO ctrl packinginfo

2

Standard FIFO generated by CoreGen, store packing info head

      

 

 

 

 

 

 

② 內(nèi)部結(jié)構(gòu)如圖3.2-4

  

 

  圖3.2-4:control模塊內(nèi)部結(jié)構(gòu)

 

③ 本模塊輸入輸出信號列表及說明

Signal name

Bit width

Input or output

description

Data_arbiter_ctrl_1

64

Input

Input data bus from “input arbiter 1”

Ctrl_arbiter_ctrl_1

8

Input

Input ctrl bus from “input arbiter 1”

Val_arbiter_ctrl_1

1

Input

1=data from input arbiter 1 to head splitter 1 is valid, 0=otherwise

Rdy_arbiter_ctrl_1

1

output

1=module “head splitter 1” is ready to receive from input arbiter 1, 0=otherwise

Data_arbiter_ctrl_2

64

Input

Input data bus from “input arbiter 2”

Ctrl_arbiter_ctrl_2

8

Input

Input ctrl bus from “input arbiter 2”

Val_arbiter_ctrl_2

1

Input

1=data from input arbiter 2 to head splitter 2 is valid, 0=otherwise

Rdy_arbiter_ctrl_2

1

output

1=module “head splitter 2” is ready to receive from input arbiter 2, 0=otherwise

Data_payloadfifo_router_1

64

output

output data bus to “payload router”

Ctrl_payloadfifo_router_1

8

output

Output ctrl bus to “payload router”

Rd_en_payloadfifo_router_1

1

Input

Read enable

Empty_payloadfifo_router_1

1

output

1=FIFO ctil payload 1 is empty,0=otherwise

Data_payloadfifo_router_2

64

output

output data bus to “payload router”

Ctrl_payloadfifo_router_2

8

output

Output ctrl bus to “payload router”

Rd_en_payloadfifo_router_2

1

Input

Read enable

Empty_payloadfifo_router_2

1

output

1=FIFO ctrl payload 2 is empty,0=otherwise

Data_center_legacyfifo_1

64

Output

Output data bus to “packing center”

Rd_en_center_legacyfifo_1

1

Input

Read enable

Data_center_packingfifo_1

14

Output

Output data bus to “packing center”

Rd_en_center_packingfifo_1

1

input

Read enable

Data_center_legacyfifo_2

64

Output

Output data bus to “packing center”

Rd_en_center_legacyfifo_2

1

Input

Read enable

Data_center_packingfifo_2

14

Output

Output data bus to “packing center”

Rd_en_center_packingfifo_2

1

input

Read enable

clk

1

input

System clock, running at 125MHz

Rst_n

1

input

System asynchronous reset signal

  ④ 功能描述及數(shù)據(jù)流

  本模塊為主控制模塊。子模塊control arbiter通過監(jiān)控兩條輸入通道的ctrl bus,控制子模塊head_spliter的兩個(gè)獨(dú)立的例化。具體控制操作如下:

  若兩條輸入通道同時(shí)進(jìn)來新的IP包,則同時(shí)處理兩條通道。

  若輸入通道1進(jìn)來新IP包時(shí),通道2中IP包已經(jīng)在處理中,則阻塞通道1,直至通道2處理完畢再重新判決。

  若同時(shí)處理兩條通道時(shí),兩條通道中的數(shù)據(jù)包深度相同,則無需“PADDING”操作。若通道1中數(shù)據(jù)包發(fā)送完畢時(shí)(ctrl bus用one-hot-code標(biāo)明結(jié)尾字節(jié)),通道2中數(shù)據(jù)包尚未發(fā)送完畢,則需對通道1中數(shù)據(jù)包補(bǔ)零,并在ctrl bus中用0b11110000標(biāo)明此為padding數(shù)據(jù)。

  子模塊head_spliter分離包頭和負(fù)載,并分別發(fā)往head_info_extractor提取封裝信息和FIFO_ctrl_payload暫存負(fù)載。

  子模塊head_info_extractor提取包頭中的源IP地址,并由此生成4-bit信源編號(source number)和10-bit代編號(generation number),將生成的封裝信息存入FIFO_ctrl_packinginfo,將原始包頭存入FIFO_ctrl_legacy。

  ⑤ 關(guān)鍵時(shí)序及狀態(tài)機(jī)

  Head_spliter狀態(tài)機(jī)如圖3.2-5

  

 

  圖3.2-5:Head_spliter狀態(tài)機(jī)

  Control arbiter時(shí)序圖

  

 

  

 

  Head spliter時(shí)序圖

  

3、Coding

① 子模塊列表

Submodule name

quantity

description

Payload router

1

Determine by the arrival of packets from both channels, whether should process coding or transport directly to packing module

M64×8 multiplier

2

Multiply 64-bit data from “payload router” by 8-bit random number from “prng tap16”

Prng tap16

1

8-bit random number generator

M72×72 adder

1

72-bit by 72-bit full adder

M72to64 converter

1

Convert data bus width from 72-bit to 64-bit

 

② Coding模塊的內(nèi)部結(jié)構(gòu)如圖3.2-6

圖3.2-6:coding模塊內(nèi)部結(jié)構(gòu)

      

③ 本模塊輸入輸出信號列表及說明

 

 

Signal name  

Bit width

I/O

description

Data_payloadfifo_router_1

64

Input

Input data bus from “FIFO ctrl payload 1”

Ctrl_payloadfifo_router_1

8

Input

Input ctrl bus from “FIFO ctrl payload 1”

empty_payloadfifo_router_1

1

Input

1=FIFO ctrl payload 1 is empty,0=otherwise

Rd_en_payloadfifo_rouer_1

1

output

Read enable

Data_payloadfifo_router_2

64

Input

Input data bus from “FIFO ctrl payload 2”

Ctrl_payloadfifo_router_2

8

Input

Input ctrl bus from “FIFO ctrl payload 2”

empty_payloadfifo_router_2

1

Input

1=FIFO ctrl payload 2 is empty,0=otherwise

Rd_en_payloadfifo_rouer_2

1

output

Read enable

Router status

3

output

Output FSM state signal to “packing FIFO” and “packing center”, coordinate with the control of packing procedure

Data_router_packingfifo

73

output

Output data bus to “packing FIFO”. Bit 64 is set to “0” to indicate this is an uncoded packet

Wr_en_router_packingfifo

1

output

Write enable

Rdy_router_packingfifo

1

input

1=module “packing FIFO” is ready to receive from payload router, 0=otherwise

Empty_packingfifo

1

input

1=FIFO packing is empty,0=otherwise

Data_converter_packingfifo

73

output

Output data bus to “packing FIFO”. Bit 64 is set to “1” to indicate this is a coded packet

Wr_en_converter_packingfifo

1

Output

Write enable

Rdy_converter_packingfifo

1

output

1=module “packing FIFO” is ready to receive from m72to64 converter, 0=otherwise

Empty_converterfifo

1

output

1=FIFO converter is empty,0=otherwise

Rand_num_1

8

output

Output random number 1 to “packing center”

Rand_num_2

8

output

Output random number 2 to “packing center”

clk

1

input

System clock running at 125MHz

Rst_n

1

input

System asynchronous reset signal

 

④ 功能描述及數(shù)據(jù)流

本模塊為主運(yùn)算模塊。子模塊paylaod router構(gòu)建與上游模塊control的接口,從control的子模塊FIFO ctrl payload中讀取數(shù)據(jù)。若兩FIFO都非空,則說明control模塊同時(shí)處理了兩條通道,也即需要進(jìn)行編碼操作。Paylpad router同時(shí)讀取兩個(gè)FIFO中的數(shù)據(jù),送往由m64×8 multiplier、m72×72 adder以及m72to64 converter組成的“編碼流水線”進(jìn)行編碼運(yùn)算,并向下游packing模塊發(fā)送編碼過的數(shù)據(jù)包。

 

子模塊prng tap16是8位偽隨機(jī)數(shù)產(chǎn)生器。使能信號rand_num_en有效時(shí),產(chǎn)生一個(gè)8位偽隨機(jī)數(shù)。子模塊m64×8 multiplier是64乘8位乘法器,該模塊將負(fù)載與隨即系數(shù)相乘,得到72位結(jié)果。m72×72 adder是72位全加器,將兩個(gè)乘法器得到的結(jié)果相加得到編碼輸出。m72to64 converter是位寬轉(zhuǎn)換器,由于coding模塊輸出的數(shù)據(jù)總線仍需保持64位,所以需要該轉(zhuǎn)換器將72位編碼輸出轉(zhuǎn)換為64為編碼數(shù)據(jù)。由于是同步電路,采用同一時(shí)鐘,該位寬轉(zhuǎn)換將產(chǎn)生一定的數(shù)據(jù)囤積,需要較大緩存。

 

⑤ 關(guān)鍵時(shí)序與狀態(tài)機(jī)

  • Payload router狀態(tài)機(jī)

圖3.2-7 Payload router狀態(tài)機(jī)[!--empirenews.page--]

4、Packing

① 子模塊列表

Sub module name 

quantity

Description

Packing FIFO

1

Receive and store processed packets before being packed in “packing center”

Packing center

1

Packing payload with all sorts of heads

 

② 內(nèi)部結(jié)構(gòu)圖

圖3.2-8 Packing內(nèi)部結(jié)構(gòu)圖

 

③ 本模塊輸入輸出信號列表及說明

Signal name

Bit width

I/O

Description

Data_router_packingfifo

73

input

Input data bus from “payload router”. Bit 64 is set to “0” to indicate this is an uncoded packet

Wr_en_router_packingfifo

1

Input

Write enable

Rdy_router_packingfifo

1

Output

1=module “packing FIFO” is ready to receive from payload router, 0=otherwise

Router_status

3

input

Input FSM state signal to coordinate with the control of  “packing FIFO”

Empty_packingfifo

1

output

1=FIFO packing is empty,0=otherwise

Data_converter_packingfifo

73

input

Input data bus from “m72to64 converter”. Bit 64 is set to “1” to indicate this is a coded packet

Wr_en_converter_packingfifo

1

Input

Write enable

Rdy_converter_packingfifo

1

Output

1=module “packing FIFO” is ready to receive from m72to64 converter, 0=otherwise

Empty_converterfifo

1

Input

1=FIFO converter is empty,0=otherwise

Data_center_legacyfifo_1

64

Input

Input data bus from “FIFO ctrl legacy 1”

Rd_en_center_legacyfifo_1

1

output

Read enable

Data_center_packinginfo_1

14

Input

Input data bus from “FIFO ctrl packinginfo 1”

Rd_en_center_packinginfo_1

1

output

Read enable

Data_center_legacyfifo_2

64

Input

Input data bus from “FIFO ctrl legacy 2”

Rd_en_center_legacyfifo_2

1

output

Read enable

Data_center_packinginfo_2

14

Input

Input data bus from “FIFO ctrl packinginfo 2”

Rd_en_center_packinginfo_2

1

output

Read enable

Rand_num_center_1

8

input

Input random number from “m64×64 multiplier 1”

Rand_num_center_2

8

input

Input random number from “m64×64 multiplier 2”

Out_data_out_0

64

output

Output data bus to “output arbiter”

Out_ctrl_out_0

8

Output

Output ctrl bus to “output arbiter”

Data_val_out_0

1

Output

1=data from packing center to output arbiter is valid, 0=otherwise

Rdy_out_0

1

Input

1=output arbiter is ready to receive from packing center, 0=otherwise

clk

1

Input

System clock running at 125 MHz

Rst_n

1

input

System asynchronous reset signal

 ?、?功能描述及數(shù)據(jù)流

  本模塊為封裝模塊。子模塊packing FIFO構(gòu)建與coding模塊的數(shù)據(jù)接口,將接收并緩存編碼數(shù)據(jù)包以及未編碼數(shù)據(jù)包(使用額外第64位數(shù)據(jù)標(biāo)志該包是否編碼,該位為“1”說明編碼,該位為“0”說明未編碼)。

  子模塊packing center是主封裝模塊。它根據(jù)packing FIFO中讀出的數(shù)據(jù)判斷需要哪些包頭信息,然后向control模塊中相應(yīng)FIFO讀取需要的包頭信息,并依次封裝成NCP數(shù)據(jù)包,發(fā)送到output arbiter。

  ⑤ 關(guān)鍵時(shí)序及狀態(tài)機(jī)

  Packing center狀態(tài)機(jī)

  第一層狀態(tài)機(jī):packing_center_status

  

 

  圖3 .2-9 packing_center_status狀態(tài)機(jī)

  第二層狀態(tài)機(jī):

  coded_process

  

 

  圖3 .2-10coded_process狀態(tài)機(jī)

  uncoded_process

  

 

  圖3.2-11 uncoded_process 狀態(tài)機(jī)

5、Output arbiter

① 本模塊輸入輸出信號列表及說明

Signal name

Bit width

Input or output

Description

Out_data_out_0

64

input

input data bus from “packing center”

Out_ctrl_out_0

8

Input

input ctrl bus from “packing center”

Data_val_out_0

1

Input

1=data from packing center to output arbiter is valid, 0=otherwise

Rdy_out_0

1

output

1=output arbiter is ready to receive from packing center, 0=otherwise

Out_data_out_1

64

input

input data bus from “input arbiter 1”

Out_ctrl_out_1

8

Input

input ctrl bus from “input arbiter 1”

Data_val_out_1

1

Input

1=data from input arbiter 1 to output arbiter is valid, 0=otherwise

Rdy_out_1

1

output

1=output arbiter is ready to receive from input arbiter 1, 0=otherwise

Out_data_out_2

64

input

input data bus from “input arbiter 2”

Out_ctrl_out_2

8

Input

input ctrl bus from “input arbiter 2”

Data_val_out_2

1

Input

1=data from input arbiter 2 to output arbiter is valid, 0=otherwise

Rdy_out_2

1

output

1=output arbiter is ready to receive from input arbiter 2, 0=otherwise

Out_data_mac

64

output

output data bus to “MAC Layer”

Out_ctrl_mac

8

Output

output ctrl bus to “MAC Layer”

Data_val_mac

1

Output

1=data from output arbiter to MAC layer is valid, 0=otherwise

Rdy_mac

1

Input

1=MAC layer is ready to receive from output arbiter, 0=otherwise

clk

1

Input

System clock running at 125MHz

Rst_n

1

input

System asynchronous reset signal

  ② 功能描述及數(shù)據(jù)流

  本模塊為輸出仲裁模塊。為協(xié)調(diào)多路輸出通道,避免沖突而設(shè)計(jì)。入端構(gòu)建與input arbiter通信的兩路端口和與packing通信的一路端口,出端構(gòu)建與MAC層通信的輸出端口。將選通并維護(hù)唯一一條輸入通道直至該數(shù)據(jù)包全部發(fā)送完畢。采用輪詢方式檢查三路輸入通道以避免沖突。

 ?、?關(guān)鍵時(shí)序及狀態(tài)機(jī)

  

 

  圖3.2-12 Output arbiter狀態(tài)機(jī)

  3.3 轉(zhuǎn)發(fā)路由器詳細(xì)設(shè)計(jì)方案

  3.3.1轉(zhuǎn)發(fā)路由器系統(tǒng)整體模塊圖

  

 

  圖3.3-1總體模塊圖

  系統(tǒng)模塊功能說明:該模塊有兩個(gè)子模塊input_arbiter模塊和forward模塊構(gòu)成,其中前者為標(biāo)準(zhǔn)模塊;后者為自定義模塊,接受來自MAC層的數(shù)據(jù)包,經(jīng)過相關(guān)處理輸出數(shù)據(jù)包,實(shí)現(xiàn)將未編碼的IP數(shù)據(jù)包封裝成NCP數(shù)據(jù)包并進(jìn)行轉(zhuǎn)發(fā)以及將其它非IP數(shù)據(jù)包或NCP數(shù)據(jù)包進(jìn)行直接轉(zhuǎn)發(fā)的功能。

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

  Input_arbiter模塊

 ?、?Input_arbiter模塊的內(nèi)部結(jié)構(gòu)圖如圖3.3-2

  

 

  圖3.3-2 input_arbiter模塊

② 本模塊的輸入輸出信號列表及說明(如下例)

信號名稱

位寬 bits

I/O

描述

in_data_n(n:0、1、2、3)

64

input

從MAC層輸入的data數(shù)據(jù)

in_ctrl_n(n:0、1、2、3)

8

input

從MAC層輸入的ctrlbus數(shù)據(jù)

in_wr_n(n:0、1、2、3)

1

input

從MAC層輸入的數(shù)據(jù)寫使能信號(1為有效)

in_rdy_n(n:0、1、2、3)

1

output

輸出至MAC層的準(zhǔn)備信號(1為準(zhǔn)備完畢,可以寫入)

out_data

64

output

輸出至forward模塊的data數(shù)據(jù)

out_ctrl

8

output

輸出至froward模塊的ctrl數(shù)據(jù)

out_wr

1

output

輸出至forward模塊的寫使能信號(1為寫使能有效)

out_rdy

1

input

從forward模塊輸入的準(zhǔn)備信號(1為準(zhǔn)備好,可以寫入)

 

  本模塊的功能描述以及內(nèi)部數(shù)據(jù)處理的過程

  功能描述:從MAC層的接口傳來的數(shù)據(jù)信號寫入到receivefifo中,每個(gè)接口接一個(gè)fifo,通過本模塊的仲裁,循環(huán)查詢每個(gè)fifo,如果每個(gè)fifo不為空則輸出該fifo的數(shù)據(jù)到forward 模塊。本次實(shí)驗(yàn)只用到接口1,其他接口實(shí)際上是沒有數(shù)據(jù)輸入,然而為了以后的可拓展設(shè)計(jì),采取循環(huán)查詢每個(gè)fifo,這樣可以從每個(gè)接口進(jìn)行數(shù)據(jù)讀入數(shù)據(jù),更合理。

 ?、?關(guān)鍵時(shí)序和狀態(tài)機(jī)轉(zhuǎn)化圖

  

 

  圖3.3-3 input_arbiter時(shí)序圖

  2、forward模塊

  ① forward模塊的內(nèi)部結(jié)構(gòu)圖如圖3.3-4

  

 

  圖3.3-4

②本模塊的輸入輸出信號列表及說明(如下例)

信號名稱

位寬 bits

I/O

描述

out_data

64

input

從input_arbiter模塊輸出的data數(shù)據(jù)

out_ctrl

8

input

從input_arbiter模塊輸出的ctrl數(shù)據(jù)

out_wr

1

input

從input_arbiter模塊輸出的寫使能信號(1為寫使能有效)

out_rdy

1

input

輸出至input_arbiter模塊的準(zhǔn)備使能信號(1為準(zhǔn)備使能有效)

out_data_n(n:0、1、2、3)

64

output

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

out_ctrl_n(n:0、1、2、3)

8

output

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

out_wr_n(n:0、1、2、3)

1

output

輸出至MAC層的數(shù)據(jù)寫使能信號(1為有效)

out_rdy_n(n:0、1、2、3)

1

intput

從MAC層輸入的準(zhǔn)備信號(1為準(zhǔn)備完畢,可以寫入)

 ?、?本模塊的功能描述以及內(nèi)部數(shù)據(jù)處理的過程

  (1)Forward模塊下子模塊Ip_Packet_Arbiter 定義6個(gè)寄存器變量分別為:Reg_0—Reg_5 寬度為64bit, 6個(gè)寄存器變量:Ctrl_0—Ctrl_5寬度為8bit.分別存儲(chǔ)數(shù)據(jù)包的前48個(gè)字節(jié)數(shù)據(jù)和CtrlBus信息。以便對包頭進(jìn)行解析,并進(jìn)行判斷所屬的類型。

  (2)判斷屬于哪一類型的數(shù)據(jù)包,如果是非IP數(shù)據(jù)包則從Ip_packet_Arbiter模塊發(fā)送一個(gè)信號Ip_Packet_Check的信號到Transmit模塊,通過data信號線和ctrl信號線將數(shù)據(jù)傳送到Transmit模塊并轉(zhuǎn)發(fā)到各個(gè)接口;

  (3)如果屬于iP數(shù)據(jù)包則進(jìn)一步判斷是屬于編碼后的數(shù)據(jù)包還是未編碼的數(shù)據(jù)包,如果是編碼后的數(shù)據(jù)包則和①做同樣處理,如果是未編碼的數(shù)據(jù)包,則進(jìn)行相應(yīng)的處理(更改modulheader、MAC的目標(biāo)地址、Ip包頭、添加NCP包頭操作),然后將組合好的數(shù)據(jù)包頭和Ctrlbus 和Ip_Packet_Check信號一起送到Transmit模塊。在Transmit模塊通過收到的Ip_Packet_Check信號進(jìn)行判斷是否需要對存放數(shù)據(jù)進(jìn)行重新的封裝并進(jìn)行相應(yīng)處理,然后進(jìn)行轉(zhuǎn)發(fā)操作。整個(gè)過程的流程圖如圖3.3-5

  

 

  圖3.3-5

 ?、荜P(guān)鍵時(shí)序和狀態(tài)機(jī)轉(zhuǎn)化圖

  

 

  圖3.3-6

 ?、?froward模塊下子模塊Transmit的狀態(tài)機(jī)以及描述如圖3.3-7

  

 

  圖3.3-7

  對整個(gè)狀態(tài)機(jī)工作條件進(jìn)行詳細(xì)的描述如下:

  當(dāng)滿足滿足計(jì)數(shù)器counter=0的條件時(shí),進(jìn)入IDLE狀態(tài);counter計(jì)數(shù)器不改變并且不是包頭的起始信號時(shí)則保持在該狀態(tài);如果counter=1,發(fā)現(xiàn)包頭起始信號則保存該字段的值,并設(shè)置counter=2;

  當(dāng)滿足計(jì)數(shù)器counter=2時(shí),并且是包的中間值信號時(shí)則跳轉(zhuǎn)到READ狀態(tài);根據(jù)counter計(jì)數(shù)器的值有條件的保存在該狀態(tài);counter自加;

  當(dāng)滿足計(jì)數(shù)器counter=3時(shí),判斷MAC字段中上層協(xié)議的類型標(biāo)志,如果為IP數(shù)據(jù)包繼續(xù)保持在READ狀態(tài),counter+1;當(dāng)counter=4時(shí) 進(jìn)行判斷數(shù)據(jù)包中協(xié)議字段的如果為未編碼的IP數(shù)據(jù)包則保存在該狀態(tài),counter+1;

  當(dāng)滿足counter=3時(shí)判斷上層協(xié)議類型標(biāo)志為非IP數(shù)據(jù)包,則直接跳轉(zhuǎn)到SEND狀態(tài);如果為已經(jīng)編碼的IP數(shù)據(jù)包既NCP數(shù)據(jù)包,則調(diào)整到SEND狀態(tài);

  當(dāng)counter=7的時(shí)候,跳轉(zhuǎn)到ADDNCPHEADER狀態(tài);數(shù)據(jù)處理完畢后state=SEND;

  當(dāng)暫存的數(shù)據(jù)包沒有發(fā)送完之前則保持在該狀態(tài);

  當(dāng)state=SEND時(shí),跳轉(zhuǎn)到SEND狀態(tài);

  當(dāng)暫存的數(shù)據(jù)包的字段發(fā)送完畢后,跳轉(zhuǎn)到CONSENCTIVEPASS(持續(xù)發(fā)包)狀態(tài)時(shí);

  判斷包尾的結(jié)束標(biāo)志,如果不是包尾的結(jié)束標(biāo)志則保持在該狀態(tài);

  判斷包尾的結(jié)束標(biāo)志,如果是包尾的結(jié)束標(biāo)志,則發(fā)最后一個(gè)字段,并跳轉(zhuǎn)到IDLE(起始狀態(tài));[!--empirenews.page--]

  3.4 解碼路由器詳細(xì)設(shè)計(jì)方案

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

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

  

 

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

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

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

  可用一個(gè)兩狀態(tài)的狀態(tài)機(jī)實(shí)現(xiàn):即輪詢判斷輸入和數(shù)據(jù)輸出:在FIFO非空時(shí)讀數(shù)據(jù),并根據(jù)數(shù)據(jù)包的類型發(fā)送到DRAM讀寫控制器或output fifo中,若是IP數(shù)據(jù)包,同時(shí)將信源號、代編號發(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結(jié)構(gòu)圖

  本模塊的結(jié)構(gòu)如圖3.4-2所示,由兩個(gè)輸入fifo和一個(gè)輸出仲裁器組成,兩個(gè)fifo緩存來自SRAM和input_arbiter的數(shù)據(jù)包,Output_arbiter的作用是將解碼后的數(shù)據(jù)發(fā)送到MAC層。由于對于非IP數(shù)據(jù)包我們并沒有對其進(jìn)行編碼,所以在解碼路由器中由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層空閑標(biāo)志

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ù)空閑標(biāo)志

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ù)空閑標(biāo)志

 

  3、decoded_reg_grp

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

  

 

  圖3.4-3:decoded_reg_grp模塊圖

端口列表:

信號名稱

位寬bits

I/O

描述

rd_dcod_reg_req_0

1

I

讀取解碼標(biāo)志位請求

rd_dcod_src_gen_0

12

I

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

req_ack_vld_0

1

O

輸出有效

alredy_decod_0

1

O

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

rd_dcod_reg_req_1

1

I

讀取解碼標(biāo)志位請求

rd_dcod_src_gen_1

12

I

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

req_ack_vld_1

1

O

輸出有效

alredy_decod_1

1

O

解碼標(biāo)志(為1時(shí)代表已經(jīng)解碼,為0時(shí)未解碼)

set_req

1

I

置位請求

set_src_gen

12

I

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

set_info_vld

1

I

置位信息有效

set_ack

1

O

置位請求響應(yīng)

reset_req

1

I

復(fù)位請求

reset_src_gen

12

I

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

reset_info_vld

1

I

復(fù)位信息有效

reset_ack

1

O

復(fù)位請求響應(yīng)

 ?、?讀解碼標(biāo)志

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

  

 

  圖3.4-4:讀解碼標(biāo)志位時(shí)序圖

 ?、?寫解碼標(biāo)志位

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

  

 

  圖3.4-5:置位解碼標(biāo)志寄存器

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

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

  

 

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

① DRAM控制器與DRAM的接口與讀寫時(shí)序:

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時(shí)序如圖3.4-7:

圖3.4-7 寫DRAM時(shí)序圖

 

讀端口:

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時(shí)序如圖3.4-8:

圖3.4-8 寫DRAM時(shí)序圖

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

當(dāng)DRAM讀寫控制器將一個(gè)數(shù)據(jù)包讀/寫完之后, 就將rd_idle/wr_rdy_arb置為1,當(dāng)外部模塊需要對DRAM進(jìn)行讀寫時(shí),首先要判斷這兩個(gè)信號是否有效,在有效的情況下進(jìn)行對數(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)當(dāng)decode_control_panel對DRAM控制器進(jìn)行讀操作時(shí),將信道號和block地址發(fā)送至DRAM控制器,接著DRAM控制器從DRAM中讀取數(shù)據(jù),當(dāng)decoder空閑時(shí)將數(shù)據(jù)發(fā)送出去,時(shí)序圖如3.4-9所示:

 

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

 

(2)當(dāng)DRAM控制器進(jìn)行寫操作時(shí),將按照input_arbiter發(fā)送過來的端口號,按照地址大小順序?qū)慏RAM,時(shí)序圖如3.4-10:

 

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

 

5、decode_control_panel

① 本模塊的內(nèi)部結(jié)構(gòu)圖如3.4-11所示,它由以下五個(gè)模塊組成:cam_info_save, decode_control_sm和3個(gè)CAM組成。

 

圖3.4-11:decode_control_panel內(nèi)部結(jié)構(gòu)圖

 

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

端口名稱

位寬  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準(zhǔn)備好

rd_idle

1

In

DRAM準(zhǔn)備好

block_num_rd

8

Out

讀DRAM的地址

addr_vld

1

Out

讀地址有效

port_num_rd

2

out

要讀取的DRAM的編號

Pkt_vld

1

Out

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

Pkt_decoding

12

out

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

Decod_com

1

In

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

has_other_factor

1

Out

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

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

讀解碼標(biāo)志寄存器請求

req_ack_vld_1

1

In

標(biāo)志位有效

Alredy_Decod_1

1

In

解碼標(biāo)志位

rd_dcod_src_gen_1

12

out

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

 

② cam_info_save:

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

 

圖3.4-12:CAM讀寫過程[!--empirenews.page--]

③decode_control_sm

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

 

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

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

  6、decoder

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

  

 

  圖3.4-14 decoder整體結(jié)構(gòu)圖

  

 

  圖3.4-15:decoder內(nèi)部結(jié)構(gòu)圖

 ?、?header_parser

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

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

  

 

  圖3.4-16:header_parser模塊圖

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

信號名稱

位寬bits

I/O

描述

in_rdy

1

O

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

out_data

64

I

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

out_ctrl

8

I

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

data_vld

1

I

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

rd_dcod_reg_req_0

1

O

讀取解碼標(biāo)志位請求

rd_dcod_src_gen_0

12

O

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

req_ack_vld_0

1

I

輸入有效

alredy_decod_0

1

I

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

Uncod_data

64

O

未編碼數(shù)據(jù)包的數(shù)據(jù)總線

Uncod_ctrl

8

O

未編碼數(shù)據(jù)包的控制總線

Wr_vld

1

O

寫capsulation數(shù)據(jù)有效

Out_rdy

1

I

輸出capsulation允許信號

fwd_rdy

1

I

輸出fwd_sel允許信號

out_vld

1

O

輸出fwd_sel有效

pay_load

64

O

輸出fwd_sel數(shù)據(jù)(不含包頭)

eop

4

O

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

uncod

1

O

指明輸出的數(shù)據(jù)包是否編碼

src_gen_num

12

O

Decoder接收到的數(shù)據(jù)包的信源號和代的編號

len_0

16

O

被編碼的第一個(gè)數(shù)據(jù)包的有效載荷的長度

len_1

16

O

被編碼的第二個(gè)數(shù)據(jù)包的有效載荷的長度

coef_0

8

O

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

coef_1

8

O

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

hp_info_vld

1

O

輸出信息有效

encod_pkt_trans_fi

1

O

編碼數(shù)據(jù)包傳輸完畢標(biāo)志

oc_info_vld

1

I

解碼控制輸入信息有效

uncod_pkt_need

1

I

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

 

 

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

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

 

② forwd_sel

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

 

本模塊的端口列表如下:

信號名稱

位寬bits

I/O

信號描述

fwd_rdy

1

O

輸入fwd_sel允許信號

out_vld

1

I

輸入fwd_sel有效

pay_load

64

I

輸入fwd_sel數(shù)據(jù)總線(不含包頭)

eop

4

I

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

uncod

1

I

指明輸出的數(shù)據(jù)包是否編碼

wr_req

1

O

寫RAM請求

encod_data

72

O

寫RAM的數(shù)據(jù)總線

ram_data_vld

1

O

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

encod_data_eop

4

O

數(shù)據(jù)包結(jié)束標(biāo)志,指明最后一個(gè)有效字節(jié)

wr_ack

1

I

寫RAM響應(yīng)

uncod_data_vld

1

O

輸出至dcod_operation的數(shù)據(jù)有效

uncod_data_factor

64

O

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

uncod_data_eop

4

O

數(shù)據(jù)包結(jié)束標(biāo)志,指明最后一個(gè)有效字節(jié)

dcod_rdy

1

I

輸出至dcod_operation允許信號

fd_back_ack

1

O

接受反饋響應(yīng)

fd_back_vld

1

I

反饋數(shù)據(jù)有效標(biāo)志

fd_back_req

1

I

反饋請求

fd_back_data

64

I

反饋數(shù)據(jù)總線

fd_back_data_eop

4

I

反饋數(shù)據(jù)結(jié)束標(biāo)志,指明最后一個(gè)有效字節(jié)

 

③ RAM讀寫控制器

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

 

信號名稱

位寬bits

I/O

信號描述

wr_req

1

I

寫RAM請求

encod_data

72

I

寫RAM的數(shù)據(jù)總線

ram_data_vld

1

I

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

encod_data_eop

4

I

數(shù)據(jù)包結(jié)束標(biāo)志,指明最后一個(gè)有效字節(jié)

wr_ack

1

O

寫RAM響應(yīng)

wr_ram_num

2

I

要寫入的RAM號

info_vld

1

I

數(shù)據(jù)有效標(biāo)志

req_ram_num

1

O

讀RAM號請求

rd_ram_num

2

I

需要讀取數(shù)據(jù)的RAM號

rd_req

1

I

讀RAM請求

ram_data_eop

4

O

數(shù)據(jù)包結(jié)束標(biāo)志,指明最后一個(gè)有效字節(jié)

ram_data

72

O

讀RAM的數(shù)據(jù)總線

ram_vld

1

O

讀RAM數(shù)據(jù)有效

 

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

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

 

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

④ operation_control

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

輸入輸出信號列表:

信號名稱

位寬bits

I/O

信號描述

Pkt_vld

1

I

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

Pkt_decoding

12

I

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

Decod_com

1

O

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

has_other_factor

1

I

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

Pkt_not_find

1

I

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

pkt_need_src_gen

12

O

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

need_pkt_vld

1

O

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

src_gen_num

12

I

Decoder接收到的數(shù)據(jù)包的信源號和代的編號

len_0

16

I

被編碼的第一個(gè)數(shù)據(jù)包的有效載荷的長度

len_1

16

I

被編碼的第二個(gè)數(shù)據(jù)包的有效載荷的長度

coef_0

8

I

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

coef_1

8

I

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

hp_info_vld

1

I

輸入信息有效

encod_pkt_trans_fi

1

I

編碼數(shù)據(jù)包傳輸完畢標(biāo)志

oc_info_vld

1

O

解碼控制輸出信息有效

uncod_pkt_need

1

O

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

wr_ram_num

2

O

要寫入的RAM號

info_vld

1

O

數(shù)據(jù)有效標(biāo)志

req_ram_num

1

I

讀RAM號請求

rd_info_req

1

I

讀取解碼信息請求

dcod_info_vld

1

O

解碼信息有效

ram_num

2

O

解碼數(shù)據(jù)包的所存儲(chǔ)的RAM號

coef_mut

8

O

乘法系數(shù)

coef_div

8

O

除法系數(shù)

cap_info_req

1

I

封裝信息請求

dcod_comp

1

I

解碼封裝完成

cap_info_vld

1

O

封裝信息有效

need_feed_back

1

O

需要反饋

pkt_len

16

O

數(shù)據(jù)包長度

src_num

4

O

數(shù)據(jù)包的信源號

gen_num

8

O

數(shù)據(jù)報(bào)的代編號

 

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

 

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

 

⑤ decode operation

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

 

信號名稱

位寬bits

I/O

信號描述

dcod_payload

64

O

解碼后的數(shù)據(jù)包的有效載荷

end_payload

4

O

數(shù)據(jù)包結(jié)束標(biāo)志,指明最后一個(gè)有效字節(jié)

payload_vld

1

O

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

wr_rdy

1

I

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

uncod_data_vld

1

I

輸入至dcod_operation的數(shù)據(jù)有效

uncod_data_factor

64

I

輸入至dcod_operation的數(shù)據(jù)總線

uncod_data_eop

4

I

數(shù)據(jù)包結(jié)束標(biāo)志,指明最后一個(gè)有效字節(jié)

dcod_rdy

1

O

輸入至dcod_operation允許信號

rd_ram_num

2

O

需要讀取數(shù)據(jù)的RAM號

rd_req

1

O

讀RAM請求

ram_data_eop

4

I

數(shù)據(jù)包結(jié)束標(biāo)志,指明最后一個(gè)有效字節(jié)

ram_data

72

I

讀RAM的數(shù)據(jù)總線

ram_vld

1

I

讀RAM數(shù)據(jù)有效

rd_info_req

1

O

讀取解碼信息請求

dcod_info_vld

1

I

解碼信息有效

ram_num

2

I

解碼數(shù)據(jù)包的所存儲(chǔ)的RAM號

coef_mut

8

I

乘法系數(shù)

coef_div

8

I

除法系數(shù)

 

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

圖3.4-20 decoder_operation內(nèi)部的并行除法

⑥ capsulation

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

 

端口信號列表如下:

信號名稱

位寬bits

I/O

信號描述

decoder_in_rdy

1

I

輸出至SRAM允許信號

decoder_in_wr

1

O

輸出有效

decoder_in_data

64

O

輸出至SRAM數(shù)據(jù)總線

decoder_in_ctrl

8

O

輸出至SRAM控制總線

set_req

1

O

置位請求

set_src_gen

12

O

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

set_info_vld

1

O

置位信息有效

set_ack

1

I

置位請求響應(yīng)

cap_info_req

1

O

封裝信息請求

dcod_comp

1

O

解碼封裝完成

cap_info_vld

1

I

封裝信息有效

need_feed_back

1

I

需要反饋

pkt_len

16

I

數(shù)據(jù)包長度

src_num

4

I

數(shù)據(jù)包的信源號

gen_num

8

I

數(shù)據(jù)報(bào)的代編號

dcod_payload

64

I

解碼后的數(shù)據(jù)包的有效載荷

end_payload

4

I

數(shù)據(jù)包結(jié)束標(biāo)志,指明最后一個(gè)有效字節(jié)

payload_vld

1

I

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

wr_rdy

1

O

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

fd_back_ack

1

I

接受反饋響應(yīng)

fd_back_vld

1

O

反饋數(shù)據(jù)有效標(biāo)志

fd_back_req

1

O

反饋請求

fd_back_data

64

O

反饋數(shù)據(jù)總線

fd_back_data_eop

4

O

反饋數(shù)據(jù)結(jié)束標(biāo)志,指明最后一個(gè)有效字節(jié)

Uncod_data

64

I

未編碼數(shù)據(jù)包的數(shù)據(jù)總線

Uncod_ctrl

8

I

未編碼數(shù)據(jù)包的控制總線

Wr_vld

1

I

寫capsulation數(shù)據(jù)有效

Out_rdy

1

O

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

 

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

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

 

7、SRAM讀寫控制器

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

 

SRAM讀寫控制器的端口列表如下:

信號名稱

位寬bits

I/O

信號描述

decoder_in_rdy

1

O

寫SRAM控制器允許信號

decoder_in_wr

1

I

輸入有效

decoder_in_data

64

I

輸入至SRAM控制器數(shù)據(jù)總線

decoder_in_ctrl

8

I

輸入至SRAM控制器控制總線

reset_req

1

O

復(fù)位請求

reset_src_gen

12

O

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

reset_info_vld

1

O

復(fù)位信息有效

reset_ack

1

I

復(fù)位請求響應(yīng)

dcod_data_0

64

O

輸出的IP數(shù)據(jù)包的數(shù)據(jù)總線

dcod_ctrl_0

8

O

輸出的IP數(shù)據(jù)包的控制總線

wr_vld_0

1

O

輸出有效

wr_rdy_0

1

I

發(fā)送數(shù)據(jù)允許標(biāo)志

sram_addr

19

O

Sram讀/寫地址

sram_we

1

O

Sram寫使能

sram_bw

4

O

SRAM寫入控制信號

sram_wr_data

36

O

SRAM寫數(shù)據(jù)總線

sram_rd_data

36

I

SRAM讀數(shù)據(jù)總線

sram_tri_en

1

O

SRAM寫三態(tài)控制

 

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

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

 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉