DSENT (Design Space Exploration of Networks Tool)

===============================================================================
Overview
===============================================================================
DSENT is a modeling tool designed for rapid design space exploration of both
electronical and emerging opto-electrical networks-on-chip (NoC). It provides
analytic and parameterized models for various network components and is
portable across a range of technology assumptions. Given architectural-level
parameters, DSENT builds the specified models hierarchically from electrical
and optical building blocks and outputs detailed power and area estimates. 


===============================================================================
Version
===============================================================================
Current: 0.91 (26 June 2012)

Latest version or additional information can be found at

    https://sites.google.com/site/mitdsent

===============================================================================
System requirements
===============================================================================
We have tested DSENT on the following platforms:

Linux GNU g++ 4.1.2 and glibc 2.5
Linux GNU g++ 4.3.2 and glibc 2.7
Linux GNU g++ 4.4.5 and glibc 2.11.3
Cygwin g++ 4.5.3 and cygwin 1.7.14

===============================================================================
License
===============================================================================
Please refer to the LICENSE file for licensing and copyright information.

If you use DSENT in your research, please acknowledge us by referencing our 
NOCS 2012 paper:

Chen Sun, Chia-Hsin Owen Chen, George Kurian, Lan Wei, Jason Miller, 
Anant Agarwal, Li-Shiuan Peh, Vladimir Stojanovic, "DSENT - A Tool Connecting 
Emerging Photonics with Electronics for Opto-Electronic Networks-on-Chip 
Modeling." The 6th ACM/IEEE International Symposium on Networks-on-Chip 
(NOCS), May 2012, Lyngby, Denmark.


===============================================================================
Contact information
===============================================================================
If you have any questions or comments, please contact us through our mailing
list at: mitdsent@mit.edu 

We will try to reply as soon as possible.


===============================================================================
Build (installation)
===============================================================================
To build DSENT:

    % make 

By default DSENT is built with logging disabled. Logging keeps track of what 
happens while running DSENT. It is an option more for the DSENT framework and 
DSNET models developers. If you want to enable this option, simply type the 
following: 

    % make LIBUTIL_IS_LOG=true

To clean the build: 

    % make clean


===============================================================================
Usage
===============================================================================
DSENT builds models and runs based on the specified configuration file. In the 
configuration file, you specify a model name and necessary information 
(parameters and properties) required to build the model.

To run DSENT:

    % ./dsent -cfg <config_filename>

To check what models are available:

    % ./dsent -available_models

To overwrite the configuration file from command line:
    Use ';' to separate different key/value pairs. 

    % ./dsent -cfg <config_filename> -overwrite <new query string>
    % ./dsent -cfg configs/example.cfg -overwrite "NumberInputs=5; NumberOutputs=6;"

To print out in a more human-friendly fasion:

    % ./dsent -cfg <config_filename> -verbose

To check what options are available:

    % ./dsent -help

Please see configs/example.cfg for an example of a configuration file.

Please see configs/router.cfg for the router configuration file. 

Please see QueryString and EvaluateString specifications below to know more 
about the usage.

===============================================================================
Advanced Usage
===============================================================================
Since DSENT is a generic modeling framework for electrical and optical 
components, you can create your own models. We will release guidelines on how 
to create custom models on top of DSENT framework. You can use the provided 
models as references.


