From 1f9ae3655472285907294fb840f87d37f097c372 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sun, 21 Sep 2014 16:44:37 +0200 Subject: [PATCH] Bug fixes for MOSIS SCMOS_DEEP support. * Change: In Hurricane, the NetRoutingProperty is moved into Hurricane from Katabatic. Needed for Knik to be able to access thoses informations. * Change: In Hurricane, in RoutingPad::setOnBestComponent(), now in case of identical area, select the component of lowest id. This should not be needed if the component ordering was fully deterministic as it should be (will investigate later). This is to ensure that the choosen component is always the same, especially between save/load of a global routing. * Bug: In Katabatic, in AutoContactHTee::updateTopology(), invalidate the segments only if the topology is valid (no NULL in the cached segments). * Bug: In Katabatic, in GCellTopology::construct(), throw an error if the topology is bad instead of trying to continue (and core dump later... ). * Bug: In Kite, in BuildPowerRails, distinguish the name of the master net in the pad (for vddi, vssi, vdde, vsse, ck, cki & cko) and the name of the net in the *chip* netlist. Must use the later to make comparison as they may differs. * Change: In Knik, in save/load solution, exclude nets that are not globally routed by Knik. That is which NetRoutingProperty is not *Automatic*. * Bug: In Cumulus, in chip.BlockPower take account of the layer width extention to sligthy shrink the connector thus avoiding a notch with standart cell in some cases. * Change: In Cumulus, in chip.ClockTree disable the use of fixed Steiner trees for the leaf clocks, as it seems overconstrained for the router. First move was to lower them in M2/M3 (instead of M3/M4) but that was not sufficent. * New: In Cumulus, RSavePlugin for recursively saving a physical hierarchy. * New: In documentation, first embryo for RDS file. Should have been in Alliance git, but I prefer to keep newest doc in Coriolis. --- crlcore/etc/cmos/alliance.conf | 14 +- cumulus/src/CMakeLists.txt | 1 + cumulus/src/plugins/RSavePlugin.py | 101 +++ cumulus/src/plugins/chip/BlockCorona.py | 5 +- cumulus/src/plugins/chip/BlockPower.py | 15 +- cumulus/src/plugins/chip/Configuration.py | 88 +- cumulus/src/plugins/clocktree/ClockTree.py | 68 +- cumulus/src/plugins/clocktree/RSMT.py | 7 +- cumulus/src/tools/px2mpx.py | 5 +- documentation/RDS/HTML_defs.rst | 19 + documentation/RDS/LaTeX_defs.rst | 22 + documentation/RDS/RDS.html | 345 ++++++++ documentation/RDS/RDS.rst | 349 ++++++++ documentation/RDS/RDS_HTML.rst | 5 + documentation/RDS/RDS_LaTeX.rst | 4 + documentation/RDS/SoC.css | 790 ++++++++++++++++++ .../RDS/images/RDS_LCW-eps-converted-to.pdf | Bin 0 -> 5101 bytes documentation/RDS/images/RDS_LCW.eps | 238 ++++++ documentation/RDS/images/RDS_LCW.fig | 71 ++ documentation/RDS/images/RDS_LCW.png | Bin 0 -> 4383 bytes .../RDS/images/RDS_VW-eps-converted-to.pdf | Bin 0 -> 5082 bytes documentation/RDS/images/RDS_VW.eps | 243 ++++++ documentation/RDS/images/RDS_VW.fig | 69 ++ documentation/RDS/images/RDS_VW.png | Bin 0 -> 4257 bytes documentation/RDS/images/RSD_VW.fig | 69 ++ .../RDS/images/clipboard-eps-converted-to.pdf | Bin 0 -> 4504 bytes documentation/RDS/images/clipboard.eps | 456 ++++++++++ documentation/RDS/images/clipboard.png | Bin 0 -> 3105 bytes documentation/RDS/images/i-core.eps | 456 ++++++++++ documentation/RDS/images/i-core.png | Bin 0 -> 3138 bytes documentation/RDS/socstyle.tex | 86 ++ hurricane/src/hurricane/CMakeLists.txt | 2 + .../src/hurricane}/NetRoutingProperty.cpp | 8 +- hurricane/src/hurricane/RoutingPad.cpp | 16 +- .../hurricane/hurricane}/NetRoutingProperty.h | 29 +- hurricane/src/isobar/PyRegularLayer.cpp | 25 +- katabatic/src/AutoContactHTee.cpp | 7 +- katabatic/src/AutoContactTurn.cpp | 5 +- katabatic/src/AutoContactVTee.cpp | 7 +- katabatic/src/CMakeLists.txt | 2 - katabatic/src/LoadGrByNet.cpp | 27 +- katabatic/src/katabatic/KatabaticEngine.h | 4 +- kite/src/BuildPowerRails.cpp | 90 +- kite/src/BuildPreRouteds.cpp | 6 +- kite/src/ProtectRoutingPads.cpp | 4 +- kite/src/TrackCost.cpp | 5 +- knik/src/KnikEngine.cpp | 8 +- knik/src/LoadSolution.cpp | 41 +- 48 files changed, 3608 insertions(+), 204 deletions(-) create mode 100644 cumulus/src/plugins/RSavePlugin.py create mode 100644 documentation/RDS/HTML_defs.rst create mode 100644 documentation/RDS/LaTeX_defs.rst create mode 100644 documentation/RDS/RDS.html create mode 100644 documentation/RDS/RDS.rst create mode 100644 documentation/RDS/RDS_HTML.rst create mode 100644 documentation/RDS/RDS_LaTeX.rst create mode 100644 documentation/RDS/SoC.css create mode 100644 documentation/RDS/images/RDS_LCW-eps-converted-to.pdf create mode 100644 documentation/RDS/images/RDS_LCW.eps create mode 100644 documentation/RDS/images/RDS_LCW.fig create mode 100644 documentation/RDS/images/RDS_LCW.png create mode 100644 documentation/RDS/images/RDS_VW-eps-converted-to.pdf create mode 100644 documentation/RDS/images/RDS_VW.eps create mode 100644 documentation/RDS/images/RDS_VW.fig create mode 100644 documentation/RDS/images/RDS_VW.png create mode 100644 documentation/RDS/images/RSD_VW.fig create mode 100644 documentation/RDS/images/clipboard-eps-converted-to.pdf create mode 100644 documentation/RDS/images/clipboard.eps create mode 100644 documentation/RDS/images/clipboard.png create mode 100644 documentation/RDS/images/i-core.eps create mode 100644 documentation/RDS/images/i-core.png create mode 100644 documentation/RDS/socstyle.tex rename {katabatic/src => hurricane/src/hurricane}/NetRoutingProperty.cpp (95%) rename {katabatic/src/katabatic => hurricane/src/hurricane/hurricane}/NetRoutingProperty.h (92%) 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 0000000000000000000000000000000000000000..c78679f5704518a83979238318e043c5066b7345 GIT binary patch literal 5101 zcmb^#X+RTK(+h>ggDN85hvE=YhN1W<%PI4Z~`A=yA6mz#|Qv?y8+RJ2&7 zD2fME(c)P}s(9A|TB{VR;C(^G6Hu`ft>4>l2(@3^A1*)g-n^N4bI%)S5+6SX#^gY> ziYKeLL0lMxwF$|PyE_tyYZA#Mmxt6v>H-a4fJxOpe@S*)fl9;v7F>Y@v`+x##!|P3iQ2v}WU>x@+bu^2g@4-*sCt zW-x8+n7Xr16~CQ5K2%lltk0}zUrH?S*~5}ok6gp#PdO#YEb|NBfAVOF(md4CnDUiF zQkrBN?Ns3+=Z0cYz>O)4?)sw7w^a6$7l!-nyX3-cn1_tm>xiUR-TZ)cjF!Gp^t z`;rC+?O80K#{a`5}ZXHR&IuHi4rf9qB`a!o(kr#X{~9k+#l`s1nz z(FWQVsi>lAPug6?S8M!{IWB-{A&5E{oj;ZqQA^*NIh1bJLdW_ z@yg|qV`qnr_~y~2eswm#4Sc*jVr)~3O_Y~K-+)Wwaz@Py8R(=qwbgv(O6xYXZsXdM z7nU|Dj|i@Ypv1I-76z~B(Um1hZgZX1)a{Afv^H;9eD>C>(uq;kzF1s6$$j9KaW$ai z*L@e_hh`R@uQ(PzcJAB8ao1ZDS_ju{JaZvG3Evid_FE=X$%S?;t7|A4FjTbel{4gf zMK^{l(e0Rie?$KMAlmhfYwtMaT|2yrwLkgZ&)7w)5xdi~Ud5F9Pc|Bcy7-g?Elsa2 zy%{F%7pYon-Rlnd5P-&vpyNnPP* z^GEiSiMqsSR^};NarpQDQF3g3IiEbQ^;|f7$zEI|@60B!qB4-mJL=b!&4W5YocGBY zo~FYQi8K*M#JF53_0}5UXcQc?*ld{1agBw*A%Sa1m`$ZGgoNUHt$~o?dXU%>LMscy z$!G+mK8%FpMiQX=8p)|)BuH);qxb+4KP@1~Fw+L)IwAslz)=rVH6j!OpiZ%`Zh z;0EM^O@irRBtR+G!_g2Wb|@4J0}cj?We-w{duO@npcF|-sY;vJ#iCPsF-}V5-~`4x z0PpX1>CNE18W0jJ5yO~J*eRq*tIn%JT_B1s^gSDsnq8-^kZbQ#YTJ3}E!E?cVUQ^Q z2(KvdB%l(Z#0iGCRwXxC%m>%Y2&InH5-^|QVzP+o1Xxr_=t)tMlz@3INT9THjiD$K zp_G$J`e>MkQpWH7*A0WZR$ag7U*SVt)Bua}s|M6+r6v(vq4Cn_mEHR=Ljp+!5oLE^ zrY>hvLig~2qYx5C;_4YN9|H{LB$_Nn=?@`d zsj=rysn-L2dq60QgLrpDL`WbaLBfy-MDAqL1avi=4Pz|IQSVJ)+IQNZqwn=>dq9q! zmIFLH`Xq*OSVCcUM>K?f7HEgtp16PR)k3qJ?dz9>Fsmm|wi|3cBCASLO>-0s8WC7} z%9eBR((JDn=l=XWCMRASoidoW^yBoc;zF2M9&i=gL>HAhZ z7ks^08*L`XUG>rIs(9k&7(~s|^Ic01< z5MDe&vvck1?Lo<+A#Dj+d9;RQ^^1QYn$dG3Ey$PoM`cxyAGKAz-VwiW!?Oa^HFneu z&7sV`y7uf=8|`?>wtEllk2j^XjlG@muKi8Fl+80PUOWAhSIq*aJC*Wng7Mr8@VTj#boSQw8|0wZ|UrNiN>BQuK1V?v7`5If^RUYqlKJ0$iz>zG&&r-3Nf@>FNJZ=?mU%nB zrC*!1XV3cBrs88YeU8KD`Gf4;_V8&}Z^Revs?Ww=9E#Mz!d=I!58Znc6IFKSt9HB1 zuQD#LnS7bf$!Vz#$g%7jP?lIJ>>IH&I5%w8%{bOU-J|$HQ*>@SKUwx{0(Z3esUJ)C z%--rd{QAuf$BH6=STK4fCnoU&XA2rTB-!j3Wa&$mU@v6ddqkGVv#ND2yHldDJM%LN3j%u(D zH1+V_4c^qtdY0O*F898|M2Z8u%L|9)(p_HMJ&ii4ECnaw1Uylx@t{9HdV&rsNS~`J;r3Zz}(oO8YL!MWFnZ8UBm%Iezz7{Sp^zya^hmJ;Cbe2sijss`Og1Tf&k4S zRZFD67?Vc_ED5Pj2#Kdp~0|g(0mmuZKqzV@WE@OAyr0XGJudBcTxQh);09FFD2rq2n0Ox*SZ5Yb}H`AB7hriFijFyk+ zV7aVYOr3#HnG!-SLvR&NNu&op#()KU=6Qk@Pwi=-s5F#=+dE_4Tnq>@zO zLQ}eVsmP9nN=c=UKqb{AdeDswIj)czR3u#(>Jv6AP!z!g4(srMN-6AEm`IWL?7&J! z1&5aC;24I_?qV%W*2$)*a9xTNj&YohOEnA$;0}Ywmd-%NIQ@ySiI8I4&F(K;Zvug0 z0ipouE=58J{z%`)WAwiMg6YD8o=R0$u08%Vl$61>6b4FfJHKs1Me3!8jZaFivk61{D4?4CQk^phZy(%%8n! zQ9kPfT8#A}9+*GCRNb2v<8nWgg~k04kLCIy%$1rOd-G%Q*{SVdzGHw6> literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b6f22d24e506e53f13d51d62d70866319a0db8da GIT binary patch literal 4383 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 KU7dd{-1Z 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2bd2c1be21a3f63621e481790dc870f4e4ad45eb GIT binary patch literal 4257 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 JTz~#~{sG*K_z3_2 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1264080377eb1b94f2199de3429024301950909f GIT binary patch literal 4504 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..aefb16daf0d07d5675ee0ea43afbc6512ee1d36b GIT binary patch literal 3105 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1228907227ffa472da7946759592794e912b8a84 GIT binary patch literal 3138 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 literal 0 HcmV?d00001 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;