update to latest version
This commit is contained in:
@@ -36,5 +36,8 @@ run:
|
||||
run_regression:
|
||||
time ./simv +vcs+loopreport +dumpon=0 +self_finish=0
|
||||
|
||||
wave:
|
||||
Verdi-SX -ssf novas.fsdb
|
||||
|
||||
clean:
|
||||
rm -rf simv* csrc Verdi* novas* ucli.key
|
||||
@@ -1,6 +1,6 @@
|
||||
+incdir+$PROJ_ROOT/rtl/include
|
||||
+incdir+$PROJ_ROOT/tb
|
||||
|
||||
// $PROJ_ROOT/$L1D_ROOT/include/rvh_uncore_param_pkg.sv
|
||||
$PROJ_ROOT/rtl/include/rvh_noc_pkg.sv
|
||||
$PROJ_ROOT/tb/v_noc_pkg.sv
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
+incdir+$PROJ_ROOT/rtl/include
|
||||
+incdir+$PROJ_ROOT/tb
|
||||
+incdir+$PROJ_ROOT/rtl/rvh_noc/rtl/include
|
||||
+incdir+$PROJ_ROOT/rtl/rvh_noc/tb
|
||||
|
||||
$PROJ_ROOT/rtl/include/rvh_noc_pkg.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/include/rvh_noc_pkg.sv
|
||||
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffe.sv
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffr.sv
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffre.sv
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffrve.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffe.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffr.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffre.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffrve.sv
|
||||
|
||||
$PROJ_ROOT/rtl/util/usage_manager.sv
|
||||
$PROJ_ROOT/rtl/util/mp_fifo.sv
|
||||
@@ -26,22 +26,22 @@ $PROJ_ROOT/rtl/util/commoncell/src/Basic/hw/MuxOH.v
|
||||
$PROJ_ROOT/rtl/util/commoncell/src/Queue/hw/AgeMatrixSelector.v
|
||||
|
||||
// TODO: need to change to compiled dpsram
|
||||
$PROJ_ROOT/rtl/rtl/model/simple_dual_one_clock.v
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/model/simple_dual_one_clock.v
|
||||
|
||||
$PROJ_ROOT/rtl/input_port.sv
|
||||
$PROJ_ROOT/rtl/look_adead_routing.sv
|
||||
$PROJ_ROOT/rtl/output_port_vc_selection.sv
|
||||
$PROJ_ROOT/rtl/input_port_vc.sv
|
||||
$PROJ_ROOT/rtl/output_port_vc_assignment.sv
|
||||
$PROJ_ROOT/rtl/priority_req_select.sv
|
||||
$PROJ_ROOT/rtl/sa_global.sv
|
||||
$PROJ_ROOT/rtl/switch.sv
|
||||
$PROJ_ROOT/rtl/input_port_flit_decoder.sv
|
||||
$PROJ_ROOT/rtl/input_to_output.sv
|
||||
$PROJ_ROOT/rtl/output_port_vc_credit_counter.sv
|
||||
$PROJ_ROOT/rtl/sa_local.sv
|
||||
$PROJ_ROOT/rtl/performance_monitor.sv
|
||||
$PROJ_ROOT/rtl/vnet_router.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/look_adead_routing.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_selection.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port_vc.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_assignment.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/priority_req_select.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/sa_global.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/switch.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port_flit_decoder.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_to_output.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_credit_counter.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/sa_local.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/performance_monitor.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/vnet_router.sv
|
||||
|
||||
$PROJ_ROOT/tb/top_mesh_syn.sv
|
||||
// $PROJ_ROOT/tb/testbench.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/tb/top_mesh_syn.sv
|
||||
// $PROJ_ROOT/rtl/rvh_noc/tb/testbench.sv
|
||||
|
||||
33
tb/flist_mesh_3x3.f
Normal file
33
tb/flist_mesh_3x3.f
Normal file
@@ -0,0 +1,33 @@
|
||||
+incdir+$PROJ_ROOT/rtl/rvh_noc/rtl/include
|
||||
+incdir+$PROJ_ROOT/rtl/rvh_noc/tb
|
||||
|
||||
// $PROJ_ROOT/rtl/rvh_noc/rtl/include/rvh_noc_pkg.sv
|
||||
// $PROJ_ROOT/rtl/rvh_noc/tb/v_noc_pkg.sv
|
||||
|
||||
|
||||
|
||||
// TODO: need to change to compiled dpsram
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/model/simple_dual_one_clock.v
|
||||
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/look_adead_routing.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_selection.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port_vc.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_assignment.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/priority_req_select.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/sa_global.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/switch.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port_flit_decoder.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_to_output.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_credit_counter.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/sa_local.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/performance_monitor.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/vnet_router.sv
|
||||
|
||||
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/local_port_look_adead_routing.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/local_port_couple_module.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/hn_router_sam.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/rn_router_sam.sv
|
||||
$PROJ_ROOT/tb/ruby_testbench/rn_tile.sv
|
||||
$PROJ_ROOT/tb/ruby_testbench/hn_tile.sv
|
||||
@@ -1,12 +1,12 @@
|
||||
+incdir+$PROJ_ROOT/rtl/include
|
||||
+incdir+$PROJ_ROOT/tb
|
||||
+incdir+$PROJ_ROOT/rtl/rvh_noc/rtl/include
|
||||
+incdir+$PROJ_ROOT/rtl/rvh_noc/tb
|
||||
|
||||
$PROJ_ROOT/rtl/include/rvh_noc_pkg.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/include/rvh_noc_pkg.sv
|
||||
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffe.sv
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffr.sv
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffre.sv
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffrve.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffe.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffr.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffre.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffrve.sv
|
||||
|
||||
$PROJ_ROOT/rtl/util/usage_manager.sv
|
||||
$PROJ_ROOT/rtl/util/mp_fifo.sv
|
||||
@@ -26,34 +26,34 @@ $PROJ_ROOT/rtl/util/commoncell/src/Basic/hw/MuxOH.v
|
||||
$PROJ_ROOT/rtl/util/commoncell/src/Queue/hw/AgeMatrixSelector.v
|
||||
|
||||
// TODO: need to change to compiled dpsram
|
||||
$PROJ_ROOT/rtl/rtl/model/simple_dual_one_clock.v
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/model/simple_dual_one_clock.v
|
||||
|
||||
$PROJ_ROOT/rtl/input_port.sv
|
||||
$PROJ_ROOT/rtl/look_adead_routing.sv
|
||||
$PROJ_ROOT/rtl/output_port_vc_selection.sv
|
||||
$PROJ_ROOT/rtl/input_port_vc.sv
|
||||
$PROJ_ROOT/rtl/output_port_vc_assignment.sv
|
||||
$PROJ_ROOT/rtl/priority_req_select.sv
|
||||
$PROJ_ROOT/rtl/sa_global.sv
|
||||
$PROJ_ROOT/rtl/switch.sv
|
||||
$PROJ_ROOT/rtl/input_port_flit_decoder.sv
|
||||
$PROJ_ROOT/rtl/input_to_output.sv
|
||||
$PROJ_ROOT/rtl/output_port_vc_credit_counter.sv
|
||||
$PROJ_ROOT/rtl/sa_local.sv
|
||||
$PROJ_ROOT/rtl/performance_monitor.sv
|
||||
$PROJ_ROOT/rtl/vnet_router.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/look_adead_routing.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_selection.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port_vc.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_assignment.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/priority_req_select.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/sa_global.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/switch.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port_flit_decoder.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_to_output.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_credit_counter.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/sa_local.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/performance_monitor.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/vnet_router.sv
|
||||
|
||||
$PROJ_ROOT/tb/v_noc_pkg.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/tb/v_noc_pkg.sv
|
||||
$PROJ_ROOT/rtl/rvh_l1d/ruby/ut_lib.sv
|
||||
|
||||
$PROJ_ROOT/rtl/local_port_look_adead_routing.sv
|
||||
$PROJ_ROOT/rtl/local_port_couple_module.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/local_port_look_adead_routing.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/local_port_couple_module.sv
|
||||
|
||||
$PROJ_ROOT/tb/v_receiver.sv
|
||||
$PROJ_ROOT/tb/v_scoreboard.sv
|
||||
$PROJ_ROOT/tb/v_sender.sv
|
||||
$PROJ_ROOT/tb/v_test_generator.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/tb/v_receiver.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/tb/v_scoreboard.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/tb/v_sender.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/tb/v_test_generator.sv
|
||||
|
||||
|
||||
$PROJ_ROOT/tb/tb_single_router.sv
|
||||
// $PROJ_ROOT/tb/testbench.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/tb/tb_single_router.sv
|
||||
// $PROJ_ROOT/rtl/rvh_noc/tb/testbench.sv
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
+incdir+$PROJ_ROOT/rtl/include
|
||||
+incdir+$PROJ_ROOT/tb
|
||||
+incdir+$PROJ_ROOT/rtl/rvh_noc/rtl/include
|
||||
+incdir+$PROJ_ROOT/rtl/rvh_noc/tb
|
||||
|
||||
$PROJ_ROOT/rtl/include/rvh_noc_pkg.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/include/rvh_noc_pkg.sv
|
||||
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffe.sv
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffr.sv
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffre.sv
|
||||
$PROJ_ROOT/rtl/model/cells/std_dffrve.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffe.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffr.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffre.sv
|
||||
$PROJ_ROOT/$L1D_ROOT/models/cells/std_dffrve.sv
|
||||
|
||||
$PROJ_ROOT/rtl/util/usage_manager.sv
|
||||
$PROJ_ROOT/rtl/util/mp_fifo.sv
|
||||
@@ -26,22 +26,22 @@ $PROJ_ROOT/rtl/util/commoncell/src/Basic/hw/MuxOH.v
|
||||
$PROJ_ROOT/rtl/util/commoncell/src/Queue/hw/AgeMatrixSelector.v
|
||||
|
||||
// TODO: need to change to compiled dpsram
|
||||
$PROJ_ROOT/rtl/rtl/model/simple_dual_one_clock.v
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/model/simple_dual_one_clock.v
|
||||
|
||||
$PROJ_ROOT/rtl/input_port.sv
|
||||
$PROJ_ROOT/rtl/look_adead_routing.sv
|
||||
$PROJ_ROOT/rtl/output_port_vc_selection.sv
|
||||
$PROJ_ROOT/rtl/input_port_vc.sv
|
||||
$PROJ_ROOT/rtl/output_port_vc_assignment.sv
|
||||
$PROJ_ROOT/rtl/priority_req_select.sv
|
||||
$PROJ_ROOT/rtl/sa_global.sv
|
||||
$PROJ_ROOT/rtl/switch.sv
|
||||
$PROJ_ROOT/rtl/input_port_flit_decoder.sv
|
||||
$PROJ_ROOT/rtl/input_to_output.sv
|
||||
$PROJ_ROOT/rtl/output_port_vc_credit_counter.sv
|
||||
$PROJ_ROOT/rtl/sa_local.sv
|
||||
$PROJ_ROOT/rtl/performance_monitor.sv
|
||||
$PROJ_ROOT/rtl/vnet_router.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/look_adead_routing.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_selection.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port_vc.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_assignment.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/priority_req_select.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/sa_global.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/switch.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_port_flit_decoder.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/input_to_output.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/output_port_vc_credit_counter.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/sa_local.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/performance_monitor.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/rtl/vnet_router.sv
|
||||
|
||||
$PROJ_ROOT/tb/top_single_router_syn.sv
|
||||
// $PROJ_ROOT/tb/testbench.sv
|
||||
$PROJ_ROOT/rtl/rvh_noc/tb/top_single_router_syn.sv
|
||||
// $PROJ_ROOT/rtl/rvh_noc/tb/testbench.sv
|
||||
|
||||
324
tb/noc_top.sv
Normal file
324
tb/noc_top.sv
Normal file
@@ -0,0 +1,324 @@
|
||||
module noc_top
|
||||
import rvh_noc_pkg::*;
|
||||
#(
|
||||
// mesh parameters
|
||||
parameter NODE_NUM_X_DIMESION = 3,
|
||||
parameter NODE_NUM_Y_DIMESION = 3,
|
||||
|
||||
// router parameters
|
||||
parameter INPUT_PORT_NUM = INPUT_PORT_NUMBER,
|
||||
parameter OUTPUT_PORT_NUM = OUTPUT_PORT_NUMBER,
|
||||
parameter LOCAL_PORT_NUM = INPUT_PORT_NUM-4,
|
||||
parameter type flit_payload_t = logic[FLIT_LENGTH-1:0],
|
||||
parameter VC_NUM_INPUT_N = 1+LOCAL_PORT_NUM+QOS_VC_NUM_PER_INPUT,
|
||||
parameter VC_NUM_INPUT_S = 1+LOCAL_PORT_NUM+QOS_VC_NUM_PER_INPUT,
|
||||
parameter VC_NUM_INPUT_E = 3+LOCAL_PORT_NUM+QOS_VC_NUM_PER_INPUT,
|
||||
parameter VC_NUM_INPUT_W = 3+LOCAL_PORT_NUM+QOS_VC_NUM_PER_INPUT,
|
||||
`ifdef ALLOW_SAME_ROUTER_L2L_TRANSFER
|
||||
parameter VC_NUM_INPUT_L = 4+LOCAL_PORT_NUM-1+QOS_VC_NUM_PER_INPUT,
|
||||
`else
|
||||
parameter VC_NUM_INPUT_L = 4+QOS_VC_NUM_PER_INPUT,
|
||||
`endif
|
||||
parameter SA_GLOBAL_INPUT_NUM_N = 3+LOCAL_PORT_NUM,
|
||||
parameter SA_GLOBAL_INPUT_NUM_S = 3+LOCAL_PORT_NUM,
|
||||
parameter SA_GLOBAL_INPUT_NUM_E = 1+LOCAL_PORT_NUM,
|
||||
parameter SA_GLOBAL_INPUT_NUM_W = 1+LOCAL_PORT_NUM,
|
||||
`ifdef ALLOW_SAME_ROUTER_L2L_TRANSFER
|
||||
parameter SA_GLOBAL_INPUT_NUM_L = 4+LOCAL_PORT_NUM-1,
|
||||
`else
|
||||
parameter SA_GLOBAL_INPUT_NUM_L = 4,
|
||||
`endif
|
||||
parameter VC_NUM_OUTPUT_N = 1+LOCAL_PORT_NUM+QOS_VC_NUM_PER_INPUT,
|
||||
parameter VC_NUM_OUTPUT_S = 1+LOCAL_PORT_NUM+QOS_VC_NUM_PER_INPUT,
|
||||
parameter VC_NUM_OUTPUT_E = 3+LOCAL_PORT_NUM+QOS_VC_NUM_PER_INPUT,
|
||||
parameter VC_NUM_OUTPUT_W = 3+LOCAL_PORT_NUM+QOS_VC_NUM_PER_INPUT,
|
||||
parameter VC_NUM_OUTPUT_L = 1,
|
||||
parameter VC_DEPTH_INPUT_N = VC_DEPTH_MAX,
|
||||
parameter VC_DEPTH_INPUT_S = VC_DEPTH_MAX,
|
||||
parameter VC_DEPTH_INPUT_E = VC_DEPTH_MAX,
|
||||
parameter VC_DEPTH_INPUT_W = VC_DEPTH_MAX,
|
||||
parameter VC_DEPTH_INPUT_L = VC_DEPTH_MAX
|
||||
)
|
||||
(
|
||||
output logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0] tx_flit_pend_o,
|
||||
output logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0] tx_flit_v_o,
|
||||
output flit_payload_t [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0] tx_flit_o,
|
||||
output logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0][VC_ID_NUM_MAX_W-1:0] tx_flit_vc_id_o,
|
||||
output io_port_t [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0] tx_flit_look_ahead_routing_o,
|
||||
|
||||
input logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0] rx_flit_pend_i,
|
||||
input logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0] rx_flit_v_i,
|
||||
input flit_payload_t [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0] rx_flit_i,
|
||||
input logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0][VC_ID_NUM_MAX_W-1:0] rx_flit_vc_id_i,
|
||||
input io_port_t [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0] rx_flit_look_ahead_routing_i,
|
||||
|
||||
input logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0] tx_lcrd_v_i,
|
||||
input logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0][VC_ID_NUM_MAX_W-1:0] tx_lcrd_id_i,
|
||||
|
||||
output logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0] rx_lcrd_v_o,
|
||||
output logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][LOCAL_PORT_NUM-1:0][VC_ID_NUM_MAX_W-1:0] rx_lcrd_id_o,
|
||||
|
||||
input logic clk,
|
||||
input logic rst
|
||||
|
||||
);
|
||||
|
||||
genvar i, j, k;
|
||||
|
||||
// Ports
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][OUTPUT_PORT_NUM-1:0] tx_flit_pend;
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][OUTPUT_PORT_NUM-1:0] tx_flit_v;
|
||||
flit_payload_t [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][OUTPUT_PORT_NUM-1:0] tx_flit;
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][OUTPUT_PORT_NUM-1:0][VC_ID_NUM_MAX_W-1:0] tx_flit_vc_id;
|
||||
io_port_t [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][OUTPUT_PORT_NUM-1:0] tx_flit_look_ahead_routing;
|
||||
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][OUTPUT_PORT_NUM-1:0] rx_flit_pend;
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][OUTPUT_PORT_NUM-1:0] rx_flit_v;
|
||||
flit_payload_t [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][OUTPUT_PORT_NUM-1:0] rx_flit;
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][OUTPUT_PORT_NUM-1:0][VC_ID_NUM_MAX_W-1:0] rx_flit_vc_id;
|
||||
io_port_t [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][OUTPUT_PORT_NUM-1:0] rx_flit_look_ahead_routing;
|
||||
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][INPUT_PORT_NUM-1:0] tx_lcrd_v;
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][INPUT_PORT_NUM-1:0][VC_ID_NUM_MAX_W-1:0] tx_lcrd_id;
|
||||
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][INPUT_PORT_NUM-1:0] rx_lcrd_v;
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][INPUT_PORT_NUM-1:0][VC_ID_NUM_MAX_W-1:0] rx_lcrd_id;
|
||||
|
||||
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][NodeID_X_Width-1:0] node_id_x;
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-1:0][CHANNEL_NUM-1:0][NodeID_Y_Width-1:0] node_id_y;
|
||||
|
||||
|
||||
|
||||
|
||||
// generate mesh routers
|
||||
generate
|
||||
for(i = 0; i < NODE_NUM_X_DIMESION; i++) begin: gen_mesh_routers_x_dimesion
|
||||
for(j = 0; j < NODE_NUM_Y_DIMESION; j++) begin: gen_mesh_routers_y_dimesion
|
||||
for(z = 0; z < CHANNEL_NUM; z++) begin: gen_channel
|
||||
vnet_router
|
||||
#(
|
||||
.INPUT_PORT_NUM(INPUT_PORT_NUM ),
|
||||
.OUTPUT_PORT_NUM(OUTPUT_PORT_NUM ),
|
||||
.flit_payload_t(flit_payload_t),
|
||||
.QOS_VC_NUM_PER_INPUT(QOS_VC_NUM_PER_INPUT),
|
||||
.VC_NUM_INPUT_N(VC_NUM_INPUT_N ),
|
||||
.VC_NUM_INPUT_S(VC_NUM_INPUT_S ),
|
||||
.VC_NUM_INPUT_E(VC_NUM_INPUT_E ),
|
||||
.VC_NUM_INPUT_W(VC_NUM_INPUT_W ),
|
||||
.VC_NUM_INPUT_L(VC_NUM_INPUT_L ),
|
||||
.SA_GLOBAL_INPUT_NUM_N(SA_GLOBAL_INPUT_NUM_N ),
|
||||
.SA_GLOBAL_INPUT_NUM_S(SA_GLOBAL_INPUT_NUM_S ),
|
||||
.SA_GLOBAL_INPUT_NUM_E(SA_GLOBAL_INPUT_NUM_E ),
|
||||
.SA_GLOBAL_INPUT_NUM_W(SA_GLOBAL_INPUT_NUM_W ),
|
||||
.SA_GLOBAL_INPUT_NUM_L(SA_GLOBAL_INPUT_NUM_L ),
|
||||
.VC_NUM_OUTPUT_N(VC_NUM_OUTPUT_N ),
|
||||
.VC_NUM_OUTPUT_S(VC_NUM_OUTPUT_S ),
|
||||
.VC_NUM_OUTPUT_E(VC_NUM_OUTPUT_E ),
|
||||
.VC_NUM_OUTPUT_W(VC_NUM_OUTPUT_W ),
|
||||
.VC_NUM_OUTPUT_L(VC_NUM_OUTPUT_L ),
|
||||
.VC_DEPTH_INPUT_N(VC_DEPTH_INPUT_N ),
|
||||
.VC_DEPTH_INPUT_S(VC_DEPTH_INPUT_S ),
|
||||
.VC_DEPTH_INPUT_E(VC_DEPTH_INPUT_E ),
|
||||
.VC_DEPTH_INPUT_W(VC_DEPTH_INPUT_W ),
|
||||
.VC_DEPTH_INPUT_L(VC_DEPTH_INPUT_L )
|
||||
)
|
||||
vnet_router_dut (
|
||||
.rx_flit_pend_i (rx_flit_pend [i][j][z] ),
|
||||
.rx_flit_v_i (rx_flit_v [i][j][z] ),
|
||||
.rx_flit_i (rx_flit [i][j][z] ),
|
||||
.rx_flit_vc_id_i (rx_flit_vc_id [i][j][z] ),
|
||||
.rx_flit_look_ahead_routing_i (rx_flit_look_ahead_routing [i][j][z] ),
|
||||
|
||||
.tx_flit_pend_o (tx_flit_pend [i][j][z] ),
|
||||
.tx_flit_v_o (tx_flit_v [i][j][z] ),
|
||||
.tx_flit_o (tx_flit [i][j][z] ),
|
||||
.tx_flit_vc_id_o (tx_flit_vc_id [i][j][z] ),
|
||||
.tx_flit_look_ahead_routing_o (tx_flit_look_ahead_routing [i][j][z] ),
|
||||
|
||||
.rx_lcrd_v_o (rx_lcrd_v [i][j][z] ),
|
||||
.rx_lcrd_id_o (rx_lcrd_id [i][j][z] ),
|
||||
|
||||
.tx_lcrd_v_i (tx_lcrd_v [i][j][z] ),
|
||||
.tx_lcrd_id_i (tx_lcrd_id [i][j][z] ),
|
||||
|
||||
.node_id_x_ths_hop_i (node_id_x [i][j][z] ),
|
||||
.node_id_y_ths_hop_i (node_id_y [i][j][z] ),
|
||||
|
||||
.clk (clk ),
|
||||
.rstn (rst)
|
||||
);
|
||||
end
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
// assign node id to each router
|
||||
generate
|
||||
for(i = 0; i < NODE_NUM_X_DIMESION; i++) begin: gen_node_id_x_x_dimesion
|
||||
for(j = 0; j < NODE_NUM_Y_DIMESION; j++) begin: gen_node_id_x_y_dimesion
|
||||
for(z = 0; z < CHANNEL_NUM; z++) begin: gen_channel
|
||||
assign node_id_x [i][j][z] = i;
|
||||
end
|
||||
end
|
||||
end
|
||||
for(i = 0; i < NODE_NUM_Y_DIMESION; i++) begin: gen_node_id_y_y_dimesion
|
||||
for(j = 0; j < NODE_NUM_X_DIMESION; j++) begin: gen_node_id_y_x_dimesion
|
||||
for(z = 0; z < CHANNEL_NUM; z++) begin: gen_channel
|
||||
assign node_id_y [j][i][z] = i;
|
||||
end
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
// connect each router together
|
||||
generate
|
||||
for(i = 0; i < NODE_NUM_X_DIMESION; i++) begin: gen_connect_routers_ns_x_dimesion
|
||||
for(j = 0; j < NODE_NUM_Y_DIMESION-1; j++) begin: gen_connect_routers_ns_y_dimesion
|
||||
for(z = 0; z < CHANNEL_NUM; z++) begin: gen_channel
|
||||
// connect N inport to S outport
|
||||
assign rx_flit_pend [i][j][z][0] = tx_flit_pend [i][j+1][z][1];
|
||||
assign rx_flit_v [i][j][z][0] = tx_flit_v [i][j+1][z][1];
|
||||
assign rx_flit [i][j][z][0] = tx_flit [i][j+1][z][1];
|
||||
assign rx_flit_vc_id [i][j][z][0] = tx_flit_vc_id [i][j+1][z][1];
|
||||
assign rx_flit_look_ahead_routing [i][j][z][0] = tx_flit_look_ahead_routing [i][j+1][z][1];
|
||||
|
||||
assign tx_lcrd_v [i][j][z][0] = rx_lcrd_v [i][j+1][z][1];
|
||||
assign tx_lcrd_id [i][j][z][0] = rx_lcrd_id [i][j+1][z][1];
|
||||
|
||||
// connect S inport to N outport
|
||||
assign rx_flit_pend [i][j+1][z][1] = tx_flit_pend [i][j][z][0];
|
||||
assign rx_flit_v [i][j+1][z][1] = tx_flit_v [i][j][z][0];
|
||||
assign rx_flit [i][j+1][z][1] = tx_flit [i][j][z][0];
|
||||
assign rx_flit_vc_id [i][j+1][z][1] = tx_flit_vc_id [i][j][z][0];
|
||||
assign rx_flit_look_ahead_routing [i][j+1][z][1] = tx_flit_look_ahead_routing [i][j][z][0];
|
||||
|
||||
assign tx_lcrd_v [i][j+1][z][1] = rx_lcrd_v [i][j][z][0];
|
||||
assign tx_lcrd_id [i][j+1][z][1] = rx_lcrd_id [i][j][z][0];
|
||||
end
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
generate
|
||||
for(i = 0; i < NODE_NUM_Y_DIMESION; i++) begin: gen_connect_routers_ew_x_dimesion
|
||||
for(j = 0; j < NODE_NUM_X_DIMESION-1; j++) begin: gen_connect_routers_ew_y_dimesion
|
||||
for(z = 0; z < CHANNEL_NUM; z++) begin: gen_channel
|
||||
// connect E inport to W outport
|
||||
assign rx_flit_pend [j][i][z][2] = tx_flit_pend [j+1][i][z][3];
|
||||
assign rx_flit_v [j][i][z][2] = tx_flit_v [j+1][i][z][3];
|
||||
assign rx_flit [j][i][z][2] = tx_flit [j+1][i][z][3];
|
||||
assign rx_flit_vc_id [j][i][z][2] = tx_flit_vc_id [j+1][i][z][3];
|
||||
assign rx_flit_look_ahead_routing [j][i][z][2] = tx_flit_look_ahead_routing [j+1][i][z][3];
|
||||
|
||||
assign tx_lcrd_v [j][i][z][2] = rx_lcrd_v [j+1][i][z][3];
|
||||
assign tx_lcrd_id [j][i][z][2] = rx_lcrd_id [j+1][i][z][3];
|
||||
|
||||
// connect W inport to E outport
|
||||
assign rx_flit_pend [j+1][i][z][3] = tx_flit_pend [j][i][z][2];
|
||||
assign rx_flit_v [j+1][i][z][3] = tx_flit_v [j][i][z][2];
|
||||
assign rx_flit [j+1][i][z][3] = tx_flit [j][i][z][2];
|
||||
assign rx_flit_vc_id [j+1][i][z][3] = tx_flit_vc_id [j][i][z][2];
|
||||
assign rx_flit_look_ahead_routing [j+1][i][z][3] = tx_flit_look_ahead_routing [j][i][z][2];
|
||||
|
||||
assign tx_lcrd_v [j+1][i][z][3] = rx_lcrd_v [j][i][z][2];
|
||||
assign tx_lcrd_id [j+1][i][z][3] = rx_lcrd_id [j][i][z][2];
|
||||
end
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
// other unused non-local ports, assign router rx to 0
|
||||
generate
|
||||
for(i = 0; i < NODE_NUM_X_DIMESION; i++) begin: gen_unused_non_local_ports_x_dimesion
|
||||
for(z = 0; z < CHANNEL_NUM; z++) begin: gen_channel
|
||||
assign rx_flit_pend [i][NODE_NUM_Y_DIMESION-1][z][0] = '0;
|
||||
assign rx_flit_v [i][NODE_NUM_Y_DIMESION-1][z][0] = '0;
|
||||
assign rx_flit [i][NODE_NUM_Y_DIMESION-1][z][0] = '0;
|
||||
assign rx_flit_vc_id [i][NODE_NUM_Y_DIMESION-1][z][0] = '0;
|
||||
assign rx_flit_look_ahead_routing [i][NODE_NUM_Y_DIMESION-1][z][0] = '0;
|
||||
|
||||
assign tx_lcrd_v [i][NODE_NUM_Y_DIMESION-1][z][0] = '0;
|
||||
assign tx_lcrd_id [i][NODE_NUM_Y_DIMESION-1][z][0] = '0;
|
||||
|
||||
|
||||
assign rx_flit_pend [i][0][z][1] = '0;
|
||||
assign rx_flit_v [i][0][z][1] = '0;
|
||||
assign rx_flit [i][0][z][1] = '0;
|
||||
assign rx_flit_vc_id [i][0][z][1] = '0;
|
||||
assign rx_flit_look_ahead_routing [i][0][z][1] = '0;
|
||||
|
||||
assign tx_lcrd_v [i][0][z][1] = '0;
|
||||
assign tx_lcrd_id [i][0][z][1] = '0;
|
||||
end
|
||||
end
|
||||
|
||||
for(i = 0; i < NODE_NUM_Y_DIMESION; i++) begin: gen_unused_non_local_ports_y_dimesion
|
||||
for(z = 0; z < CHANNEL_NUM; z++) begin: gen_channel
|
||||
// connect E inport to W outport
|
||||
assign rx_flit_pend [NODE_NUM_X_DIMESION-1][i][z][2] = '0;
|
||||
assign rx_flit_v [NODE_NUM_X_DIMESION-1][i][z][2] = '0;
|
||||
assign rx_flit [NODE_NUM_X_DIMESION-1][i][z][2] = '0;
|
||||
assign rx_flit_vc_id [NODE_NUM_X_DIMESION-1][i][z][2] = '0;
|
||||
assign rx_flit_look_ahead_routing [NODE_NUM_X_DIMESION-1][i][z][2] = '0;
|
||||
|
||||
assign tx_lcrd_v [NODE_NUM_X_DIMESION-1][i][z][2] = '0;
|
||||
assign tx_lcrd_id [NODE_NUM_X_DIMESION-1][i][z][2] = '0;
|
||||
|
||||
// connect W inport to E outport
|
||||
assign rx_flit_pend [0][i][z][3] = '0;
|
||||
assign rx_flit_v [0][i][z][3] = '0;
|
||||
assign rx_flit [0][i][z][3] = '0;
|
||||
assign rx_flit_vc_id [0][i][z][3] = '0;
|
||||
assign rx_flit_look_ahead_routing [0][i][z][3] = '0;
|
||||
|
||||
assign tx_lcrd_v [0][i][z][3] = '0;
|
||||
assign tx_lcrd_id [0][i][z][3] = '0;
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
|
||||
|
||||
generate
|
||||
for(i = 0; i < NODE_NUM_X_DIMESION; i++) begin: gen_v_sender_x_dimesion
|
||||
for(j = 0; j < NODE_NUM_Y_DIMESION; j++) begin: gen_v_sender_y_dimesion
|
||||
for(k = 0; k < LOCAL_PORT_NUM; k++) begin: gen_v_sender_device_port
|
||||
for(z = 0; z < CHANNEL_NUM; z++) begin: gen_channel
|
||||
assign rx_flit_pend [i][j][z][4+k] = rx_flit_pend_i [i][j][z][k];
|
||||
assign rx_flit_v [i][j][z][4+k] = rx_flit_v_i [i][j][z][k];
|
||||
assign rx_flit [i][j][z][4+k] = rx_flit_i [i][j][z][k];
|
||||
assign rx_flit_vc_id [i][j][z][4+k] = rx_flit_vc_id_i [i][j][z][k];
|
||||
assign rx_flit_look_ahead_routing [i][j][z][4+k] = rx_flit_look_ahead_routing_i [i][j][z][k];
|
||||
|
||||
assign rx_lcrd_v_o [i][j][z][k] = rx_lcrd_v [i][j][z][4+k];
|
||||
assign rx_lcrd_id_o [i][j][z][k] = rx_lcrd_id [i][j][z][4+k];
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
|
||||
generate
|
||||
for(i = 0; i < NODE_NUM_X_DIMESION; i++) begin: gen_v_receiver_x_dimesion
|
||||
for(j = 0; j < NODE_NUM_Y_DIMESION; j++) begin: gen_v_receiver_y_dimesion
|
||||
for(k = 0; k < LOCAL_PORT_NUM; k++) begin: gen_v_sender_device_port
|
||||
for(z = 0; z < CHANNEL_NUM; z++) begin: gen_channel
|
||||
assign tx_flit_pend_o [i][j][z][k] = tx_flit_pend [i][j][z][4+k];
|
||||
assign tx_flit_v_o [i][j][z][k] = tx_flit_v [i][j][z][4+k];
|
||||
assign tx_flit_o [i][j][z][k] = tx_flit [i][j][z][4+k];
|
||||
assign tx_flit_vc_id_o [i][j][z][k] = tx_flit_vc_id [i][j][z][4+k];
|
||||
assign tx_flit_look_ahead_routing_o [i][j][z][k] = tx_flit_look_ahead_routing [i][j][z][4+k];
|
||||
|
||||
assign tx_lcrd_v [i][j][z][4+k] = tx_lcrd_v_i [i][j][z][k];
|
||||
assign tx_lcrd_id [i][j][z][4+k] = tx_lcrd_id_i [i][j][z][k];
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
244
tb/tb_mesh.sv
244
tb/tb_mesh.sv
@@ -1,6 +1,9 @@
|
||||
module tb_mesh
|
||||
import rvh_noc_pkg::*;
|
||||
import v_noc_pkg::*;
|
||||
`ifdef EBI
|
||||
import test_ebi_pkg::*;
|
||||
`endif
|
||||
#(
|
||||
// mesh parameters
|
||||
parameter NODE_NUM_X_DIMESION = 3,
|
||||
@@ -10,7 +13,7 @@ import v_noc_pkg::*;
|
||||
parameter INPUT_PORT_NUM = INPUT_PORT_NUMBER,
|
||||
parameter OUTPUT_PORT_NUM = OUTPUT_PORT_NUMBER,
|
||||
parameter LOCAL_PORT_NUM = INPUT_PORT_NUM-4,
|
||||
parameter type flit_payload_t = logic[FLIT_LENGTH-1:0],
|
||||
parameter type flit_payload_t = cache_scu_cc_test_t,
|
||||
|
||||
// parameter QOS_VC_NUM_PER_INPUT = QOS_VC_NUM_PER_INPUT,
|
||||
|
||||
@@ -56,9 +59,17 @@ import v_noc_pkg::*;
|
||||
|
||||
|
||||
// test_generator parameters
|
||||
parameter TEST_CASE_MESH_RANDOM = 1, // random sender and receiver
|
||||
parameter TEST_CASE_MESH_DIAGONAL = !TEST_CASE_MESH_RANDOM, // from (0,0) to (NODE_NUM_X_DIMESION-1, NODE_NUM_Y_DIMESION-1)
|
||||
|
||||
parameter TEST_CASE_MESH_RANDOM = 1, // random sender and receiver
|
||||
parameter TEST_CASE_MESH_DIAGONAL = 0, // from (0,0) to (NODE_NUM_X_DIMESION-1, NODE_NUM_Y_DIMESION-1)
|
||||
parameter TEST_CASE_MESH_BIT_COMPLEMENT = 0,
|
||||
parameter TEST_CASE_MESH_BIT_REVERSE = 0,
|
||||
parameter TEST_CASE_MESH_BIT_ROTATION = 0,
|
||||
parameter TEST_CASE_MESH_NEIGHBOR = 0,
|
||||
parameter TEST_CASE_MESH_SHUFFLE = 0,
|
||||
parameter TEST_CASE_MESH_TRANSPOSE = 0,
|
||||
parameter TEST_CASE_MESH_TORNADO = 0,
|
||||
|
||||
|
||||
parameter RANDOM_BIT_NUM = 168, // 32,64,80,128,168
|
||||
|
||||
parameter SCOREBOARD_TIMEOUT_EN = !TEST_CASE_MESH_DIAGONAL,
|
||||
@@ -116,6 +127,17 @@ import v_noc_pkg::*;
|
||||
|
||||
logic clk;
|
||||
logic rstn;
|
||||
`ifdef EBI
|
||||
logic bus_clk;
|
||||
logic [NODE_NUM_X_DIMESION-2:0][NODE_NUM_Y_DIMESION-1:0][OFF_DIE_WD-1:0] x_inc_bus;
|
||||
logic [NODE_NUM_X_DIMESION-2:0][NODE_NUM_Y_DIMESION-1:0][OFF_DIE_WD-1:0] x_dec_bus;
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-2:0][OFF_DIE_WD-1:0] y_inc_bus;
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-2:0][OFF_DIE_WD-1:0] y_dec_bus;
|
||||
logic [NODE_NUM_X_DIMESION-2:0][NODE_NUM_Y_DIMESION-1:0] x_inc_credit;
|
||||
logic [NODE_NUM_X_DIMESION-2:0][NODE_NUM_Y_DIMESION-1:0] x_dec_credit;
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-2:0] y_inc_credit;
|
||||
logic [NODE_NUM_X_DIMESION-1:0][NODE_NUM_Y_DIMESION-2:0] y_dec_credit;
|
||||
`endif
|
||||
|
||||
|
||||
// generate mesh routers
|
||||
@@ -191,7 +213,7 @@ import v_noc_pkg::*;
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
`ifndef EBI
|
||||
// connect each router together
|
||||
generate
|
||||
for(i = 0; i < NODE_NUM_X_DIMESION; i++) begin: gen_connect_routers_ns_x_dimesion
|
||||
@@ -245,6 +267,203 @@ import v_noc_pkg::*;
|
||||
end
|
||||
endgenerate
|
||||
|
||||
`else
|
||||
genvar z;
|
||||
|
||||
generate
|
||||
for(i = 0; i < NODE_NUM_X_DIMESION-1; i++) begin: gen_x_dimension_router
|
||||
for(j = 0; j < NODE_NUM_Y_DIMESION; j++) begin
|
||||
test_ebi ebi_X_u1(
|
||||
.m1_clk(clk),
|
||||
.bus_clk(bus_clk),
|
||||
.rst(~rstn),
|
||||
// control signals
|
||||
.tx_flit_pend_i(tx_flit_pend[i][j][2]),
|
||||
.tx_flit_v_i(tx_flit_v[i][j][2]),
|
||||
.tx_flit_vc_id_i(tx_flit_vc_id[i][j][2]),
|
||||
.tx_flit_look_ahead_routing_i(tx_flit_look_ahead_routing[i][j][2]),
|
||||
|
||||
.rx_flit_pend_o(rx_flit_pend[i][j][2]),
|
||||
.rx_flit_v_o(rx_flit_v[i][j][2]),
|
||||
.rx_flit_vc_id_o(rx_flit_vc_id[i][j][2]),
|
||||
.rx_flit_look_ahead_routing_o(rx_flit_look_ahead_routing[i][j][2]),
|
||||
|
||||
.tx_lcrd_v_o(tx_lcrd_v[i][j][2]),
|
||||
.tx_lcrd_id_o(tx_lcrd_id[i][j][2]),
|
||||
|
||||
.rx_lcrd_v_i(rx_lcrd_v[i][j][2]),
|
||||
.rx_lcrd_id_i(rx_lcrd_id[i][j][2]),
|
||||
|
||||
.tx_flit_channel_0_i(tx_flit[i][j][2]), // req
|
||||
.rx_flit_channel_0_o(rx_flit[i][j][2]), // req
|
||||
|
||||
//external interface
|
||||
.m1_m2_bus_o(x_inc_bus[i][j]),
|
||||
.m2_m1_credit_i(x_inc_credit[i][j]),
|
||||
.m2_m1_bus_i(x_dec_bus[i][j]),
|
||||
.m1_m2_credit_o(x_dec_credit[i][j])
|
||||
);
|
||||
test_ebi ebi_X_u2(
|
||||
.m1_clk(clk),
|
||||
.bus_clk(bus_clk),
|
||||
.rst(~rstn),
|
||||
// control signals
|
||||
.tx_flit_pend_i(tx_flit_pend[i+1][j][3]),
|
||||
.tx_flit_v_i(tx_flit_v[i+1][j][3]),
|
||||
.tx_flit_vc_id_i(tx_flit_vc_id[i+1][j][3]),
|
||||
.tx_flit_look_ahead_routing_i(tx_flit_look_ahead_routing[i+1][j][3]),
|
||||
|
||||
.rx_flit_pend_o(rx_flit_pend[i+1][j][3]),
|
||||
.rx_flit_v_o(rx_flit_v[i+1][j][3]),
|
||||
.rx_flit_vc_id_o(rx_flit_vc_id[i+1][j][3]),
|
||||
.rx_flit_look_ahead_routing_o(rx_flit_look_ahead_routing[i+1][j][3]),
|
||||
|
||||
.tx_lcrd_v_o(tx_lcrd_v[i+1][j][3]),
|
||||
.tx_lcrd_id_o(tx_lcrd_id[i+1][j][3]),
|
||||
|
||||
.rx_lcrd_v_i(rx_lcrd_v[i+1][j][3]),
|
||||
.rx_lcrd_id_i(rx_lcrd_id[i+1][j][3]),
|
||||
|
||||
.tx_flit_channel_0_i(tx_flit[i+1][j][3]), // req
|
||||
.rx_flit_channel_0_o(rx_flit[i+1][j][3]), // req
|
||||
|
||||
//external interface
|
||||
.m1_m2_bus_o(x_dec_bus[i][j]),
|
||||
.m2_m1_credit_i(x_dec_credit[i][j]),
|
||||
.m2_m1_bus_i(x_inc_bus[i][j]),
|
||||
.m1_m2_credit_o(x_inc_credit[i][j])
|
||||
);
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
generate
|
||||
for(i = 0; i < NODE_NUM_X_DIMESION; i++) begin: gen_y_dimension_router
|
||||
for(j = 0; j < NODE_NUM_Y_DIMESION-1; j++) begin
|
||||
test_ebi ebi_Y_u1(
|
||||
.m1_clk(clk),
|
||||
.bus_clk(bus_clk),
|
||||
.rst(~rstn),
|
||||
// control signals
|
||||
.tx_flit_pend_i(tx_flit_pend[i][j][0]),
|
||||
.tx_flit_v_i(tx_flit_v[i][j][0]),
|
||||
.tx_flit_vc_id_i(tx_flit_vc_id[i][j][0]),
|
||||
.tx_flit_look_ahead_routing_i(tx_flit_look_ahead_routing[i][j][0]),
|
||||
|
||||
.rx_flit_pend_o(rx_flit_pend[i][j][0]),
|
||||
.rx_flit_v_o(rx_flit_v[i][j][0]),
|
||||
.rx_flit_vc_id_o(rx_flit_vc_id[i][j][0]),
|
||||
.rx_flit_look_ahead_routing_o(rx_flit_look_ahead_routing[i][j][0]),
|
||||
|
||||
.tx_lcrd_v_o(tx_lcrd_v[i][j][0]),
|
||||
.tx_lcrd_id_o(tx_lcrd_id[i][j][0]),
|
||||
|
||||
.rx_lcrd_v_i(rx_lcrd_v[i][j][0]),
|
||||
.rx_lcrd_id_i(rx_lcrd_id[i][j][0]),
|
||||
|
||||
.tx_flit_channel_0_i(tx_flit[i][j][0]), // req
|
||||
.rx_flit_channel_0_o(rx_flit[i][j][0]),
|
||||
|
||||
//external interface
|
||||
.m1_m2_bus_o(y_inc_bus[i][j]),
|
||||
.m2_m1_credit_i(y_inc_credit[i][j]),
|
||||
.m2_m1_bus_i(y_dec_bus[i][j]),
|
||||
.m1_m2_credit_o(y_dec_credit[i][j])
|
||||
);
|
||||
test_ebi ebi_Y_u2(
|
||||
.m1_clk(clk),
|
||||
.bus_clk(bus_clk),
|
||||
.rst(~rstn),
|
||||
// control signals
|
||||
.tx_flit_pend_i(tx_flit_pend[i][j+1][1]),
|
||||
.tx_flit_v_i(tx_flit_v[i][j+1][1]),
|
||||
.tx_flit_vc_id_i(tx_flit_vc_id[i][j+1][1]),
|
||||
.tx_flit_look_ahead_routing_i(tx_flit_look_ahead_routing[i][j+1][1]),
|
||||
|
||||
.rx_flit_pend_o(rx_flit_pend[i][j+1][1]),
|
||||
.rx_flit_v_o(rx_flit_v[i][j+1][1]),
|
||||
.rx_flit_vc_id_o(rx_flit_vc_id[i][j+1][1]),
|
||||
.rx_flit_look_ahead_routing_o(rx_flit_look_ahead_routing[i][j+1][1]),
|
||||
|
||||
.tx_lcrd_v_o(tx_lcrd_v[i][j+1][1]),
|
||||
.tx_lcrd_id_o(tx_lcrd_id[i][j+1][1]),
|
||||
|
||||
.rx_lcrd_v_i(rx_lcrd_v[i][j+1][1]),
|
||||
.rx_lcrd_id_i(rx_lcrd_id[i][j+1][1]),
|
||||
|
||||
.tx_flit_channel_0_i(tx_flit[i][j+1][1]), // req
|
||||
.rx_flit_channel_0_o(rx_flit[i][j+1][1]),
|
||||
|
||||
//external interface
|
||||
.m1_m2_bus_o(y_dec_bus[i][j]),
|
||||
.m2_m1_credit_i(y_dec_credit[i][j]),
|
||||
.m2_m1_bus_i(y_inc_bus[i][j]),
|
||||
.m1_m2_credit_o(y_inc_credit[i][j])
|
||||
);
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
|
||||
//debug print
|
||||
always_ff @(posedge clk) begin
|
||||
for (int i = 0; i < NODE_NUM_X_DIMESION; i++) begin: ebi_debug_log_tx
|
||||
for (int j = 0; j < NODE_NUM_Y_DIMESION; j++) begin
|
||||
for (int z = 0; z < ROUTER_PORT_NUMBER; z++) begin
|
||||
if(tx_flit_v[i][j][z]) begin
|
||||
$write("[%16d] info flit: flit_sender router: (%0d, %0d); target router: ", $time(), i, j);
|
||||
case (z)
|
||||
0: $write("(%0d, %0d)", i, j+1);
|
||||
1: $write("(%0d, %0d)", i, j-1);
|
||||
2: $write("(%0d, %0d)", i+1, j);
|
||||
3: $write("(%0d, %0d)", i-1, j);
|
||||
4: $write("local? wrong!");
|
||||
endcase
|
||||
$write("vc_id: %1d; look_ahead_routing: %1d(N0,S1,E2,W3,L4-7), flit:", tx_flit_vc_id[i][j][z], tx_flit_look_ahead_routing[i][j][z], "%0h", tx_flit[i][j][z]);
|
||||
$write(" \n");
|
||||
end
|
||||
if(rx_flit_v[i][j][z]) begin
|
||||
$write("[%16d] info flit: flit_receiver router: (%0d, %0d); source router: ", $time(), i, j);
|
||||
case (z)
|
||||
0: $write("(%0d, %0d)", i, j+1);
|
||||
1: $write("(%0d, %0d)", i, j-1);
|
||||
2: $write("(%0d, %0d)", i+1, j);
|
||||
3: $write("(%0d, %0d)", i-1, j);
|
||||
4: $write("local? wrong!");
|
||||
endcase
|
||||
$write("vc_id: %1d; look_ahead_routing: %1d(N0,S1,E2,W3,L4-7), flit:", rx_flit_vc_id[i][j][z], rx_flit_look_ahead_routing[i][j][z], "%0h", rx_flit[i][j][z]);
|
||||
$write(" \n");
|
||||
end
|
||||
if(tx_lcrd_v[i][j][z]) begin
|
||||
$write("[%16d] info credit: crd_receiver router: (%0d, %0d); source router: ", $time(), i, j);
|
||||
case (z)
|
||||
0: $write("(%0d, %0d)", i, j+1);
|
||||
1: $write("(%0d, %0d)", i, j-1);
|
||||
2: $write("(%0d, %0d)", i+1, j);
|
||||
3: $write("(%0d, %0d)", i-1, j);
|
||||
4: $write("local? wrong!");
|
||||
endcase
|
||||
$write(" credit id:", tx_lcrd_id[i][j][z]);
|
||||
$write(" \n");
|
||||
end
|
||||
if(rx_lcrd_v[i][j][z]) begin
|
||||
$write("[%16d] info credit: crd_sender router: (%0d, %0d); target router: ", $time(), i, j);
|
||||
case (z)
|
||||
0: $write("(%0d, %0d)", i, j+1);
|
||||
1: $write("(%0d, %0d)", i, j-1);
|
||||
2: $write("(%0d, %0d)", i+1, j);
|
||||
3: $write("(%0d, %0d)", i-1, j);
|
||||
4: $write("local? wrong!");
|
||||
endcase
|
||||
$write(" credit id:", rx_lcrd_id[i][j][z]);
|
||||
$write(" \n");
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
`endif
|
||||
|
||||
// other unused non-local ports, assign router rx to 0
|
||||
generate
|
||||
for(i = 0; i < NODE_NUM_X_DIMESION; i++) begin: gen_unused_non_local_ports_x_dimesion
|
||||
@@ -335,6 +554,15 @@ import v_noc_pkg::*;
|
||||
.TEST_CASE_NUM_PER_CYCLE(TEST_CASE_NUM_PER_CYCLE ),
|
||||
.TEST_CASE_MESH_RANDOM (TEST_CASE_MESH_RANDOM ),
|
||||
.TEST_CASE_MESH_DIAGONAL(TEST_CASE_MESH_DIAGONAL ),
|
||||
|
||||
.TEST_CASE_MESH_BIT_COMPLEMENT(TEST_CASE_MESH_BIT_COMPLEMENT),
|
||||
.TEST_CASE_MESH_BIT_REVERSE (TEST_CASE_MESH_BIT_REVERSE),
|
||||
.TEST_CASE_MESH_BIT_ROTATION (TEST_CASE_MESH_BIT_ROTATION),
|
||||
.TEST_CASE_MESH_NEIGHBOR (TEST_CASE_MESH_NEIGHBOR),
|
||||
.TEST_CASE_MESH_SHUFFLE (TEST_CASE_MESH_SHUFFLE),
|
||||
.TEST_CASE_MESH_TRANSPOSE (TEST_CASE_MESH_TRANSPOSE),
|
||||
.TEST_CASE_MESH_TORNADO (TEST_CASE_MESH_TORNADO),
|
||||
|
||||
.NODE_NUM_X_DIMESION (NODE_NUM_X_DIMESION ),
|
||||
.NODE_NUM_Y_DIMESION (NODE_NUM_Y_DIMESION ),
|
||||
.LOCAL_PORT_NUM (LOCAL_PORT_NUM ),
|
||||
@@ -538,6 +766,12 @@ endgenerate
|
||||
forever #5 clk = ~clk;
|
||||
end
|
||||
|
||||
`ifdef EBI
|
||||
initial begin
|
||||
bus_clk = 1'b0;
|
||||
forever #5 bus_clk = ~bus_clk;
|
||||
end
|
||||
`endif
|
||||
//reset generate
|
||||
initial begin
|
||||
rstn = 1'b0;
|
||||
|
||||
@@ -22,7 +22,9 @@ package v_noc_pkg;
|
||||
typedef struct packed {
|
||||
node_id_t tgt_id; // target id
|
||||
node_id_t src_id; // source id
|
||||
`ifdef ENABLE_TXN_ID
|
||||
logic [TxnID_Width-1:0] txn_id; // transaction id
|
||||
`endif
|
||||
logic [SCOREBOARD_TIMEOUT_W-1:0] timeout_threshold;
|
||||
io_port_t look_ahead_routing;
|
||||
logic [VC_ID_NUM_MAX_W-1:0] inport_vc_id;
|
||||
@@ -45,7 +47,9 @@ package v_noc_pkg;
|
||||
typedef struct packed {
|
||||
node_id_t rec_id; // receiver id (should be the same as tgt_id)
|
||||
node_id_t src_id; // source id
|
||||
`ifdef ENABLE_TXN_ID
|
||||
logic [TxnID_Width-1:0] txn_id; // transaction id
|
||||
`endif
|
||||
logic [FLIT_DATA_LENGTH-1:0] flit_data;
|
||||
} receiver_info_t;
|
||||
|
||||
|
||||
@@ -47,7 +47,9 @@ receiver_flit_decoder_u
|
||||
assign check_scoreboard_vld_o = rx_flit_v_i;
|
||||
assign check_scoreboard_o.rec_id = node_id_i;
|
||||
assign check_scoreboard_o.src_id = flit_ctrl_info.src_id;
|
||||
`ifdef ENABLE_TXN_ID
|
||||
assign check_scoreboard_o.txn_id = flit_ctrl_info.txn_id;
|
||||
`endif
|
||||
assign check_scoreboard_o.flit_data = rx_flit_i[FLIT_LENGTH-1-:FLIT_DATA_LENGTH];
|
||||
|
||||
assign rx_lcrd_v_o = rx_flit_v_i;
|
||||
|
||||
@@ -86,7 +86,9 @@ always_comb begin
|
||||
for(int k = 0; k < SCOREBOARD_ENTRY_NUM_PER_SENDER; k++) begin
|
||||
if(scoreboard_entry_vld_q[j][k]) begin
|
||||
if(
|
||||
`ifdef ENABLE_TXN_ID
|
||||
(scoreboard_entry_q[j][k].txn_id == check_scoreboard_i[i].txn_id) &
|
||||
`endif
|
||||
(scoreboard_entry_q[j][k].src_id == check_scoreboard_i[i].src_id) &
|
||||
(scoreboard_entry_q[j][k].tgt_id == check_scoreboard_i[i].rec_id) &
|
||||
(scoreboard_entry_q[j][k].flit_data == check_scoreboard_i[i].flit_data)
|
||||
@@ -175,7 +177,9 @@ always_ff @(posedge clk) begin
|
||||
for(int k = 0; k < SCOREBOARD_ENTRY_NUM_PER_SENDER; k++) begin
|
||||
if(scoreboard_entry_vld_q[j][k]) begin
|
||||
if((scoreboard_entry_q[j][k].src_id == check_scoreboard_i[i].src_id) &&
|
||||
`ifdef ENABLE_TXN_ID
|
||||
(scoreboard_entry_q[j][k].txn_id == check_scoreboard_i[i].txn_id) &&
|
||||
`endif
|
||||
(TEST_CASE_SINGLE_ROUTER ||
|
||||
(scoreboard_entry_q[j][k].tgt_id == check_scoreboard_i[i].rec_id) &&
|
||||
(scoreboard_entry_q[j][k].flit_data == check_scoreboard_i[i].flit_data)
|
||||
@@ -188,7 +192,11 @@ always_ff @(posedge clk) begin
|
||||
) begin
|
||||
$display("[%16d] error: receiver position mismatch", $time());
|
||||
$display("txn_id: 0x%h, sender: %2d (%d,%d), receiver: %d (%d,%d)",
|
||||
`ifdef ENABLE_TXN_ID
|
||||
check_scoreboard_i[i].txn_id,
|
||||
`else
|
||||
'0,
|
||||
`endif
|
||||
j, check_scoreboard_i[i].src_id.x_position, check_scoreboard_i[i].src_id.y_position,
|
||||
i, check_scoreboard_i[i].rec_id.x_position, check_scoreboard_i[i].rec_id.y_position);
|
||||
$display("tgt_id: (%d,%d), tgt_local_port: %d, look_ahead_routing: %d, send_time: %d",
|
||||
@@ -205,7 +213,11 @@ always_ff @(posedge clk) begin
|
||||
if(scoreboard_entry_q[j][k].tgt_id.device_port != check_scoreboard_i[i].rec_id.device_port) begin
|
||||
$display("[%16d] error: receiver local_port_id mismatch", $time());
|
||||
$display("txn_id: 0x%h, sender: %2d (%d,%d), sender_local_port: %d; receiver: %d (%d,%d), receiver_local_port: %d",
|
||||
check_scoreboard_i[i].txn_id,
|
||||
`ifdef ENABLE_TXN_ID
|
||||
check_scoreboard_i[i].txn_id,
|
||||
`else
|
||||
'0,
|
||||
`endif
|
||||
j, check_scoreboard_i[i].src_id.x_position, check_scoreboard_i[i].src_id.y_position,
|
||||
check_scoreboard_i[i].src_id.device_port,
|
||||
i, check_scoreboard_i[i].rec_id.x_position, check_scoreboard_i[i].rec_id.y_position,
|
||||
@@ -221,7 +233,11 @@ always_ff @(posedge clk) begin
|
||||
if(scoreboard_entry_q[j][k].flit_data != check_scoreboard_i[i].flit_data) begin
|
||||
$display("[%16d] error: data mismatch", $time());
|
||||
$display("txn_id: 0x%h, sender: %2d (%d,%d), receiver: %d (%d,%d), received_data: %h",
|
||||
`ifdef ENABLE_TXN_ID
|
||||
check_scoreboard_i[i].txn_id,
|
||||
`else
|
||||
'0,
|
||||
`endif
|
||||
j, check_scoreboard_i[i].src_id.x_position, check_scoreboard_i[i].src_id.y_position,
|
||||
i, check_scoreboard_i[i].rec_id.x_position, check_scoreboard_i[i].rec_id.y_position,
|
||||
check_scoreboard_i[i].flit_data);
|
||||
@@ -237,7 +253,12 @@ always_ff @(posedge clk) begin
|
||||
end
|
||||
if(find_entry[i] == 1'b0) begin
|
||||
$display("[%16d] error: scoreboard failed to find the entry, txn_id: 0x%h, sender: (%d,%d), receiver: (%d,%d)",
|
||||
$time(), check_scoreboard_i[i].txn_id,
|
||||
$time(),
|
||||
`ifdef ENABLE_TXN_ID
|
||||
check_scoreboard_i[i].txn_id,
|
||||
`else
|
||||
'0,
|
||||
`endif
|
||||
check_scoreboard_i[i].src_id.x_position, check_scoreboard_i[i].src_id.y_position,
|
||||
check_scoreboard_i[i].rec_id.x_position, check_scoreboard_i[i].rec_id.y_position);
|
||||
$finish();
|
||||
@@ -256,7 +277,11 @@ always_ff @(posedge clk) begin
|
||||
$display("[%16d] error: scoreboard entry timeout, timeout_threshold: %d",
|
||||
$time(), scoreboard_entry_q[i][j].timeout_threshold);
|
||||
$display("txn_id: 0x%h, sender: %2d (%d,%d), sender_local_port: %d, qos_value = %d",
|
||||
scoreboard_entry_q[i][j].txn_id,
|
||||
`ifdef ENABLE_TXN_ID
|
||||
scoreboard_entry_q[i][j].txn_id,
|
||||
`else
|
||||
'0,
|
||||
`endif
|
||||
i, scoreboard_entry_q[i][j].src_id.x_position, scoreboard_entry_q[i][j].src_id.y_position,
|
||||
scoreboard_entry_q[i][j].src_id.device_port,
|
||||
scoreboard_entry_q[i][j].qos_value);
|
||||
@@ -404,7 +429,11 @@ always_ff @(posedge clk) begin
|
||||
$display("[%16d] info: scoreboard allocate entry, sender: %2d (%d,%d), txn_id: 0x%h, QoS = %d, inport_vc_id:%d, tgt_id: (%d,%d), tgt_local_port: %d, look_ahead_routing: %d, send_data: %h",
|
||||
$time(), i,
|
||||
scoreboard_entry_d[i][j].src_id.x_position, scoreboard_entry_d[i][j].src_id.y_position,
|
||||
`ifdef ENABLE_TXN_ID
|
||||
scoreboard_entry_d[i][j].txn_id,
|
||||
`else
|
||||
'0,
|
||||
`endif
|
||||
scoreboard_entry_d[i][j].qos_value,
|
||||
scoreboard_entry_d[i][j].inport_vc_id,
|
||||
scoreboard_entry_d[i][j].tgt_id.x_position, scoreboard_entry_d[i][j].tgt_id.y_position, scoreboard_entry_d[i][j].tgt_id.device_port,
|
||||
@@ -419,7 +448,11 @@ always_ff @(posedge clk) begin
|
||||
$display("[%16d] info: scoreboard deallocate entry, sender: %2d (%d,%d), txn_id: 0x%h, QoS = %d, inport_vc_id:%d, tgt_id: (%d,%d), tgt_local_port: %d, send_data: %h, [noc_latency: %4d], [app_latency: %4d], [receiver (%d,%d) port %d average_noc_bandwidth: %fGBps])",
|
||||
$time(), i,
|
||||
scoreboard_entry_q[i][j].src_id.x_position, scoreboard_entry_q[i][j].src_id.y_position,
|
||||
`ifdef ENABLE_TXN_ID
|
||||
scoreboard_entry_q[i][j].txn_id,
|
||||
`else
|
||||
'0,
|
||||
`endif
|
||||
scoreboard_entry_q[i][j].qos_value,
|
||||
scoreboard_entry_q[i][j].inport_vc_id,
|
||||
scoreboard_entry_q[i][j].tgt_id.x_position, scoreboard_entry_q[i][j].tgt_id.y_position, scoreboard_entry_q[i][j].tgt_id.device_port,
|
||||
|
||||
@@ -143,11 +143,21 @@ assign flit_buffer_dequeue_vld = free_credit_vld & flit_vld;
|
||||
// output to dut
|
||||
assign tx_flit_pend_o = 1'b1;
|
||||
assign tx_flit_v_o = flit_buffer_dequeue_vld;
|
||||
assign tx_flit_o = {flit_buffer_head.flit_data,
|
||||
flit_buffer_head.flit_head.txn_id,
|
||||
flit_buffer_head.flit_head.src_id,
|
||||
flit_buffer_head.flit_head.tgt_id,
|
||||
flit_buffer_head.qos_value};
|
||||
// assign tx_flit_o = {flit_buffer_head.flit_data,
|
||||
// flit_buffer_head.flit_head.txn_id,
|
||||
// flit_buffer_head.flit_head.src_id,
|
||||
// flit_buffer_head.flit_head.tgt_id,
|
||||
// flit_buffer_head.qos_value};
|
||||
assign tx_flit_o[(FLIT_LENGTH-1)-:FLIT_DATA_LENGTH] = flit_buffer_head.flit_data;
|
||||
assign tx_flit_o.tgt_id = flit_buffer_head.flit_head.tgt_id;
|
||||
assign tx_flit_o.src_id = flit_buffer_head.flit_head.src_id;
|
||||
`ifdef ENABLE_TXN_ID
|
||||
assign tx_flit_o.txn_id = flit_buffer_head.flit_head.txn_id;
|
||||
`endif
|
||||
`ifdef USE_QOS_VALUE
|
||||
assign tx_flit_o.qos_value = flit_buffer_head.flit_head.qos_value;
|
||||
`endif
|
||||
|
||||
assign tx_flit_vc_id_o = {{(VC_ID_NUM_MAX_W-VC_NUM_OUTPORT_IDX_W){1'b0}}, free_credit_vc_id};
|
||||
assign tx_flit_look_ahead_routing_o = flit_buffer_head.flit_head.look_ahead_routing;
|
||||
|
||||
@@ -155,7 +165,9 @@ assign tx_flit_look_ahead_routing_o = flit_buffer_head.flit_head.look_ahead_ro
|
||||
assign new_scoreboard_entry_vld_o = tx_flit_v_o;
|
||||
assign new_scoreboard_entry_o.tgt_id = flit_buffer_head.flit_head.tgt_id;
|
||||
assign new_scoreboard_entry_o.src_id = flit_buffer_head.flit_head.src_id;
|
||||
`ifdef ENABLE_TXN_ID
|
||||
assign new_scoreboard_entry_o.txn_id = flit_buffer_head.flit_head.txn_id;
|
||||
`endif
|
||||
assign new_scoreboard_entry_o.timeout_threshold = flit_buffer_head.timeout_threshold;
|
||||
assign new_scoreboard_entry_o.look_ahead_routing = flit_buffer_head.flit_head.look_ahead_routing;
|
||||
assign new_scoreboard_entry_o.inport_vc_id = tx_flit_vc_id_o;
|
||||
|
||||
@@ -18,7 +18,16 @@ import v_noc_pkg::*;
|
||||
// | \
|
||||
// sender1 (1,0) (local) sender4
|
||||
parameter TEST_CASE_MESH_RANDOM = 0, // random sender and receiver
|
||||
parameter TEST_CASE_MESH_DIAGONAL = 0, // from (0,0) to (NODE_NUM_X_DIMESION-1, NODE_NUM_Y_DIMESION-1)
|
||||
parameter TEST_CASE_MESH_DIAGONAL = 0, // from (0, 0) to (NODE_NUM_X_DIMESION-1, NODE_NUM_Y_DIMESION-1)
|
||||
|
||||
parameter TEST_CASE_MESH_BIT_COMPLEMENT = 0, // from (x, y) to (radix-x-1, radix-y-1)
|
||||
parameter TEST_CASE_MESH_BIT_REVERSE = 0,
|
||||
parameter TEST_CASE_MESH_BIT_ROTATION = 0,
|
||||
parameter TEST_CASE_MESH_NEIGHBOR = 0,
|
||||
parameter TEST_CASE_MESH_SHUFFLE = 0,
|
||||
parameter TEST_CASE_MESH_TRANSPOSE = 0,
|
||||
parameter TEST_CASE_MESH_TORNADO = 0,
|
||||
|
||||
parameter NODE_NUM_X_DIMESION = 2, // only used in TEST_CASE_MESH_* mode
|
||||
parameter NODE_NUM_Y_DIMESION = 3, // only used in TEST_CASE_MESH_* mode
|
||||
parameter LOCAL_PORT_NUM = 1, // only used in TEST_CASE_MESH_* mode
|
||||
@@ -91,7 +100,7 @@ generate
|
||||
|
||||
|
||||
|
||||
else if(TEST_CASE_MESH_RANDOM || TEST_CASE_MESH_DIAGONAL) begin: gen_map_test_case_mesh_x
|
||||
else /*if(TEST_CASE_MESH_RANDOM || TEST_CASE_MESH_DIAGONAL)*/ begin: gen_map_test_case_mesh_x
|
||||
// sender id = x_posotion*(NODE_NUM_Y_DIMESION*LOCAL_PORT_NUM) + y_posotion*LOCAL_PORT_NUM + local_port_id
|
||||
always_comb begin
|
||||
new_test_vld_o = '0;
|
||||
@@ -219,7 +228,9 @@ generate
|
||||
new_test[i].flit_data = ((src_id_lfsr_data[RANDOM_BIT_NUM-1:0] ^ i) << tgt_id_lfsr_data[$clog2(FLIT_DATA_LENGTH-RANDOM_BIT_NUM)-1:0]) | flit_data_mask;
|
||||
end
|
||||
|
||||
`ifdef ENABLE_TXN_ID
|
||||
assign new_test[i].flit_head.txn_id = txn_counter + i;
|
||||
`endif
|
||||
|
||||
assign new_test[i].timeout_threshold = SCOREBOARD_TIMEOUT_EN ? SCOREBOARD_TIMEOUT_THRESHOLD : '0; // 0 means no timeout error
|
||||
|
||||
@@ -267,79 +278,153 @@ generate
|
||||
end
|
||||
endcase
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end else begin: gen_test_case_mesh
|
||||
|
||||
logic [FLIT_DATA_LENGTH-1:0] flit_data_mask;
|
||||
assign flit_data_mask = ~({RANDOM_BIT_NUM{1'b1}} << tgt_id_lfsr_data[$clog2(FLIT_DATA_LENGTH-RANDOM_BIT_NUM)-1:0]);
|
||||
|
||||
else if(TEST_CASE_MESH_RANDOM) begin: gen_test_case_mesh_random
|
||||
for(i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin: gen_new_test
|
||||
always_comb begin
|
||||
new_test[i].flit_head.src_id.x_position = src_id_lfsr_data[i*3+:3] % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.src_id.y_position = src_id_lfsr_data[RANDOM_BIT_NUM-1-i*3-:3] % NODE_NUM_Y_DIMESION;
|
||||
|
||||
new_test[i].flit_head.tgt_id.x_position = tgt_id_lfsr_data[i*3+:3] % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.tgt_id.y_position = tgt_id_lfsr_data[RANDOM_BIT_NUM-1-i*3-:3] % NODE_NUM_Y_DIMESION;
|
||||
logic [TEST_CASE_NUM_PER_CYCLE-1:0][$clog2(NODE_NUM_X_DIMESION*NODE_NUM_Y_DIMESION)-1:0] source_id;
|
||||
logic [TEST_CASE_NUM_PER_CYCLE-1:0][$clog2(NODE_NUM_X_DIMESION*NODE_NUM_Y_DIMESION)-1:0] source_id_rev;
|
||||
logic [TEST_CASE_NUM_PER_CYCLE-1:0][$clog2(NODE_NUM_X_DIMESION*NODE_NUM_Y_DIMESION)-1:0] dest_id;
|
||||
for(genvar i_id = 0; i_id < TEST_CASE_NUM_PER_CYCLE; i_id++) begin
|
||||
assign source_id[i_id] = new_test[i_id].flit_head.src_id.y_position * NODE_NUM_X_DIMESION + new_test[i_id].flit_head.src_id.x_position;
|
||||
for(genvar j_id = 0; j_id < $clog2(NODE_NUM_X_DIMESION*NODE_NUM_Y_DIMESION); j_id++) begin
|
||||
assign source_id_rev[i_id][j_id] = source_id[i_id][$clog2(NODE_NUM_X_DIMESION*NODE_NUM_Y_DIMESION)-1-j_id];
|
||||
end
|
||||
|
||||
|
||||
logic [FLIT_DATA_LENGTH-1:0] flit_data_mask;
|
||||
always_comb begin
|
||||
flit_data_mask = ~({RANDOM_BIT_NUM{1'b1}} << tgt_id_lfsr_data[$clog2(FLIT_DATA_LENGTH-RANDOM_BIT_NUM)-1:0]);
|
||||
end
|
||||
|
||||
always_comb begin
|
||||
// default values
|
||||
for(int i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin
|
||||
new_test[i].flit_data = '1;
|
||||
new_test[i].flit_data = ((src_id_lfsr_data[RANDOM_BIT_NUM-1:0] ^ i) << tgt_id_lfsr_data[$clog2(FLIT_DATA_LENGTH-RANDOM_BIT_NUM)-1:0]) | flit_data_mask;
|
||||
end
|
||||
|
||||
assign new_test[i].flit_head.txn_id = txn_counter + i;
|
||||
|
||||
`ifdef COMMON_QOS_EXTRA_RT_VC
|
||||
assign new_test[i].timeout_threshold = (new_test[i].qos_value == '1) ? 2 * (NODE_NUM_X_DIMESION + NODE_NUM_Y_DIMESION - 1) :
|
||||
SCOREBOARD_TIMEOUT_EN ? SCOREBOARD_TIMEOUT_THRESHOLD : '0;
|
||||
`else
|
||||
assign new_test[i].timeout_threshold = SCOREBOARD_TIMEOUT_EN ? SCOREBOARD_TIMEOUT_THRESHOLD : '0;
|
||||
`ifdef ENABLE_TXN_ID
|
||||
new_test[i].flit_head.txn_id = txn_counter + i;
|
||||
`endif
|
||||
|
||||
assign new_test[i].mcycle_when_generated = mcycle_i;
|
||||
`ifdef COMMON_QOS_EXTRA_RT_VC
|
||||
new_test[i].timeout_threshold = //(new_test[i].qos_value == '1) ? 2 * (NODE_NUM_X_DIMESION + NODE_NUM_Y_DIMESION - 1) :
|
||||
SCOREBOARD_TIMEOUT_EN ? SCOREBOARD_TIMEOUT_THRESHOLD : '0;
|
||||
`else
|
||||
new_test[i].timeout_threshold = SCOREBOARD_TIMEOUT_EN ? SCOREBOARD_TIMEOUT_THRESHOLD : '0;
|
||||
`endif
|
||||
|
||||
assign new_test[i].flit_head.src_id.device_id = '0;
|
||||
assign new_test[i].flit_head.tgt_id.device_id = '0;
|
||||
new_test[i].mcycle_when_generated = mcycle_i;
|
||||
|
||||
assign new_test[i].flit_head.src_id.device_port = (src_id_lfsr_data[i*2+:2] ^ tgt_id_lfsr_data[RANDOM_BIT_NUM-1-i*2-:2]) % LOCAL_PORT_NUM;
|
||||
assign new_test[i].flit_head.tgt_id.device_port = (src_id_lfsr_data[RANDOM_BIT_NUM-1-i*2-:2] ^ tgt_id_lfsr_data[i*2+:2]) % LOCAL_PORT_NUM;
|
||||
end
|
||||
end
|
||||
new_test[i].flit_head.src_id.device_id = '0;
|
||||
new_test[i].flit_head.tgt_id.device_id = '0;
|
||||
|
||||
else if(TEST_CASE_MESH_DIAGONAL) begin: gen_test_case_mesh_diagonal
|
||||
for(i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin: gen_new_test
|
||||
always_comb begin
|
||||
new_test[i].flit_head.src_id.x_position = 0;
|
||||
new_test[i].flit_head.src_id.y_position = 0;
|
||||
new_test[i].flit_head.src_id.device_port = (src_id_lfsr_data[i*2+:2] ^ tgt_id_lfsr_data[RANDOM_BIT_NUM-1-i*2-:2]) % LOCAL_PORT_NUM;
|
||||
new_test[i].flit_head.tgt_id.device_port = (src_id_lfsr_data[RANDOM_BIT_NUM-1-i*2-:2] ^ tgt_id_lfsr_data[i*2+:2]) % LOCAL_PORT_NUM;
|
||||
|
||||
new_test[i].flit_head.tgt_id.x_position = NODE_NUM_X_DIMESION - 1;
|
||||
new_test[i].flit_head.tgt_id.y_position = NODE_NUM_Y_DIMESION - 1;
|
||||
dest_id[i] = '0;
|
||||
end
|
||||
|
||||
|
||||
logic [FLIT_DATA_LENGTH-1:0] flit_data_mask;
|
||||
always_comb begin
|
||||
flit_data_mask = ~({RANDOM_BIT_NUM{1'b1}} << tgt_id_lfsr_data[$clog2(FLIT_DATA_LENGTH-RANDOM_BIT_NUM)-1:0]);
|
||||
new_test[i].flit_data = '1;
|
||||
new_test[i].flit_data = ((src_id_lfsr_data[RANDOM_BIT_NUM-1:0] ^ i) << tgt_id_lfsr_data[$clog2(FLIT_DATA_LENGTH-RANDOM_BIT_NUM)-1:0]) | flit_data_mask;
|
||||
|
||||
if(TEST_CASE_MESH_RANDOM) begin
|
||||
for(int i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin
|
||||
new_test[i].flit_head.src_id.x_position = src_id_lfsr_data[i*3+:3] % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.src_id.y_position = src_id_lfsr_data[RANDOM_BIT_NUM-1-i*3-:3] % NODE_NUM_Y_DIMESION;
|
||||
|
||||
new_test[i].flit_head.tgt_id.x_position = tgt_id_lfsr_data[i*3+:3] % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.tgt_id.y_position = tgt_id_lfsr_data[RANDOM_BIT_NUM-1-i*3-:3] % NODE_NUM_Y_DIMESION;
|
||||
end
|
||||
|
||||
end else if(TEST_CASE_MESH_DIAGONAL) begin
|
||||
for(int i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin
|
||||
new_test[i].flit_head.src_id.x_position = 0;
|
||||
new_test[i].flit_head.src_id.y_position = 0;
|
||||
|
||||
new_test[i].flit_head.tgt_id.x_position = NODE_NUM_X_DIMESION - 1;
|
||||
new_test[i].flit_head.tgt_id.y_position = NODE_NUM_Y_DIMESION - 1;
|
||||
|
||||
new_test[i].timeout_threshold = SCOREBOARD_TIMEOUT_EN ? SCOREBOARD_TIMEOUT_THRESHOLD : '0;
|
||||
|
||||
new_test[i].flit_head.src_id.device_id = '0;
|
||||
new_test[i].flit_head.tgt_id.device_id = '0;
|
||||
|
||||
new_test[i].flit_head.src_id.device_port = 0;
|
||||
new_test[i].flit_head.tgt_id.device_port = 0;
|
||||
end
|
||||
|
||||
end else if (TEST_CASE_MESH_BIT_COMPLEMENT) begin
|
||||
for(int i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin
|
||||
new_test[i].flit_head.src_id.x_position = src_id_lfsr_data[i*3+:3] % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.src_id.y_position = src_id_lfsr_data[RANDOM_BIT_NUM-1-i*3-:3] % NODE_NUM_Y_DIMESION;
|
||||
|
||||
new_test[i].flit_head.tgt_id.x_position = NODE_NUM_X_DIMESION-1-new_test[i].flit_head.src_id.x_position;
|
||||
new_test[i].flit_head.tgt_id.y_position = NODE_NUM_Y_DIMESION-1-new_test[i].flit_head.src_id.y_position;
|
||||
end
|
||||
|
||||
end else if (TEST_CASE_MESH_BIT_REVERSE) begin
|
||||
for(int i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin
|
||||
new_test[i].flit_head.src_id.x_position = src_id_lfsr_data[i*3+:3] % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.src_id.y_position = src_id_lfsr_data[RANDOM_BIT_NUM-1-i*3-:3] % NODE_NUM_Y_DIMESION;
|
||||
|
||||
new_test[i].flit_head.tgt_id.x_position = source_id_rev % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.tgt_id.y_position = (source_id_rev / NODE_NUM_X_DIMESION) % NODE_NUM_Y_DIMESION;
|
||||
end
|
||||
|
||||
end else if (TEST_CASE_MESH_BIT_ROTATION) begin
|
||||
for(int i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin
|
||||
new_test[i].flit_head.src_id.x_position = src_id_lfsr_data[i*3+:3] % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.src_id.y_position = src_id_lfsr_data[RANDOM_BIT_NUM-1-i*3-:3] % NODE_NUM_Y_DIMESION;
|
||||
|
||||
new_test[i].flit_head.tgt_id.x_position = new_test[i].flit_head.src_id.x_position > 0 ? new_test[i].flit_head.src_id.x_position - 1:
|
||||
new_test[i].flit_head.src_id.y_position > 0 ? NODE_NUM_X_DIMESION-1:
|
||||
new_test[i].flit_head.src_id.x_position;
|
||||
new_test[i].flit_head.tgt_id.y_position = new_test[i].flit_head.src_id.x_position > 0 ? new_test[i].flit_head.src_id.y_position :
|
||||
new_test[i].flit_head.src_id.y_position > 0 ? new_test[i].flit_head.src_id.y_position - 1:
|
||||
new_test[i].flit_head.src_id.y_position;
|
||||
end
|
||||
|
||||
end else if (TEST_CASE_MESH_NEIGHBOR) begin
|
||||
for(int i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin
|
||||
new_test[i].flit_head.src_id.x_position = src_id_lfsr_data[i*3+:3] % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.src_id.y_position = src_id_lfsr_data[RANDOM_BIT_NUM-1-i*3-:3] % NODE_NUM_Y_DIMESION;
|
||||
|
||||
new_test[i].flit_head.tgt_id.x_position = (new_test[i].flit_head.src_id.x_position + 1) % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.tgt_id.y_position = new_test[i].flit_head.src_id.y_position ;
|
||||
end
|
||||
|
||||
end else if (TEST_CASE_MESH_SHUFFLE) begin
|
||||
for(int i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin
|
||||
new_test[i].flit_head.src_id.x_position = src_id_lfsr_data[i*3+:3] % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.src_id.y_position = src_id_lfsr_data[RANDOM_BIT_NUM-1-i*3-:3] % NODE_NUM_Y_DIMESION;
|
||||
|
||||
if(source_id[i] < (NODE_NUM_X_DIMESION*NODE_NUM_Y_DIMESION)/2) begin
|
||||
dest_id[i] = source_id[i] * 2;
|
||||
end else begin
|
||||
dest_id[i] = (source_id[i] *2) - (NODE_NUM_X_DIMESION*NODE_NUM_Y_DIMESION) + 1;
|
||||
end
|
||||
new_test[i].flit_head.tgt_id.x_position = dest_id % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.tgt_id.y_position = (dest_id / NODE_NUM_X_DIMESION) % NODE_NUM_Y_DIMESION;
|
||||
end
|
||||
|
||||
end else if (TEST_CASE_MESH_TRANSPOSE) begin
|
||||
for(int i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin
|
||||
new_test[i].flit_head.src_id.x_position = src_id_lfsr_data[i*3+:3] % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.src_id.y_position = src_id_lfsr_data[RANDOM_BIT_NUM-1-i*3-:3] % NODE_NUM_Y_DIMESION;
|
||||
|
||||
new_test[i].flit_head.tgt_id.x_position = new_test[i].flit_head.src_id.y_position % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.tgt_id.y_position = new_test[i].flit_head.src_id.x_position % NODE_NUM_Y_DIMESION;
|
||||
end
|
||||
|
||||
end else if (TEST_CASE_MESH_TORNADO) begin
|
||||
for(int i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin
|
||||
new_test[i].flit_head.src_id.x_position = src_id_lfsr_data[i*3+:3] % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.src_id.y_position = src_id_lfsr_data[RANDOM_BIT_NUM-1-i*3-:3] % NODE_NUM_Y_DIMESION;
|
||||
|
||||
new_test[i].flit_head.tgt_id.x_position = (new_test[i].flit_head.src_id.x_position + int'($ceil(NODE_NUM_X_DIMESION*1.0/2)) - 1) % NODE_NUM_X_DIMESION;
|
||||
new_test[i].flit_head.tgt_id.y_position = new_test[i].flit_head.src_id.y_position;
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
assign new_test[i].flit_head.txn_id = txn_counter + i;
|
||||
|
||||
assign new_test[i].timeout_threshold = SCOREBOARD_TIMEOUT_EN ? SCOREBOARD_TIMEOUT_THRESHOLD : '0;
|
||||
|
||||
assign new_test[i].mcycle_when_generated = mcycle_i;
|
||||
|
||||
assign new_test[i].flit_head.src_id.device_id = '0;
|
||||
assign new_test[i].flit_head.tgt_id.device_id = '0;
|
||||
|
||||
assign new_test[i].flit_head.src_id.device_port = 0;
|
||||
assign new_test[i].flit_head.tgt_id.device_port = 0;
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
@@ -389,7 +474,7 @@ generate
|
||||
|
||||
|
||||
|
||||
else if(TEST_CASE_MESH_RANDOM || TEST_CASE_MESH_DIAGONAL) begin: gen_test_case_look_ahead_routing_mesh_x
|
||||
else /*if(TEST_CASE_MESH_RANDOM || TEST_CASE_MESH_DIAGONAL)*/ begin: gen_test_case_look_ahead_routing_mesh_x
|
||||
for(i = 0; i < TEST_CASE_NUM_PER_CYCLE; i++) begin: gen_new_test_look_ahead_routing
|
||||
always_comb begin
|
||||
if(new_test[i].flit_head.tgt_id.x_position > new_test[i].flit_head.src_id.x_position) begin
|
||||
|
||||
Reference in New Issue
Block a user