===============================================================================
Quick start for Orion users
===============================================================================
Instead of using the SIM_port.h file, DSENT uses a text-based configuration 
file to specify the router/link configurations. You do not need to recompile
if you change parameters. Even though we use different parameter names, the
ones we use should be self-explanatory. In this package, we provide template
configuration files for the router and link:

    router  - configs/router.cfg
    link    - configs/electrical-link.cfg

    Technology
    ----------
        We currently support 45, 32, 22, 11nm. You can specify the desired 
        frequency but not the nominal voltage level since it is normally 
        fixed in different processes. 

    Router specs
    ------------
        Currently we only support the model of a widely used 3-pipeline-stage 
        input-buffered virtual channel router and does not have distinction 
        from ports for different components (cache, memory controller, I/O). 

    Input buffer specs
    ------------------
        The number of virtual channels used for different message classes 
        might be different; hence, DSENT uses NumberVirtualNetworks to 
        specify the number of message classes and use 
        NumberVirtualChannelsPerVirtualNetwork and 
        NumberBuffersPerVirtualChannel to define the buffers needed for a  
        virtual network (message class). 

        Currently only DFF-based RAM is supports. This is reasonable since 
        normally the buffer space needed at input port is small enough and 
        does not need to use SRAMs or RFs (register files). 

    Crossbar specs
    --------------
        Currently DSENT only supports multiplexer-based crossbars 
        (MULTREE_CROSSBAR). You no longer need to specify the degree of the
        multiplexers. 

    Switch allocator specs
    ----------------------
        DSENT models a two-stage switch allocator. The first stage is used to 
        arbitrate between VCs in the same input port, and the second stage is 
        used to arbitrate between input ports. If there is only one VC in 
        the input port, then the energy/power/area cost for the first stage 
        will be zero. 
        
        Currently, DSENT supports MatrixArbiter. 

    VC allocator specs
    ------------------
        We assume that the router uses a VC select scheme where the VC 
        allocation is done by just popping a FIFO. Currently DSENT ignores 
        this module since the FIFO that needs to keep the free VC information 
        should be small enough. 

    Clock distribution specs
    ------------------------
        Currently DSENT provides a broadcast H-Tree model. You can specify 
        the number of levels of the H-Tree (normally 4 or 5 levels should be 
        enough). 

DSENT replaces the original orion_router_power, orion_router_area and 
orion_link with QueryString and EvaluateString (see below for more detailed 
information on how to use them). 


===============================================================================
QueryString specifications
===============================================================================
DSENT is a query-based model evaluator. You use QueryString to specify what 
information you want DSENT to output. The syntax of a query string is shown as 
follows: 

    [Query type]>>[Instance name (with hierarchy)]:[Sub query type]@[Detail level]

    E.g., Area>>Router->Crossbar:Active@4
        * Query type:       Area
        * Instance name:    Router->Crossbar
        * Sub query type:   Active
        * Detail level:     4

    Query type
    ----------
        There are 9 types of queries: Parameter, Property, Energy, NddPower, 
        Area, InstHier, EventHier, NddPowerHier, AreaHier. 

        Parameter       - Print the model parameters needed to be specified 
        Property        - Print the design constraints or utilization 
            Use these to check what needs to be specified in the configuration 
            file for the model. No sub query type is needed for these two 
            types. 

        Energy          - Print the data-dependent energy cost of an event
        NddPower        - Print the non-data-denepent power of an instance
        Area            - Print the area cost of an instance
            Use these to obtain the costs of the specified model.

        InstHier        - Print the instance name hierarchy
            Use this to know what sub-instances are built for this model

        EventHier       - Print the available events for Energy queries
        NddPowerHier    - Print the available non-data-dependent power types
        AreaHier        - Print the available area types
            Use this to know what to specify in the "sub query type" field. 

    Instance name (with hierarchy)
    ------------------------------
        The (sub)instance that you want to perform query. The name should be 
        hierarchical starting from the top level model. Hierarchies are 
        separated by the symbol "->".

    Sub query type
    --------------
        This field is not required for 'Parameter', 'Property' and 'InstHier'.

        For 'Energy', this field stands for the event that cause this energy 
        cost, such as 'WriteBuffer'. 

        For 'NddPower' and 'Area', this field stands for the power and area 
        cost of the model, such as 'Leakage' and 'Active'. 

        For 'EventHier', if this field is not specified, all events of this 
        instance will be printed; if this field is specified, then only 
        the specified event will be printed. 'AreaHier' and 'NddPowerHier' 
        also have the similar behavior. 
        
    Detail level
    ------------
        Defines the hierarchy depth to be printed. '0' means current level. 
        This field is needed for all query types for syntax correctness, 
        although it is not used for 'Parameter' and 'Property'. 

    Multi-line queries
    ------------------
        Query strings specified across multiple lines in the config file
        must have each line be terminated by a '\'. It is whitespace sensitive,
        so make sure there are no spaces after '\'. Note that the parser
        prunes everything after the comment '#' character, including '\'!
        See configs/router.cfg as an example.

    Examples of individual QueryString's:

        Parameter>>Router@0
        Property>>Router->Crossbar@0
        InstHier>>Router->InputPort@2
        Energy>>Router:WriteBuffer@2
        NddPower>>Router->Crossbar:Leakage@3
        Area>>Router->SwitchAllocator:Active@4

        
