feat: bug solved, working project, comments added

This commit is contained in:
juanmanuel 2024-10-31 06:49:36 -05:00
parent 59eb9a23b6
commit 4517995d04
28 changed files with 2713 additions and 57 deletions

View file

@ -0,0 +1,55 @@
<?xml version="1.0" ?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<general>
<simulationTime value="1500"/>
<outputToFile value="true">report</outputToFile>
</general>
<noc>
<nocFile>config/conc_stream_pack_test/net.xml</nocFile>
<flitsPerPacket value="1"/>
<bitWidth value="32"/>
<Vdd value="5"/>
</noc>
<application>
<benchmark>task</benchmark>
<dataFile>config/conc_stream_pack_test/data.xml</dataFile>
<mapFile>config/conc_stream_pack_test/map.xml</mapFile>
</application>
<verbose>
<processingElements>
<function_calls value="false"/>
<send_flit value="false"/>
<send_head_flit value="true"/>
<receive_flit value="false"/>
<receive_tail_flit value="true"/>
<throttle value="false"/>
<reset value="false"/>
</processingElements>
<router>
<function_calls value="false"/>
<send_flit value="false"/>
<send_head_flit value="false"/>
<receive_flit value="false"/>
<receive_tail_flit value="false"/>
<throttle value="false"/>
<reset value="false"/>
<assign_channel value="false"/>
<buffer_overflow value="true"/>
</router>
<netrace>
<inject value="true"/>
<eject value="true"/>
<router_receive value="true"/>
</netrace>
<tasks>
<function_calls value="true"/>
<xml_parse value="false"/>
<data_receive value="true"/>
<data_send value="true"/>
<source_execute value="false"/>
</tasks>
</verbose>
<report>
<bufferReportRouters>5 6 9 10</bufferReportRouters>
</report>
</configuration>

View file

@ -0,0 +1,385 @@
<?xml version="1.0" ?>
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dataTypes>
<dataType id="0">
<name value="Packet"/>
</dataType>
<dataType id="1">
<name value="Stream"/>
</dataType>
<dataType id="2">
<name value="ConfigRouter"/>
</dataType>
</dataTypes>
<tasks>
<task id="0">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="1" max="1"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="2"/>
<task value="1"/>
<config link="0" destination="1"/>
</destination>
<destination id="1">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="2"/>
<task value="2"/>
<config link="2" destination="1"/>
</destination>
<destination id="2">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="2"/>
<task value="3"/>
<config link="2" destination="1"/>
</destination>
<destination id="3">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="2"/>
<task value="4"/>
<config link="2" destination="3"/>
</destination>
<destination id="4">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="2"/>
<task value="5"/>
<config link="4" destination="3"/>
</destination>
<destination id="5">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="2"/>
<task value="6"/>
<config link="4" destination="0"/>
</destination>
</destinations>
</possibility>
</generates>
</task>
<task id="1">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="2"/>
<source value="0"/>
<count max="1" min="1"/>
</requirement>
</requires>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="0"/>
<task value="6"/>
</destination>
</destinations>
</possibility>
</generates>
</task>
<task id="2">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="2"/>
<source value="0"/>
<count max="1" min="1"/>
</requirement>
</requires>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="0"/>
<task value="6"/>
</destination>
</destinations>
</possibility>
</generates>
</task>
<task id="3">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="2"/>
<source value="0"/>
<count max="1" min="1"/>
</requirement>
</requires>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="0"/>
<task value="6"/>
</destination>
</destinations>
</possibility>
</generates>
</task>
<task id="4">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="2"/>
<source value="0"/>
<count max="1" min="1"/>
</requirement>
</requires>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="0"/>
<task value="6"/>
</destination>
</destinations>
</possibility>
</generates>
</task>
<task id="5">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="2"/>
<source value="0"/>
<count max="1" min="1"/>
</requirement>
</requires>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="0"/>
<task value="6"/>
</destination>
</destinations>
</possibility>
</generates>
</task>
<task id="6">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="0"/>
<source value="0"/>
<count max="5" min="5"/>
</requirement>
</requires>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="7"/>
</destination>
<destination id="1">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="7"/>
</destination>
<destination id="2">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="7"/>
</destination>
<destination id="3">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="7"/>
</destination>
<destination id="4">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="7"/>
</destination>
<destination id="5">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="7"/>
</destination>
</destinations>
</possibility>
</generates>
</task>
<task id="7">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="1"/>
<source value="4"/>
<count max="6" min="6"/>
</requirement>
</requires>
</task>
<task id="8">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="1" max="1"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="4" max="4"/>
<type value="0"/>
<task value="9"/>
</destination>
</destinations>
</possibility>
</generates>
</task>
<task id="9">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="0"/>
<source value="0"/>
<count max="4" min="4"/>
</requirement>
</requires>
</task>
<task id="10">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="1" max="1"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="6" max="6"/>
<type value="0"/>
<task value="11"/>
</destination>
</destinations>
</possibility>
</generates>
</task>
<task id="11">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="0"/>
<source value="0"/>
<count max="6" min="6"/>
</requirement>
</requires>
</task>
<task id="12">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="1" max="1"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="3" max="3"/>
<type value="0"/>
<task value="13"/>
</destination>
</destinations>
</possibility>
</generates>
</task>
<task id="13">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="0"/>
<source value="0"/>
<count max="3" min="3"/>
</requirement>
</requires>
</task>
</tasks>
</data>

