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"/>
|
||||
<type value="2"/>
|
||||
<task value="2"/>
|
||||
<config link="2" destination="3"/>
|
||||
<config link="4" destination="3"/>
|
||||
</destination>
|
||||
<destination id="2">
|
||||
<delay min="0" max="100"/>
|
||||
|
@ -42,7 +42,7 @@
|
|||
<count min="1" max="1"/>
|
||||
<type value="2"/>
|
||||
<task value="3"/>
|
||||
<config link="2" destination="0"/>
|
||||
<config link="4" destination="0"/>
|
||||
</destination>
|
||||
</destinations>
|
||||
</possibility>
|
||||
|
@ -60,6 +60,20 @@
|
|||
<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="4"/>
|
||||
</destination>
|
||||
</destinations>
|
||||
</possibility>
|
||||
</generates>
|
||||
</task>
|
||||
|
||||
<task id="2">
|
||||
|
@ -82,7 +96,7 @@
|
|||
<interval min="100" max="100"/>
|
||||
<count min="1" max="1"/>
|
||||
<type value="0"/>
|
||||
<task value="3"/>
|
||||
<task value="4"/>
|
||||
</destination>
|
||||
</destinations>
|
||||
</possibility>
|
||||
|
@ -96,7 +110,7 @@
|
|||
<requires>
|
||||
<requirement id="0">
|
||||
<type value="2"/>
|
||||
<source value="2"/>
|
||||
<source value="0"/>
|
||||
<count max="1" min="1"/>
|
||||
</requirement>
|
||||
</requires>
|
||||
|
@ -108,14 +122,7 @@
|
|||
<delay min="0" max="100"/>
|
||||
<interval min="100" max="100"/>
|
||||
<count min="1" max="1"/>
|
||||
<type value="1"/>
|
||||
<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"/>
|
||||
<type value="0"/>
|
||||
<task value="4"/>
|
||||
</destination>
|
||||
</destinations>
|
||||
|
@ -129,13 +136,59 @@
|
|||
<repeat max="1" min="1"/>
|
||||
<requires>
|
||||
<requirement id="0">
|
||||
<type value="1"/>
|
||||
<type 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"/>
|
||||
</requirement>
|
||||
<requirement id="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"/>
|
||||
</requirement>
|
||||
</requires>
|
||||
|
|
|
@ -6,18 +6,22 @@
|
|||
</bind>
|
||||
<bind>
|
||||
<task value="1"/>
|
||||
<node value="1"/>
|
||||
</bind>
|
||||
<bind>
|
||||
<task value="2"/>
|
||||
<node value="2"/>
|
||||
</bind>
|
||||
<bind>
|
||||
<task value="3"/>
|
||||
<node value="0"/>
|
||||
</bind>
|
||||
<bind>
|
||||
<task value="2"/>
|
||||
<node value="1"/>
|
||||
</bind>
|
||||
<bind>
|
||||
<task value="3"/>
|
||||
<node value="2"/>
|
||||
</bind>
|
||||
<bind>
|
||||
<task value="4"/>
|
||||
<node value="0"/>
|
||||
</bind>
|
||||
<bind>
|
||||
<task value="5"/>
|
||||
<node value="2"/>
|
||||
</bind>
|
||||
</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),
|
||||
target_peq(this, &NetworkInterfaceTlm::target_peq_cb),
|
||||
curr_req(0), resp_in_progress(false),
|
||||
nxt_resp_pend(0), end_req_pend(0) {
|
||||
nxt_resp_pend(0) {
|
||||
sc_report_handler::set_actions(NI_LOG, SC_INFO, SC_LOG|SC_DISPLAY);
|
||||
try {
|
||||
this->id = node.id%(globalResources.nodes.size()/2);
|
||||
|
@ -57,12 +57,12 @@ NetworkInterfaceTlm::NetworkInterfaceTlm(sc_module_name nm, Node& node,
|
|||
initiator[lay] = new ni_init_socket((string(nm)+"_"+
|
||||
to_string(lay)+"_init").c_str());
|
||||
initiator[lay]->register_nb_transport_bw(this,
|
||||
&NetworkInterfaceTlm::nb_transport_bw_cb, 0);
|
||||
&NetworkInterfaceTlm::nb_transport_bw_cb, lay);
|
||||
|
||||
target[lay] = new ni_targ_socket((string(nm)+"_"+
|
||||
to_string(lay)+"targ").c_str());
|
||||
target[lay]->register_nb_transport_fw(this,
|
||||
&NetworkInterfaceTlm::nb_transport_fw_cb, 0);
|
||||
&NetworkInterfaceTlm::nb_transport_fw_cb, lay);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -156,6 +156,7 @@ tlm_gp* NetworkInterfaceTlm::build_transaction(PacketCS* p, Flit* f){
|
|||
trans->set_byte_enable_ptr(0);
|
||||
trans->set_dmi_allowed(false);
|
||||
trans->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE);
|
||||
curr_req = trans;
|
||||
|
||||
return trans;
|
||||
}
|
||||
|
@ -163,8 +164,6 @@ tlm_gp* NetworkInterfaceTlm::build_transaction(PacketCS* p, Flit* f){
|
|||
|
||||
void NetworkInterfaceTlm::send_flit(PacketCS* p, Flit* f){
|
||||
tlm_gp* trans = build_transaction(p, f);
|
||||
credit_counter--;
|
||||
log_info("Credit counter updated: "+to_string(credit_counter));
|
||||
|
||||
sc_time delay = sc_time(REQ_INIT_DELAY, UNITS_DELAY);
|
||||
tlm::tlm_phase send_phase = tlm::BEGIN_REQ;
|
||||
|
@ -173,6 +172,7 @@ void NetworkInterfaceTlm::send_flit(PacketCS* p, Flit* f){
|
|||
log_info("Sending flit of type "+STR_TYPES[p->dataType]+
|
||||
" to layer "+to_string(lay));
|
||||
(*initiator[lay])->nb_transport_fw(*trans, send_phase, delay);
|
||||
update_credits(*trans, -1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -183,10 +183,16 @@ int NetworkInterfaceTlm::get_type_from_extension(tlm_gp& trans){
|
|||
}
|
||||
|
||||
|
||||
int NetworkInterfaceTlm::get_packet_id_from_extension(tlm_gp& trans){
|
||||
link_extension* extension;
|
||||
trans.get_extension<link_extension>(extension);
|
||||
return extension->packet_id;
|
||||
}
|
||||
|
||||
bool NetworkInterfaceTlm::check_cs_needed(tlm_gp& trans){
|
||||
int type = get_type_from_extension(trans);
|
||||
return type == TYPE_ROUT_CONFIG;
|
||||
};
|
||||
}
|
||||
|
||||
void NetworkInterfaceTlm::send_cs_rout_conf_msg(tlm_gp& trans){
|
||||
tlm_gp* new_trans = m_mm.allocate();
|
||||
|
@ -246,15 +252,25 @@ void NetworkInterfaceTlm::send_data_to_noc(){
|
|||
|
||||
|
||||
void NetworkInterfaceTlm::thread() {
|
||||
bool log_wait = true;
|
||||
while(true){
|
||||
//log_info("send_data_process()");
|
||||
if (clk.posedge()) {
|
||||
if (!packet_send_queue.empty()) {
|
||||
if (credit_counter != 0){
|
||||
if (credit_counter != 0 && curr_req == 0){
|
||||
send_data_to_noc();
|
||||
log_wait = true;
|
||||
}
|
||||
else {
|
||||
log_info("Waiting for Router!");
|
||||
if(log_wait){
|
||||
if(credit_counter == 0){
|
||||
log_info("No more credits. Waiting for Router!");
|
||||
}
|
||||
else{
|
||||
log_info("Transaction in progress. Waiting for Router!");
|
||||
}
|
||||
log_wait = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!packet_recv_queue.empty()) {
|
||||
|
@ -281,15 +297,31 @@ void NetworkInterfaceTlm::thread() {
|
|||
tlm::tlm_sync_enum NetworkInterfaceTlm::nb_transport_bw_cb(int id,
|
||||
tlm::tlm_generic_payload& trans,
|
||||
tlm::tlm_phase& phase, sc_time& delay) {
|
||||
int p_id = get_packet_id_from_extension(trans);
|
||||
log_info("Backward transport callback start from layer " +
|
||||
to_string(id) + ". Packet id: " + to_string(p_id));
|
||||
log_info("Sanity check: Phase " + string(phase.get_name()) + ", "
|
||||
+ "Delay: " + delay.to_string());
|
||||
init_peq.notify(trans, phase, delay);
|
||||
return tlm::TLM_ACCEPTED;
|
||||
}
|
||||
|
||||
|
||||
void NetworkInterfaceTlm::init_peq_cb(tlm_gp& trans, const tlm::tlm_phase& phase){
|
||||
int p_id = get_packet_id_from_extension(trans);
|
||||
log_info("Init PEQ callback start for packet "+to_string(p_id));
|
||||
log_info("Phase "+string(phase.get_name())+" received");
|
||||
if (phase == tlm::END_REQ) {
|
||||
credit_counter++;
|
||||
log_info("Credit counter updated: "+to_string(credit_counter));
|
||||
update_credits(trans, 1);
|
||||
curr_req = 0;
|
||||
if(p_id == -1){
|
||||
// Config msg transaction ended, so packet can be scheduled for deletion
|
||||
trans.set_response_status(tlm::TLM_OK_RESPONSE);
|
||||
unsigned char* data_ptr = trans.get_data_ptr();
|
||||
Flit* received_flit = reinterpret_cast<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)
|
||||
log_fatal("Illegal transaction phase received by initiator");
|
||||
|
@ -327,6 +359,11 @@ void NetworkInterfaceTlm::check_transaction(tlm_gp& trans) {
|
|||
|
||||
tlm::tlm_sync_enum NetworkInterfaceTlm::nb_transport_fw_cb(int id,
|
||||
tlm_gp& trans, tlm::tlm_phase& phase, sc_time& delay){
|
||||
int p_id = get_packet_id_from_extension(trans);
|
||||
log_info("Forward transport callback start from layer " +
|
||||
to_string(id) + ". Packet id: " + to_string(p_id));
|
||||
log_info("Sanity check: Phase " + string(phase.get_name()) + ", "
|
||||
+ "Delay: " + delay.to_string());
|
||||
unsigned int len = trans.get_data_length();
|
||||
unsigned char* byt = trans.get_byte_enable_ptr();
|
||||
unsigned int wid = trans.get_streaming_width();
|
||||
|
@ -370,23 +407,27 @@ void NetworkInterfaceTlm::receive_and_process_flit(tlm_gp& trans){
|
|||
}
|
||||
//globalReport.issueNoCOutputDataAmount(sc_time_stamp(),globalResources.bitWidth);
|
||||
if (p->toTransmit.empty() && p->inTransmit.empty()){
|
||||
packet_recv_queue.push(p);
|
||||
// send config message when all flits of packet arrive
|
||||
if(check_cs_needed(trans)){
|
||||
log_info("Send router configuration message");
|
||||
log_info("Send router configuration message. Packet id: "
|
||||
+ to_string(p->id));
|
||||
send_cs_rout_conf_msg(trans);
|
||||
}
|
||||
else{
|
||||
packet_recv_queue.push(p);
|
||||
}
|
||||
}
|
||||
credit_counter++;
|
||||
log_info("Credit counter updated: "+to_string(credit_counter));
|
||||
//credit_counter++; no need to update credit in target (unless receiving response)
|
||||
//log_info("Credit counter updated: "+to_string(credit_counter));
|
||||
|
||||
// send response if not type stream
|
||||
if(p->dataType != TYPE_STREAM){
|
||||
if(resp_in_progress) {
|
||||
if(nxt_resp_pend){
|
||||
log_fatal("Attempt to have two pending responses in target");
|
||||
nxt_resp_pend = &trans;
|
||||
}
|
||||
log_info("Previous response transaction still in progress, scheduling it for next time");
|
||||
nxt_resp_pend = &trans;
|
||||
}
|
||||
else{ send_response(trans); }
|
||||
}
|
||||
|
@ -394,6 +435,9 @@ void NetworkInterfaceTlm::receive_and_process_flit(tlm_gp& trans){
|
|||
|
||||
|
||||
void NetworkInterfaceTlm::target_peq_cb(tlm_gp& trans, const tlm::tlm_phase& phase){
|
||||
int p_id = get_packet_id_from_extension(trans);
|
||||
log_info("Target PEQ callback start for packet "+to_string(p_id));
|
||||
log_info("Phase "+string(phase.get_name())+" received");
|
||||
switch (phase) {
|
||||
case tlm::BEGIN_REQ:
|
||||
trans.acquire();
|
||||
|
@ -406,8 +450,7 @@ void NetworkInterfaceTlm::target_peq_cb(tlm_gp& trans, const tlm::tlm_phase& pha
|
|||
"Illegal transaction phase END_RESP received by target");
|
||||
}
|
||||
trans.release();
|
||||
credit_counter++;
|
||||
log_info("Credit counter updated: "+to_string(credit_counter));
|
||||
update_credits(trans, 1);
|
||||
// Target itself is now clear to issue the next BEGIN_RESP
|
||||
resp_in_progress = false;
|
||||
if (nxt_resp_pend){
|
||||
|
@ -438,6 +481,7 @@ tlm::tlm_sync_enum NetworkInterfaceTlm::send_end_req(tlm_gp& trans){
|
|||
bw_phase, delay);
|
||||
if (status == tlm::TLM_COMPLETED) {
|
||||
trans.release();
|
||||
curr_req = 0;
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -453,14 +497,15 @@ tlm::tlm_sync_enum NetworkInterfaceTlm::send_end_req(tlm_gp& trans){
|
|||
|
||||
|
||||
void NetworkInterfaceTlm::send_response(tlm_gp& trans){
|
||||
int p_id = get_packet_id_from_extension(trans);
|
||||
log_info("Send response for packet "+to_string(p_id));
|
||||
resp_in_progress = true;
|
||||
sc_time delay = SC_ZERO_TIME;
|
||||
tlm::tlm_phase bw_phase = tlm::BEGIN_RESP;
|
||||
|
||||
tlm::tlm_sync_enum status = (*target[0])->nb_transport_bw(
|
||||
trans, bw_phase, delay);
|
||||
credit_counter--;
|
||||
log_info("Credit counter updated: "+to_string(credit_counter));
|
||||
update_credits(trans, -1);
|
||||
|
||||
if (status == tlm::TLM_UPDATED){
|
||||
target_peq.notify(trans, bw_phase, delay);
|
||||
|
@ -469,11 +514,20 @@ void NetworkInterfaceTlm::send_response(tlm_gp& trans){
|
|||
// The initiator has terminated the transaction
|
||||
trans.release();
|
||||
resp_in_progress = false;
|
||||
credit_counter++;
|
||||
log_info("Credit counter updated: "+to_string(credit_counter));
|
||||
update_credits(trans, 1);
|
||||
curr_req = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkInterfaceTlm::update_credits(tlm_gp&trans, int added_creds){
|
||||
int type = get_type_from_extension(trans);
|
||||
int p_id = get_packet_id_from_extension(trans);
|
||||
|
||||
if(type == TYPE_PACKET || (type==TYPE_ROUT_CONFIG && p_id != -1)){
|
||||
credit_counter += added_creds;
|
||||
log_info("Credit counter updated: "+to_string(credit_counter));
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkInterfaceTlm::log_info(string msg){
|
||||
string log_msg = ni_name + ": (Node" +
|
||||
|
|
|
@ -64,14 +64,10 @@ public:
|
|||
tlm_utils::peq_with_cb_and_phase<NetworkInterfaceTlm> init_peq;
|
||||
tlm_utils::peq_with_cb_and_phase<NetworkInterfaceTlm> target_peq;
|
||||
tlm_gp* curr_req;
|
||||
tlm_gp* end_req_pend;
|
||||
tlm_gp* nxt_resp_pend;
|
||||
tlm_gp* nxt_send_data_pend;
|
||||
|
||||
bool resp_in_progress;
|
||||
bool send_data_in_progress;
|
||||
int credit_counter;
|
||||
Dir send_data_in_prog_dest;
|
||||
MemoryManager m_mm;
|
||||
uint8_t max_pos[3];
|
||||
bool valid_socket[NUM_ACC_LAYERS] = {false};
|
||||
|
@ -135,6 +131,13 @@ public:
|
|||
*/
|
||||
int get_type_from_extension(tlm_gp& trans);
|
||||
|
||||
/**
|
||||
* Get packet id from extension
|
||||
*
|
||||
* @param trans TLM generic payload object
|
||||
*/
|
||||
int get_packet_id_from_extension(tlm_gp& trans);
|
||||
|
||||
/**
|
||||
* If message is init streaming, a router_cs needs to be
|
||||
* configured
|
||||
|
@ -254,6 +257,13 @@ public:
|
|||
*/
|
||||
void send_response(tlm_gp& trans);
|
||||
|
||||
/**
|
||||
* Updates num of credits
|
||||
*
|
||||
* @param trans TLM generic payload object
|
||||
* @param added_creds Amount of credits to add (or substract)
|
||||
*/
|
||||
void update_credits(tlm_gp&trans, int added_creds);
|
||||
|
||||
/** Log info
|
||||
* @param msg log message
|
||||
|
|
|
@ -73,10 +73,16 @@ void TlmNoc::initNoc() {
|
|||
string msg = " initialized in position " +
|
||||
to_string(rout_pos[0]) + "," + to_string(rout_pos[1])+
|
||||
"," + to_string(rout_pos[2]);
|
||||
string rout_name = n.type->model == "Router" ?
|
||||
"router_" : "router_cs_";
|
||||
rout_name += to_string(n.id);
|
||||
TlmRouter* r = new TlmRouter(rout_name.c_str(), rout_pos, max_pos);
|
||||
TlmRouter* r;
|
||||
string rout_name;
|
||||
if(n.type->model=="Router"){
|
||||
rout_name = "router_"+to_string(n.id);
|
||||
r = new TlmRouter(rout_name.c_str(), rout_pos, max_pos);
|
||||
}
|
||||
else{
|
||||
rout_name = "router_cs_"+to_string(n.id);
|
||||
r = new TlmRouterCS(rout_name.c_str(), rout_pos, max_pos);
|
||||
}
|
||||
routers.push_back(r);
|
||||
mapNodeRouter.insert(
|
||||
pair<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 "traffic/PacketCS.h"
|
||||
|
||||
|
@ -238,7 +259,11 @@ void ProcessingElementCS::checkNeed()
|
|||
// EXPLAIN: iterate over tasks needing the data
|
||||
for (const TaskCS& t : neededFor.at(type)) {
|
||||
std::pair<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,
|
||||
it says that the task is finished receiving the required packets while in fact, it still needs some packets.
|
||||
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
|
||||
|
||||
#include "ratatoskrUtils/processingElement/ProcessingElementVC.h"
|
||||
|
@ -6,6 +27,7 @@
|
|||
|
||||
class ProcessingElementCS : public ProcessingElementVC {
|
||||
public:
|
||||
// Almost same functionality as ProcessingElementVC but uses TaskCS
|
||||
std::map<dataTypeID_t, std::set<TaskCS>> neededFor;
|
||||
std::map<std::pair<TaskCS, dataTypeID_t>, int> neededAmount;
|
||||
std::map<TaskCS, std::set<dataTypeID_t>> needs;
|
||||
|
@ -25,13 +47,32 @@ public:
|
|||
ProcessingElementCS(sc_module_name mn, Node& node, TrafficPool* tp):
|
||||
ProcessingElementVC(mn, node, tp) {};
|
||||
|
||||
/**
|
||||
* On every clock cycle, checks if task needs to begin and starts it
|
||||
*/
|
||||
void thread() override;
|
||||
|
||||
/**
|
||||
* Updates requirements and sends messages at the right time
|
||||
*
|
||||
* @param taskcs Circuit switching task to execute
|
||||
*/
|
||||
void execute(TaskCS&);
|
||||
|
||||
/**
|
||||
* Receives packet and processes it
|
||||
*/
|
||||
void receive() override;
|
||||
|
||||
/**
|
||||
* Sends message with a random delay
|
||||
*
|
||||
* @param taskcs Circuit switching task from which to send a message
|
||||
*/
|
||||
void startSending(TaskCS&);
|
||||
|
||||
/**
|
||||
* Checks if requirements are fullfilled
|
||||
*/
|
||||
void checkNeed();
|
||||
};
|
||||
|
|
|
@ -226,7 +226,6 @@ void ProcessingElementVC::thread()
|
|||
|
||||
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)
|
||||
if (!taskRepeatLeft.count(task)) {
|
||||
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;
|
||||
credit_counter[dest_link]--;
|
||||
log_info(link, trans,
|
||||
"credits value updated: " + to_string(credit_counter[link]));
|
||||
"credits value updated: " + to_string(credit_counter[dest_link]));
|
||||
// react to result
|
||||
if(status == TLM_UPDATED) {
|
||||
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);
|
||||
credit_counter[dest_link]++;
|
||||
log_info(link, trans,
|
||||
"credits value updated: " + to_string(credit_counter[link]));
|
||||
"credits value updated: " + to_string(credit_counter[dest_link]));
|
||||
new_trans->release();
|
||||
}
|
||||
}
|
||||
|
@ -339,6 +339,7 @@ void TlmRouter::switching(int link, tlm_gp& trans){
|
|||
}
|
||||
// validate pending response
|
||||
if(resp_in_progress[link]) {
|
||||
//TODO: Make sure that there is always only one transaction per link
|
||||
if(nxt_resp_pend[link]){
|
||||
log_error(link,trans,
|
||||
"Attempt to have two pending responses in target");
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include <systemc>
|
||||
#include <string>
|
||||
|
||||
#include "tlm.h"
|
||||
#include "tlm_utils/simple_initiator_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);
|
||||
curr_req[dest_link] = new_trans;
|
||||
credit_counter[dest_link]--;
|
||||
log_info(link, trans,
|
||||
"credits value updated: " + to_string(credit_counter[link]));
|
||||
// react to result
|
||||
if(status == TLM_COMPLETED) {
|
||||
log_error(link, trans, "Request completed prematurely");
|
||||
curr_req[dest_link] = 0;
|
||||
check_transaction(link, *new_trans);
|
||||
credit_counter[dest_link]++;
|
||||
log_info(link, trans,
|
||||
"credits value updated: " + to_string(credit_counter[dest_link]));
|
||||
new_trans->release();
|
||||
}
|
||||
}
|
||||
|
@ -84,6 +88,8 @@ void TlmRouterCS::configure_router(int link, tlm_gp& trans){
|
|||
int config_link = rec_packet->msg.config_link;
|
||||
int destination = rec_packet->msg.dest_link;
|
||||
// set auto router map
|
||||
log_info(link, trans, "Set auto route of link "+DIR::toString(config_link)
|
||||
+ " to "+DIR::toString(destination));
|
||||
set_auto_router_map(config_link, Dir(destination));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,24 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (C) 2024 Juan Neyra
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
******************************************************************************/
|
||||
#include "PacketCS.h"
|
||||
|
||||
PacketCS::PacketCS(Node& src, Node& dst, int size, double generationTime,
|
||||
|
|
|
@ -1,3 +1,24 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (C) 2024 Juan Neyra
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
******************************************************************************/
|
||||
# pragma once
|
||||
|
||||
#include "ratatoskrUtils/traffic/Packet.h"
|
||||
|
|
|
@ -1,3 +1,24 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (C) 2024 Juan Neyra
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
******************************************************************************/
|
||||
#include "TaskPoolCS.h"
|
||||
|
||||
void TaskPoolCS::start()
|
||||
|
|
|
@ -1,3 +1,24 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (C) 2024 Juan Neyra
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
******************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include "systemc.h"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (C) 2018 Jan Moritz Joseph
|
||||
* Copyright (C) 2024 Juan Neyra based on 2018 Jan Moritz Joseph original version
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (C) 2018 Jan Moritz Joseph
|
||||
* Copyright (C) 2024 Juan Neyra based on 2018 Jan Moritz Joseph original version
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
|
@ -1,3 +1,24 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (C) 2024 Juan Neyra
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
******************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include "systemc.h"
|
||||
|
|
|
@ -1,3 +1,24 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (C) 2024 Juan Neyra
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
******************************************************************************/
|
||||
#include "PacketFactoryCS.h"
|
||||
|
||||
PacketFactoryCS& PacketFactoryCS::getInstance()
|
||||
|
|
|
@ -1,3 +1,24 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (C) 2024 Juan Neyra
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
******************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include <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 <iostream>
|
||||
#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
|
||||
|
||||
#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 "configuration.h"
|
||||
#include "utils/GlobalResourcesCS.h"
|
||||
|
|
Loading…
Reference in a new issue