OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [rtl/] [src_noc/] [pronoc_pkg.sv] - Diff between revs 48 and 54

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 48 Rev 54
Line 1... Line 1...
`timescale     1ns/1ps
`include "pronoc_def.v"
/****************************************************************************
/****************************************************************************
 * pronoc_pkg.sv
 * pronoc_pkg.sv
 ****************************************************************************/
 ****************************************************************************/
 
 
package pronoc_pkg;
package pronoc_pkg;
 
 
 
 
 
 
 
 
 
 
`define NOC_LOCAL_PARAM
`define NOC_LOCAL_PARAM
`include "noc_localparam.v"
`include "noc_localparam.v"
 
 
`define  INCLUDE_TOPOLOGY_LOCALPARAM
 
`include "topology_localparam.v"
 
 
 
 
 
 
 
 
`define  INCLUDE_TOPOLOGY_LOCALPARAM
 
`include "topology_localparam.v"
 
 
 
 
 
 
localparam
localparam
        Vw=  log2(V),
        Vw=  log2(V),
        Cw=  (C==0)? 1 : log2(C),
        Cw=  (C==0)? 1 : log2(C),
Line 24... Line 28...
        WRRA_CONFIG_INDEX=0,
        WRRA_CONFIG_INDEX=0,
        SMART_EN = (SMART_MAX !=0),
        SMART_EN = (SMART_MAX !=0),
        SMART_NUM= (SMART_EN) ? SMART_MAX : 1,
        SMART_NUM= (SMART_EN) ? SMART_MAX : 1,
        NEV  = NE * V,
        NEV  = NE * V,
        T4 = 0,
        T4 = 0,
        BEw = (BYTE_EN)? log2(Fpay/8) : 1,
        BEw = (BYTE_EN)? log2(Fpay/8) : 1;
        DELAYw = EAw+2; //Injector start delay counter width
 
 
 
 
 
 localparam CONGw= (CONGESTION_INDEX==3)?  3:
 localparam CONGw= (CONGESTION_INDEX==3)?  3:
                      (CONGESTION_INDEX==5)?  3:
                      (CONGESTION_INDEX==5)?  3:
                      (CONGESTION_INDEX==7)?  3:
                      (CONGESTION_INDEX==7)?  3:
Line 38... Line 42...
                      (CONGESTION_INDEX==12)? 3:2;
                      (CONGESTION_INDEX==12)? 3:2;
 
 
 
 
 localparam
 localparam
        E_SRC_LSB =0,                   E_SRC_MSB = E_SRC_LSB + EAw-1,
        E_SRC_LSB =0,                   E_SRC_MSB = E_SRC_LSB + EAw-1,
        E_DST_LSB = E_SRC_MSB +1,       E_DST_MSB = E_DST_LSB + EAw-1,
        E_DST_LSB = E_SRC_MSB +1,       E_DST_MSB = E_DST_LSB + DAw-1,
        DST_P_LSB = E_DST_MSB + 1,      DST_P_MSB = DST_P_LSB + DSTPw-1,
        DST_P_LSB = E_DST_MSB + 1,      DST_P_MSB = DST_P_LSB + DSTPw-1,
        CLASS_LSB = DST_P_MSB + 1,      CLASS_MSB = CLASS_LSB + Cw -1,
        CLASS_LSB = DST_P_MSB + 1,      CLASS_MSB = CLASS_LSB + Cw -1,
        MSB_CLASS = (C>1)? CLASS_MSB : DST_P_MSB,
        MSB_CLASS = (C>1)? CLASS_MSB : DST_P_MSB,
        WEIGHT_LSB= MSB_CLASS + 1,      WEIGHT_MSB = WEIGHT_LSB + WEIGHTw -1,
        WEIGHT_LSB= MSB_CLASS + 1,      WEIGHT_MSB = WEIGHT_LSB + WEIGHTw -1,
        /* verilator lint_off WIDTH */
        /* verilator lint_off WIDTH */
Line 177... Line 181...
                logic ivc_req; // input vc is not empty
                logic ivc_req; // input vc is not empty
                logic flit_is_tail;
                logic flit_is_tail;
                logic assigned_ovc_not_full;
                logic assigned_ovc_not_full;
                logic [V-1  : 0] candidate_ovc;
                logic [V-1  : 0] candidate_ovc;
                logic [Cw-1 : 0] class_num;
                logic [Cw-1 : 0] class_num;
 
                logic single_flit_pck;
 
 
        } ivc_info_t;
        } ivc_info_t;
        localparam  IVC_INFO_w = $bits( ivc_info_t);
        localparam  IVC_INFO_w = $bits( ivc_info_t);
 
 
        localparam      CREDITw  = (LB>B)?  log2(LB+1) : log2(B+1);
        localparam      CREDITw  = (LB>B)?  log2(LB+1) : log2(B+1);
Line 204... Line 209...
* router_chanels
* router_chanels
*********************/
*********************/
 
 
        typedef struct packed {
        typedef struct packed {
                logic [EAw-1    : 0] src_e_addr;
                logic [EAw-1    : 0] src_e_addr;
                logic [EAw-1    : 0] dest_e_addr;
                logic [DAw-1    : 0] dest_e_addr;
                logic [DSTPw-1  : 0] destport;
                logic [DSTPw-1  : 0] destport;
                logic [Cw-1             : 0] message_class;
                logic [Cw-1             : 0] message_class;
                logic [WEIGHTw-1: 0] weight;
                logic [WEIGHTw-1: 0] weight;
                logic [BEw-1    : 0] be;
                logic [BEw-1    : 0] be;
        } hdr_flit_t;
        } hdr_flit_t;