View file

@ -0,0 +1,59 @@
<?xml version="1.0" ?>
<map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<bind>
<task value="0"/>
<node value="1"/>
</bind>
<bind>
<task value="1"/>
<node value="5"/>
</bind>
<bind>
<task value="2"/>
<node value="9"/>
</bind>
<bind>
<task value="3"/>
<node value="13"/>
</bind>
<bind>
<task value="4"/>
<node value="14"/>
</bind>
<bind>
<task value="5"/>
<node value="15"/>
</bind>
<bind>
<task value="6"/>
<node value="1"/>
</bind>
<bind>
<task value="7"/>
<node value="15"/>
</bind>
<bind>
<task value="8"/>
<node value="0"/>
</bind>
<bind>
<task value="9"/>
<node value="14"/>
</bind>
<bind>
<task value="10"/>
<node value="5"/>
</bind>
<bind>
<task value="11"/>
<node value="10"/>
</bind>
<bind>
<task value="12"/>
<node value="11"/>
</bind>
<bind>
<task value="13"/>
<node value="1"/>
</bind>
</map>

File diff suppressed because it is too large Load diff

View file

@ -34,7 +34,7 @@
<count min="1" max="1"/> <count min="1" max="1"/>
<type value="2"/> <type value="2"/>
<task value="2"/> <task value="2"/>
<config link="2" destination="3"/> <config link="4" destination="3"/>
</destination> </destination>
<destination id="2"> <destination id="2">
<delay min="0" max="100"/> <delay min="0" max="100"/>
@ -42,7 +42,7 @@
<count min="1" max="1"/> <count min="1" max="1"/>
<type value="2"/> <type value="2"/>
<task value="3"/> <task value="3"/>
<config link="2" destination="0"/> <config link="4" destination="0"/>
</destination> </destination>
</destinations> </destinations>
</possibility> </possibility>
@ -60,6 +60,20 @@
<count max="1" min="1"/> <count max="1" min="1"/>
</requirement> </requirement>
</requires> </requires>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="0"/>
<task value="4"/>
</destination>
</destinations>
</possibility>
</generates>
</task> </task>
<task id="2"> <task id="2">
@ -82,7 +96,7 @@
<interval min="100" max="100"/> <interval min="100" max="100"/>
<count min="1" max="1"/> <count min="1" max="1"/>
<type value="0"/> <type value="0"/>
<task value="3"/> <task value="4"/>
</destination> </destination>
</destinations> </destinations>
</possibility> </possibility>
@ -96,7 +110,7 @@
<requires> <requires>
<requirement id="0"> <requirement id="0">
<type value="2"/> <type value="2"/>
<source value="2"/> <source value="0"/>
<count max="1" min="1"/> <count max="1" min="1"/>
</requirement> </requirement>
</requires> </requires>
@ -108,14 +122,7 @@
<delay min="0" max="100"/> <delay min="0" max="100"/>
<interval min="100" max="100"/> <interval min="100" max="100"/>
<count min="1" max="1"/> <count min="1" max="1"/>
<type value="1"/> <type value="0"/>
<task value="4"/>
</destination>
<destination id="1">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="4"/> <task value="4"/>
</destination> </destination>
</destinations> </destinations>
@ -129,13 +136,59 @@
<repeat max="1" min="1"/> <repeat max="1" min="1"/>
<requires> <requires>
<requirement id="0"> <requirement id="0">
<type value="1"/> <type value="0"/>
<source value="0"/> <source value="0"/>
<count max="3" min="3"/>
</requirement>
</requires>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="5"/>
</destination>
<destination id="1">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="5"/>
</destination>
<destination id="2">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="5"/>
</destination>
</destinations>
</possibility>
</generates>
</task>
<task id="5">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="1"/>
<source value="4"/>
<count max="1" min="1"/> <count max="1" min="1"/>
</requirement> </requirement>
<requirement id="1"> <requirement id="1">
<type value="1"/> <type value="1"/>
<source value="0"/> <source value="4"/>
<count max="1" min="1"/>
</requirement>
<requirement id="2">
<type value="1"/>
<source value="4"/>
<count max="1" min="1"/> <count max="1" min="1"/>
</requirement> </requirement>
</requires> </requires>

