Compare commits

...

3 commits

46 changed files with 32669 additions and 7429 deletions

4
.gitignore vendored
View file

@ -1,3 +1,7 @@
build build
out out
sim sim
results
*/*/__pycache__/*
scripts/*/*.txt
*/*/*.png

View file

@ -50,6 +50,4 @@ This project is licensed under the MIT License - see the LICENSE.md file for det
* [Ratatoskr NoC simulator](https://github.com/jmjos/ratatoskr) * [Ratatoskr NoC simulator](https://github.com/jmjos/ratatoskr)
# TODO: Add description of project structure. Improve description section, talk about what the output is # TODO: Add description of project structure. Improve description section, talk about what the output is
# TODO: Differentiate debug logs to reduce size of logs (in PE, router and NI) DONE (needs testing) # TODO: Run everything again
# TODO: Add system's clock timestamp to calculate how much time it takes to run DONE (needs testing)
# TODO: Test all one more time

View file

@ -93,7 +93,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="6"/> <task value="7"/>
</destination> </destination>
</destinations> </destinations>
</possibility> </possibility>
@ -120,7 +120,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="6"/> <task value="7"/>
</destination> </destination>
</destinations> </destinations>
</possibility> </possibility>
@ -147,7 +147,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="6"/> <task value="7"/>
</destination> </destination>
</destinations> </destinations>
</possibility> </possibility>
@ -174,7 +174,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="6"/> <task value="7"/>
</destination> </destination>
</destinations> </destinations>
</possibility> </possibility>
@ -201,7 +201,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="6"/> <task value="7"/>
</destination> </destination>
</destinations> </destinations>
</possibility> </possibility>
@ -214,9 +214,9 @@
<repeat max="1" min="1"/> <repeat max="1" min="1"/>
<requires> <requires>
<requirement id="0"> <requirement id="0">
<type value="0"/> <type value="2"/>
<source value="0"/> <source value="0"/>
<count max="5" min="5"/> <count max="1" min="1"/>
</requirement> </requirement>
</requires> </requires>
<generates> <generates>
@ -227,35 +227,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="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="2" max="2"/>
<type value="1"/>
<task value="7"/> <task value="7"/>
</destination> </destination>
</destinations> </destinations>
@ -269,11 +241,53 @@
<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="4"/> <source value="6"/>
<count max="6" min="6"/> <count max="6" min="6"/>
</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="1"/>
<task value="9"/>
</destination>
<destination id="1">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="9"/>
</destination>
<destination id="2">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="9"/>
</destination>
<destination id="3">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="1" max="1"/>
<type value="1"/>
<task value="9"/>
</destination>
<destination id="4">
<delay min="0" max="100"/>
<interval min="100" max="100"/>
<count min="2" max="2"/>
<type value="1"/>
<task value="9"/>
</destination>
</destinations>
</possibility>
</generates>
</task> </task>
<task id="8"> <task id="8">
@ -306,6 +320,11 @@
<source value="0"/> <source value="0"/>
<count max="4" min="4"/> <count max="4" min="4"/>
</requirement> </requirement>
<requirement id="1">
<type value="0"/>
<source value="0"/>
<count max="5" min="5"/>
</requirement>
</requires> </requires>
</task> </task>

View file

@ -5,15 +5,15 @@
<outputToFile value="true">report</outputToFile> <outputToFile value="true">report</outputToFile>
</general> </general>
<noc> <noc>
<nocFile>config/efficienet/net.xml</nocFile> <nocFile>config/efficienet/net_conf.xml</nocFile>
<flitsPerPacket value="1"/> <flitsPerPacket value="1"/>
<bitWidth value="32"/> <bitWidth value="32"/>
<Vdd value="5"/> <Vdd value="5"/>
</noc> </noc>
<application> <application>
<benchmark>task</benchmark> <benchmark>task</benchmark>
<dataFile>config/efficienet/data_Flits.xml</dataFile> <dataFile>config/efficienet/data_Flits_conf.xml</dataFile>
<mapFile>config/efficienet/map.xml</mapFile> <mapFile>config/efficienet/map_conf.xml</mapFile>
</application> </application>
<verbose> <verbose>
<processingElements> <processingElements>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,561 @@
<?xml version="1.0" ?>
<map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<bind>
<task value="0"/>
<node value="0"/>
</bind>
<bind>
<task value="1"/>
<node value="0"/>
</bind>
<bind>
<task value="2"/>
<node value="1"/>
</bind>
<bind>
<task value="3"/>
<node value="1"/>
</bind>
<bind>
<task value="4"/>
<node value="2"/>
</bind>
<bind>
<task value="5"/>
<node value="2"/>
</bind>
<bind>
<task value="6"/>
<node value="3"/>
</bind>
<bind>
<task value="7"/>
<node value="3"/>
</bind>
<bind>
<task value="8"/>
<node value="4"/>
</bind>
<bind>
<task value="9"/>
<node value="4"/>
</bind>
<bind>
<task value="10"/>
<node value="5"/>
</bind>
<bind>
<task value="11"/>
<node value="5"/>
</bind>
<bind>
<task value="12"/>
<node value="6"/>
</bind>
<bind>
<task value="13"/>
<node value="6"/>
</bind>
<bind>
<task value="14"/>
<node value="7"/>
</bind>
<bind>
<task value="15"/>
<node value="7"/>
</bind>
<bind>
<task value="16"/>
<node value="8"/>
</bind>
<bind>
<task value="17"/>
<node value="8"/>
</bind>
<bind>
<task value="18"/>
<node value="9"/>
</bind>
<bind>
<task value="19"/>
<node value="9"/>
</bind>
<bind>
<task value="20"/>
<node value="10"/>
</bind>
<bind>
<task value="21"/>
<node value="10"/>
</bind>
<bind>
<task value="22"/>
<node value="11"/>
</bind>
<bind>
<task value="23"/>
<node value="11"/>
</bind>
<bind>
<task value="24"/>
<node value="12"/>
</bind>
<bind>
<task value="25"/>
<node value="12"/>
</bind>
<bind>
<task value="26"/>
<node value="13"/>
</bind>
<bind>
<task value="27"/>
<node value="13"/>
</bind>
<bind>
<task value="28"/>
<node value="14"/>
</bind>
<bind>
<task value="29"/>
<node value="14"/>
</bind>
<bind>
<task value="30"/>
<node value="15"/>
</bind>
<bind>
<task value="31"/>
<node value="15"/>
</bind>
<bind>
<task value="32"/>
<node value="0"/>
</bind>
<bind>
<task value="33"/>
<node value="0"/>
</bind>
<bind>
<task value="34"/>
<node value="1"/>
</bind>
<bind>
<task value="35"/>
<node value="1"/>
</bind>
<bind>
<task value="36"/>
<node value="2"/>
</bind>
<bind>
<task value="37"/>
<node value="2"/>
</bind>
<bind>
<task value="38"/>
<node value="3"/>
</bind>
<bind>
<task value="39"/>
<node value="3"/>
</bind>
<bind>
<task value="40"/>
<node value="4"/>
</bind>
<bind>
<task value="41"/>
<node value="4"/>
</bind>
<bind>
<task value="42"/>
<node value="5"/>
</bind>
<bind>
<task value="43"/>
<node value="5"/>
</bind>
<bind>
<task value="44"/>
<node value="6"/>
</bind>
<bind>
<task value="45"/>
<node value="6"/>
</bind>
<bind>
<task value="46"/>
<node value="7"/>
</bind>
<bind>
<task value="47"/>
<node value="7"/>
</bind>
<bind>
<task value="48"/>
<node value="8"/>
</bind>
<bind>
<task value="49"/>
<node value="8"/>
</bind>
<bind>
<task value="50"/>
<node value="9"/>
</bind>
<bind>
<task value="51"/>
<node value="9"/>
</bind>
<bind>
<task value="52"/>
<node value="10"/>
</bind>
<bind>
<task value="53"/>
<node value="10"/>
</bind>
<bind>
<task value="54"/>
<node value="11"/>
</bind>
<bind>
<task value="55"/>
<node value="11"/>
</bind>
<bind>
<task value="56"/>
<node value="12"/>
</bind>
<bind>
<task value="57"/>
<node value="12"/>
</bind>
<bind>
<task value="58"/>
<node value="13"/>
</bind>
<bind>
<task value="59"/>
<node value="13"/>
</bind>
<bind>
<task value="60"/>
<node value="14"/>
</bind>
<bind>
<task value="61"/>
<node value="14"/>
</bind>
<bind>
<task value="62"/>
<node value="15"/>
</bind>
<bind>
<task value="63"/>
<node value="15"/>
</bind>
<bind>
<task value="64"/>
<node value="0"/>
</bind>
<bind>
<task value="65"/>
<node value="0"/>
</bind>
<bind>
<task value="66"/>
<node value="1"/>
</bind>
<bind>
<task value="67"/>
<node value="1"/>
</bind>
<bind>
<task value="68"/>
<node value="2"/>
</bind>
<bind>
<task value="69"/>
<node value="2"/>
</bind>
<bind>
<task value="70"/>
<node value="3"/>
</bind>
<bind>
<task value="71"/>
<node value="3"/>
</bind>
<bind>
<task value="72"/>
<node value="4"/>
</bind>
<bind>
<task value="73"/>
<node value="4"/>
</bind>
<bind>
<task value="74"/>
<node value="5"/>
</bind>
<bind>
<task value="75"/>
<node value="5"/>
</bind>
<bind>
<task value="76"/>
<node value="6"/>
</bind>
<bind>
<task value="77"/>
<node value="6"/>
</bind>
<bind>
<task value="78"/>
<node value="7"/>
</bind>
<bind>
<task value="79"/>
<node value="7"/>
</bind>
<bind>
<task value="80"/>
<node value="8"/>
</bind>
<bind>
<task value="81"/>
<node value="8"/>
</bind>
<bind>
<task value="82"/>
<node value="9"/>
</bind>
<bind>
<task value="83"/>
<node value="9"/>
</bind>
<bind>
<task value="84"/>
<node value="0"/>
</bind>
<bind>
<task value="85"/>
<node value="0"/>
</bind>
<bind>
<task value="86"/>
<node value="1"/>
</bind>
<bind>
<task value="87"/>
<node value="1"/>
</bind>
<bind>
<task value="88"/>
<node value="1"/>
</bind>
<bind>
<task value="89"/>
<node value="2"/>
</bind>
<bind>
<task value="90"/>
<node value="2"/>
</bind>
<bind>
<task value="91"/>
<node value="2"/>
</bind>
<bind>
<task value="92"/>
<node value="3"/>
</bind>
<bind>
<task value="93"/>
<node value="3"/>
</bind>
<bind>
<task value="94"/>
<node value="3"/>
</bind>
<bind>
<task value="95"/>
<node value="7"/>
</bind>
<bind>
<task value="96"/>
<node value="6"/>
</bind>
<bind>
<task value="97"/>
<node value="5"/>
</bind>
<bind>
<task value="98"/>
<node value="4"/>
</bind>
<bind>
<task value="99"/>
<node value="4"/>
</bind>
<bind>
<task value="100"/>
<node value="4"/>
</bind>
<bind>
<task value="101"/>
<node value="5"/>
</bind>
<bind>
<task value="102"/>
<node value="5"/>
</bind>
<bind>
<task value="103"/>
<node value="5"/>
</bind>
<bind>
<task value="104"/>
<node value="6"/>
</bind>
<bind>
<task value="105"/>
<node value="6"/>
</bind>
<bind>
<task value="106"/>
<node value="6"/>
</bind>
<bind>
<task value="107"/>
<node value="7"/>
</bind>
<bind>
<task value="108"/>
<node value="7"/>
</bind>
<bind>
<task value="109"/>
<node value="7"/>
</bind>
<bind>
<task value="110"/>
<node value="11"/>
</bind>
<bind>
<task value="111"/>
<node value="10"/>
</bind>
<bind>
<task value="112"/>
<node value="9"/>
</bind>
<bind>
<task value="113"/>
<node value="8"/>
</bind>
<bind>
<task value="114"/>
<node value="8"/>
</bind>
<bind>
<task value="115"/>
<node value="8"/>
</bind>
<bind>
<task value="116"/>
<node value="9"/>
</bind>
<bind>
<task value="117"/>
<node value="9"/>
</bind>
<bind>
<task value="118"/>
<node value="9"/>
</bind>
<bind>
<task value="119"/>
<node value="10"/>
</bind>
<bind>
<task value="120"/>
<node value="10"/>
</bind>
<bind>
<task value="121"/>
<node value="10"/>
</bind>
<bind>
<task value="122"/>
<node value="11"/>
</bind>
<bind>
<task value="123"/>
<node value="11"/>
</bind>
<bind>
<task value="124"/>
<node value="11"/>
</bind>
<bind>
<task value="125"/>
<node value="15"/>
</bind>
<bind>
<task value="126"/>
<node value="14"/>
</bind>
<bind>
<task value="127"/>
<node value="13"/>
</bind>
<bind>
<task value="128"/>
<node value="12"/>
</bind>
<bind>
<task value="129"/>
<node value="12"/>
</bind>
<bind>
<task value="130"/>
<node value="12"/>
</bind>
<bind>
<task value="131"/>
<node value="13"/>
</bind>
<bind>
<task value="132"/>
<node value="13"/>
</bind>
<bind>
<task value="133"/>
<node value="13"/>
</bind>
<bind>
<task value="134"/>
<node value="14"/>
</bind>
<bind>
<task value="135"/>
<node value="14"/>
</bind>
<bind>
<task value="136"/>
<node value="14"/>
</bind>
<bind>
<task value="137"/>
<node value="15"/>
</bind>
<bind>
<task value="138"/>
<node value="0"/>
</bind>
</map>

View file

@ -0,0 +1,599 @@
<?xml version="1.0" ?>
<map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<bind>
<task value="0"/>
<node value="0"/>
</bind>
<bind>
<task value="1"/>
<node value="0"/>
</bind>
<bind>
<task value="2"/>
<node value="1"/>
</bind>
<bind>
<task value="3"/>
<node value="1"/>
</bind>
<bind>
<task value="4"/>
<node value="2"/>
</bind>
<bind>
<task value="5"/>
<node value="2"/>
</bind>
<bind>
<task value="6"/>
<node value="3"/>
</bind>
<bind>
<task value="7"/>
<node value="3"/>
</bind>
<bind>
<task value="8"/>
<node value="4"/>
</bind>
<bind>
<task value="9"/>
<node value="4"/>
</bind>
<bind>
<task value="10"/>
<node value="5"/>
</bind>
<bind>
<task value="11"/>
<node value="5"/>
</bind>
<bind>
<task value="12"/>
<node value="6"/>
</bind>
<bind>
<task value="13"/>
<node value="6"/>
</bind>
<bind>
<task value="14"/>
<node value="7"/>
</bind>
<bind>
<task value="15"/>
<node value="7"/>
</bind>
<bind>
<task value="16"/>
<node value="8"/>
</bind>
<bind>
<task value="17"/>
<node value="8"/>
</bind>
<bind>
<task value="18"/>
<node value="9"/>
</bind>
<bind>
<task value="19"/>
<node value="9"/>
</bind>
<bind>
<task value="20"/>
<node value="10"/>
</bind>
<bind>
<task value="21"/>
<node value="10"/>
</bind>
<bind>
<task value="22"/>
<node value="11"/>
</bind>
<bind>
<task value="23"/>
<node value="11"/>
</bind>
<bind>
<task value="24"/>
<node value="12"/>
</bind>
<bind>
<task value="25"/>
<node value="12"/>
</bind>
<bind>
<task value="26"/>
<node value="13"/>
</bind>
<bind>
<task value="27"/>
<node value="13"/>
</bind>
<bind>
<task value="28"/>
<node value="14"/>
</bind>
<bind>
<task value="29"/>
<node value="14"/>
</bind>
<bind>
<task value="30"/>
<node value="15"/>
</bind>
<bind>
<task value="31"/>
<node value="15"/>
</bind>
<bind>
<task value="32"/>
<node value="0"/>
</bind>
<bind>
<task value="33"/>
<node value="0"/>
</bind>
<bind>
<task value="34"/>
<node value="1"/>
</bind>
<bind>
<task value="35"/>
<node value="1"/>
</bind>
<bind>
<task value="36"/>
<node value="2"/>
</bind>
<bind>
<task value="37"/>
<node value="2"/>
</bind>
<bind>
<task value="38"/>
<node value="3"/>
</bind>
<bind>
<task value="39"/>
<node value="3"/>
</bind>
<bind>
<task value="40"/>
<node value="4"/>
</bind>
<bind>
<task value="41"/>
<node value="4"/>
</bind>
<bind>
<task value="42"/>
<node value="5"/>
</bind>
<bind>
<task value="43"/>
<node value="5"/>
</bind>
<bind>
<task value="44"/>
<node value="6"/>
</bind>
<bind>
<task value="45"/>
<node value="6"/>
</bind>
<bind>
<task value="46"/>
<node value="7"/>
</bind>
<bind>
<task value="47"/>
<node value="7"/>
</bind>
<bind>
<task value="48"/>
<node value="8"/>
</bind>
<bind>
<task value="49"/>
<node value="8"/>
</bind>
<bind>
<task value="50"/>
<node value="9"/>
</bind>
<bind>
<task value="51"/>
<node value="9"/>
</bind>
<bind>
<task value="52"/>
<node value="10"/>
</bind>
<bind>
<task value="53"/>
<node value="10"/>
</bind>
<bind>
<task value="54"/>
<node value="11"/>
</bind>
<bind>
<task value="55"/>
<node value="11"/>
</bind>
<bind>
<task value="56"/>
<node value="12"/>
</bind>
<bind>
<task value="57"/>
<node value="12"/>
</bind>
<bind>
<task value="58"/>
<node value="13"/>
</bind>
<bind>
<task value="59"/>
<node value="13"/>
</bind>
<bind>
<task value="60"/>
<node value="14"/>
</bind>
<bind>
<task value="61"/>
<node value="14"/>
</bind>
<bind>
<task value="62"/>
<node value="15"/>
</bind>
<bind>
<task value="63"/>
<node value="15"/>
</bind>
<bind>
<task value="64"/>
<node value="0"/>
</bind>
<bind>
<task value="65"/>
<node value="0"/>
</bind>
<bind>
<task value="66"/>
<node value="1"/>
</bind>
<bind>
<task value="67"/>
<node value="1"/>
</bind>
<bind>
<task value="68"/>
<node value="2"/>
</bind>
<bind>
<task value="69"/>
<node value="2"/>
</bind>
<bind>
<task value="70"/>
<node value="3"/>
</bind>
<bind>
<task value="71"/>
<node value="3"/>
</bind>
<bind>
<task value="72"/>
<node value="4"/>
</bind>
<bind>
<task value="73"/>
<node value="4"/>
</bind>
<bind>
<task value="74"/>
<node value="5"/>
</bind>
<bind>
<task value="75"/>
<node value="5"/>
</bind>
<bind>
<task value="76"/>
<node value="6"/>
</bind>
<bind>
<task value="77"/>
<node value="6"/>
</bind>
<bind>
<task value="78"/>
<node value="7"/>
</bind>
<bind>
<task value="79"/>
<node value="7"/>
</bind>
<bind>
<task value="80"/>
<node value="8"/>
</bind>
<bind>
<task value="81"/>
<node value="8"/>
</bind>
<bind>
<task value="82"/>
<node value="9"/>
</bind>
<bind>
<task value="83"/>
<node value="9"/>
</bind>
<bind>
<task value="84"/>
<node value="0"/>
</bind>
<bind>
<task value="85"/>
<node value="0"/>
</bind>
<bind>
<task value="86"/>
<node value="4"/>
</bind>
<bind>
<task value="87"/>
<node value="1"/>
</bind>
<bind>
<task value="88"/>
<node value="1"/>
</bind>
<bind>
<task value="89"/>
<node value="5"/>
</bind>
<bind>
<task value="90"/>
<node value="2"/>
</bind>
<bind>
<task value="91"/>
<node value="2"/>
</bind>
<bind>
<task value="92"/>
<node value="6"/>
</bind>
<bind>
<task value="93"/>
<node value="3"/>
</bind>
<bind>
<task value="94"/>
<node value="3"/>
</bind>
<bind>
<task value="95"/>
<node value="7"/>
</bind>
<bind>
<task value="96"/>
<node value="6"/>
</bind>
<bind>
<task value="97"/>
<node value="5"/>
</bind>
<bind>
<task value="98"/>
<node value="4"/>
</bind>
<bind>
<task value="99"/>
<node value="4"/>
</bind>
<bind>
<task value="100"/>
<node value="4"/>
</bind>
<bind>
<task value="101"/>
<node value="8"/>
</bind>
<bind>
<task value="102"/>
<node value="5"/>
</bind>
<bind>
<task value="103"/>
<node value="5"/>
</bind>
<bind>
<task value="104"/>
<node value="9"/>
</bind>
<bind>
<task value="105"/>
<node value="6"/>
</bind>
<bind>
<task value="106"/>
<node value="6"/>
</bind>
<bind>
<task value="107"/>
<node value="10"/>
</bind>
<bind>
<task value="108"/>
<node value="7"/>
</bind>
<bind>
<task value="109"/>
<node value="7"/>
</bind>
<bind>
<task value="110"/>
<node value="11"/>
</bind>
<bind>
<task value="111"/>
<node value="10"/>
</bind>
<bind>
<task value="112"/>
<node value="9"/>
</bind>
<bind>
<task value="113"/>
<node value="8"/>
</bind>
<bind>
<task value="114"/>
<node value="8"/>
</bind>
<bind>
<task value="115"/>
<node value="8"/>
</bind>
<bind>
<task value="116"/>
<node value="12"/>
</bind>
<bind>
<task value="117"/>
<node value="9"/>
</bind>
<bind>
<task value="118"/>
<node value="9"/>
</bind>
<bind>
<task value="119"/>
<node value="13"/>
</bind>
<bind>
<task value="120"/>
<node value="10"/>
</bind>
<bind>
<task value="121"/>
<node value="10"/>
</bind>
<bind>
<task value="122"/>
<node value="14"/>
</bind>
<bind>
<task value="123"/>
<node value="11"/>
</bind>
<bind>
<task value="124"/>
<node value="11"/>
</bind>
<bind>
<task value="125"/>
<node value="15"/>
</bind>
<bind>
<task value="126"/>
<node value="14"/>
</bind>
<bind>
<task value="127"/>
<node value="13"/>
</bind>
<bind>
<task value="128"/>
<node value="12"/>
</bind>
<bind>
<task value="129"/>
<node value="12"/>
</bind>
<bind>
<task value="130"/>
<node value="12"/>
</bind>
<bind>
<task value="131"/>
<node value="8"/>
</bind>
<bind>
<task value="132"/>
<node value="4"/>
</bind>
<bind>
<task value="133"/>
<node value="0"/>
</bind>
<bind>
<task value="134"/>
<node value="1"/>
</bind>
<bind>
<task value="135"/>
<node value="13"/>
</bind>
<bind>
<task value="136"/>
<node value="13"/>
</bind>
<bind>
<task value="137"/>
<node value="9"/>
</bind>
<bind>
<task value="138"/>
<node value="5"/>
</bind>
<bind>
<task value="139"/>
<node value="1"/>
</bind>
<bind>
<task value="140"/>
<node value="2"/>
</bind>
<bind>
<task value="141"/>
<node value="14"/>
</bind>
<bind>
<task value="142"/>
<node value="14"/>
</bind>
<bind>
<task value="143"/>
<node value="10"/>
</bind>
<bind>
<task value="144"/>
<node value="6"/>
</bind>
<bind>
<task value="145"/>
<node value="2"/>
</bind>
<bind>
<task value="146"/>
<node value="3"/>
</bind>
<bind>
<task value="147"/>
<node value="0"/>
</bind>
</map>

1612
config/efficienet/net_conf.xml Executable file

File diff suppressed because it is too large Load diff

View file

@ -5,15 +5,15 @@
<outputToFile value="true">report</outputToFile> <outputToFile value="true">report</outputToFile>
</general> </general>
<noc> <noc>
<nocFile>config/mobilenet/net.xml</nocFile> <nocFile>config/mobilenet/net_conf.xml</nocFile>
<flitsPerPacket value="1"/> <flitsPerPacket value="1"/>
<bitWidth value="32"/> <bitWidth value="32"/>
<Vdd value="5"/> <Vdd value="5"/>
</noc> </noc>
<application> <application>
<benchmark>task</benchmark> <benchmark>task</benchmark>
<dataFile>config/mobilenet/data_R1000.xml</dataFile> <dataFile>config/mobilenet/data_R1000_conf_non_opt.xml</dataFile>
<mapFile>config/mobilenet/map.xml</mapFile> <mapFile>config/mobilenet/map_conf_non_opt.xml</mapFile>
</application> </application>
<verbose> <verbose>
<processingElements> <processingElements>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,306 @@
<?xml version="1.0" ?>
<map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<bind>
<task value="0"/>
<node value="0"/>
</bind>
<bind>
<task value="1"/>
<node value="0"/>
</bind>
<bind>
<task value="2"/>
<node value="1"/>
</bind>
<bind>
<task value="3"/>
<node value="1"/>
</bind>
<bind>
<task value="4"/>
<node value="2"/>
</bind>
<bind>
<task value="5"/>
<node value="2"/>
</bind>
<bind>
<task value="6"/>
<node value="3"/>
</bind>
<bind>
<task value="7"/>
<node value="3"/>
</bind>
<bind>
<task value="8"/>
<node value="4"/>
</bind>
<bind>
<task value="9"/>
<node value="4"/>
</bind>
<bind>
<task value="10"/>
<node value="5"/>
</bind>
<bind>
<task value="11"/>
<node value="5"/>
</bind>
<bind>
<task value="12"/>
<node value="6"/>
</bind>
<bind>
<task value="13"/>
<node value="6"/>
</bind>
<bind>
<task value="14"/>
<node value="7"/>
</bind>
<bind>
<task value="15"/>
<node value="7"/>
</bind>
<bind>
<task value="16"/>
<node value="8"/>
</bind>
<bind>
<task value="17"/>
<node value="8"/>
</bind>
<bind>
<task value="18"/>
<node value="9"/>
</bind>
<bind>
<task value="19"/>
<node value="9"/>
</bind>
<bind>
<task value="20"/>
<node value="0"/>
</bind>
<bind>
<task value="21"/>
<node value="0"/>
</bind>
<bind>
<task value="22"/>
<node value="1"/>
</bind>
<bind>
<task value="23"/>
<node value="1"/>
</bind>
<bind>
<task value="24"/>
<node value="1"/>
</bind>
<bind>
<task value="25"/>
<node value="2"/>
</bind>
<bind>
<task value="26"/>
<node value="2"/>
</bind>
<bind>
<task value="27"/>
<node value="2"/>
</bind>
<bind>
<task value="28"/>
<node value="3"/>
</bind>
<bind>
<task value="29"/>
<node value="3"/>
</bind>
<bind>
<task value="30"/>
<node value="3"/>
</bind>
<bind>
<task value="31"/>
<node value="7"/>
</bind>
<bind>
<task value="32"/>
<node value="6"/>
</bind>
<bind>
<task value="33"/>
<node value="5"/>
</bind>
<bind>
<task value="34"/>
<node value="4"/>
</bind>
<bind>
<task value="35"/>
<node value="4"/>
</bind>
<bind>
<task value="36"/>
<node value="4"/>
</bind>
<bind>
<task value="37"/>
<node value="5"/>
</bind>
<bind>
<task value="38"/>
<node value="5"/>
</bind>
<bind>
<task value="39"/>
<node value="5"/>
</bind>
<bind>
<task value="40"/>
<node value="6"/>
</bind>
<bind>
<task value="41"/>
<node value="6"/>
</bind>
<bind>
<task value="42"/>
<node value="6"/>
</bind>
<bind>
<task value="43"/>
<node value="7"/>
</bind>
<bind>
<task value="44"/>
<node value="7"/>
</bind>
<bind>
<task value="45"/>
<node value="7"/>
</bind>
<bind>
<task value="46"/>
<node value="11"/>
</bind>
<bind>
<task value="47"/>
<node value="10"/>
</bind>
<bind>
<task value="48"/>
<node value="9"/>
</bind>
<bind>
<task value="49"/>
<node value="8"/>
</bind>
<bind>
<task value="50"/>
<node value="8"/>
</bind>
<bind>
<task value="51"/>
<node value="8"/>
</bind>
<bind>
<task value="52"/>
<node value="9"/>
</bind>
<bind>
<task value="53"/>
<node value="9"/>
</bind>
<bind>
<task value="54"/>
<node value="9"/>
</bind>
<bind>
<task value="55"/>
<node value="10"/>
</bind>
<bind>
<task value="56"/>
<node value="10"/>
</bind>
<bind>
<task value="57"/>
<node value="10"/>
</bind>
<bind>
<task value="58"/>
<node value="11"/>
</bind>
<bind>
<task value="59"/>
<node value="11"/>
</bind>
<bind>
<task value="60"/>
<node value="11"/>
</bind>
<bind>
<task value="61"/>
<node value="15"/>
</bind>
<bind>
<task value="62"/>
<node value="14"/>
</bind>
<bind>
<task value="63"/>
<node value="13"/>
</bind>
<bind>
<task value="64"/>
<node value="12"/>
</bind>
<bind>
<task value="65"/>
<node value="12"/>
</bind>
<bind>
<task value="66"/>
<node value="12"/>
</bind>
<bind>
<task value="67"/>
<node value="13"/>
</bind>
<bind>
<task value="68"/>
<node value="13"/>
</bind>
<bind>
<task value="69"/>
<node value="13"/>
</bind>
<bind>
<task value="70"/>
<node value="14"/>
</bind>
<bind>
<task value="71"/>
<node value="14"/>
</bind>
<bind>
<task value="72"/>
<node value="14"/>
</bind>
<bind>
<task value="73"/>
<node value="15"/>
</bind>
<bind>
<task value="74"/>
<node value="0"/>
</bind>
</map>

View file

@ -0,0 +1,343 @@
<?xml version="1.0" ?>
<map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<bind>
<task value="0"/>
<node value="0"/>
</bind>
<bind>
<task value="1"/>
<node value="0"/>
</bind>
<bind>
<task value="2"/>
<node value="1"/>
</bind>
<bind>
<task value="3"/>
<node value="1"/>
</bind>
<bind>
<task value="4"/>
<node value="2"/>
</bind>
<bind>
<task value="5"/>
<node value="2"/>
</bind>
<bind>
<task value="6"/>
<node value="3"/>
</bind>
<bind>
<task value="7"/>
<node value="3"/>
</bind>
<bind>
<task value="8"/>
<node value="4"/>
</bind>
<bind>
<task value="9"/>
<node value="4"/>
</bind>
<bind>
<task value="10"/>
<node value="5"/>
</bind>
<bind>
<task value="11"/>
<node value="5"/>
</bind>
<bind>
<task value="12"/>
<node value="6"/>
</bind>
<bind>
<task value="13"/>
<node value="6"/>
</bind>
<bind>
<task value="14"/>
<node value="7"/>
</bind>
<bind>
<task value="15"/>
<node value="7"/>
</bind>
<bind>
<task value="16"/>
<node value="8"/>
</bind>
<bind>
<task value="17"/>
<node value="8"/>
</bind>
<bind>
<task value="18"/>
<node value="9"/>
</bind>
<bind>
<task value="19"/>
<node value="9"/>
</bind>
<bind>
<task value="20"/>
<node value="0"/>
</bind>
<bind>
<task value="21"/>
<node value="0"/>
</bind>
<bind>
<task value="22"/>
<node value="4"/>
</bind>
<bind>
<task value="23"/>
<node value="1"/>
</bind>
<bind>
<task value="24"/>
<node value="1"/>
</bind>
<bind>
<task value="25"/>
<node value="5"/>
</bind>
<bind>
<task value="26"/>
<node value="2"/>
</bind>
<bind>
<task value="27"/>
<node value="2"/>
</bind>
<bind>
<task value="28"/>
<node value="6"/>
</bind>
<bind>
<task value="29"/>
<node value="3"/>
</bind>
<bind>
<task value="30"/>
<node value="3"/>
</bind>
<bind>
<task value="31"/>
<node value="7"/>
</bind>
<bind>
<task value="32"/>
<node value="6"/>
</bind>
<bind>
<task value="33"/>
<node value="5"/>
</bind>
<bind>
<task value="34"/>
<node value="4"/>
</bind>
<bind>
<task value="35"/>
<node value="4"/>
</bind>
<bind>
<task value="36"/>
<node value="4"/>
</bind>
<bind>
<task value="37"/>
<node value="8"/>
</bind>
<bind>
<task value="38"/>
<node value="5"/>
</bind>
<bind>
<task value="39"/>
<node value="5"/>
</bind>
<bind>
<task value="40"/>
<node value="9"/>
</bind>
<bind>
<task value="41"/>
<node value="6"/>
</bind>
<bind>
<task value="42"/>
<node value="6"/>
</bind>
<bind>
<task value="43"/>
<node value="10"/>
</bind>
<bind>
<task value="44"/>
<node value="7"/>
</bind>
<bind>
<task value="45"/>
<node value="7"/>
</bind>
<bind>
<task value="46"/>
<node value="11"/>
</bind>
<bind>
<task value="47"/>
<node value="10"/>
</bind>
<bind>
<task value="48"/>
<node value="9"/>
</bind>
<bind>
<task value="49"/>
<node value="8"/>
</bind>
<bind>
<task value="50"/>
<node value="8"/>
</bind>
<bind>
<task value="51"/>
<node value="8"/>
</bind>
<bind>
<task value="52"/>
<node value="12"/>
</bind>
<bind>
<task value="53"/>
<node value="9"/>
</bind>
<bind>
<task value="54"/>
<node value="9"/>
</bind>
<bind>
<task value="55"/>
<node value="13"/>
</bind>
<bind>
<task value="56"/>
<node value="10"/>
</bind>
<bind>
<task value="57"/>
<node value="10"/>
</bind>
<bind>
<task value="58"/>
<node value="14"/>
</bind>
<bind>
<task value="59"/>
<node value="11"/>
</bind>
<bind>
<task value="60"/>
<node value="11"/>
</bind>
<bind>
<task value="61"/>
<node value="15"/>
</bind>
<bind>
<task value="62"/>
<node value="14"/>
</bind>
<bind>
<task value="63"/>
<node value="13"/>
</bind>
<bind>
<task value="64"/>
<node value="12"/>
</bind>
<bind>
<task value="65"/>
<node value="12"/>
</bind>
<bind>
<task value="66"/>
<node value="12"/>
</bind>
<bind>
<task value="67"/>
<node value="8"/>
</bind>
<bind>
<task value="68"/>
<node value="4"/>
</bind>
<bind>
<task value="69"/>
<node value="0"/>
</bind>
<bind>
<task value="70"/>
<node value="1"/>
</bind>
<bind>
<task value="71"/>
<node value="13"/>
</bind>
<bind>
<task value="72"/>
<node value="13"/>
</bind>
<bind>
<task value="73"/>
<node value="9"/>
</bind>
<bind>
<task value="74"/>
<node value="5"/>
</bind>
<bind>
<task value="75"/>
<node value="1"/>
</bind>
<bind>
<task value="76"/>
<node value="2"/>
</bind>
<bind>
<task value="77"/>
<node value="14"/>
</bind>
<bind>
<task value="78"/>
<node value="14"/>
</bind>
<bind>
<task value="79"/>
<node value="10"/>
</bind>
<bind>
<task value="80"/>
<node value="6"/>
</bind>
<bind>
<task value="81"/>
<node value="2"/>
</bind>
<bind>
<task value="82"/>
<node value="3"/>
</bind>
<bind>
<task value="83"/>
<node value="0"/>
</bind>
</map>

1612
config/mobilenet/net_conf.xml Executable file

File diff suppressed because it is too large Load diff

View file

@ -5,15 +5,15 @@
<outputToFile value="true">report</outputToFile> <outputToFile value="true">report</outputToFile>
</general> </general>
<noc> <noc>
<nocFile>config/ai_test2/net.xml</nocFile> <nocFile>config/mobilenet_fb/net_conf.xml</nocFile>
<flitsPerPacket value="1"/> <flitsPerPacket value="1"/>
<bitWidth value="32"/> <bitWidth value="32"/>
<Vdd value="5"/> <Vdd value="5"/>
</noc> </noc>
<application> <application>
<benchmark>task</benchmark> <benchmark>task</benchmark>
<dataFile>config/ai_test2/data.xml</dataFile> <dataFile>config/mobilenet_fb/data_conf.xml</dataFile>
<mapFile>config/ai_test2/map.xml</mapFile> <mapFile>config/mobilenet_fb/map_conf.xml</mapFile>
</application> </application>
<verbose> <verbose>
<processingElements> <processingElements>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,342 @@
<?xml version="1.0" ?>
<map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<bind>
<task value="0"/>
<node value="0"/>
</bind>
<bind>
<task value="1"/>
<node value="0"/>
</bind>
<bind>
<task value="2"/>
<node value="1"/>
</bind>
<bind>
<task value="3"/>
<node value="1"/>
</bind>
<bind>
<task value="4"/>
<node value="2"/>
</bind>
<bind>
<task value="5"/>
<node value="2"/>
</bind>
<bind>
<task value="6"/>
<node value="3"/>
</bind>
<bind>
<task value="7"/>
<node value="3"/>
</bind>
<bind>
<task value="8"/>
<node value="4"/>
</bind>
<bind>
<task value="9"/>
<node value="4"/>
</bind>
<bind>
<task value="10"/>
<node value="5"/>
</bind>
<bind>
<task value="11"/>
<node value="5"/>
</bind>
<bind>
<task value="12"/>
<node value="6"/>
</bind>
<bind>
<task value="13"/>
<node value="6"/>
</bind>
<bind>
<task value="14"/>
<node value="7"/>
</bind>
<bind>
<task value="15"/>
<node value="7"/>
</bind>
<bind>
<task value="16"/>
<node value="8"/>
</bind>
<bind>
<task value="17"/>
<node value="8"/>
</bind>
<bind>
<task value="18"/>
<node value="9"/>
</bind>
<bind>
<task value="19"/>
<node value="9"/>
</bind>
<bind>
<task value="20"/>
<node value="0"/>
</bind>
<bind>
<task value="21"/>
<node value="1"/>
</bind>
<bind>
<task value="22"/>
<node value="2"/>
</bind>
<bind>
<task value="23"/>
<node value="3"/>
</bind>
<bind>
<task value="24"/>
<node value="4"/>
</bind>
<bind>
<task value="25"/>
<node value="5"/>
</bind>
<bind>
<task value="26"/>
<node value="6"/>
</bind>
<bind>
<task value="27"/>
<node value="7"/>
</bind>
<bind>
<task value="28"/>
<node value="8"/>
</bind>
<bind>
<task value="29"/>
<node value="9"/>
</bind>
<bind>
<task value="30"/>
<node value="0"/>
</bind>
<bind>
<task value="31"/>
<node value="0"/>
</bind>
<bind>
<task value="32"/>
<node value="1"/>
</bind>
<bind>
<task value="33"/>
<node value="1"/>
</bind>
<bind>
<task value="34"/>
<node value="1"/>
</bind>
<bind>
<task value="35"/>
<node value="2"/>
</bind>
<bind>
<task value="36"/>
<node value="2"/>
</bind>
<bind>
<task value="37"/>
<node value="2"/>
</bind>
<bind>
<task value="38"/>
<node value="3"/>
</bind>
<bind>
<task value="39"/>
<node value="3"/>
</bind>
<bind>
<task value="40"/>
<node value="3"/>
</bind>
<bind>
<task value="41"/>
<node value="7"/>
</bind>
<bind>
<task value="42"/>
<node value="6"/>
</bind>
<bind>
<task value="43"/>
<node value="5"/>
</bind>
<bind>
<task value="44"/>
<node value="4"/>
</bind>
<bind>
<task value="45"/>
<node value="4"/>
</bind>
<bind>
<task value="46"/>
<node value="4"/>
</bind>
<bind>
<task value="47"/>
<node value="5"/>
</bind>
<bind>
<task value="48"/>
<node value="5"/>
</bind>
<bind>
<task value="49"/>
<node value="5"/>
</bind>
<bind>
<task value="50"/>
<node value="6"/>
</bind>
<bind>
<task value="51"/>
<node value="6"/>
</bind>
<bind>
<task value="52"/>
<node value="6"/>
</bind>
<bind>
<task value="53"/>
<node value="7"/>
</bind>
<bind>
<task value="54"/>
<node value="7"/>
</bind>
<bind>
<task value="55"/>
<node value="7"/>
</bind>
<bind>
<task value="56"/>
<node value="11"/>
</bind>
<bind>
<task value="57"/>
<node value="10"/>
</bind>
<bind>
<task value="58"/>
<node value="9"/>
</bind>
<bind>
<task value="59"/>
<node value="8"/>
</bind>
<bind>
<task value="60"/>
<node value="8"/>
</bind>
<bind>
<task value="61"/>
<node value="8"/>
</bind>
<bind>
<task value="62"/>
<node value="9"/>
</bind>
<bind>
<task value="63"/>
<node value="9"/>
</bind>
<bind>
<task value="64"/>
<node value="9"/>
</bind>
<bind>
<task value="65"/>
<node value="10"/>
</bind>
<bind>
<task value="66"/>
<node value="10"/>
</bind>
<bind>
<task value="67"/>
<node value="10"/>
</bind>
<bind>
<task value="68"/>
<node value="11"/>
</bind>
<bind>
<task value="69"/>
<node value="11"/>
</bind>
<bind>
<task value="70"/>
<node value="11"/>
</bind>
<bind>
<task value="71"/>
<node value="15"/>
</bind>
<bind>
<task value="72"/>
<node value="14"/>
</bind>
<bind>
<task value="73"/>
<node value="13"/>
</bind>
<bind>
<task value="74"/>
<node value="12"/>
</bind>
<bind>
<task value="75"/>
<node value="12"/>
</bind>
<bind>
<task value="76"/>
<node value="12"/>
</bind>
<bind>
<task value="77"/>
<node value="13"/>
</bind>
<bind>
<task value="78"/>
<node value="13"/>
</bind>
<bind>
<task value="79"/>
<node value="13"/>
</bind>
<bind>
<task value="80"/>
<node value="14"/>
</bind>
<bind>
<task value="81"/>
<node value="14"/>
</bind>
<bind>
<task value="82"/>
<node value="14"/>
</bind>
<bind>
<task value="83"/>
<node value="15"/>
</bind>
</map>

View file

@ -0,0 +1,377 @@
<?xml version="1.0" ?>
<map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<bind>
<task value="0"/>
<node value="0"/>
</bind>
<bind>
<task value="1"/>
<node value="0"/>
</bind>
<bind>
<task value="2"/>
<node value="1"/>
</bind>
<bind>
<task value="3"/>
<node value="1"/>
</bind>
<bind>
<task value="4"/>
<node value="2"/>
</bind>
<bind>
<task value="5"/>
<node value="2"/>
</bind>
<bind>
<task value="6"/>
<node value="3"/>
</bind>
<bind>
<task value="7"/>
<node value="3"/>
</bind>
<bind>
<task value="8"/>
<node value="4"/>
</bind>
<bind>
<task value="9"/>
<node value="4"/>
</bind>
<bind>
<task value="10"/>
<node value="5"/>
</bind>
<bind>
<task value="11"/>
<node value="5"/>
</bind>
<bind>
<task value="12"/>
<node value="6"/>
</bind>
<bind>
<task value="13"/>
<node value="6"/>
</bind>
<bind>
<task value="14"/>
<node value="7"/>
</bind>
<bind>
<task value="15"/>
<node value="7"/>
</bind>
<bind>
<task value="16"/>
<node value="8"/>
</bind>
<bind>
<task value="17"/>
<node value="8"/>
</bind>
<bind>
<task value="18"/>
<node value="9"/>
</bind>
<bind>
<task value="19"/>
<node value="9"/>
</bind>
<bind>
<task value="20"/>
<node value="0"/>
</bind>
<bind>
<task value="21"/>
<node value="1"/>
</bind>
<bind>
<task value="22"/>
<node value="2"/>
</bind>
<bind>
<task value="23"/>
<node value="3"/>
</bind>
<bind>
<task value="24"/>
<node value="4"/>
</bind>
<bind>
<task value="25"/>
<node value="5"/>
</bind>
<bind>
<task value="26"/>
<node value="6"/>
</bind>
<bind>
<task value="27"/>
<node value="7"/>
</bind>
<bind>
<task value="28"/>
<node value="8"/>
</bind>
<bind>
<task value="29"/>
<node value="9"/>
</bind>
<bind>
<task value="30"/>
<node value="0"/>
</bind>
<bind>
<task value="31"/>
<node value="0"/>
</bind>
<bind>
<task value="32"/>
<node value="4"/>
</bind>
<bind>
<task value="33"/>
<node value="1"/>
</bind>
<bind>
<task value="34"/>
<node value="1"/>
</bind>
<bind>
<task value="35"/>
<node value="5"/>
</bind>
<bind>
<task value="36"/>
<node value="2"/>
</bind>
<bind>
<task value="37"/>
<node value="2"/>
</bind>
<bind>
<task value="38"/>
<node value="6"/>
</bind>
<bind>
<task value="39"/>
<node value="3"/>
</bind>
<bind>
<task value="40"/>
<node value="3"/>
</bind>
<bind>
<task value="41"/>
<node value="7"/>
</bind>
<bind>
<task value="42"/>
<node value="6"/>
</bind>
<bind>
<task value="43"/>
<node value="5"/>
</bind>
<bind>
<task value="44"/>
<node value="4"/>
</bind>
<bind>
<task value="45"/>
<node value="4"/>
</bind>
<bind>
<task value="46"/>
<node value="4"/>
</bind>
<bind>
<task value="47"/>
<node value="8"/>
</bind>
<bind>
<task value="48"/>
<node value="5"/>
</bind>
<bind>
<task value="49"/>
<node value="5"/>
</bind>
<bind>
<task value="50"/>
<node value="9"/>
</bind>
<bind>
<task value="51"/>
<node value="6"/>
</bind>
<bind>
<task value="52"/>
<node value="6"/>
</bind>
<bind>
<task value="53"/>
<node value="10"/>
</bind>
<bind>
<task value="54"/>
<node value="7"/>
</bind>
<bind>
<task value="55"/>
<node value="7"/>
</bind>
<bind>
<task value="56"/>
<node value="11"/>
</bind>
<bind>
<task value="57"/>
<node value="10"/>
</bind>
<bind>
<task value="58"/>
<node value="9"/>
</bind>
<bind>
<task value="59"/>
<node value="8"/>
</bind>
<bind>
<task value="60"/>
<node value="8"/>
</bind>
<bind>
<task value="61"/>
<node value="8"/>
</bind>
<bind>
<task value="62"/>
<node value="12"/>
</bind>
<bind>
<task value="63"/>
<node value="9"/>
</bind>
<bind>
<task value="64"/>
<node value="9"/>
</bind>
<bind>
<task value="65"/>
<node value="13"/>
</bind>
<bind>
<task value="66"/>
<node value="10"/>
</bind>
<bind>
<task value="67"/>
<node value="10"/>
</bind>
<bind>
<task value="68"/>
<node value="14"/>
</bind>
<bind>
<task value="69"/>
<node value="11"/>
</bind>
<bind>
<task value="70"/>
<node value="11"/>
</bind>
<bind>
<task value="71"/>
<node value="15"/>
</bind>
<bind>
<task value="72"/>
<node value="14"/>
</bind>
<bind>
<task value="73"/>
<node value="13"/>
</bind>
<bind>
<task value="74"/>
<node value="12"/>
</bind>
<bind>
<task value="75"/>
<node value="12"/>
</bind>
<bind>
<task value="76"/>
<node value="12"/>
</bind>
<bind>
<task value="77"/>
<node value="8"/>
</bind>
<bind>
<task value="78"/>
<node value="4"/>
</bind>
<bind>
<task value="79"/>
<node value="0"/>
</bind>
<bind>
<task value="80"/>
<node value="1"/>
</bind>
<bind>
<task value="81"/>
<node value="13"/>
</bind>
<bind>
<task value="82"/>
<node value="13"/>
</bind>
<bind>
<task value="83"/>
<node value="9"/>
</bind>
<bind>
<task value="84"/>
<node value="5"/>
</bind>
<bind>
<task value="85"/>
<node value="1"/>
</bind>
<bind>
<task value="86"/>
<node value="2"/>
</bind>
<bind>
<task value="87"/>
<node value="14"/>
</bind>
<bind>
<task value="88"/>
<node value="14"/>
</bind>
<bind>
<task value="89"/>
<node value="10"/>
</bind>
<bind>
<task value="90"/>
<node value="6"/>
</bind>
<bind>
<task value="91"/>
<node value="2"/>
</bind>
<bind>
<task value="92"/>
<node value="3"/>
</bind>
</map>

1612
config/mobilenet_fb/net_conf.xml Executable file

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@
<outputToFile value="true">report</outputToFile> <outputToFile value="true">report</outputToFile>
</general> </general>
<noc> <noc>
<nocFile>config/simple_test/net.xml</nocFile> <nocFile>config/simple_2_layer_test/net.xml</nocFile>
<flitsPerPacket value="1"/> <flitsPerPacket value="1"/>
<bitWidth value="32"/> <bitWidth value="32"/>
<Vdd value="5"/> <Vdd value="5"/>

View file

@ -179,20 +179,10 @@
<requirement id="0"> <requirement id="0">
<type value="1"/> <type value="1"/>
<source value="4"/> <source value="4"/>
<count max="1" min="1"/> <count max="3" min="3"/>
</requirement>
<requirement id="1">
<type value="1"/>
<source value="4"/>
<count max="1" min="1"/>
</requirement>
<requirement id="2">
<type value="1"/>
<source value="4"/>
<count max="1" min="1"/>
</requirement> </requirement>
</requires> </requires>
</task> </task>
<!--multiple requirement of the same type seems to not work-->
</tasks> </tasks>
</data> </data>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,597 @@
<?xml version="1.0" ?>
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dataTypes>
<dataType id="0">
<name value="Type_task_0"/>
</dataType>
<dataType id="1">
<name value="Type_task_1"/>
</dataType>
<dataType id="2">
<name value="Type_task_2"/>
</dataType>
<dataType id="3">
<name value="Type_task_3"/>
</dataType>
<dataType id="4">
<name value="Type_task_4"/>
</dataType>
<dataType id="5">
<name value="Type_task_5"/>
</dataType>
<dataType id="6">
<name value="Type_task_6"/>
</dataType>
<dataType id="7">
<name value="Type_task_7"/>
</dataType>
<dataType id="8">
<name value="Type_task_8"/>
</dataType>
<dataType id="9">
<name value="Type_task_9"/>
</dataType>
<dataType id="10">
<name value="Type_task_10"/>
</dataType>
<dataType id="11">
<name value="Type_task_11"/>
</dataType>
<dataType id="12">
<name value="Type_task_12"/>
</dataType>
<dataType id="13">
<name value="Type_task_13"/>
</dataType>
<dataType id="14">
<name value="Type_task_14"/>
</dataType>
<dataType id="15">
<name value="Type_task_15"/>
</dataType>
<dataType id="16">
<name value="Type_task_16"/>
</dataType>
<dataType id="17">
<name value="Type_task_17"/>
</dataType>
<dataType id="18">
<name value="Type_task_18"/>
</dataType>
<dataType id="19">
<name value="Type_task_19"/>
</dataType>
</dataTypes>
<tasks>
<task id="0">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="110" max="110"/>
<interval min="20" max="20"/>
<count min="402" max="402"/>
<type value="0"/>
<task value="1"/>
</destination>
</destinations>
</possibility>
</generates>
<requires/>
</task>
<task id="1">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="37" max="37"/>
<interval min="20" max="20"/>
<count min="402" max="402"/>
<type value="1"/>
<task value="2"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="0"/>
<source value="0"/>
<count min="402" max="402"/>
</requirement>
</requires>
</task>
<task id="2">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="65" max="65"/>
<interval min="20" max="20"/>
<count min="201" max="201"/>
<type value="2"/>
<task value="3"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="1"/>
<source value="1"/>
<count min="402" max="402"/>
</requirement>
</requires>
</task>
<task id="3">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="195" max="195"/>
<interval min="20" max="20"/>
<count min="1205" max="1205"/>
<type value="3"/>
<task value="4"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="2"/>
<source value="2"/>
<count min="201" max="201"/>
</requirement>
</requires>
</task>
<task id="4">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="28" max="28"/>
<interval min="20" max="20"/>
<count min="302" max="302"/>
<type value="4"/>
<task value="5"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="3"/>
<source value="3"/>
<count min="1205" max="1205"/>
</requirement>
</requires>
</task>
<task id="5">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="73" max="73"/>
<interval min="20" max="20"/>
<count min="76" max="76"/>
<type value="5"/>
<task value="6"/>
</destination>
<destination id="1">
<delay min="73" max="73"/>
<interval min="20" max="20"/>
<count min="76" max="76"/>
<type value="5"/>
<task value="9"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="4"/>
<source value="4"/>
<count min="302" max="302"/>
</requirement>
</requires>
</task>
<task id="6">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="110" max="110"/>
<interval min="20" max="20"/>
<count min="452" max="452"/>
<type value="6"/>
<task value="7"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="5"/>
<source value="5"/>
<count min="76" max="76"/>
</requirement>
</requires>
</task>
<task id="7">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="41" max="41"/>
<interval min="20" max="20"/>
<count min="452" max="452"/>
<type value="7"/>
<task value="8"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="6"/>
<source value="6"/>
<count min="452" max="452"/>
</requirement>
</requires>
</task>
<task id="8">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="110" max="110"/>
<interval min="20" max="20"/>
<count min="76" max="76"/>
<type value="8"/>
<task value="9"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="7"/>
<source value="7"/>
<count min="452" max="452"/>
</requirement>
</requires>
</task>
<task id="9">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="1" max="1"/>
<interval min="20" max="20"/>
<count min="76" max="76"/>
<type value="9"/>
<task value="10"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="5"/>
<source value="5"/>
<count min="76" max="76"/>
</requirement>
<requirement id="1">
<type value="8"/>
<source value="8"/>
<count min="76" max="76"/>
</requirement>
</requires>
</task>
<task id="10">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="110" max="110"/>
<interval min="20" max="20"/>
<count min="452" max="452"/>
<type value="10"/>
<task value="11"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="9"/>
<source value="9"/>
<count min="76" max="76"/>
</requirement>
</requires>
</task>
<task id="11">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="11" max="11"/>
<interval min="20" max="20"/>
<count min="113" max="113"/>
<type value="11"/>
<task value="12"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="10"/>
<source value="10"/>
<count min="452" max="452"/>
</requirement>
</requires>
</task>
<task id="12">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="37" max="37"/>
<interval min="20" max="20"/>
<count min="26" max="26"/>
<type value="12"/>
<task value="13"/>
</destination>
<destination id="1">
<delay min="37" max="37"/>
<interval min="20" max="20"/>
<count min="26" max="26"/>
<type value="12"/>
<task value="16"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="11"/>
<source value="11"/>
<count min="113" max="113"/>
</requirement>
</requires>
</task>
<task id="13">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="49" max="49"/>
<interval min="20" max="20"/>
<count min="151" max="151"/>
<type value="13"/>
<task value="14"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="12"/>
<source value="12"/>
<count min="26" max="26"/>
</requirement>
</requires>
</task>
<task id="14">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="14" max="14"/>
<interval min="20" max="20"/>
<count min="151" max="151"/>
<type value="14"/>
<task value="15"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="13"/>
<source value="13"/>
<count min="151" max="151"/>
</requirement>
</requires>
</task>
<task id="15">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="49" max="49"/>
<interval min="20" max="20"/>
<count min="26" max="26"/>
<type value="15"/>
<task value="16"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="14"/>
<source value="14"/>
<count min="151" max="151"/>
</requirement>
</requires>
</task>
<task id="16">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="1" max="1"/>
<interval min="20" max="20"/>
<count min="26" max="26"/>
<type value="16"/>
<task value="17"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="12"/>
<source value="12"/>
<count min="26" max="26"/>
</requirement>
<requirement id="1">
<type value="15"/>
<source value="15"/>
<count min="26" max="26"/>
</requirement>
</requires>
</task>
<task id="17">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="49" max="49"/>
<interval min="20" max="20"/>
<count min="151" max="151"/>
<type value="17"/>
<task value="18"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="16"/>
<source value="16"/>
<count min="26" max="26"/>
</requirement>
</requires>
</task>
<task id="18">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations>
<destination id="0">
<delay min="14" max="14"/>
<interval min="20" max="20"/>
<count min="151" max="151"/>
<type value="18"/>
<task value="19"/>
</destination>
</destinations>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="17"/>
<source value="17"/>
<count min="151" max="151"/>
</requirement>
</requires>
</task>
<task id="19">
<start min="0" max="0"/>
<duration min="-1" max="-1"/>
<repeat min="10" max="10"/>
<generates>
<possibility id="0">
<probability value="1"/>
<destinations/>
</possibility>
</generates>
<requires>
<requirement id="0">
<type value="18"/>
<source value="18"/>
<count min="151" max="151"/>
</requirement>
</requires>
</task>
</tasks>
</data>

View file

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

View file

@ -1,19 +1,47 @@
from utils import * from utils import *
# optimal
#sourc_x = [0,0,0,0,1,1,1,1,2,2,2,2,3,3,3]
#sourc_y = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2]
sourc_x = 0 #dest_x = [0,0,0,1,1,1,1,2,2,2,2,3,3,3,3]
sourc_y = 1 #dest_y = [1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
dest_x = 3 # non optimal
dest_y = 3 sourc_x = [0,0,0,0,1,1,1,1,2,2,2,2,3,3,3]
sourc_y = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2]
rout_type = 0 dest_x = [1,1,1,1,2,2,2,2,3,3,3,3,0,0,0]
dest_y = [0,1,2,0,0,1,2,0,0,1,2,0,1,2,3]
id = 0 routing_typ = 0 # xy routing
print("**********************FOR data.xml**********************")
id = write_config_tasks(sourc_x, sourc_y, dest_x, dest_y, id, rout_type)
print()
print("**********************FOR map.xml**********************") start_task = 29
write_map(sourc_x, sourc_y, dest_x, dest_y, id, rout_type) start_type = 48
#start_conf_type_id = 20
start_pack_type_id = 64
spec_task_id = 20
use_spec_task = True
if use_spec_task:
start_task += 1
start_type += 1
data_file = "./in/data.xml"
map_file = "./in/map.xml"
config_task_writer = ConfigTaskWriter([sourc_x[0],sourc_y[0]],
[dest_x[0],dest_y[0]], routing_typ, start_task, start_type, #start_conf_type_id,
start_pack_type_id, use_spec_task, spec_task_id)
for i in range(0, len(sourc_x)):
config_task_writer.update_sourc_dest([sourc_x[i],sourc_y[i]],
[dest_x[i],dest_y[i]])
config_task_writer.write_config_tasks()
config_task_writer.write_map()
config_task_writer.write_last_task()
config_task_writer.write_types()
#config_task_writer.write_stream_types(data_file, map_file)
config_task_writer.write_non_opt_stream_types(data_file, map_file)
config_task_writer.write_to_file()

View file

@ -2,8 +2,8 @@ from enum import Enum
MAX_ROUT_Y = 4 MAX_ROUT_Y = 4
GEN_TASK_START = """ <tasks> GEN_TASK_START = """
<task id="0"> <task id="{}">
<start min="0" max="0"/> <start min="0" max="0"/>
<duration min="-1" max="-1"/> <duration min="-1" max="-1"/>
<repeat min="1" max="1"/> <repeat min="1" max="1"/>
@ -21,7 +21,6 @@ REQ_TASK_START = """ <task id="{}">
<duration max="-1" min="-1"/> <duration max="-1" min="-1"/>
<repeat max="1" min="1"/>""" <repeat max="1" min="1"/>"""
REQ_TASK_END = " </task>"
LAST_TASK = """ <task id="{}"> LAST_TASK = """ <task id="{}">
<start max="0" min="0"/> <start max="0" min="0"/>
@ -29,8 +28,8 @@ LAST_TASK = """ <task id="{}">
<repeat max="1" min="1"/> <repeat max="1" min="1"/>
<requires> <requires>
<requirement id="0"> <requirement id="0">
<type value="0"/> <type value="{}"/>
<source value="0"/> <source value="{}"/>
<count max="{}" min="{}"/> <count max="{}" min="{}"/>
</requirement> </requirement>
</requires> </requires>
@ -38,8 +37,8 @@ LAST_TASK = """ <task id="{}">
REQ_TASK_REQ = """ <requires> REQ_TASK_REQ = """ <requires>
<requirement id="0"> <requirement id="0">
<type value="2"/> <type value="{}"/>
<source value="0"/> <source value="{}"/>
<count max="1" min="1"/> <count max="1" min="1"/>
</requirement> </requirement>
</requires>""" </requires>"""
@ -49,23 +48,24 @@ REQ_TASK_GEN = """ <generates>
<probability value="1"/> <probability value="1"/>
<destinations> <destinations>
<destination id="0"> <destination id="0">
<delay min="0" max="100"/> <delay min="50" max="50"/>
<interval min="100" max="100"/> <interval min="20" max="20"/>
<count min="1" max="1"/> <count min="1" max="1"/>
<type value="0"/> <type value="{}"/>
<task value="{}"/> <task value="{}"/>
</destination> </destination>
</destinations> </destinations>
</possibility> </possibility>
</generates>""" </generates>
</task>"""
DEST_HEADER = " <destination id=\"{}\">" DEST_HEADER = " <destination id=\"{}\">"
DEST_H_END = " </destination>" DEST_H_END = " </destination>"
DELAY_TAG = " <delay min=\"0\" max=\"100\"/>" DELAY_TAG = " <delay min=\"50\" max=\"50\"/>"
INTERVAL_TAG = " <interval min=\"100\" max=\"100\"/>" INTERVAL_TAG = " <interval min=\"20\" max=\"20\"/>"
COUNT_TAG = " <count min=\"1\" max=\"1\"/>" COUNT_TAG = " <count min=\"1\" max=\"1\"/>"
TYPE_TAG = " <type value=\"2\"/>" TYPE_TAG = " <type value=\"{}\"/>"
TASK_TAG = " <task value=\"{}\"/>" TASK_TAG = " <task value=\"{}\"/>"
CONFIG_TAG = " <config link=\"{}\" destination=\"{}\"/>" CONFIG_TAG = " <config link=\"{}\" destination=\"{}\"/>"
@ -76,6 +76,18 @@ BIND = """ <bind>
</bind>""" </bind>"""
CONF_TYPE = """ <dataType id="{}">
<name value="ConfigRouter"/>
</dataType>"""
PACK_TYPE = """ <dataType id="{}">
<name value="Type_task_{}"/>
</dataType>"""
STREAM_TYPE = """ <dataType id="{}">
<name value="Type_task_{}_Stream"/>
</dataType>"""
class DIRS(Enum): class DIRS(Enum):
LOCAL = 0 LOCAL = 0
EAST = 1 EAST = 1

View file

@ -1,107 +1,275 @@
from templates import * from templates import *
from bs4 import BeautifulSoup
def get_opposs_dir(dir): def get_opposs_dir(dir):
if DIRS.LOCAL: if dir == DIRS.LOCAL:
return DIRS.LOCAL return DIRS.LOCAL
elif DIRS.EAST: elif dir == DIRS.EAST:
return DIRS.WEST return DIRS.WEST
elif DIRS.WEST: elif dir == DIRS.WEST:
return DIRS.EAST return DIRS.EAST
elif DIRS.NORTH: elif dir == DIRS.NORTH:
return DIRS.SOUTH return DIRS.SOUTH
elif DIRS.SOUTH: elif dir == DIRS.SOUTH:
return DIRS.NORTH return DIRS.NORTH
elif DIRS.UP: elif dir == DIRS.UP:
return DIRS.DOWN return DIRS.DOWN
elif DIRS.DOWN: elif dir == DIRS.DOWN:
return DIRS.UP return DIRS.UP
else: else:
return DIRS.INVALID return DIRS.INVALID
def write_one_dir_config_tasks(sourc, dest, id, dir, prev_dir, last_dir): class ConfigTaskWriter:
for x in range(sourc, dest): def __init__(self, sourc, dest, routing_typ, start_task, start_type, #start_conf_type_id,
print(DEST_HEADER.format(id)) start_pack_type_id, use_spec_task=False, spec_task_id=0):
print(DELAY_TAG) self.sourc = sourc
print(INTERVAL_TAG) self.dest = dest
print(COUNT_TAG) self.routing_typ = routing_typ
print(TYPE_TAG) self.start_task = start_task
print(TASK_TAG.format(id+1)) self.start_type = start_type
if x == sourc: #self.start_conf_type_id = start_conf_type_id
link = prev_dir.value self.start_pack_type_id = start_pack_type_id
dest = dir.value self.use_spec_task = use_spec_task
elif x == dest: self.spec_task_id = spec_task_id
link = get_opposs_dir(dir).value self.task_count = 0
dest = last_dir.value self.xml_data = ""
self.xml_map = ""
self.xml_data_types = ""
self.xml_stream_types = ""
self.spec_task_count = 0
self.type_count_start = self.start_type
self.type_count = self.start_type
def write_one_dir_config_tasks(self, x0, xf, dir, prev_dir, last_dir):
for x in range(x0, xf):
self.xml_data += DEST_HEADER.format(self.task_count) + "\n"
self.xml_data += DELAY_TAG + "\n"
self.xml_data += INTERVAL_TAG + "\n"
self.xml_data += COUNT_TAG + "\n"
self.xml_data += TYPE_TAG.format(self.type_count) + "\n"
self.xml_data += TASK_TAG.format(self.start_task+self.task_count+1)+"\n"
if x == x0 and x == xf-1:
link = prev_dir.value
dest = last_dir.value
elif x == x0:
link = prev_dir.value
dest = dir.value
elif x == xf-1:
link = get_opposs_dir(dir).value
dest = last_dir.value
else:
link = get_opposs_dir(dir).value
dest = dir.value
self.xml_data += CONFIG_TAG.format(link, dest) + "\n"
self.xml_data += DEST_H_END + "\n"
self.task_count += 1
def write_req_task(self):
for i in range(0, self.task_count):
self.xml_data += "\n"+REQ_TASK_START.format(self.start_task+i+1)+"\n"
self.xml_data += REQ_TASK_REQ.format(self.type_count,
self.start_task) + "\n"
if(not self.use_spec_task):
last_task = self.start_task+(self.dest[0]-self.sourc[0] + \
self.dest[1]-self.sourc[1]) + 2
else: else:
link = get_opposs_dir(dir).value last_task = self.spec_task_id
dest = dir.value self.xml_data += REQ_TASK_GEN.format(self.start_pack_type_id,
print(CONFIG_TAG.format(link, dest)) last_task) + "\n"
print(DEST_H_END) self.task_count += 1
id+=1
return id
def write_req_task(id): def write_last_task(self):
for i in range(1, id): self.xml_data += "\n" + LAST_TASK.format(self.spec_task_id,
print() self.start_pack_type_id, self.start_task+self.task_count-1,
print(REQ_TASK_START.format(i)) self.spec_task_count, self.spec_task_count) + "\n"
print(REQ_TASK_REQ)
print(REQ_TASK_GEN.format(id))
print(REQ_TASK_END)
return id
def write_config_tasks(sourc_x, sourc_y, dest_x, dest_y, id, rout_type): def write_config_tasks(self):
if rout_type == 0: # XY routing self.xml_data+=GEN_TASK_START.format(self.start_task+self.task_count)+"\n"
print(GEN_TASK_START) if self.routing_typ == 0: # XY routing
dir = DIRS.EAST if dest_x > sourc_x else DIRS.WEST dir = DIRS.EAST if self.dest[0] > self.sourc[0] else DIRS.WEST
id = write_one_dir_config_tasks(sourc_x, dest_x, id, dir, DIRS.LOCAL, dir) x0 = self.dest[0] if self.sourc[0]>self.dest[0] else self.sourc[0]
xf = self.sourc[0] if self.sourc[0]>self.dest[0] else self.dest[0]
self.write_one_dir_config_tasks(x0, xf, dir, DIRS.LOCAL, dir)
prev_dir = dir prev_dir = get_opposs_dir(dir) if self.dest[0] != self.sourc[0] \
dir = DIRS.NORTH if dest_y > sourc_y else DIRS.SOUTH else DIRS.LOCAL
id = write_one_dir_config_tasks(sourc_y, dest_y+1, id, dir, prev_dir, DIRS.LOCAL) dir = DIRS.NORTH if self.dest[1] > self.sourc[1] else DIRS.SOUTH
print(GEN_TASK_END) x0 = self.dest[1] if self.sourc[1]>self.dest[1] else self.sourc[1]
xf = self.sourc[1]+1 if self.sourc[1]>self.dest[1] else self.dest[1]+1
self.write_one_dir_config_tasks(x0, xf, dir, prev_dir, DIRS.LOCAL)
self.xml_data += GEN_TASK_END + "\n"
write_req_task(id) elif self.routing_typ==1: # YX routing
print() dir = DIRS.NORTH if self.dest[1] > self.sourc[1] else DIRS.SOUTH
print(LAST_TASK.format(id, id-1, id-1)) x0 = self.dest[1] if self.sourc[1]>self.dest[1] else self.sourc[1]
xf = self.sourc[1] if self.sourc[1]>self.dest[1] else self.dest[1]
self.write_one_dir_config_tasks(x0, xf, dir, DIRS.LOCAL, dir)
elif rout_type==1: # YX routing prev_dir = get_opposs_dir(dir) if self.dest[0] != self.sourc[0] \
print(GEN_TASK_START) else DIRS.LOCAL
dir = DIRS.EAST if self.dest[0] > self.sourc[0] else DIRS.WEST
x0 = self.dest[0] if self.sourc[0]>self.dest[0] else self.sourc[0]
xf = self.sourc[0]+1 if self.sourc[0]>self.dest[0] else self.dest[0]+1
self.write_one_dir_config_tasks(x0, xf, dir, prev_dir, DIRS.LOCAL)
self.xml_data += GEN_TASK_END + "\n"
dir = DIRS.NORTH if dest_y > sourc_y else DIRS.SOUTH self.write_req_task()
id = write_one_dir_config_tasks(sourc_y, dest_y, id, dir, DIRS.LOCAL, dir)
prev_dir = dir #last task is for the pc that send config msgs
dir = DIRS.EAST if dest_x > sourc_x else DIRS.WEST if(not self.use_spec_task):
id = write_one_dir_config_tasks(sourc_x, dest_x+1, id, dir, prev_dir, DIRS.LOCAL) self.xml_data += "\n" + LAST_TASK.format(
print(GEN_TASK_END) self.start_task+self.task_count, self.start_task+self.task_count,
self.start_task, self.task_count-1, self.task_count-1) + "\n"
id = write_req_task(id) else:
print() self.spec_task_count += self.task_count - 1
print(LAST_TASK.format(id, id-1, id-1)) self.type_count += 1
return id
def write_map(sourc_x, sourc_y, dest_x, dest_y, id, rout_type):
x = sourc_x def write_map(self):
y = sourc_y x = self.sourc[0]
for i in range (0, id+1): y = self.sourc[1]
print(BIND.format(i, x*MAX_ROUT_Y+y)) if(not self.use_spec_task):
if rout_type == 0: last_map_task = self.task_count+1
if(y == dest_y): else:
x = sourc_x last_map_task = self.task_count
y = sourc_y self.xml_map += BIND.format(self.start_task, x*MAX_ROUT_Y+y) + "\n" # first task
elif(x == dest_x): for i in range (1, last_map_task):
y += 1 self.xml_map += BIND.format(self.start_task+i, x*MAX_ROUT_Y+y) + "\n"
else: if self.routing_typ == 0:
x +=1 if(x == self.dest[0] and y == self.dest[1]):
elif rout_type == 1: x = self.sourc[0]
if(x == dest_x): y = self.sourc[1]
x = sourc_x elif(x == self.dest[0]):
y = sourc_y y = y+1 if self.dest[1] > self.sourc[1] else y-1
elif(y == dest_y): else:
x += 1 x = x+1 if self.dest[0] > self.sourc[0] else x-1
else: elif self.routing_typ == 1:
y +=1 if(x == self.dest[0] and y == self.dest[1]):
x = self.sourc[0]
y = self.sourc[1]
elif(y == self.dest[1]):
x = x+1 if self.dest[0] > self.sourc[0] else x-1
else:
y = y+1 if self.dest[1] > self.sourc[1] else y-1
def write_types(self):
for i in range (self.type_count_start, self.type_count):
self.xml_data_types += CONF_TYPE.format(i) + "\n"
self.xml_data_types += PACK_TYPE.format(
self.start_pack_type_id, self.start_pack_type_id)
def write_stream_types(self, data_file, map_file):
with open(data_file, 'r') as f:
data = f.read()
with open(map_file, 'r') as f:
map_data = f.read()
Bs_data = BeautifulSoup(data, "xml")
Bs_map_data = BeautifulSoup(map_data, "xml")
tasks = Bs_data.find_all('task')
binds = Bs_map_data.find_all('bind')
for task in tasks:
id = task.get('id')
if id is not None:
dests = task.find_all('destination')
if dests:
num_dest = len(dests)
dest_task = dests[0].find('task').get('value')
for bind in binds:
if bind.find('task').get('value') == id:
sourc_node = bind.find('node').get('value')
if bind.find('task').get('value') == dest_task:
dest_node = bind.find('node').get('value')
if(num_dest == 1 and sourc_node != dest_node):
self.xml_stream_types += STREAM_TYPE.format(id, id) + "\n"
else:
self.xml_stream_types += PACK_TYPE.format(id, id) + "\n"
def write_non_opt_stream_types(self, data_file, map_file):
with open(data_file, 'r') as f:
data = f.read()
with open(map_file, 'r') as f:
map_data = f.read()
Bs_data = BeautifulSoup(data, "xml")
Bs_map_data = BeautifulSoup(map_data, "xml")
tasks = Bs_data.find_all('task')
binds = Bs_map_data.find_all('bind')
for task in tasks:
id = task.get('id')
if id is not None:
dests = task.find_all('destination')
if dests:
num_dest = len(dests)
dest_task = dests[0].find('task').get('value')
for bind in binds:
if bind.find('task').get('value') == id:
sourc_node = int(bind.find('node').get('value'))
if bind.find('task').get('value') == dest_task:
dest_node = int(bind.find('node').get('value'))
# use this for mobilenet and efficienet
#if(num_dest == 1 and ((sourc_node == 3 and dest_node == 4) or
# (sourc_node == 7 and dest_node == 8) or
# (sourc_node == 11 and dest_node == 12))):
# use this for mobilenet_fb
if((sourc_node == 3 and dest_node == 4) or
(sourc_node == 7 and dest_node == 8) or
(sourc_node == 11 and dest_node == 12)):
self.xml_stream_types += STREAM_TYPE.format(id, id) + "\n"
else:
self.xml_stream_types += PACK_TYPE.format(id, id) + "\n"
def update_sourc_dest(self, sourc, dest):
self.sourc = sourc
self.dest = dest
if(not self.use_spec_task):
self.start_task += self.task_count + 1
self.start_type += self.task_count + 1
else:
self.start_task += self.task_count
self.start_type += self.task_count
self.task_count = 0
def write_to_file(self):
f = open("./data.txt", "w")
f.write("")
f.close()
f = open("./data.txt", "a")
f.write(self.xml_data)
f.close()
f = open("./map.txt", "w")
f.write("")
f.close()
f = open("./map.txt", "a")
f.write(self.xml_map)
f.close()
f = open("./data_types.txt", "w")
f.write("")
f.close()
f = open("./data_types.txt", "a")
f.write(self.xml_data_types)
f.close()
f = open("./stream_types.txt", "w")
f.write("")
f.close()
f = open("./stream_types.txt", "a")
f.write(self.xml_stream_types)
f.close()

View file

@ -0,0 +1,25 @@
titles = {
"mobilenet": "Mobilenet",
"mobilenet_fb": "Mobilenet with feedback loop",
"efficienet": "EfficientNet"
}
net_models = {
"packet_switching" : ["mobilenet", "mobilenet_fb", "efficienet"],
"circuit_switching": ["mobilenet_conf", "mobilenet_fb_conf", "efficienet_conf"],
"non_opt_circuit_switching": ["mobilenet_conf_no_opt", "mobilenet_fb_conf_no_opt", "efficienet_conf_no_opt"]
}
final_conf_tasks = {
"circuit_switching": {
"mobilenet_conf": 74,
"mobilenet_fb_conf": 20,
"efficienet_conf": 138
},
"non_opt_circuit_switching": {
"mobilenet_conf_no_opt": 83,
"mobilenet_fb_conf_no_opt": 20,
"efficienet_conf_no_opt": 147
}
}
result_folder = "../../results/"

View file

@ -0,0 +1,44 @@
import pandas as pd
from constants import *
from utils import *
throt_data = pd.DataFrame(columns=["model","noc","throttled percentage"])
sim_time_data = pd.DataFrame(columns=["model","noc","simulation time"])
el_tim_data = pd.DataFrame(columns=["model","noc","elapsed time"])
conf_time_data = pd.DataFrame(columns=["model","noc","configuration time"])
# process data
count = 0
for net, models in net_models.items():
for model in models:
conf_folder = result_folder + model
el_tim_data.loc[count] = [model, net, get_elapsed_time(conf_folder)]
throt_data.loc[count] = [model, net, get_throt_perc(conf_folder)]
sim_time_data.loc[count] = [model, net, get_sim_time(conf_folder)]
conf_time = 0 if net not in final_conf_tasks \
else get_conf_time(conf_folder, final_conf_tasks[net][model])
conf_time_data.loc[count] = [model, net, conf_time]
count += 1
# print graphs
plt.clf()
with open('results.txt', 'w') as f:
print("", file=f)
for i in range(len(list(net_models.values())[0])):
models = [model[i] for model in list(net_models.values())]
conf_models = [model[i] for model in list(net_models.values())
if "conf" in model[i]]
throt_table = throt_data[throt_data["model"].isin(models)]
generate_throttle_graph(throt_table, models[0])
sim_time_table = sim_time_data[sim_time_data["model"].isin(models)]
generate_sim_time_graph(sim_time_table, models[0])
el_tim_table = el_tim_data[el_tim_data["model"].isin(models)]
generate_el_time_graph(el_tim_table, models[0])
conf_table = conf_time_data[conf_time_data["model"].isin(conf_models)]
generate_conf_time_graph(conf_table, models[0])

View file

@ -0,0 +1,84 @@
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from constants import titles
TASK_COMP_CONF_LOG = "Task {} has all requirements fullfilled"
SEC_TO_MIN = 60
NS_TO_US = 1000
#NS_TO_MS = 1000000
def get_elapsed_time(conf_folder):
return round(pd.read_csv(conf_folder+"/elapsed_time.txt",
delimiter=":", header=None).iloc[0,1]/SEC_TO_MIN, 2)
def get_throt_perc(conf_folder):
throt_cnt = pd.read_csv(conf_folder+"/throttled_count.csv"
).sum().loc["throttled_count"]
pckt_cnt = pd.read_csv(conf_folder+"/packet_count.csv"
).sum().loc["packet_count"]
return round(100*throt_cnt/pckt_cnt, 2)
def get_sim_time(conf_folder):
with open(conf_folder+"/pe_tasks.log", "r") as f:
sim_time = int(f.readlines()[-1].strip().split(":")[0][:-3])/NS_TO_US
#sim_time = sim_time/NS_TO_MS if sim_time > NS_TO_MS else sim_time/NS_TO_US
#sim_time = sim_time/NS_TO_US
return round(sim_time, 2)
def get_conf_time(conf_folder, final_conf_task):
conf_line = TASK_COMP_CONF_LOG.format(final_conf_task)
with open(conf_folder+"/pe_tasks.log", "r") as f:
comp_conf_line = [line for line in f.readlines() if conf_line in line]
conf_time = int(comp_conf_line[0].strip().split(":")[0][:-3])/NS_TO_US
return round(conf_time, 2)
def generate_throttle_graph(throt_table, model):
ax = sns.barplot(throt_table, x="noc", y="throttled percentage", hue="noc",
palette="Blues")
ax.set_title(titles[model])
for container in ax.containers:
ax.bar_label(container, fontsize=10)
plt.savefig("throttled_perc_"+model+".png")
with open('results.txt', 'a') as f:
print(throt_table, file=f)
plt.clf()
def generate_sim_time_graph(sim_time_table, model):
ax = sns.barplot(sim_time_table, x="noc", y="simulation time", hue="noc",
palette="Blues")
ax.set_title(titles[model]+" (us)")
for container in ax.containers:
ax.bar_label(container, fontsize=10)
plt.savefig("simulation_time_"+model+".png")
with open('results.txt', 'a') as f:
print(sim_time_table, file=f)
plt.clf()
def generate_el_time_graph(el_tim_table, model):
ax = sns.barplot(el_tim_table, x="noc", y="elapsed time", hue="noc",
palette="Blues")
ax.set_title(titles[model]+" (min)")
for container in ax.containers:
ax.bar_label(container, fontsize=10)
plt.savefig("elapsed_time_"+model+".png")
with open('results.txt', 'a') as f:
print(el_tim_table, file=f)
plt.clf()
def generate_conf_time_graph(conf_table, model):
ax = sns.barplot(conf_table, x="noc", y="configuration time", hue="noc",
palette="Blues")
ax.set_title("Circuit switching configuration time (us)")
for container in ax.containers:
ax.bar_label(container, fontsize=10)
plt.savefig("configuration_time_"+model+".png")
with open('results.txt', 'a') as f:
print(conf_table, file=f)
plt.clf()

View file

@ -66,9 +66,9 @@ int sc_main(int arg_num, char *arg_vec[])
time(&end_time); time(&end_time);
double system_elapsed_time = difftime(end_time, start_time); double system_elapsed_time = difftime(end_time, start_time);
update_start_time(std::to_string(system_passed_time));
TlmReport& report = TlmReport::getInstance(); TlmReport& report = TlmReport::getInstance();
report.update_system_elapsed_time(std::to_string(system_elapsed_time));
report.write_report(); report.write_report();
return 0; return 0;

View file

@ -168,7 +168,7 @@ void NetworkInterfaceTlm::send_flit(PacketCS* p, Flit* f){
tlm::tlm_phase send_phase = tlm::BEGIN_REQ; tlm::tlm_phase send_phase = tlm::BEGIN_REQ;
string type_name = get_type_name(p->dataType); string type_name = get_type_name(p->dataType);
int lay = type_name == TYPE_STREAM ? 1:0; int lay = (type_name.find(TYPE_STREAM) != string::npos) ? 1:0;
log_debug("Sending flit of type "+ type_name + " to layer "+to_string(lay)); log_debug("Sending flit of type "+ type_name + " 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); update_credits(*trans, -1);
@ -312,7 +312,6 @@ void NetworkInterfaceTlm::init_peq_cb(tlm_gp& trans, const tlm::tlm_phase& phase
log_debug("Init PEQ callback start for packet "+to_string(p_id)); log_debug("Init PEQ callback start for packet "+to_string(p_id));
log_debug("Phase "+string(phase.get_name())+" received"); log_debug("Phase "+string(phase.get_name())+" received");
if (phase == tlm::END_REQ) { if (phase == tlm::END_REQ) {
//update_credits(trans, 1);
curr_req = 0; curr_req = 0;
if(p_id == -1){ if(p_id == -1){
// Config msg transaction ended, so packet can be scheduled for deletion // Config msg transaction ended, so packet can be scheduled for deletion
@ -320,6 +319,9 @@ void NetworkInterfaceTlm::init_peq_cb(tlm_gp& trans, const tlm::tlm_phase& phase
unsigned char* data_ptr = trans.get_data_ptr(); unsigned char* data_ptr = trans.get_data_ptr();
Flit* received_flit = reinterpret_cast<Flit*>(data_ptr); Flit* received_flit = reinterpret_cast<Flit*>(data_ptr);
PacketCS* p = dynamic_cast<PacketCS*>(received_flit->packet); PacketCS* p = dynamic_cast<PacketCS*>(received_flit->packet);
if(get_type_name(p->dataType).find(TYPE_STREAM) != string::npos){
update_credits(trans, 1);
}
packet_recv_queue.push(p); packet_recv_queue.push(p);
} }
} }
@ -422,7 +424,7 @@ void NetworkInterfaceTlm::receive_and_process_flit(tlm_gp& trans){
//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(get_type_name(p->dataType) != TYPE_STREAM){ if(get_type_name(p->dataType).find(TYPE_STREAM) == string::npos){
if(resp_in_progress) { if(resp_in_progress) {
log_info("Previous response transaction still in progress, scheduling it for next time"); log_info("Previous response transaction still in progress, scheduling it for next time");
nxt_resp_pend.push(&trans); nxt_resp_pend.push(&trans);
@ -476,7 +478,7 @@ tlm::tlm_sync_enum NetworkInterfaceTlm::send_end_req(tlm_gp& trans){
// Queue the acceptance and the response with the appropriate latency // Queue the acceptance and the response with the appropriate latency
tlm::tlm_phase bw_phase = tlm::END_REQ; tlm::tlm_phase bw_phase = tlm::END_REQ;
sc_time delay = sc_time(REQ_END_DELAY, UNITS_DELAY); // Accept delay sc_time delay = sc_time(REQ_END_DELAY, UNITS_DELAY); // Accept delay
int lay = type_name == TYPE_STREAM ? 1:0; int lay = (type_name.find(TYPE_STREAM) != string::npos) ? 1:0;
tlm::tlm_sync_enum status = (*target[lay])->nb_transport_bw(trans, tlm::tlm_sync_enum status = (*target[lay])->nb_transport_bw(trans,
bw_phase, delay); bw_phase, delay);
if (status == tlm::TLM_COMPLETED) { if (status == tlm::TLM_COMPLETED) {
@ -486,7 +488,7 @@ tlm::tlm_sync_enum NetworkInterfaceTlm::send_end_req(tlm_gp& trans){
} }
// Queue internal event to mark beginning of response // Queue internal event to mark beginning of response
delay = type_name != TYPE_STREAM ? delay = (type_name.find(TYPE_STREAM) == string::npos) ?
delay + sc_time(INTERN_PROC_DELAY, UNITS_DELAY) : delay + sc_time(INTERN_PROC_DELAY, UNITS_DELAY) :
SC_ZERO_TIME; // no processing on stream SC_ZERO_TIME; // no processing on stream
target_peq.notify(trans, INTERNAL_PROC_PHASE, delay); target_peq.notify(trans, INTERNAL_PROC_PHASE, delay);
@ -523,7 +525,7 @@ void NetworkInterfaceTlm::update_credits(tlm_gp&trans, int added_creds){
int p_id = get_packet_id_from_extension(trans); int p_id = get_packet_id_from_extension(trans);
//if(type_name == TYPE_PACKET || (type_name == TYPE_ROUT_CONFIG && p_id != -1)){ //if(type_name == TYPE_PACKET || (type_name == TYPE_ROUT_CONFIG && p_id != -1)){
if (!((type_name == TYPE_ROUT_CONFIG && p_id == -1) || if (!((type_name == TYPE_ROUT_CONFIG && p_id == -1) ||
type_name == TYPE_STREAM)){ (type_name.find(TYPE_STREAM) != string::npos))){
credit_counter += added_creds; credit_counter += added_creds;
log_info("Credit counter updated: "+to_string(credit_counter)); log_info("Credit counter updated: "+to_string(credit_counter));
} }

View file

@ -266,6 +266,11 @@ public:
*/ */
void update_credits(tlm_gp&trans, int added_creds); void update_credits(tlm_gp&trans, int added_creds);
/** Log debug
* @param msg log message
*/
void log_debug(string msg);
/** Log info /** Log info
* @param msg log message * @param msg log message
*/ */

