新聞中心

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

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

        作者: 時間:2018-08-31 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/201808/388146.htm

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

          3.4.1 解碼路由器系統整體模塊圖

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

          

          3.4-1 解碼路由器系統整體模塊圖

          3.4.2系統中各單元模塊的功能與時序

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

          可用一個兩狀態的狀態機實現:即輪詢判斷輸入和數據輸出:在FIFO非空時讀數據,并根據數據包的類型發送到DRAM讀寫控制器或output fifo中,若是IP數據包,同時將信源號、代編號發送給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

        數據的接收端口號

        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的數據包,Output_arbiter的作用是將解碼后的數據發送到MAC層。由于對于非IP數據包我們并沒有對其進行編碼,所以在解碼路由器中由input_arbiter判斷后直接輸出output_arbiter;對于編碼后的IP數據包,在解碼后先暫存到SRAM中,再發送出去。本模塊就是輪流判斷并接收來自SRAM和input_arbiter的數據,并將數據包發送到MAC層。

        輸入輸出信號列表:

        信號名稱

        位寬bits

        I/O

        描述

        out_data_3

        64

        O

        輸出至MAC層的數據總線

        out_ctrl_3

        8

        O

        輸出至MAC層的控制總線

        out_wr_3

        1

        O

        輸出有效

        out_rdy_3

        1

        I

        MAC層空閑標志

        dcod_data_0

        64

        I

        已經解碼的IP數據包的數據總線

        dcod_ctrl_0

        8

        I

        已經解碼的IP數據包的控制總線

        wr_vld_0

        1

        I

        寫有效

        wr_rdy_0

        1

        O

        接收數據空閑標志

        non_ip_data

        64

        I

        非IP數據包數據總線

        non_ip_ctrl

        8

        I

        非IP數據包控制總線

        wr_vld_1

        1

        I

        寫有效

        wr_rdy_1

        1

        O

        接收數據空閑標志

          3、decoded_reg_grp

          本模塊分別與decode_control_panel,decoder和SRAM_contrl相連接,主要作用是記錄信源的某代數據包是否已經解碼,并將相應的解碼信息輸出給其他模塊,模塊結構如圖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

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

        req_ack_vld_0

        1

        O

        輸出有效

        alredy_decod_0

        1

        O

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

        rd_dcod_reg_req_1

        1

        I

        讀取解碼標志位請求

        rd_dcod_src_gen_1

        12

        I

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

        req_ack_vld_1

        1

        O

        輸出有效

        alredy_decod_1

        1

        O

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

        set_req

        1

        I

        置位請求

        set_src_gen

        12

        I

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

        set_info_vld

        1

        I

        置位信息有效

        set_ack

        1

        O

        置位請求響應

        reset_req

        1

        I

        復位請求

        reset_src_gen

        12

        I

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

        reset_info_vld

        1

        I

        復位信息有效

        reset_ack

        1

        O

        復位請求響應

          ① 讀解碼標志

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

          

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

          ② 寫解碼標志位

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

          

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

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

          注意:我們將DRAM分為三塊,分別對應于數據接收的三個信道,即第0個信道的數據存儲到DRAM的第0塊,第1個信道的數據存儲到DRAM的第1塊……信道號由port_num給出。由于DRAM是按照block讀寫的,因此每個block大小為2034字節,位寬為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讀寫控制器將一個數據包讀/寫完之后, 就將rd_idle/wr_rdy_arb置為1,當外部模塊需要對DRAM進行讀寫時,首先要判斷這兩個信號是否有效,在有效的情況下進行對數據的操作。.端口列表如下:

        信號名稱

        位寬bits

        I/O

        描述

        wr_vld_arb

        1

        I

        Input_arbiter輸入有效

        out_data_0

        64

        I

        輸入的數據包的data_bus

        out_ctrl_0

        8

        I

        輸入數據包的ctrl_bus

        port_num_dram

        2

        I

        輸入信號的端口號,指明數據存放在DRAM的區域

        wr_rdy_arb

        1

        O

        寫空閑信號

        port_num_rd

        2

        I

        讀取數據包的區域

        addr_vld

        1

        I

        讀地址有效

        block_num_rd

        8

        I

        數據包存放的block的起始地址

        rd_idle

        1

        O

        讀空閑信號

        in_rdy

        1

        I

        數據輸出輸出允許信號

        out_data

        64

        O

        讀出的數據包的data_bus

        out_ctrl

        8

        O

        輸出數據包的ctrl_bus

        data_vld

        1

        O

        輸出數據有效

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

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

        (2)當DRAM控制器進行寫操作時,將按照input_arbiter發送過來的端口號,按照地址大小順序寫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

        數據寫入的CAM號,即信道號

        Src_gen_seq

        24

        In

        輸入數據包的信源號、代編號

        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

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

        Pkt_decoding

        12

        out

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

        Decod_com

        1

        In

        數據包解碼完成標志

        has_other_factor

        1

        Out

        有另外一個解碼因子

        Pkt_not_find

        1

        Out

        所需要解碼數據包未找到

        pkt_need_src_gen

        12

        In

        解碼需要的數據包

        need_pkt_vld

        1

        In

        所需數據包有效

        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

        查詢數據包是否已經解碼

        ② cam_info_save:

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

        圖3.4-12:CAM讀寫過程



        關鍵詞: 通信

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 望城县| 平罗县| 友谊县| 小金县| 全州县| 东光县| 汤阴县| 迭部县| 辽源市| 夏津县| 德江县| 江油市| 苗栗市| 迭部县| 怀安县| 额敏县| 深水埗区| 嫩江县| 长乐市| 无为县| 定远县| 深州市| 凉山| 灵川县| 新巴尔虎左旗| 荣昌县| 呼和浩特市| 喀喇沁旗| 通渭县| 玉山县| 西青区| 赤壁市| 女性| 来安县| 金堂县| 红原县| 高雄县| 平定县| 依安县| 莱阳市| 韶关市|