Getting started

  1. The directory c:\multiprocessors\inputs\ contains all inputs needed for the design flow. The files h263encoder.xml, h263decoder.xml and mp3decoder.xml contain the three applications that must be mapped onto the architecture that is described in the file arch.xml. The settings for the design flow are stored in the file sdf3.opt. You can view and edit these files using a standard text editor (e.g. wordpad).

  2. The design flow can be executed by double-clicking on the file run_sdf3.bat. This file contains a series of commands to first map the three applications onto the architecture and next to convert the resulting mappings into a set of html files. (You can open the run_sdf3.bat in any text editor to see which commands are actually executed.)

  3. At the end of the design flow, a number of html pages is generated for each application that has been mapped to the architecture. These html pages provide insight in the resource usage of the application when mapped to the architecture. They also show how many resources are still available for other applications.

  4. You can view the html pages in your favorite web browser. This can help you understand how the architecture should be modified to optimize the total area that is used.

  5. To modify the architecture, you can open the file arch.xml in any standard text editor. By default, the file contains the architecture shown below. You are allowed to add and/or remove tiles from the architecture. When adding a new tile, it may contain a processor of the following types: arm, encoder, motion, subbinv. You can also modify the size of the memories inside the tiles and the size of the TDMA time wheels. Furthermore, you can modify all settings related to the Network-on-Chip as well as the topology of the Network-on-Chip. Note that when you add/remove tiles to/from the architecture, you may have to update the connections and the network topology.

    <?xml version='1.0'?>
    <sdf3 type='sdf' version='1.0'
        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xsi:noNamespaceSchemaLocation='http://www.es.ele.tue.nl/sdf3/xsd/sdf3-sdf.xsd'>
        <architectureGraph name='arch'>
            <tile name='tile_a'>
                <processor name='arm1' type='arm'>
                    <arbitration type='TDMA' wheelsize='100000'/>
                </processor>
                <memory name='mem' size='10000000'/>
                <networkInterface name='ni' nrConnections='10' inBandwidth='96' outBandwidth='96'/>
            </tile>
            <tile name='tile_b'>
                <processor name='proc' type='encoder'>
                    <arbitration type='TDMA' wheelsize='100000'/>
                </processor>
                <memory name='mem' size='10000000'/>
                <networkInterface name='ni' nrConnections='10' inBandwidth='96' outBandwidth='96'/>
            </tile>
            <tile name='tile_c'>
                <processor name='proc' type='motion'>
                    <arbitration type='TDMA' wheelsize='100000'/>
                </processor>
                <memory name='mem' size='10000000'/>
                <networkInterface name='ni' nrConnections='10' inBandwidth='96' outBandwidth='96'/>
            </tile>
            <tile name='tile_d'>
                <processor name='proc' type='subbinv'>
                    <arbitration type='TDMA' wheelsize='100000'/>
                </processor>
                <memory name='mem' size='10000000'/>
                <networkInterface name='ni' nrConnections='10' inBandwidth='96' outBandwidth='96'/>
            </tile>
            <connection name='con_1'   srcTile='tile_a' dstTile='tile_b' delay='3'/>
            <connection name='con_2'   srcTile='tile_a' dstTile='tile_c' delay='3'/>
            <connection name='con_3'   srcTile='tile_a' dstTile='tile_d' delay='4'/>
            <connection name='con_4'   srcTile='tile_b' dstTile='tile_a' delay='3'/>
            <connection name='con_5'   srcTile='tile_b' dstTile='tile_c' delay='4'/>
            <connection name='con_6'   srcTile='tile_b' dstTile='tile_d' delay='3'/>
            <connection name='con_7'   srcTile='tile_c' dstTile='tile_a' delay='3'/>
            <connection name='con_8'   srcTile='tile_c' dstTile='tile_b' delay='4'/>
            <connection name='con_9'   srcTile='tile_c' dstTile='tile_d' delay='3'/>
            <connection name='con_10'  srcTile='tile_d' dstTile='tile_a' delay='4'/>
            <connection name='con_11'  srcTile='tile_d' dstTile='tile_b' delay='3'/>
            <connection name='con_12'  srcTile='tile_d' dstTile='tile_c' delay='3'/>
            <network slotTableSize='8' packetHeaderSize='32' flitSize='96' reconfigurationTimeNI='32'>
                <router name='router_1'/>
                <router name='router_2'/>
                <router name='router_3'/>
                <router name='router_4'/>
                <link name='link1a' src='tile_a' dst='router_1'/>
                <link name='link1b' src='router_1' dst='tile_a'/>
                <link name='link2a' src='router_1' dst='router_2'/>
                <link name='link2b' src='router_2' dst='router_1'/>
                <link name='link3a' src='tile_b' dst='router_2'/>
                <link name='link3b' src='router_2' dst='tile_b'/>         
                <link name='link4a' src='router_1' dst='router_3'/>
                <link name='link4b' src='router_3' dst='router_1'/>
                <link name='link5a' src='router_2' dst='router_4'/>
                <link name='link5b' src='router_4' dst='router_2'/>
                <link name='link6a' src='tile_c' dst='router_3'/>
                <link name='link6b' src='router_3' dst='tile_c'/>         
                <link name='link7a' src='router_3' dst='router_4'/>
                <link name='link7b' src='router_4' dst='router_3'/>
                <link name='link8a' src='tile_d' dst='router_4'/>
                <link name='link8b' src='router_4' dst='tile_d'/>
            </network>
       </architectureGraph>
    </sdf3>
  6. To modify the frequency of the architecture, you must change the throughput constraints of the three applications. To do this, you must open the files h263encoder.xml, h263decoder.xml and mp3decoder in a text editor. The value inside the throughput element specifies the throughput constraint of the application. The throughput constraint implicitly relates the abstract time-units that are used in SDF3 to the frequency at which the architecture is running. Consider for example the throughput constraint specified for the H.263 encoder. In the file h263encoder.xml it is specified that this application has a throughput constraint of 0.00000003 iterations/time-unit (see also the XML fragement below). One frame is produced on each iteration of the graph. Hence, the throughput constraint is equal to 0.00000003 frames/time-unit. One time-unit is equal to the period of one clock cycle. If the system runs with a 500MHz clock, then one time-unit is equal to 2ns. So, the throughput constraint is equal to 15 frames/second.

    <graphProperties>
        <timeConstraints>
            <throughput>0.00000003</throughput>
        </timeConstraints>
    </graphProperties>

    It is required that the H.263 encoder and the H.263 decoder run at 15 frames/second and the MP3 decoder must run at 10 millisecond/frame. Given a clock frequency f, the throughput constraint of the H.263 encoder/decoder is equal to 15 / f and the throughput constraint of the MP3 decoder is equal to 1 / (f * 0.01). Using these equations, you can modify the frequency of the architecture. Remember that you should change the throughput constraint on all three applications when you want to modify the frequency of the architecture.

  7. You can also decide to change the ordering in which the applications are mapped onto the architecture. This ordering is determined by the order in which the applications are listed in the file sdf3.opt. SDF3 maps the applications in the order in which they appear in the file. Consider, for example, the sdf3.opt sample shown below. When using this file, SDF3 will first map the H.263 encoder, next the H.263 decoder and finally the MP3 decoder.

    <?xml version='1.0' encoding='UTF-8'?>
    <sdf3 type='sdf' version='1.0'
        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xsi:noNamespaceSchemaLocation='http://www.es.ele.tue.nl/sdf3/xsd/sdf3-sdf.xsd'>
      <settings type='flow'>
        <flowType type='NSoC'/>
        <applicationGraph file='h263encoder.xml'/>
        <applicationGraph file='h263decoder.xml'/>
        <applicationGraph file='mp3decoder.xml'/>
        <architectureGraph file='arch.xml'/>
        <tileMapping algo='loadbalance'>
          <constants>
            <constant name='a' value='1.0'/> <!-- processing -->
            <constant name='b' value='0.0'/> <!-- memory -->
            <constant name='f' value='0.0'/> <!-- communication -->
            <constant name='g' value='0.0'/> <!-- latency -->
          </constants>
        </tileMapping>
        <nocMapping algo='greedy'>
          <constraints>
              <maxDetour d='10'/>
              <maxNrRipups n='10'/>
              <maxNrTries n='0'/>
          </constraints>
        </nocMapping>
      </settings>
    </sdf3>