Line 228... Line 233...
 
 
        localparam
        localparam
                Fw = FLIT_w,
                Fw = FLIT_w,
                NEFw = NE *Fw;
                NEFw = NE *Fw;
 
 
 
 
 
 
        typedef struct packed {
        typedef struct packed {
                logic  flit_wr;
                logic  flit_wr;
                logic  [V-1 :  0]  credit;
                logic  [V-1 :  0]  credit;
                flit_t  flit;
                flit_t  flit;
                logic  [CONGw-1 :  0]  congestion;
                logic  [CONGw-1 :  0]  congestion;
        } flit_chanel_t;
        } flit_chanel_t;
        localparam FLIT_CHANEL_w = $bits(flit_chanel_t);
        localparam FLIT_CHANEL_w = $bits(flit_chanel_t);
 
 
 
        localparam BYPASSw = log2(SMART_NUM+1);
        typedef struct packed {
        typedef struct packed {
                logic [SMART_NUM-1: 0] requests;
                logic [SMART_NUM-1: 0] requests;
                logic [V-1      : 0] ovc;
                logic [V-1      : 0] ovc;
                logic [EAw-1    : 0] dest_e_addr;
                logic [EAw-1    : 0] dest_e_addr;
                bit   hdr_flit;
                bit   hdr_flit;
 
                bit   flit_in_bypassed;
 
                logic [BYPASSw-1 : 0] bypassed_num;
        } smart_chanel_t;
        } smart_chanel_t;
        localparam SMART_CHANEL_w = $bits(smart_chanel_t);
        localparam SMART_CHANEL_w = $bits(smart_chanel_t);
 
 
 
 
        localparam CRDTw = (B>LB) ? log2(B+1) : log2(LB+1);
        localparam CRDTw = (B>LB) ? log2(B+1) : log2(LB+1);
        typedef struct packed {
        typedef struct packed {
 
                bit    endp_port;  // if it is one, it means the corresponding port is connected o an endpoint
                logic [RAw-1:   0]  neighbors_r_addr;
                logic [RAw-1:   0]  neighbors_r_addr;
                logic [V-1  :0] [CRDTw-1: 0] credit_init_val; // the connected port initial credit value. It is taken at reset time
                logic [V-1  :0] [CRDTw-1: 0] credit_init_val; // the connected port initial credit value. It is taken at reset time
 
                logic [V-1  :0] credit_release_en;
        } ctrl_chanel_t;
        } ctrl_chanel_t;
        localparam CTRL_CHANEL_w = $bits(ctrl_chanel_t);
        localparam CTRL_CHANEL_w = $bits(ctrl_chanel_t);
 
 
 
 
 
 
        typedef struct packed {
        typedef struct packed {
                flit_chanel_t    flit_chanel;
                flit_chanel_t    flit_chanel;
                smart_chanel_t   smart_chanel;
                smart_chanel_t   smart_chanel;
                ctrl_chanel_t    ctrl_chanel;
                ctrl_chanel_t    ctrl_chanel;
        } smartflit_chanel_t;
        } smartflit_chanel_t;
Line 268... Line 277...
 
 
 
 
/***********
/***********
 * simulation
 * simulation
 * **********/
 * **********/
 
 
 
        localparam DELAYw = EAw+2; //Injector start delay counter width
 
 
        typedef struct packed {
        typedef struct packed {
                integer   ip_num;
                integer   ip_num;
                bit send_enable;
                bit send_enable;
                integer  percentage; // x10
                integer  percentage; // x10
        } hotspot_t;
        } hotspot_t;
Line 288... Line 300...
 
 
 
 
        typedef struct packed {
        typedef struct packed {
                logic [PCK_INJ_Dw-1 : 0] data;
                logic [PCK_INJ_Dw-1 : 0] data;
                logic [PCK_SIZw-1 : 0] size;
                logic [PCK_SIZw-1 : 0] size;
                logic [EAw-1 : 0] endp_addr;
                logic [DAw-1 : 0] endp_addr;
                logic [Cw-1  : 0] class_num;
                logic [Cw-1  : 0] class_num;
                logic [WEIGHTw-1   : 0] init_weight;
                logic [WEIGHTw-1   : 0] init_weight;
                logic [V-1   : 0] vc;
                logic [V-1   : 0] vc;
                bit   pck_wr;
                bit   pck_wr;
                bit   [V-1   : 0] ready;
                bit   [V-1   : 0] ready;
                logic [DISTw-1 : 0] distance;
                logic [DISTw-1 : 0] distance;
                logic [15: 0]  h2t_delay;
                logic [15: 0]  h2t_delay;
    }   pck_injct_t;
    }   pck_injct_t;
    localparam PCK_INJCT_w = $bits(pck_injct_t);
    localparam PCK_INJCT_w = $bits(pck_injct_t);
 
 
 
    typedef struct packed {
 
        logic [BYPASSw-1 : 0] bypassed_num;
 
        bit flit_wr_i;
 
        bit pck_wr_i;
 
        bit flit_wr_o;
 
        bit pck_wr_o;
 
        bit flit_in_bypassed;
 
    } router_event_t;
 
    localparam ROUTER_EVENT_w = $bits(router_event_t);
 
 
 
 
endpackage : pronoc_pkg
endpackage : pronoc_pkg
 
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.