diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2250e41
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+build
+out
+sim
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..ffc5dd7
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,56 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+PROJECT(sim)
+
+SET(CMAKE_PREFIX_PATH /usr/local/systemc/)
+
+set(CMAKE_CXX_STANDARD 17)
+
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -pthread")
+
+set(CMAKE_BUILD_TYPE Release)
+
+INCLUDE_DIRECTORIES(${CMAKE_PREFIX_PATH}/include)
+INCLUDE_DIRECTORIES(./src)
+
+FIND_LIBRARY(systemc systemc ${CMAKE_PREFIX_PATH}/lib-linux64)
+LINK_DIRECTORIES(${CMAKE_PREFIX_PATH}/lib-linux64)
+
+ADD_DEFINITIONS(-D SC_INCLUDE_DYNAMIC_PROCESSES -D SYSTEMC_DISABLE_COPYRIGHT_MESSAGE -D ENABLE_BUFFER_VC_STATS -D SC_DISABLE_API_VERSION_CHECK)
+
+ADD_EXECUTABLE(${PROJECT_NAME}
+ src/main.cpp
+ src/networkInterface/NetworkInterfaceTlm.cpp
+ src/networkManager/NetworkManager.cpp
+ src/noc/noc.cpp
+ src/router/router.cpp
+ src/utils/memory_manager.cpp
+ src/utils/utils.cpp
+ src/utils/semaphore_manager.h
+ src/utils/configuration.h
+ src/utils/noc_logger.cpp
+ src/ratatoskrUtils/utils/Report.cpp
+ src/ratatoskrUtils/utils/GlobalReport.cpp
+ src/ratatoskrUtils/utils/Structures.cpp
+ src/ratatoskrUtils/utils/PacketFactory.cpp
+ src/ratatoskrUtils/utils/GlobalResources.cpp
+ src/ratatoskrUtils/utils/Statistics.cpp
+ src/ratatoskrUtils/processingElement/ProcessingElement.cpp
+ src/ratatoskrUtils/processingElement/ProcessingElementVC.cpp
+ src/ratatoskrUtils/networkInterface/NetworkInterface.cpp
+ src/ratatoskrUtils/traffic/Packet.cpp
+ src/ratatoskrUtils/traffic/Flit.cpp
+ src/ratatoskrUtils/traffic/synthetic/SyntheticPool.cpp
+ src/ratatoskrUtils/traffic/task/TaskPool.cpp
+ src/ratatoskrUtils/traffic/TrafficPool.cpp
+ src/ratatoskrUtils/link/Link.cpp
+ src/ratatoskrUtils/traffic/netrace/NetracePool.cpp
+ src/ratatoskrUtils/traffic/netrace/NetracePool.h
+ src/ratatoskrUtils/traffic/netrace/ntNetrace.h
+ src/ratatoskrUtils/traffic/netrace/ntNetrace.cpp
+ src/ratatoskrUtils/traffic/netrace/ntQueue.h
+ src/ratatoskrUtils/traffic/netrace/ntQueue.cpp
+ src/ratatoskrUtils/utils/TrafficTracer.cpp
+)
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} systemc pugixml boost_system zmq boost_program_options)
+
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 258b7e5..0000000
--- a/Makefile
+++ /dev/null
@@ -1,27 +0,0 @@
-CXX = g++
-CXXFLAGS = -std=c++17 -g -I$(SYSTEMC_HOME)/include -I./include
-LDFLAGS = -L$(SYSTEMC_HOME)/lib-linux64 -lsystemc
-SRCDIR = src
-INCDIR = include
-OBJDIR = obj
-OUTDIR = out
-
-SOURCES = $(wildcard $(SRCDIR)/*.cpp)
-OBJECTS = $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
-EXECUTABLE = $(OUTDIR)/noc_simulation
-
-all: directories $(EXECUTABLE)
-
-directories:
- mkdir -p $(OBJDIR) $(OUTDIR)
-
-$(EXECUTABLE): $(OBJECTS) main.cpp
- $(CXX) $(CXXFLAGS) $(OBJECTS) main.cpp -o $@ $(LDFLAGS)
-
-$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
- $(CXX) $(CXXFLAGS) -c $< -o $@
-
-clean:
- rm -rf $(OBJDIR) $(OUTDIR)
-
-.PHONY: all clean directories
diff --git a/README.md b/README.md
index 369007b..ec533c2 100644
--- a/README.md
+++ b/README.md
@@ -1,22 +1,17 @@
-# Corona Optical Network on Chip (NoC) Simulation
+# Defines
+
+`cmake -DDEFINE_ENABLE_NETRACE=ON`
+
+enables netrace mode
+
+`cmake -DDEFINE_ENABLE_GUI=ON`
+
+enables GUI mode
+
+# Corona Optical Network on Chip (NoC) Simulation with Ratatoskr
This project simulates the Corona all optical Network-on-Chip (NoC) architecture using SystemC TLM 2.0.
-## Project Structure
-
-Corona_NoC_Optical_230924/
-├── include/
-│ ├── configuration.h
-│ ├── core.h
-│ ├── router.h
-| |__ semaphore_manager.h
-├── src/
-│ ├── core.cpp
-│ ├── router.cpp
-├── main.cpp
-├── Makefile
-└── README.md
-
## Prerequisites
- SystemC (version 2.3.3 or later)
@@ -32,10 +27,11 @@ Corona_NoC_Optical_230924/
export SYSTEMC_HOME=/path/to/your/systemc/installation
## Compilation
-make
+ ./build.sh
-## Output
- ./out/noc_simulation
+## Output simple test
+ ./sim --configFolder .
+
# Log file
@@ -97,4 +93,4 @@ In general, if we consider any particular cluster ‘n’, there will be a numbe
• Release broadcast token when broadcast message transmission is finished
• Detects for messages on home channel ‘n’ (Reading data)
• Detecting the broadcast channel for broadcast messages
-• Acquire and renew the home token
\ No newline at end of file
+• Acquire and renew the home token
diff --git a/build.sh b/build.sh
new file mode 100644
index 0000000..97d2219
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+mkdir build
+cd build
+cmake ..
+make -j
+cp sim ..
+cd ..
+rm -rf build
diff --git a/config/config.xml b/config/config.xml
new file mode 100644
index 0000000..621afd8
--- /dev/null
+++ b/config/config.xml
@@ -0,0 +1,55 @@
+
+
+
+
+ report
+
+
+ config/net.xml
+
+
+
+
+
+ task
+ config/simple_data.xml
+ config/simple_map.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5 6 9 10
+
+
diff --git a/config/net.xml b/config/net.xml
new file mode 100644
index 0000000..fc66cae
--- /dev/null
+++ b/config/net.xml
@@ -0,0 +1,1136 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/only_config_msg_test/config.xml b/config/only_config_msg_test/config.xml
new file mode 100644
index 0000000..51921b4
--- /dev/null
+++ b/config/only_config_msg_test/config.xml
@@ -0,0 +1,55 @@
+
+
+
+
+ report
+
+
+ config/simple_test/net.xml
+
+
+
+
+
+ task
+ config/only_config_msg_test/data.xml
+ config/only_config_msg_test/map.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5 6 9 10
+
+
diff --git a/config/only_config_msg_test/data.xml b/config/only_config_msg_test/data.xml
new file mode 100644
index 0000000..5d88857
--- /dev/null
+++ b/config/only_config_msg_test/data.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/only_config_msg_test/map.xml b/config/only_config_msg_test/map.xml
new file mode 100644
index 0000000..8cb1846
--- /dev/null
+++ b/config/only_config_msg_test/map.xml
@@ -0,0 +1,19 @@
+
+
diff --git a/config/only_config_msg_test/net.xml b/config/only_config_msg_test/net.xml
new file mode 100644
index 0000000..7c7104a
--- /dev/null
+++ b/config/only_config_msg_test/net.xml
@@ -0,0 +1,1612 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/simple_2_layer_test/config.xml b/config/simple_2_layer_test/config.xml
new file mode 100644
index 0000000..c9fe69b
--- /dev/null
+++ b/config/simple_2_layer_test/config.xml
@@ -0,0 +1,55 @@
+
+
+
+
+ report
+
+
+ config/simple_test/net.xml
+
+
+
+
+
+ task
+ config/simple_2_layer_test/data.xml
+ config/simple_2_layer_test/map.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5 6 9 10
+
+
diff --git a/config/simple_2_layer_test/data.xml b/config/simple_2_layer_test/data.xml
new file mode 100644
index 0000000..0fc5fbc
--- /dev/null
+++ b/config/simple_2_layer_test/data.xml
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/simple_2_layer_test/map.xml b/config/simple_2_layer_test/map.xml
new file mode 100644
index 0000000..7c2fd0a
--- /dev/null
+++ b/config/simple_2_layer_test/map.xml
@@ -0,0 +1,23 @@
+
+
diff --git a/config/simple_2_layer_test/net.xml b/config/simple_2_layer_test/net.xml
new file mode 100644
index 0000000..7c7104a
--- /dev/null
+++ b/config/simple_2_layer_test/net.xml
@@ -0,0 +1,1612 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/simple_2_point_test/2pt_data.xml b/config/simple_2_point_test/2pt_data.xml
new file mode 100644
index 0000000..c91fdb8
--- /dev/null
+++ b/config/simple_2_point_test/2pt_data.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/simple_2_point_test/2pt_map.xml b/config/simple_2_point_test/2pt_map.xml
new file mode 100644
index 0000000..ca03596
--- /dev/null
+++ b/config/simple_2_point_test/2pt_map.xml
@@ -0,0 +1,15 @@
+
+
diff --git a/config/simple_2_point_test/config.xml b/config/simple_2_point_test/config.xml
new file mode 100644
index 0000000..4de57e7
--- /dev/null
+++ b/config/simple_2_point_test/config.xml
@@ -0,0 +1,55 @@
+
+
+
+
+ report
+
+
+ config/simple_test/net.xml
+
+
+
+
+
+ task
+ config/simple_2_point_test/2pt_data.xml
+ config/simple_2_point_test/2pt_map.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5 6 9 10
+
+
diff --git a/config/simple_2_point_test/net.xml b/config/simple_2_point_test/net.xml
new file mode 100644
index 0000000..5d47d14
--- /dev/null
+++ b/config/simple_2_point_test/net.xml
@@ -0,0 +1,1136 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/simple_data.xml b/config/simple_data.xml
new file mode 100644
index 0000000..e01c948
--- /dev/null
+++ b/config/simple_data.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/simple_map.xml b/config/simple_map.xml
new file mode 100644
index 0000000..0f8bf48
--- /dev/null
+++ b/config/simple_map.xml
@@ -0,0 +1,11 @@
+
+
diff --git a/config/simple_test/config.xml b/config/simple_test/config.xml
new file mode 100644
index 0000000..d53d3a0
--- /dev/null
+++ b/config/simple_test/config.xml
@@ -0,0 +1,55 @@
+
+
+
+
+ report
+
+
+ config/simple_test/net.xml
+
+
+
+
+
+ task
+ config/simple_test/simple_data.xml
+ config/simple_test/simple_map.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5 6 9 10
+
+
diff --git a/config/simple_test/net.xml b/config/simple_test/net.xml
new file mode 100644
index 0000000..7407f52
--- /dev/null
+++ b/config/simple_test/net.xml
@@ -0,0 +1,879 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/simple_test/simple_data.xml b/config/simple_test/simple_data.xml
new file mode 100644
index 0000000..e01c948
--- /dev/null
+++ b/config/simple_test/simple_data.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/simple_test/simple_map.xml b/config/simple_test/simple_map.xml
new file mode 100644
index 0000000..bee1db8
--- /dev/null
+++ b/config/simple_test/simple_map.xml
@@ -0,0 +1,11 @@
+
+
diff --git a/config/synthetic_test/config.xml b/config/synthetic_test/config.xml
new file mode 100644
index 0000000..871c7e0
--- /dev/null
+++ b/config/synthetic_test/config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+ report
+
+
+ config/network.xml
+
+
+
+
+
+ synthetic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ src/model/config/data.xml
+ src/model/config/map.xml
+ traffic/pipelinePerformance_2D/PipelineResetTB.xml
+ traffic/pipelinePerformance_2D/PipelineResetTBMapping.xml
+ src/model/traffic/netrace/testraces/example.tra.bz2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5 6 9 10 21 22 25 26 37 38 41 42
+
+
diff --git a/config/synthetic_test/data_original.xml b/config/synthetic_test/data_original.xml
new file mode 100644
index 0000000..6e5a628
--- /dev/null
+++ b/config/synthetic_test/data_original.xml
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/synthetic_test/map_original.xml b/config/synthetic_test/map_original.xml
new file mode 100644
index 0000000..20a9bb3
--- /dev/null
+++ b/config/synthetic_test/map_original.xml
@@ -0,0 +1,42 @@
+
+
diff --git a/config/synthetic_test/net.xml b/config/synthetic_test/net.xml
new file mode 100644
index 0000000..f91ea32
--- /dev/null
+++ b/config/synthetic_test/net.xml
@@ -0,0 +1,3248 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/include/configuration.h b/include/configuration.h
deleted file mode 100644
index 839b71c..0000000
--- a/include/configuration.h
+++ /dev/null
@@ -1,64 +0,0 @@
-#pragma once
-
-#include
-#include
-#include
-#include
-
-using namespace sc_core; // For sc_time
-
-// Global parameters to generalize the design
-#define ROUTER_NO 4 // Number of routers
-#define CORE_NO 4 // Number of cores per router
-#define CORE_FIFO_CAPACITY 8 // Capacity of FIFO in router that receive data from cores
-#define ROUTER_RECEIVE_FIFO_CAPACITY 2 // Capacity of FIFO in router that receive data from other routers
-#define LOG_NAME "MY_LOG"
-
-struct my_payload : public tlm::tlm_generic_payload {
- unsigned int src_core; // Source core ID
- unsigned int src_router; // Source router ID
- unsigned int dst_core; // Destination core ID
- unsigned int dst_router; // Destination router ID
- int data; // Data value (random number)
- sc_core::sc_time timestamp; // Timestamp field
-
- // Default constructor
- my_payload() : src_core(0), src_router(0), dst_core(0), dst_router(0), data(0), timestamp(SC_ZERO_TIME) {
- set_data_ptr(reinterpret_cast(&data));
- set_data_length(sizeof(data));
- set_streaming_width(sizeof(data));
- }
-
- // Constructor with random data
- my_payload(unsigned int source_core, unsigned int src_router_id, unsigned int dst_core_id, unsigned int destination_router_id, int data, sc_time time = SC_ZERO_TIME)
- : src_core(source_core), src_router(src_router_id), dst_core(dst_core_id), dst_router(destination_router_id), data(data) {
- set_data_ptr(reinterpret_cast(&data));
- set_data_length(sizeof(data));
- set_streaming_width(sizeof(data));
- }
-
- // Function to update timestamp at any stage
- void update_timestamp(sc_time new_time) {
- timestamp = new_time;
- }
-};
-
-
-// Define the payload type
-// struct my_payload : public tlm::tlm_generic_payload {
-// unsigned int dst_core;
-// unsigned int dst_router;
-// int data;
-
-// my_payload() : dst_core(0), dst_router(0), data(0) {
-// set_data_ptr(reinterpret_cast(&data));
-// set_data_length(sizeof(data));
-// set_streaming_width(sizeof(data));
-// }
-
-// my_payload(int d) : dst_core(0), dst_router(0), data(d) {
-// set_data_ptr(reinterpret_cast(&data));
-// set_data_length(sizeof(data));
-// set_streaming_width(sizeof(data));
-// }
-
diff --git a/include/core.h b/include/core.h
deleted file mode 100644
index a40554e..0000000
--- a/include/core.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#pragma once
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include // For rand()
-#include // For time()
-
-#include "configuration.h"
-
-
-// Initiator module (processor core)
-SC_MODULE(core) {
- tlm_utils::simple_initiator_socket socket;
- tlm_utils::simple_target_socket target_socket;
- unsigned int source_router_id; // Source router ID for this core
- unsigned int source_core_id;
-
- SC_CTOR(core);
-
- // Thread for sending data
- void thread();
-
- /// Forwarding function for receiving data from router
- tlm::tlm_sync_enum nb_transport_fw(tlm::tlm_generic_payload& trans, tlm::tlm_phase& phase, sc_time& delay);
-
- void log_info(std::string msg);
- void log_error(std::string msg);
-};
diff --git a/include/semaphore_manager.h b/include/semaphore_manager.h
deleted file mode 100644
index 08fe9de..0000000
--- a/include/semaphore_manager.h
+++ /dev/null
@@ -1,124 +0,0 @@
-// semaphore_manager.h
-#ifndef SEMAPHORE_MANAGER_H
-#define SEMAPHORE_MANAGER_H
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include "configuration.h"
-
-using namespace sc_core;
-
-class semaphore_manager : public sc_module {
-public:
- SC_HAS_PROCESS(semaphore_manager);
-
- semaphore_manager(sc_module_name name) : sc_module(name) {
- semaphore_owners.resize(ROUTER_NO, 0); // Start with all tokens at router 0
- request_queues.resize(ROUTER_NO); // Initialize a queue for each semaphore
- queue_entries.resize(ROUTER_NO); // Set for each semaphore to track queued routers
- semaphore_status.resize(ROUTER_NO, false); // All semaphores are initially free
- std::fill_n(last_router_owner, ROUTER_NO, -1); // Initialize all last owners to -1
- SC_THREAD(update_semaphores); // Start automatic ownership update thread
- sc_report_handler::set_log_file_name("out/report.log");
- sc_report_handler::set_actions(LOG_NAME, SC_INFO, SC_LOG|SC_DISPLAY);
- }
-
- // Request a token for a semaphore with round-robin and priority ordering
- bool request_token(int router_id, int semaphore_id) {
- //wait(SC_ZERO_TIME);
- std::lock_guard lock(mutex); // Ensure atomic access
- if (semaphore_id >= 0 && semaphore_id < ROUTER_NO) {
-
- wait(SC_ZERO_TIME);
- // Give priority if the request follows round-robin order from the last owner
- if (semaphore_owners[semaphore_id] == router_id || semaphore_owners[semaphore_id] == -1 || (!semaphore_status[semaphore_id] && request_queues[semaphore_id].empty()))
- {
- log_info("Token for destination router " + std::to_string(semaphore_id) + " granted to Router " + std::to_string(router_id));
- semaphore_owners[semaphore_id] = router_id;
- semaphore_status[semaphore_id] = true; // Mark semaphore as in use
- last_router_owner[semaphore_id] = router_id; // Update the last owner
- return true;
- } else {
- if (queue_entries[semaphore_id].find(router_id) == queue_entries[semaphore_id].end()) {
- request_queues[semaphore_id].push(router_id);
- queue_entries[semaphore_id].insert(router_id); // Track in the set
- log_info("Router " + std::to_string(router_id) + " added to queue for semaphore " + std::to_string(semaphore_id));
- }
-
- }
- }
- return false;
- }
-
- // Release the token and pass it to the next in the round-robin or queue order
- bool release_token(int router_id, int semaphore_id) {
- std::lock_guard lock(mutex); // Ensure atomic access
- if (semaphore_id >= 0 && semaphore_id < ROUTER_NO) {
- if (semaphore_owners[semaphore_id] == router_id) {
- log_info("Router " + std::to_string(router_id) + " released token for destination router " + std::to_string(semaphore_id));
- semaphore_status[semaphore_id] = false; // Mark semaphore as free
-
- //wait(0, SC_NS);
-
- if (!request_queues[semaphore_id].empty()) {
- int next_router = request_queues[semaphore_id].front();
- request_queues[semaphore_id].pop();
- queue_entries[semaphore_id].erase(next_router); // Remove from set when dequeued
- semaphore_owners[semaphore_id] = next_router;
- semaphore_status[semaphore_id] = true; // Mark semaphore as in use
- log_info("Token for destination router " + std::to_string(semaphore_id) + " passed to Router " + std::to_string(next_router));
- //request_token(next_router, semaphore_id);
-
- } else {
- semaphore_owners[semaphore_id] = -1;
- // Assign to next router in round-robin if idle
- // semaphore_owners[semaphore_id] = (semaphore_owners[semaphore_id] + 1) % ROUTER_NO;
- // log_info("Token for destination router " + std::to_string(semaphore_id) + " passed to Router " + std::to_string(semaphore_owners[semaphore_id]));
- }
- return true;
- }
- }
- return false;
- }
-
- // Periodic update function to rotate token ownership in round-robin if tokens are idle
- void update_semaphores() {
- while (true) {
- wait(20, SC_NS);
- for (int i = 0; i < ROUTER_NO; ++i) {
- std::lock_guard lock(mutex); // Ensure atomic update
- if ((!semaphore_status[i] && (semaphore_owners[i] == -1 || request_queues[i].empty()))) {
- semaphore_owners[i] = (last_router_owner[i] + 1) % ROUTER_NO;
- log_info("Updated owner of semaphore " + std::to_string(i) + " to Router " + std::to_string(semaphore_owners[i]));
- last_router_owner[i] = semaphore_owners[i];
-
- }
- }
- }
- }
-
-
-private:
- std::vector semaphore_owners; // Tracks router ownership (-1 means no owner)
- std::vector> request_queues; // Queue of pending requests per semaphore
- std::vector semaphore_status; // Semaphore availability
- sc_mutex mutex; // Mutex to ensure atomic operations
- std::vector> queue_entries; // Track entries in each queue to prevent duplicates
- int last_router_owner[ROUTER_NO]; // Array to track last owner for round-robin assignment
-
- //print log messages
- void log_info(std::string msg){
- SC_REPORT_INFO(LOG_NAME, msg.c_str());
- }
-
- void log_error(std::string msg){
- SC_REPORT_ERROR(LOG_NAME, msg.c_str());
- }
-
-};
-
-#endif // SEMAPHORE_MANAGER_H
diff --git a/main.cpp b/main.cpp
deleted file mode 100644
index 4041bbf..0000000
--- a/main.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include // For rand()
-#include // For time()
-
-#include "configuration.h"
-#include "router.h"
-#include "core.h"
-#include "semaphore_manager.h"
-
-int sc_main(int argc, char* argv[]) {
-
- // Create a semaphore manager instance
- semaphore_manager sem_mgr("SemaphoreManager");
- // Instantiate ROUTER_NO routers
- router* routers[ROUTER_NO];
- std::vector router_sems;
- std::vector*> router_out_fifos;
- for (int i = 0; i < ROUTER_NO; ++i) {
- std::string router_name = "router" + std::to_string(i);
- routers[i] = new router(router_name.c_str());
-
- // Assign the router ID
- routers[i]-> router_id = i;
-
- // Store semaphores and out_fifos in vectors
- router_sems.push_back(&routers[i]->sem);
- router_out_fifos.push_back(&routers[i]->out_fifo);
-
- routers[i]->set_semaphore_manager(&sem_mgr); // Pass semaphore manager to each router
- }
-
- // Set up pointers to other routers' semaphores and out_fifos for each router
- for (int i = 0; i < ROUTER_NO; i++) {
- routers[i]->other_sems = router_sems;
- routers[i]->other_out_fifos = router_out_fifos;
- }
-
- // Instantiate ROUTER_NO*CORE_NO cores (CORE_NO per router)
- core* cores[ROUTER_NO][CORE_NO]; // ROUTER_NO routers, each with CORE_NO cores
- for (int i = 0; i < ROUTER_NO; ++i) { // Router index
- for (int j = 0; j < CORE_NO; ++j) { // Core index within each router
- std::string core_name = "core" + std::to_string(i) + "_" + std::to_string(j);
- cores[i][j] = new core(core_name.c_str());
- cores[i][j]->source_router_id = i; // Set source router ID
- cores[i][j]->source_core_id = j; // Set source router ID
- }
- }
-
- // Bind cores to their respective routers
- for (int i = 0; i < ROUTER_NO; ++i) { // Router index
- for (int j = 0; j < CORE_NO; ++j) { // Core index within each router
- cores[i][j]->socket.bind(routers[i]->sockets[j]); // Core's socket to router's target socket
- routers[i]->core_sockets[j].bind(cores[i][j]->target_socket); // Router's initiator socket to core's target socket
- routers[i]->current_router_id= i;
- }
- }
-
- // Start the simulation
- sc_core::sc_start(400, SC_NS);
- //sc_start();
-
- // Clean up memory to avoid leaks
- for (int i = 0; i < ROUTER_NO; ++i) {
- for (int j = 0; j < CORE_NO; ++j) {
- delete cores[i][j]; // Delete each core
- }
-
- delete routers[i]; // Delete each router
-
- }
-
- return 0;
-}
-
diff --git a/obj/core.o b/obj/core.o
deleted file mode 100644
index fbff322..0000000
Binary files a/obj/core.o and /dev/null differ
diff --git a/obj/router.o b/obj/router.o
deleted file mode 100644
index a0f614d..0000000
Binary files a/obj/router.o and /dev/null differ
diff --git a/out/noc_simulation b/out/noc_simulation
deleted file mode 100644
index 6b8fd49..0000000
Binary files a/out/noc_simulation and /dev/null differ
diff --git a/out/report.log b/out/report.log
index 42fb6c1..66e8ec9 100644
--- a/out/report.log
+++ b/out/report.log
@@ -1,778 +1,12 @@
-0 s: Info: MY_LOG: Core 0 of Source Router: 0: Processing data 76 for router 3 and core 3 at time: 0 s
-0 s: Info: MY_LOG: Router router0: Received transaction with data: 76 at time: 0 s
-0 s: Info: MY_LOG: Core core0_0: Transaction successful, data sent: 76 at time: 0 s
-0 s: Info: MY_LOG: Core 1 of Source Router: 0: Processing data 95 for router 2 and core 1 at time: 0 s
-0 s: Info: MY_LOG: Router router0: Received transaction with data: 95 at time: 0 s
-0 s: Info: MY_LOG: Core core0_1: Transaction successful, data sent: 95 at time: 0 s
-0 s: Info: MY_LOG: Core 2 of Source Router: 0: Processing data 5 for router 1 and core 3 at time: 0 s
-0 s: Info: MY_LOG: Router router0: Received transaction with data: 5 at time: 0 s
-0 s: Info: MY_LOG: Core core0_2: Transaction successful, data sent: 5 at time: 0 s
-0 s: Info: MY_LOG: Core 3 of Source Router: 0: Processing data 27 for router 3 and core 2 at time: 0 s
-0 s: Info: MY_LOG: Router router0: Received transaction with data: 27 at time: 0 s
-0 s: Info: MY_LOG: Core core0_3: Transaction successful, data sent: 27 at time: 0 s
-0 s: Info: MY_LOG: Core 0 of Source Router: 1: Processing data 22 for router 2 and core 2 at time: 0 s
-0 s: Info: MY_LOG: Router router1: Received transaction with data: 22 at time: 0 s
-0 s: Info: MY_LOG: Core core1_0: Transaction successful, data sent: 22 at time: 0 s
-0 s: Info: MY_LOG: Core 1 of Source Router: 1: Processing data 4 for router 0 and core 2 at time: 0 s
-0 s: Info: MY_LOG: Router router1: Received transaction with data: 4 at time: 0 s
-0 s: Info: MY_LOG: Core core1_1: Transaction successful, data sent: 4 at time: 0 s
-0 s: Info: MY_LOG: Core 2 of Source Router: 1: Processing data 37 for router 3 and core 0 at time: 0 s
-0 s: Info: MY_LOG: Router router1: Received transaction with data: 37 at time: 0 s
-0 s: Info: MY_LOG: Core core1_2: Transaction successful, data sent: 37 at time: 0 s
-0 s: Info: MY_LOG: Core 3 of Source Router: 1: Processing data 95 for router 2 and core 3 at time: 0 s
-0 s: Info: MY_LOG: Router router1: Received transaction with data: 95 at time: 0 s
-0 s: Info: MY_LOG: Core core1_3: Transaction successful, data sent: 95 at time: 0 s
-0 s: Info: MY_LOG: Core 0 of Source Router: 2: Processing data 23 for router 3 and core 2 at time: 0 s
-0 s: Info: MY_LOG: Router router2: Received transaction with data: 23 at time: 0 s
-0 s: Info: MY_LOG: Core core2_0: Transaction successful, data sent: 23 at time: 0 s
-0 s: Info: MY_LOG: Core 1 of Source Router: 2: Processing data 41 for router 3 and core 2 at time: 0 s
-0 s: Info: MY_LOG: Router router2: Received transaction with data: 41 at time: 0 s
-0 s: Info: MY_LOG: Core core2_1: Transaction successful, data sent: 41 at time: 0 s
-0 s: Info: MY_LOG: Core 2 of Source Router: 2: Processing data 16 for router 3 and core 0 at time: 0 s
-0 s: Info: MY_LOG: Router router2: Received transaction with data: 16 at time: 0 s
-0 s: Info: MY_LOG: Core core2_2: Transaction successful, data sent: 16 at time: 0 s
-0 s: Info: MY_LOG: Core 3 of Source Router: 2: Processing data 17 for router 3 and core 1 at time: 0 s
-0 s: Info: MY_LOG: Router router2: Received transaction with data: 17 at time: 0 s
-0 s: Info: MY_LOG: Core core2_3: Transaction successful, data sent: 17 at time: 0 s
-0 s: Info: MY_LOG: Core 0 of Source Router: 3: Processing data 74 for router 0 and core 0 at time: 0 s
-0 s: Info: MY_LOG: Router router3: Received transaction with data: 74 at time: 0 s
-0 s: Info: MY_LOG: Core core3_0: Transaction successful, data sent: 74 at time: 0 s
-0 s: Info: MY_LOG: Core 1 of Source Router: 3: Processing data 88 for router 1 and core 2 at time: 0 s
-0 s: Info: MY_LOG: Router router3: Received transaction with data: 88 at time: 0 s
-0 s: Info: MY_LOG: Core core3_1: Transaction successful, data sent: 88 at time: 0 s
-0 s: Info: MY_LOG: Core 2 of Source Router: 3: Processing data 91 for router 0 and core 3 at time: 0 s
-0 s: Info: MY_LOG: Router router3: Received transaction with data: 91 at time: 0 s
-0 s: Info: MY_LOG: Core core3_2: Transaction successful, data sent: 91 at time: 0 s
-0 s: Info: MY_LOG: Core 3 of Source Router: 3: Processing data 40 for router 0 and core 1 at time: 0 s
-0 s: Info: MY_LOG: Router router3: Received transaction with data: 40 at time: 0 s
-0 s: Info: MY_LOG: Core core3_3: Transaction successful, data sent: 40 at time: 0 s
-0 s: Info: MY_LOG: Token for destination router 3 granted to Router 0
-0 s: Info: MY_LOG: router0 forwarded data: 76 to Router_3
-0 s: Info: MY_LOG: Token for destination router 2 granted to Router 1
-0 s: Info: MY_LOG: router1 forwarded data: 22 to Router_2
-0 s: Info: MY_LOG: Token for destination router 0 granted to Router 3
-0 s: Info: MY_LOG: router3 forwarded data: 74 to Router_0
-0 s: Info: MY_LOG: Router 2 added to queue for semaphore 3
-0 s: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 23
-5 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 23
-10 ns: Info: MY_LOG: Router 1 released token for destination router 2
-10 ns: Info: MY_LOG: Router 2: Received transaction with data: 22 from Router 1 after a delay of:10 ns
-10 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 22 to core 2
-10 ns: Info: MY_LOG: Core 2 of parent Router: 2: Processing transaction and received data: 22
-10 ns: Info: MY_LOG: Router router2: Core 2 completed transaction, data: 22
-10 ns: Info: MY_LOG: Router 0: Received transaction with data: 74 from Router 3 after a delay of:10 ns
-10 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 74 to core 0
-10 ns: Info: MY_LOG: Core 0 of parent Router: 0: Processing transaction and received data: 74
-10 ns: Info: MY_LOG: Router router0: Core 0 completed transaction, data: 74
-10 ns: Info: MY_LOG: Router 1 added to queue for semaphore 0
-10 ns: Info: MY_LOG: Router router1: Semaphore for Router_0 is unavailable. Retrying with data: 4
-10 ns: Info: MY_LOG: Router 3 released token for destination router 0
-10 ns: Info: MY_LOG: Token for destination router 0 passed to Router 1
-10 ns: Info: MY_LOG: Token for destination router 1 granted to Router 3
-10 ns: Info: MY_LOG: router3 forwarded data: 88 to Router_1
-10 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 23
-15 ns: Info: MY_LOG: Token for destination router 0 granted to Router 1
-15 ns: Info: MY_LOG: router1 forwarded data: 4 to Router_0
-15 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 23
-20 ns: Info: MY_LOG: Updated owner of semaphore 2 to Router 2
-20 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 23
-25 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 23
-30 ns: Info: MY_LOG: Router 0 released token for destination router 3
-30 ns: Info: MY_LOG: Token for destination router 3 passed to Router 2
-30 ns: Info: MY_LOG: Router 3: Received transaction with data: 76 from Router 0 after a delay of:30 ns
-30 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 76 to core 3
-30 ns: Info: MY_LOG: Core 3 of parent Router: 3: Processing transaction and received data: 76
-30 ns: Info: MY_LOG: Router router3: Core 3 completed transaction, data: 76
-30 ns: Info: MY_LOG: Router 1: Received transaction with data: 88 from Router 3 after a delay of:20 ns
-30 ns: Info: MY_LOG: Router router1: Forwarding transaction with data: 88 to core 2
-30 ns: Info: MY_LOG: Core 2 of parent Router: 1: Processing transaction and received data: 88
-30 ns: Info: MY_LOG: Router router1: Core 2 completed transaction, data: 88
-30 ns: Info: MY_LOG: Token for destination router 2 granted to Router 0
-30 ns: Info: MY_LOG: router0 forwarded data: 95 to Router_2
-30 ns: Info: MY_LOG: Router 3 released token for destination router 1
-30 ns: Info: MY_LOG: Router 3 added to queue for semaphore 0
-30 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 91
-30 ns: Info: MY_LOG: Token for destination router 3 granted to Router 2
-30 ns: Info: MY_LOG: router2 forwarded data: 23 to Router_3
-35 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 91
-40 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 0
-40 ns: Info: MY_LOG: Router 2 released token for destination router 3
-40 ns: Info: MY_LOG: Router 3: Received transaction with data: 23 from Router 2 after a delay of:10 ns
-40 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 23 to core 2
-40 ns: Info: MY_LOG: Core 2 of parent Router: 3: Processing transaction and received data: 23
-40 ns: Info: MY_LOG: Router router3: Core 2 completed transaction, data: 23
-40 ns: Info: MY_LOG: Token for destination router 3 granted to Router 2
-40 ns: Info: MY_LOG: router2 forwarded data: 41 to Router_3
-40 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 91
-45 ns: Info: MY_LOG: Router 1 released token for destination router 0
-45 ns: Info: MY_LOG: Token for destination router 0 passed to Router 3
-45 ns: Info: MY_LOG: Router 0: Received transaction with data: 4 from Router 1 after a delay of:30 ns
-45 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 4 to core 2
-45 ns: Info: MY_LOG: Core 2 of parent Router: 0: Processing transaction and received data: 4
-45 ns: Info: MY_LOG: Router router0: Core 2 completed transaction, data: 4
-45 ns: Info: MY_LOG: Router 1 added to queue for semaphore 3
-45 ns: Info: MY_LOG: Router router1: Semaphore for Router_3 is unavailable. Retrying with data: 37
-45 ns: Info: MY_LOG: Token for destination router 0 granted to Router 3
-45 ns: Info: MY_LOG: router3 forwarded data: 91 to Router_0
-50 ns: Info: MY_LOG: Router 0 released token for destination router 2
-50 ns: Info: MY_LOG: Router 2: Received transaction with data: 95 from Router 0 after a delay of:20 ns
-50 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 95 to core 1
-50 ns: Info: MY_LOG: Core 1 of parent Router: 2: Processing transaction and received data: 95
-50 ns: Info: MY_LOG: Router router2: Core 1 completed transaction, data: 95
-50 ns: Info: MY_LOG: Router 3: Received transaction with data: 41 from Router 2 after a delay of:10 ns
-50 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 41 to core 2
-50 ns: Info: MY_LOG: Core 2 of parent Router: 3: Processing transaction and received data: 41
-50 ns: Info: MY_LOG: Router router3: Core 2 completed transaction, data: 41
-50 ns: Info: MY_LOG: Token for destination router 1 granted to Router 0
-50 ns: Info: MY_LOG: router0 forwarded data: 5 to Router_1
-50 ns: Info: MY_LOG: Router 2 released token for destination router 3
-50 ns: Info: MY_LOG: Token for destination router 3 passed to Router 1
-50 ns: Info: MY_LOG: Router 2 added to queue for semaphore 3
-50 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 16
-50 ns: Info: MY_LOG: Token for destination router 3 granted to Router 1
-50 ns: Info: MY_LOG: router1 forwarded data: 37 to Router_3
-55 ns: Info: MY_LOG: Router 3 released token for destination router 0
-55 ns: Info: MY_LOG: Router 0: Received transaction with data: 91 from Router 3 after a delay of:10 ns
-55 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 91 to core 3
-55 ns: Info: MY_LOG: Core 3 of parent Router: 0: Processing transaction and received data: 91
-55 ns: Info: MY_LOG: Router router0: Core 3 completed transaction, data: 91
-55 ns: Info: MY_LOG: Token for destination router 0 granted to Router 3
-55 ns: Info: MY_LOG: router3 forwarded data: 40 to Router_0
-55 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 16
-60 ns: Info: MY_LOG: Router 0 released token for destination router 1
-60 ns: Info: MY_LOG: Router 1: Received transaction with data: 5 from Router 0 after a delay of:10 ns
-60 ns: Info: MY_LOG: Router router1: Forwarding transaction with data: 5 to core 3
-60 ns: Info: MY_LOG: Core 3 of parent Router: 1: Processing transaction and received data: 5
-60 ns: Info: MY_LOG: Router router1: Core 3 completed transaction, data: 5
-60 ns: Info: MY_LOG: Router 0 added to queue for semaphore 3
-60 ns: Info: MY_LOG: Router router0: Semaphore for Router_3 is unavailable. Retrying with data: 27
-60 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 1
-60 ns: Info: MY_LOG: Updated owner of semaphore 2 to Router 1
-60 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 16
-65 ns: Info: MY_LOG: Router 3 released token for destination router 0
-65 ns: Info: MY_LOG: Router 0: Received transaction with data: 40 from Router 3 after a delay of:10 ns
-65 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 40 to core 1
-65 ns: Info: MY_LOG: Core 1 of parent Router: 0: Processing transaction and received data: 40
-65 ns: Info: MY_LOG: Router router0: Core 1 completed transaction, data: 40
-65 ns: Info: MY_LOG: Router router0: Semaphore for Router_3 is unavailable. Retrying with data: 27
-65 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 16
-70 ns: Info: MY_LOG: Router 1 released token for destination router 3
-70 ns: Info: MY_LOG: Token for destination router 3 passed to Router 2
-70 ns: Info: MY_LOG: Router 3: Received transaction with data: 37 from Router 1 after a delay of:20 ns
-70 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 37 to core 0
-70 ns: Info: MY_LOG: Core 0 of parent Router: 3: Processing transaction and received data: 37
-70 ns: Info: MY_LOG: Router router3: Core 0 completed transaction, data: 37
-70 ns: Info: MY_LOG: Token for destination router 2 granted to Router 1
-70 ns: Info: MY_LOG: router1 forwarded data: 95 to Router_2
-70 ns: Info: MY_LOG: Router router0: Semaphore for Router_3 is unavailable. Retrying with data: 27
-70 ns: Info: MY_LOG: Token for destination router 3 granted to Router 2
-70 ns: Info: MY_LOG: router2 forwarded data: 16 to Router_3
-75 ns: Info: MY_LOG: Router router0: Semaphore for Router_3 is unavailable. Retrying with data: 27
-80 ns: Info: MY_LOG: Updated owner of semaphore 0 to Router 0
-80 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 2
-80 ns: Info: MY_LOG: Router 1 released token for destination router 2
-80 ns: Info: MY_LOG: Router 2 released token for destination router 3
-80 ns: Info: MY_LOG: Token for destination router 3 passed to Router 0
-80 ns: Info: MY_LOG: Router 2: Received transaction with data: 95 from Router 1 after a delay of:10 ns
-80 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 95 to core 3
-80 ns: Info: MY_LOG: Core 3 of parent Router: 2: Processing transaction and received data: 95
-80 ns: Info: MY_LOG: Router router2: Core 3 completed transaction, data: 95
-80 ns: Info: MY_LOG: Router 3: Received transaction with data: 16 from Router 2 after a delay of:10 ns
-80 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 16 to core 0
-80 ns: Info: MY_LOG: Core 0 of parent Router: 3: Processing transaction and received data: 16
-80 ns: Info: MY_LOG: Router router3: Core 0 completed transaction, data: 16
-80 ns: Info: MY_LOG: Router 2 added to queue for semaphore 3
-80 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 17
-80 ns: Info: MY_LOG: Token for destination router 3 granted to Router 0
-80 ns: Info: MY_LOG: router0 forwarded data: 27 to Router_3
-85 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 17
-90 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 17
-95 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 17
-100 ns: Info: MY_LOG: Core 3 of Source Router: 2: Processing data 74 for router 0 and core 3 at time: 100 ns
-100 ns: Info: MY_LOG: Router router2: Received transaction with data: 74 at time: 100 ns
-100 ns: Info: MY_LOG: Core core2_3: Transaction successful, data sent: 74 at time: 100 ns
-100 ns: Info: MY_LOG: Core 1 of Source Router: 0: Processing data 28 for router 1 and core 2 at time: 100 ns
-100 ns: Info: MY_LOG: Router router0: Received transaction with data: 28 at time: 100 ns
-100 ns: Info: MY_LOG: Core core0_1: Transaction successful, data sent: 28 at time: 100 ns
-100 ns: Info: MY_LOG: Core 0 of Source Router: 2: Processing data 55 for router 0 and core 1 at time: 100 ns
-100 ns: Info: MY_LOG: Router router2: Received transaction with data: 55 at time: 100 ns
-100 ns: Info: MY_LOG: Core core2_0: Transaction successful, data sent: 55 at time: 100 ns
-100 ns: Info: MY_LOG: Core 1 of Source Router: 1: Processing data 21 for router 2 and core 3 at time: 100 ns
-100 ns: Info: MY_LOG: Router router1: Received transaction with data: 21 at time: 100 ns
-100 ns: Info: MY_LOG: Core core1_1: Transaction successful, data sent: 21 at time: 100 ns
-100 ns: Info: MY_LOG: Core 3 of Source Router: 0: Processing data 100 for router 1 and core 3 at time: 100 ns
-100 ns: Info: MY_LOG: Router router0: Received transaction with data: 100 at time: 100 ns
-100 ns: Info: MY_LOG: Core core0_3: Transaction successful, data sent: 100 at time: 100 ns
-100 ns: Info: MY_LOG: Core 2 of Source Router: 3: Processing data 84 for router 0 and core 1 at time: 100 ns
-100 ns: Info: MY_LOG: Router router3: Received transaction with data: 84 at time: 100 ns
-100 ns: Info: MY_LOG: Core core3_2: Transaction successful, data sent: 84 at time: 100 ns
-100 ns: Info: MY_LOG: Core 2 of Source Router: 0: Processing data 23 for router 1 and core 1 at time: 100 ns
-100 ns: Info: MY_LOG: Router router0: Received transaction with data: 23 at time: 100 ns
-100 ns: Info: MY_LOG: Core core0_2: Transaction successful, data sent: 23 at time: 100 ns
-100 ns: Info: MY_LOG: Core 1 of Source Router: 2: Processing data 4 for router 0 and core 0 at time: 100 ns
-100 ns: Info: MY_LOG: Router router2: Received transaction with data: 4 at time: 100 ns
-100 ns: Info: MY_LOG: Core core2_1: Transaction successful, data sent: 4 at time: 100 ns
-100 ns: Info: MY_LOG: Core 2 of Source Router: 2: Processing data 73 for router 3 and core 2 at time: 100 ns
-100 ns: Info: MY_LOG: Router router2: Received transaction with data: 73 at time: 100 ns
-100 ns: Info: MY_LOG: Core core2_2: Transaction successful, data sent: 73 at time: 100 ns
-100 ns: Info: MY_LOG: Core 0 of Source Router: 3: Processing data 78 for router 0 and core 3 at time: 100 ns
-100 ns: Info: MY_LOG: Router router3: Received transaction with data: 78 at time: 100 ns
-100 ns: Info: MY_LOG: Core core3_0: Transaction successful, data sent: 78 at time: 100 ns
-100 ns: Info: MY_LOG: Core 3 of Source Router: 1: Processing data 42 for router 2 and core 0 at time: 100 ns
-100 ns: Info: MY_LOG: Router router1: Received transaction with data: 42 at time: 100 ns
-100 ns: Info: MY_LOG: Core core1_3: Transaction successful, data sent: 42 at time: 100 ns
-100 ns: Info: MY_LOG: Core 1 of Source Router: 3: Processing data 32 for router 1 and core 1 at time: 100 ns
-100 ns: Info: MY_LOG: Router router3: Received transaction with data: 32 at time: 100 ns
-100 ns: Info: MY_LOG: Core core3_1: Transaction successful, data sent: 32 at time: 100 ns
-100 ns: Info: MY_LOG: Core 2 of Source Router: 1: Processing data 55 for router 3 and core 0 at time: 100 ns
-100 ns: Info: MY_LOG: Router router1: Received transaction with data: 55 at time: 100 ns
-100 ns: Info: MY_LOG: Core core1_2: Transaction successful, data sent: 55 at time: 100 ns
-100 ns: Info: MY_LOG: Core 0 of Source Router: 0: Processing data 54 for router 3 and core 1 at time: 100 ns
-100 ns: Info: MY_LOG: Router router0: Received transaction with data: 54 at time: 100 ns
-100 ns: Info: MY_LOG: Core core0_0: Transaction successful, data sent: 54 at time: 100 ns
-100 ns: Info: MY_LOG: Core 0 of Source Router: 1: Processing data 65 for router 0 and core 1 at time: 100 ns
-100 ns: Info: MY_LOG: Router router1: Received transaction with data: 65 at time: 100 ns
-100 ns: Info: MY_LOG: Core core1_0: Transaction successful, data sent: 65 at time: 100 ns
-100 ns: Info: MY_LOG: Core 3 of Source Router: 3: Processing data 37 for router 2 and core 2 at time: 100 ns
-100 ns: Info: MY_LOG: Router router3: Received transaction with data: 37 at time: 100 ns
-100 ns: Info: MY_LOG: Core core3_3: Transaction successful, data sent: 37 at time: 100 ns
-100 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 17
-100 ns: Info: MY_LOG: Updated owner of semaphore 0 to Router 1
-100 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 3
-100 ns: Info: MY_LOG: Updated owner of semaphore 2 to Router 2
-100 ns: Info: MY_LOG: Token for destination router 0 granted to Router 3
-100 ns: Info: MY_LOG: router3 forwarded data: 84 to Router_0
-100 ns: Info: MY_LOG: Token for destination router 2 granted to Router 1
-100 ns: Info: MY_LOG: router1 forwarded data: 21 to Router_2
-105 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 17
-110 ns: Info: MY_LOG: Router 0 released token for destination router 3
-110 ns: Info: MY_LOG: Token for destination router 3 passed to Router 2
-110 ns: Info: MY_LOG: Router 3: Received transaction with data: 27 from Router 0 after a delay of:30 ns
-110 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 27 to core 2
-110 ns: Info: MY_LOG: Core 2 of parent Router: 3: Processing transaction and received data: 27
-110 ns: Info: MY_LOG: Router router3: Core 2 completed transaction, data: 27
-110 ns: Info: MY_LOG: Router 0: Received transaction with data: 84 from Router 3 after a delay of:10 ns
-110 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 84 to core 1
-110 ns: Info: MY_LOG: Core 1 of parent Router: 0: Processing transaction and received data: 84
-110 ns: Info: MY_LOG: Router router0: Core 1 completed transaction, data: 84
-110 ns: Info: MY_LOG: Router 2: Received transaction with data: 21 from Router 1 after a delay of:10 ns
-110 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 21 to core 3
-110 ns: Info: MY_LOG: Core 3 of parent Router: 2: Processing transaction and received data: 21
-110 ns: Info: MY_LOG: Router router2: Core 3 completed transaction, data: 21
-110 ns: Info: MY_LOG: Token for destination router 1 granted to Router 0
-110 ns: Info: MY_LOG: router0 forwarded data: 28 to Router_1
-110 ns: Info: MY_LOG: Router 3 released token for destination router 0
-110 ns: Info: MY_LOG: Token for destination router 0 granted to Router 3
-110 ns: Info: MY_LOG: router3 forwarded data: 78 to Router_0
-110 ns: Info: MY_LOG: Token for destination router 3 granted to Router 2
-110 ns: Info: MY_LOG: router2 forwarded data: 17 to Router_3
-110 ns: Info: MY_LOG: Router 1 released token for destination router 2
-110 ns: Info: MY_LOG: Token for destination router 2 granted to Router 1
-110 ns: Info: MY_LOG: router1 forwarded data: 42 to Router_2
-120 ns: Info: MY_LOG: Router 0 released token for destination router 1
-120 ns: Info: MY_LOG: Router 1: Received transaction with data: 28 from Router 0 after a delay of:10 ns
-120 ns: Info: MY_LOG: Router router1: Forwarding transaction with data: 28 to core 2
-120 ns: Info: MY_LOG: Core 2 of parent Router: 1: Processing transaction and received data: 28
-120 ns: Info: MY_LOG: Router router1: Core 2 completed transaction, data: 28
-120 ns: Info: MY_LOG: Router 0: Received transaction with data: 78 from Router 3 after a delay of:10 ns
-120 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 78 to core 3
-120 ns: Info: MY_LOG: Core 3 of parent Router: 0: Processing transaction and received data: 78
-120 ns: Info: MY_LOG: Router router0: Core 3 completed transaction, data: 78
-120 ns: Info: MY_LOG: Router 3: Received transaction with data: 17 from Router 2 after a delay of:10 ns
-120 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 17 to core 1
-120 ns: Info: MY_LOG: Core 1 of parent Router: 3: Processing transaction and received data: 17
-120 ns: Info: MY_LOG: Router router3: Core 1 completed transaction, data: 17
-120 ns: Info: MY_LOG: Router 2: Received transaction with data: 42 from Router 1 after a delay of:10 ns
-120 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 42 to core 0
-120 ns: Info: MY_LOG: Core 0 of parent Router: 2: Processing transaction and received data: 42
-120 ns: Info: MY_LOG: Router router2: Core 0 completed transaction, data: 42
-120 ns: Info: MY_LOG: Token for destination router 1 granted to Router 0
-120 ns: Info: MY_LOG: router0 forwarded data: 100 to Router_1
-120 ns: Info: MY_LOG: Router 3 released token for destination router 0
-120 ns: Info: MY_LOG: Router 3 added to queue for semaphore 1
-120 ns: Info: MY_LOG: Router router3: Semaphore for Router_1 is unavailable. Retrying with data: 32
-120 ns: Info: MY_LOG: Router 1 released token for destination router 2
-120 ns: Info: MY_LOG: Router 1 added to queue for semaphore 3
-120 ns: Info: MY_LOG: Router router1: Semaphore for Router_3 is unavailable. Retrying with data: 55
-120 ns: Info: MY_LOG: Router 2 released token for destination router 3
-120 ns: Info: MY_LOG: Token for destination router 3 passed to Router 1
-120 ns: Info: MY_LOG: Token for destination router 0 granted to Router 2
-120 ns: Info: MY_LOG: router2 forwarded data: 74 to Router_0
-125 ns: Info: MY_LOG: Router router3: Semaphore for Router_1 is unavailable. Retrying with data: 32
-125 ns: Info: MY_LOG: Token for destination router 3 granted to Router 1
-125 ns: Info: MY_LOG: router1 forwarded data: 55 to Router_3
-130 ns: Info: MY_LOG: Router 0 released token for destination router 1
-130 ns: Info: MY_LOG: Token for destination router 1 passed to Router 3
-130 ns: Info: MY_LOG: Router 1: Received transaction with data: 100 from Router 0 after a delay of:10 ns
-130 ns: Info: MY_LOG: Router router1: Forwarding transaction with data: 100 to core 3
-130 ns: Info: MY_LOG: Core 3 of parent Router: 1: Processing transaction and received data: 100
-130 ns: Info: MY_LOG: Router router1: Core 3 completed transaction, data: 100
-130 ns: Info: MY_LOG: Router 0 added to queue for semaphore 1
-130 ns: Info: MY_LOG: Router router0: Semaphore for Router_1 is unavailable. Retrying with data: 23
-130 ns: Info: MY_LOG: Token for destination router 1 granted to Router 3
-130 ns: Info: MY_LOG: router3 forwarded data: 32 to Router_1
-135 ns: Info: MY_LOG: Router router0: Semaphore for Router_1 is unavailable. Retrying with data: 23
-140 ns: Info: MY_LOG: Updated owner of semaphore 2 to Router 2
-140 ns: Info: MY_LOG: Router 2 released token for destination router 0
-140 ns: Info: MY_LOG: Router 0: Received transaction with data: 74 from Router 2 after a delay of:20 ns
-140 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 74 to core 3
-140 ns: Info: MY_LOG: Core 3 of parent Router: 0: Processing transaction and received data: 74
-140 ns: Info: MY_LOG: Router router0: Core 3 completed transaction, data: 74
-140 ns: Info: MY_LOG: Token for destination router 0 granted to Router 2
-140 ns: Info: MY_LOG: router2 forwarded data: 55 to Router_0
-140 ns: Info: MY_LOG: Router router0: Semaphore for Router_1 is unavailable. Retrying with data: 23
-145 ns: Info: MY_LOG: Router 1 released token for destination router 3
-145 ns: Info: MY_LOG: Router 3: Received transaction with data: 55 from Router 1 after a delay of:20 ns
-145 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 55 to core 0
-145 ns: Info: MY_LOG: Core 0 of parent Router: 3: Processing transaction and received data: 55
-145 ns: Info: MY_LOG: Router router3: Core 0 completed transaction, data: 55
-145 ns: Info: MY_LOG: Router 1 added to queue for semaphore 0
-145 ns: Info: MY_LOG: Router router1: Semaphore for Router_0 is unavailable. Retrying with data: 65
-145 ns: Info: MY_LOG: Router router0: Semaphore for Router_1 is unavailable. Retrying with data: 23
-150 ns: Info: MY_LOG: Router 3 released token for destination router 1
-150 ns: Info: MY_LOG: Token for destination router 1 passed to Router 0
-150 ns: Info: MY_LOG: Router 1: Received transaction with data: 32 from Router 3 after a delay of:20 ns
-150 ns: Info: MY_LOG: Router router1: Forwarding transaction with data: 32 to core 1
-150 ns: Info: MY_LOG: Core 1 of parent Router: 1: Processing transaction and received data: 32
-150 ns: Info: MY_LOG: Router router1: Core 1 completed transaction, data: 32
-150 ns: Info: MY_LOG: Token for destination router 2 granted to Router 3
-150 ns: Info: MY_LOG: router3 forwarded data: 37 to Router_2
-150 ns: Info: MY_LOG: Router router1: Semaphore for Router_0 is unavailable. Retrying with data: 65
-150 ns: Info: MY_LOG: Token for destination router 1 granted to Router 0
-150 ns: Info: MY_LOG: router0 forwarded data: 23 to Router_1
-155 ns: Info: MY_LOG: Router router1: Semaphore for Router_0 is unavailable. Retrying with data: 65
-160 ns: Info: MY_LOG: Router 2 released token for destination router 0
-160 ns: Info: MY_LOG: Token for destination router 0 passed to Router 1
-160 ns: Info: MY_LOG: Router 0: Received transaction with data: 55 from Router 2 after a delay of:20 ns
-160 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 55 to core 1
-160 ns: Info: MY_LOG: Core 1 of parent Router: 0: Processing transaction and received data: 55
-160 ns: Info: MY_LOG: Router router0: Core 1 completed transaction, data: 55
-160 ns: Info: MY_LOG: Router 1: Received transaction with data: 23 from Router 0 after a delay of:10 ns
-160 ns: Info: MY_LOG: Router router1: Forwarding transaction with data: 23 to core 1
-160 ns: Info: MY_LOG: Core 1 of parent Router: 1: Processing transaction and received data: 23
-160 ns: Info: MY_LOG: Router router1: Core 1 completed transaction, data: 23
-160 ns: Info: MY_LOG: Router 2 added to queue for semaphore 0
-160 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 4
-160 ns: Info: MY_LOG: Updated owner of semaphore 3 to Router 2
-160 ns: Info: MY_LOG: Token for destination router 0 granted to Router 1
-160 ns: Info: MY_LOG: router1 forwarded data: 65 to Router_0
-160 ns: Info: MY_LOG: Router 0 released token for destination router 1
-160 ns: Info: MY_LOG: Token for destination router 3 granted to Router 0
-160 ns: Info: MY_LOG: router0 forwarded data: 54 to Router_3
-165 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 4
-170 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 4
-175 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 4
-180 ns: Info: MY_LOG: Router 3 released token for destination router 2
-180 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 1
-180 ns: Info: MY_LOG: Updated owner of semaphore 2 to Router 0
-180 ns: Info: MY_LOG: Router 2: Received transaction with data: 37 from Router 3 after a delay of:30 ns
-180 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 37 to core 2
-180 ns: Info: MY_LOG: Core 2 of parent Router: 2: Processing transaction and received data: 37
-180 ns: Info: MY_LOG: Router router2: Core 2 completed transaction, data: 37
-180 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 4
-185 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 4
-190 ns: Info: MY_LOG: Router 3: Received transaction with data: 54 from Router 0 after a delay of:30 ns
-190 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 54 to core 1
-190 ns: Info: MY_LOG: Core 1 of parent Router: 3: Processing transaction and received data: 54
-190 ns: Info: MY_LOG: Router router3: Core 1 completed transaction, data: 54
-190 ns: Info: MY_LOG: Router 0: Received transaction with data: 65 from Router 1 after a delay of:30 ns
-190 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 65 to core 1
-190 ns: Info: MY_LOG: Core 1 of parent Router: 0: Processing transaction and received data: 65
-190 ns: Info: MY_LOG: Router router0: Core 1 completed transaction, data: 65
-190 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 4
-190 ns: Info: MY_LOG: Router 0 released token for destination router 3
-190 ns: Info: MY_LOG: Router 1 released token for destination router 0
-190 ns: Info: MY_LOG: Token for destination router 0 passed to Router 2
-195 ns: Info: MY_LOG: Token for destination router 0 granted to Router 2
-195 ns: Info: MY_LOG: router2 forwarded data: 4 to Router_0
-200 ns: Info: MY_LOG: Core 3 of Source Router: 1: Processing data 42 for router 2 and core 3 at time: 200 ns
-200 ns: Info: MY_LOG: Router router1: Received transaction with data: 42 at time: 200 ns
-200 ns: Info: MY_LOG: Core core1_3: Transaction successful, data sent: 42 at time: 200 ns
-200 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 2
-200 ns: Info: MY_LOG: Updated owner of semaphore 2 to Router 1
-200 ns: Info: MY_LOG: Updated owner of semaphore 3 to Router 1
-200 ns: Info: MY_LOG: Core 1 of Source Router: 0: Processing data 81 for router 1 and core 1 at time: 200 ns
-200 ns: Info: MY_LOG: Router router0: Received transaction with data: 81 at time: 200 ns
-200 ns: Info: MY_LOG: Core core0_1: Transaction successful, data sent: 81 at time: 200 ns
-200 ns: Info: MY_LOG: Core 3 of Source Router: 2: Processing data 25 for router 0 and core 0 at time: 200 ns
-200 ns: Info: MY_LOG: Router router2: Received transaction with data: 25 at time: 200 ns
-200 ns: Info: MY_LOG: Core core2_3: Transaction successful, data sent: 25 at time: 200 ns
-200 ns: Info: MY_LOG: Core 3 of Source Router: 0: Processing data 43 for router 3 and core 2 at time: 200 ns
-200 ns: Info: MY_LOG: Router router0: Received transaction with data: 43 at time: 200 ns
-200 ns: Info: MY_LOG: Core core0_3: Transaction successful, data sent: 43 at time: 200 ns
-200 ns: Info: MY_LOG: Core 2 of Source Router: 3: Processing data 55 for router 0 and core 2 at time: 200 ns
-200 ns: Info: MY_LOG: Router router3: Received transaction with data: 55 at time: 200 ns
-200 ns: Info: MY_LOG: Core core3_2: Transaction successful, data sent: 55 at time: 200 ns
-200 ns: Info: MY_LOG: Core 2 of Source Router: 2: Processing data 89 for router 1 and core 3 at time: 200 ns
-200 ns: Info: MY_LOG: Router router2: Received transaction with data: 89 at time: 200 ns
-200 ns: Info: MY_LOG: Core core2_2: Transaction successful, data sent: 89 at time: 200 ns
-200 ns: Info: MY_LOG: Core 1 of Source Router: 2: Processing data 43 for router 0 and core 3 at time: 200 ns
-200 ns: Info: MY_LOG: Router router2: Received transaction with data: 43 at time: 200 ns
-200 ns: Info: MY_LOG: Core core2_1: Transaction successful, data sent: 43 at time: 200 ns
-200 ns: Info: MY_LOG: Core 3 of Source Router: 3: Processing data 63 for router 0 and core 2 at time: 200 ns
-200 ns: Info: MY_LOG: Router router3: Received transaction with data: 63 at time: 200 ns
-200 ns: Info: MY_LOG: Core core3_3: Transaction successful, data sent: 63 at time: 200 ns
-200 ns: Info: MY_LOG: Core 0 of Source Router: 3: Processing data 33 for router 0 and core 3 at time: 200 ns
-200 ns: Info: MY_LOG: Router router3: Received transaction with data: 33 at time: 200 ns
-200 ns: Info: MY_LOG: Core core3_0: Transaction successful, data sent: 33 at time: 200 ns
-200 ns: Info: MY_LOG: Core 0 of Source Router: 2: Processing data 25 for router 0 and core 1 at time: 200 ns
-200 ns: Info: MY_LOG: Router router2: Received transaction with data: 25 at time: 200 ns
-200 ns: Info: MY_LOG: Core core2_0: Transaction successful, data sent: 25 at time: 200 ns
-200 ns: Info: MY_LOG: Core 1 of Source Router: 3: Processing data 28 for router 2 and core 3 at time: 200 ns
-200 ns: Info: MY_LOG: Router router3: Received transaction with data: 28 at time: 200 ns
-200 ns: Info: MY_LOG: Core core3_1: Transaction successful, data sent: 28 at time: 200 ns
-200 ns: Info: MY_LOG: Core 2 of Source Router: 1: Processing data 64 for router 2 and core 0 at time: 200 ns
-200 ns: Info: MY_LOG: Router router1: Received transaction with data: 64 at time: 200 ns
-200 ns: Info: MY_LOG: Core core1_2: Transaction successful, data sent: 64 at time: 200 ns
-200 ns: Info: MY_LOG: Core 0 of Source Router: 0: Processing data 39 for router 2 and core 0 at time: 200 ns
-200 ns: Info: MY_LOG: Router router0: Received transaction with data: 39 at time: 200 ns
-200 ns: Info: MY_LOG: Core core0_0: Transaction successful, data sent: 39 at time: 200 ns
-200 ns: Info: MY_LOG: Core 2 of Source Router: 0: Processing data 45 for router 2 and core 3 at time: 200 ns
-200 ns: Info: MY_LOG: Router router0: Received transaction with data: 45 at time: 200 ns
-200 ns: Info: MY_LOG: Core core0_2: Transaction successful, data sent: 45 at time: 200 ns
-200 ns: Info: MY_LOG: Core 0 of Source Router: 1: Processing data 25 for router 0 and core 3 at time: 200 ns
-200 ns: Info: MY_LOG: Router router1: Received transaction with data: 25 at time: 200 ns
-200 ns: Info: MY_LOG: Core core1_0: Transaction successful, data sent: 25 at time: 200 ns
-200 ns: Info: MY_LOG: Core 1 of Source Router: 1: Processing data 71 for router 2 and core 0 at time: 200 ns
-200 ns: Info: MY_LOG: Router router1: Received transaction with data: 71 at time: 200 ns
-200 ns: Info: MY_LOG: Core core1_1: Transaction successful, data sent: 71 at time: 200 ns
-200 ns: Info: MY_LOG: Token for destination router 2 granted to Router 1
-200 ns: Info: MY_LOG: router1 forwarded data: 42 to Router_2
-200 ns: Info: MY_LOG: Token for destination router 1 granted to Router 0
-200 ns: Info: MY_LOG: router0 forwarded data: 81 to Router_1
-200 ns: Info: MY_LOG: Router 3 added to queue for semaphore 0
-200 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 55
-205 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 55
-210 ns: Info: MY_LOG: Router 1 released token for destination router 2
-210 ns: Info: MY_LOG: Router 2: Received transaction with data: 42 from Router 1 after a delay of:10 ns
-210 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 42 to core 3
-210 ns: Info: MY_LOG: Core 3 of parent Router: 2: Processing transaction and received data: 42
-210 ns: Info: MY_LOG: Router router2: Core 3 completed transaction, data: 42
-210 ns: Info: MY_LOG: Router 1: Received transaction with data: 81 from Router 0 after a delay of:10 ns
-210 ns: Info: MY_LOG: Router router1: Forwarding transaction with data: 81 to core 1
-210 ns: Info: MY_LOG: Core 1 of parent Router: 1: Processing transaction and received data: 81
-210 ns: Info: MY_LOG: Router router1: Core 1 completed transaction, data: 81
-210 ns: Info: MY_LOG: Token for destination router 2 granted to Router 1
-210 ns: Info: MY_LOG: router1 forwarded data: 64 to Router_2
-210 ns: Info: MY_LOG: Router 0 released token for destination router 1
-210 ns: Info: MY_LOG: Token for destination router 3 granted to Router 0
-210 ns: Info: MY_LOG: router0 forwarded data: 43 to Router_3
-210 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 55
-215 ns: Info: MY_LOG: Router 2 released token for destination router 0
-215 ns: Info: MY_LOG: Token for destination router 0 passed to Router 3
-215 ns: Info: MY_LOG: Router 0: Received transaction with data: 4 from Router 2 after a delay of:20 ns
-215 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 4 to core 0
-215 ns: Info: MY_LOG: Core 0 of parent Router: 0: Processing transaction and received data: 4
-215 ns: Info: MY_LOG: Router router0: Core 0 completed transaction, data: 4
-215 ns: Info: MY_LOG: Router 2 added to queue for semaphore 3
-215 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 73
-215 ns: Info: MY_LOG: Token for destination router 0 granted to Router 3
-215 ns: Info: MY_LOG: router3 forwarded data: 55 to Router_0
-220 ns: Info: MY_LOG: Router 1 released token for destination router 2
-220 ns: Info: MY_LOG: Router 2: Received transaction with data: 64 from Router 1 after a delay of:10 ns
-220 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 64 to core 0
-220 ns: Info: MY_LOG: Core 0 of parent Router: 2: Processing transaction and received data: 64
-220 ns: Info: MY_LOG: Router router2: Core 0 completed transaction, data: 64
-220 ns: Info: MY_LOG: Router 1 added to queue for semaphore 0
-220 ns: Info: MY_LOG: Router router1: Semaphore for Router_0 is unavailable. Retrying with data: 25
-220 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 73
-220 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 1
-220 ns: Info: MY_LOG: Updated owner of semaphore 2 to Router 2
-225 ns: Info: MY_LOG: Router 3 released token for destination router 0
-225 ns: Info: MY_LOG: Token for destination router 0 passed to Router 1
-225 ns: Info: MY_LOG: Router 0: Received transaction with data: 55 from Router 3 after a delay of:10 ns
-225 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 55 to core 2
-225 ns: Info: MY_LOG: Core 2 of parent Router: 0: Processing transaction and received data: 55
-225 ns: Info: MY_LOG: Router router0: Core 2 completed transaction, data: 55
-225 ns: Info: MY_LOG: Router 3 added to queue for semaphore 0
-225 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 63
-225 ns: Info: MY_LOG: Token for destination router 0 granted to Router 1
-225 ns: Info: MY_LOG: router1 forwarded data: 25 to Router_0
-225 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 73
-230 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 63
-230 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 73
-235 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 63
-235 ns: Info: MY_LOG: Router router2: Semaphore for Router_3 is unavailable. Retrying with data: 73
-240 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 2
-240 ns: Info: MY_LOG: Updated owner of semaphore 2 to Router 3
-240 ns: Info: MY_LOG: Router 0 released token for destination router 3
-240 ns: Info: MY_LOG: Token for destination router 3 passed to Router 2
-240 ns: Info: MY_LOG: Router 3: Received transaction with data: 43 from Router 0 after a delay of:30 ns
-240 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 43 to core 2
-240 ns: Info: MY_LOG: Core 2 of parent Router: 3: Processing transaction and received data: 43
-240 ns: Info: MY_LOG: Router router3: Core 2 completed transaction, data: 43
-240 ns: Info: MY_LOG: Token for destination router 2 granted to Router 0
-240 ns: Info: MY_LOG: router0 forwarded data: 39 to Router_2
-240 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 63
-240 ns: Info: MY_LOG: Token for destination router 3 granted to Router 2
-240 ns: Info: MY_LOG: router2 forwarded data: 73 to Router_3
-245 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 63
-250 ns: Info: MY_LOG: Router 2 released token for destination router 3
-250 ns: Info: MY_LOG: Router 3: Received transaction with data: 73 from Router 2 after a delay of:10 ns
-250 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 73 to core 2
-250 ns: Info: MY_LOG: Core 2 of parent Router: 3: Processing transaction and received data: 73
-250 ns: Info: MY_LOG: Router router3: Core 2 completed transaction, data: 73
-250 ns: Info: MY_LOG: Router 2 added to queue for semaphore 0
-250 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 25
-250 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 63
-255 ns: Info: MY_LOG: Router 1 released token for destination router 0
-255 ns: Info: MY_LOG: Token for destination router 0 passed to Router 3
-255 ns: Info: MY_LOG: Router 0: Received transaction with data: 25 from Router 1 after a delay of:30 ns
-255 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 25 to core 3
-255 ns: Info: MY_LOG: Core 3 of parent Router: 0: Processing transaction and received data: 25
-255 ns: Info: MY_LOG: Router router0: Core 3 completed transaction, data: 25
-255 ns: Info: MY_LOG: Router 1 added to queue for semaphore 2
-255 ns: Info: MY_LOG: Router router1: Semaphore for Router_2 is unavailable. Retrying with data: 71
-255 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 25
-255 ns: Info: MY_LOG: Token for destination router 0 granted to Router 3
-255 ns: Info: MY_LOG: router3 forwarded data: 63 to Router_0
-260 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 3
-260 ns: Info: MY_LOG: Updated owner of semaphore 3 to Router 3
-260 ns: Info: MY_LOG: Router 0 released token for destination router 2
-260 ns: Info: MY_LOG: Token for destination router 2 passed to Router 1
-260 ns: Info: MY_LOG: Router 2: Received transaction with data: 39 from Router 0 after a delay of:20 ns
-260 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 39 to core 0
-260 ns: Info: MY_LOG: Core 0 of parent Router: 2: Processing transaction and received data: 39
-260 ns: Info: MY_LOG: Router router2: Core 0 completed transaction, data: 39
-260 ns: Info: MY_LOG: Router 0 added to queue for semaphore 2
-260 ns: Info: MY_LOG: Router router0: Semaphore for Router_2 is unavailable. Retrying with data: 45
-260 ns: Info: MY_LOG: Token for destination router 2 granted to Router 1
-260 ns: Info: MY_LOG: router1 forwarded data: 71 to Router_2
-260 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 25
-265 ns: Info: MY_LOG: Router 3 released token for destination router 0
-265 ns: Info: MY_LOG: Token for destination router 0 passed to Router 2
-265 ns: Info: MY_LOG: Router 0: Received transaction with data: 63 from Router 3 after a delay of:10 ns
-265 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 63 to core 2
-265 ns: Info: MY_LOG: Core 2 of parent Router: 0: Processing transaction and received data: 63
-265 ns: Info: MY_LOG: Router router0: Core 2 completed transaction, data: 63
-265 ns: Info: MY_LOG: Router 3 added to queue for semaphore 0
-265 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 33
-265 ns: Info: MY_LOG: Router router0: Semaphore for Router_2 is unavailable. Retrying with data: 45
-265 ns: Info: MY_LOG: Token for destination router 0 granted to Router 2
-265 ns: Info: MY_LOG: router2 forwarded data: 25 to Router_0
-270 ns: Info: MY_LOG: Router 1 released token for destination router 2
-270 ns: Info: MY_LOG: Token for destination router 2 passed to Router 0
-270 ns: Info: MY_LOG: Router 2: Received transaction with data: 71 from Router 1 after a delay of:10 ns
-270 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 71 to core 0
-270 ns: Info: MY_LOG: Core 0 of parent Router: 2: Processing transaction and received data: 71
-270 ns: Info: MY_LOG: Router router2: Core 0 completed transaction, data: 71
-270 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 33
-270 ns: Info: MY_LOG: Token for destination router 2 granted to Router 0
-270 ns: Info: MY_LOG: router0 forwarded data: 45 to Router_2
-275 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 33
-280 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 0
-280 ns: Info: MY_LOG: Updated owner of semaphore 3 to Router 0
-280 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 33
-285 ns: Info: MY_LOG: Router 2 released token for destination router 0
-285 ns: Info: MY_LOG: Token for destination router 0 passed to Router 3
-285 ns: Info: MY_LOG: Router 0: Received transaction with data: 25 from Router 2 after a delay of:20 ns
-285 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 25 to core 0
-285 ns: Info: MY_LOG: Core 0 of parent Router: 0: Processing transaction and received data: 25
-285 ns: Info: MY_LOG: Router router0: Core 0 completed transaction, data: 25
-285 ns: Info: MY_LOG: Token for destination router 1 granted to Router 2
-285 ns: Info: MY_LOG: router2 forwarded data: 89 to Router_1
-285 ns: Info: MY_LOG: Token for destination router 0 granted to Router 3
-285 ns: Info: MY_LOG: router3 forwarded data: 33 to Router_0
-290 ns: Info: MY_LOG: Router 0 released token for destination router 2
-290 ns: Info: MY_LOG: Router 2: Received transaction with data: 45 from Router 0 after a delay of:20 ns
-290 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 45 to core 3
-290 ns: Info: MY_LOG: Core 3 of parent Router: 2: Processing transaction and received data: 45
-290 ns: Info: MY_LOG: Router router2: Core 3 completed transaction, data: 45
-295 ns: Info: MY_LOG: Router 3 released token for destination router 0
-295 ns: Info: MY_LOG: Router 0: Received transaction with data: 33 from Router 3 after a delay of:10 ns
-295 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 33 to core 3
-295 ns: Info: MY_LOG: Core 3 of parent Router: 0: Processing transaction and received data: 33
-295 ns: Info: MY_LOG: Router router0: Core 3 completed transaction, data: 33
-295 ns: Info: MY_LOG: Token for destination router 2 granted to Router 3
-295 ns: Info: MY_LOG: router3 forwarded data: 28 to Router_2
-300 ns: Info: MY_LOG: Core 3 of Source Router: 3: Processing data 68 for router 0 and core 1 at time: 300 ns
-300 ns: Info: MY_LOG: Router router3: Received transaction with data: 68 at time: 300 ns
-300 ns: Info: MY_LOG: Core core3_3: Transaction successful, data sent: 68 at time: 300 ns
-300 ns: Info: MY_LOG: Updated owner of semaphore 0 to Router 0
-300 ns: Info: MY_LOG: Updated owner of semaphore 3 to Router 1
-300 ns: Info: MY_LOG: Core 3 of Source Router: 0: Processing data 95 for router 3 and core 0 at time: 300 ns
-300 ns: Info: MY_LOG: Router router0: Received transaction with data: 95 at time: 300 ns
-300 ns: Info: MY_LOG: Core core0_3: Transaction successful, data sent: 95 at time: 300 ns
-300 ns: Info: MY_LOG: Core 2 of Source Router: 3: Processing data 85 for router 2 and core 0 at time: 300 ns
-300 ns: Info: MY_LOG: Router router3: Received transaction with data: 85 at time: 300 ns
-300 ns: Info: MY_LOG: Core core3_2: Transaction successful, data sent: 85 at time: 300 ns
-300 ns: Info: MY_LOG: Core 3 of Source Router: 2: Processing data 9 for router 3 and core 3 at time: 300 ns
-300 ns: Info: MY_LOG: Router router2: Received transaction with data: 9 at time: 300 ns
-300 ns: Info: MY_LOG: Core core2_3: Transaction successful, data sent: 9 at time: 300 ns
-300 ns: Info: MY_LOG: Core 1 of Source Router: 1: Processing data 7 for router 2 and core 1 at time: 300 ns
-300 ns: Info: MY_LOG: Router router1: Received transaction with data: 7 at time: 300 ns
-300 ns: Info: MY_LOG: Core core1_1: Transaction successful, data sent: 7 at time: 300 ns
-300 ns: Info: MY_LOG: Core 1 of Source Router: 2: Processing data 20 for router 0 and core 3 at time: 300 ns
-300 ns: Info: MY_LOG: Router router2: Received transaction with data: 20 at time: 300 ns
-300 ns: Info: MY_LOG: Core core2_1: Transaction successful, data sent: 20 at time: 300 ns
-300 ns: Info: MY_LOG: Core 0 of Source Router: 3: Processing data 7 for router 1 and core 2 at time: 300 ns
-300 ns: Info: MY_LOG: Router router3: Received transaction with data: 7 at time: 300 ns
-300 ns: Info: MY_LOG: Core core3_0: Transaction successful, data sent: 7 at time: 300 ns
-300 ns: Info: MY_LOG: Core 0 of Source Router: 1: Processing data 50 for router 2 and core 1 at time: 300 ns
-300 ns: Info: MY_LOG: Router router1: Received transaction with data: 50 at time: 300 ns
-300 ns: Info: MY_LOG: Core core1_0: Transaction successful, data sent: 50 at time: 300 ns
-300 ns: Info: MY_LOG: Core 1 of Source Router: 3: Processing data 87 for router 0 and core 2 at time: 300 ns
-300 ns: Info: MY_LOG: Router router3: Received transaction with data: 87 at time: 300 ns
-300 ns: Info: MY_LOG: Core core3_1: Transaction successful, data sent: 87 at time: 300 ns
-300 ns: Info: MY_LOG: Core 2 of Source Router: 1: Processing data 20 for router 0 and core 2 at time: 300 ns
-300 ns: Info: MY_LOG: Router router1: Received transaction with data: 20 at time: 300 ns
-300 ns: Info: MY_LOG: Core core1_2: Transaction successful, data sent: 20 at time: 300 ns
-300 ns: Info: MY_LOG: Core 3 of Source Router: 1: Processing data 40 for router 3 and core 2 at time: 300 ns
-300 ns: Info: MY_LOG: Router router1: Received transaction with data: 40 at time: 300 ns
-300 ns: Info: MY_LOG: Core core1_3: Transaction successful, data sent: 40 at time: 300 ns
-300 ns: Info: MY_LOG: Core 0 of Source Router: 0: Processing data 13 for router 3 and core 0 at time: 300 ns
-300 ns: Info: MY_LOG: Router router0: Received transaction with data: 13 at time: 300 ns
-300 ns: Info: MY_LOG: Core core0_0: Transaction successful, data sent: 13 at time: 300 ns
-300 ns: Info: MY_LOG: Core 2 of Source Router: 0: Processing data 31 for router 1 and core 0 at time: 300 ns
-300 ns: Info: MY_LOG: Router router0: Received transaction with data: 31 at time: 300 ns
-300 ns: Info: MY_LOG: Core core0_2: Transaction successful, data sent: 31 at time: 300 ns
-300 ns: Info: MY_LOG: Core 0 of Source Router: 2: Processing data 81 for router 1 and core 1 at time: 300 ns
-300 ns: Info: MY_LOG: Router router2: Received transaction with data: 81 at time: 300 ns
-300 ns: Info: MY_LOG: Core core2_0: Transaction successful, data sent: 81 at time: 300 ns
-300 ns: Info: MY_LOG: Core 2 of Source Router: 2: Processing data 0 for router 1 and core 3 at time: 300 ns
-300 ns: Info: MY_LOG: Router router2: Received transaction with data: 0 at time: 300 ns
-300 ns: Info: MY_LOG: Core core2_2: Transaction successful, data sent: 0 at time: 300 ns
-300 ns: Info: MY_LOG: Core 1 of Source Router: 0: Processing data 92 for router 2 and core 1 at time: 300 ns
-300 ns: Info: MY_LOG: Router router0: Received transaction with data: 92 at time: 300 ns
-300 ns: Info: MY_LOG: Core core0_1: Transaction successful, data sent: 92 at time: 300 ns
-300 ns: Info: MY_LOG: Token for destination router 3 granted to Router 0
-300 ns: Info: MY_LOG: router0 forwarded data: 95 to Router_3
-300 ns: Info: MY_LOG: Router 1 added to queue for semaphore 2
-300 ns: Info: MY_LOG: Router router1: Semaphore for Router_2 is unavailable. Retrying with data: 7
-305 ns: Info: MY_LOG: Router router1: Semaphore for Router_2 is unavailable. Retrying with data: 7
-310 ns: Info: MY_LOG: Router router1: Semaphore for Router_2 is unavailable. Retrying with data: 7
-315 ns: Info: MY_LOG: Router 2 released token for destination router 1
-315 ns: Info: MY_LOG: Router 1: Received transaction with data: 89 from Router 2 after a delay of:30 ns
-315 ns: Info: MY_LOG: Router router1: Forwarding transaction with data: 89 to core 3
-315 ns: Info: MY_LOG: Core 3 of parent Router: 1: Processing transaction and received data: 89
-315 ns: Info: MY_LOG: Router router1: Core 3 completed transaction, data: 89
-315 ns: Info: MY_LOG: Token for destination router 0 granted to Router 2
-315 ns: Info: MY_LOG: router2 forwarded data: 43 to Router_0
-315 ns: Info: MY_LOG: Router router1: Semaphore for Router_2 is unavailable. Retrying with data: 7
-320 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 3
-320 ns: Info: MY_LOG: Router router1: Semaphore for Router_2 is unavailable. Retrying with data: 7
-325 ns: Info: MY_LOG: Router 3 released token for destination router 2
-325 ns: Info: MY_LOG: Token for destination router 2 passed to Router 1
-325 ns: Info: MY_LOG: Router 2: Received transaction with data: 28 from Router 3 after a delay of:30 ns
-325 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 28 to core 3
-325 ns: Info: MY_LOG: Core 3 of parent Router: 2: Processing transaction and received data: 28
-325 ns: Info: MY_LOG: Router router2: Core 3 completed transaction, data: 28
-325 ns: Info: MY_LOG: Router 3 added to queue for semaphore 0
-325 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 68
-325 ns: Info: MY_LOG: Token for destination router 2 granted to Router 1
-325 ns: Info: MY_LOG: router1 forwarded data: 7 to Router_2
-330 ns: Info: MY_LOG: Router 0 released token for destination router 3
-330 ns: Info: MY_LOG: Router 3: Received transaction with data: 95 from Router 0 after a delay of:30 ns
-330 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 95 to core 0
-330 ns: Info: MY_LOG: Core 0 of parent Router: 3: Processing transaction and received data: 95
-330 ns: Info: MY_LOG: Router router3: Core 0 completed transaction, data: 95
-330 ns: Info: MY_LOG: Token for destination router 3 granted to Router 0
-330 ns: Info: MY_LOG: router0 forwarded data: 13 to Router_3
-330 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 68
-335 ns: Info: MY_LOG: Router 2 released token for destination router 0
-335 ns: Info: MY_LOG: Token for destination router 0 passed to Router 3
-335 ns: Info: MY_LOG: Router 0: Received transaction with data: 43 from Router 2 after a delay of:20 ns
-335 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 43 to core 3
-335 ns: Info: MY_LOG: Core 3 of parent Router: 0: Processing transaction and received data: 43
-335 ns: Info: MY_LOG: Router router0: Core 3 completed transaction, data: 43
-335 ns: Info: MY_LOG: Router 2: Received transaction with data: 7 from Router 1 after a delay of:10 ns
-335 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 7 to core 1
-335 ns: Info: MY_LOG: Core 1 of parent Router: 2: Processing transaction and received data: 7
-335 ns: Info: MY_LOG: Router router2: Core 1 completed transaction, data: 7
-335 ns: Info: MY_LOG: Router 2 added to queue for semaphore 0
-335 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 25
-335 ns: Info: MY_LOG: Router 1 released token for destination router 2
-335 ns: Info: MY_LOG: Token for destination router 2 granted to Router 1
-335 ns: Info: MY_LOG: router1 forwarded data: 50 to Router_2
-335 ns: Info: MY_LOG: Token for destination router 0 granted to Router 3
-335 ns: Info: MY_LOG: router3 forwarded data: 68 to Router_0
-340 ns: Info: MY_LOG: Updated owner of semaphore 1 to Router 0
-340 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 25
-345 ns: Info: MY_LOG: Router 1 released token for destination router 2
-345 ns: Info: MY_LOG: Router 2: Received transaction with data: 50 from Router 1 after a delay of:10 ns
-345 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 50 to core 1
-345 ns: Info: MY_LOG: Core 1 of parent Router: 2: Processing transaction and received data: 50
-345 ns: Info: MY_LOG: Router router2: Core 1 completed transaction, data: 50
-345 ns: Info: MY_LOG: Router 0: Received transaction with data: 68 from Router 3 after a delay of:10 ns
-345 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 68 to core 1
-345 ns: Info: MY_LOG: Core 1 of parent Router: 0: Processing transaction and received data: 68
-345 ns: Info: MY_LOG: Router router0: Core 1 completed transaction, data: 68
-345 ns: Info: MY_LOG: Router 1 added to queue for semaphore 0
-345 ns: Info: MY_LOG: Router router1: Semaphore for Router_0 is unavailable. Retrying with data: 20
-345 ns: Info: MY_LOG: Router 3 released token for destination router 0
-345 ns: Info: MY_LOG: Token for destination router 0 passed to Router 2
-345 ns: Info: MY_LOG: Token for destination router 2 granted to Router 3
-345 ns: Info: MY_LOG: router3 forwarded data: 85 to Router_2
-345 ns: Info: MY_LOG: Token for destination router 0 granted to Router 2
-345 ns: Info: MY_LOG: router2 forwarded data: 25 to Router_0
-350 ns: Info: MY_LOG: Router router1: Semaphore for Router_0 is unavailable. Retrying with data: 20
-355 ns: Info: MY_LOG: Router router1: Semaphore for Router_0 is unavailable. Retrying with data: 20
-360 ns: Info: MY_LOG: Router 0 released token for destination router 3
-360 ns: Info: MY_LOG: Router 3: Received transaction with data: 13 from Router 0 after a delay of:30 ns
-360 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 13 to core 0
-360 ns: Info: MY_LOG: Core 0 of parent Router: 3: Processing transaction and received data: 13
-360 ns: Info: MY_LOG: Router router3: Core 0 completed transaction, data: 13
-360 ns: Info: MY_LOG: Token for destination router 1 granted to Router 0
-360 ns: Info: MY_LOG: router0 forwarded data: 31 to Router_1
-360 ns: Info: MY_LOG: Updated owner of semaphore 3 to Router 1
-360 ns: Info: MY_LOG: Router router1: Semaphore for Router_0 is unavailable. Retrying with data: 20
-365 ns: Info: MY_LOG: Router 2 released token for destination router 0
-365 ns: Info: MY_LOG: Token for destination router 0 passed to Router 1
-365 ns: Info: MY_LOG: Router 0: Received transaction with data: 25 from Router 2 after a delay of:20 ns
-365 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 25 to core 1
-365 ns: Info: MY_LOG: Core 1 of parent Router: 0: Processing transaction and received data: 25
-365 ns: Info: MY_LOG: Router router0: Core 1 completed transaction, data: 25
-365 ns: Info: MY_LOG: Token for destination router 3 granted to Router 2
-365 ns: Info: MY_LOG: router2 forwarded data: 9 to Router_3
-365 ns: Info: MY_LOG: Token for destination router 0 granted to Router 1
-365 ns: Info: MY_LOG: router1 forwarded data: 20 to Router_0
-370 ns: Info: MY_LOG: Router 0 released token for destination router 1
-370 ns: Info: MY_LOG: Router 1: Received transaction with data: 31 from Router 0 after a delay of:10 ns
-370 ns: Info: MY_LOG: Router router1: Forwarding transaction with data: 31 to core 0
-370 ns: Info: MY_LOG: Core 0 of parent Router: 1: Processing transaction and received data: 31
-370 ns: Info: MY_LOG: Router router1: Core 0 completed transaction, data: 31
-370 ns: Info: MY_LOG: Router 0 added to queue for semaphore 2
-370 ns: Info: MY_LOG: Router router0: Semaphore for Router_2 is unavailable. Retrying with data: 92
-375 ns: Info: MY_LOG: Router 3 released token for destination router 2
-375 ns: Info: MY_LOG: Token for destination router 2 passed to Router 0
-375 ns: Info: MY_LOG: Router 2: Received transaction with data: 85 from Router 3 after a delay of:30 ns
-375 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 85 to core 0
-375 ns: Info: MY_LOG: Core 0 of parent Router: 2: Processing transaction and received data: 85
-375 ns: Info: MY_LOG: Router router2: Core 0 completed transaction, data: 85
-375 ns: Info: MY_LOG: Router 3: Received transaction with data: 9 from Router 2 after a delay of:10 ns
-375 ns: Info: MY_LOG: Router router3: Forwarding transaction with data: 9 to core 3
-375 ns: Info: MY_LOG: Core 3 of parent Router: 3: Processing transaction and received data: 9
-375 ns: Info: MY_LOG: Router router3: Core 3 completed transaction, data: 9
-375 ns: Info: MY_LOG: Token for destination router 1 granted to Router 3
-375 ns: Info: MY_LOG: router3 forwarded data: 7 to Router_1
-375 ns: Info: MY_LOG: Router 2 released token for destination router 3
-375 ns: Info: MY_LOG: Router 2 added to queue for semaphore 0
-375 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 20
-375 ns: Info: MY_LOG: Token for destination router 2 granted to Router 0
-375 ns: Info: MY_LOG: router0 forwarded data: 92 to Router_2
-380 ns: Info: MY_LOG: Updated owner of semaphore 3 to Router 3
-380 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 20
-385 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 20
-390 ns: Info: MY_LOG: Router router2: Semaphore for Router_0 is unavailable. Retrying with data: 20
-395 ns: Info: MY_LOG: Router 3 released token for destination router 1
-395 ns: Info: MY_LOG: Router 1: Received transaction with data: 7 from Router 3 after a delay of:20 ns
-395 ns: Info: MY_LOG: Router router1: Forwarding transaction with data: 7 to core 2
-395 ns: Info: MY_LOG: Core 2 of parent Router: 1: Processing transaction and received data: 7
-395 ns: Info: MY_LOG: Router router1: Core 2 completed transaction, data: 7
-395 ns: Info: MY_LOG: Router 0: Received transaction with data: 20 from Router 1 after a delay of:30 ns
-395 ns: Info: MY_LOG: Router router0: Forwarding transaction with data: 20 to core 2
-395 ns: Info: MY_LOG: Core 2 of parent Router: 0: Processing transaction and received data: 20
-395 ns: Info: MY_LOG: Router router0: Core 2 completed transaction, data: 20
-395 ns: Info: MY_LOG: Router 2: Received transaction with data: 92 from Router 0 after a delay of:20 ns
-395 ns: Info: MY_LOG: Router router2: Forwarding transaction with data: 92 to core 1
-395 ns: Info: MY_LOG: Core 1 of parent Router: 2: Processing transaction and received data: 92
-395 ns: Info: MY_LOG: Router router2: Core 1 completed transaction, data: 92
-395 ns: Info: MY_LOG: Router 3 added to queue for semaphore 0
-395 ns: Info: MY_LOG: Router router3: Semaphore for Router_0 is unavailable. Retrying with data: 87
-395 ns: Info: MY_LOG: Router 1 released token for destination router 0
-395 ns: Info: MY_LOG: Token for destination router 0 passed to Router 2
-395 ns: Info: MY_LOG: Token for destination router 3 granted to Router 1
-395 ns: Info: MY_LOG: router1 forwarded data: 40 to Router_3
-395 ns: Info: MY_LOG: Router 0 released token for destination router 2
-395 ns: Info: MY_LOG: Token for destination router 0 granted to Router 2
-395 ns: Info: MY_LOG: router2 forwarded data: 20 to Router_0
+59 ns: INFO: MY_LOG: Flits generated for packet of id 0 to be sent to 0.000000,0.667000,0.000000 from 0.000000,0.000000,0.000000
+59 ns: INFO: MY_LOG: Network Interface 0 of Source Router: 0: Processing packet flit with ID: 1 for router 3 and Network Interface 12 at time: 59 ns
+59 ns: INFO: MY_LOG: Router Layer.NocTlm.router0: Received transaction with data at time: 59 ns
+59 ns: INFO: MY_LOG: Network Interface core0_0: Transaction successful, flit sent ID: 1 at time: 59 ns
+59 ns: INFO: MY_LOG: router id: 0, dest Router id: 3
+59 ns: INFO: MY_LOG: Token for destination router 3 granted to Router 0
+59 ns: INFO: MY_LOG: Router: 0 forwarded data with ID: 1 to Router_3
+89 ns: INFO: MY_LOG: Router 0 released token for destination router 3
+89 ns: INFO: MY_LOG: Router 3: Received transaction with data: 1 from Router 0 after a delay of:30 ns
+89 ns: INFO: MY_LOG: Router 3: Forwarding transaction with data: 1 to Processing Element 12
+89 ns: INFO: MY_LOG: Network Interface 12 of parent Router: 3: Processing transaction and received flit ID: 1
+89 ns: INFO: MY_LOG: Router 3: Network Interface 12 completed transaction, data ID: 1
diff --git a/report.txt b/report.txt
new file mode 100644
index 0000000..fa66334
--- /dev/null
+++ b/report.txt
@@ -0,0 +1,1537 @@
+Report file of this simulation run.
+
+----------------------------------------------------
+General Information:
+----------------------------------------------------
+Lost Packets: 0
+Average flit latency: -nan ns.
+Average packet latency: -nan ns.
+Average network latency: -nan ns.
+Clock Counts: [0, 0, 0]
+----------------------------------------------------
+Router Matrixes:
+----------------------------------------------------
+Routing calculations:
+----------------------------------------------------
+Link Matrixes:
+----------------------------------------------------
+Transmission matrix of links 0:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 1:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 2:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 3:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 4:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 5:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 6:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 7:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 8:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 9:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 10:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 11:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 12:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 13:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 14:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 15:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 16:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 17:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 18:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 19:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 20:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 21:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 22:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 23:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 24:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 25:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 26:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 27:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 28:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 29:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 30:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 31:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 32:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 33:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 34:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 35:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 36:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 37:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 38:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 39:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 40:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 41:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 42:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 43:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 44:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 45:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 46:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 47:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 48:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 49:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 50:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 51:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 52:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 53:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 54:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 55:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 56:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 57:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 58:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 59:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 60:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 61:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 62:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 63:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 64:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 65:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 66:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 67:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 68:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 69:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 70:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 71:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 72:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 73:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 74:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 75:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 76:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 77:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 78:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 79:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 80:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 81:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 82:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 83:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 84:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 85:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 86:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 87:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 88:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 89:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 90:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 91:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 92:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 93:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 94:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 95:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 96:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 97:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 98:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 99:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 100:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 101:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 102:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 103:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 104:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 105:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 106:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 107:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 108:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 109:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 110:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 111:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 112:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 113:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 114:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 115:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 116:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 117:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 118:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 119:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 120:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 121:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 122:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 123:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 124:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 125:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 126:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 127:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 128:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 129:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 130:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 131:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 132:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 133:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 134:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 135:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 136:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 137:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 138:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 139:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 140:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 141:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 142:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 143:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 144:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 145:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 146:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 147:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 148:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 149:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 150:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 151:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 152:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 153:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 154:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 155:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 156:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 157:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 158:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 159:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 160:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 161:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 162:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 163:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 164:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 165:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 166:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 167:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 168:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 169:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 170:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 171:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 172:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 173:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 174:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 175:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 176:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 177:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 178:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 179:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 180:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 181:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 182:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 183:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 184:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 185:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 186:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 187:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 188:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 189:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 190:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 191:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 192:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 193:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 194:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 195:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 196:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 197:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 198:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 199:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 200:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 201:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 202:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 203:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 204:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 205:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 206:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 207:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 208:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 209:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 210:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 211:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 212:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 213:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 214:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 215:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 216:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 217:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 218:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 219:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 220:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 221:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 222:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 223:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 224:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 225:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 226:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 227:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 228:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 229:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 230:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 231:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 232:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 233:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 234:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 235:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 236:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 237:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 238:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 239:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 240:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 241:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 242:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 243:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 244:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 245:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 246:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 247:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 248:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 249:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 250:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 251:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 252:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 253:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 254:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 255:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 256:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 257:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 258:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 259:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 260:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 261:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 262:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 263:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 264:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 265:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 266:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 267:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 268:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 269:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 270:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 271:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 272:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 273:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 274:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 275:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 276:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 277:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 278:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 279:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 280:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 281:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 282:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 283:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 284:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 285:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 286:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 287:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 288:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 289:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 290:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 291:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 292:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 293:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 294:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 295:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 296:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 297:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 298:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 299:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 300:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 301:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 302:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
+Transmission matrix of links 303:
+from\to IDLE HEAD HID
+IDLE [ -nan, -nan, -nan ]
+HEAD [ -nan, -nan, -nan ]
+HID [ -nan, -nan, -nan ]
diff --git a/src/core.cpp b/src/core.cpp
deleted file mode 100644
index e19ff2f..0000000
--- a/src/core.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-#include "core.h"
-
-// Initiator module (processor core)
-core::core(sc_module_name name) {
- sc_report_handler::set_log_file_name("out/report.log");
- sc_report_handler::set_actions(LOG_NAME, SC_INFO, SC_LOG|SC_DISPLAY);
- SC_THREAD(thread);
- target_socket.register_nb_transport_fw(this, &core::nb_transport_fw);
-}
-
-// Thread for sending data
-void core::thread() {
-
- // Initialize random seed (only once per run, for all cores)
- static bool seeded = false;
- if (!seeded) {
- srand(time(0)); // Seed the random number generator
- seeded = true;
- }
-
- // Infinite loop for sending data
- while (true) {
- my_payload* trans = nullptr;
- // Core ID and source router ID from main logic
- unsigned int source_core = source_core_id;
- unsigned int src_router_id = source_router_id; // Source router from the main logic
-
- sc_time delay = SC_ZERO_TIME; // Start with zero delay
- sc_time inter_transaction_delay = sc_time(90, SC_NS); // Delay between transactions
- // Loop to retry the same transaction
- bool retry = false;
- do {
- if (!retry) {
- // Generate random data between 0 and 100
- int data = rand() % 101;
-
- // Random destination router (ensuring it's different from source router)
- unsigned int destination_router_id;
- do {
- destination_router_id = rand() % ROUTER_NO; // Random router ID between 0 and ROUTER_NO-1
- } while (destination_router_id == src_router_id); // Ensure it's not the same as source router
-
- // Destination core ID (random between 0 and CORE_NO-1)
- unsigned int dst_core_id = rand() % CORE_NO;
-
- // Create payload with generated values
- trans = new my_payload(source_core, src_router_id, dst_core_id, destination_router_id, data);
- trans->update_timestamp(sc_time_stamp()); // Set the current simulation time
-
- // Construct the address (calculation based on router/core IDs)
- unsigned int offset = 0x20; // offset
- unsigned int address = (destination_router_id << 12) | (dst_core_id << 8) | offset;
- trans->set_address(address);
-
- // Print which core is currently sending the data
- log_info( "Core " + std::to_string(source_core) + " of Source Router: " + std::to_string(source_router_id)
- + ": Processing data " + std::to_string(trans->data) + " for router " + std::to_string(destination_router_id)
- + " and core " + std::to_string(dst_core_id) + " at time: " + trans->timestamp.to_string());
- }
-
- // Set up the rest of the transaction
- trans->set_byte_enable_ptr(nullptr);
- trans->set_dmi_allowed(false);
- trans->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE);
-
-
- tlm::tlm_phase phase = tlm::BEGIN_REQ; // Transaction phase
- tlm::tlm_sync_enum status = socket->nb_transport_fw(*trans, phase, delay); // Non-blocking transport
-
- if (status == tlm::TLM_COMPLETED || phase == tlm::END_REQ) {
- log_info("Core " + std::string(name()) + ": Transaction successful, data sent: " + std::to_string(trans->data) + " at time: " + sc_time_stamp().to_string());
- delete trans; // Clean up the transaction
- retry = false; // Move on to the next transaction
- wait(inter_transaction_delay);
- } else if (status == tlm::TLM_ACCEPTED) {
- log_info("Core " + std::string(name()) + ": Transaction accepted, waiting for completion.");
- wait(delay); // Wait for response
- retry = false; // No need to retry, accepted transaction will continue
- } else if (status == tlm::TLM_UPDATED && phase == tlm::BEGIN_REQ) {
- log_info("Core " + std::string(name()) + ": FIFO full, retrying...");
- //wait(delay); // Wait for some time before retrying
- // --i; // Retry the same transaction
- wait(delay + sc_time(20, SC_NS)); // Add some delay before retrying
- // wait(router->core_fifo_event);
- retry = true; // Retry the same transaction
- }
-
- } while (retry);
-
-
- wait(delay);
- }
-}
-
-/// Forwarding function for receiving data from router
-tlm::tlm_sync_enum core::nb_transport_fw(tlm::tlm_generic_payload& trans, tlm::tlm_phase& phase, sc_time& delay) {
- if (phase == tlm::BEGIN_REQ) {
- my_payload* my_trans = dynamic_cast(&trans);
-
- // Print which core is processing the received data
- log_info("Core " + std::to_string(source_core_id) + " of parent Router: " + std::to_string(source_router_id)
- + ": Processing transaction " + "and received data: " + std::to_string(my_trans->data));
-
- // log_info("Core " + std::string(name()) + ": Received transaction, data: " + std::to_string(my_trans->data));
-
-
- // Send acknowledgment or status back
- trans.set_response_status(tlm::TLM_OK_RESPONSE);
-
- // Log the received data and remove the payload
- delete my_trans;
- return tlm::TLM_COMPLETED;
- }
- return tlm::TLM_ACCEPTED;
-}
-
-
-
-void core::log_info(std::string msg){
- SC_REPORT_INFO(LOG_NAME, msg.c_str());
-}
-
-void core::log_error(std::string msg){
- SC_REPORT_ERROR(LOG_NAME, msg.c_str());
-}
\ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..42692f6
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (C) 2024
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ ******************************************************************************/
+#include "systemc.h"
+#include
+#include
+#include
+#include "boost/program_options.hpp"
+
+#include "ratatoskrUtils/utils/GlobalResources.h"
+#include "networkManager/NetworkManager.h"
+// #include
+// using namespace boost::placeholders;
+
+namespace po = boost::program_options;
+
+int sc_main(int arg_num, char *arg_vec[])
+{
+ po::variables_map vm;
+ po::options_description desc("Allowed Options");
+ desc.add_options()("configFolder", po::value()->default_value(""), "Input path for config.xml and net.xml");
+ try {
+ po::store(po::parse_command_line(arg_num, arg_vec, desc), vm);
+ po::notify(vm);
+ }
+ catch (po::error &e) {
+ cerr << "ERROR: " << e.what() << endl << endl << desc << endl;
+ return 1;
+ }
+ std::string configFolder = vm["configFolder"].as();
+
+ // start simulation
+ std::unique_ptr networkManager =
+ std::make_unique("Layer", configFolder);
+ GlobalResources& globalResources = GlobalResources::getInstance();
+ cout << "Random seed " << globalResources.rd_seed << endl;
+ cout << endl
+ << "Starting Simulation!" << endl;
+ sc_start(globalResources.simulation_time, SC_NS);
+ cout << endl
+ << "Simulation completed! Time: "<< sc_time_stamp() << endl;
+ return 0;
+}
diff --git a/src/networkInterface/NetworkInterfaceTlm.cpp b/src/networkInterface/NetworkInterfaceTlm.cpp
new file mode 100644
index 0000000..df574cc
--- /dev/null
+++ b/src/networkInterface/NetworkInterfaceTlm.cpp
@@ -0,0 +1,306 @@
+/*******************************************************************************
+ * Copyright (C) 2024
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ ******************************************************************************/
+#include "NetworkInterfaceTlm.h"
+#include
+
+#include "ratatoskrUtils/traffic/Flit.h"
+#include "utils/configuration.h"
+// #include "utils/utils.h"
+
+//DECLARE_EXTENDED_PHASE(INTERNAL_PROC_PHASE);
+
+using namespace std;
+
+NetworkInterfaceTlm::NetworkInterfaceTlm(sc_module_name nm, Node& node) :
+ NetworkInterface(nm, node), lastReceivedCreditID(-1), credit_counter(0), ni_name(nm), resp_in_progress(false)
+ {
+ target_socket.register_nb_transport_fw(this, &NetworkInterfaceTlm::nb_transport_fw); ////from core
+ //sc_report_handler::set_actions(NI_LOG, SC_INFO, SC_LOG|SC_DISPLAY);
+ sc_report_handler::set_log_file_name("out/report.log"); //from core
+ sc_report_handler::set_actions(LOG_NAME, SC_INFO, SC_LOG|SC_DISPLAY); //from core
+
+ try {
+ this->id = source_core_id;
+ this->dbid = rep.registerElement("ProcessingElement", this->id);
+ this->node = node;
+ this->packetPortContainer = new PacketPortContainer(
+ ("NI_PACKET_CONTAINER"+std::to_string(this->id)).c_str());
+ //copy(max_pos, max_pos + 3, this->max_pos);
+ }
+ catch (exception& e) {
+ log_error("Initialization Error: " + string(e.what()));
+ }
+ SC_THREAD(thread);
+ sensitive << clk.pos() << clk.neg();
+
+ SC_METHOD(receivePacketFromPE);
+ sensitive << packetPortContainer->portValidIn.pos();
+
+}
+
+NetworkInterfaceTlm::~NetworkInterfaceTlm() {
+ delete packetPortContainer;
+}
+
+void NetworkInterfaceTlm::initialize(){
+ /* NOT IMPLEMENTED */
+}
+
+void NetworkInterfaceTlm::bind(Connection* con, SignalContainer* sigContIn, SignalContainer* sigContOut) {
+ if (con==nullptr)
+ packetPortContainer->bind(sigContIn, sigContOut);
+}
+
+void NetworkInterfaceTlm::receiveFlitFromRouter(){
+ /* NOT IMPLEMENTED */
+}
+
+void NetworkInterfaceTlm::receivePacketFromPE() {
+ if (packetPortContainer->portValidIn.posedge()) {
+ //LOG(globalReport.verbose_pe_function_calls, "NI" << this->id << "(Node" << node.id << ")\t\t- receive()");
+ Packet* packet = packetPortContainer->portDataIn.read();
+ generateFlitsForPacket(packet);
+ packet_send_queue.push(packet);
+ }
+}
+
+void NetworkInterfaceTlm::getDestination(Packet* p, std::string pos[2]){
+ pos[0] = to_string(node.pos.x) + "," +
+ to_string(node.pos.y) + "," + to_string(node.pos.z);
+ pos[1] = to_string(p->dst.pos.x) + "," +
+ to_string(p->dst.pos.y) + "," +
+ to_string(p->dst.pos.z);
+}
+
+void NetworkInterfaceTlm::generateFlitsForPacket(Packet* p) {
+ int flitsPerPacket = p->size;
+ for (int i = 0; idataType, sc_time_stamp().to_double());
+ p->toTransmit.push_back(current_flit->id);
+ p->flits.push_back(current_flit);
+
+ std::string start_end_pos[2];
+ getDestination(p, start_end_pos);
+ log_info("Flits generated for packet of id "+ to_string(p->id)+
+ " to be sent to "+start_end_pos[1]+" from "+ start_end_pos[0]);
+ }
+}
+
+void NetworkInterfaceTlm::send_packet_to_router() {
+ // if no flits to transmit, generate them
+ Packet* p = packet_send_queue.front();
+ if (p->toTransmit.empty()){
+ generateFlitsForPacket(p);
+ }
+ // get current flit to send
+ flitID_t f_id = p->toTransmit.front();
+ auto iter = find_if(p->flits.begin(), p->flits.end(),
+ [&f_id](Flit* f) { return f->id==f_id; });
+ Flit* current_flit = *iter;
+ current_flit->injectionTime = sc_time_stamp().to_double();
+
+ auto toDelete_pos = find(p->toTransmit.begin(), p->toTransmit.end(), current_flit->id);
+ p->toTransmit.erase(toDelete_pos);
+ p->inTransmit.push_back(current_flit->id);
+
+ if (p->toTransmit.empty()) {
+ packet_send_queue.pop();
+ }
+
+ my_payload* trans = nullptr;
+
+ unsigned int src_core_id = p->src.id;
+ unsigned int src_router_id = src_core_id/CORE_NO;
+ unsigned int dst_core_id = p->dst.id;
+ unsigned int destination_router_id = dst_core_id/CORE_NO;
+ sc_time delay = sc_time(0, SC_NS);
+
+ trans = new my_payload(src_core_id, src_router_id, dst_core_id, destination_router_id, current_flit, sc_time_stamp());
+ // Construct the address (calculation based on router/core IDs)
+ unsigned int offset = 0x20; // offset
+ unsigned int address = (destination_router_id << 12) | (dst_core_id << 8) | offset;
+ trans->set_address(address);
+ log_info( "Network Interface " + std::to_string(src_core_id) + " of Source Router: " + std::to_string(source_router_id)
+ + ": Processing packet flit with ID: " + std::to_string(trans->data->id) + " for router " + std::to_string(destination_router_id)
+ + " and Network Interface " + std::to_string(dst_core_id) + " at time: " + trans->timestamp.to_string());
+
+
+ // Set up the rest of the transaction
+ trans->set_data_length(p->size);
+ trans->set_streaming_width(4);
+ trans->set_byte_enable_ptr(nullptr);
+ trans->set_dmi_allowed(false);
+ trans->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE);
+ tlm::tlm_phase phase = tlm::BEGIN_REQ; // Transaction phase
+ tlm::tlm_sync_enum status = socket->nb_transport_fw(*trans, phase, delay); // Non-blocking transport
+
+
+ bool retry = false;
+ do {
+ if (!retry) {
+ tlm::tlm_sync_enum status = socket->nb_transport_fw(*trans, phase, delay); // Non-blocking transport
+
+ if (status == tlm::TLM_COMPLETED || phase == tlm::END_REQ) {
+ log_info("Network Interface " + ni_name + ": Transaction successful, flit sent ID: " + std::to_string(trans->data->id) + " at time: " + sc_time_stamp().to_string());
+ delete trans; // Clean up the transaction
+ retry = false; // Move on to the next transaction
+ //wait(50, SC_NS);
+ } else if (status == tlm::TLM_ACCEPTED) {
+ log_info("Network Interface " + ni_name + ": Transaction accepted, waiting for completion.");
+ wait(0, SC_NS); // Wait for response
+ retry = false; // No need to retry, accepted transaction will continue
+ } else if (status == tlm::TLM_UPDATED && phase == tlm::BEGIN_REQ) {
+ log_info("Network Interface " + ni_name + ": FIFO full, retrying...");
+ wait(delay + sc_time(20, SC_NS)); // Add some delay before retrying
+ retry = true; // Retry the same transaction
+ }
+ }
+
+
+
+ }while(retry);
+
+ wait(0,SC_NS);
+}
+
+
+void NetworkInterfaceTlm::thread() {
+ while(true){
+ //log_info("send_data_process()");
+ if (clk.posedge()) {
+ if (!packet_send_queue.empty()) {
+ //if (credit_counter != 0){
+ send_packet_to_router();
+ //}
+ //else {
+ // log_info("Waiting for Router!");
+ //}
+ }
+ if (!packet_recv_queue.empty()) {
+ if (packetPortContainer->portFlowControlIn.read()) {
+ Packet* p = packet_recv_queue.front();
+ packet_recv_queue.pop();
+ packetPortContainer->portValidOut.write(true);
+ packetPortContainer->portDataOut.write(p);
+ // log arrival of packet
+ std::string start_end_pos[2];
+ getDestination(p, start_end_pos);
+ log_info("Packet with id " + to_string(p->id) +
+ " arrived at PE "+start_end_pos[1]);
+ }
+ }
+ }
+ else if (clk.negedge()) {
+ packetPortContainer->portValidOut.write(false);
+ }
+ wait();
+ }
+}
+
+tlm::tlm_sync_enum NetworkInterfaceTlm::nb_transport_fw(tlm::tlm_generic_payload& trans, tlm::tlm_phase& phase, sc_time& delay) {
+ if (phase == tlm::BEGIN_REQ) {
+ my_payload* my_trans = dynamic_cast(&trans);
+
+ // Print which core is processing the received data
+ log_info("Network Interface " + std::to_string(source_core_id) + " of parent Router: " + std::to_string(source_router_id)
+ + ": Processing transaction " + "and received flit ID: " + std::to_string(my_trans->data->id));
+
+ // Send acknowledgment or status back
+ trans.set_response_status(tlm::TLM_OK_RESPONSE);
+
+ // Log the received data and remove the payload
+ delete my_trans;
+ return tlm::TLM_COMPLETED;
+ }
+ return tlm::TLM_ACCEPTED;
+ }
+
+
+void NetworkInterfaceTlm::receive_and_process_flit(tlm::tlm_generic_payload& trans){
+ trans.set_response_status(tlm::TLM_OK_RESPONSE);
+ unsigned char* data_ptr = trans.get_data_ptr();
+ Flit* received_flit = reinterpret_cast(data_ptr);
+ Packet* p = received_flit->packet;
+ double time = sc_time_stamp().to_double();
+
+ auto position = find(p->inTransmit.begin(), p->inTransmit.end(), received_flit->id);
+ if (position!=p->inTransmit.end())
+ p->inTransmit.erase(position);
+ p->transmitted.push_back(received_flit->id);
+
+ if (received_flit->type==TAIL || received_flit->type==SINGLE){
+ stringstream ss;
+ std::string flit_type = received_flit->type==SINGLE ? "Single":"Tail";
+ ss << "Receive Flit " << flit_type << *received_flit;
+ log_info(ss.str());
+ }
+ if (!p->toTransmit.empty() || !p->inTransmit.empty()) {
+ stringstream ss;
+ ss << "Received Tail Flit, but still missing flits! "
+ << *received_flit;
+ log_info(ss.str());
+ }
+
+ globalReport.issueNoCOutputDataAmount(sc_time_stamp(),globalResources.bitWidth);
+ if (p->toTransmit.empty() && p->inTransmit.empty())
+ packet_recv_queue.push(p);
+ //credit_counter++;
+
+ // if(resp_in_progress) {
+ // if(nxt_resp_pend){
+ // // log_fatal("Attempt to have two pending responses in target");
+ // nxt_resp_pend = &trans;
+ // }
+ // }
+ //else{ send_response(trans); }
+}
+
+
+
+
+void NetworkInterfaceTlm::log_info(std::string msg){
+ // string log_msg = ni_name + ": (Node" +
+ // to_string(node.id)+"): "+ msg;
+ SC_REPORT_INFO(LOG_NAME, (msg).c_str());
+}
+
+void NetworkInterfaceTlm::log_error(std::string msg){
+ // string log_msg = ni_name + ": (Node" +
+ // to_string(node.id)+"): "+ msg;
+ SC_REPORT_ERROR(LOG_NAME, (msg).c_str());
+}
+
+void NetworkInterfaceTlm::log_fatal(std::string msg){
+ // string log_msg = ni_name + ": (Node" +
+ // to_string(node.id)+"): "+ msg;
+ SC_REPORT_FATAL(LOG_NAME, (msg).c_str());
+}
\ No newline at end of file
diff --git a/src/networkInterface/NetworkInterfaceTlm.h b/src/networkInterface/NetworkInterfaceTlm.h
new file mode 100644
index 0000000..2a1afc3
--- /dev/null
+++ b/src/networkInterface/NetworkInterfaceTlm.h
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (C) 2024
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ ******************************************************************************/
+/** NetworkInterfaceTlm, which is a specialized version of NetworkInterface
+
+NetworkInterfaceTlm handles the communication between the router and processing element (PE) in the NoC system.
+It manages the sending and receiving of data packets and the flow control between these components. */
+
+#pragma once
+#ifndef SC_INCLUDE_DYNAMIC_PROCESSES
+#define SC_INCLUDE_DYNAMIC_PROCESSES
+#endif
+
+#include "systemc.h"
+#include "tlm.h"
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include // For time()
+
+#include "ratatoskrUtils/utils/Structures.h"
+#include "ratatoskrUtils/container/PacketContainer.h"
+#include "ratatoskrUtils/utils/TrafficTracer.h"
+#include "ratatoskrUtils/utils/GlobalResources.h" ///
+#include "ratatoskrUtils/networkInterface/NetworkInterface.h"
+#include "utils/configuration.h"
+
+//#include "noc/noc.h"
+#include "utils/noc_logger.h"
+
+class NetworkInterfaceTlm : public NetworkInterface {
+public:
+
+ tlm_utils::simple_initiator_socket socket; //from core
+ tlm_utils::simple_target_socket target_socket; //from core
+ unsigned int source_router_id; //from core
+ unsigned int source_core_id; //from core
+
+ //typedef simple_initiator_socket_tagged ni_init_socket;
+ //typedef simple_target_socket_tagged ni_targ_socket;
+
+ std::queue packet_send_queue; //This is a queue where the network interface stores packets that need to be sent.
+ std::queue packet_recv_queue; //This is a queue for storing received packets, waiting to be processed.
+
+
+ std::string ni_name;
+ sc_in clk;
+ int credit_counter;
+ bool resp_in_progress;
+
+
+ PacketPortContainer* packetPortContainer; //This manages packet-level communication with the processing element (PE).
+ int creditCounter; //This keeps track of the available credits (flow control units) that manage how much data the network interface can send to the router.
+ int lastReceivedCreditID; //This records the last received credit ID from the router to ensure proper flow control and avoid overloading the network.
+ TrafficTracer& trafficTracer = TrafficTracer::getInstance(); //A reference to a global traffic tracing system. This helps log and analyze the flow of data (packets and flits) through the network interface for performance monitoring.
+
+ SC_HAS_PROCESS(NetworkInterfaceTlm);
+
+ NetworkInterfaceTlm(sc_module_name nm, Node& node);
+
+ ~NetworkInterfaceTlm() override;
+
+
+//Overridden Functions: These functions are inherited from the base NetworkInterface class and are specialized for this NetworkInterfaceVC class:
+ void initialize() override; //Initializes the network interface. This might involve setting initial values, like clearing the send and receive queues.
+
+ void bind(Connection* conn, SignalContainer* sigContIn,
+ SignalContainer* sigContOut) override; //This binds the network interface to other components (connections, signals) in the system.
+
+ void thread() override; //A process that will run in the SystemC simulation. It controls the main operations of the network interface, like handling packet transmission and reception.
+
+ void send_packet_to_router();
+
+ void receivePacketFromPE() override; //This function handles the reception of packets from the processing element (PE). These packets are placed in the packet_send_queue to be sent over the network.
+
+ void receiveFlitFromRouter() override; //Not implemented, another TLM function is used insted. Originally, This function deals with receiving flits from the router and reconstructing them into packets that can be processed by the PE.
+
+ void generateFlitsForPacket(Packet *p) override; //Converts a packet into flits to be sent over the network to the router.
+
+ void getDestination(Packet* p, std::string pos[2]);
+
+ void receive_and_process_flit(tlm::tlm_generic_payload& trans);
+
+ /// Forwarding function for receiving data from router
+ tlm::tlm_sync_enum nb_transport_fw(tlm::tlm_generic_payload& trans, tlm::tlm_phase& phase, sc_time& delay);
+
+ void log_info(std::string msg);
+ void log_error(std::string msg);
+ void log_fatal(std::string msg);
+
+};
+
diff --git a/src/networkManager/NetworkManager.cpp b/src/networkManager/NetworkManager.cpp
new file mode 100644
index 0000000..6800351
--- /dev/null
+++ b/src/networkManager/NetworkManager.cpp
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * Copyright (C) 2024
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ ******************************************************************************/
+
+#include "NetworkManager.h"
+#include "utils/noc_logger.h"
+
+NetworkManager::NetworkManager(sc_module_name nm, std::string configFolder){
+ setup_logger();
+ dbid = rep.registerElement("NetworkManager", 0);
+ tlmNoc = new NocTlm("NocTlm", configFolder);
+
+ networkParticipants.resize(globalResources.nodes.size());
+ createTrafficPool();
+ createClocks();
+ createNetworkParticipants();
+ //createLinks();
+ runNoC();
+}
+
+void NetworkManager::createClocks() {
+ clocks.resize(globalResources.nodeTypes.size());
+ for (const auto &nodeType : globalResources.nodeTypes) {
+ clocks.at(nodeType->id) = std::make_unique(
+ ("NodeType" + std::to_string(nodeType->id) + "Clock").c_str(),
+ nodeType->clockDelay, SC_NS);
+ }
+}
+
+
+void NetworkManager::createTrafficPool() {
+ unsigned long numOfPEs = CORE_NO * globalResources.nodes.size() / 2;
+#ifndef ENABLE_NETRACE
+ if (globalResources.benchmark == "task") {
+ tp = std::make_unique();
+ } else if (globalResources.benchmark == "synthetic") {
+ tp = std::make_unique();
+ } else {
+ FATAL("Please specify correct benchmark type");
+ }
+#endif
+// #ifdef ENABLE_NETRACE
+// tp = std::make_unique("NetracePool");
+// #endif
+ tp->processingElements.resize(numOfPEs);
+}
+
+void NetworkManager::createNetworkParticipants() {
+ int numOfPEs = tp->processingElements.size();
+ for (Node &n : globalResources.nodes) {
+ if (n.type->model == "Router") {
+ int id = n.id;
+
+ for (int j = 0; j < CORE_NO; ++j) {
+ int index = tlmNoc->cores[id][j]->source_core_id % numOfPEs;
+
+ NetworkInterfaceTlm* ni = tlmNoc->cores[id][j];
+ if (!ni) continue; // Ensure ni is valid
+
+ std::string pe_name = "pe_" + std::to_string(n.id) + "_" + std::to_string(j);
+ ProcessingElementVC *pe = new ProcessingElementVC(pe_name.c_str(), n, tp.get(), index);
+
+ auto sig1 = std::make_unique(
+ ("packetSigCon1_" + std::to_string(n.id) + "_" + std::to_string(j)).c_str());
+ auto sig2 = std::make_unique(
+ ("packetSigCon2_" + std::to_string(n.id) + "_" + std::to_string(j)).c_str());
+
+ ni->bind(nullptr, sig1.get(), sig2.get());
+ pe->bind(nullptr, sig2.get(), sig1.get());
+ ni->clk(*clocks.at(n.type->id));
+
+ networkParticipants.push_back(dynamic_cast(pe));
+ packetSignalContainers.push_back(move(sig1));
+ packetSignalContainers.push_back(move(sig2));
+
+ if (index < tp->processingElements.size()) {
+ tp->processingElements[index] = pe;
+ }
+ }
+ }
+ }
+}
+
+
+// void NetworkManager::createNetworkParticipants() {
+// int numOfPEs = tp->processingElements.size();
+// for (Node &n : globalResources.nodes) {
+// if (n.type->model == "RouterVC") {
+// int id = n.id;
+
+// for (int j = 0; j < CORE_NO; ++j) { // Core index within each router
+// NetworkInterfaceTlm* ni = tlmNoc->cores[id][j];
+
+// std::string pe_name = "pe_" + std::to_string(n.id);
+// ProcessingElementVC *pe = new ProcessingElementVC(pe_name.c_str(), n, tp.get());
+// std::unique_ptr sig1 =
+// std::make_unique(
+// ("packetSigCon1_" + std::to_string(n.id)).c_str());
+// std::unique_ptr sig2 =
+// std::make_unique(
+// ("packetSigCon2_" + std::to_string(n.id)).c_str());
+// ni->bind(nullptr, sig1.get(), sig2.get());
+// pe->bind(nullptr, sig2.get(), sig1.get());
+// networkParticipants.push_back(dynamic_cast(pe));
+// packetSignalContainers.push_back(move(sig1));
+// packetSignalContainers.push_back(move(sig2));
+// tp->processingElements.at(cores[id][j]->source_core_id % numOfPEs) = pe;
+// }
+// }
+// }
+// }
+
+
+/*
+void NetworkManager::createLinks() {
+ int link_id = 0;
+ for (auto &c : globalResources.connections) {
+ int connNodesSize = c.nodes.size();
+ if (connNodesSize == 2) { //might extend to bus architecture
+ // gets nodes for connections
+ Node &node1 = globalResources.nodes.at(c.nodes.at(0));
+ Node &node2 = globalResources.nodes.at(c.nodes.at(1));
+ bool is_node1_pe = node1.type->model == "ProcessingElement";
+ bool is_node2_pe = node2.type->model == "ProcessingElement";
+ if (is_node1_pe || is_node2_pe){
+ int ni_id = is_node1_pe ? node1.id : node2.id;
+ int rout_id = is_node1_pe ? node2.id : node1.id;
+ NetworkInterfaceTlm* ni =
+ dynamic_cast(
+ networkParticipants.at(ni_id));
+ MyRouter* router = tlmNoc->getRouterNodeId(rout_id);
+ ni->initiator.bind(*router->target_socket[DIR::Local]);
+ router->init_socket[DIR::Local]->bind(ni->target);
+ }
+ link_id += 2;
+ } else {
+ LOG(true,"Unsupported number of endpoints in connection "+to_string(c.id));
+ }
+ }
+}
+*/
+void NetworkManager::runNoC() {
+ for (auto &r : networkParticipants) {
+ if (r) {
+ r->initialize();
+ }
+ }
+ tp->start();
+}
+
+NetworkManager::~NetworkManager() {
+ for (auto &r : networkParticipants)
+ delete r;
+ networkParticipants.clear();
+}
+
+void NetworkManager::log_info(std::string msg){
+ SC_REPORT_INFO(NM_LOG, (msg).c_str());
+}
\ No newline at end of file
diff --git a/src/networkManager/NetworkManager.h b/src/networkManager/NetworkManager.h
new file mode 100644
index 0000000..6024fe9
--- /dev/null
+++ b/src/networkManager/NetworkManager.h
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (C) 2024
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ ******************************************************************************/
+#pragma once
+#ifndef SC_INCLUDE_DYNAMIC_PROCESSES
+#define SC_INCLUDE_DYNAMIC_PROCESSES
+#endif
+
+#include
+#include
+#include