README revision 10447
113481Sgiacomo.travaglini@arm.comDSENT (Design Space Exploration of Networks Tool)
213481Sgiacomo.travaglini@arm.com
313481Sgiacomo.travaglini@arm.com===============================================================================
413481Sgiacomo.travaglini@arm.comOverview
513481Sgiacomo.travaglini@arm.com===============================================================================
613481Sgiacomo.travaglini@arm.comDSENT is a modeling tool designed for rapid design space exploration of both
713481Sgiacomo.travaglini@arm.comelectronical and emerging opto-electrical networks-on-chip (NoC). It provides
813481Sgiacomo.travaglini@arm.comanalytic and parameterized models for various network components and is
913481Sgiacomo.travaglini@arm.comportable across a range of technology assumptions. Given architectural-level
1013481Sgiacomo.travaglini@arm.comparameters, DSENT builds the specified models hierarchically from electrical
1113481Sgiacomo.travaglini@arm.comand optical building blocks and outputs detailed power and area estimates. 
1213481Sgiacomo.travaglini@arm.com
1313481Sgiacomo.travaglini@arm.com
1413481Sgiacomo.travaglini@arm.com===============================================================================
1513481Sgiacomo.travaglini@arm.comVersion
1613481Sgiacomo.travaglini@arm.com===============================================================================
1713481Sgiacomo.travaglini@arm.comCurrent: 0.91 (26 June 2012)
1813481Sgiacomo.travaglini@arm.com
1913481Sgiacomo.travaglini@arm.comLatest version or additional information can be found at
2013481Sgiacomo.travaglini@arm.com
2113481Sgiacomo.travaglini@arm.com    https://sites.google.com/site/mitdsent
2213481Sgiacomo.travaglini@arm.com
2313481Sgiacomo.travaglini@arm.com===============================================================================
2413481Sgiacomo.travaglini@arm.comSystem requirements
2513481Sgiacomo.travaglini@arm.com===============================================================================
2613481Sgiacomo.travaglini@arm.comWe have tested DSENT on the following platforms:
2713481Sgiacomo.travaglini@arm.com
2813481Sgiacomo.travaglini@arm.comLinux GNU g++ 4.1.2 and glibc 2.5
2913481Sgiacomo.travaglini@arm.comLinux GNU g++ 4.3.2 and glibc 2.7
3013481Sgiacomo.travaglini@arm.comLinux GNU g++ 4.4.5 and glibc 2.11.3
3113481Sgiacomo.travaglini@arm.comCygwin g++ 4.5.3 and cygwin 1.7.14
3213481Sgiacomo.travaglini@arm.com
3313481Sgiacomo.travaglini@arm.com===============================================================================
3413481Sgiacomo.travaglini@arm.comLicense
3513481Sgiacomo.travaglini@arm.com===============================================================================
3613481Sgiacomo.travaglini@arm.comPlease refer to the LICENSE file for licensing and copyright information.
3713481Sgiacomo.travaglini@arm.com
3813481Sgiacomo.travaglini@arm.comIf you use DSENT in your research, please acknowledge us by referencing our 
3913481Sgiacomo.travaglini@arm.comNOCS 2012 paper:
4013481Sgiacomo.travaglini@arm.com
4113481Sgiacomo.travaglini@arm.comChen Sun, Chia-Hsin Owen Chen, George Kurian, Lan Wei, Jason Miller, 
4213481Sgiacomo.travaglini@arm.comAnant Agarwal, Li-Shiuan Peh, Vladimir Stojanovic, "DSENT - A Tool Connecting 
4313481Sgiacomo.travaglini@arm.comEmerging Photonics with Electronics for Opto-Electronic Networks-on-Chip 
4413481Sgiacomo.travaglini@arm.comModeling." The 6th ACM/IEEE International Symposium on Networks-on-Chip 
4513481Sgiacomo.travaglini@arm.com(NOCS), May 2012, Lyngby, Denmark.
4613481Sgiacomo.travaglini@arm.com
4713481Sgiacomo.travaglini@arm.com
4813481Sgiacomo.travaglini@arm.com===============================================================================
4913481Sgiacomo.travaglini@arm.comContact information
5013481Sgiacomo.travaglini@arm.com===============================================================================
5113481Sgiacomo.travaglini@arm.comIf you have any questions or comments, please contact us through our mailing
5213481Sgiacomo.travaglini@arm.comlist at: mitdsent@mit.edu 
5313481Sgiacomo.travaglini@arm.com
5413481Sgiacomo.travaglini@arm.comWe will try to reply as soon as possible.
5513481Sgiacomo.travaglini@arm.com
5613481Sgiacomo.travaglini@arm.com
5713481Sgiacomo.travaglini@arm.com===============================================================================
5813481Sgiacomo.travaglini@arm.comBuild (installation)
5913481Sgiacomo.travaglini@arm.com===============================================================================
6013481Sgiacomo.travaglini@arm.comTo build DSENT:
6113481Sgiacomo.travaglini@arm.com
6213481Sgiacomo.travaglini@arm.com    % make 
6313481Sgiacomo.travaglini@arm.com
6413481Sgiacomo.travaglini@arm.comBy default DSENT is built with logging disabled. Logging keeps track of what 
6513481Sgiacomo.travaglini@arm.comhappens while running DSENT. It is an option more for the DSENT framework and 
6613481Sgiacomo.travaglini@arm.comDSNET models developers. If you want to enable this option, simply type the 
6713481Sgiacomo.travaglini@arm.comfollowing: 
6813481Sgiacomo.travaglini@arm.com
6913481Sgiacomo.travaglini@arm.com    % make LIBUTIL_IS_LOG=true
7013481Sgiacomo.travaglini@arm.com
7113481Sgiacomo.travaglini@arm.comTo clean the build: 
7213481Sgiacomo.travaglini@arm.com
7313481Sgiacomo.travaglini@arm.com    % make clean
7413481Sgiacomo.travaglini@arm.com
7513481Sgiacomo.travaglini@arm.com
7613481Sgiacomo.travaglini@arm.com===============================================================================
7713481Sgiacomo.travaglini@arm.comUsage
7813481Sgiacomo.travaglini@arm.com===============================================================================
7913481Sgiacomo.travaglini@arm.comDSENT builds models and runs based on the specified configuration file. In the 
8013481Sgiacomo.travaglini@arm.comconfiguration file, you specify a model name and necessary information 
8113481Sgiacomo.travaglini@arm.com(parameters and properties) required to build the model.
8213481Sgiacomo.travaglini@arm.com
8313481Sgiacomo.travaglini@arm.comTo run DSENT:
8413481Sgiacomo.travaglini@arm.com
8513481Sgiacomo.travaglini@arm.com    % ./dsent -cfg <config_filename>
8613481Sgiacomo.travaglini@arm.com
8713481Sgiacomo.travaglini@arm.comTo check what models are available:
8813481Sgiacomo.travaglini@arm.com
8913481Sgiacomo.travaglini@arm.com    % ./dsent -available_models
9013481Sgiacomo.travaglini@arm.com
9113481Sgiacomo.travaglini@arm.comTo overwrite the configuration file from command line:
9213481Sgiacomo.travaglini@arm.com    Use ';' to separate different key/value pairs. 
9313481Sgiacomo.travaglini@arm.com
9413481Sgiacomo.travaglini@arm.com    % ./dsent -cfg <config_filename> -overwrite <new query string>
9513481Sgiacomo.travaglini@arm.com    % ./dsent -cfg configs/example.cfg -overwrite "NumberInputs=5; NumberOutputs=6;"
9613481Sgiacomo.travaglini@arm.com
9713481Sgiacomo.travaglini@arm.comTo print out in a more human-friendly fasion:
9813481Sgiacomo.travaglini@arm.com
9913481Sgiacomo.travaglini@arm.com    % ./dsent -cfg <config_filename> -verbose
10013481Sgiacomo.travaglini@arm.com
10113481Sgiacomo.travaglini@arm.comTo check what options are available:
10213481Sgiacomo.travaglini@arm.com
10313481Sgiacomo.travaglini@arm.com    % ./dsent -help
10413481Sgiacomo.travaglini@arm.com
10513481Sgiacomo.travaglini@arm.comPlease see configs/example.cfg for an example of a configuration file.
10613481Sgiacomo.travaglini@arm.com
10713481Sgiacomo.travaglini@arm.comPlease see configs/router.cfg for the router configuration file. 
10813481Sgiacomo.travaglini@arm.com
10913481Sgiacomo.travaglini@arm.comPlease see QueryString and EvaluateString specifications below to know more 
11013481Sgiacomo.travaglini@arm.comabout the usage.
11113481Sgiacomo.travaglini@arm.com
11213481Sgiacomo.travaglini@arm.com===============================================================================
11313481Sgiacomo.travaglini@arm.comAdvanced Usage
11413481Sgiacomo.travaglini@arm.com===============================================================================
11513481Sgiacomo.travaglini@arm.comSince DSENT is a generic modeling framework for electrical and optical 
11613481Sgiacomo.travaglini@arm.comcomponents, you can create your own models. We will release guidelines on how 
11713481Sgiacomo.travaglini@arm.comto create custom models on top of DSENT framework. You can use the provided 
11813481Sgiacomo.travaglini@arm.commodels as references.
11913481Sgiacomo.travaglini@arm.com
12013481Sgiacomo.travaglini@arm.com
12113481Sgiacomo.travaglini@arm.com===============================================================================
12213481Sgiacomo.travaglini@arm.comQuick start for Orion users
12313481Sgiacomo.travaglini@arm.com===============================================================================
12413481Sgiacomo.travaglini@arm.comInstead of using the SIM_port.h file, DSENT uses a text-based configuration 
12513481Sgiacomo.travaglini@arm.comfile to specify the router/link configurations. You do not need to recompile
12613481Sgiacomo.travaglini@arm.comif you change parameters. Even though we use different parameter names, the
12713481Sgiacomo.travaglini@arm.comones we use should be self-explanatory. In this package, we provide template
12813481Sgiacomo.travaglini@arm.comconfiguration files for the router and link:
12913481Sgiacomo.travaglini@arm.com
13013481Sgiacomo.travaglini@arm.com    router  - configs/router.cfg
13113481Sgiacomo.travaglini@arm.com    link    - configs/electrical-link.cfg
13213481Sgiacomo.travaglini@arm.com
13313481Sgiacomo.travaglini@arm.com    Technology
13413481Sgiacomo.travaglini@arm.com    ----------
13513481Sgiacomo.travaglini@arm.com        We currently support 45, 32, 22, 11nm. You can specify the desired 
13613481Sgiacomo.travaglini@arm.com        frequency but not the nominal voltage level since it is normally 
13713481Sgiacomo.travaglini@arm.com        fixed in different processes. 
13813481Sgiacomo.travaglini@arm.com
13913481Sgiacomo.travaglini@arm.com    Router specs
14013481Sgiacomo.travaglini@arm.com    ------------
14113481Sgiacomo.travaglini@arm.com        Currently we only support the model of a widely used 3-pipeline-stage 
14213481Sgiacomo.travaglini@arm.com        input-buffered virtual channel router and does not have distinction 
14313481Sgiacomo.travaglini@arm.com        from ports for different components (cache, memory controller, I/O). 
14413481Sgiacomo.travaglini@arm.com
14513481Sgiacomo.travaglini@arm.com    Input buffer specs
14613481Sgiacomo.travaglini@arm.com    ------------------
14713481Sgiacomo.travaglini@arm.com        The number of virtual channels used for different message classes 
14813481Sgiacomo.travaglini@arm.com        might be different; hence, DSENT uses NumberVirtualNetworks to 
14913481Sgiacomo.travaglini@arm.com        specify the number of message classes and use 
15013481Sgiacomo.travaglini@arm.com        NumberVirtualChannelsPerVirtualNetwork and 
15113481Sgiacomo.travaglini@arm.com        NumberBuffersPerVirtualChannel to define the buffers needed for a  
15213481Sgiacomo.travaglini@arm.com        virtual network (message class). 
15313481Sgiacomo.travaglini@arm.com
15413481Sgiacomo.travaglini@arm.com        Currently only DFF-based RAM is supports. This is reasonable since 
15513481Sgiacomo.travaglini@arm.com        normally the buffer space needed at input port is small enough and 
15613481Sgiacomo.travaglini@arm.com        does not need to use SRAMs or RFs (register files). 
15713481Sgiacomo.travaglini@arm.com
15813481Sgiacomo.travaglini@arm.com    Crossbar specs
15913481Sgiacomo.travaglini@arm.com    --------------
16013481Sgiacomo.travaglini@arm.com        Currently DSENT only supports multiplexer-based crossbars 
16113481Sgiacomo.travaglini@arm.com        (MULTREE_CROSSBAR). You no longer need to specify the degree of the
16213481Sgiacomo.travaglini@arm.com        multiplexers. 
16313481Sgiacomo.travaglini@arm.com
16413481Sgiacomo.travaglini@arm.com    Switch allocator specs
16513481Sgiacomo.travaglini@arm.com    ----------------------
16613481Sgiacomo.travaglini@arm.com        DSENT models a two-stage switch allocator. The first stage is used to 
16713481Sgiacomo.travaglini@arm.com        arbitrate between VCs in the same input port, and the second stage is 
16813481Sgiacomo.travaglini@arm.com        used to arbitrate between input ports. If there is only one VC in 
16913481Sgiacomo.travaglini@arm.com        the input port, then the energy/power/area cost for the first stage 
17013481Sgiacomo.travaglini@arm.com        will be zero. 
17113481Sgiacomo.travaglini@arm.com        
17213481Sgiacomo.travaglini@arm.com        Currently, DSENT supports MatrixArbiter. 
17313481Sgiacomo.travaglini@arm.com
17413481Sgiacomo.travaglini@arm.com    VC allocator specs
17513481Sgiacomo.travaglini@arm.com    ------------------
17613481Sgiacomo.travaglini@arm.com        We assume that the router uses a VC select scheme where the VC 
17713481Sgiacomo.travaglini@arm.com        allocation is done by just popping a FIFO. Currently DSENT ignores 
17813481Sgiacomo.travaglini@arm.com        this module since the FIFO that needs to keep the free VC information 
17913481Sgiacomo.travaglini@arm.com        should be small enough. 
18013481Sgiacomo.travaglini@arm.com
18113481Sgiacomo.travaglini@arm.com    Clock distribution specs
18213481Sgiacomo.travaglini@arm.com    ------------------------
18313481Sgiacomo.travaglini@arm.com        Currently DSENT provides a broadcast H-Tree model. You can specify 
18413481Sgiacomo.travaglini@arm.com        the number of levels of the H-Tree (normally 4 or 5 levels should be 
18513481Sgiacomo.travaglini@arm.com        enough). 
18613481Sgiacomo.travaglini@arm.com
18713481Sgiacomo.travaglini@arm.comDSENT replaces the original orion_router_power, orion_router_area and 
18813481Sgiacomo.travaglini@arm.comorion_link with QueryString and EvaluateString (see below for more detailed 
18913481Sgiacomo.travaglini@arm.cominformation on how to use them). 
19013481Sgiacomo.travaglini@arm.com
19113481Sgiacomo.travaglini@arm.com
19213481Sgiacomo.travaglini@arm.com===============================================================================
19313481Sgiacomo.travaglini@arm.comQueryString specifications
19413481Sgiacomo.travaglini@arm.com===============================================================================
19513481Sgiacomo.travaglini@arm.comDSENT is a query-based model evaluator. You use QueryString to specify what 
19613481Sgiacomo.travaglini@arm.cominformation you want DSENT to output. The syntax of a query string is shown as 
19713481Sgiacomo.travaglini@arm.comfollows: 
19813481Sgiacomo.travaglini@arm.com
19913481Sgiacomo.travaglini@arm.com    [Query type]>>[Instance name (with hierarchy)]:[Sub query type]@[Detail level]
20013481Sgiacomo.travaglini@arm.com
20113481Sgiacomo.travaglini@arm.com    E.g., Area>>Router->Crossbar:Active@4
20213481Sgiacomo.travaglini@arm.com        * Query type:       Area
20313481Sgiacomo.travaglini@arm.com        * Instance name:    Router->Crossbar
204        * Sub query type:   Active
205        * Detail level:     4
206
207    Query type
208    ----------
209        There are 9 types of queries: Parameter, Property, Energy, NddPower, 
210        Area, InstHier, EventHier, NddPowerHier, AreaHier. 
211
212        Parameter       - Print the model parameters needed to be specified 
213        Property        - Print the design constraints or utilization 
214            Use these to check what needs to be specified in the configuration 
215            file for the model. No sub query type is needed for these two 
216            types. 
217
218        Energy          - Print the data-dependent energy cost of an event
219        NddPower        - Print the non-data-denepent power of an instance
220        Area            - Print the area cost of an instance
221            Use these to obtain the costs of the specified model.
222
223        InstHier        - Print the instance name hierarchy
224            Use this to know what sub-instances are built for this model
225
226        EventHier       - Print the available events for Energy queries
227        NddPowerHier    - Print the available non-data-dependent power types
228        AreaHier        - Print the available area types
229            Use this to know what to specify in the "sub query type" field. 
230
231    Instance name (with hierarchy)
232    ------------------------------
233        The (sub)instance that you want to perform query. The name should be 
234        hierarchical starting from the top level model. Hierarchies are 
235        separated by the symbol "->".
236
237    Sub query type
238    --------------
239        This field is not required for 'Parameter', 'Property' and 'InstHier'.
240
241        For 'Energy', this field stands for the event that cause this energy 
242        cost, such as 'WriteBuffer'. 
243
244        For 'NddPower' and 'Area', this field stands for the power and area 
245        cost of the model, such as 'Leakage' and 'Active'. 
246
247        For 'EventHier', if this field is not specified, all events of this 
248        instance will be printed; if this field is specified, then only 
249        the specified event will be printed. 'AreaHier' and 'NddPowerHier' 
250        also have the similar behavior. 
251        
252    Detail level
253    ------------
254        Defines the hierarchy depth to be printed. '0' means current level. 
255        This field is needed for all query types for syntax correctness, 
256        although it is not used for 'Parameter' and 'Property'. 
257
258    Multi-line queries
259    ------------------
260        Query strings specified across multiple lines in the config file
261        must have each line be terminated by a '\'. It is whitespace sensitive,
262        so make sure there are no spaces after '\'. Note that the parser
263        prunes everything after the comment '#' character, including '\'!
264        See configs/router.cfg as an example.
265
266    Examples of individual QueryString's:
267
268        Parameter>>Router@0
269        Property>>Router->Crossbar@0
270        InstHier>>Router->InputPort@2
271        Energy>>Router:WriteBuffer@2
272        NddPower>>Router->Crossbar:Leakage@3
273        Area>>Router->SwitchAllocator:Active@4
274
275        
276===============================================================================
277EvaluateString specifications
278===============================================================================
279DSENT provides a way to let users do custom calculations by specifying the 
280EvaluateString in the configuration file. EvaluateString constains a sequence 
281of statements separated by one ';'. DSENT reads through the sequence and 
282evaluates the statements one-by-one. 
283
284Currently, DSENT supports:
285    Four arithmetic operations
286    --------------------------
287        3 + 4 * (5 + 6) / 7;
288
289    Define local variables through assignments
290    ------------------------------------------
291        variable 'a' will be mapped to 7 for future referencing
292
293        a = 3 + 4;
294
295    Global variable referencing
296    ---------------------------
297        $(var_name) indicates either a key in the configuration file or a 
298        query string. If var_name exists in the configuration file, then the 
299        corresponding value will be returned; otherwise, DSENT will do a query 
300        using the string var_name@0 and return the query result. 
301
302        b = $(Energy>>Router:WriteBuffer) * $(Frequency);
303
304    Printing outputs
305    ----------------
306        DSENT prints the string following the keyword 'print'. 
307
308        print <expression>
309        print "<string_to_print>";
310        print "<string_to_print>" <expression>;
311
312        print 3 + 4;                # Output: 7
313        print "Hello World";        # Output: Hello World
314        print "Hello World " 3 + 4; # Output: Hello World 7
315        
316    Multi-line evaluate strings
317    ---------------------------
318        Evaluate strings specified across multiple lines in the config file
319        must have each line be terminated by a '\'. It is whitespace sensitive,
320        so make sure there are no spaces after '\'. Note that the parser
321        prunes everything after the comment '#' character, including '\'!
322        See configs/router.cfg as an example.
323
324        
325===============================================================================
326Units
327===============================================================================
328DSENT uses only SI units for all inputs and outputs. For example:
329    time        = s (second)
330    distance    = m (meter)
331    capacitance = F (Farad)
332    power       = W (Watt)
333    energy      = J (Joule)
334    resistance  = Ohm
335    loss        = dB (Decibels)
336
337    
338===============================================================================
339Known Bugs and Issues
340===============================================================================
341
3421. If timing is not met, the timing optimizer will put the model in a state
343where everything is the maximum size (huge power, area). Thus, model results
344can be considered a gross over-estimate when timing isn't met. This is just the
345nature of the greedy timing optimizer and it will be addressed in the future.
346
3472. The VC control and credit buffer component of the router is currently
348not modeled, as they have always been assumed to be lumped into the "negligible
349control cost" category in previous models and evaluations. Our recent
350experiments have shown that this is not true and we will be adding this in the
351next iteration.
352
3533. Some of the connectivity paths have not been checked thoroughly. Thus,
354timing optimizer may miss some of the paths. However, we tried to make sure
355that the critical paths are modeled properly.
356
3574. Local interconnect will have an ever-larger impact on power and timing as
358technology scales. So far we have not implemented a method for automatically
359estimating them but we will eventually address this. Evaluations for 22nm
360and below will tend to underestimate as a result.
361
362===============================================================================
363Revision log
364===============================================================================
365V0.91:
366    Bugs fix:
367        1. Leakage power calculation printout for router (configs/router.cfg).
368
369    New feature:
370        1. Area printout for router (configs/router.cfg).
371
372V0.9:
373    First release.
374
375