diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9924173..876fee7 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -32,6 +32,7 @@ ADD_EXECUTABLE(${PROJECT_NAME}
src/utils/memory_manager.cpp
src/utils/utils.cpp
src/utils/noc_logger.cpp
+ src/utils/report.cpp
src/ratatoskrUtils/utils/Report.cpp
src/ratatoskrUtils/utils/GlobalReport.cpp
src/ratatoskrUtils/utils/Structures.cpp
@@ -46,13 +47,7 @@ ADD_EXECUTABLE(${PROJECT_NAME}
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/link/Link.cpp
src/ratatoskrUtils/utils/TrafficTracer.cpp
)
diff --git a/README.md b/README.md
index dbf0838..7b423ff 100755
--- a/README.md
+++ b/README.md
@@ -47,4 +47,7 @@ This project is licensed under the MIT License - see the LICENSE.md file for det
## Acknowledgments
-* [Ratatoskr NoC simulator](https://github.com/jmjos/ratatoskr)
\ No newline at end of file
+* [Ratatoskr NoC simulator](https://github.com/jmjos/ratatoskr)
+
+### TODO
+- Check why there is no throttled messages for router
\ No newline at end of file
diff --git a/config/ai_test/data.xml b/config/ai_test/data.xml
index 49545fa..c9b79da 100755
--- a/config/ai_test/data.xml
+++ b/config/ai_test/data.xml
@@ -266,7 +266,7 @@
-
+
@@ -286,7 +286,7 @@
-
+
@@ -297,7 +297,7 @@
-
+
@@ -312,7 +312,7 @@
-
+
@@ -323,7 +323,7 @@
-
+
@@ -338,7 +338,7 @@
-
+
@@ -349,7 +349,7 @@
-
+
@@ -364,7 +364,7 @@
-
+
@@ -375,7 +375,7 @@
-
+
@@ -390,7 +390,7 @@
-
+
@@ -401,7 +401,7 @@
-
+
@@ -416,14 +416,14 @@
-
+
-
+
@@ -434,7 +434,7 @@
-
+
@@ -449,7 +449,7 @@
-
+
@@ -460,7 +460,7 @@
-
+
@@ -475,7 +475,7 @@
-
+
@@ -486,7 +486,7 @@
-
+
@@ -501,7 +501,7 @@
-
+
@@ -512,7 +512,7 @@
-
+
@@ -527,14 +527,14 @@
-
+
-
+
@@ -545,12 +545,12 @@
-
+
-
+
@@ -565,7 +565,7 @@
-
+
@@ -576,7 +576,7 @@
-
+
@@ -591,7 +591,7 @@
-
+
@@ -602,7 +602,7 @@
-
+
@@ -617,7 +617,7 @@
-
+
@@ -628,7 +628,7 @@
-
+
@@ -643,7 +643,7 @@
-
+
@@ -654,12 +654,12 @@
-
+
-
+
@@ -674,7 +674,7 @@
-
+
@@ -685,7 +685,7 @@
-
+
@@ -700,7 +700,7 @@
-
+
@@ -711,7 +711,7 @@
-
+
@@ -726,14 +726,14 @@
-
+
-
+
@@ -744,7 +744,7 @@
-
+
@@ -759,7 +759,7 @@
-
+
@@ -770,7 +770,7 @@
-
+
@@ -785,7 +785,7 @@
-
+
@@ -796,7 +796,7 @@
-
+
@@ -811,7 +811,7 @@
-
+
@@ -822,7 +822,7 @@
-
+
@@ -837,14 +837,14 @@
-
+
-
+
@@ -855,12 +855,12 @@
-
+
-
+
@@ -875,7 +875,7 @@
-
+
@@ -886,7 +886,7 @@
-
+
@@ -901,7 +901,7 @@
-
+
@@ -912,7 +912,7 @@
-
+
@@ -927,7 +927,7 @@
-
+
@@ -938,7 +938,7 @@
-
+
@@ -953,7 +953,7 @@
-
+
@@ -964,12 +964,12 @@
-
+
-
+
@@ -984,7 +984,7 @@
-
+
@@ -995,7 +995,7 @@
-
+
@@ -1010,7 +1010,7 @@
-
+
@@ -1021,7 +1021,7 @@
-
+
@@ -1036,14 +1036,14 @@
-
+
-
+
@@ -1054,7 +1054,7 @@
-
+
@@ -1069,7 +1069,7 @@
-
+
@@ -1080,7 +1080,7 @@
-
+
@@ -1095,7 +1095,7 @@
-
+
@@ -1106,7 +1106,7 @@
-
+
@@ -1121,7 +1121,7 @@
-
+
@@ -1132,7 +1132,7 @@
-
+
@@ -1147,14 +1147,14 @@
-
+
-
+
@@ -1165,12 +1165,12 @@
-
+
-
+
@@ -1185,7 +1185,7 @@
-
+
@@ -1196,7 +1196,7 @@
-
+
@@ -1211,7 +1211,7 @@
-
+
@@ -1222,7 +1222,7 @@
-
+
@@ -1237,7 +1237,7 @@
-
+
@@ -1248,7 +1248,7 @@
-
+
@@ -1263,14 +1263,14 @@
-
+
-
+
@@ -1281,12 +1281,12 @@
-
+
-
+
@@ -1301,7 +1301,7 @@
-
+
@@ -1312,7 +1312,7 @@
-
+
@@ -1327,7 +1327,7 @@
-
+
@@ -1338,7 +1338,7 @@
-
+
@@ -1353,7 +1353,7 @@
-
+
@@ -1364,7 +1364,7 @@
-
+
@@ -1379,7 +1379,7 @@
-
+
@@ -1390,12 +1390,12 @@
-
+
-
+
@@ -1410,7 +1410,7 @@
-
+
@@ -1421,7 +1421,7 @@
-
+
@@ -1436,7 +1436,7 @@
-
+
@@ -1447,7 +1447,7 @@
-
+
@@ -1462,14 +1462,14 @@
-
+
-
+
@@ -1480,7 +1480,7 @@
-
+
@@ -1495,7 +1495,7 @@
-
+
@@ -1506,7 +1506,7 @@
-
+
@@ -1521,7 +1521,7 @@
-
+
@@ -1532,7 +1532,7 @@
-
+
@@ -1547,7 +1547,7 @@
-
+
@@ -1558,7 +1558,7 @@
-
+
@@ -1573,14 +1573,14 @@
-
+
-
+
@@ -1591,12 +1591,12 @@
-
+
-
+
@@ -1611,7 +1611,7 @@
-
+
@@ -1622,7 +1622,7 @@
-
+
@@ -1637,7 +1637,7 @@
-
+
@@ -1648,7 +1648,7 @@
-
+
@@ -1663,7 +1663,7 @@
-
+
@@ -1674,7 +1674,7 @@
-
+
@@ -1689,14 +1689,14 @@
-
+
-
+
@@ -1707,12 +1707,12 @@
-
+
-
+
@@ -1727,7 +1727,7 @@
-
+
@@ -1738,7 +1738,7 @@
-
+
@@ -1753,7 +1753,7 @@
-
+
@@ -1764,7 +1764,7 @@
-
+
@@ -1779,7 +1779,7 @@
-
+
@@ -1790,7 +1790,7 @@
-
+
@@ -1805,7 +1805,7 @@
-
+
@@ -1816,12 +1816,12 @@
-
+
-
+
@@ -1836,7 +1836,7 @@
-
+
@@ -1847,7 +1847,7 @@
-
+
@@ -1862,7 +1862,7 @@
-
+
@@ -1873,7 +1873,7 @@
-
+
@@ -1888,14 +1888,14 @@
-
+
-
+
@@ -1906,7 +1906,7 @@
-
+
@@ -1921,7 +1921,7 @@
-
+
@@ -1932,7 +1932,7 @@
-
+
@@ -1947,7 +1947,7 @@
-
+
@@ -1958,7 +1958,7 @@
-
+
@@ -1973,7 +1973,7 @@
-
+
@@ -1984,7 +1984,7 @@
-
+
@@ -1999,14 +1999,14 @@
-
+
-
+
@@ -2017,12 +2017,12 @@
-
+
-
+
@@ -2037,7 +2037,7 @@
-
+
@@ -2048,7 +2048,7 @@
-
+
@@ -2063,7 +2063,7 @@
-
+
@@ -2074,7 +2074,7 @@
-
+
@@ -2089,7 +2089,7 @@
-
+
@@ -2100,7 +2100,7 @@
-
+
@@ -2115,14 +2115,14 @@
-
+
-
+
@@ -2133,12 +2133,12 @@
-
+
-
+
@@ -2153,7 +2153,7 @@
-
+
@@ -2164,7 +2164,7 @@
-
+
@@ -2179,7 +2179,7 @@
-
+
@@ -2190,7 +2190,7 @@
-
+
@@ -2205,7 +2205,7 @@
-
+
@@ -2216,7 +2216,7 @@
-
+
@@ -2231,14 +2231,14 @@
-
+
-
+
@@ -2249,12 +2249,12 @@
-
+
-
+
@@ -2269,7 +2269,7 @@
-
+
@@ -2280,7 +2280,7 @@
-
+
@@ -2295,7 +2295,7 @@
-
+
@@ -2306,7 +2306,7 @@
-
+
@@ -2321,7 +2321,7 @@
-
+
@@ -2332,7 +2332,7 @@
-
+
@@ -2347,7 +2347,7 @@
-
+
@@ -2358,12 +2358,12 @@
-
+
-
+
@@ -2378,7 +2378,7 @@
-
+
@@ -2389,7 +2389,7 @@
-
+
@@ -2404,7 +2404,7 @@
-
+
@@ -2415,7 +2415,7 @@
-
+
@@ -2430,7 +2430,7 @@
-
+
@@ -2441,7 +2441,7 @@
-
+
@@ -2456,7 +2456,7 @@
-
+
@@ -2467,7 +2467,7 @@
-
+
@@ -2482,7 +2482,7 @@
-
+
@@ -2493,7 +2493,7 @@
-
+
@@ -2508,7 +2508,7 @@
-
+
@@ -2519,7 +2519,7 @@
-
+
@@ -2534,7 +2534,7 @@
-
+
@@ -2545,7 +2545,7 @@
-
+
@@ -2560,7 +2560,7 @@
-
+
@@ -2571,7 +2571,7 @@
-
+
@@ -2589,7 +2589,7 @@
-
+
diff --git a/src/main.cpp b/src/main.cpp
index 667cb93..18df502 100755
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -27,6 +27,7 @@
#include "utils/GlobalResourcesCS.h"
#include "networkManager/NetworkManager.h"
+#include "utils/report.h"
namespace po = boost::program_options;
@@ -55,5 +56,8 @@ int sc_main(int arg_num, char *arg_vec[])
sc_start(globalResources.simulation_time, SC_NS);
cout << endl
<< "Simulation completed! Time: "<< sc_time_stamp() << endl;
+
+ TlmReport& report = TlmReport::getInstance();
+ report.write_report();
return 0;
}
diff --git a/src/networkInterface/NetworkInterfaceTlm.cpp b/src/networkInterface/NetworkInterfaceTlm.cpp
index 622e7a2..a71b41c 100755
--- a/src/networkInterface/NetworkInterfaceTlm.cpp
+++ b/src/networkInterface/NetworkInterfaceTlm.cpp
@@ -54,12 +54,12 @@ NetworkInterfaceTlm::NetworkInterfaceTlm(sc_module_name nm, Node& node,
sensitive << packetPortContainer->portValidIn.pos();
for(uint8_t lay=0; layregister_nb_transport_bw(this,
&NetworkInterfaceTlm::nb_transport_bw_cb, lay);
- target[lay] = new ni_targ_socket((string(nm)+"_"+
+ target[lay] = new ni_targ_socket((ni_name+"_"+
to_string(lay)+"targ").c_str());
target[lay]->register_nb_transport_fw(this,
&NetworkInterfaceTlm::nb_transport_fw_cb, lay);
@@ -263,6 +263,7 @@ void NetworkInterfaceTlm::thread() {
}
else {
if(log_wait){
+ report.update_throttled_count(ni_name);
if(credit_counter == 0){
log_info("No more credits. Waiting for Router!");
}
@@ -465,6 +466,7 @@ void NetworkInterfaceTlm::target_peq_cb(tlm_gp& trans, const tlm::tlm_phase& pha
break;
default:
+ report.update_packet_count(ni_name);
if(phase == INTERNAL_PROC_PHASE){
receive_and_process_flit(trans);
}
@@ -522,27 +524,28 @@ void NetworkInterfaceTlm::send_response(tlm_gp& trans){
void NetworkInterfaceTlm::update_credits(tlm_gp&trans, int added_creds){
string type_name = get_type_name(get_type_from_extension(trans));
int p_id = get_packet_id_from_extension(trans);
-
- if(type_name == TYPE_PACKET || (type_name == TYPE_ROUT_CONFIG && p_id != -1)){
+ //if(type_name == TYPE_PACKET || (type_name == TYPE_ROUT_CONFIG && p_id != -1)){
+ if (!((type_name == TYPE_ROUT_CONFIG && p_id == -1) ||
+ type_name == TYPE_STREAM)){
credit_counter += added_creds;
log_info("Credit counter updated: "+to_string(credit_counter));
}
}
void NetworkInterfaceTlm::log_info(string msg){
- string log_msg = ni_name + ": (Node" +
+ string log_msg = string(name()) + ": (Node" +
to_string(node.id)+"): "+msg;
SC_REPORT_INFO(NI_LOG, (log_msg).c_str());
}
void NetworkInterfaceTlm::log_error(string msg){
- string log_msg = ni_name + ": (Node" +
+ string log_msg = string(name()) + ": (Node" +
to_string(node.id)+"): "+msg;
SC_REPORT_ERROR(NI_LOG, (log_msg).c_str());
}
void NetworkInterfaceTlm::log_fatal(string msg){
- string log_msg = ni_name + ": (Node" +
+ string log_msg = string(name()) + ": (Node" +
to_string(node.id)+"): "+msg;
SC_REPORT_FATAL(NI_LOG, (log_msg).c_str());
}
diff --git a/src/networkInterface/NetworkInterfaceTlm.h b/src/networkInterface/NetworkInterfaceTlm.h
index acd156b..d5f81b3 100755
--- a/src/networkInterface/NetworkInterfaceTlm.h
+++ b/src/networkInterface/NetworkInterfaceTlm.h
@@ -54,7 +54,6 @@ public:
std::queue packet_send_queue;
std::queue packet_recv_queue;
- string ni_name;
// To PE
sc_in clk;
PacketPortContainer* packetPortContainer;
@@ -66,12 +65,14 @@ public:
tlm_gp* curr_req;
tlm_gp* nxt_resp_pend;
+ string ni_name;
bool resp_in_progress;
int credit_counter;
MemoryManager m_mm;
uint8_t max_pos[3];
bool valid_socket[NUM_ACC_LAYERS] = {false};
+ TlmReport& report = TlmReport::getInstance();
sc_event_or_list ev_msg_arrv;
diff --git a/src/router/router.cpp b/src/router/router.cpp
index 0b57c79..7a554fa 100755
--- a/src/router/router.cpp
+++ b/src/router/router.cpp
@@ -46,12 +46,12 @@ void TlmRouter::initialize(){
to_string(link)+"_init").c_str());
(*init_socket[link]).register_nb_transport_bw(this,
&TlmRouter::nb_transport_bw_cb, link);
-
+
target_socket[link] = new rout_targ_socket((router_name+"_"+
to_string(link)+"_targ").c_str());
(*target_socket[link]).register_nb_transport_fw(this,
&TlmRouter::nb_transport_fw_cb, link);
-
+
valid_links[link] = false;
resp_in_progress[link] = false;
nxt_resp_pend[link] = 0;
@@ -125,6 +125,7 @@ bool TlmRouter::send_data(int link, int dest_link, tlm_gp& trans){
}
else {
log_warn(link,trans, "Waiting for downstream Router!");
+ report.update_throttled_count(router_name);
return false;
}
}
@@ -269,6 +270,7 @@ void TlmRouter::target_peq_cb(tlm_gp& trans, const tlm_phase& phase){
log_error(link,trans,"Illegal transaction phase received by target");
break;
default:
+ report.update_packet_count(router_name);
if(phase == INTERNAL_PROC_PHASE){
switching(link, trans);
}
diff --git a/src/router/router.h b/src/router/router.h
index 7e73e2b..19b31d3 100755
--- a/src/router/router.h
+++ b/src/router/router.h
@@ -37,6 +37,7 @@
#include "utils/configuration.h"
#include "utils/utils.h"
#include "utils/noc_logger.h"
+#include "utils/report.h"
using namespace sc_core;
using namespace sc_dt;
@@ -72,6 +73,8 @@ class TlmRouter : public sc_module{
uint8_t max_pos[3];
bool valid_links[NUM_LINKS];
+ TlmReport& report = TlmReport::getInstance();
+
SC_HAS_PROCESS(TlmRouter);
TlmRouter(sc_module_name name, uint8_t rout_pos[3],
uint8_t max_pos[3]);
diff --git a/src/router/router_cs.cpp b/src/router/router_cs.cpp
index d63f360..b5a3f8e 100755
--- a/src/router/router_cs.cpp
+++ b/src/router/router_cs.cpp
@@ -122,6 +122,7 @@ void TlmRouterCS::target_peq_cb(tlm_gp& trans, const tlm_phase& phase){
send_end_req(link, trans);
break;
default:
+ report.update_packet_count(name());
if(phase == INTERNAL_PROC_PHASE){
switching(link, trans);
}
diff --git a/src/utils/report.cpp b/src/utils/report.cpp
index e69de29..2719455 100644
--- a/src/utils/report.cpp
+++ b/src/utils/report.cpp
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (C) 2024 Juan Neyra
+ *
+ * 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 "report.h"
+#include
+#include
+#include
+
+TlmReport::TlmReport(){
+}
+
+TlmReport &TlmReport::getInstance()
+{
+ static TlmReport instance;
+ return instance;
+}
+
+void TlmReport::update_packet_count(string np_name){
+ // check if np_name exists in packet_count
+ if(packet_count.count(np_name)){
+ packet_count[np_name] += 1;
+ }
+ else{
+ packet_count.insert(std::make_pair(np_name, 1));
+ }
+}
+
+
+void TlmReport::update_throttled_count(string np_name){
+ if(throttled_count.count(np_name)){
+ throttled_count[np_name] += 1;
+ }
+ else{
+ throttled_count.insert(std::make_pair(np_name, 1));
+ }
+}
+
+
+void TlmReport::write_report(){
+ cout << endl << "Write packet count csv file" << endl;
+ stringstream ss_msg_packet;
+ ss_msg_packet << "router,packet_count" << endl;
+ for(auto& pc_pair: packet_count){
+ ss_msg_packet << string(pc_pair.first) << "," << to_string(pc_pair.second) << endl;
+ }
+
+ ofstream log_file;
+ log_file.open(PACKET_COUNT_FILE);
+ log_file << ss_msg_packet.str();
+ log_file.close();
+
+
+ cout << "Write throttled count csv file" << endl << endl;
+ stringstream ss_msg_throttled;
+ ss_msg_throttled << "router,throttled_count" << endl;
+ for(auto& tc_pair: throttled_count){
+ ss_msg_throttled << tc_pair.first << "," << tc_pair.second << endl;
+ }
+
+ log_file.open(THROTTLED_COUNT_FILE);
+ log_file << ss_msg_throttled.str();
+ log_file.close();
+}
diff --git a/src/utils/report.h b/src/utils/report.h
index 561c03b..8106de6 100644
--- a/src/utils/report.h
+++ b/src/utils/report.h
@@ -22,17 +22,42 @@
#pragma once
#include