feat: bug solved, working project, comments added
This commit is contained in:
parent
59eb9a23b6
commit
4517995d04
28 changed files with 2713 additions and 57 deletions
55
config/conc_stream_pack_test/config.xml
Executable file
55
config/conc_stream_pack_test/config.xml
Executable 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>
|
385
config/conc_stream_pack_test/data.xml
Normal file
385
config/conc_stream_pack_test/data.xml
Normal 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>
|
59
config/conc_stream_pack_test/map.xml
Normal file
59
config/conc_stream_pack_test/map.xml
Normal 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>
|
1612
config/conc_stream_pack_test/net.xml
Normal file
1612
config/conc_stream_pack_test/net.xml
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
135
scripts/generate_config_task.py
Normal file
135
scripts/generate_config_task.py
Normal 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
|
|
@ -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" +
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in a new issue