diff --git a/crlcore/etc/cmos/alliance.conf b/crlcore/etc/cmos/alliance.conf index 41325773..6650712e 100644 --- a/crlcore/etc/cmos/alliance.conf +++ b/crlcore/etc/cmos/alliance.conf @@ -49,13 +49,13 @@ allianceConfig = \ routingGaugesTable = {} routingGaugesTable['sxlib'] = \ - ( ( 'METAL1', ( Gauge.Vertical , Gauge.PinOnly, 0, 0.0, 0, 5, 2, 2 ) ) - , ( 'METAL2', ( Gauge.Horizontal, Gauge.Default, 1, 7.0, 0, 5, 2, 2 ) ) - , ( 'METAL3', ( Gauge.Vertical , Gauge.Default, 2, 0.0, 0, 5, 2, 2 ) ) - , ( 'METAL4', ( Gauge.Horizontal, Gauge.Default, 3, 0.0, 0, 5, 2, 2 ) ) - , ( 'METAL5', ( Gauge.Vertical , Gauge.Default, 4, 0.0, 0, 5, 2, 2 ) ) - #, ( 'METAL6', ( Gauge.Horizontal, Gauge.Default, 5, 0.0, 0, 5, 2, 2 ) ) - #, ( 'METAL7', ( Gauge.Vertical , Gauge.Default, 6, 0.0, 0, 5, 2, 2 ) ) + ( ( 'METAL1', ( Gauge.Vertical , Gauge.PinOnly, 0, 0.0, 0, 5, 2, 1 ) ) + , ( 'METAL2', ( Gauge.Horizontal, Gauge.Default, 1, 7.0, 0, 5, 2, 1 ) ) + , ( 'METAL3', ( Gauge.Vertical , Gauge.Default, 2, 0.0, 0, 5, 2, 1 ) ) + , ( 'METAL4', ( Gauge.Horizontal, Gauge.Default, 3, 0.0, 0, 5, 2, 1 ) ) + , ( 'METAL5', ( Gauge.Vertical , Gauge.Default, 4, 0.0, 0, 5, 2, 1 ) ) + #, ( 'METAL6', ( Gauge.Horizontal, Gauge.Default, 5, 0.0, 0, 5, 2, 1 ) ) + #, ( 'METAL7', ( Gauge.Vertical , Gauge.Default, 6, 0.0, 0, 5, 2, 1 ) ) ) diff --git a/cumulus/src/CMakeLists.txt b/cumulus/src/CMakeLists.txt index 474068ec..9d0349f6 100644 --- a/cumulus/src/CMakeLists.txt +++ b/cumulus/src/CMakeLists.txt @@ -7,6 +7,7 @@ set ( pyPlugins ${CMAKE_CURRENT_SOURCE_DIR}/plugins/__init__.py ${CMAKE_CURRENT_SOURCE_DIR}/plugins/ChipPlugin.py ${CMAKE_CURRENT_SOURCE_DIR}/plugins/ClockTreePlugin.py + ${CMAKE_CURRENT_SOURCE_DIR}/plugins/RSavePlugin.py ) set ( pyPluginCT ${CMAKE_CURRENT_SOURCE_DIR}/plugins/clocktree/__init__.py ${CMAKE_CURRENT_SOURCE_DIR}/plugins/clocktree/RSMT.py diff --git a/cumulus/src/plugins/RSavePlugin.py b/cumulus/src/plugins/RSavePlugin.py new file mode 100644 index 00000000..fa3a0e62 --- /dev/null +++ b/cumulus/src/plugins/RSavePlugin.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python +# +# This file is part of the Coriolis Software. +# Copyright (c) UPMC 2014-2014, All Rights Reserved +# +# +-----------------------------------------------------------------+ +# | C O R I O L I S | +# | C u m u l u s - P y t h o n T o o l s | +# | | +# | Author : Jean-Paul CHAPUT | +# | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +# | =============================================================== | +# | Python : "./plugins/RSavePlugin.py" | +# +-----------------------------------------------------------------+ + + +try: + import sys + import traceback + import os.path + import Cfg + import CRL + import helpers + from helpers import ErrorMessage + from helpers import WarningMessage + import plugins +except ImportError, e: + serror = str(e) + if serror.startswith('No module named'): + module = serror.split()[-1] + print '[ERROR] The <%s> python module or symbol cannot be loaded.' % module + print ' Please check the integrity of the package.' + if str(e).find('cannot open shared object file'): + library = serror.split(':')[0] + print '[ERROR] The <%s> shared library cannot be loaded.' % library + print ' Under RHEL 6, you must be under devtoolset-2.' + print ' (scl enable devtoolset-2 bash)' + sys.exit(1) +except Exception, e: + print '[ERROR] A strange exception occurred while loading the basic Coriolis/Python' + print ' modules. Something may be wrong at Python/C API level.\n' + print ' %s' % e + sys.exit(2) + + +# Write back layout to disk if everything has gone fine. +# Must write all the sub-blocks of the core but *not* the +# standard cell (mainly the feed-through). + +def rsave ( cell, depth=0 ): + if cell.isTerminal(): return + + framework = CRL.AllianceFramework.get() + if depth == 0: print ' o Recursive Save-Cell.' + + print ' %s+ %s (layout).' % ( ' '*(depth*2), cell.getName() ) + framework.saveCell( cell, CRL.Catalog.State.Physical ) + + for instance in cell.getInstances(): + masterCell = instance.getMasterCell() + if not masterCell.isTerminal(): + rsave( masterCell, depth+1 ) + return + + +# -------------------------------------------------------------------- +# Plugin hook functions, unicornHook:menus, ScritMain:call + +def unicornHook ( **kw ): + plugins.kwUnicornHook( 'plugins.rsave' + , 'R-Save Cell' + , 'Recursively Save Top Cell and it\'s Instances' + , sys.modules[__name__].__file__ + , **kw + ) + return + + +def ScriptMain ( **kw ): + try: + helpers.staticInitialization( quiet=True ) + #helpers.setTraceLevel( 550 ) + + cell, editor = plugins.kwParseMain( **kw ) + + if not cell: + print WarningMessage( 'No Cell loaded in the editor (yet), nothing done.' ) + return 0 + + rsave( cell ) + + except ErrorMessage, e: + print e; errorCode = e.code + except Exception, e: + print '\n\n', e; errorCode = 1 + traceback.print_tb(sys.exc_info()[2]) + + sys.stdout.flush() + sys.stderr.flush() + + return 0 diff --git a/cumulus/src/plugins/chip/BlockCorona.py b/cumulus/src/plugins/chip/BlockCorona.py index 9c151d6b..d506dcfa 100644 --- a/cumulus/src/plugins/chip/BlockCorona.py +++ b/cumulus/src/plugins/chip/BlockCorona.py @@ -33,6 +33,7 @@ from CRL import RoutingLayerGauge from helpers import trace from helpers import ErrorMessage from helpers import WarningMessage +import plugins from plugins import StackedVia import chip.BlockPower @@ -365,8 +366,8 @@ class EastSide ( VerticalSide ): class Corona ( object ): def __init__ ( self, block ): - if not isinstance(block,chip.BlockPower.Block): - raise ErrorMessage( 1, 'Attempt to create a Corona on a non-Block object.' ) + #if not isinstance(block,plugins.chip.BlockPower.Block): + # raise ErrorMessage( 1, 'Attempt to create a Corona on a non-Block object.' ) self._railsNb = Cfg.getParamInt('chip.block.rails.count').asInt() self._hRailWidth = DbU.fromLambda( Cfg.getParamInt('chip.block.rails.hWidth' ).asInt() ) diff --git a/cumulus/src/plugins/chip/BlockPower.py b/cumulus/src/plugins/chip/BlockPower.py index db8492db..d081bac5 100644 --- a/cumulus/src/plugins/chip/BlockPower.py +++ b/cumulus/src/plugins/chip/BlockPower.py @@ -39,11 +39,12 @@ import chip.Configuration class Side ( object ): def __init__ ( self, block, side, net, metal ): - self.block = block - self.side = side - self.net = net - self.metal = metal - self.terminals = [ ] + self.block = block + self.side = side + self.net = net + self.metal = metal + self.deltaWidth = metal.getExtentionWidth()*2 + self.terminals = [ ] return def addTerminal ( self, position, width ): @@ -97,11 +98,11 @@ class Side ( object ): for terminal in self.terminals: if self.side == chip.West or self.side == chip.East: center = Point( x, terminal[0].getCenter() ) - height = terminal[0].getSize() + height = terminal[0].getSize() - self.deltaWidth if height < minWidth: height = minWidth elif self.side == chip.North or self.side == chip.South: center = Point( terminal[0].getCenter(), y ) - width = terminal[0].getSize() + width = terminal[0].getSize() - self.deltaWidth if width < minWidth: width = minWidth self.block.path.getTransformation().applyOn( center ) diff --git a/cumulus/src/plugins/chip/Configuration.py b/cumulus/src/plugins/chip/Configuration.py index 00959889..77a7c56a 100644 --- a/cumulus/src/plugins/chip/Configuration.py +++ b/cumulus/src/plugins/chip/Configuration.py @@ -114,6 +114,7 @@ class GaugeConf ( object ): OffsetRight1 = 0x0002 OffsetTop1 = 0x0004 OffsetBottom1 = 0x0008 + DeepDepth = 0x0010 def __init__ ( self ): self._cellGauge = None @@ -143,39 +144,56 @@ class GaugeConf ( object ): % self._routingGauge.getDepth() ) self._topLayerDepth = self._routingGauge.getDepth() - self._horizontalDepth = 0 - self._verticalDepth = 0 + self._horizontalDepth = -1 + self._verticalDepth = -1 + self._horizontalDeepDepth = -1 + self._verticalDeepDepth = -1 for depth in range(0,self._topLayerDepth+1): + if self._routingGauge.getLayerGauge(depth).getType() == RoutingLayerGauge.PinOnly: + continue if self._routingGauge.getLayerGauge(depth).getDirection() == RoutingLayerGauge.Horizontal: + if self._horizontalDeepDepth < 0: + self._horizontalDeepDepth = depth self._horizontalDepth = depth if self._routingGauge.getLayerGauge(depth).getDirection() == RoutingLayerGauge.Vertical: + if self._verticalDeepDepth < 0: + self._verticalDeepDepth = depth self._verticalDepth = depth return - def _createContact ( self, net, x, y ): + def _createContact ( self, net, x, y, flags ): + if flags & GaugeConf.DeepDepth: depth = self._horizontalDeepDepth + else: depth = self._horizontalDepth + return Contact.create( net - , self._routingGauge.getContactLayer(self._horizontalDepth) + , self._routingGauge.getContactLayer(depth) , x, y - , self._routingGauge.getLayerGauge(self._horizontalDepth).getViaWidth() - , self._routingGauge.getLayerGauge(self._horizontalDepth).getViaWidth() + , self._routingGauge.getLayerGauge(depth).getViaWidth() + , self._routingGauge.getLayerGauge(depth).getViaWidth() ) - def _createHorizontal ( self, source, target, y ): + def _createHorizontal ( self, source, target, y, flags ): + if flags & GaugeConf.DeepDepth: depth = self._horizontalDeepDepth + else: depth = self._horizontalDepth + segment = Horizontal.create( source , target - , self._routingGauge.getRoutingLayer(self._horizontalDepth) + , self._routingGauge.getRoutingLayer(depth) , y - , self._routingGauge.getLayerGauge(self._horizontalDepth).getWireWidth() + , self._routingGauge.getLayerGauge(depth).getWireWidth() ) trace( 550, segment ) return segment - def _createVertical ( self, source, target, x ): + def _createVertical ( self, source, target, x, flags ): + if flags & GaugeConf.DeepDepth: depth = self._verticalDeepDepth + else: depth = self._verticalDepth + segment = Vertical.create( source , target - , self._routingGauge.getRoutingLayer(self._verticalDepth) + , self._routingGauge.getRoutingLayer(depth) , x - , self._routingGauge.getLayerGauge(self._verticalDepth).getWireWidth() + , self._routingGauge.getLayerGauge(depth).getWireWidth() ) trace( 550, segment ) return segment @@ -183,8 +201,15 @@ class GaugeConf ( object ): def _rpAccess ( self, rp, flags ): trace( 550, ',+', '\t_rpAccess() %s\n' % str(rp) ) - hpitch = self._routingGauge.getLayerGauge(self._horizontalDepth).getPitch() - hoffset = self._routingGauge.getLayerGauge(self._horizontalDepth).getOffset() + if flags & GaugeConf.DeepDepth: + hdepth = self._horizontalDeepDepth + vdepth = self._verticalDeepDepth + else: + hdepth = self._horizontalDepth + vdepth = self._verticalDepth + + hpitch = self._routingGauge.getLayerGauge(hdepth).getPitch() + hoffset = self._routingGauge.getLayerGauge(hdepth).getOffset() contact1 = Contact.create( rp, self._routingGauge.getContactLayer(0), 0, 0 ) midSliceY = contact1.getY() - (contact1.getY() % self._cellGauge.getSliceHeight()) \ + self._cellGauge.getSliceHeight() / 2 @@ -197,8 +222,8 @@ class GaugeConf ( object ): trace( 550, contact1 ) - if flags & GaugeConf.HAccess: stopDepth = self._horizontalDepth - else: stopDepth = self._verticalDepth + if flags & GaugeConf.HAccess: stopDepth = hdepth + else: stopDepth = vdepth for depth in range(1,stopDepth): xoffset = 0 @@ -289,13 +314,17 @@ class GaugeConfWrapper ( object ): def gaugeConf ( self ): return self._gaugeConf @property - def routingGauge ( self ): return self._gaugeConf._routingGauge + def routingGauge ( self ): return self._gaugeConf._routingGauge + @property + def topLayerDepth ( self ): return self._gaugeConf._topLayerDepth + @property + def horizontalDepth ( self ): return self._gaugeConf._horizontalDepth + @property + def verticalDepth ( self ): return self._gaugeConf._verticalDepth @property - def topLayerDepth ( self ): return self._gaugeConf._topLayerDepth + def horizontalDeepDepth ( self ): return self._gaugeConf._horizontalDeepDepth @property - def horizontalDepth ( self ): return self._gaugeConf._horizontalDepth - @property - def verticalDepth ( self ): return self._gaugeConf._verticalDepth + def verticalDeepDepth ( self ): return self._gaugeConf._verticalDeepDepth def loadRoutingGauge ( self ): self._gaugeConf._loadRoutingGauge() @@ -314,14 +343,14 @@ class GaugeConfWrapper ( object ): def rpAccessByPlugName ( self, instance, plugName, net, flags=0 ): return self._gaugeConf._rpAccessByPlugName( instance, plugName, net, flags ) - def createContact ( self, net, x, y ): - return self._gaugeConf._createContact( net, x, y ) + def createContact ( self, net, x, y, flags=0 ): + return self._gaugeConf._createContact( net, x, y, flags ) - def createHorizontal ( self, source, target, y ): - return self._gaugeConf._createHorizontal( source, target, y ) + def createHorizontal ( self, source, target, y, flags=0 ): + return self._gaugeConf._createHorizontal( source, target, y, flags ) - def createVertical ( self, source, target, x ): - return self._gaugeConf._createVertical( source, target, x ) + def createVertical ( self, source, target, x, flags=0 ): + return self._gaugeConf._createVertical( source, target, x, flags ) # ------------------------------------------------------------------- @@ -672,7 +701,10 @@ class ChipConfWrapper ( GaugeConfWrapper ): def loadConfiguration ( cell ): sys.path.append( os.getcwd() ) - confFile = cell.getName()+'_chip' + confFile = cell.getName()+'_chip' + if not os.path.isfile(confFile+'.py'): + raise ErrorMessage( 1, 'ChipPlugin configuration file <%s.py> is missing.' % confFile ) + confModule = __import__( confFile, globals(), locals(), confFile ) if not confModule.__dict__.has_key('chip'): diff --git a/cumulus/src/plugins/clocktree/ClockTree.py b/cumulus/src/plugins/clocktree/ClockTree.py index 132ed5e2..c4adf574 100755 --- a/cumulus/src/plugins/clocktree/ClockTree.py +++ b/cumulus/src/plugins/clocktree/ClockTree.py @@ -54,6 +54,7 @@ try: from chip.Configuration import getPlugByName from chip.Configuration import getRpBb from chip.Configuration import destroyNetComponents + from chip.Configuration import GaugeConf from chip.Configuration import GaugeConfWrapper except ImportError, e: serror = str(e) @@ -76,11 +77,6 @@ except Exception, e: class HTree ( GaugeConfWrapper ): - HAccess = 0x0001 - OffsetRight1 = 0x0002 - OffsetTop1 = 0x0004 - OffsetBottom1 = 0x0008 - @staticmethod def create ( conf, cell, clockNet, clockBox ): if clockBox.isEmpty(): raise ErrorMessage( 3, 'ClockTree: The clock area is empty.' ) @@ -263,25 +259,28 @@ class HTree ( GaugeConfWrapper ): if not node.component: x = node.realX if node.realX in self.usedVTracks: - x += self.routingGauge.getLayerGauge(self.verticalDepth).getPitch() + x += self.routingGauge.getLayerGauge(self.verticalDeepDepth).getPitch() # This is a Steiner point. node.component = self.createContact( net , x - , node.realY - self.routingGauge.getLayerGauge(self.horizontalDepth).getPitch() ) - trace( 550, '\tCreate node.component: @Y%d (y:%d) %s\n' % (DbU.toLambda(node.realY) - ,DbU.toLambda(node.y) - ,node.component) ) + , node.y + self.cellGauge.getSliceHeight()/2 - self.routingGauge.getLayerGauge(self.horizontalDeepDepth).getPitch() + , GaugeConf.DeepDepth ) + trace( 550, '\tCreate (Steiner) node.component: @Y%d (y:%d - %d) %s\n' \ + % (DbU.toLambda(node.realY) + ,DbU.toLambda(node.y) + ,DbU.toLambda(self.routingGauge.getLayerGauge(self.horizontalDeepDepth).getPitch()) + ,node.component) ) else: # This a terminal (graph) point for edge in node.edges: - flags = HTree.HAccess + flags = GaugeConf.HAccess|GaugeConf.DeepDepth if not edge.isHorizontal(): if node.isSame(edge.source) or edge.isVertical(): - flags = 0 + flags &= ~GaugeConf.HAccess break - flags |= HTree.OffsetTop1 + flags |= GaugeConf.OffsetTop1 if node.realX in self.usedVTracks: - flags |= HTree.OffsetRight1 + flags |= GaugeConf.OffsetRight1 node.component = self.rpAccess( node.component, flags ) for edge in mst.edges: @@ -289,32 +288,33 @@ class HTree ( GaugeConfWrapper ): targetContact = edge.target.component if edge.isHorizontal(): - self.createHorizontal( sourceContact, targetContact, targetContact.getY() ) + self.createHorizontal( sourceContact, targetContact, targetContact.getY(), GaugeConf.DeepDepth ) elif edge.isVertical(): - self.createVertical ( sourceContact, targetContact, sourceContact.getX() ) + self.createVertical ( sourceContact, targetContact, sourceContact.getX(), GaugeConf.DeepDepth ) else: turn = self.createContact( edge.source.component.getNet() , sourceContact.getX() - , targetContact.getY() ) - self.createVertical ( sourceContact, turn, sourceContact.getX() ) - self.createHorizontal( turn, targetContact, targetContact.getY() ) + , targetContact.getY() + , GaugeConf.DeepDepth ) + self.createVertical ( sourceContact, turn, sourceContact.getX(), GaugeConf.DeepDepth ) + self.createHorizontal( turn, targetContact, targetContact.getY(), GaugeConf.DeepDepth ) return def _connectLeafs ( self, leafBuffer, leafs ): trace( 550, ',+', '\tBuffer <%s> has %i leafs.\n' % (leafBuffer.getName(),len(leafs)) ) - if len(leafs) == 0: return - - leafCk = getPlugByName(leafBuffer,self.bufferOut).getNet() - bufferRp = self.rpByPlugName( leafBuffer, self.bufferOut, leafCk ) - - rsmt = RSMT( leafCk.getName() ) - rsmt.addNode( bufferRp, bufferRp.getX(), self.toYCellGrid(bufferRp.getY()) ) - for leaf in leafs: - registerRp = self.rpByOccurrence( leaf, leafCk ) - rsmt.addNode( registerRp, registerRp.getX(), self.toYCellGrid(registerRp.getY()) ) - - rsmt.runI1S() - self._RSMTtoLayout( rsmt, leafCk ) + #if len(leafs) == 0: return + # + #leafCk = getPlugByName(leafBuffer,self.bufferOut).getNet() + #bufferRp = self.rpByPlugName( leafBuffer, self.bufferOut, leafCk ) + # + #rsmt = RSMT( leafCk.getName() ) + #rsmt.addNode( bufferRp, bufferRp.getX(), self.toYCellGrid(bufferRp.getY()) ) + #for leaf in leafs: + # registerRp = self.rpByOccurrence( leaf, leafCk ) + # rsmt.addNode( registerRp, registerRp.getX(), self.toYCellGrid(registerRp.getY()) ) + # + #rsmt.runI1S() + #self._RSMTtoLayout( rsmt, leafCk ) trace( 550, '-' ) return @@ -507,8 +507,8 @@ class HTreeNode ( object ): def route ( self ): if not self.hasLeafs(): return - leftSourceContact = self.topTree.rpAccessByPlugName( self.sourceBuffer, self.topTree.bufferOut, self.ckNet , HTree.HAccess|HTree.OffsetBottom1 ) - rightSourceContact = self.topTree.rpAccessByPlugName( self.sourceBuffer, self.topTree.bufferOut, self.ckNet , HTree.HAccess|HTree.OffsetBottom1 ) + leftSourceContact = self.topTree.rpAccessByPlugName( self.sourceBuffer, self.topTree.bufferOut, self.ckNet , GaugeConf.HAccess|GaugeConf.OffsetBottom1 ) + rightSourceContact = self.topTree.rpAccessByPlugName( self.sourceBuffer, self.topTree.bufferOut, self.ckNet , GaugeConf.HAccess|GaugeConf.OffsetBottom1 ) blContact = self.topTree.rpAccessByPlugName( self.blBuffer , self.topTree.bufferIn , self.ckNet ) brContact = self.topTree.rpAccessByPlugName( self.brBuffer , self.topTree.bufferIn , self.ckNet ) tlContact = self.topTree.rpAccessByPlugName( self.tlBuffer , self.topTree.bufferIn , self.ckNet ) diff --git a/cumulus/src/plugins/clocktree/RSMT.py b/cumulus/src/plugins/clocktree/RSMT.py index 55a37598..ae264aa7 100644 --- a/cumulus/src/plugins/clocktree/RSMT.py +++ b/cumulus/src/plugins/clocktree/RSMT.py @@ -199,7 +199,7 @@ class Graph ( object ): def addNode ( self, component, x, y ): self._nodes.append( Node( component, x, y ) ) - return + return self._nodes[-1] def copyNode ( self, node ): self.addNode( node.component, node.x, node.y ) @@ -316,6 +316,11 @@ class RSMT ( Graph ): trace( 550, ',--', "\n" ) return + def addNode ( self, component, x, y ): + node = Graph.addNode( self, component, x, y ) + trace( 550, '\t New Node: %s\n' % node ) + return + def runI1S ( self ): self._edges = [ ] self._length = 0 diff --git a/cumulus/src/tools/px2mpx.py b/cumulus/src/tools/px2mpx.py index 47ac4dd2..422c2ff5 100755 --- a/cumulus/src/tools/px2mpx.py +++ b/cumulus/src/tools/px2mpx.py @@ -71,7 +71,7 @@ def getDeltas ( layer ): # , 'mW_METAL2' : DbU.fromLambda( 4.0 ) # } deltas = { 'L_METAL1' : DbU.fromLambda( -1.0 ) - , 'L_METAL2' : DbU.fromLambda( 3.0 ) + , 'L_METAL2' : DbU.fromLambda( 1.5 ) , 'L_blockage2': DbU.fromLambda( -0.5 ) , 'L_blockage4': DbU.fromLambda( -0.5 ) , 'L_xWell' : DbU.fromLambda( 6.0 ) @@ -82,7 +82,7 @@ def getDeltas ( layer ): , 'W_xWell' : DbU.fromLambda( 12.0 ) , 'W_blockage2': DbU.fromLambda( -1.0 ) , 'mW_METAL1' : DbU.fromLambda( 4.0 ) - , 'mW_METAL2' : DbU.fromLambda( 4.0 ) + , 'mW_METAL2' : DbU.fromLambda( 6.0 ) } dL = 0 @@ -218,6 +218,7 @@ def px2mpx ( editor, pxCell ): , component.getDxSource()*2 - dLLeft , component.getDxTarget()*2 + dLRight ) + print ' Copy:', dupComponent else: print ' Horizontal component too small *or* skipped, not converted' diff --git a/documentation/RDS/HTML_defs.rst b/documentation/RDS/HTML_defs.rst new file mode 100644 index 00000000..b5cacd34 --- /dev/null +++ b/documentation/RDS/HTML_defs.rst @@ -0,0 +1,19 @@ +.. -*- Mode: rst -*- + +.. role:: raw-html(raw) + :format: html + +.. URLs that changes between the various backends. + +.. For HTML backend + +.. Stand-alone images. +.. |RDS_VW| replace:: :raw-html:`
RDS Variable Width Rule
` +.. |RDS_LCW| replace:: :raw-html:`
RDS Left Constant Width Rule
` + +.. Direct LaTeX commands encapsulation. +.. |dotfill| replace:: :raw-html:`  ` +.. |noindent| replace:: :raw-html:`

` +.. |medskip| replace:: :raw-html:`
` +.. |newpage| replace:: :raw-html:`
` + diff --git a/documentation/RDS/LaTeX_defs.rst b/documentation/RDS/LaTeX_defs.rst new file mode 100644 index 00000000..0bfe6612 --- /dev/null +++ b/documentation/RDS/LaTeX_defs.rst @@ -0,0 +1,22 @@ + +.. -*- Mode: rst -*- + +.. role:: raw-latex(raw) + :format: latex + +.. URLs that changes between the various backends. + +.. |DONE| replace:: :raw-latex:`\marginpar{\fbox{\small\ding{56}}}` + +.. For LaTeX/PDF backend. + +.. Stand-alone images. +.. |RDS_VW| replace:: :raw-latex:`\begin{center}\fbox{\includegraphics[width=.7\textwidth]{./images/RDS_VW.eps}}\end{center}` +.. |RDS_LCW| replace:: :raw-latex:`\begin{center}\fbox{\includegraphics[width=.4\textwidth]{./images/RDS_LCW.eps}}\end{center}` + +.. Direct LaTeX commands encapsulation. +.. |dotfill| replace:: :raw-latex:`\dotfill` +.. |noindent| replace:: :raw-latex:`\noindent` +.. |medskip| replace:: :raw-latex:`\medskip` +.. |newpage| replace:: :raw-latex:`\newpage` + diff --git a/documentation/RDS/RDS.html b/documentation/RDS/RDS.html new file mode 100644 index 00000000..7459c5dc --- /dev/null +++ b/documentation/RDS/RDS.html @@ -0,0 +1,345 @@ + + + + + + + + + + + + +
+ + +++ + + + + + + + + + +
Date:16, september 2014
Authors:Jean-Paul Chaput
Contact:<alliance-users@soc.lip6.fr>
Version:0.1
+ + + + + + + + + + +


+

Disclaimer: This document is still far from complete.

+


+
+

RDS File Format

+ +


+


+
+

Introduction

+

The RDS file control how a symbolic layout is transformed into it's real +conterpart.

+
+

Note

+

Unit used inside the RDS file: all units are expressed in micrometers.

+
+

Alliance tools relying on the RDS file, and what layers are active for them:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ToolNameRDS Flags
Layout editorgraalALL
Design Rule CheckerdrucALL, DRC
Electrical extractorcougarALL, EXT
The symbolic to real layout translators2rALL
+
+
+

Physical Grid & Lambda Value

+

RDS file:

+
+DEFINE  PHYSICAL_GRID  0.005
+DEFINE  LAMBDA         0.09
+
+

Tells that the physical grid (founder grid) step is 0.005µm and the lambda has +a value of 0.09µm. That is, one lambda is 18 grid steps.

+

We can distinguish two kind of rds files:

+
    +
  • The 1µm kind, odd segment widths and coordinates are allowed, but the LAMBDA +value must represent an even number of foundry grid step.
  • +
  • The 2µm kind, segments widths and coordinates must all be even. And in that case +the LAMBDA value can be any multiple of the foundry grid.
  • +
+
+
+

The MBK_TO_RDS_SEGMENT table

+

The MBK_TO_RDS_SEGMENT table control the way segments are translated into +real rectangles. Be aware that we are translating segments and not rectangles. +Segments are defined by their axis (source & target points) and their width. +The geometrical transformations are described according to that model. +Obviously, they are either horizontal or vertical.

+

The translation method of a symbolic segment is as follow:

+
    +
  1. The segment is translated into one or more physical rectangles. +The generated rectangles depends on the tool which is actually +using rds and the flag for the considered real layer. +For instance, real layers flagged with DRC will be generated +for s2r (for the cif or gds) and druc, but will not +be shown under graal.

    +
  2. +
  3. Translation into one real layer. First the source & target coordinates and width +of the symbolic segment are multiplied by the LAMBDA value to obtain a real +segment. Then one of the VW, LCW or RCW transformation is applied to +that segment to get the final real rectangle.

    +
      +
    • VW for Variable Width, expand the real layer staying centered from the +original one. In those rules, the third number is not used, it is only here +to make the life easier for the parser...

      +

      RDS Variable Width Rule

      +
    • +
    • LCW or RCW for Left/Right Constant Width, create an off-center rectangle +of fixed width relatively to the real segment. Note that the SP number +is the distance between the edge of the real segment and the edge of the +generated real rectangle (not from the axis). It is often zero.

      +

      RDS Left Constant Width Rule

      +
    • +
    +
  4. +
+


+

Examples:

+
+TABLE MBK_TO_RDS_SEGMENT
+
+    # (Case 1)
+    ALU1       RDS_ALU1   VW  0.18  0.09  0.0  ALL
+
+    # (Case 2)
+    NDIF       RDS_NDIF   VW  0.18  0.0   0.0  ALL \
+               RDS_ACTIV  VW  0.18  0.0   0.0  DRC \
+               RDS_NIMP   VW  0.36  0.36  0.0  DRC
+
+    # (Case 3)
+    NTRANS     RDS_POLY   VW  0.27  0.00  0.0  ALL \
+               RDS_GATE   VW  0.27  0.00  0.0  DRC \
+               RDS_NDIF  LCW  0.0   0.27  0.0  EXT \
+               RDS_NDIF  RCW  0.0   0.27  0.0  EXT \
+               RDS_NDIF   VW  0.0   0.72  0.0  DRC \
+               RDS_ACTIV  VW  0.0   0.72  0.0  ALL \
+               RDS_NIMP   VW  0.18  1.26  0.0  DRC
+
+END
+
+

Case 1 the ALU1 is translated in exacltly one real rectangle of +RDS_ALU1, both ends are extended by 0.18µm and it's width is increased +by 0.09µm.

+

Case 2 the NDIF will be translated into only one segment +under graal, for symbolic visualization. And into three real rectangles +for s2r and druc.

+

Case 3 the NTRANS, associated to a transistor is a little bit +more complex, the generated shapes are different for the extractor cougar +in one hand, and for both druc & s2r in the other hand.

+
    +
  • For the extractor (EXT & ALL flags) there will be four rectangles +generateds:

    +
      +
    1. The gate (RDS_GATE)
    2. +
    3. The left diffusion of the transistor (source or drain) (RDS_NDIF).
    4. +
    5. The right diffusion of the transistor (drain or source) (RDS_NDIF).
    6. +
    7. The active area (RDS_ACTIV).
    8. +
    +

    As the extractor must kept separate the source and the drain of the transistor, +they are generated as two offset rectangles, using the LCW and RCW directives.

    +
  • +
  • For s2r and druc (DRC and ALL), five rectangles are generateds:

    +
      +
    1. The poly (RDS_POLY).
    2. +
    3. The gate (RDS_GATE).
    4. +
    5. The diffusion, as one rectangle that covers both the LCW and the RCW (RDS_NDIF).
    6. +
    7. The active area (RDS_ACTIV).
    8. +
    9. The N implantation (RDS_NIMP).
    10. +
    +

    In the layout send to the foundry, the source & drain are draw as one rectangle +across the gate area (the transistor being defined by the intersection of both +rectangles).

    +
  • +
+


+
+
+

The MBK_TO_RDS_VIA table

+

This table is to translate default VIAs into real via. In the symbolic layout +the default VIA is simply a point and a set of layers. All layers are converted +in squares shapes centered on the VIA coordinate. The one dimension given is the +size of the side of that square.

+

Note that although we are refering to VIAs, which for the purists are between two +metal layers, this table also describe contacts.

+

Example:

+
+TABLE MBK_TO_RDS_VIA
+
+    CONT_DIF_P RDS_PDIF  0.54 ALL \
+               RDS_CONT  0.18 ALL \
+               RDS_ALU1  0.36 ALL \
+               RDS_ACTIV 0.54 DRC \
+               RDS_PIMP  0.90 DRC
+
+    CONT_POLY  RDS_POLY  0.54 ALL \
+               RDS_CONT  0.18 ALL \
+               RDS_ALU1  0.36 ALL
+
+    CONT_VIA   RDS_ALU1  0.45 ALL \
+               RDS_VIA1  0.27 ALL \
+               RDS_ALU2  0.45 ALL
+
+END
+
+
+

Note

+

In CONT_DIF_P you may see that only three layers will be shown under +graal, but five will be generated in the gds layout.

+
+
+
+

The MBK_TO_RDS_BIGVIA_HOLE table

+

In s2r, when generating BIGVIAs, the matrix of holes they contains is +not draw relative to the position of the BIGVIA itself, but on a grid which +is common througout all the design real layout. This is to allow overlap +between two BIGVIA without risking the holes matrix to be not exactly overlapping. +As a consequence, when visualizing the gds file, the holes may not be centerend +inside one individual BIGVIA.

+

The MBK_TO_RDS_BIGVIA_HOLE table define the global hole matrix for the whole +design. The first number is the individual hole side and the second the grid step +(center to center).

+

Example:

+
+TABLE MBK_TO_RDS_BIGVIA_HOLE
+
+    CONT_VIA   RDS_VIA1 0.27 0.27 ALL
+    CONT_VIA2  RDS_VIA2 0.27 0.27 ALL
+    CONT_VIA3  RDS_VIA3 0.27 0.27 ALL
+    CONT_VIA4  RDS_VIA4 0.27 0.27 ALL
+    CONT_VIA5  RDS_VIA5 0.36 0.36 ALL
+
+END
+
+


+
+
+

The MBK_TO_RDS_BIGVIA_METAL table

+

This table describe how the metal part of a BIGVIA is expanded (for the hole +part, see the previous table MBK_TO_RDS_BIGVIA_HOLE). The rule give for each +metal:

+
    +
  1. The delta-with (have to ask Franck).
  2. +
  3. The overhang, the length the real rectangle is expanded on each side from +the symbolic rectange.
  4. +
+

Example:

+
+TABLE MBK_TO_RDS_BIGVIA_METAL
+
+    CONT_VIA  RDS_ALU1 0.0 0.09  ALL \
+              RDS_ALU2 0.0 0.09  ALL
+
+    CONT_VIA2 RDS_ALU2 0.0 0.09  ALL \
+              RDS_ALU3 0.0 0.09  ALL
+
+    CONT_VIA3 RDS_ALU3 0.0 0.09  ALL \
+              RDS_ALU4 0.0 0.09  ALL
+
+    CONT_VIA4 RDS_ALU4 0.0 0.09  ALL \
+              RDS_ALU5 0.0 0.09  ALL
+
+    CONT_VIA5 RDS_ALU5 0.0 0.09  ALL \
+              RDS_ALU6 0.0 0.18  ALL
+
+END
+
+


+
+
+

The MBK_WIRESETTING table

+

From a strict standpoint this table shouldn't be here but put in a separate +configuration file, because it contains informations only used by the symbolic +layout tools (ocp, nero, ring).

+

This table defines the cell gauge the routing pitch and minimal (symbolic) +wire width and minimal spacing for the routers. They are patly redundant.

+

Example:

+
+TABLE MBK_WIRESETTING
+
+    X_GRID             10
+    Y_GRID             10
+    Y_SLICE           100
+    WIDTH_VDD          12
+    WIDTH_VSS          12
+    TRACK_WIDTH_ALU8    0
+    TRACK_WIDTH_ALU7    4
+    TRACK_WIDTH_ALU6    4
+    TRACK_WIDTH_ALU5    4
+    TRACK_WIDTH_ALU4    3
+    TRACK_WIDTH_ALU3    3
+    TRACK_WIDTH_ALU2    3
+    TRACK_WIDTH_ALU1    3
+    TRACK_SPACING_ALU8  0
+    TRACK_SPACING_ALU7  4
+    TRACK_SPACING_ALU6  4
+    TRACK_SPACING_ALU5  4
+    TRACK_SPACING_ALU4  4
+    TRACK_SPACING_ALU3  4
+    TRACK_SPACING_ALU2  4
+    TRACK_SPACING_ALU1  3
+
+END
+
+
+
+
+ + diff --git a/documentation/RDS/RDS.rst b/documentation/RDS/RDS.rst new file mode 100644 index 00000000..9d658676 --- /dev/null +++ b/documentation/RDS/RDS.rst @@ -0,0 +1,349 @@ +.. -*- Mode: rst -*- + +.. role:: ul +.. role:: cb +.. role:: sc +.. role:: fboxtt + +.. Acronyms & names. +.. |GNU| replace:: :sc:`gnu` +.. |LGPL| replace:: :sc:`lgpl` +.. |GPL| replace:: :sc:`gpl` +.. |UPMC| replace:: :sc:`upmc` +.. |RDS| replace:: :sc:`rds` + +.. Tools +.. |ocp| replace:: ``ocp`` +.. |nero| replace:: ``nero`` +.. |ring| replace:: ``ring`` +.. |s2r| replace:: ``s2r`` +.. |druc| replace:: ``druc`` +.. |graal| replace:: ``graal`` +.. |cougar| replace:: ``cougar`` +.. |cif| replace:: ``cif`` +.. |gds| replace:: ``gds`` + +.. RDS file syntax. +.. |MBK_TO_RDS_SEGMENT| replace:: ``MBK_TO_RDS_SEGMENT`` +.. |MBK_TO_RDS_VIA| replace:: ``MBK_TO_RDS_VIA`` +.. |MBK_TO_RDS_BIGVIA_HOLE| replace:: ``MBK_TO_RDS_BIGVIA_HOLE`` +.. |MBK_TO_RDS_BIGVIA_METAL| replace:: ``MBK_TO_RDS_BIGVIA_METAL`` +.. |MBK_WIRESETTING| replace:: ``MBK_WIRESETTING`` +.. |ALL| replace:: ``ALL`` +.. |DRC| replace:: ``DRC`` +.. |EXT| replace:: ``EXT`` +.. |VW| replace:: ``VW`` +.. |LCW| replace:: ``LCW`` +.. |RCW| replace:: ``RCW`` +.. |ALU1| replace:: ``ALU1`` +.. |NDIF| replace:: ``NDIF`` +.. |NTRANS| replace:: ``NTRANS`` +.. |CONT_DIF_P| replace:: ``CONT_DIF_P`` +.. |RDS_NDIF| replace:: ``RDS_NDIF`` +.. |RDS_NIMP| replace:: ``RDS_NIMP`` +.. |RDS_ACTIV| replace:: ``RDS_ACTIV`` +.. |RDS_GATE| replace:: ``RDS_GATE`` +.. |RDS_POLY| replace:: ``RDS_POLY`` +.. |RDS_ALU1| replace:: ``RDS_ALU1`` + + +:Date: 16, september 2014 +:Authors: Jean-Paul Chaput +:Contact: +:Version: 0.1 + +|medskip| + +**Disclaimer:** This document is still far from complete. + +|medskip| + +=============== +RDS File Format +=============== + + +.. contents:: + +|medskip| + +|newpage| + + +Introduction +============ + + +The RDS file control how a symbolic layout is transformed into it's real +conterpart. + +.. note:: **Unit used inside the RDS file:** all units are expressed in micrometers. + +Alliance tools relying on the RDS file, and what layers are active for them: + +======================================= ============= =============================== +Tool Name RDS Flags +======================================= ============= =============================== +Layout editor |graal| |ALL| +Design Rule Checker |druc| |ALL|, |DRC| +Electrical extractor |cougar| |ALL|, |EXT| +The symbolic to real layout translator |s2r| |ALL| +======================================= ============= =============================== + + +Physical Grid & Lambda Value +============================ + +RDS file: :: + + DEFINE PHYSICAL_GRID 0.005 + DEFINE LAMBDA 0.09 + +Tells that the physical grid (founder grid) step is 0.005µm and the lambda has +a value of 0.09µm. That is, one lambda is 18 grid steps. + +We can distinguish two kind of |RDS| files: + +* The *1µm* kind, odd segment widths and coordinates are allowed, but the ``LAMBDA`` + value **must** represent an *even* number of foundry grid step. +* The *2µm* kind, segments widths and coordinates must all be even. And in that case + the ``LAMBDA`` value can be any multiple of the foundry grid. + + +The |MBK_TO_RDS_SEGMENT| table +============================== + +The |MBK_TO_RDS_SEGMENT| table control the way segments are translated into +real rectangles. Be aware that we are translating *segments* and not *rectangles*. +Segments are defined by their axis (source & target points) and their width. +The geometrical transformations are described according to that model. +Obviously, they are either horizontal or vertical. + +The translation method of a symbolic segment is as follow: + +1. The segment is translated into one or more physical rectangles. + The generated rectangles depends on the tool which is actually + using |RDS| and the flag for the considered real layer. + For instance, real layers flagged with |DRC| will be generated + for |s2r| (for the |cif| or |gds|) and |druc|, but will not + be shown under |graal|. + +2. Translation into one real layer. *First* the source & target coordinates and width + of the symbolic segment are multiplied by the ``LAMBDA`` value to obtain a real + segment. *Then* one of the |VW|, |LCW| or |RCW| transformation is applied to + that segment to get the final real rectangle. + + * |VW| for Variable Width, expand the real layer staying centered from the + original one. In those rules, the third number is not used, it is only here + to make the life easier for the parser... + + |RDS_VW| + + * |LCW| or |RCW| for Left/Right Constant Width, create an off-center rectangle + of fixed width relatively to the real segment. Note that the ``SP`` number + is the distance *between the edge* of the real segment and the edge of the + generated real rectangle (*not* from the axis). It is often zero. + + |RDS_LCW| + + +|newpage| + +Examples: :: + + TABLE MBK_TO_RDS_SEGMENT + + # (Case 1) + ALU1 RDS_ALU1 VW 0.18 0.09 0.0 ALL + + # (Case 2) + NDIF RDS_NDIF VW 0.18 0.0 0.0 ALL \ + RDS_ACTIV VW 0.18 0.0 0.0 DRC \ + RDS_NIMP VW 0.36 0.36 0.0 DRC + + # (Case 3) + NTRANS RDS_POLY VW 0.27 0.00 0.0 ALL \ + RDS_GATE VW 0.27 0.00 0.0 DRC \ + RDS_NDIF LCW 0.0 0.27 0.0 EXT \ + RDS_NDIF RCW 0.0 0.27 0.0 EXT \ + RDS_NDIF VW 0.0 0.72 0.0 DRC \ + RDS_ACTIV VW 0.0 0.72 0.0 ALL \ + RDS_NIMP VW 0.18 1.26 0.0 DRC + + END + +:fboxtt:`Case 1` the |ALU1| is translated in exacltly one real rectangle of +|RDS_ALU1|, both ends are extended by 0.18µm and it's width is increased +by 0.09µm. + +:fboxtt:`Case 2` the |NDIF| will be translated into only one segment +under |graal|, for symbolic visualization. And into three real rectangles +for |s2r| and |druc|. + +:fboxtt:`Case 3` the |NTRANS|, associated to a transistor is a little bit +more complex, the generated shapes are different for the extractor |cougar| +in one hand, and for both |druc| & |s2r| in the other hand. + +* For the extractor (|EXT| & |ALL| flags) there will be four rectangles + generateds: + + 1. The gate (|RDS_GATE|) + 2. The left diffusion of the transistor (source or drain) (|RDS_NDIF|). + 3. The right diffusion of the transistor (drain or source) (|RDS_NDIF|). + 4. The active area (|RDS_ACTIV|). + + As the extractor must kept separate the source and the drain of the transistor, + they are generated as two offset rectangles, using the |LCW| and |RCW| directives. + +* For |s2r| and |druc| (|DRC| and |ALL|), five rectangles are generateds: + + 1. The poly (|RDS_POLY|). + 2. The gate (|RDS_GATE|). + 3. The diffusion, as one rectangle that covers both the |LCW| and the |RCW| (|RDS_NDIF|). + 4. The active area (|RDS_ACTIV|). + 5. The N implantation (|RDS_NIMP|). + + In the layout send to the foundry, the source & drain are draw as one rectangle + across the gate area (the transistor being defined by the intersection of both + rectangles). + + +|newpage| + +The |MBK_TO_RDS_VIA| table +========================== + +This table is to translate *default* VIAs into real via. In the symbolic layout +the default VIA is simply a point and a set of layers. All layers are converted +in squares shapes centered on the VIA coordinate. The one dimension given is the +size of the side of that square. + +Note that although we are refering to VIAs, which for the purists are between two +metal layers, this table also describe *contacts*. + +Example: :: + + TABLE MBK_TO_RDS_VIA + + CONT_DIF_P RDS_PDIF 0.54 ALL \ + RDS_CONT 0.18 ALL \ + RDS_ALU1 0.36 ALL \ + RDS_ACTIV 0.54 DRC \ + RDS_PIMP 0.90 DRC + + CONT_POLY RDS_POLY 0.54 ALL \ + RDS_CONT 0.18 ALL \ + RDS_ALU1 0.36 ALL + + CONT_VIA RDS_ALU1 0.45 ALL \ + RDS_VIA1 0.27 ALL \ + RDS_ALU2 0.45 ALL + + END + +.. note:: **In CONT_DIF_P** you may see that only three layers will be shown under + |graal|, but five will be generated in the |gds| layout. + + +The |MBK_TO_RDS_BIGVIA_HOLE| table +================================== + +In |s2r|, when generating BIGVIAs, the matrix of holes they contains is +not draw relative to the position of the BIGVIA itself, but on a grid which +is common througout all the design real layout. This is to allow overlap +between two BIGVIA without risking the holes matrix to be not exactly overlapping. +As a consequence, when visualizing the |gds| file, the holes may not be centerend +inside one individual BIGVIA. + +The |MBK_TO_RDS_BIGVIA_HOLE| table define the global hole matrix for the whole +design. The first number is the individual hole side and the second the grid step +(center to center). + +Example: :: + + TABLE MBK_TO_RDS_BIGVIA_HOLE + + CONT_VIA RDS_VIA1 0.27 0.27 ALL + CONT_VIA2 RDS_VIA2 0.27 0.27 ALL + CONT_VIA3 RDS_VIA3 0.27 0.27 ALL + CONT_VIA4 RDS_VIA4 0.27 0.27 ALL + CONT_VIA5 RDS_VIA5 0.36 0.36 ALL + + END + + +|newpage| + +The |MBK_TO_RDS_BIGVIA_METAL| table +=================================== + +This table describe how the metal part of a BIGVIA is expanded (for the hole +part, see the previous table |MBK_TO_RDS_BIGVIA_HOLE|). The rule give for each +metal: + +1. The *delta-with* (have to ask Franck). +2. The *overhang*, the length the real rectangle is expanded on each side from + the symbolic rectange. + +Example: :: + + TABLE MBK_TO_RDS_BIGVIA_METAL + + CONT_VIA RDS_ALU1 0.0 0.09 ALL \ + RDS_ALU2 0.0 0.09 ALL + + CONT_VIA2 RDS_ALU2 0.0 0.09 ALL \ + RDS_ALU3 0.0 0.09 ALL + + CONT_VIA3 RDS_ALU3 0.0 0.09 ALL \ + RDS_ALU4 0.0 0.09 ALL + + CONT_VIA4 RDS_ALU4 0.0 0.09 ALL \ + RDS_ALU5 0.0 0.09 ALL + + CONT_VIA5 RDS_ALU5 0.0 0.09 ALL \ + RDS_ALU6 0.0 0.18 ALL + + END + + +|newpage| + +The |MBK_WIRESETTING| table +=========================== + +From a strict standpoint this table shouldn't be here but put in a separate +configuration file, because it contains informations only used by the symbolic +layout tools (|ocp|, |nero|, |ring|). + +This table defines the cell gauge the routing pitch and minimal (symbolic) +wire width and minimal spacing for the routers. They are patly redundant. + +Example: :: + + TABLE MBK_WIRESETTING + + X_GRID 10 + Y_GRID 10 + Y_SLICE 100 + WIDTH_VDD 12 + WIDTH_VSS 12 + TRACK_WIDTH_ALU8 0 + TRACK_WIDTH_ALU7 4 + TRACK_WIDTH_ALU6 4 + TRACK_WIDTH_ALU5 4 + TRACK_WIDTH_ALU4 3 + TRACK_WIDTH_ALU3 3 + TRACK_WIDTH_ALU2 3 + TRACK_WIDTH_ALU1 3 + TRACK_SPACING_ALU8 0 + TRACK_SPACING_ALU7 4 + TRACK_SPACING_ALU6 4 + TRACK_SPACING_ALU5 4 + TRACK_SPACING_ALU4 4 + TRACK_SPACING_ALU3 4 + TRACK_SPACING_ALU2 4 + TRACK_SPACING_ALU1 3 + + END + diff --git a/documentation/RDS/RDS_HTML.rst b/documentation/RDS/RDS_HTML.rst new file mode 100644 index 00000000..c16f2565 --- /dev/null +++ b/documentation/RDS/RDS_HTML.rst @@ -0,0 +1,5 @@ + +.. -*- Mode: rst -*- + +.. include:: HTML_defs.rst +.. include:: RDS.rst diff --git a/documentation/RDS/RDS_LaTeX.rst b/documentation/RDS/RDS_LaTeX.rst new file mode 100644 index 00000000..87ae6c88 --- /dev/null +++ b/documentation/RDS/RDS_LaTeX.rst @@ -0,0 +1,4 @@ +.. -*- Mode: rst -*- + +.. include:: LaTeX_defs.rst +.. include:: RDS.rst diff --git a/documentation/RDS/SoC.css b/documentation/RDS/SoC.css new file mode 100644 index 00000000..8bc16800 --- /dev/null +++ b/documentation/RDS/SoC.css @@ -0,0 +1,790 @@ + +html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 { + font-size: 96%; + /* + font-family: verdana, sans-serif; + */ + font-family: "Open Sans", sans-serif; +} + +body { + color: black; + background: white; + /* + background: #09550B; + background-color: white; + */ + background-position: top left; + background-attachment: fixed; + background-repeat: no-repeat; + margin: 0 0 0 0; + padding: 0 0 0 0; + margin-right: 10%; + margin-left: 30%; +} + +body.gsummary { + margin-right: 10%; + margin-left: 10%; +} + +h1, h2, h3, h4, h5, h6 { + font-family: "Open Sans", sans-serif; +} + +h1 { text-align: left; } +h2, h3, h4, h5, h6 { text-align: left; } +h1, h2, h3 { font-family: "Serif"; + } +h1 { font-weight: normal; font-size: 170%; padding-top: 7pt; margin-top: 25pt; } +h2 { font-weight: normal; font-size: 140%; padding-top: 7pt; margin-top: 25pt; } +h3 { font-weight: bold; font-size: 118%; padding-top: 7pt; margin-top: 25pt; } +h4 { font-weight: bold; font-size: 100%; } +h5 { font-style: italic; font-size: 100%; } +h6 { font-variant: small-caps; font-size: 100%; } + +body.gsummary h1 { text-align: center; font-size: 220%; } + +hr { + color: #09550b; + border: 1px dotted #09550b; + border-style: none none dotted; + padding-top: 10pt; + padding-bottom: 10pt; +} + +div#contents { + margin: 30pt; + padding: 2pt 10pt; + background-color: #fff676; +} + +div#centered { + margin-left: auto; + margin-right: auto; + text-align: center; +} + +p, li { + text-align: justify; +} + +.sc { + font-variant: small-caps; + font-size: 110%; +} + +pre, tt, code { + font-family: "courrier", "andale mono", monospace; + font-size: 100%; + white-space: pre; +} + +tt { + color: #09550b; +} + +pre.wiki, div.code, pre.literal-block { + font-size: 90%; + padding: 5pt; + margin-left: 4%; + margin-right: 4%; + border: dashed; + border-width: thin; + border-color: #FC8676; + background-color: #FCFCE1; +} + +a:link, a:active { + font-weight: normal; + text-decoration: none; + color: #09550b; + border-bottom: 1px dotted #09550b; +} + +a:hover, a:focus, a:visited { + font-weight: normal; + font-style: italic; + text-decoration: none; + /* + color: #A40010; + border-bottom: 1px dotted #A40010; + */ + color: #09550b; + border-bottom: 1px dotted #09550b; +} + +body.gsummary a:link, a:active { + font-size: 140%; + font-weight: bold; + text-decoration: none; + color: #09550b; + border-bottom: none; + /* + border-bottom: 1px dotted #09550b; + */ +} + +body.gsummary a:hover, a:focus, a:visited { + font-size: 120%; + font-weight: bold; + font-style: italic; + text-decoration: none; + /* + color: #A40010; + border-bottom: 1px dotted #A40010; + */ + color: #09550b; + /* + border-bottom: 1px dotted #09550b; + */ +} + +p.credit { + margin-left: 10%; + margin-right: 10%; + font-size: 110%; +} + +p.credit span.left { + float: left; + white-space: nowrap; +} + +p.credit span.right { + float: right; + white-space: nowrap; +} + +img.addborder { + border: 1px solid black; +} + +div#header { + margin: 0px; + padding: 0pt; + background-color: white; + display: inline-block; + width: 100%; +} + +div#header_logo { + margin: 0px; + padding: 10px 0px 10px 12pt; + background-color: white; + width: 40%; + float: left; +} + +div#header_menus { + background-color: white; + width: 55%; + float: right; + padding-top: 60pt; + padding-right: 10pt; + text-align: right; + font-size: 80%; +} + +div#header_menus ul { + padding-top: 45pt; + list-style: none; + text-align: right; + font-size: 80%; +} + +div#header_menus li { + padding: 0pt; + margin: 0pt; + display: inline; + white-space: nowrap; +} + +/* +div#header_menus a { + border-left: 1px solid #d7d7d7; + padding: 0 .75em; +} + +div#header_menus a.first { + border-left: none; +} +*/ + +div#header a:link, div#header a:active, div#header a:visited { + margin: 0pt; + padding: 0pt 5pt; + font-weight: normal; + color: black; + text-decoration: none; + border-bottom: 1px solid black; + border-left: 0px; + border-right: 0px; +} + +div#header a:hover, div#header a:focus { + margin: 0pt; + padding: 0pt 5pt; + font-weight: normal; + color: black; + text-decoration: none; + border-bottom: 4px solid #09550b; + border-left: 0px; + border-right: 0px; +} + +div#header a.current:link, div#header a.current:active, div#header a.current:visited { + margin: 0pt; + padding: 0pt 5pt; + font-weight: bold; + font-style: normal; + font-size: 120%; + color: white; + text-decoration: none; + border-bottom: 4px solid #09550b; + border-left: 0px; + border-right: 0px; + background-color: #09550b; +} + +div#header a.current:hover, div#header a.current:focus { + margin: 0pt; + padding: 0pt 5pt; + font-weight: bold; + font-style: normal; + font-size: 120%; + color: white; + text-decoration: none; + border-bottom: 4px solid #09550b; + border-left: 0px; + border-right: 0px; + background-color: #09550b; +} + +div#header_ancestors { + padding: 4px 0px 4px 12pt; + background-color: #09550B; + color: white; +} + +div#header_ancestors ul, div#header_ancestors * li { + display: inline; + list-style-type: none; + padding: 0px 0px 0px 0pt; +} + +div#header_ancestors a:link, div#header_ancestors a:active, div#header_ancestors a:visited { + font-weight: bold; + color: white; + text-decoration: none; + border-bottom: 0px; +} + +div#header_ancestors a:hover, div#header_ancestors a:focus { + font-weight: bold; + color: white; + text-decoration: underline; +} + +div#footer { + margin: 0px; + padding: 0px; + border-top: 1px dotted #09550b; + background-color: white; + display: inline-block; + width: 100%; + text-align: right; +} + +div#searchform { + width: 80%; + background-color: #ccffcd; + padding: 15pt 10pt 15pt 10pt; + margin-top: 50pt; + margin-bottom: 50pt; + margin-left: auto; + margin-right: auto; + text-align: center; +} + +div#searchform input#id_q { + background-color: white; + border: 1px solid #09550b; + padding: 2pt; + width: 80%; + font-size: 110%; + font-weight: bold; +} + +span.queryref { + font-weight: bold; +} + +div#searchform ul { + list-style: none; +} + +div#searchform li { + display: inline; +} + +hr#search_vs_results { + color: #09550b; + border: 2px dotted #09550b; + border-style: none none dotted; + margin-top: 0pt; + margin-bottom: 20pt; +} + +div#search_results { + width: 85%; + margin: auto; +} + +div#sidebar hr#separator { + color: white; + border: 0px; + margin-top: 0pt; + margin-bottom: 20pt; +} + +img.footer-logo { + height: 24px; + padding: 0px 2px; +} + +hr#site_vs_page { + color: white; + border: 3px dotted white; + border-style: none none dotted; + margin-top: 20pt; + margin-bottom: 20pt; +} + +div#sidebar { + /* + background: #09550B; + background: #ccffcd; + */ + background: white; +} + +div#sidebar div#sitemenu, div#sidebar div#pagemenu { + /* + background: white; + */ + background: #09550b; + width: 85%; + margin: auto; + padding: 5pt 10pt; +} + +div#sidebar * li { + text-align: left; +} + +div#sidebar * ul { + list-style-type: square; + padding-left: 12pt; +} + +div#sitemenu ul { + list-style-type: none; + padding-left: 0pt; +} + +div#sitemenu ul ul { + list-style-type: none; + padding-left: 0pt; +} + +div#sitemenu ul ul ul { + list-style-type: square; + padding-left: 12pt; +} + +div#sitemenu ul li ul li { + padding-top: 3pt; + padding-bottom: 5pt; + border-top: 1px dotted white; +} + +div#sitemenu ul li ul li ul li { + border-top: none; + padding-top: 1pt; + padding-bottom: 1pt; +} + +div#sitemenu ul li a:link, +div#sitemenu ul li a:active, +div#sitemenu ul lu a:visited +{ + font-size: 140%; + font-weight: bold; + border-bottom: none; +} + +div#sitemenu ul li a:focus, +div#sitemenu ul lu a:hover +{ + font-size: 140%; + font-weight: bold; + font-style: italic; + border-bottom: none; +} + +div#sitemenu ul ul li a:link, +div#sitemenu ul ul li a:active, +div#sitemenu ul ul lu a:visited, +div#sitemenu ul ul li a:focus, +div#sitemenu ul ul lu a:hover +{ + font-size: 90%; + font-weight: normal; + border-bottom: none; +/*border-bottom: 1px dotted white;*/ +} + +div#pagemenu ul { + list-style-type: none; + padding-left: 0pt; +} + +div#pagemenu ul ul { + list-style-type: none; + padding-left: 0pt; +} + +div#pagemenu ul ul ul { + padding-left: 12pt; +} + +div#pagemenu ul li ul li { + padding-top: 3pt; + padding-bottom: 5pt; + border-top: 1px dotted white; +} + +div#pagemenu ul li ul li ul li { + border-top: none; + padding-top: 1pt; + padding-bottom: 1pt; +} + +div#pagemenu ul li a:link, +div#pagemenu ul li a:active, +div#pagemenu ul lu a:visited +{ + font-size: 120%; + font-weight: bold; + border-bottom: none; +} + +div#pagemenu ul li a:focus, +div#pagemenu ul lu a:hover +{ + font-size: 120%; + font-weight: bold; + font-style: italic; + border-bottom: none; +} + +div#pagemenu ul ul li a:link, +div#pagemenu ul ul li a:active, +div#pagemenu ul ul lu a:visited, +div#pagemenu ul ul li a:focus, +div#pagemenu ul ul lu a:hover +{ + font-size: 90%; + font-weight: normal; + border-bottom: none; + /* + border-bottom: 1px dotted white; + */ +} + + +div#sidebar ul.ancestor * li { + padding-top: 0pt; +} + +div#sidebar ul { + padding-bottom: 8pt; +} + +div#sidebar a:link, div#sidebar a:active, div#sidebar a:visited { + /* + font-weight: normal; + */ + color: white; + text-align: left; + text-decoration: none; + border-bottom: 1px dotted white; +} + +div#sidebar a:hover, div#sidebar a:focus { + /* + font-weight: normal; + */ + color: white; + text-align: left; + text-decoration: none; + border-bottom: 1px dotted white; +} + +div#main { + border-left: 1px solid #09550b; +} + +div#main ul#summary { + list-style-type: square; + padding-left: 12pt; + font-size: 14pt; +} + +div#main ul#summary * ul { + padding-left: 12pt; + padding-bottom: 14pt; + font-size: 95%; +} + +div.code * { + background-color: #FCFCE1; +} + +div.note { + margin: 8px 2% 0px 2%; + border: 1px none #fff01c; + border-left-width: 4px; + border-left-style: solid; + padding: 1px 10pt 1px 55px; + background: #fff676 url('./images/clipboard.png') no-repeat 0% 50%;; + font-size: 90% +} + +div.error { + margin: 8px 2% 0px 2%; + border: 1px none #dd0000; + border-left-width: 4px; + border-left-style: solid; + padding: 1px 10pt 1px 55px; + background: #ffddcc url('./images/i-core.png') no-repeat 0% 50%;; + font-size: 90% +} + +p.admonition-title { + font-weight: bold; +} + +div.topic { + margin: 5pt; + padding: 2pt 10pt; + background-color: fff676; +} + +div.topic p.first { + font-weight: bold; +} + +body.gsummary table { + border-collapse: collapse; + border-color: transparent; + width: 60%; + margin-left: auto; + margin-right: auto; +} + +/* +body.gsummary table th { +} +*/ + +body.gsummary table td { + border: none; +} + +/* +body.gsummary table tr td ul { + margin: 0pt; + border-left: 1px solid black; +} +*/ + +/* +body.gsummary table tr td ul li { + border-bottom: 2px dotted black; +} +*/ + +body.gsummary li { + padding: 0%; + list-style-type: none; +} + +body.gsummary ul { + padding: 0px 0px 10px 0px; + margin: 0%; + border-bottom: 1px dotted black; +} + +table.wiki th, table th { + color: black; + background: #FFFFCC; +} + +table.docutils { + margin-left: 5%; + margin-right: 5%; +} + +table.wiki, table.wiki th, table.wiki td { border: 1px solid black; } +table.wiki th * p { text-align: center; } +table.wiki * p { margin: 0pt; } +table.wiki * blockquote { margin: 0pt; } +table { border-collapse: collapse; } +table th, table td { border: 1px solid black; + padding: 2px 10px 2px 10px; } + +table.docinfo { + margin-top: 10pt; + margin-left: auto; + margin-right: 0pt; + border: 10px solid #303030; + border-collapse: collapse; + background: #303030; + font-size: 90%; + font-family: sans-serif; +} + +table.docinfo tr { + border-bottom: 1px dotted white; +} + +th.docinfo-name, +table.docinfo td, +table.docinfo td a:link, +table.docinfo td a:active, +table.docinfo td a:visited, +table.docinfo td a:focus, +table.docinfo td a:hover +{ + border: 0px solid white; + background: #303030; + color: white; + text-align: left; + font-weight: bold; +} + +th.docinfo-name { + font-weight: normal; +} + +table.docinfo td { + font-weight: bold; +} + +span.ul { + text-decoration: underline; +} + +* span.smallcaps { + /*font-variant: "small-caps";*/ + text-transform: "uppercase"; + font-size: "smaller"; +} + + +span.cb { + font-family: "andale mono", monospace; + font-weight: bold; + white-space: pre; +} + +span.fboxtt { + border: 1px solid black; + padding: 0px 4px; + font-family: "andale mono", monospace; + font-weight: bold; + white-space: pre; +} + +#notice.system-message, .notice.system-message { + color: black; + background: #DDFFDD; + padding-top: 5pt; + padding-bottom: 5pt; + border: 1px none #55BB55; + border-top-width: 4px; + border-top-style: solid; +} + +#content.error .message, div.system-message { + color: #550000; + background: #ffddcc; + border: 2px none #dd0000; + border-top-width: 4px; + border-top-style: solid; + padding: .5em; + margin: 1em 0; +} + +#main { + float: right; + width: 70%; + padding: 0pt; + margin: 0pt; + min-height: 700px; + background: white; +} + +div#main h1 { + border-bottom: 2px solid #09550b; +} + +div#main div.section h1 { + border-bottom: none; +} + +#cmscontent { + padding: 0pt 4% 10pt 4%; + margin: 0pt; +} + +div#htmlerrorcontents { + padding: 10pt 4% 10pt 4%; + margin: 0pt; +} + +div#htmlerrorcontents span.cs { + font-size: 80%; + font-family: "andale mono", monospace; + white-space: pre; +} + +div#htmlerrorcontents hr.lang_separator { + border: 1px dotted black; + border-style: none none dotted; + margin-top: 20pt; + margin-bottom: 10pt; +} + +#embedcontent { + border: 0pt; + padding: 0pt; + margin: 0pt; +} + +#sidebar { + float: left; + width: 29.9%; + padding: 0 0 0 0; + margin: 0 0 0 0; + color: white; + background: #09550B; + /* + min-height: 300px; + background: #f2f2f2; + border-right: 1px solid #ccc; + padding: 0 0 0 10px; + */ +} diff --git a/documentation/RDS/images/RDS_LCW-eps-converted-to.pdf b/documentation/RDS/images/RDS_LCW-eps-converted-to.pdf new file mode 100644 index 00000000..c78679f5 Binary files /dev/null and b/documentation/RDS/images/RDS_LCW-eps-converted-to.pdf differ diff --git a/documentation/RDS/images/RDS_LCW.eps b/documentation/RDS/images/RDS_LCW.eps new file mode 100644 index 00000000..78b0a9e1 --- /dev/null +++ b/documentation/RDS/images/RDS_LCW.eps @@ -0,0 +1,238 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: RDS_LCW.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5 +%%CreationDate: Mon Sep 15 18:23:48 2014 +%%For: jpc@lepka (Jean-Paul Chaput) +%%BoundingBox: 0 0 233 348 +%Magnification: 0.8000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 348 moveto 0 0 lineto 233 0 lineto 233 348 lineto closepath clip newpath +-114.1 389.4 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.04800 0.04800 sc +% +% Fig objects follow +% +% +% here starts figure with depth 60 +% Polyline +0 slj +0 slc +15.000 slw +n 3900 5700 m 3900 2700 l 4800 2700 l 4800 5700 l + cp gs col18 0.50 tnt ef gr gs col18 s gr +% here ends figure; +% +% here starts figure with depth 55 +% Polyline +0 slj +0 slc +15.000 slw +n 5100 6600 m 5100 1800 l 6300 1800 l 6300 6600 l + cp gs col7 1.00 shd ef gr gs col0 s gr +% here ends figure; +% +% here starts figure with depth 50 +% Polyline +0 slj +0 slc +45.000 slw +n 5625 1725 m + 5775 1875 l gs col0 s gr +% Polyline +n 5625 1875 m + 5775 1725 l gs col0 s gr +% Polyline +n 5625 6525 m + 5775 6675 l gs col0 s gr +% Polyline +n 5625 6675 m + 5775 6525 l gs col0 s gr +% Polyline +15.000 slw +n 2400 900 m 5775 900 l 5775 1275 l 2400 1275 l + cp gs col0 s gr +/Courier-Bold ff 300.00 scf sf +2550 1200 m +gs 1 -1 sc (LCW) col18 sh gr +/Courier-Bold ff 300.00 scf sf +3450 1200 m +gs 1 -1 sc (dL) col18 sh gr +/Courier-Bold ff 300.00 scf sf +5250 1200 m +gs 1 -1 sc (SP) col18 sh gr +/Courier-Bold ff 300.00 scf sf +4350 1200 m +gs 1 -1 sc (W) col18 sh gr +% Polyline + [90 45 15 45] 0 sd +n 5700 1800 m + 5700 6600 l gs col0 s gr [] 0 sd +% Polyline +7.500 slw +n 3225 2700 m + 3825 2700 l gs col0 s gr +% Polyline +n 5025 1800 m + 3225 1800 l gs col0 s gr +% Polyline +n 3825 5700 m + 3225 5700 l gs col0 s gr +% Polyline +n 5025 6600 m + 3225 6600 l gs col0 s gr +% Polyline +n 3900 5775 m + 3900 7575 l gs col0 s gr +% Polyline +n 4800 5775 m + 4800 7575 l gs col0 s gr +% Polyline +n 5100 6675 m 5100 6900 l 5400 7200 l + 5400 7575 l gs col0 s gr +% Polyline +gs clippath +3270 2564 m 3270 2715 l 3330 2715 l 3330 2564 l 3330 2564 l 3300 2684 l 3270 2564 l cp +3330 1936 m 3330 1785 l 3270 1785 l 3270 1936 l 3270 1936 l 3300 1816 l 3330 1936 l cp +eoclip +n 3300 1800 m + 3300 2700 l gs col0 s gr gr + +% arrowhead +n 3330 1936 m 3300 1816 l 3270 1936 l 3330 1936 l cp gs 0.00 setgray ef gr col0 s +% arrowhead +n 3270 2564 m 3300 2684 l 3330 2564 l 3270 2564 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3270 6464 m 3270 6615 l 3330 6615 l 3330 6464 l 3330 6464 l 3300 6584 l 3270 6464 l cp +3330 5836 m 3330 5685 l 3270 5685 l 3270 5836 l 3270 5836 l 3300 5716 l 3330 5836 l cp +eoclip +n 3300 5700 m + 3300 6600 l gs col0 s gr gr + +% arrowhead +n 3330 5836 m 3300 5716 l 3270 5836 l 3330 5836 l cp gs 0.00 setgray ef gr col0 s +% arrowhead +n 3270 6464 m 3300 6584 l 3330 6464 l 3270 6464 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +4664 7530 m 4815 7530 l 4815 7470 l 4664 7470 l 4664 7470 l 4784 7500 l 4664 7530 l cp +4036 7470 m 3885 7470 l 3885 7530 l 4036 7530 l 4036 7530 l 3916 7500 l 4036 7470 l cp +eoclip +n 3900 7500 m + 4800 7500 l gs col0 s gr gr + +% arrowhead +n 4036 7470 m 3916 7500 l 4036 7530 l 4036 7470 l cp gs 0.00 setgray ef gr col0 s +% arrowhead +n 4664 7530 m 4784 7500 l 4664 7470 l 4664 7530 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +5264 7530 m 5415 7530 l 5415 7470 l 5264 7470 l 5264 7470 l 5384 7500 l 5264 7530 l cp +4936 7470 m 4785 7470 l 4785 7530 l 4936 7530 l 4936 7530 l 4816 7500 l 4936 7470 l cp +eoclip +n 4800 7500 m + 5400 7500 l gs col0 s gr gr + +% arrowhead +n 4936 7470 m 4816 7500 l 4936 7530 l 4936 7470 l cp gs 0.00 setgray ef gr col0 s +% arrowhead +n 5264 7530 m 5384 7500 l 5264 7470 l 5264 7530 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 2400 900 m 7200 900 l 7200 8100 l 2400 8100 l + cp gs col0 s gr +/Courier-Bold ff 200.00 scf sf +5100 7425 m +gs 1 -1 sc (SP) dup sw pop 2 div neg 0 rm col0 sh gr +/Courier-Bold ff 200.00 scf sf +4350 7425 m +gs 1 -1 sc (W) dup sw pop 2 div neg 0 rm col0 sh gr +/Courier-Bold ff 200.00 scf sf +3225 2250 m +gs 1 -1 sc 90.0 rot (dL) dup sw pop 2 div neg 0 rm col0 sh gr +/Courier-Bold ff 200.00 scf sf +3225 6150 m +gs 1 -1 sc 90.0 rot (dL) dup sw pop 2 div neg 0 rm col0 sh gr +% here ends figure; +$F2psEnd +rs +showpage +%%Trailer +%EOF diff --git a/documentation/RDS/images/RDS_LCW.fig b/documentation/RDS/images/RDS_LCW.fig new file mode 100644 index 00000000..5aa81af1 --- /dev/null +++ b/documentation/RDS/images/RDS_LCW.fig @@ -0,0 +1,71 @@ +#FIG 3.2 Produced by xfig version 3.2.5a +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 5550 1650 5850 1950 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5625 1725 5775 1875 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5625 1875 5775 1725 +-6 +6 5550 6450 5850 6750 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5625 6525 5775 6675 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5625 6675 5775 6525 +-6 +6 2325 825 5850 1350 +2 2 0 2 0 18 50 -1 -1 6.000 0 0 -1 0 0 5 + 2400 900 5775 900 5775 1275 2400 1275 2400 900 +4 0 18 50 -1 14 18 0.0000 4 180 540 2550 1200 LCW\001 +4 0 18 50 -1 14 18 0.0000 4 195 360 3450 1200 dL\001 +4 0 18 50 -1 14 18 0.0000 4 180 360 5250 1200 SP\001 +4 0 18 50 -1 14 18 0.0000 4 180 180 4350 1200 W\001 +-6 +2 1 3 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 2 + 5700 1800 5700 6600 +2 2 0 2 0 7 55 -1 20 0.000 0 0 -1 0 0 5 + 5100 6600 5100 1800 6300 1800 6300 6600 5100 6600 +2 2 0 2 18 18 60 -1 30 0.000 0 0 -1 0 0 5 + 3900 5700 3900 2700 4800 2700 4800 5700 3900 5700 +2 1 0 1 0 18 50 -1 -1 4.000 0 0 -1 0 0 2 + 3225 2700 3825 2700 +2 1 0 1 0 18 50 -1 -1 4.000 0 0 -1 0 0 2 + 5025 1800 3225 1800 +2 1 0 1 0 18 50 -1 -1 4.000 0 0 -1 0 0 2 + 3825 5700 3225 5700 +2 1 0 1 0 18 50 -1 -1 4.000 0 0 -1 0 0 2 + 5025 6600 3225 6600 +2 1 0 1 0 18 50 -1 -1 4.000 0 0 -1 0 0 2 + 3900 5775 3900 7575 +2 1 0 1 0 18 50 -1 -1 4.000 0 0 -1 0 0 2 + 4800 5775 4800 7575 +2 1 0 1 0 18 50 -1 -1 4.000 0 0 -1 0 0 4 + 5100 6675 5100 6900 5400 7200 5400 7575 +2 1 0 1 0 18 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 3300 1800 3300 2700 +2 1 0 1 0 18 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 3300 5700 3300 6600 +2 1 0 1 0 18 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 3900 7500 4800 7500 +2 1 0 1 0 18 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 4800 7500 5400 7500 +2 2 0 1 0 18 50 -1 -1 4.000 0 0 -1 0 0 5 + 2400 900 7200 900 7200 8100 2400 8100 2400 900 +4 1 0 50 -1 14 12 0.0000 4 120 240 5100 7425 SP\001 +4 1 0 50 -1 14 12 0.0000 4 120 120 4350 7425 W\001 +4 1 0 50 -1 14 12 1.5708 4 120 240 3225 2250 dL\001 +4 1 0 50 -1 14 12 1.5708 4 120 240 3225 6150 dL\001 diff --git a/documentation/RDS/images/RDS_LCW.png b/documentation/RDS/images/RDS_LCW.png new file mode 100644 index 00000000..b6f22d24 Binary files /dev/null and b/documentation/RDS/images/RDS_LCW.png differ diff --git a/documentation/RDS/images/RDS_VW-eps-converted-to.pdf b/documentation/RDS/images/RDS_VW-eps-converted-to.pdf new file mode 100644 index 00000000..7051bba6 Binary files /dev/null and b/documentation/RDS/images/RDS_VW-eps-converted-to.pdf differ diff --git a/documentation/RDS/images/RDS_VW.eps b/documentation/RDS/images/RDS_VW.eps new file mode 100644 index 00000000..6761037f --- /dev/null +++ b/documentation/RDS/images/RDS_VW.eps @@ -0,0 +1,243 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: RDS_VW.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5 +%%CreationDate: Mon Sep 15 18:24:04 2014 +%%For: jpc@lepka (Jean-Paul Chaput) +%%BoundingBox: 0 0 489 255 +%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 255 moveto 0 0 lineto 489 0 lineto 489 255 lineto closepath clip newpath +-106.7 306.7 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06000 0.06000 sc +% +% Fig objects follow +% +% +% here starts figure with depth 60 +% Polyline +0 slj +0 slc +15.000 slw +n 2400 1800 m 8400 1800 l 8400 3600 l 2400 3600 l + cp gs col18 0.50 tnt ef gr gs col18 s gr +% here ends figure; +% +% here starts figure with depth 55 +% Polyline +0 slj +0 slc +15.000 slw +n 3000 2100 m 7800 2100 l 7800 3300 l 3000 3300 l + cp gs col7 1.00 shd ef gr gs col0 s gr +% here ends figure; +% +% here starts figure with depth 50 +% Polyline +0 slj +0 slc +15.000 slw +n 1800 900 m 5175 900 l 5175 1275 l 1800 1275 l + cp gs col0 s gr +/Courier-Bold ff 300.00 scf sf +1950 1200 m +gs 1 -1 sc (VW) col18 sh gr +/Courier-Bold ff 300.00 scf sf +2850 1200 m +gs 1 -1 sc (dL) col18 sh gr +/Courier-Bold ff 300.00 scf sf +3750 1200 m +gs 1 -1 sc (dW) col18 sh gr +/Courier-Bold ff 300.00 scf sf +4650 1200 m +gs 1 -1 sc (dX) col0 sh gr +% Polyline +7.500 slw +n 7875 2100 m + 9375 2100 l gs col0 s gr +% Polyline +n 8475 1800 m 8700 1800 l 9000 1500 l + 9375 1500 l gs col0 s gr +% Polyline +n 7875 3300 m + 9375 3300 l gs col0 s gr +% Polyline +n 8475 3600 m 8700 3600 l 9000 3900 l + 9375 3900 l gs col0 s gr +% Polyline +n 7800 3375 m + 7800 4575 l gs col0 s gr +% Polyline +n 8400 3675 m + 8400 4575 l gs col0 s gr +% Polyline +n 2400 3675 m + 2400 4575 l gs col0 s gr +% Polyline +n 3000 3375 m + 3000 4575 l gs col0 s gr +% Polyline +gs clippath +9270 1964 m 9270 2115 l 9330 2115 l 9330 1964 l 9330 1964 l 9300 2084 l 9270 1964 l cp +9330 1636 m 9330 1485 l 9270 1485 l 9270 1636 l 9270 1636 l 9300 1516 l 9330 1636 l cp +eoclip +n 9300 1500 m + 9300 2100 l gs col0 s gr gr + +% arrowhead +n 9330 1636 m 9300 1516 l 9270 1636 l 9330 1636 l cp gs 0.00 setgray ef gr col0 s +% arrowhead +n 9270 1964 m 9300 2084 l 9330 1964 l 9270 1964 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +9270 3764 m 9270 3915 l 9330 3915 l 9330 3764 l 9330 3764 l 9300 3884 l 9270 3764 l cp +9330 3436 m 9330 3285 l 9270 3285 l 9270 3436 l 9270 3436 l 9300 3316 l 9330 3436 l cp +eoclip +n 9300 3300 m + 9300 3900 l gs col0 s gr gr + +% arrowhead +n 9330 3436 m 9300 3316 l 9270 3436 l 9330 3436 l cp gs 0.00 setgray ef gr col0 s +% arrowhead +n 9270 3764 m 9300 3884 l 9330 3764 l 9270 3764 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +8264 4530 m 8415 4530 l 8415 4470 l 8264 4470 l 8264 4470 l 8384 4500 l 8264 4530 l cp +7936 4470 m 7785 4470 l 7785 4530 l 7936 4530 l 7936 4530 l 7816 4500 l 7936 4470 l cp +eoclip +n 7800 4500 m + 8400 4500 l gs col0 s gr gr + +% arrowhead +n 7936 4470 m 7816 4500 l 7936 4530 l 7936 4470 l cp gs 0.00 setgray ef gr col0 s +% arrowhead +n 8264 4530 m 8384 4500 l 8264 4470 l 8264 4530 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +2864 4530 m 3015 4530 l 3015 4470 l 2864 4470 l 2864 4470 l 2984 4500 l 2864 4530 l cp +2536 4470 m 2385 4470 l 2385 4530 l 2536 4530 l 2536 4530 l 2416 4500 l 2536 4470 l cp +eoclip +n 2400 4500 m + 3000 4500 l gs col0 s gr gr + +% arrowhead +n 2536 4470 m 2416 4500 l 2536 4530 l 2536 4470 l cp gs 0.00 setgray ef gr col0 s +% arrowhead +n 2864 4530 m 2984 4500 l 2864 4470 l 2864 4530 l cp gs 0.00 setgray ef gr col0 s +% Polyline +45.000 slw +n 2925 2625 m + 3075 2775 l gs col0 s gr +% Polyline +n 2925 2775 m + 3075 2625 l gs col0 s gr +% Polyline +n 7725 2625 m + 7875 2775 l gs col0 s gr +% Polyline +n 7725 2775 m + 7875 2625 l gs col0 s gr +% Polyline +15.000 slw + [90 45 15 45] 0 sd +n 3000 2700 m + 7800 2700 l gs col0 s gr [] 0 sd +% Polyline +7.500 slw +n 1800 900 m 9900 900 l 9900 5100 l 1800 5100 l + cp gs col0 s gr +/Courier-Bold ff 200.00 scf sf +2700 4425 m +gs 1 -1 sc (dL) dup sw pop 2 div neg 0 rm col0 sh gr +/Courier-Bold ff 200.00 scf sf +8100 4425 m +gs 1 -1 sc (dL) dup sw pop 2 div neg 0 rm col0 sh gr +/Courier-Bold ff 200.00 scf sf +9225 3600 m +gs 1 -1 sc 90.0 rot (dW/2) dup sw pop 2 div neg 0 rm col0 sh gr +/Courier-Bold ff 200.00 scf sf +9225 1800 m +gs 1 -1 sc 90.0 rot (dW/2) dup sw pop 2 div neg 0 rm col0 sh gr +% here ends figure; +$F2psEnd +rs +showpage +%%Trailer +%EOF diff --git a/documentation/RDS/images/RDS_VW.fig b/documentation/RDS/images/RDS_VW.fig new file mode 100644 index 00000000..2c927a97 --- /dev/null +++ b/documentation/RDS/images/RDS_VW.fig @@ -0,0 +1,69 @@ +#FIG 3.2 Produced by xfig version 3.2.5a +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1725 825 5250 1350 +2 2 0 2 0 18 50 -1 -1 6.000 0 0 -1 0 0 5 + 1800 900 5175 900 5175 1275 1800 1275 1800 900 +4 0 18 50 -1 14 18 0.0000 4 180 360 1950 1200 VW\001 +4 0 18 50 -1 14 18 0.0000 4 195 360 2850 1200 dL\001 +4 0 18 50 -1 14 18 0.0000 4 195 360 3750 1200 dW\001 +4 0 0 50 -1 14 18 0.0000 4 195 360 4650 1200 dX\001 +-6 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 7875 2100 9375 2100 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 4 + 8475 1800 8700 1800 9000 1500 9375 1500 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 7875 3300 9375 3300 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 4 + 8475 3600 8700 3600 9000 3900 9375 3900 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 7800 3375 7800 4575 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 8400 3675 8400 4575 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 2400 3675 2400 4575 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 3000 3375 3000 4575 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 9300 1500 9300 2100 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 9300 3300 9300 3900 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 7800 4500 8400 4500 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 2400 4500 3000 4500 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2925 2625 3075 2775 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2925 2775 3075 2625 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7725 2625 7875 2775 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7725 2775 7875 2625 +2 1 3 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 2 + 3000 2700 7800 2700 +2 2 0 2 0 7 55 -1 20 0.000 0 0 -1 0 0 5 + 3000 2100 7800 2100 7800 3300 3000 3300 3000 2100 +2 2 0 2 18 18 60 -1 30 0.000 0 0 -1 0 0 5 + 2400 1800 8400 1800 8400 3600 2400 3600 2400 1800 +2 2 0 1 0 18 50 -1 -1 4.000 0 0 -1 0 0 5 + 1800 900 9900 900 9900 5100 1800 5100 1800 900 +4 1 0 50 -1 14 12 0.0000 4 120 240 2700 4425 dL\001 +4 1 0 50 -1 14 12 0.0000 4 120 240 8100 4425 dL\001 +4 1 0 50 -1 14 12 1.5708 4 150 480 9225 3600 dW/2\001 +4 1 0 50 -1 14 12 1.5708 4 150 480 9225 1800 dW/2\001 diff --git a/documentation/RDS/images/RDS_VW.png b/documentation/RDS/images/RDS_VW.png new file mode 100644 index 00000000..2bd2c1be Binary files /dev/null and b/documentation/RDS/images/RDS_VW.png differ diff --git a/documentation/RDS/images/RSD_VW.fig b/documentation/RDS/images/RSD_VW.fig new file mode 100644 index 00000000..2c927a97 --- /dev/null +++ b/documentation/RDS/images/RSD_VW.fig @@ -0,0 +1,69 @@ +#FIG 3.2 Produced by xfig version 3.2.5a +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1725 825 5250 1350 +2 2 0 2 0 18 50 -1 -1 6.000 0 0 -1 0 0 5 + 1800 900 5175 900 5175 1275 1800 1275 1800 900 +4 0 18 50 -1 14 18 0.0000 4 180 360 1950 1200 VW\001 +4 0 18 50 -1 14 18 0.0000 4 195 360 2850 1200 dL\001 +4 0 18 50 -1 14 18 0.0000 4 195 360 3750 1200 dW\001 +4 0 0 50 -1 14 18 0.0000 4 195 360 4650 1200 dX\001 +-6 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 7875 2100 9375 2100 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 4 + 8475 1800 8700 1800 9000 1500 9375 1500 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 7875 3300 9375 3300 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 4 + 8475 3600 8700 3600 9000 3900 9375 3900 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 7800 3375 7800 4575 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 8400 3675 8400 4575 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 2400 3675 2400 4575 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2 + 3000 3375 3000 4575 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 9300 1500 9300 2100 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 9300 3300 9300 3900 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 7800 4500 8400 4500 +2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2 + 1 1 1.00 60.00 120.00 + 1 1 1.00 60.00 120.00 + 2400 4500 3000 4500 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2925 2625 3075 2775 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2925 2775 3075 2625 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7725 2625 7875 2775 +2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7725 2775 7875 2625 +2 1 3 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 2 + 3000 2700 7800 2700 +2 2 0 2 0 7 55 -1 20 0.000 0 0 -1 0 0 5 + 3000 2100 7800 2100 7800 3300 3000 3300 3000 2100 +2 2 0 2 18 18 60 -1 30 0.000 0 0 -1 0 0 5 + 2400 1800 8400 1800 8400 3600 2400 3600 2400 1800 +2 2 0 1 0 18 50 -1 -1 4.000 0 0 -1 0 0 5 + 1800 900 9900 900 9900 5100 1800 5100 1800 900 +4 1 0 50 -1 14 12 0.0000 4 120 240 2700 4425 dL\001 +4 1 0 50 -1 14 12 0.0000 4 120 240 8100 4425 dL\001 +4 1 0 50 -1 14 12 1.5708 4 150 480 9225 3600 dW/2\001 +4 1 0 50 -1 14 12 1.5708 4 150 480 9225 1800 dW/2\001 diff --git a/documentation/RDS/images/clipboard-eps-converted-to.pdf b/documentation/RDS/images/clipboard-eps-converted-to.pdf new file mode 100644 index 00000000..12640803 Binary files /dev/null and b/documentation/RDS/images/clipboard-eps-converted-to.pdf differ diff --git a/documentation/RDS/images/clipboard.eps b/documentation/RDS/images/clipboard.eps new file mode 100644 index 00000000..95427f8d --- /dev/null +++ b/documentation/RDS/images/clipboard.eps @@ -0,0 +1,456 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (../images/clipboard.eps) +%%CreationDate: (2012-02-27T23:17:15+01:00) +%%BoundingBox: 0 0 48 48 +%%HiResBoundingBox: 0 0 48 48 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Times-Roman findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 48 48 +userdict begin +DisplayImage +0 0 +48 48 +12.000000 +48 48 +0 +0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF383448383448384848383448FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF384848FFFFFFFFFFFFD0D0E0384848182428FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD09C78FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC09C68784828684828784828684828 +784828684828784828684828784828684828784828684828784828383448FFFFFF585858000000 +A0ACC0A09CC0384848281428784828784838685828784838785828784838785828784838785828 +784838785828784838785828784838C09C68784828FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF684838685828684828685828684838685828784838685828684838 +685828784838685828784838384848FFFFFFFFFFFF000000485868FFFFFFB0BCC0B0BCD0182428 +182428685828784838685828785838685828784838685838785838685828784838785838785838 +685828785838000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +684828784828684828784828684828784828384848383448383448383448384848383448383448 +FFFFFFFFFFFFFFFFFFA0ACB0A09CC0A0ACB0D0BCD0B0BCC0B0ACB0182428281428383448383448 +384848383448383448585858785828784838785828784838785828784838785828000000686868 +908C90FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF784838685828684838685828 +784838284848484868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0F0D0E0E0D0D0E0 +C0D0D0C0D0E0C0D0D0C0BCD0B0BCD0B0BCD0B0BCC0B0ACC0A0ACC0A09CC0A0ACC0485868182428 +585858785838785838785838784838785838785838000000585858787878908C90FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF684828784828684828FFFFFFFFFFFF383448FFFFFFD0D0E0 +D0D0D0D0BCD0C0D0D0C0BCD0C0BCC0C0ACC0B0BCC0B0ACC0A0ACB0B09CC0A0ACB0A09CB0909CB0 +A09CB0909CA0908CB0909CA0908CA0909CA0908CB0909CA0484858182428908C90B0BCB0F0F0F0 +382418784838785828000000484848686868908C90FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF684838685828784838F0FFFFFFFFFF384848D0D0E0485858585868486868585868485858 +585868486868585868485858585868486868585868485858585868486868585868485858585868 +486868585868485858585868283438181428788C90B0ACC0F0FFF0482428785838785838000000 +383438484848A02428A02428FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF684828784828685828 +FFF0FFFFFFF0281428181418181418181418181418181418181418181418181418181418181418 +181418181418181418181418181418181418181418181418181418181418181418181418181418 +181418181418907890B0BCB0F0F0F0383418904838785828000000383438A02428F09C78FF8C78 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF784838685828784838F0FFFFFFFFFFF0FFFF908CA0 +908C90685868383438282428787878908C90788C90908C90908C90908C90788C90908C90908C90 +908C90788C90908C90788C90908C90788C90908C90788C90908C90788C90908C90788C90C0ACC0 +F0F0F0482428785838905838000000484868F09C78A02428A02428000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF685828784828684828FFF0FFF0FFF0FFF0FFC0BCC0786878382428684800484800 +483448B0BCB0C0ACC0C0BCB0C0ACC0B0BCB0C0ACC0B0BCB0C0ACC0B0BCB0C0ACC0B0BCB0C0ACC0 +B0BCB0C0ACC0B0BCB0C0ACC0B0BCB0C0ACC0B0BCB0C0ACC0B0BCB0F0F0F0382418905838785828 +484868FFFFFF000000A02428000000481418FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF784838685828 +784838F0FFFFFFFFFFF0FFFFE0E0E0181418901418F07828E05890382438787878F0FFF0F0F0FF +F0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FFF0FFF0 +F0F0FFF0FFF0F0F0FFE0FFF0F0F0FFF0FFF0482428785838485868FFFFFFA0ACC0485858000000 +481418FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF785828784838685828FFF0FFF0FFF0FFF0FF +C0BCC0000000587818188C28480048380038788C78FFF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0 +FFF0F0F0F0F0F0F0FFF0FFF0FFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 +F0F0F0F0F0F0383418484868FFFFFFA09CC0485858000000182428FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF784838685828784838F0FFFFFFFFFFF0FFF0B0ACB028242800141818D028 +004818000000E0E0E0F0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FF +F0FFF0F0F0FFF0F0F0F0F0FFF0FFF0F0F0FFE0F0F0F0F0FFF0F0F0F0F0F0E0F0F0484868FFFFFF +A0ACC0485858000000182428787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF685828 +784838785828FFF0FFF0FFF0FFF0FFE0E0D0A08CA0000000181400000000787878F0FFF0FFF0FF +F0F0F0F0F0FFF0F0F0F0F0F0F0F0F0F0F0FFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 +F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0F0F0483428FFFFFF484868485858000000182428484848 +787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF784838685828785838F0FFF0F0F0FF +F0FFF0F0F0FFD0E0D0484848586858C0BCC0F0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FFF0FFF0 +F0F0FFF0FFF0F0F0FFF0FFF0F0F0F0E0F0F0F0F0FFE0FFF0F0F0F0E0F0F0F0F0FFE0FFF0F0F0F0 +E0F0F0483428FFFFFFF0E078F0AC90000000001400282428484848787878FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF785828784838785828FFF0FFF0FFF0FFF0FFF0FFF0FFF0F0D0E0D0 +E0D0E0F0FFF0FFF0F0F0F0F0F0F0FFF0FFF0FFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 +F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0F0F0483428FFFFFFF0E078F0AC90 +000000483428000000383438484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +785838685828784838F0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FF +F0FFF0F0F0FFF0FFF0F0F0FFF0F0F0F0F0FFF0FFF0F0F0FFE0F0F0F0F0FFE0F0F0F0F0F0E0F0F0 +F0F0FFE0F0F0F0F0F0E0F0F0483428FFFFFFF0E078F0AC90000000483428905838000000282428 +484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF785828784838785828F0F0FF +F0FFF0FFF0FFF0F0F0F0F0FFF0F0F0484868485858484868485858484868485858484868485858 +484868485858484868485858484868485858484868485858484868485858484868485858483428 +FFFFFFF0E078F0AC90000000483428905838785838000000383438484848787878FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF785838785838785838F0FFF0F0F0FFF0FFF0F0F0FFF0FFF0 +F0F0FFF0FFF0F0F0FFE0FFF0F0F0FFF0FFF0F0F0F0E0F0F0F0F0FFE0FFF0F0F0F0E0F0F0F0F0F0 +E0FFF0F0F0F0E0F0F0F0F0F0E0F0F0F0F0F0E0F0F0483428FFFFFFF0E078F0AC90000000483428 +482428786838905848000000282428484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF785828784838785828FFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0281428F0F0F0F0F0F0 +F0F0F0F0F0F0485858484868485858A09CC0A0ACB0A09CC0A0ACB0484868485858484868A0ACB0 +A09CC0A0ACB0483428FFFFFFF0E078F0AC90000000483428F0F0F0483418905838905838000000 +383438484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF785838785838784838 +F0FFF0F0F0FFF0FFF0F0F0FFF0FFF0F0F0FFF0F0F0F0F0FFF0FFF0F0F0FFE0F0F0F0F0FFE0F0F0 +F0F0F0E0F0F0F0F0FFE0F0F0F0F0F0E0F0F0F0F0F0E0F0F0F0F0F0E0F0F0483428FFFFFFF0E078 +F0AC90000000483428F0F0F0E0F0F0482428906838905848000000282428484848787878FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF785828904838785838F0F0FFF0F0F0F0F0F0F0F0F0 +F0F0F0F0F0F0484868485858484868485858484868485858484868485858484868485858484868 +485858484868485858484868A0ACB0483428FFFFFFF0E078F0AC90000000483428F0E0F0E0F0E0 +F0E0F0483418905838905838000000383438484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF785838785838785838E0FFF0F0F0FFF0FFF0F0F0F0E0F0F0F0F0FFE0FFF0F0F0F0 +E0F0F0F0F0F0E0FFF0F0F0F0E0F0F0F0F0F0E0F0F0F0F0F0E0F0F0F0F0F0E0F0F0F0F0F0E0F0F0 +483428FFFFFFF0E078F0AC90000000483428E0F0F0E0F0F0E0F0F0E0F0F0483428786838905848 +000000282428484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF785828905838 +785828F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0281428F0F0F0F0F0F0F0F0F0F0F0F0A0ACB0 +484868485858A09CC0A0ACB0A09CC0A0ACB0484868A0ACB0483428FFFFFFF0E078F0AC90000000 +483428F0E0F0E0F0E0F0E0F0E0F0E0E0E0F0483418905838905838000000383438484848787878 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF785838785838785838F0FFF0F0F0F0E0F0F0 +F0F0FFE0F0F0F0F0F0E0F0F0F0F0FFE0F0F0F0F0F0E0F0F0F0F0F0E0F0F0F0F0F0E0F0F0F0F0F0 +E0F0F0F0F0F0E0F0F0483428FFFFFFF0E078F0AC90000000483428E0F0F0E0F0F0E0E0F0E0F0F0 +E0F0F0E0F0F0482428906838905848000000282428484848787878FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF785828904838785838F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0F0F0484868 +485858484868485858484868485858484868485858484868485858484868A0ACB0483428FFFFFF +F0E078F0AC90000000483428484868485858484868E0F0E0E0E0F0E0F0E0E0E0F0483418905848 +785838000000383438484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF785838 +785838905838E0F0F0F0F0F0E0FFF0F0F0F0E0F0F0F0F0F0E0F0F0F0F0F0E0F0F0F0F0F0E0F0F0 +F0F0F0E0F0F0E0F0F0E0F0F0E0F0F0E0F0F0483428FFFFFFF0E078F0AC90000000483428E0F0F0 +E0F0E0E0E0F0E0F0F0E0F0F0E0F0E0E0E0F0D0E0E0482428685828583438000000282428484848 +787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF785838905838785828F0F0F0F0F0F0 +F0F0F0E0F0F0F0F0F0E0F0F0281428E0F0F0F0E0F0E0F0F0F0F0F0485858484868A0ACB0484868 +A0ACB0483428FFFFFFF0E078F0AC90000000483428E0E0F0E0F0E0F0E0F0E0F0E0E0E0F0D0E0E0 +D0BCD0B0ACB0A08CA0282418482428382418000000383438484848787878FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF905838785838905838E0F0F0F0F0F0E0F0F0F0F0F0E0F0F0F0F0F0 +E0F0F0F0F0F0E0F0F0F0F0F0E0F0F0E0F0F0E0F0F0E0F0F0E0F0F0483428FFFFFFF0E078F0AC90 +000000483428E0F0F0E0F0F0E0E0F0D0F0E0D0D0D0B0BCC0A09CB0788C90686878485858181418 +282418382418000000282428484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +785838905838785838F0F0F0E0F0F0F0E0F0E0F0F0F0F0F0E0F0F0484868485858484868485858 +484868485858484868A0ACB0483428FFFFFFF0E078F0AC90000000483428484868485858484858 +384858383448283438282438585858484858384838483448181400482428483428000000383438 +484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF905838786838905838E0F0F0 +E0F0F0E0F0F0F0F0F0E0F0F0E0F0F0E0F0F0E0F0F0E0F0F0E0F0F0E0F0F0E0F0F0E0F0F0683438 +FFFFFFF0E078F0AC90000000483428C0BCD0C0D0C0A0ACB0909C90787890586868484858384848 +484848485848686868687878382418684838785848000000282428484848787878FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF905838905838785838F0E0F0E0F0F0F0F0F0E0F0E0F0E0F0 +E0F0E0281428E0F0E0F0E0F0E0F0E0F0E0F0A0ACB0903438907868903438F0AC90000000483428 +383448383438382438484848383448182418383438485848585858687868908C90A0ACA0C0BCC0 +483418A05848906838000000383438484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF905838785838905848E0F0F0F0F0F0E0F0F0E0F0F0E0F0F0E0F0F0E0F0F0E0E0F0E0F0F0 +E0F0F0E0F0F0B08C90784838FFFFFFE0F0E0000000382418686868586868585858384848484848 +384848585858687878908C90909CA0B0ACC0C0D0D0D0E0E0D0F0E0483428906848A06848000000 +282428484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF785838905838905838 +F0E0F0E0F0E0F0E0F0E0F0F0E0E0F0E0F0E0484868485858484868485858484868784828D0ACB0 +784828000000282438282428182418181428181418281428282428382438383438383458384858 +484868D0E0E0E0E0F0D0E0E0E0E0E0483428A05848906838000000383438484848787878FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF905848786838905838E0F0F0E0F0F0E0F0F0E0F0F0 +E0F0F0E0E0F0E0F0F0E0F0F0E0F0E0E0E0F0787868000000282418282428687878585868485858 +585858586868787878909C90B0ACC0C0D0D0D0D0E0D0E0E0E0E0F0D0F0E0E0E0F0D0F0E0E0E0F0 +D0F0E0483428906848A06848000000282428484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF905838905838905838F0E0F0E0F0E0E0E0F0E0F0E0F0E0F0E0F0E0281428E0F0E0 +F0E0F0E0F0E0000000383418A09CA0908C90908C90788C78908C90909C90B09CB0C0BCC0D0D0E0 +E0E0E0E0E0F0D0E0E0E0E0E0E0E0E0E0E0E0D0E0E0E0E0E0D0E0E0E0E0E0483418A05848A06838 +000000383438484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF905848786838 +905848E0F0F0E0F0F0E0F0F0E0E0F0E0F0F0E0E0F0E0F0E0E0E0F0E0F0F0E0E0F0C0D0D0C0BCD0 +C0D0C0C0D0D0C0D0D0C0D0D0C0E0D0D0D0E0D0E0E0E0E0F0D0F0E0E0E0F0D0F0E0E0E0F0D0F0E0 +E0E0F0D0E0E0E0E0F0D0F0E0E0E0F0D0E0E0483428906848A06848000000282428484848787878 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF905838905838905838E0E0F0E0F0E0E0E0F0 +E0F0E0E0E0F0E0F0E0484868485858484868485858484868485858484868485858484868485858 +484868485858484868485858484868485858484868485858484868485858484868D0E0E0E0E0E0 +D0E0E0E0E0E0483428A05848906838000000383438484848787878FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF905848906838905848E0F0E0E0E0F0E0F0F0E0E0F0D0F0E0E0E0F0E0F0E0 +E0E0F0D0F0E0E0E0F0D0F0E0E0E0F0D0F0E0E0E0F0D0F0E0E0E0F0D0F0E0E0E0F0D0F0E0E0E0F0 +D0F0E0E0E0F0D0F0E0E0E0F0D0E0E0D0E0F0D0F0E0D0E0E0D0E0E0D0E0F0D0F0E0483428906848 +A06848000000282428484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF905838 +905848906838E0E0F0E0F0E0E0E0F0E0F0E0E0E0F0E0F0E0E0E0F0E0F0E0E0E0F0E0E0E0E0E0F0 +E0F0E0E0E0E0E0E0E0E0E0F0D0E0E0E0E0E0E0E0E0E0E0E0D0E0E0E0E0E0D0E0E0E0E0E0D0E0E0 +E0E0E0D0E0E0E0E0E0D0E0E0E0E0E0D0E0E0E0E0E0483418A05848A06838000000383438484848 +787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF905848906838905848E0F0F0E0E0F0 +D0F0E0E0E0F0E0F0E0E0E0F0D0F0E0E0E0F0D0F0E0E0E0F0D0F0E0E0E0F0D0F0E0E0E0F0D0F0E0 +E0E0F0D0F0E0E0E0F0D0E0E0E0E0F0D0F0E0E0E0F0D0E0E0D0E0F0D0E0E0D0E0E0D0E0E0D0E0F0 +D0E0E0D0E0E0D0E0E0483428906848A06848000000282428484848787878FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF906838A05848905838482428483418482428483418482428483418 +482428483418482428483418482428483418482428483418582428483428482428483418582428 +483428482428483418582428483428582428483418582428483428582428483418582428483428 +A06848A06848000000383438484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +905848906838905848906838905848906838906848906838905848906838A06848906838905848 +906848A06848906838905848906848A06848906848A06848906848A06848906848A06848906848 +A06848906848A06848906848A06848906848A06848906848A06848906848A06848000000282428 +484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD08C78D09C68A05848906838A05848 +906838A05848906838A05848906838A05848906838A05848906838A05848906838A05848906838 +A05848906838A05848A06838A05848906838A05848A06838A06848A06838A05848A06848A06848 +A06838A05848A06848A06848A06838A06848684828000000383438484848787878FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF784838000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000283428383438484848787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF686868484848383438282428383438282428383438282428 +383438282428383438282428383438282428383438282428383438282428383438282428383438 +282428383438282428383438282428383438282428383438282428383438282428383438383438 +484848686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF787878787878787878686868686868686868686868686868686868686868686868686868 +686868686868686868686868686868686868686868686868686868686868686868686868686868 +686868686868686868686868686868686868686868686868686868686868787878FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF + +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/documentation/RDS/images/clipboard.png b/documentation/RDS/images/clipboard.png new file mode 100644 index 00000000..aefb16da Binary files /dev/null and b/documentation/RDS/images/clipboard.png differ diff --git a/documentation/RDS/images/i-core.eps b/documentation/RDS/images/i-core.eps new file mode 100644 index 00000000..250d1dba --- /dev/null +++ b/documentation/RDS/images/i-core.eps @@ -0,0 +1,456 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (../images/i-core.eps) +%%CreationDate: (2012-04-20T17:48:52+02:00) +%%BoundingBox: 0 0 48 48 +%%HiResBoundingBox: 0 0 48 48 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Times-Roman findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 48 48 +userdict begin +DisplayImage +0 0 +48 48 +12.000000 +48 48 +0 +0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 +000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF000000A39121F5E78AEFD532C5B029A391216E6216000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFF00000092821A +000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000A39121 +F7EEAEEFD532C5B029A391216E6216000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000000F2D72C00000000000092821AF2D72C000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000A39121F5E78AEFD532C5B029A39121 +5B5112000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +F2D72CF2D72C5A5010F2D72CF2D72C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000000A09004C450B887A1BCFC36CEADD8BE9CF38E5CA38D1BA31B19C27807319453E0A0A0900 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000F2D72CF2D72CF2D72C +92821A000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000002421037E721ADAC036EDD33AF4D83A +F5DE5BF3DD5AEED336EBD136E8CC35E5CA34E2C834DBC033CBB0317063171E1C02000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000092821AF2D72CF2D72CF2D72CF2D72CF2D72CF2D72C000000 +FFFFFFFFFFFF000000746817D9C135E9CF38F5DA38F8DC38F6DB37F5DA35F3D834F2D634EFD532 +EDD231E9CE32E6CA32E4C932E0C433D7BC33CBB033605513000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +F2D72CF2D72CF2D72CF2D72CF2D72C000000000000000000FFFFFF000000242204AF9C29EAD039 +F2D738F9DE36FADE36F8DD35F7DD32F7DB31F5DB2FF4DA2FF2D72FF0D52FEDD230EBCF30E9CC30 +E6C932E1C533DCBF33CDB2338F7D211C1A02000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000F2D72CF2D72C000000000000F2D72C +F2D72C000000FFFFFFFFFFFF000000302C06CCB432F2D739FADD39FADF36FADF33FADE32FADF30 +F9DE2DF8DD2DF7DD2CF6DB2CF4DA2CF2D72CF0D52DEED32CECD02EE8CB2FE3C630E0C331DABC32 +CDAF31A38B28221F03000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFF000000F2D72CF2D72C000000FFFFFF +242004CAB332F3D539F9DD37FADE35FADE32FADF30FADF2EFAE02CF9DF2AF9DF29F8DE29F8DD29 +F6DC28F4DA29F3D82AF0D52AEFD22BEBCF2CE6C92DE3C630DEC030D3B630B79B2D917C24171502 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000000F2D72CF2D72C000000000000AE9A28F1D438F9DD37FADD34 +FADE32FADE2FFADF2CFAE02AFAE029F9DF27F9DF26F9DF25F8DE25F7DE25F6DC26B8A41DB6A21D +F1D529EED12AEACD2BE6C92CE0C22EDBBB2FCAAC2EB1952C73601C000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF000000F2D72C000000786B18F1D33AF8DB38F9DC35F9DD31F9DD2EFADF2B3B3509746812 +FAE026F9E1249C8D15000000F9E023F8DE23F7DD235F550D1A1704C8B11FEFD327C3AB21685B13 +C7AD26DEBF2DD6B62FC2A42DA38827463C0F000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000252104 +ECCE3AF8D93AF8DA36F9DB32F9DC2FF9DE2BF9DE29CBB51F0D0C029B8B1551490A161402A59515 +FAE120F9DF20F8DE21CCB61C1412020E0C0260550F040400151203C9AD24DFC02CDAB92DCFAE2E +B9992B957A25121001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000088781DF4D43BF7D837F8DA32F8DB2F +F8DC2CF9DD29F9DE26F9DF244B430A040400161402C1AE17FAE11FFAE21FF9E120F8DF21F8DD20 +BDA91A0000000000004C430CECCE27E6C829E2C22ADABA2CD3B22EC3A22B987D2440350E000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF0A0900E1C237F7D639F7D835F8D931F8DB2DF8DC2AF9DD27F9DE25665B0E +0000002A2505000000A59513FAE324FAE32AF9E22AF7DF279B8B15090801060500000000121002 +DEC123E8C927E2C228DCBB29D3B02BC5A32BA48626745E1D070600FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49410C +E5C537F6D537F7D732F7D92FF7DA2BF8DB28F8DD25F8DE23373207CBB619FAE11D766B0D000000 +CCBA27FAE63EF3E041ECD8397A6E14403908E7CD1EBAA3180C0A01231E05E9CA27E2C228DCBC28 +D3B12ACBA92BAE8F278369201F1A05FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000080701BE9C837F5D435F6D631F6D82D +F7DA2AF7DB27F8DD23F8DE22F9DF1FF9E01DFAE11CFAE21CCBB925ECDA44F8E75EEBDC5DDBCB49 +D6C230E1C920F0D51EEBD01E7768101D1904917D16E2C227DCBB27D3B128CAA729B998298D7121 +362B0C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000000A68E26EAC735F4D333F5D530F6D82CF6D829F7DA26F8DC23F8DE21 +F9DF1FF9E01DFAE11BFAE323FBE84FFCED77F8ED8AEADF82D4C85FC4B335C7B21ED4BC1ACAB31A +D8BD1EC6AD1CCAAE1EE2C125DCBA27D2B126C8A427B99727957622504013000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +AC9228DAB931EFCC31F4D430F5D72BF6D828F6D925F7DB23F8DD20F9DF1DF9DF1CF7DE1DF6E240 +FCEE7EFDF3A8FCF4B5F1E8A3DACE75BCAC39A090189D8B139E8B14C3AA1ADCBF1FE3C321E1C025 +DAB826D1AF26C6A327B89526967822604B17000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000BF9F2EE0BE32F0CE30F3D22E +F3D42BF5D628F6D825F7DB22F8DC1FF8DE1EF7DD1BEFD929E7D75CF8EE9FFDF7C6FDF8CCF8F1B7 +E3D77FC0B03A8677125C520B6C5E0DB09917D6B91EE1C122DEBE24D9B525CFAB25C3A126B49224 +9A792272591B000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000000BFA02DDEBC31EECA2FF2D02DF2D22AF4D427F5D724F6D923 +F7DB20F7DC1EF7DC1DEBD42FDDCF66F3EAA8FBF6CDFCF7CFFCF4B5EFE17CC6B4347F710F53490A +4F450A917E13D3B61EE0BF21DDBB23D6B324CBA824C09C24B08D2496762172571A000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000000AA8E27D1B02EE8C52FEFCD2CF1CF2AF3D226F4D524F5D722F6D920F6DA1EF6DB1DEBD42F +D8CA5FE8DE96ECE6B3F0E9B4F6EB9AE9D95F92831B64580B6E600D61540C9F8A15D7B91DE0BF20 +DAB722D2AE23C8A524BD9922AB88238F6E1F5D4715000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000967E20DBB631E9C42E +ECC92DEECC29EFCF27F2D225F3D422F4D621F5D81EF6DA1DEFD62BDDCA48CCC067B6AD6EB9B06B +C2B4569A8B25594F0C6F610DA79114A18C15C9AC1AE0BF1FDFBC21D8B622CFAB23C39F22B79223 +A5812181631D44340E000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000006A5A14CDAB2DE2BD2EE8C42CEBC829EDCC26EFCE23 +F0D122F2D420F4D51FF4D71EF5D923F0D834DFCC44BFB045A49636A2922492801387770FBEA716 +DCBE1AD9BB1BE3C11FE1BF20DBB820D2AF21C9A522BF9B22AF8A2197741F775A1A32260A000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF342D08C8A52CDFB92CE4BF2BE6C328E9C826EBCA24EECD22F0D020F1D31EE6CA1C +907F14665C145E551B61581C564E1450470C4E44085449099C8712BAA016E4C21EDCBA1EDDBA20 +D6B420CFAA21C49F20B89320A984208B6B1D7155181A1503FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF070700B89528 +DCB42CDFB92BE2BD29E5C127E8C524EAC822E9C820AC9617050400090503371E153E25193F2717 +261E0931200C472B1345281437230E3D300A9D8614BA9C19D9B520D0AC20C8A320BD9720B28D1F +9F7A1D7F601A6E5117060500FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000604F12C49F29DAB22ADDB828E0BC27 +E2BF25E6C221CFB11D171303000000452914A84B44AE4A4AA547474E2222783333A24444A34842 +7E3E2F39270D010100907714CCA91EC9A61FC19C20B8921FA9841F906D1C745617382A09000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF181602A18222C8A328D7B129DAB526DCB823D2B120282206000000 +090601AC4848C45353CA5555C85454863C3CA94949C75454BF5151AC4949622929261F052D2506 +987C17BB971DB8921EAD871E99761C7B5C186F51170D0B00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000004D3F0DB49123CFA827D3AE26D7B2259F84190101001714033A290CBA4E4ED05555D55A5A +B94C4C7C3939B34949C85353B54B4B9C43437D38380E0C020302005D4A0EA5821AAE881D9E7A1B +795B166A4D14312608000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000846A19BC9625 +CCA425D1AA253D320A0000000F0C02722F2FCD5555DD5C5CD55A5AA94848924040C55151CA5555 +B74C4C9841417436360706011D17041410038E6F17A07B1B816216664B134E390D000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B180198761FB89124CAA1259075180A0801 +140D03823535D35757DB5C5CD65A5AB44C4CAD4848CD5555C75454B54B4B9340406C3333201606 +000000070501765A137F6015644A12583F100F0D00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000000201C038A6C1BAF8821BF96226E5812000000CE5555D45959D85B5B +D45959C55252C14F4FCC5454BF4F4FAA4848873C3C643131050300251D067356127E5F15654B11 +563D0F131001000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000000161401755D15A47F1EB98F21C66F3ECD5555CE5555CF5555D15656CD5454C85252C35151 +B54B4B9B41417837375E2E2E775813926E18795A14664A1146330B0F0D00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000004F400B +A67F1EBC6D38C35050C35151C45151C45252BF5050BB4E4EB04A4A9C4343853A3A6A3333714027 +8764167054126146102B2105000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000001714015B480DB55444B84E4E +B74B4BB14B4BAD4848A144449140407D39396C33336B392B76571263480F3125060F0D00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000009080059311B894430A14343913E3E823939 +7235357042235F40163A2D071C1802060600000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF + +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/documentation/RDS/images/i-core.png b/documentation/RDS/images/i-core.png new file mode 100644 index 00000000..12289072 Binary files /dev/null and b/documentation/RDS/images/i-core.png differ diff --git a/documentation/RDS/socstyle.tex b/documentation/RDS/socstyle.tex new file mode 100644 index 00000000..af9f073e --- /dev/null +++ b/documentation/RDS/socstyle.tex @@ -0,0 +1,86 @@ + + \usepackage[default,osfigures,scale=0.95]{opensans} + \usepackage{xspace} + \usepackage{fancyhdr} + \usepackage{graphicx} + \usepackage{enumitem} + \usepackage[sf,bf]{titlesec} + \usepackage{titletoc} + \usepackage[paper=a4paper,headheight=30pt,tmargin=1.5in,bmargin=1in]{geometry} +%\usepackage{layouts} + + \renewlist{itemize}{itemize}{9} + \setlist[itemize]{label=\textbullet} + +% The LaTeX Companion -- p. 204. +% Miniature display of the page layout. +%\newcommand{\showpage}{% +% \setlayoutscale{0.65}\setlabelfont{\tiny}% +% \printheadingsfalse\printparametersfalse% +% \currentpage\pagedesign% +%} + + \titlecontents{section}[0pc] + {\sffamily\bfseries} % above code. + {\contentslabel{1pc}} % numbered entry format. + {} % numberless entry format. + {\titlerule*[8pt]{.}\textsc{\textbf{{\contentspage}}}} % page format. + \titlecontents{subsection}[0pc] + {\sffamily} % above code. + {\contentslabel{2pc}} % numbered entry format. + {} % numberless entry format. + {\titlerule*[8pt]{.}\textsc{\textbf{{\contentspage}}}} % page format. + \titlecontents{subsubsection}[1pc] + {\sffamily} % above code. + {\contentslabel{2pc}} % numbered entry format. + {} % numberless entry format. + {\titlerule*[8pt]{.}\textsc{\textbf{{\contentspage}}}} % page format. + + \newcommand{\key}[1]{\raisebox{-0.5\baselineskip}{\rule{0pt}{1.5\baselineskip}}\fbox{\textsf{#1}}} + + \newcommand{\DUroleul}[1]{\underline{#1}\xspace} + \newcommand{\DUrolesc}[1]{\textsc{#1}\xspace} + \newcommand{\DUrolecb}[1]{\textbf{\texttt{#1}}\xspace} + \newcommand{\DUrolefboxtt}[1]{\fbox{\texttt{#1}}\xspace} + + \newcommand{\DUtitlenote}[1]{\noindent\textbf{#1}\smallskip} + + \newcommand{\DUadmonitionnote}[1]{% + \begin{center} + \sffamily + \begin{array}[t]{m{1cm}!{\vrule width 1pt}m{.90\textwidth}} + \raisebox{0.0cm}{\includegraphics[scale=0.5]{./images/clipboard.eps}} & + \begin{minipage}[t]{.85\textwidth} #1 + \end{minipage} \\ + \end{array} + \end{center} + } + + \newcommand{\DUtitleerror}[1]{\noindent\textbf{\color{red}#1}\smallskip} + + \newcommand{\DUadmonitionerror}[1]{% + \begin{center} + \sffamily + \begin{array}[t]{m{1cm}!{\vrule width 1pt}m{.90\textwidth}} + \raisebox{0.0cm}{\includegraphics[scale=0.5]{./images/i-core.eps}} & + \begin{minipage}[t]{.85\textwidth} #1 + \end{minipage} \\ + \end{array} + \end{center} + } + + \newcommand{\UPMC} {\textsc{upmc}\xspace} + \newcommand{\LIP} {\textsc{lip6}\xspace} + \newcommand{\SoC} {\textsc{S}o\textsc{C}\xspace} + + \renewcommand{\headrulewidth}{0.2mm} + \renewcommand{\footrulewidth}{0.2mm} + \renewcommand{\sectionmark}[1]{\markboth{\thesection\ #1}{\thesection\ #1}} + \renewcommand{\subsectionmark}[1]{} + \lhead[]{\textsc{SoC} Documentation} + \rhead[]{September 2014} + \lfoot[]{\UPMC/\LIP/\SoC} + \rfoot[]{\thepage} + \cfoot[]{} + + \pagestyle{fancy} diff --git a/hurricane/src/hurricane/CMakeLists.txt b/hurricane/src/hurricane/CMakeLists.txt index a5720cbf..51b2c167 100644 --- a/hurricane/src/hurricane/CMakeLists.txt +++ b/hurricane/src/hurricane/CMakeLists.txt @@ -49,6 +49,7 @@ hurricane/Marker.h hurricane/Markers.h hurricane/Name.h hurricane/Names.h hurricane/NetExternalComponents.h + hurricane/NetRoutingProperty.h hurricane/Net.h hurricane/Nets.h hurricane/Occurrence.h hurricane/Occurrences.h hurricane/Pad.h hurricane/Pads.h @@ -140,6 +141,7 @@ Pad.cpp RoutingPad.cpp NetExternalComponents.cpp + NetRoutingProperty.cpp Reference.cpp Rubber.cpp Quark.cpp diff --git a/katabatic/src/NetRoutingProperty.cpp b/hurricane/src/hurricane/NetRoutingProperty.cpp similarity index 95% rename from katabatic/src/NetRoutingProperty.cpp rename to hurricane/src/hurricane/NetRoutingProperty.cpp index c483d0a1..bbbf7a90 100644 --- a/katabatic/src/NetRoutingProperty.cpp +++ b/hurricane/src/hurricane/NetRoutingProperty.cpp @@ -14,11 +14,11 @@ // +-----------------------------------------------------------------+ -#include "katabatic/NetRoutingProperty.h" +#include "hurricane/NetRoutingProperty.h" #include "hurricane/Net.h" -namespace Katabatic { +namespace Hurricane { using namespace std; using Hurricane::Property; @@ -50,7 +50,7 @@ namespace Katabatic { // ------------------------------------------------------------------- // Class : "NetRoutingProperty" - Name NetRoutingProperty::_name = "Katabatic NetRouting State"; + Name NetRoutingProperty::_name = "Hurricane NetRouting State"; NetRoutingProperty* NetRoutingProperty::create ( Net* owner ) @@ -135,4 +135,4 @@ namespace Katabatic { } -} // Katabatic namespace. +} // Hurricane namespace. diff --git a/hurricane/src/hurricane/RoutingPad.cpp b/hurricane/src/hurricane/RoutingPad.cpp index d53c1c07..554f1e2f 100644 --- a/hurricane/src/hurricane/RoutingPad.cpp +++ b/hurricane/src/hurricane/RoutingPad.cpp @@ -338,9 +338,19 @@ namespace Hurricane { break; case BiggestArea: default: - if ( getArea(*icomponent) > getArea(bestComponent) ) - bestComponent = *icomponent; - break; + { + double compArea = getArea(*icomponent); + double bestArea = getArea(bestComponent); + + if (compArea == bestArea) { + if (icomponent->getId() < bestComponent->getId()) + bestComponent = *icomponent; + } else { + if (compArea > bestArea) + bestComponent = *icomponent; + } + } + break; } } diff --git a/katabatic/src/katabatic/NetRoutingProperty.h b/hurricane/src/hurricane/hurricane/NetRoutingProperty.h similarity index 92% rename from katabatic/src/katabatic/NetRoutingProperty.h rename to hurricane/src/hurricane/hurricane/NetRoutingProperty.h index a1a5f061..7e1ccb90 100644 --- a/katabatic/src/katabatic/NetRoutingProperty.h +++ b/hurricane/src/hurricane/hurricane/NetRoutingProperty.h @@ -14,33 +14,24 @@ // +-----------------------------------------------------------------+ -#ifndef KATABATIC_NET_ROUTING_PROPERTY_H -#define KATABATIC_NET_ROUTING_PROPERTY_H +#ifndef HURRICANE_NET_ROUTING_PROPERTY_H +#define HURRICANE_NET_ROUTING_PROPERTY_H #include #include #include "hurricane/Name.h" #include "hurricane/Property.h" #include "hurricane/Slot.h" +#include "hurricane/Net.h" + namespace Hurricane { - class Net; -} - -namespace Katabatic { - - using Hurricane::_TName; - using Hurricane::Name; - using Hurricane::Record; - using Hurricane::PrivateProperty; - using Hurricane::DBo; - using Hurricane::Net; class NetRoutingProperty; // ------------------------------------------------------------------- -// Class : "Katabatic::NetRoutingState". +// Class : "Hurricane::NetRoutingState". class NetRoutingState { friend class NetRoutingProperty; @@ -88,7 +79,7 @@ namespace Katabatic { // ------------------------------------------------------------------- -// Class : "Katabatic::NetRoutingProperty". +// Class : "Hurricane::NetRoutingProperty". class NetRoutingProperty : public PrivateProperty { friend class NetRoutingExtension; @@ -118,7 +109,7 @@ namespace Katabatic { // ------------------------------------------------------------------- -// Class : "Katabatic::NetRoutingExtension". +// Class : "Hurricane::NetRoutingExtension". class NetRoutingExtension { public: @@ -186,10 +177,10 @@ namespace Katabatic { } -} // Katabatic namespace. +} // Hurricane namespace. -INSPECTOR_P_SUPPORT(Katabatic::NetRoutingState); +INSPECTOR_P_SUPPORT(Hurricane::NetRoutingState); -#endif // KATABATIC_NET_ROUTING_PROPERTY_H +#endif // HURRICANE_NET_ROUTING_PROPERTY_H diff --git a/hurricane/src/isobar/PyRegularLayer.cpp b/hurricane/src/isobar/PyRegularLayer.cpp index 231db016..f4de6424 100644 --- a/hurricane/src/isobar/PyRegularLayer.cpp +++ b/hurricane/src/isobar/PyRegularLayer.cpp @@ -107,23 +107,30 @@ extern "C" { // Standart Attribute. + DirectGetLongAttribute(PyRegularLayer_getExtentionCap ,getExtentionCap ,PyRegularLayer,RegularLayer) + DirectGetLongAttribute(PyRegularLayer_getExtentionWidth,getExtentionWidth,PyRegularLayer,RegularLayer) + accessorLayerFromVoid(getBasicLayer ,PyRegularLayer,RegularLayer) updatorFromBasicLayer(setBasicLayer ,PyRegularLayer,RegularLayer) - DBoDestroyAttribute (PyRegularLayer_destroy, PyRegularLayer) + DBoDestroyAttribute (PyRegularLayer_destroy,PyRegularLayer) // --------------------------------------------------------------- // PyRegularLayer Attribute Method table. PyMethodDef PyRegularLayer_Methods[] = - { { "create" , (PyCFunction)PyRegularLayer_create , METH_VARARGS|METH_STATIC - , "Create a new RegularLayer." } - , { "getBasicLayer", (PyCFunction)PyRegularLayer_getBasicLayer, METH_NOARGS - , "Get the BasicLayer associated to this RegularLayer." } - , { "setBasicLayer", (PyCFunction)PyRegularLayer_setBasicLayer, METH_VARARGS - , "Associate a BasicLayer with this RegularLayer." } - , { "destroy" , (PyCFunction)PyRegularLayer_destroy , METH_NOARGS - , "destroy associated hurricane object, the python object remains." } + { { "create" , (PyCFunction)PyRegularLayer_create , METH_VARARGS|METH_STATIC + , "Create a new RegularLayer." } + , { "getExtentionWidth", (PyCFunction)PyRegularLayer_getExtentionWidth, METH_NOARGS + , "Return the width extension (delta)." } + , { "getExtentionCap" , (PyCFunction)PyRegularLayer_getExtentionCap , METH_NOARGS + , "Return the cap extension (begin/end delta)." } + , { "getBasicLayer" , (PyCFunction)PyRegularLayer_getBasicLayer , METH_NOARGS + , "Get the BasicLayer associated to this RegularLayer." } + , { "setBasicLayer" , (PyCFunction)PyRegularLayer_setBasicLayer , METH_VARARGS + , "Associate a BasicLayer with this RegularLayer." } + , { "destroy" , (PyCFunction)PyRegularLayer_destroy , METH_NOARGS + , "destroy associated hurricane object, the python object remains." } , {NULL, NULL, 0, NULL} /* sentinel */ }; diff --git a/katabatic/src/AutoContactHTee.cpp b/katabatic/src/AutoContactHTee.cpp index 5ef12635..359f954f 100644 --- a/katabatic/src/AutoContactHTee.cpp +++ b/katabatic/src/AutoContactHTee.cpp @@ -305,10 +305,11 @@ namespace Katabatic { } } } + + _horizontal1->invalidate( this ); + _horizontal2->invalidate( this ); + _vertical1 ->invalidate( this ); } - _horizontal1->invalidate( this ); - _horizontal2->invalidate( this ); - _vertical1 ->invalidate( this ); ltraceout(110); DebugSession::close(); diff --git a/katabatic/src/AutoContactTurn.cpp b/katabatic/src/AutoContactTurn.cpp index 369beacb..6e666e29 100644 --- a/katabatic/src/AutoContactTurn.cpp +++ b/katabatic/src/AutoContactTurn.cpp @@ -252,9 +252,10 @@ namespace Katabatic { setLayer ( (delta == 0) ? rg->getRoutingLayer(depthContact) : rg->getContactLayer(depthContact) ); } + + _horizontal1->invalidate( this ); + _vertical1 ->invalidate( this ); } - _horizontal1->invalidate( this ); - _vertical1 ->invalidate( this ); ltraceout(110); DebugSession::close (); diff --git a/katabatic/src/AutoContactVTee.cpp b/katabatic/src/AutoContactVTee.cpp index 8c6c387c..97eb6a74 100644 --- a/katabatic/src/AutoContactVTee.cpp +++ b/katabatic/src/AutoContactVTee.cpp @@ -290,10 +290,11 @@ namespace Katabatic { } } } + + _horizontal1->invalidate( this ); + _vertical1 ->invalidate( this ); + _vertical2 ->invalidate( this ); } - _horizontal1->invalidate( this ); - _vertical1 ->invalidate( this ); - _vertical2 ->invalidate( this ); ltraceout(110); DebugSession::close (); diff --git a/katabatic/src/CMakeLists.txt b/katabatic/src/CMakeLists.txt index 15e70fd7..7e619d6e 100644 --- a/katabatic/src/CMakeLists.txt +++ b/katabatic/src/CMakeLists.txt @@ -16,7 +16,6 @@ endif ( CHECK_DETERMINISM ) ) set ( includes katabatic/Constants.h katabatic/Observer.h - katabatic/NetRoutingProperty.h katabatic/Configuration.h katabatic/ChipTools.h katabatic/AutoContact.h @@ -38,7 +37,6 @@ endif ( CHECK_DETERMINISM ) set ( mocIncludes katabatic/GraphicKatabaticEngine.h ) set ( cpps Configuration.cpp Observer.cpp - NetRoutingProperty.cpp ChipTools.cpp AutoContact.cpp AutoContactTerminal.cpp diff --git a/katabatic/src/LoadGrByNet.cpp b/katabatic/src/LoadGrByNet.cpp index 65c7318d..907d7b22 100644 --- a/katabatic/src/LoadGrByNet.cpp +++ b/katabatic/src/LoadGrByNet.cpp @@ -921,25 +921,26 @@ namespace { _do_xG(); break; default: - cerr << Bug( "Unmanaged Configuration [%d] = [%d+%d+%d+%d,%d+%d] %s in %s\n" - " The global routing seems to be defective." - , _connexity.connexity - , _connexity.fields.globals - , _connexity.fields.M1 - , _connexity.fields.M2 - , _connexity.fields.M3 - , _connexity.fields.Pin - , _connexity.fields.Pad - , _net->_getString().c_str() - , getString(_gcell).c_str() - ) << endl; + throw Bug( "Unmanaged Configuration [%d] = [%d+%d+%d+%d,%d+%d] %s in %s\n" + " The global routing seems to be defective." + , _connexity.connexity + , _connexity.fields.globals + , _connexity.fields.M1 + , _connexity.fields.M2 + , _connexity.fields.M3 + , _connexity.fields.Pin + , _connexity.fields.Pad + , _net->_getString().c_str() + , getString(_gcell).c_str() + ); _do_xG(); } if (straightLine) { // This a global router problem. - cerr << Bug( "Unmanaged configuration: straight line,\n" + cerr << Bug( "Unmanaged configuration: straight line in %s,\n" " The global routing seems to be defective." + , _net->_getString().c_str() ) << endl; return; } else { diff --git a/katabatic/src/katabatic/KatabaticEngine.h b/katabatic/src/katabatic/KatabaticEngine.h index 2f235e68..c5249083 100644 --- a/katabatic/src/katabatic/KatabaticEngine.h +++ b/katabatic/src/katabatic/KatabaticEngine.h @@ -27,6 +27,7 @@ #include "hurricane/Torus.h" #include "hurricane/Layer.h" #include "hurricane/Net.h" +#include "hurricane/NetRoutingProperty.h" namespace Hurricane { class Name; @@ -43,7 +44,6 @@ namespace CRL { #include "katabatic/Constants.h" #include "katabatic/Configuration.h" -#include "katabatic/NetRoutingProperty.h" #include "katabatic/GCell.h" #include "katabatic/AutoSegments.h" #include "katabatic/AutoContact.h" @@ -64,6 +64,8 @@ namespace Katabatic { using Hurricane::Nets; using Hurricane::Cell; using Hurricane::Instance; + using Hurricane::NetRoutingExtension; + using Hurricane::NetRoutingState; using CRL::RoutingGauge; using CRL::RoutingLayerGauge; using CRL::ToolEngine; diff --git a/kite/src/BuildPowerRails.cpp b/kite/src/BuildPowerRails.cpp index c9d6221c..7d8daac0 100644 --- a/kite/src/BuildPowerRails.cpp +++ b/kite/src/BuildPowerRails.cpp @@ -26,12 +26,12 @@ #include "hurricane/Vertical.h" #include "hurricane/RoutingPad.h" #include "hurricane/NetExternalComponents.h" +#include "hurricane/NetRoutingProperty.h" #include "hurricane/Instance.h" #include "hurricane/Plug.h" #include "hurricane/Path.h" #include "hurricane/Query.h" #include "crlcore/AllianceFramework.h" -#include "katabatic/NetRoutingProperty.h" #include "kite/RoutingPlane.h" #include "kite/TrackFixedSegment.h" #include "kite/Track.h" @@ -55,6 +55,8 @@ namespace { using Hurricane::Vertical; using Hurricane::RoutingPad; using Hurricane::NetExternalComponents; + using Hurricane::NetRoutingExtension; + using Hurricane::NetRoutingState; using Hurricane::Instance; using Hurricane::Plug; using Hurricane::Path; @@ -113,13 +115,13 @@ namespace { private: bool guessGlobalNet ( const Name&, Net* ); private: - Name _vddeName; - Name _vddiName; - Name _vsseName; - Name _vssiName; - Name _ckName; - Name _ckiName; - Name _ckoName; + Name _vddePadNetName; + Name _vddiPadNetName; + Name _vssePadNetName; + Name _vssiPadNetName; + Name _ckPadNetName; + Name _ckiPadNetName; + Name _ckoPadNetName; Net* _vdde; Net* _vddi; Net* _vsse; @@ -142,13 +144,13 @@ namespace { inline void GlobalNetTable::setBlockage ( Net* net ) { _blockage=net; } GlobalNetTable::GlobalNetTable ( KiteEngine* kite ) - : _vddeName("vdde") - , _vddiName("vddi") - , _vsseName("vsse") - , _vssiName("vssi") - , _ckName ("pad" ) - , _ckiName ("ck" ) - , _ckoName ("cko" ) + : _vddePadNetName("vdde") + , _vddiPadNetName("vddi") + , _vssePadNetName("vsse") + , _vssiPadNetName("vssi") + , _ckPadNetName ("pad" ) + , _ckiPadNetName ("ck" ) + , _ckoPadNetName ("cko" ) , _vdde (NULL) , _vddi (NULL) , _vsse (NULL) @@ -214,7 +216,7 @@ namespace { } } - if (masterNet->getName() == _ckName) { + if (masterNet->getName() == _ckPadNetName) { cmess1 << " - Using <" << net->getName() << "> as external chip clock net." << endl; _ck = net; } @@ -236,17 +238,17 @@ namespace { if (_cki == NULL) cerr << Warning("No net at (for pads) chip level." ) << endl; else destroyRing( _cki ); } else { - _vddiName = ""; - _vssiName = ""; - _ckoName = ""; + _vddiPadNetName = ""; + _vssiPadNetName = ""; + _ckoPadNetName = ""; forEach ( Net*, inet, topCell->getNets() ) { if (NetRoutingExtension::isManualGlobalRoute(*inet)) continue; Net::Type netType = inet->getType(); if (netType == Net::Type::POWER) { - if (_vddiName.isEmpty()) { - _vddiName = inet->getName(); + if (_vddiPadNetName.isEmpty()) { + _vddiPadNetName = inet->getName(); _vddi = *inet; } else { cerr << Error("Second power supply net <%s> net at top block level will be ignored.\n" @@ -258,8 +260,8 @@ namespace { } if (netType == Net::Type::GROUND) { - if (_vssiName.isEmpty()) { - _vssiName = inet->getName(); + if (_vssiPadNetName.isEmpty()) { + _vssiPadNetName = inet->getName(); _vssi = *inet; } else { cerr << Error("Second power ground net <%s> net at top block level will be ignored.\n" @@ -271,9 +273,9 @@ namespace { } if (netType == Net::Type::CLOCK) { - if (_ckoName.isEmpty()) { + if (_ckoPadNetName.isEmpty()) { cmess1 << " - Using <" << inet->getName() << "> as internal (core) clock net." << endl; - _ckoName = inet->getName(); + _ckoPadNetName = inet->getName(); _cko = *inet; } else { cerr << Error("Second clock net <%s> net at top block level will be ignored.\n" @@ -297,43 +299,43 @@ namespace { bool GlobalNetTable::guessGlobalNet ( const Name& name, Net* net ) { - if (name == _vddeName) { + if (name == _vddePadNetName) { cmess1 << " - Using <" << net->getName() << "> as corona (external:vdde) power net." << endl; _vdde = net; return true; } - if (name == _vddiName) { + if (name == _vddiPadNetName) { cmess1 << " - Using <" << net->getName() << "> as core (internal:vddi) power net." << endl; _vddi = net; return true; } - if (name == _vsseName) { + if (name == _vssePadNetName) { cmess1 << " - Using <" << net->getName() << "> as corona (external:vsse) ground net." << endl; _vsse = net; return true; } - if (name == _vssiName) { + if (name == _vssiPadNetName) { cmess1 << " - Using <" << net->getName() << "> as core (internal:vssi) ground net." << endl; _vssi = net; return true; } - if (name == _ckiName) { + if (name == _ckiPadNetName) { cmess1 << " - Using <" << net->getName() << "> as corona (external:cki) clock net." << endl; _cki = net; return true; } - if (name == _ckoName) { + if (name == _ckoPadNetName) { cmess1 << " - Using <" << net->getName() << "> as core (internal:cko) clock net." << endl; _cko = net; return true; } - if (name == _ckName) { + if (name == _ckPadNetName) { cmess1 << " - Using <" << net->getName() << "> as external chip clock net." << endl; _ck = net; return true; @@ -345,15 +347,17 @@ namespace { Net* GlobalNetTable::getRootNet ( const Net* net, Path path ) const { - ltrace(300) << "getRootNet:" << path << ":" << net << endl; + ltrace(300) << " getRootNet:" << path << ":" << net << endl; if (net == _blockage) return _blockage; - if (net->getName() == _vddeName) return _vdde; - if (net->getName() == _vsseName) return _vsse; + if (net->getName() == _vdde->getName()) return _vdde; + if (net->getName() == _vsse->getName()) return _vsse; if (net->getType() == Net::Type::POWER ) return _vddi; if (net->getType() == Net::Type::GROUND) return _vssi; - if (net->getType() != Net::Type::CLOCK ) return NULL; + if (net->getType() != Net::Type::CLOCK ) { + return NULL; + } const Net* upNet = net; @@ -377,9 +381,12 @@ namespace { } } - if (upNet->getName() == _ckName ) return _ck; - if (upNet->getName() == _ckiName) return _cki; - if (upNet->getName() == _ckoName) return _cko; + ltrace(300) << " Check againts top clocks ck:" << _ck->getName() + << " cki:" << _cki->getName() << " cko:" << _cko->getName() << endl; + + if (upNet->getName() == _ck->getName() ) return _ck; + if (upNet->getName() == _cki->getName()) return _cki; + if (upNet->getName() == _cko->getName()) return _cko; return NULL; } @@ -1073,7 +1080,10 @@ namespace { rootNet = _powerRailsPlanes.getRootNet(component->getNet(),getPath()); else rootNet = _kite->getBlockageNet(); - if ( rootNet == NULL ) return; + if ( rootNet == NULL ) { + ltrace(300) << " rootNet is NULL, not taken into account." << endl; + return; + } ltrace(300) << " rootNet " << rootNet << " (" << rootNet->isClock() << ") " << go->getCell() << " (" << go->getCell()->isTerminal() << ")" << endl; diff --git a/kite/src/BuildPreRouteds.cpp b/kite/src/BuildPreRouteds.cpp index 50728873..115a70ff 100644 --- a/kite/src/BuildPreRouteds.cpp +++ b/kite/src/BuildPreRouteds.cpp @@ -26,13 +26,13 @@ #include "hurricane/Vertical.h" #include "hurricane/RoutingPad.h" #include "hurricane/NetExternalComponents.h" +#include "hurricane/NetRoutingProperty.h" #include "hurricane/DeepNet.h" #include "hurricane/Instance.h" #include "hurricane/Plug.h" #include "hurricane/Path.h" #include "hurricane/Query.h" #include "crlcore/AllianceFramework.h" -#include "katabatic/NetRoutingProperty.h" #include "katabatic/AutoContact.h" #include "kite/RoutingPlane.h" #include "kite/TrackFixedSegment.h" @@ -63,6 +63,8 @@ namespace Kite { using Hurricane::Vertical; using Hurricane::RoutingPad; using Hurricane::NetExternalComponents; + using Hurricane::NetRoutingExtension; + using Hurricane::NetRoutingState; using Hurricane::DeepNet; using Hurricane::Instance; using Hurricane::Plug; @@ -78,8 +80,6 @@ namespace Kite { using Hurricane::DataBase; using CRL::AllianceFramework; using Hurricane::ForEachIterator; - using Katabatic::NetRoutingExtension; - using Katabatic::NetRoutingState; using Katabatic::AutoContact; using Katabatic::AutoSegment; using Katabatic::ChipTools; diff --git a/kite/src/ProtectRoutingPads.cpp b/kite/src/ProtectRoutingPads.cpp index 7c0926f0..a3111859 100644 --- a/kite/src/ProtectRoutingPads.cpp +++ b/kite/src/ProtectRoutingPads.cpp @@ -26,8 +26,8 @@ #include "hurricane/Occurrence.h" #include "hurricane/Cell.h" #include "hurricane/NetExternalComponents.h" +#include "hurricane/NetRoutingProperty.h" #include "crlcore/Catalog.h" -#include "katabatic/NetRoutingProperty.h" #include "katabatic/AutoContact.h" #include "katabatic/AutoSegment.h" #include "katabatic/GCell.h" @@ -60,6 +60,8 @@ namespace { using Hurricane::Occurrence; using Hurricane::Path; using Hurricane::NetExternalComponents; + using Hurricane::NetRoutingExtension; + using Hurricane::NetRoutingState; using CRL::CatalogExtension; using Katabatic::GCellGrid; using Katabatic::AutoContact; diff --git a/kite/src/TrackCost.cpp b/kite/src/TrackCost.cpp index f93ab678..cfc6562a 100644 --- a/kite/src/TrackCost.cpp +++ b/kite/src/TrackCost.cpp @@ -177,8 +177,9 @@ namespace Kite { s += " " + getString(_dataState); s += "+" + getString(_ripupCount); s += ":" + getString((_dataState<<2)+_ripupCount); - s += " " + string ( (_blockage )?"b":"-" ); - s += string ( (_blockage )?"f":"-" ); + s += " " + string ( (_infinite )?"I":"-" ); + s += string ( (_blockage )?"b":"-" ); + s += string ( (_fixed )?"f":"-" ); s += string ( (_hardOverlap )?"h":"-" ); s += string ( (_overlap )?"o":"-" ); s += string ( (_overlapGlobal )?"g":"-" ); diff --git a/knik/src/KnikEngine.cpp b/knik/src/KnikEngine.cpp index 6967739e..b7c35730 100644 --- a/knik/src/KnikEngine.cpp +++ b/knik/src/KnikEngine.cpp @@ -16,8 +16,9 @@ #include #include "hurricane/Warning.h" -#include "hurricane/RoutingPad.h" #include "hurricane/Property.h" +#include "hurricane/NetRoutingProperty.h" +#include "hurricane/RoutingPad.h" #include "hurricane/Contact.h" #include "hurricane/Horizontal.h" #include "hurricane/Vertical.h" @@ -49,6 +50,8 @@ namespace Knik { using Hurricane::Warning; + using Hurricane::NetRoutingExtension; + using Hurricane::NetRoutingState; using CRL::addMeasure; using CRL::RoutingGauge; using CRL::RoutingLayerGauge; @@ -392,7 +395,8 @@ void KnikEngine::saveSolution ( const string& fileName ) if ( net->isGlobal() or net->isSupply() or net->isClock() - or (net->getName() == obstacleNetName) ) continue; + or (net->getName() == obstacleNetName) + or not NetRoutingExtension::isAutomaticGlobalRoute(*net) ) continue; all_nets.push_back(*net); } stable_sort ( all_nets.begin(), all_nets.end(), netId_sort ); diff --git a/knik/src/LoadSolution.cpp b/knik/src/LoadSolution.cpp index 65e70ac6..ddf6aeb7 100644 --- a/knik/src/LoadSolution.cpp +++ b/knik/src/LoadSolution.cpp @@ -2,7 +2,7 @@ // -*- C++ -*- // // This file is part of the Coriolis Software. -// Copyright (c) UPMC 2008-2013, All Rights Reserved +// Copyright (c) UPMC 2008-2014, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | @@ -21,6 +21,7 @@ #include "hurricane/DataBase.h" #include "hurricane/Technology.h" #include "hurricane/Layer.h" +#include "hurricane/NetRoutingProperty.h" #include "hurricane/Contact.h" #include "hurricane/Vertical.h" #include "hurricane/Horizontal.h" @@ -29,6 +30,8 @@ #include "hurricane/UpdateSession.h" #include "crlcore/Utilities.h" #include "crlcore/Measures.h" +#include "crlcore/AllianceFramework.h" +#include "crlcore/CellGauge.h" #include "knik/Configuration.h" #include "knik/Graph.h" #include "knik/KnikEngine.h" @@ -44,6 +47,7 @@ namespace { using std::make_pair; using CRL::IoFile; + using CRL::AllianceFramework; using Hurricane::ForEachIterator; using Hurricane::Error; @@ -56,6 +60,8 @@ namespace { using Hurricane::Technology; using Hurricane::Layer; using Hurricane::Net; + using Hurricane::NetRoutingExtension; + using Hurricane::NetRoutingState; using Hurricane::Contact; using Hurricane::Segment; using Hurricane::Vertical; @@ -284,11 +290,12 @@ namespace { void SolutionParser::load () { UpdateSession::open(); - try { cmess1 << " o Loading solution: \"" << _fileName << "\"." << endl; + + DbU::Unit sliceHeight = AllianceFramework::get()->getCellGauge()->getSliceHeight(); CRL::IoFile fileStream ( _fileName ); fileStream.open( "r" ); if (not fileStream.isOpen()) @@ -376,24 +383,26 @@ namespace { Box rpBox; RoutingPad* previousRp = NULL; - forEach ( RoutingPad*, rp, net->getRoutingPads() ) { - rpBox.merge( rp->getBoundingBox() ); - Contact* gcontact = contactMap.findVertexContact( rp->getBoundingBox() ); - if (gcontact) { - rp->getBodyHook()->attach( gcontact->getBodyHook() ); - } else { - if (previousRp) - rp->getBodyHook()->attach( previousRp->getBodyHook() ); + if (NetRoutingExtension::isAutomaticGlobalRoute(net)) { + forEach ( RoutingPad*, rp, net->getRoutingPads() ) { + rpBox.merge( rp->getBoundingBox() ); + Contact* gcontact = contactMap.findVertexContact( rp->getBoundingBox() ); + if (gcontact) { + rp->getBodyHook()->attach( gcontact->getBodyHook() ); + } else { + if (previousRp) + rp->getBodyHook()->attach( previousRp->getBodyHook() ); + } + previousRp = *rp; + ++nbRoutingPad; + //cerr << rp->_getString() << " should be attached to " << gcontact << endl; } - previousRp = *rp; - ++nbRoutingPad; - //cerr << rp->_getString() << " should be attached to " << gcontact << endl; } - if ( (nbRoutingPad > 1) + if ( (nbRoutingPad > 1) and (not contactMap.size()) - and ( (rpBox.getHeight() > DbU::fromLambda(50.0)) - or (rpBox.getWidth () > DbU::fromLambda(50.0)) ) ) { + and ( (rpBox.getHeight() > sliceHeight) + or (rpBox.getWidth () > sliceHeight) ) ) { ++missingGlobalRouting; cerr << Warning( "Net <%s> is missing global routing." , getString(net->getName()).c_str() ) << endl;