| 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. | 
 |  |