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
|
|
|
|
|