diff --git a/config/conc_stream_pack_test/config.xml b/config/conc_stream_pack_test/config.xml
new file mode 100755
index 0000000..428b4e0
--- /dev/null
+++ b/config/conc_stream_pack_test/config.xml
@@ -0,0 +1,55 @@
+
+
+
+
+ report
+
+
+ config/conc_stream_pack_test/net.xml
+
+
+
+
+
+ task
+ config/conc_stream_pack_test/data.xml
+ config/conc_stream_pack_test/map.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5 6 9 10
+
+
diff --git a/config/conc_stream_pack_test/data.xml b/config/conc_stream_pack_test/data.xml
new file mode 100644
index 0000000..d1af841
--- /dev/null
+++ b/config/conc_stream_pack_test/data.xml
@@ -0,0 +1,385 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/conc_stream_pack_test/map.xml b/config/conc_stream_pack_test/map.xml
new file mode 100644
index 0000000..dbec488
--- /dev/null
+++ b/config/conc_stream_pack_test/map.xml
@@ -0,0 +1,59 @@
+
+
diff --git a/config/conc_stream_pack_test/net.xml b/config/conc_stream_pack_test/net.xml
new file mode 100644
index 0000000..7c7104a
--- /dev/null
+++ b/config/conc_stream_pack_test/net.xml
@@ -0,0 +1,1612 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/simple_2_layer_test/data.xml b/config/simple_2_layer_test/data.xml
index 0fc5fbc..0baaf57 100644
--- a/config/simple_2_layer_test/data.xml
+++ b/config/simple_2_layer_test/data.xml
@@ -34,7 +34,7 @@
-
+
@@ -42,7 +42,7 @@
-
+
@@ -60,6 +60,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -82,7 +96,7 @@
-
+
@@ -96,7 +110,7 @@
-
+
@@ -108,14 +122,7 @@
-
-
-
-
-
-
-
-
+
@@ -129,13 +136,59 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
diff --git a/config/simple_2_layer_test/map.xml b/config/simple_2_layer_test/map.xml
index 7c2fd0a..796faae 100644
--- a/config/simple_2_layer_test/map.xml
+++ b/config/simple_2_layer_test/map.xml
@@ -6,18 +6,22 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/scripts/generate_config_task.py b/scripts/generate_config_task.py
new file mode 100644
index 0000000..96a9a4a
--- /dev/null
+++ b/scripts/generate_config_task.py
@@ -0,0 +1,135 @@
+MAX_ROUT_Y = 4
+
+sourc_x = 0
+sourc_y = 1
+
+dest_x = 3
+dest_y = 3
+
+GEN_TASK_START = """
+
+
+
+
+
+
+
+ """
+GEN_TASK_END = """
+
+
+ """
+
+REQ_TASK_START = """
+
+
+ """
+
+REQ_TASK_END = " "
+
+LAST_TASK = """
+
+
+
+
+
+
+
+
+
+
+ """
+
+REQ_TASK_REQ = """
+
+
+
+
+
+ """
+
+REQ_TASK_GEN = """
+
+
+
+
+
+
+
+
+
+
+
+
+ """
+
+DEST_HEADER = " "
+DEST_H_END = " "
+
+DELAY_TAG = " "
+INTERVAL_TAG = " "
+COUNT_TAG = " "
+TYPE_TAG = " "
+TASK_TAG = " "
+CONFIG_TAG = " "
+
+
+BIND = """
+
+
+ """
+
+
+id = 0
+print("**********************FOR data.xml**********************")
+print(GEN_TASK_START)
+for x in range(sourc_x, dest_x):
+ print(DEST_HEADER.format(id))
+ print(DELAY_TAG)
+ print(INTERVAL_TAG)
+ print(COUNT_TAG)
+ print(TYPE_TAG)
+ print(TASK_TAG.format(id+1))
+ link = 0 if id==0 else 2
+ print(CONFIG_TAG.format(link, 1))
+ print(DEST_H_END)
+ id+=1
+
+for y in range(sourc_y, dest_y+1):
+ print(DEST_HEADER.format(id))
+ print(DELAY_TAG)
+ print(INTERVAL_TAG)
+ print(COUNT_TAG)
+ print(TYPE_TAG)
+ print(TASK_TAG.format(id+1))
+ link = 2 if y == sourc_y else 4
+ dest = 0 if y == dest_y else 3
+ print(CONFIG_TAG.format(link, dest))
+ print(DEST_H_END)
+ id+=1
+print(GEN_TASK_END)
+
+
+for i in range(1, id):
+ print()
+ print(REQ_TASK_START.format(i))
+ print(REQ_TASK_REQ)
+ print(REQ_TASK_GEN.format(id))
+ print(REQ_TASK_END)
+
+print()
+print(LAST_TASK.format(id, id-1, id-1))
+
+print()
+print("**********************FOR map.xml**********************")
+x = sourc_x
+y = sourc_y
+for i in range (0, id+1):
+ print(BIND.format(i, x*MAX_ROUT_Y+y))
+ if(y == dest_y):
+ x = sourc_x
+ y = sourc_y
+ elif(x == dest_x):
+ y += 1
+ else:
+ x +=1
\ No newline at end of file
diff --git a/src/networkInterface/NetworkInterfaceTlm.cpp b/src/networkInterface/NetworkInterfaceTlm.cpp
index 8958660..5eaebb7 100755
--- a/src/networkInterface/NetworkInterfaceTlm.cpp
+++ b/src/networkInterface/NetworkInterfaceTlm.cpp
@@ -34,7 +34,7 @@ NetworkInterfaceTlm::NetworkInterfaceTlm(sc_module_name nm, Node& node,
init_peq(this, &NetworkInterfaceTlm::init_peq_cb),
target_peq(this, &NetworkInterfaceTlm::target_peq_cb),
curr_req(0), resp_in_progress(false),
- nxt_resp_pend(0), end_req_pend(0) {
+ nxt_resp_pend(0) {
sc_report_handler::set_actions(NI_LOG, SC_INFO, SC_LOG|SC_DISPLAY);
try {
this->id = node.id%(globalResources.nodes.size()/2);
@@ -57,12 +57,12 @@ NetworkInterfaceTlm::NetworkInterfaceTlm(sc_module_name nm, Node& node,
initiator[lay] = new ni_init_socket((string(nm)+"_"+
to_string(lay)+"_init").c_str());
initiator[lay]->register_nb_transport_bw(this,
- &NetworkInterfaceTlm::nb_transport_bw_cb, 0);
+ &NetworkInterfaceTlm::nb_transport_bw_cb, lay);
target[lay] = new ni_targ_socket((string(nm)+"_"+
to_string(lay)+"targ").c_str());
target[lay]->register_nb_transport_fw(this,
- &NetworkInterfaceTlm::nb_transport_fw_cb, 0);
+ &NetworkInterfaceTlm::nb_transport_fw_cb, lay);
}
}
@@ -156,6 +156,7 @@ tlm_gp* NetworkInterfaceTlm::build_transaction(PacketCS* p, Flit* f){
trans->set_byte_enable_ptr(0);
trans->set_dmi_allowed(false);
trans->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE);
+ curr_req = trans;
return trans;
}
@@ -163,8 +164,6 @@ tlm_gp* NetworkInterfaceTlm::build_transaction(PacketCS* p, Flit* f){
void NetworkInterfaceTlm::send_flit(PacketCS* p, Flit* f){
tlm_gp* trans = build_transaction(p, f);
- credit_counter--;
- log_info("Credit counter updated: "+to_string(credit_counter));
sc_time delay = sc_time(REQ_INIT_DELAY, UNITS_DELAY);
tlm::tlm_phase send_phase = tlm::BEGIN_REQ;
@@ -173,6 +172,7 @@ void NetworkInterfaceTlm::send_flit(PacketCS* p, Flit* f){
log_info("Sending flit of type "+STR_TYPES[p->dataType]+
" to layer "+to_string(lay));
(*initiator[lay])->nb_transport_fw(*trans, send_phase, delay);
+ update_credits(*trans, -1);
}
@@ -183,10 +183,16 @@ int NetworkInterfaceTlm::get_type_from_extension(tlm_gp& trans){
}
+int NetworkInterfaceTlm::get_packet_id_from_extension(tlm_gp& trans){
+ link_extension* extension;
+ trans.get_extension(extension);
+ return extension->packet_id;
+}
+
bool NetworkInterfaceTlm::check_cs_needed(tlm_gp& trans){
int type = get_type_from_extension(trans);
return type == TYPE_ROUT_CONFIG;
-};
+}
void NetworkInterfaceTlm::send_cs_rout_conf_msg(tlm_gp& trans){
tlm_gp* new_trans = m_mm.allocate();
@@ -246,15 +252,25 @@ void NetworkInterfaceTlm::send_data_to_noc(){
void NetworkInterfaceTlm::thread() {
+ bool log_wait = true;
while(true){
//log_info("send_data_process()");
if (clk.posedge()) {
if (!packet_send_queue.empty()) {
- if (credit_counter != 0){
+ if (credit_counter != 0 && curr_req == 0){
send_data_to_noc();
+ log_wait = true;
}
else {
- log_info("Waiting for Router!");
+ if(log_wait){
+ if(credit_counter == 0){
+ log_info("No more credits. Waiting for Router!");
+ }
+ else{
+ log_info("Transaction in progress. Waiting for Router!");
+ }
+ log_wait = false;
+ }
}
}
if (!packet_recv_queue.empty()) {
@@ -281,15 +297,31 @@ void NetworkInterfaceTlm::thread() {
tlm::tlm_sync_enum NetworkInterfaceTlm::nb_transport_bw_cb(int id,
tlm::tlm_generic_payload& trans,
tlm::tlm_phase& phase, sc_time& delay) {
+ int p_id = get_packet_id_from_extension(trans);
+ log_info("Backward transport callback start from layer " +
+ to_string(id) + ". Packet id: " + to_string(p_id));
+ log_info("Sanity check: Phase " + string(phase.get_name()) + ", "
+ + "Delay: " + delay.to_string());
init_peq.notify(trans, phase, delay);
return tlm::TLM_ACCEPTED;
}
void NetworkInterfaceTlm::init_peq_cb(tlm_gp& trans, const tlm::tlm_phase& phase){
+ int p_id = get_packet_id_from_extension(trans);
+ log_info("Init PEQ callback start for packet "+to_string(p_id));
+ log_info("Phase "+string(phase.get_name())+" received");
if (phase == tlm::END_REQ) {
- credit_counter++;
- log_info("Credit counter updated: "+to_string(credit_counter));
+ update_credits(trans, 1);
+ curr_req = 0;
+ if(p_id == -1){
+ // Config msg transaction ended, so packet can be scheduled for deletion
+ trans.set_response_status(tlm::TLM_OK_RESPONSE);
+ unsigned char* data_ptr = trans.get_data_ptr();
+ Flit* received_flit = reinterpret_cast(data_ptr);
+ PacketCS* p = dynamic_cast(received_flit->packet);
+ packet_recv_queue.push(p);
+ }
}
else if (phase == tlm::BEGIN_REQ || phase == tlm::END_RESP)
log_fatal("Illegal transaction phase received by initiator");
@@ -327,6 +359,11 @@ void NetworkInterfaceTlm::check_transaction(tlm_gp& trans) {
tlm::tlm_sync_enum NetworkInterfaceTlm::nb_transport_fw_cb(int id,
tlm_gp& trans, tlm::tlm_phase& phase, sc_time& delay){
+ int p_id = get_packet_id_from_extension(trans);
+ log_info("Forward transport callback start from layer " +
+ to_string(id) + ". Packet id: " + to_string(p_id));
+ log_info("Sanity check: Phase " + string(phase.get_name()) + ", "
+ + "Delay: " + delay.to_string());
unsigned int len = trans.get_data_length();
unsigned char* byt = trans.get_byte_enable_ptr();
unsigned int wid = trans.get_streaming_width();
@@ -370,23 +407,27 @@ void NetworkInterfaceTlm::receive_and_process_flit(tlm_gp& trans){
}
//globalReport.issueNoCOutputDataAmount(sc_time_stamp(),globalResources.bitWidth);
if (p->toTransmit.empty() && p->inTransmit.empty()){
- packet_recv_queue.push(p);
// send config message when all flits of packet arrive
if(check_cs_needed(trans)){
- log_info("Send router configuration message");
+ log_info("Send router configuration message. Packet id: "
+ + to_string(p->id));
send_cs_rout_conf_msg(trans);
}
+ else{
+ packet_recv_queue.push(p);
+ }
}
- credit_counter++;
- log_info("Credit counter updated: "+to_string(credit_counter));
+ //credit_counter++; no need to update credit in target (unless receiving response)
+ //log_info("Credit counter updated: "+to_string(credit_counter));
// send response if not type stream
if(p->dataType != TYPE_STREAM){
if(resp_in_progress) {
if(nxt_resp_pend){
log_fatal("Attempt to have two pending responses in target");
- nxt_resp_pend = &trans;
}
+ log_info("Previous response transaction still in progress, scheduling it for next time");
+ nxt_resp_pend = &trans;
}
else{ send_response(trans); }
}
@@ -394,6 +435,9 @@ void NetworkInterfaceTlm::receive_and_process_flit(tlm_gp& trans){
void NetworkInterfaceTlm::target_peq_cb(tlm_gp& trans, const tlm::tlm_phase& phase){
+ int p_id = get_packet_id_from_extension(trans);
+ log_info("Target PEQ callback start for packet "+to_string(p_id));
+ log_info("Phase "+string(phase.get_name())+" received");
switch (phase) {
case tlm::BEGIN_REQ:
trans.acquire();
@@ -406,8 +450,7 @@ void NetworkInterfaceTlm::target_peq_cb(tlm_gp& trans, const tlm::tlm_phase& pha
"Illegal transaction phase END_RESP received by target");
}
trans.release();
- credit_counter++;
- log_info("Credit counter updated: "+to_string(credit_counter));
+ update_credits(trans, 1);
// Target itself is now clear to issue the next BEGIN_RESP
resp_in_progress = false;
if (nxt_resp_pend){
@@ -438,6 +481,7 @@ tlm::tlm_sync_enum NetworkInterfaceTlm::send_end_req(tlm_gp& trans){
bw_phase, delay);
if (status == tlm::TLM_COMPLETED) {
trans.release();
+ curr_req = 0;
return status;
}
@@ -453,14 +497,15 @@ tlm::tlm_sync_enum NetworkInterfaceTlm::send_end_req(tlm_gp& trans){
void NetworkInterfaceTlm::send_response(tlm_gp& trans){
+ int p_id = get_packet_id_from_extension(trans);
+ log_info("Send response for packet "+to_string(p_id));
resp_in_progress = true;
sc_time delay = SC_ZERO_TIME;
tlm::tlm_phase bw_phase = tlm::BEGIN_RESP;
tlm::tlm_sync_enum status = (*target[0])->nb_transport_bw(
trans, bw_phase, delay);
- credit_counter--;
- log_info("Credit counter updated: "+to_string(credit_counter));
+ update_credits(trans, -1);
if (status == tlm::TLM_UPDATED){
target_peq.notify(trans, bw_phase, delay);
@@ -469,11 +514,20 @@ void NetworkInterfaceTlm::send_response(tlm_gp& trans){
// The initiator has terminated the transaction
trans.release();
resp_in_progress = false;
- credit_counter++;
- log_info("Credit counter updated: "+to_string(credit_counter));
+ update_credits(trans, 1);
+ curr_req = 0;
}
}
+void NetworkInterfaceTlm::update_credits(tlm_gp&trans, int added_creds){
+ int type = get_type_from_extension(trans);
+ int p_id = get_packet_id_from_extension(trans);
+
+ if(type == TYPE_PACKET || (type==TYPE_ROUT_CONFIG && p_id != -1)){
+ 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" +
diff --git a/src/networkInterface/NetworkInterfaceTlm.h b/src/networkInterface/NetworkInterfaceTlm.h
index d2b2099..acd156b 100755
--- a/src/networkInterface/NetworkInterfaceTlm.h
+++ b/src/networkInterface/NetworkInterfaceTlm.h
@@ -64,14 +64,10 @@ public:
tlm_utils::peq_with_cb_and_phase init_peq;
tlm_utils::peq_with_cb_and_phase target_peq;
tlm_gp* curr_req;
- tlm_gp* end_req_pend;
tlm_gp* nxt_resp_pend;
- tlm_gp* nxt_send_data_pend;
bool resp_in_progress;
- bool send_data_in_progress;
int credit_counter;
- Dir send_data_in_prog_dest;
MemoryManager m_mm;
uint8_t max_pos[3];
bool valid_socket[NUM_ACC_LAYERS] = {false};
@@ -135,6 +131,13 @@ public:
*/
int get_type_from_extension(tlm_gp& trans);
+ /**
+ * Get packet id from extension
+ *
+ * @param trans TLM generic payload object
+ */
+ int get_packet_id_from_extension(tlm_gp& trans);
+
/**
* If message is init streaming, a router_cs needs to be
* configured
@@ -254,6 +257,13 @@ public:
*/
void send_response(tlm_gp& trans);
+ /**
+ * Updates num of credits
+ *
+ * @param trans TLM generic payload object
+ * @param added_creds Amount of credits to add (or substract)
+ */
+ void update_credits(tlm_gp&trans, int added_creds);
/** Log info
* @param msg log message
diff --git a/src/noc/noc.cpp b/src/noc/noc.cpp
index 791e70b..45d2453 100755
--- a/src/noc/noc.cpp
+++ b/src/noc/noc.cpp
@@ -73,10 +73,16 @@ void TlmNoc::initNoc() {
string msg = " initialized in position " +
to_string(rout_pos[0]) + "," + to_string(rout_pos[1])+
"," + to_string(rout_pos[2]);
- string rout_name = n.type->model == "Router" ?
- "router_" : "router_cs_";
- rout_name += to_string(n.id);
- TlmRouter* r = new TlmRouter(rout_name.c_str(), rout_pos, max_pos);
+ TlmRouter* r;
+ string rout_name;
+ if(n.type->model=="Router"){
+ rout_name = "router_"+to_string(n.id);
+ r = new TlmRouter(rout_name.c_str(), rout_pos, max_pos);
+ }
+ else{
+ rout_name = "router_cs_"+to_string(n.id);
+ r = new TlmRouterCS(rout_name.c_str(), rout_pos, max_pos);
+ }
routers.push_back(r);
mapNodeRouter.insert(
pair(n.id, int(routers.size())-1));
diff --git a/src/processingElement/ProcessingElementCS.cpp b/src/processingElement/ProcessingElementCS.cpp
index 4502d5b..e6a00ee 100644
--- a/src/processingElement/ProcessingElementCS.cpp
+++ b/src/processingElement/ProcessingElementCS.cpp
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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 "ProcessingElementCS.h"
#include "traffic/PacketCS.h"
@@ -238,7 +259,11 @@ void ProcessingElementCS::checkNeed()
// EXPLAIN: iterate over tasks needing the data
for (const TaskCS& t : neededFor.at(type)) {
std::pair pair = std::make_pair(t, type);
- neededAmount.at(pair) -= receivedData.at(type);
+ /* EXPLAIN: commented because received data should always
+ count to one, the purpose of this line is unclear, but it caused
+ an error where the requirement in a task wouldn't be read */
+ //neededAmount.at(pair) -= receivedData.at(type);
+ neededAmount.at(pair)--;
/* This line was commented out because if a task requires several packets from several data types,
it says that the task is finished receiving the required packets while in fact, it still needs some packets.
receivedData.at(type) = 0;
diff --git a/src/processingElement/ProcessingElementCS.h b/src/processingElement/ProcessingElementCS.h
index eb3e08f..2fea5aa 100644
--- a/src/processingElement/ProcessingElementCS.h
+++ b/src/processingElement/ProcessingElementCS.h
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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
#include "ratatoskrUtils/processingElement/ProcessingElementVC.h"
@@ -6,6 +27,7 @@
class ProcessingElementCS : public ProcessingElementVC {
public:
+ // Almost same functionality as ProcessingElementVC but uses TaskCS
std::map> neededFor;
std::map, int> neededAmount;
std::map> needs;
@@ -25,13 +47,32 @@ public:
ProcessingElementCS(sc_module_name mn, Node& node, TrafficPool* tp):
ProcessingElementVC(mn, node, tp) {};
+ /**
+ * On every clock cycle, checks if task needs to begin and starts it
+ */
void thread() override;
+ /**
+ * Updates requirements and sends messages at the right time
+ *
+ * @param taskcs Circuit switching task to execute
+ */
void execute(TaskCS&);
+ /**
+ * Receives packet and processes it
+ */
void receive() override;
+ /**
+ * Sends message with a random delay
+ *
+ * @param taskcs Circuit switching task from which to send a message
+ */
void startSending(TaskCS&);
+ /**
+ * Checks if requirements are fullfilled
+ */
void checkNeed();
};
diff --git a/src/ratatoskrUtils/processingElement/ProcessingElementVC.cpp b/src/ratatoskrUtils/processingElement/ProcessingElementVC.cpp
index dcd56d7..8beb49d 100755
--- a/src/ratatoskrUtils/processingElement/ProcessingElementVC.cpp
+++ b/src/ratatoskrUtils/processingElement/ProcessingElementVC.cpp
@@ -226,7 +226,6 @@ void ProcessingElementVC::thread()
void ProcessingElementVC::execute(Task& task)
{
- cout<<"hmm"<release();
}
}
@@ -339,6 +339,7 @@ void TlmRouter::switching(int link, tlm_gp& trans){
}
// validate pending response
if(resp_in_progress[link]) {
+ //TODO: Make sure that there is always only one transaction per link
if(nxt_resp_pend[link]){
log_error(link,trans,
"Attempt to have two pending responses in target");
diff --git a/src/router/router.h b/src/router/router.h
index b26f0b4..1eceb1b 100755
--- a/src/router/router.h
+++ b/src/router/router.h
@@ -27,6 +27,7 @@
#include
#include
+
#include "tlm.h"
#include "tlm_utils/simple_initiator_socket.h"
#include "tlm_utils/simple_target_socket.h"
diff --git a/src/router/router_cs.cpp b/src/router/router_cs.cpp
index f2a847e..6662bbf 100755
--- a/src/router/router_cs.cpp
+++ b/src/router/router_cs.cpp
@@ -64,12 +64,16 @@ void TlmRouterCS::send_begin_req(int link, tlm_gp& trans, int dest_link){
*new_trans, phase, delay);
curr_req[dest_link] = new_trans;
credit_counter[dest_link]--;
+ log_info(link, trans,
+ "credits value updated: " + to_string(credit_counter[link]));
// react to result
if(status == TLM_COMPLETED) {
log_error(link, trans, "Request completed prematurely");
curr_req[dest_link] = 0;
check_transaction(link, *new_trans);
credit_counter[dest_link]++;
+ log_info(link, trans,
+ "credits value updated: " + to_string(credit_counter[dest_link]));
new_trans->release();
}
}
@@ -84,6 +88,8 @@ void TlmRouterCS::configure_router(int link, tlm_gp& trans){
int config_link = rec_packet->msg.config_link;
int destination = rec_packet->msg.dest_link;
// set auto router map
+ log_info(link, trans, "Set auto route of link "+DIR::toString(config_link)
+ + " to "+DIR::toString(destination));
set_auto_router_map(config_link, Dir(destination));
}
diff --git a/src/traffic/PacketCS.cpp b/src/traffic/PacketCS.cpp
index 0b3adf3..56a9fac 100755
--- a/src/traffic/PacketCS.cpp
+++ b/src/traffic/PacketCS.cpp
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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 "PacketCS.h"
PacketCS::PacketCS(Node& src, Node& dst, int size, double generationTime,
diff --git a/src/traffic/PacketCS.h b/src/traffic/PacketCS.h
index 3879719..e64b8e5 100755
--- a/src/traffic/PacketCS.h
+++ b/src/traffic/PacketCS.h
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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.
+ ******************************************************************************/
# pragma once
#include "ratatoskrUtils/traffic/Packet.h"
diff --git a/src/traffic/task/TaskPoolCS.cpp b/src/traffic/task/TaskPoolCS.cpp
index aeb4eb4..3019a88 100644
--- a/src/traffic/task/TaskPoolCS.cpp
+++ b/src/traffic/task/TaskPoolCS.cpp
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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 "TaskPoolCS.h"
void TaskPoolCS::start()
diff --git a/src/traffic/task/TaskPoolCS.h b/src/traffic/task/TaskPoolCS.h
index 01f2e69..fd1b9ed 100644
--- a/src/traffic/task/TaskPoolCS.h
+++ b/src/traffic/task/TaskPoolCS.h
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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.
+ ******************************************************************************/
#pragma once
#include "systemc.h"
diff --git a/src/utils/GlobalResourcesCS.cpp b/src/utils/GlobalResourcesCS.cpp
index 8219919..5c51a8d 100644
--- a/src/utils/GlobalResourcesCS.cpp
+++ b/src/utils/GlobalResourcesCS.cpp
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (C) 2018 Jan Moritz Joseph
+ * Copyright (C) 2024 Juan Neyra based on 2018 Jan Moritz Joseph original version
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/utils/GlobalResourcesCS.h b/src/utils/GlobalResourcesCS.h
index 98dcae4..545875b 100644
--- a/src/utils/GlobalResourcesCS.h
+++ b/src/utils/GlobalResourcesCS.h
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (C) 2018 Jan Moritz Joseph
+ * Copyright (C) 2024 Juan Neyra based on 2018 Jan Moritz Joseph original version
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/utils/NetworkParticipantCS.h b/src/utils/NetworkParticipantCS.h
index 68ab624..e2d4510 100755
--- a/src/utils/NetworkParticipantCS.h
+++ b/src/utils/NetworkParticipantCS.h
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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.
+ ******************************************************************************/
#pragma once
#include "systemc.h"
diff --git a/src/utils/PacketFactoryCS.cpp b/src/utils/PacketFactoryCS.cpp
index 033027c..7e3226a 100755
--- a/src/utils/PacketFactoryCS.cpp
+++ b/src/utils/PacketFactoryCS.cpp
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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 "PacketFactoryCS.h"
PacketFactoryCS& PacketFactoryCS::getInstance()
diff --git a/src/utils/PacketFactoryCS.h b/src/utils/PacketFactoryCS.h
index d13bd7a..d5dcb37 100755
--- a/src/utils/PacketFactoryCS.h
+++ b/src/utils/PacketFactoryCS.h
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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.
+ ******************************************************************************/
#pragma once
#include
diff --git a/src/utils/noc_logger.cpp b/src/utils/noc_logger.cpp
index 82a83cf..73e7e67 100755
--- a/src/utils/noc_logger.cpp
+++ b/src/utils/noc_logger.cpp
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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 "noc_logger.h"
#include
#include
diff --git a/src/utils/structures_cs.h b/src/utils/structures_cs.h
index 72afe65..3256139 100644
--- a/src/utils/structures_cs.h
+++ b/src/utils/structures_cs.h
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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.
+ ******************************************************************************/
#pragma once
#include "ratatoskrUtils/utils/Structures.h"
diff --git a/src/utils/utils.cpp b/src/utils/utils.cpp
index 73d9527..beeb585 100755
--- a/src/utils/utils.cpp
+++ b/src/utils/utils.cpp
@@ -1,3 +1,24 @@
+/*******************************************************************************
+ * 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 "utils.h"
#include "configuration.h"
#include "utils/GlobalResourcesCS.h"