View file

@ -73,7 +73,10 @@ void ProcessingElementCS::thread(){
// Explain: countLeft is for sending, neededAmount is for receiving // Explain: countLeft is for sending, neededAmount is for receiving
countLeft.at(dest)--; countLeft.at(dest)--;
log_send_rec("Task " + curr_task_id + " sent a packet of type " + log_send_rec("Task " + curr_task_id + " sent a packet of type " +
std::to_string(dest.dataType) + " destined for task " + std::to_string(dest.dataType) + " (msg: " +
std::to_string(dest.msg.config_link) + "-" +
std::to_string(dest.msg.dest_link) + ")" +
" destined for task " +
std::to_string(dest.destinationTask) + std::to_string(dest.destinationTask) +
" (repeat count: " + " (repeat count: " +
std::to_string(taskRepeatLeft.at(destToTask.at(dest))) + std::to_string(taskRepeatLeft.at(destToTask.at(dest))) +
@ -182,12 +185,13 @@ void ProcessingElementCS::execute(TaskCS& task)
else { else {
// EXPLAIN: go through all requirements and add them to lists // EXPLAIN: go through all requirements and add them to lists
for (DataRequirement& r : task.requirements) { for (DataRequirement& r : task.requirements) {
log_info("Requirement of type "+std::to_string(r.dataType)+ log_info("Requirement of id " + std::to_string(r.id) +
" of type " + std::to_string(r.dataType) +
" created for task " + std::to_string(task.id)); " created for task " + std::to_string(task.id));
neededFor[r.dataType].insert(task); neededFor[r.dataType].insert(task);
int amount_req = globalResources.getRandomIntBetween(r.minCount, r.maxCount); int amount_req = globalResources.getRandomIntBetween(r.minCount, r.maxCount);
neededAmount[std::make_pair(task, r.dataType)] = amount_req; neededAmount[std::make_pair(task, r.dataType)] = amount_req;
neededAmountHold[std::make_pair(task, r.dataType)] = amount_req; //neededAmountHold[std::make_pair(task, r.dataType)] = amount_req;
needs[task].insert(r.dataType); needs[task].insert(r.dataType);
} }
// maybe all packets have arrived so we check the requirements // maybe all packets have arrived so we check the requirements
@ -219,7 +223,7 @@ void ProcessingElementCS::receive()
receivedData[type] = 1; receivedData[type] = 1;
} }
log_send_rec("Packet from type " + std::to_string(type) + log_send_rec("Packet from type " + std::to_string(type) +
" arrived at PE " + std::to_string(this->id) + " from node " + " arrived at PE " + std::string(this->name()) + " from node " +
std::to_string(received_packet->src.id) + std::to_string(received_packet->src.id) +
" - current received packet counter: " + std::to_string(receivedData[type])); " - current received packet counter: " + std::to_string(receivedData[type]));
@ -238,20 +242,25 @@ void ProcessingElementCS::startSending(TaskCS& task)
// EXPLAIN: There are multiple possibilities where to send the data. Select one based on probability // EXPLAIN: There are multiple possibilities where to send the data. Select one based on probability
float rn = globalResources.getRandomFloatBetween(0, 1); float rn = globalResources.getRandomFloatBetween(0, 1);
int numOfPoss = task.possibilities.size(); int numOfPoss = task.possibilities.size();
int numOfDests = 0;
if(numOfPoss) {
numOfDests = task.possibilities.at(0).dataDestinations.size();
}
// for tasks with no destinations, only requirements // for tasks with no destinations, only requirements
if (!numOfPoss) { if (!numOfDests) {
taskRepeatLeft.at(task)--;
if (taskRepeatLeft.at(task)){ if (taskRepeatLeft.at(task)){
for (DataRequirement& r : task.requirements) { for (DataRequirement& r : task.requirements) {
log_info("Requirement of type "+std::to_string(r.dataType)+ log_info("Requirement of id " + std::to_string(r.id) +
" of type " + std::to_string(r.dataType) +
" created for task " + std::to_string(task.id)); " created for task " + std::to_string(task.id));
neededFor[r.dataType].insert(task); neededFor[r.dataType].insert(task);
int amount_req = globalResources.getRandomIntBetween(r.minCount, r.maxCount); int amount_req = globalResources.getRandomIntBetween(r.minCount, r.maxCount);
neededAmount[std::make_pair(task, r.dataType)] = amount_req; neededAmount[std::make_pair(task, r.dataType)] = amount_req;
neededAmountHold[std::make_pair(task, r.dataType)] = amount_req; //neededAmountHold[std::make_pair(task, r.dataType)] = amount_req;
needs[task].insert(r.dataType); needs[task].insert(r.dataType);
} }
checkNeed(); checkNeed();
taskRepeatLeft.at(task)--;
} }
} }
@ -309,6 +318,9 @@ void ProcessingElementCS::checkNeed()
an error where the requirement in a task wouldn't be read */ an error where the requirement in a task wouldn't be read */
// uncommented because data that had arrived wasn't diminishing from neededAmount counter // uncommented because data that had arrived wasn't diminishing from neededAmount counter
neededAmount.at(pair) -= receivedData.at(type); neededAmount.at(pair) -= receivedData.at(type);
log_send_rec("Received data of type " + std::to_string(type)+
" for task " + std::to_string(t.id) + ": " +
std::to_string(receivedData.at(type)));
//neededAmount.at(pair)--; //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.
@ -352,20 +364,20 @@ void ProcessingElementCS::checkNeed()
/******************* LOG FUNCTIONS ********************/ /******************* LOG FUNCTIONS ********************/
void ProcessingElementCS::log_info(std::string msg){ void ProcessingElementCS::log_info(std::string msg){
SC_REPORT_INFO(PE_LOG, ("ID->" + std::to_string(this->id) + ": " + msg).c_str()); SC_REPORT_INFO(PE_LOG, ("PE->" + std::string(this->name()) + ": " + msg).c_str());
} }
void ProcessingElementCS::log_warn(std::string msg){ void ProcessingElementCS::log_warn(std::string msg){
SC_REPORT_WARNING(PE_LOG, ("ID->" + std::to_string(this->id) + ": " + msg).c_str()); SC_REPORT_WARNING(PE_LOG, ("PE->" + std::string(this->name()) + ": " + msg).c_str());
} }
void ProcessingElementCS::log_error(std::string msg){ void ProcessingElementCS::log_error(std::string msg){
SC_REPORT_ERROR(PE_LOG, ("ID->" + std::to_string(this->id) + ": " + msg).c_str()); SC_REPORT_ERROR(PE_LOG, ("PE->" + std::string(this->name()) + ": " + msg).c_str());
} }
void ProcessingElementCS::log_send_rec(std::string msg){ void ProcessingElementCS::log_send_rec(std::string msg){
if (DEBUG) { if (DEBUG) {
SC_REPORT_INFO(PE_PG_LOG, ("ID->" + std::to_string(this->id) + ": " + msg).c_str()); SC_REPORT_INFO(PE_PG_LOG, ("PE->" + std::string(this->name()) + ": " + msg).c_str());
} }
} }

View file

@ -32,7 +32,7 @@ public:
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;
// this variable holds the value of neededAmount (doesn't decrease) // this variable holds the value of neededAmount (doesn't decrease)
std::map<std::pair<TaskCS, dataTypeID_t>, int> neededAmountHold; //std::map<std::pair<TaskCS, dataTypeID_t>, int> neededAmountHold;
std::map<TaskCS, std::set<dataTypeID_t>> needs; std::map<TaskCS, std::set<dataTypeID_t>> needs;
std::map<dataTypeID_t, int> receivedData; std::map<dataTypeID_t, int> receivedData;
std::map<DataDestinationCS, TaskCS> destToTask; std::map<DataDestinationCS, TaskCS> destToTask;

View file

@ -195,19 +195,20 @@ void TlmRouter::init_peq_cb(tlm_gp& trans, const tlm_phase& phase){
": " + to_string(credit_counter[link])); ": " + to_string(credit_counter[link]));
send_end_response(link, trans); send_end_response(link, trans);
// Moved here, because here is where the credits are received // Moved here, because here is where the credits are received
log_debug(link, trans, "Issuing next request");
start_pend_req(link, trans); start_pend_req(link, trans);
} }
} }
void TlmRouter::start_pend_req(int rel_link, tlm_gp& trans){ void TlmRouter::start_pend_req(int rel_link, tlm_gp& trans){
log_debug(rel_link, trans, "Checking if request are pending");
// find pending link // find pending link
for(uint8_t dir=0; dir<Direction::num_dirs; dir++){ for(uint8_t dir=0; dir<Direction::num_dirs; dir++){
if( !nxt_send_data_pend[dir].empty() ){ if( !nxt_send_data_pend[dir].empty() ){
// check pending link valid and send data // check pending link valid and send data
Direction rel_dest = send_data_in_prog_dest[dir].front(); Direction rel_dest = send_data_in_prog_dest[dir].front();
if(rel_dest == rel_link){ if(rel_dest == rel_link){
log_debug(rel_link, trans, "Issuing next request");
tlm_gp* nxt_trans = nxt_send_data_pend[dir].front(); tlm_gp* nxt_trans = nxt_send_data_pend[dir].front();
bool data_sent = send_data(dir, rel_link, *nxt_trans); bool data_sent = send_data(dir, rel_link, *nxt_trans);
if (!data_sent){ if (!data_sent){

View file

@ -149,11 +149,10 @@ tlm_sync_enum TlmRouterCS::send_end_req(int link, tlm_gp& trans){
trans.release(); trans.release();
return status; return status;
} }
delay = SC_ZERO_TIME; // no processing in circuit switching routers delay = INTERN_PROC_CS_DELAY;
// Queue internal event to mark beginning of response // Queue internal event to mark beginning of response
string type_name = get_type_name(get_type_from_extension(trans)); string type_name = get_type_name(get_type_from_extension(trans));
phase = (type_name == TYPE_STREAM) ? INTERNAL_PROC_PHASE : phase = type_name !="ConfigRouter" ? INTERNAL_PROC_PHASE : CONF_ROUT_PHASE;
CONF_ROUT_PHASE;
log_info(link, trans, "Type of processed message: " + type_name); log_info(link, trans, "Type of processed message: " + type_name);
target_peq.notify(trans, phase, delay); target_peq.notify(trans, phase, delay);
@ -169,7 +168,6 @@ void TlmRouterCS::switching(int link, tlm_gp& trans){
if (destination == Dir::num_dirs) { if (destination == Dir::num_dirs) {
data_sent = true; data_sent = true;
check_transaction(link, trans); check_transaction(link, trans);
// change to fatal?
log_warn(link, trans, "Routing failed. Message couldn't be delivered"); log_warn(link, trans, "Routing failed. Message couldn't be delivered");
} }
else{ else{
@ -182,6 +180,19 @@ void TlmRouterCS::switching(int link, tlm_gp& trans){
} }
} }
bool TlmRouterCS::send_data(int link, int dest_link, tlm_gp& trans){
log_debug(link,trans,"Send data to link:"+DIR::toString(dest_link));
// check credits or that previous message is complete
if (credit_counter[dest_link] > 0){
send_begin_req(link, trans, dest_link);
return true;
}
else {
log_warn(link,trans, "Waiting for downstream Router!");
report.update_throttled_count(router_name);
return false;
}
}
int TlmRouterCS::get_type_from_extension(tlm_gp& trans){ int TlmRouterCS::get_type_from_extension(tlm_gp& trans){
link_extension* extension; link_extension* extension;

View file

@ -96,6 +96,16 @@ class TlmRouterCS : public TlmRouter{
*/ */
void switching(int link, tlm_gp& trans); void switching(int link, tlm_gp& trans);
/**
* Send data
*
* @param link active link
* @param dest_link destination link to send the data to
* @param trans TLM generic payload object
* @return true if data was sent, otherwise, false
*/
bool send_data(int link, int dest_link, tlm_gp& trans);
/** /**
* Begin request * Begin request
* *

View file

@ -1,45 +0,0 @@
/*******************************************************************************
* 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"
#include <set>
#include <utils/PacketFactoryCS.h>
#include "ratatoskrUtils/utils/GlobalResources.h"
#include "ratatoskrUtils/utils/GlobalReport.h"
#include "ratatoskrUtils/utils/Report.h"
#include "ratatoskrUtils/container/Container.h"
class NetworkParticipantCS {
public:
GlobalResources& globalResources = GlobalResources::getInstance();
GlobalReport& globalReport = GlobalReport::getInstance();
Report& rep = Report::getInstance();
PacketFactoryCS& packetFactory = PacketFactoryCS::getInstance();
virtual void initialize() = 0;
virtual void bind(Connection*, SignalContainer*, SignalContainer*) = 0;
~NetworkParticipantCS() = default;
};

View file

@ -31,17 +31,19 @@
using namespace sc_dt; using namespace sc_dt;
#define DEBUG false #define DEBUG true
// router paremters // router paremters
#define NUM_CREDITS 7 #define NUM_CREDITS 7
// router delays // router delays
#define REQ_INIT_DELAY 10 //clk=1GHz
#define REQ_END_DELAY 10 #define REQ_INIT_DELAY 1
#define REQ_END_DELAY 1
#define INTERN_PROC_DELAY 100 #define INTERN_PROC_DELAY 100
#define RESP_END_DELAY 10 #define INTERN_PROC_CS_DELAY 10
#define RESP_END_DELAY 1
#define UNITS_DELAY SC_NS #define UNITS_DELAY SC_NS
//write in report
// types // types
typedef tlm::tlm_generic_payload tlm_gp; typedef tlm::tlm_generic_payload tlm_gp;

View file

@ -86,7 +86,7 @@ void TlmReport::write_report(){
cout << "Writing system elapsed time" << endl << endl; cout << "Writing system elapsed time" << endl << endl;
stringstream ss_msg_elapsed_time; stringstream ss_msg_elapsed_time;
ss_msg_throttled << "Elapsed time: " << this->system_elapsed_time << endl; ss_msg_elapsed_time << "Elapsed time: " << this->system_elapsed_time << endl;
log_file.open(ELAPSED_TIME_FILE); log_file.open(ELAPSED_TIME_FILE);
log_file << ss_msg_elapsed_time.str(); log_file << ss_msg_elapsed_time.str();

View file

@ -57,7 +57,7 @@ class TlmReport {
/** /**
* Updates system elapsed time attribute * Updates system elapsed time attribute
*/ */
void update_system_elapsed_time(string system_elapsed_time) void update_system_elapsed_time(string system_elapsed_time);
private: private:
std::map<string, int> packet_count; std::map<string, int> packet_count;