[wiki:Component SocLib Components General Index] = !VirtualDspinRouter = == 1) Functional Description == This is the elementary node of a [wiki:Component/VirtualDspinArray VirtualDspinArray]. The Virtual Dspin Router is a component which connects up to five inputs (one local, four for the adjacent Virtual Dspin Router) to five outputs (idem) for each virtual channel. Both channels share the same bus for routing. Thus, each input has a time multiplexing register, to decide which channel writes on the bus. It implements the X-First algorithm for multicast, and X-First or Y-First for broadcast, depending on the sender's coordinates' parity. During broadcast, order of outputs is determined by their priority : in case of X-First routing, EAST and WEST Output are chosen first (NORTH and SOUTH for Y-routing). === Input INFSM States === || FSM_REQ || Waiting for paquet or sending first flit || || FSM_DTN || Allocated to correct output for multicast || || FSM_DT_11 || Sending second flit to first output in multicast || || FSM_REQ_12 || Sending first flit to second output in multicast || || FSM_DT_12 || Sending second flit to second output in multicast || || FSM_REQ_21 || Sending first flit to third output in multicast || || FSM_DT_21 || Sending second flit to third output in multicast || || FSM_REQ_22 || Sending first flit to fourth output in multicast || || FSM_DT_22 || Sending second flit to fourth output in multicast || || FSM_REQ_LOCAL || Sending first flit to fifth (LOCAL) output in multicast || || FSM_DT_LOCAL || Sending second flit to fifth (LOCAL) output in multicast || === Output INFSM States === || LOCAL || Allocated to LOCAL input || || NORTH || Allocated to NORTH input || || SOUTH || Allocated to SOUTH input || || EAST || Allocated to EAST input || || WEST || Allocated to WEST input || || NOP_LOCAL || Not allocated, and last allocated was LOCAL || || NOP_NORTH || Not allocated, and last allocated was NORTH || || NOP_SOUTH || Not allocated, and last allocated was SOUTH || || NOP_EAST || Not allocated, and last allocated was EAST || || NOP_WEST || Not allocated, and last allocated was WEST || || NOP || Not allocated, and last allocated is unkwnow (equivalent of NOP_LOCAL)|| == 2) Component definition & usage == source:trunk/soclib/soclib/module/network_component/virtual_dspin_router/caba/metadata/virtual_dspin_router.sd == 3) CABA implementation == === CABA sources === || interface || source:trunk/soclib/soclib/module/network_component/virtual_dspin_router/caba/source/include/virtual_dspin_router.h || || implementation || source:trunk/soclib/soclib/module/network_component/virtual_dspin_router/caba/source/src/virtual_dspin_router.cpp || === CABA Internal registers === || sc_signal || r_output_index || for each channel & each output, input index (INFSM) || sc_signal || r_tdm || for each input, Time Multiplexing || sc_signal > || r_buf || for each channel & each input, fifo extension || sc_signal || r_infsm || for each channel & each input FSM state === CABA Template parameters === || int data_size || Size of flit || || int io_mask_offset || Emplacement of IO checking || || int io_mask_size || Size of IO checking || || int io_number_offset || Emplacement of IO index in IO table || || int io_number_size || Size of IO index || || int x_addressing_offset || Emplacement of target x in first flit || || int x_addressing_size || Size of target x || || int y_addressing_offset || Emplacement of target y in first flit || || int y_addressing_size || Size of target y || || int eop_offset || Emplacement of eop checking || || int broadcast_offset || Emplacement of broadcast checking || || int in_fifo_size || Size of input fifos || || int out_fifo_size || Size of output fifos || || int x_min_offset || Emplacement of x_min for broadcast confinement || || int x_max_offset || Emplacement of x_max for broadcast confinement || || int y_min_offset || Emplacement of y_min for broadcast confinement || || int y_max_offset || Emplacement of y_max for broadcast confinement || === CABA Constructor parameters === || sc_module_name insname || instance name || || int x || x position in the network || || int y || y position in the network || || bool n || North connexion enabled || || bool s || South connexion enabled || || bool e || East connexion enabled || || bool w || West connexion enabled || || bool broadcast0 || Broadcast activated for channel 0 || || bool broadcast1 || Broadcast activated for channel 1 || || bool io0 || IO enable for channel 0 || || bool io1 || IO enable for channel 1 || || clusterCoordinates * aIO_table || list of IO Clusters || === CABA ports === || sc_in || p_clk || Global system clock || || sc_in || p_resetn || Global system reset || || !DspinOutput || ** p_out || For each output and each virtual channel || || !DspinInput || ** p_in || For each input and each virtual channel || == 4) TLMT implementation == The TLM-T implementation is not available yet.