===============================================================================
EvaluateString specifications
===============================================================================
DSENT provides a way to let users do custom calculations by specifying the 
EvaluateString in the configuration file. EvaluateString constains a sequence 
of statements separated by one ';'. DSENT reads through the sequence and 
evaluates the statements one-by-one. 

Currently, DSENT supports:
    Four arithmetic operations
    --------------------------
        3 + 4 * (5 + 6) / 7;

    Define local variables through assignments
    ------------------------------------------
        variable 'a' will be mapped to 7 for future referencing

        a = 3 + 4;

    Global variable referencing
    ---------------------------
        $(var_name) indicates either a key in the configuration file or a 
        query string. If var_name exists in the configuration file, then the 
        corresponding value will be returned; otherwise, DSENT will do a query 
        using the string var_name@0 and return the query result. 

        b = $(Energy>>Router:WriteBuffer) * $(Frequency);

    Printing outputs
    ----------------
        DSENT prints the string following the keyword 'print'. 

        print <expression>
        print "<string_to_print>";
        print "<string_to_print>" <expression>;

        print 3 + 4;                # Output: 7
        print "Hello World";        # Output: Hello World
        print "Hello World " 3 + 4; # Output: Hello World 7
        
    Multi-line evaluate strings
    ---------------------------
        Evaluate strings specified across multiple lines in the config file
        must have each line be terminated by a '\'. It is whitespace sensitive,
        so make sure there are no spaces after '\'. Note that the parser
        prunes everything after the comment '#' character, including '\'!
        See configs/router.cfg as an example.

        
===============================================================================
Units
===============================================================================
DSENT uses only SI units for all inputs and outputs. For example:
    time        = s (second)
    distance    = m (meter)
    capacitance = F (Farad)
    power       = W (Watt)
    energy      = J (Joule)
    resistance  = Ohm
    loss        = dB (Decibels)

    
===============================================================================
Known Bugs and Issues
===============================================================================

1. If timing is not met, the timing optimizer will put the model in a state
where everything is the maximum size (huge power, area). Thus, model results
can be considered a gross over-estimate when timing isn't met. This is just the
nature of the greedy timing optimizer and it will be addressed in the future.

2. The VC control and credit buffer component of the router is currently
not modeled, as they have always been assumed to be lumped into the "negligible
control cost" category in previous models and evaluations. Our recent
experiments have shown that this is not true and we will be adding this in the
next iteration.

3. Some of the connectivity paths have not been checked thoroughly. Thus,
timing optimizer may miss some of the paths. However, we tried to make sure
that the critical paths are modeled properly.

4. Local interconnect will have an ever-larger impact on power and timing as
technology scales. So far we have not implemented a method for automatically
estimating them but we will eventually address this. Evaluations for 22nm
and below will tend to underestimate as a result.

===============================================================================
Revision log
===============================================================================
V0.91:
    Bugs fix:
        1. Leakage power calculation printout for router (configs/router.cfg).

    New feature:
        1. Area printout for router (configs/router.cfg).

V0.9:
    First release.