View file

@ -6,18 +6,22 @@
</bind> </bind>
<bind> <bind>
<task value="1"/> <task value="1"/>
<node value="1"/>
</bind>
<bind>
<task value="2"/>
<node value="2"/>
</bind>
<bind>
<task value="3"/>
<node value="0"/> <node value="0"/>
</bind> </bind>
<bind>
<task value="2"/>
<node value="1"/>
</bind>
<bind>
<task value="3"/>
<node value="2"/>
</bind>
<bind> <bind>
<task value="4"/> <task value="4"/>
<node value="0"/>
</bind>
<bind>
<task value="5"/>
<node value="2"/> <node value="2"/>
</bind> </bind>
</map> </map>

View file

@ -0,0 +1,135 @@
MAX_ROUT_Y = 4
sourc_x = 0
sourc_y = 1
dest_x = 3
dest_y = 3
GEN_TASK_START = """ <tasks>
<task id="0">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="1" max="1"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>"""
GEN_TASK_END = """ </destinations>
</possibility>
</generates>
</task>"""
REQ_TASK_START = """ <task id="{}">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>"""
REQ_TASK_END = " </task>"
LAST_TASK = """ <task id="{}">
<start max="0" min="0"/>
<duration max="-1" min="-1"/>
<repeat max="1" min="1"/>
<requires>
<requirement id="0">
<type value="0"/>
<source value="0"/>
<count max="{}" min="{}"/>
</requirement>
</requires>
</task>"""
REQ_TASK_REQ = """ <requires>
<requirement id="0">
<type value="2"/>
<source value="0"/>
<count max="1" min="1"/>
</requirement>
</requires>"""
REQ_TASK_GEN = """ <generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="0"/>
<task value="{}"/>
</destination>
</destinations>
</possibility>
</generates>"""
DEST_HEADER = " <destination id=\"{}\">"
DEST_H_END = " </destination>"
DELAY_TAG = " <delay min=\"0\" max=\"100\"/>"
INTERVAL_TAG = " <interval min=\"100\" max=\"100\"/>"
COUNT_TAG = " <count min=\"1\" max=\"1\"/>"
TYPE_TAG = " <type value=\"2\"/>"
TASK_TAG = " <task value=\"{}\"/>"
CONFIG_TAG = " <config link=\"{}\" destination=\"{}\"/>"
BIND = """ <bind>
<task value="{}"/>
<node value="{}"/>
</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

View file

@ -34,7 +34,7 @@ NetworkInterfaceTlm::NetworkInterfaceTlm(sc_module_name nm, Node& node,
init_peq(this, &NetworkInterfaceTlm::init_peq_cb), init_peq(this, &NetworkInterfaceTlm::init_peq_cb),
target_peq(this, &NetworkInterfaceTlm::target_peq_cb), target_peq(this, &NetworkInterfaceTlm::target_peq_cb),
curr_req(0), resp_in_progress(false), 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); sc_report_handler::set_actions(NI_LOG, SC_INFO, SC_LOG|SC_DISPLAY);
try { try {
this->id = node.id%(globalResources.nodes.size()/2); 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)+"_"+ initiator[lay] = new ni_init_socket((string(nm)+"_"+
to_string(lay)+"_init").c_str()); to_string(lay)+"_init").c_str());
initiator[lay]->register_nb_transport_bw(this, 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)+"_"+ target[lay] = new ni_targ_socket((string(nm)+"_"+
to_string(lay)+"targ").c_str()); to_string(lay)+"targ").c_str());
target[lay]->register_nb_transport_fw(this, 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_byte_enable_ptr(0);
trans->set_dmi_allowed(false); trans->set_dmi_allowed(false);
trans->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE); trans->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE);
curr_req = trans;
return trans; return trans;
} }
@ -163,8 +164,6 @@ tlm_gp* NetworkInterfaceTlm::build_transaction(PacketCS* p, Flit* f){
void NetworkInterfaceTlm::send_flit(PacketCS* p, Flit* f){ void NetworkInterfaceTlm::send_flit(PacketCS* p, Flit* f){
tlm_gp* trans = build_transaction(p, 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); sc_time delay = sc_time(REQ_INIT_DELAY, UNITS_DELAY);
tlm::tlm_phase send_phase = tlm::BEGIN_REQ; 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]+ log_info("Sending flit of type "+STR_TYPES[p->dataType]+
" to layer "+to_string(lay)); " to layer "+to_string(lay));
(*initiator[lay])->nb_transport_fw(*trans, send_phase, delay); (*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<link_extension>(extension);
return extension->packet_id;
}
bool NetworkInterfaceTlm::check_cs_needed(tlm_gp& trans){ bool NetworkInterfaceTlm::check_cs_needed(tlm_gp& trans){
int type = get_type_from_extension(trans); int type = get_type_from_extension(trans);
return type == TYPE_ROUT_CONFIG; return type == TYPE_ROUT_CONFIG;
}; }
void NetworkInterfaceTlm::send_cs_rout_conf_msg(tlm_gp& trans){ void NetworkInterfaceTlm::send_cs_rout_conf_msg(tlm_gp& trans){
tlm_gp* new_trans = m_mm.allocate(); tlm_gp* new_trans = m_mm.allocate();
@ -246,15 +252,25 @@ void NetworkInterfaceTlm::send_data_to_noc(){
void NetworkInterfaceTlm::thread() { void NetworkInterfaceTlm::thread() {
bool log_wait = true;
while(true){ while(true){
//log_info("send_data_process()"); //log_info("send_data_process()");
if (clk.posedge()) { if (clk.posedge()) {
if (!packet_send_queue.empty()) { if (!packet_send_queue.empty()) {
if (credit_counter != 0){ if (credit_counter != 0 && curr_req == 0){
send_data_to_noc(); send_data_to_noc();
log_wait = true;
} }
else { 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()) { 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_sync_enum NetworkInterfaceTlm::nb_transport_bw_cb(int id,
tlm::tlm_generic_payload& trans, tlm::tlm_generic_payload& trans,
tlm::tlm_phase& phase, sc_time& delay) { 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); init_peq.notify(trans, phase, delay);
return tlm::TLM_ACCEPTED; return tlm::TLM_ACCEPTED;
} }
void NetworkInterfaceTlm::init_peq_cb(tlm_gp& trans, const tlm::tlm_phase& phase){ 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) { if (phase == tlm::END_REQ) {
credit_counter++; update_credits(trans, 1);
log_info("Credit counter updated: "+to_string(credit_counter)); 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<Flit*>(data_ptr);
PacketCS* p = dynamic_cast<PacketCS*>(received_flit->packet);
packet_recv_queue.push(p);
}
} }
else if (phase == tlm::BEGIN_REQ || phase == tlm::END_RESP) else if (phase == tlm::BEGIN_REQ || phase == tlm::END_RESP)
log_fatal("Illegal transaction phase received by initiator"); 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::tlm_sync_enum NetworkInterfaceTlm::nb_transport_fw_cb(int id,
tlm_gp& trans, tlm::tlm_phase& phase, sc_time& delay){ 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 int len = trans.get_data_length();
unsigned char* byt = trans.get_byte_enable_ptr(); unsigned char* byt = trans.get_byte_enable_ptr();
unsigned int wid = trans.get_streaming_width(); 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); //globalReport.issueNoCOutputDataAmount(sc_time_stamp(),globalResources.bitWidth);
if (p->toTransmit.empty() && p->inTransmit.empty()){ if (p->toTransmit.empty() && p->inTransmit.empty()){
packet_recv_queue.push(p);
// send config message when all flits of packet arrive // send config message when all flits of packet arrive
if(check_cs_needed(trans)){ 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); send_cs_rout_conf_msg(trans);
} }
else{
packet_recv_queue.push(p);
}
} }
credit_counter++; //credit_counter++; no need to update credit in target (unless receiving response)
log_info("Credit counter updated: "+to_string(credit_counter)); //log_info("Credit counter updated: "+to_string(credit_counter));
// send response if not type stream // send response if not type stream
if(p->dataType != TYPE_STREAM){ if(p->dataType != TYPE_STREAM){
if(resp_in_progress) { if(resp_in_progress) {
if(nxt_resp_pend){ if(nxt_resp_pend){
log_fatal("Attempt to have two pending responses in target"); 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); } 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){ 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) { switch (phase) {
case tlm::BEGIN_REQ: case tlm::BEGIN_REQ:
trans.acquire(); 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"); "Illegal transaction phase END_RESP received by target");
} }
trans.release(); trans.release();
credit_counter++; update_credits(trans, 1);
log_info("Credit counter updated: "+to_string(credit_counter));
// Target itself is now clear to issue the next BEGIN_RESP // Target itself is now clear to issue the next BEGIN_RESP
resp_in_progress = false; resp_in_progress = false;
if (nxt_resp_pend){ if (nxt_resp_pend){
@ -438,6 +481,7 @@ tlm::tlm_sync_enum NetworkInterfaceTlm::send_end_req(tlm_gp& trans){
bw_phase, delay); bw_phase, delay);
if (status == tlm::TLM_COMPLETED) { if (status == tlm::TLM_COMPLETED) {
trans.release(); trans.release();
curr_req = 0;
return status; return status;
} }
@ -453,14 +497,15 @@ tlm::tlm_sync_enum NetworkInterfaceTlm::send_end_req(tlm_gp& trans){
void NetworkInterfaceTlm::send_response(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; resp_in_progress = true;
sc_time delay = SC_ZERO_TIME; sc_time delay = SC_ZERO_TIME;
tlm::tlm_phase bw_phase = tlm::BEGIN_RESP; tlm::tlm_phase bw_phase = tlm::BEGIN_RESP;
tlm::tlm_sync_enum status = (*target[0])->nb_transport_bw( tlm::tlm_sync_enum status = (*target[0])->nb_transport_bw(
trans, bw_phase, delay); trans, bw_phase, delay);
credit_counter--; update_credits(trans, -1);
log_info("Credit counter updated: "+to_string(credit_counter));
if (status == tlm::TLM_UPDATED){ if (status == tlm::TLM_UPDATED){
target_peq.notify(trans, bw_phase, delay); target_peq.notify(trans, bw_phase, delay);
@ -469,11 +514,20 @@ void NetworkInterfaceTlm::send_response(tlm_gp& trans){
// The initiator has terminated the transaction // The initiator has terminated the transaction
trans.release(); trans.release();
resp_in_progress = false; resp_in_progress = false;
credit_counter++; update_credits(trans, 1);
log_info("Credit counter updated: "+to_string(credit_counter)); 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){ void NetworkInterfaceTlm::log_info(string msg){
string log_msg = ni_name + ": (Node" + string log_msg = ni_name + ": (Node" +

View file

@ -64,14 +64,10 @@ public:
tlm_utils::peq_with_cb_and_phase<NetworkInterfaceTlm> init_peq; tlm_utils::peq_with_cb_and_phase<NetworkInterfaceTlm> init_peq;
tlm_utils::peq_with_cb_and_phase<NetworkInterfaceTlm> target_peq; tlm_utils::peq_with_cb_and_phase<NetworkInterfaceTlm> target_peq;
tlm_gp* curr_req; tlm_gp* curr_req;
tlm_gp* end_req_pend;
tlm_gp* nxt_resp_pend; tlm_gp* nxt_resp_pend;
tlm_gp* nxt_send_data_pend;
bool resp_in_progress; bool resp_in_progress;
bool send_data_in_progress;
int credit_counter; int credit_counter;
Dir send_data_in_prog_dest;
MemoryManager m_mm; MemoryManager m_mm;
uint8_t max_pos[3]; uint8_t max_pos[3];
bool valid_socket[NUM_ACC_LAYERS] = {false}; bool valid_socket[NUM_ACC_LAYERS] = {false};
@ -135,6 +131,13 @@ public:
*/ */
int get_type_from_extension(tlm_gp& trans); 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 * If message is init streaming, a router_cs needs to be
* configured * configured
@ -254,6 +257,13 @@ public:
*/ */
void send_response(tlm_gp& trans); 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 /** Log info
* @param msg log message * @param msg log message

View file

@ -73,10 +73,16 @@ void TlmNoc::initNoc() {
string msg = " initialized in position " + string msg = " initialized in position " +
to_string(rout_pos[0]) + "," + to_string(rout_pos[1])+ to_string(rout_pos[0]) + "," + to_string(rout_pos[1])+
"," + to_string(rout_pos[2]); "," + to_string(rout_pos[2]);
string rout_name = n.type->model == "Router" ? TlmRouter* r;
"router_" : "router_cs_"; string rout_name;
rout_name += to_string(n.id); if(n.type->model=="Router"){
TlmRouter* r = new TlmRouter(rout_name.c_str(), rout_pos, max_pos); 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); routers.push_back(r);
mapNodeRouter.insert( mapNodeRouter.insert(
pair<int,int>(n.id, int(routers.size())-1)); pair<int,int>(n.id, int(routers.size())-1));

View file

@ -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 "ProcessingElementCS.h"
#include "traffic/PacketCS.h" #include "traffic/PacketCS.h"
@ -238,7 +259,11 @@ void ProcessingElementCS::checkNeed()
// EXPLAIN: iterate over tasks needing the data // EXPLAIN: iterate over tasks needing the data
for (const TaskCS& t : neededFor.at(type)) { for (const TaskCS& t : neededFor.at(type)) {
std::pair<TaskCS, dataTypeID_t> pair = std::make_pair(t, type); std::pair<TaskCS, dataTypeID_t> 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, /* 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. it says that the task is finished receiving the required packets while in fact, it still needs some packets.
receivedData.at(type) = 0; receivedData.at(type) = 0;

View file

@ -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 #pragma once
#include "ratatoskrUtils/processingElement/ProcessingElementVC.h" #include "ratatoskrUtils/processingElement/ProcessingElementVC.h"
@ -6,6 +27,7 @@
class ProcessingElementCS : public ProcessingElementVC { class ProcessingElementCS : public ProcessingElementVC {
public: public:
// Almost same functionality as ProcessingElementVC but uses TaskCS
std::map<dataTypeID_t, std::set<TaskCS>> neededFor; std::map<dataTypeID_t, std::set<TaskCS>> neededFor;
std::map<std::pair<TaskCS, dataTypeID_t>, int> neededAmount; std::map<std::pair<TaskCS, dataTypeID_t>, int> neededAmount;
std::map<TaskCS, std::set<dataTypeID_t>> needs; std::map<TaskCS, std::set<dataTypeID_t>> needs;
@ -25,13 +47,32 @@ public:
ProcessingElementCS(sc_module_name mn, Node& node, TrafficPool* tp): ProcessingElementCS(sc_module_name mn, Node& node, TrafficPool* tp):
ProcessingElementVC(mn, node, tp) {}; ProcessingElementVC(mn, node, tp) {};
/**
* On every clock cycle, checks if task needs to begin and starts it
*/
void thread() override; void thread() override;
/**
* Updates requirements and sends messages at the right time
*
* @param taskcs Circuit switching task to execute
*/
void execute(TaskCS&); void execute(TaskCS&);
/**
* Receives packet and processes it
*/
void receive() override; void receive() override;
/**
* Sends message with a random delay
*
* @param taskcs Circuit switching task from which to send a message
*/
void startSending(TaskCS&); void startSending(TaskCS&);
/**
* Checks if requirements are fullfilled
*/
void checkNeed(); void checkNeed();
}; };

View file

@ -226,7 +226,6 @@ void ProcessingElementVC::thread()
void ProcessingElementVC::execute(Task& task) void ProcessingElementVC::execute(Task& task)
{ {
cout<<"hmm"<<endl;
// EXPLAIN: if there are no repetitions of the task left, create a new number of repetitions (probably used only in the first call for init) // EXPLAIN: if there are no repetitions of the task left, create a new number of repetitions (probably used only in the first call for init)
if (!taskRepeatLeft.count(task)) { if (!taskRepeatLeft.count(task)) {
taskRepeatLeft[task] = globalResources.getRandomIntBetween(task.minRepeat, task.maxRepeat); taskRepeatLeft[task] = globalResources.getRandomIntBetween(task.minRepeat, task.maxRepeat);

View file

@ -99,7 +99,7 @@ void TlmRouter::send_begin_req(int link, tlm_gp& trans, int dest_link){
curr_req[dest_link] = new_trans; curr_req[dest_link] = new_trans;
credit_counter[dest_link]--; credit_counter[dest_link]--;
log_info(link, trans, log_info(link, trans,
"credits value updated: " + to_string(credit_counter[link])); "credits value updated: " + to_string(credit_counter[dest_link]));
// react to result // react to result
if(status == TLM_UPDATED) { if(status == TLM_UPDATED) {
init_peq.notify(*new_trans, phase, delay); init_peq.notify(*new_trans, phase, delay);
@ -110,7 +110,7 @@ void TlmRouter::send_begin_req(int link, tlm_gp& trans, int dest_link){
check_transaction(link, *new_trans); check_transaction(link, *new_trans);
credit_counter[dest_link]++; credit_counter[dest_link]++;
log_info(link, trans, log_info(link, trans,
"credits value updated: " + to_string(credit_counter[link])); "credits value updated: " + to_string(credit_counter[dest_link]));
new_trans->release(); new_trans->release();
} }
} }
@ -339,6 +339,7 @@ void TlmRouter::switching(int link, tlm_gp& trans){
} }
// validate pending response // validate pending response
if(resp_in_progress[link]) { if(resp_in_progress[link]) {
//TODO: Make sure that there is always only one transaction per link
if(nxt_resp_pend[link]){ if(nxt_resp_pend[link]){
log_error(link,trans, log_error(link,trans,
"Attempt to have two pending responses in target"); "Attempt to have two pending responses in target");

View file

@ -27,6 +27,7 @@
#include <systemc> #include <systemc>
#include <string> #include <string>
#include "tlm.h" #include "tlm.h"
#include "tlm_utils/simple_initiator_socket.h" #include "tlm_utils/simple_initiator_socket.h"
#include "tlm_utils/simple_target_socket.h" #include "tlm_utils/simple_target_socket.h"

View file

@ -64,12 +64,16 @@ void TlmRouterCS::send_begin_req(int link, tlm_gp& trans, int dest_link){
*new_trans, phase, delay); *new_trans, phase, delay);
curr_req[dest_link] = new_trans; curr_req[dest_link] = new_trans;
credit_counter[dest_link]--; credit_counter[dest_link]--;
log_info(link, trans,
"credits value updated: " + to_string(credit_counter[link]));
// react to result // react to result
if(status == TLM_COMPLETED) { if(status == TLM_COMPLETED) {
log_error(link, trans, "Request completed prematurely"); log_error(link, trans, "Request completed prematurely");
curr_req[dest_link] = 0; curr_req[dest_link] = 0;
check_transaction(link, *new_trans); check_transaction(link, *new_trans);
credit_counter[dest_link]++; credit_counter[dest_link]++;
log_info(link, trans,
"credits value updated: " + to_string(credit_counter[dest_link]));
new_trans->release(); 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 config_link = rec_packet->msg.config_link;
int destination = rec_packet->msg.dest_link; int destination = rec_packet->msg.dest_link;
// set auto router map // 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)); set_auto_router_map(config_link, Dir(destination));
} }

View file

@ -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" #include "PacketCS.h"
PacketCS::PacketCS(Node& src, Node& dst, int size, double generationTime, PacketCS::PacketCS(Node& src, Node& dst, int size, double generationTime,

View file

@ -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 # pragma once
#include "ratatoskrUtils/traffic/Packet.h" #include "ratatoskrUtils/traffic/Packet.h"

View file

@ -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" #include "TaskPoolCS.h"
void TaskPoolCS::start() void TaskPoolCS::start()

View file

@ -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 #pragma once
#include "systemc.h" #include "systemc.h"

View file

@ -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 * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal

View file

@ -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 * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal

View file

@ -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 #pragma once
#include "systemc.h" #include "systemc.h"

View file

@ -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" #include "PacketFactoryCS.h"
PacketFactoryCS& PacketFactoryCS::getInstance() PacketFactoryCS& PacketFactoryCS::getInstance()

View file

@ -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 #pragma once
#include <vector> #include <vector>

View file

@ -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 "noc_logger.h"
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>

View file

@ -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 #pragma once
#include "ratatoskrUtils/utils/Structures.h" #include "ratatoskrUtils/utils/Structures.h"

View file

@ -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 "utils.h"
#include "configuration.h" #include "configuration.h"
#include "utils/GlobalResourcesCS.h" #include "utils/GlobalResourcesCS.h"