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

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /an-fpga-implementation-of-low-latency-noc-based-mpsoc
    from Rev 14 to Rev 15
    Reverse comparison

Rev 14 → Rev 15

/trunk/noc_based_mpsoc/src/NoC/route_compute.v
29,7 → 29,7
BALANCE_DOR: The packet always move to the dimension with higher
differences value.
SUDO_XY : its an adaptive version of classic xy. First one dimension in x
ADAPTIVE_XY : its an adaptive version of classic xy. First one dimension in x
and another in y with less number of nodes is selected then the
packet is forwarded to the dimension with less congestion.
44,7 → 44,7
 
module look_ahead_routing_sync #(
parameter TOPOLOGY = "TORUS", // "MESH" or "TORUS"
parameter ROUTE_ALGRMT = "XY_CLASSIC", //"XY_CLASSIC" or "BALANCE_DOR" or "SUDO_XY"
parameter ROUTE_ALGRMT = "XY_CLASSIC", //"XY_CLASSIC" or "BALANCE_DOR" or "ADAPTIVE_XY"
parameter PORT_NUM = 5,
parameter X_NODE_NUM = 4,
parameter Y_NODE_NUM = 3,
124,7 → 124,7
***************************************************/
module conventional_routing #(
parameter TOPOLOGY = "TORUS", // "MESH" or "TORUS"
parameter ROUTE_ALGRMT = "BALANCE_DOR",//"XY_CLASSIC" or "BALANCE_DOR" or "SUDO_XY"
parameter ROUTE_ALGRMT = "BALANCE_DOR",//"XY_CLASSIC" or "BALANCE_DOR" or "ADAPTIVE_XY"
parameter PORT_NUM = 5,
parameter X_NODE_NUM = 4,
parameter Y_NODE_NUM = 4,
177,13 → 177,13
.port_num_out (port_num_out)// one extra bit will be removed by switch_in latter
);
end else if (ROUTE_ALGRMT == "SUDO_XY") begin : sudo_routing_blk
sudo_xy_routing #(
end else if (ROUTE_ALGRMT == "ADAPTIVE_XY") begin : sudo_routing_blk
ADAPTIVE_XY_routing #(
.TOPOLOGY (TOPOLOGY),
.PORT_NUM (PORT_NUM),
.X_NODE_NUM (X_NODE_NUM),
.Y_NODE_NUM (Y_NODE_NUM)
) sudo_xy
) ADAPTIVE_XY
(
.congestion_cmp_i (congestion_cmp_i),
.current_router_x_addr (current_router_x_addr),
210,7 → 210,7
 
module route_compute #(
parameter TOPOLOGY = "TORUS", // "MESH" or "TORUS"
parameter ROUTE_ALGRMT = "BALANCE_DOR",//"XY_CLASSIC" or "BALANCE_DOR" or "SUDO_XY"
parameter ROUTE_ALGRMT = "BALANCE_DOR",//"XY_CLASSIC" or "BALANCE_DOR" or "ADAPTIVE_XY"
parameter PORT_NUM = 5,
parameter X_NODE_NUM = 4,
parameter Y_NODE_NUM = 4,
257,16 → 257,20
localparam E_VS_N = 1;
localparam E_VS_S = 0;
localparam EAST_PORT_W_VS_S = 0;
localparam EAST_PORT_W_VS_N = 1;
localparam NORTH_PORT_E_VS_S = 2;
localparam NORTH_PORT_W_VS_S = 3;
localparam WEST_PORT_E_VS_S = 4;
localparam WEST_PORT_E_VS_N = 5;
localparam SOUTH_PORT_E_VS_N = 6;
localparam SOUTH_PORT_W_VS_N = 7;
localparam EAST_PORT_E_VS_S = 0;
localparam EAST_PORT_E_VS_N = 1;
localparam NORTH_PORT_E_VS_N = 2;
localparam NORTH_PORT_W_VS_N = 3;
localparam WEST_PORT_W_VS_S = 4;
localparam WEST_PORT_W_VS_N = 5;
localparam SOUTH_PORT_E_VS_S = 6;
localparam SOUTH_PORT_W_VS_S = 7;
//get next router address
always @(*) begin
274,33 → 278,36
LOCAL :begin
next_router_x_addr= CURRENT_X_ADDR;
next_router_y_addr= CURRENT_Y_ADDR;
dst_congestion = {congestion_cmp_i[EAST_PORT_W_VS_S],congestion_cmp_i[EAST_PORT_W_VS_N ],congestion_cmp_i[WEST_PORT_E_VS_N ],congestion_cmp_i[NORTH_PORT_E_VS_S]};
dst_congestion = {congestion_cmp_i[WEST_PORT_W_VS_S],congestion_cmp_i[WEST_PORT_W_VS_N ],congestion_cmp_i[EAST_PORT_E_VS_N ],congestion_cmp_i[EAST_PORT_E_VS_S]};
end
EAST: begin
next_router_x_addr= (SW_X_ADDR==LAST_X_ADDR ) ? {X_NODE_NUM_WIDTH{1'b0}} : CURRENT_X_ADDR+1'b1;
next_router_y_addr= CURRENT_Y_ADDR;
dst_congestion = {congestion_cmp_i[EAST_PORT_W_VS_S],congestion_cmp_i[EAST_PORT_W_VS_N],2'b00};
dst_congestion = {2'b00,congestion_cmp_i[EAST_PORT_E_VS_N],congestion_cmp_i[EAST_PORT_E_VS_S]};
end
NORTH: begin
next_router_x_addr= CURRENT_X_ADDR;
next_router_y_addr= (SW_Y_ADDR==0)? LAST_Y_ADDR : CURRENT_Y_ADDR-1'b1;
dst_congestion = {congestion_cmp_i[NORTH_PORT_W_VS_S],2'b00,congestion_cmp_i[NORTH_PORT_E_VS_S]};
dst_congestion = {1'b0,congestion_cmp_i[NORTH_PORT_W_VS_N],congestion_cmp_i[NORTH_PORT_E_VS_N],1'b0};
end
WEST: begin
next_router_x_addr= (SW_X_ADDR==0) ? LAST_X_ADDR : CURRENT_X_ADDR-1'b1;
next_router_y_addr= CURRENT_Y_ADDR;
dst_congestion = {2'b00,congestion_cmp_i[WEST_PORT_E_VS_N],congestion_cmp_i[WEST_PORT_E_VS_S]};
dst_congestion = {congestion_cmp_i[WEST_PORT_W_VS_S],congestion_cmp_i[WEST_PORT_W_VS_N],2'b00};
end
SOUTH: begin
next_router_x_addr= CURRENT_X_ADDR;
next_router_y_addr= (SW_Y_ADDR== LAST_Y_ADDR ) ? {Y_NODE_NUM_WIDTH{1'b0}}: CURRENT_Y_ADDR+1'b1;
dst_congestion = {1'b0,congestion_cmp_i[SOUTH_PORT_W_VS_N],congestion_cmp_i[SOUTH_PORT_E_VS_N],1'b0};
dst_congestion = {congestion_cmp_i[SOUTH_PORT_W_VS_S],2'b00,congestion_cmp_i[SOUTH_PORT_E_VS_S]};
end
default begin
next_router_x_addr= {X_NODE_NUM_WIDTH{1'bX}};
next_router_y_addr= {Y_NODE_NUM_WIDTH{1'bX}};
dst_congestion = {congestion_cmp_i[EAST_PORT_W_VS_S],congestion_cmp_i[EAST_PORT_W_VS_N ],congestion_cmp_i[WEST_PORT_E_VS_N ],congestion_cmp_i[NORTH_PORT_E_VS_S]};
dst_congestion = {congestion_cmp_i[WEST_PORT_W_VS_S],congestion_cmp_i[WEST_PORT_W_VS_N ],congestion_cmp_i[EAST_PORT_E_VS_N ],congestion_cmp_i[EAST_PORT_E_VS_S]};
end
endcase
end//always
743,12 → 750,12
/********************************
sudo_xy
ADAPTIVE_XY
********************************/
module sudo_xy_routing #(
module ADAPTIVE_XY_routing #(
parameter TOPOLOGY = "MESH",//"TORUS"
parameter PORT_NUM = 5,
parameter X_NODE_NUM = 4,
771,11 → 778,11
`LOG2
generate
if(TOPOLOGY == "MESH") begin
sudo_xy_mesh_routing #(
ADAPTIVE_XY_mesh_routing #(
.PORT_NUM (PORT_NUM),
.X_NODE_NUM (X_NODE_NUM),
.Y_NODE_NUM (Y_NODE_NUM)
)sudo_xy_mesh
)ADAPTIVE_XY_mesh
(
.congestion_cmp_i (congestion_cmp_i),
.current_router_x_addr (current_router_x_addr),
786,11 → 793,11
);
end else if(TOPOLOGY == "TORUS") begin
sudo_xy_torus_routing #(
ADAPTIVE_XY_torus_routing #(
.PORT_NUM (PORT_NUM),
.X_NODE_NUM (X_NODE_NUM),
.Y_NODE_NUM (Y_NODE_NUM)
)sudo_xy_mesh
)ADAPTIVE_XY_mesh
(
.congestion_cmp_i (congestion_cmp_i),
.current_router_x_addr (current_router_x_addr),
807,13 → 814,13
/********************************
sudo_xy_mesh_routing
ADAPTIVE_XY_mesh_routing
********************************/
module sudo_xy_mesh_routing #(
module ADAPTIVE_XY_mesh_routing #(
parameter TOPOLOGY = "TORUS", // "MESH" or "TORUS"
parameter PORT_NUM = 5,
parameter X_NODE_NUM = 4,
909,12 → 916,12
 
/**********************************
sudo_xy_torus_routing
ADAPTIVE_XY_torus_routing
***********************************/
module sudo_xy_torus_routing #(
module ADAPTIVE_XY_torus_routing #(
parameter PORT_NUM = 5,
parameter X_NODE_NUM = 4,
parameter Y_NODE_NUM = 3,
/trunk/noc_based_mpsoc/src/IP_core/aeMB_mpsoc.v
80,7 → 80,7
NI pins are written in tasks.V file */
//noc parameter
parameter TOPOLOGY = `TOPOLOGY_DEF,
parameter ROUTE_ALGRMT = `ROUTE_ALGRMT_DEF, //"XY" or "MINIMAL"
parameter ROUTE_ALGRMT = `ROUTE_ALGRMT_DEF,
parameter VC_NUM_PER_PORT = `VC_NUM_PER_PORT_DEF ,
parameter PYLD_WIDTH = `PYLD_WIDTH_DEF,
parameter BUFFER_NUM_PER_VC = `BUFFER_NUM_PER_VC_DEF,
/trunk/noc_based_mpsoc/src/MPSoC_top.v
39,7 → 39,7
NI pins are written in tasks.V file */
//noc parameter
parameter TOPOLOGY = `TOPOLOGY_DEF,
parameter ROUTE_ALGRMT = `ROUTE_ALGRMT_DEF, //"XY_CLASSIC" or "BALANCE_DOR" or "SUDO_XY"
parameter ROUTE_ALGRMT = `ROUTE_ALGRMT_DEF, //"XY_CLASSIC" or "BALANCE_DOR" or "ADAPTIVE_XY"
parameter VC_NUM_PER_PORT = `VC_NUM_PER_PORT_DEF ,
parameter PYLD_WIDTH = `PYLD_WIDTH_DEF,
parameter BUFFER_NUM_PER_VC = `BUFFER_NUM_PER_VC_DEF,
/trunk/noc_based_mpsoc/src/define.v
37,7 → 37,7
********************************************************************/
//define the topology: "MESH" or "TORUS"
`define TOPOLOGY_DEF "MESH"
//define the routing algorithm : "XY_CLASSIC" or "BALANCE_DOR" or "SUDO_XY"
//define the routing algorithm : "XY_CLASSIC" or "BALANCE_DOR" or "ADAPTIVE_XY"
`define ROUTE_ALGRMT_DEF "XY_CLASSIC"
// The number of virtual channel (VC) for each individual physical channel. this value must be power of 2. The typical value is two and four.
`define VC_NUM_PER_PORT_DEF 2

powered by: WebSVN 2.1.0

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