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.
This commit is contained in:
Jean-Paul Chaput 2014-09-21 16:44:37 +02:00
parent 2c345c9033
commit 1f9ae36554
48 changed files with 3608 additions and 204 deletions

View File

@ -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 ) )
)

View File

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

View File

@ -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 <coriolis> 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

View File

@ -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() )

View File

@ -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 )

View File

@ -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'):

View File

@ -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 )

View File

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

View File

@ -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'

View File

@ -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:`<center><img src="./images/RDS_VW.png" alt="RDS Variable Width Rule"></center>`
.. |RDS_LCW| replace:: :raw-html:`<center><img src="./images/RDS_LCW.png" alt="RDS Left Constant Width Rule"></center>`
.. Direct LaTeX commands encapsulation.
.. |dotfill| replace:: :raw-html:`&nbsp;&nbsp;`
.. |noindent| replace:: :raw-html:`<p class="empty"></p>`
.. |medskip| replace:: :raw-html:`<br>`
.. |newpage| replace:: :raw-html:`<br>`

View File

@ -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`

345
documentation/RDS/RDS.html Normal file
View File

@ -0,0 +1,345 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
<title></title>
<meta name="date" content="16, september 2014" />
<meta name="authors" content="Jean-Paul Chaput" />
<link rel="stylesheet" href="./SoC.css" type="text/css" />
</head>
<body>
<div class="document">
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr><th class="docinfo-name">Date:</th>
<td>16, september 2014</td></tr>
<tr><th class="docinfo-name">Authors:</th>
<td>Jean-Paul Chaput</td></tr>
<tr><th class="docinfo-name">Contact:</th>
<td>&lt;<a class="reference external" href="mailto:alliance-users&#64;soc.lip6.fr">alliance-users&#64;soc.lip6.fr</a>&gt;</td></tr>
<tr><th class="docinfo-name">Version:</th>
<td>0.1</td></tr>
</tbody>
</table>
<!-- -*- Mode: rst -*- -->
<!-- -*- Mode: rst -*- -->
<!-- URLs that changes between the various backends. -->
<!-- For HTML backend -->
<!-- Stand-alone images. -->
<!-- Direct LaTeX commands encapsulation. -->
<!-- -*- Mode: rst -*- -->
<!-- Acronyms & names. -->
<!-- Tools -->
<!-- RDS file syntax. -->
<p><span class="raw-html"><br></span></p>
<p><strong>Disclaimer:</strong> This document is still far from complete.</p>
<p><span class="raw-html"><br></span></p>
<div class="section" id="rds-file-format">
<h1><a class="toc-backref" href="#id1">RDS File Format</a></h1>
<div class="contents topic" id="contents">
<p class="topic-title first">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#rds-file-format" id="id1">RDS File Format</a><ul>
<li><a class="reference internal" href="#introduction" id="id2">Introduction</a></li>
<li><a class="reference internal" href="#physical-grid-lambda-value" id="id3">Physical Grid &amp; Lambda Value</a></li>
<li><a class="reference internal" href="#the-mbk-to-rds-segment-table" id="id4">The <tt class="docutils literal">MBK_TO_RDS_SEGMENT</tt> table</a></li>
<li><a class="reference internal" href="#the-mbk-to-rds-via-table" id="id5">The <tt class="docutils literal">MBK_TO_RDS_VIA</tt> table</a></li>
<li><a class="reference internal" href="#the-mbk-to-rds-bigvia-hole-table" id="id6">The <tt class="docutils literal">MBK_TO_RDS_BIGVIA_HOLE</tt> table</a></li>
<li><a class="reference internal" href="#the-mbk-to-rds-bigvia-metal-table" id="id7">The <tt class="docutils literal">MBK_TO_RDS_BIGVIA_METAL</tt> table</a></li>
<li><a class="reference internal" href="#the-mbk-wiresetting-table" id="id8">The <tt class="docutils literal">MBK_WIRESETTING</tt> table</a></li>
</ul>
</li>
</ul>
</div>
<p><span class="raw-html"><br></span></p>
<p><span class="raw-html"><br></span></p>
<div class="section" id="introduction">
<h2><a class="toc-backref" href="#id2">Introduction</a></h2>
<p>The RDS file control how a symbolic layout is transformed into it's real
conterpart.</p>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>Unit used inside the RDS file:</strong> all units are expressed in micrometers.</p>
</div>
<p>Alliance tools relying on the RDS file, and what layers are active for them:</p>
<table border="1" class="docutils">
<colgroup>
<col width="47%" />
<col width="16%" />
<col width="37%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Tool</th>
<th class="head">Name</th>
<th class="head">RDS Flags</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Layout editor</td>
<td><tt class="docutils literal">graal</tt></td>
<td><tt class="docutils literal">ALL</tt></td>
</tr>
<tr><td>Design Rule Checker</td>
<td><tt class="docutils literal">druc</tt></td>
<td><tt class="docutils literal">ALL</tt>, <tt class="docutils literal">DRC</tt></td>
</tr>
<tr><td>Electrical extractor</td>
<td><tt class="docutils literal">cougar</tt></td>
<td><tt class="docutils literal">ALL</tt>, <tt class="docutils literal">EXT</tt></td>
</tr>
<tr><td>The symbolic to real layout translator</td>
<td><tt class="docutils literal">s2r</tt></td>
<td><tt class="docutils literal">ALL</tt></td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="physical-grid-lambda-value">
<h2><a class="toc-backref" href="#id3">Physical Grid &amp; Lambda Value</a></h2>
<p>RDS file:</p>
<pre class="literal-block">
DEFINE PHYSICAL_GRID 0.005
DEFINE LAMBDA 0.09
</pre>
<p>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.</p>
<p>We can distinguish two kind of <span class="sc">rds</span> files:</p>
<ul class="simple">
<li>The <em>1µm</em> kind, odd segment widths and coordinates are allowed, but the <tt class="docutils literal">LAMBDA</tt>
value <strong>must</strong> represent an <em>even</em> number of foundry grid step.</li>
<li>The <em>2µm</em> kind, segments widths and coordinates must all be even. And in that case
the <tt class="docutils literal">LAMBDA</tt> value can be any multiple of the foundry grid.</li>
</ul>
</div>
<div class="section" id="the-mbk-to-rds-segment-table">
<h2><a class="toc-backref" href="#id4">The <tt class="docutils literal">MBK_TO_RDS_SEGMENT</tt> table</a></h2>
<p>The <tt class="docutils literal">MBK_TO_RDS_SEGMENT</tt> table control the way segments are translated into
real rectangles. Be aware that we are translating <em>segments</em> and not <em>rectangles</em>.
Segments are defined by their axis (source &amp; target points) and their width.
The geometrical transformations are described according to that model.
Obviously, they are either horizontal or vertical.</p>
<p>The translation method of a symbolic segment is as follow:</p>
<ol class="arabic">
<li><p class="first">The segment is translated into one or more physical rectangles.
The generated rectangles depends on the tool which is actually
using <span class="sc">rds</span> and the flag for the considered real layer.
For instance, real layers flagged with <tt class="docutils literal">DRC</tt> will be generated
for <tt class="docutils literal">s2r</tt> (for the <tt class="docutils literal">cif</tt> or <tt class="docutils literal">gds</tt>) and <tt class="docutils literal">druc</tt>, but will not
be shown under <tt class="docutils literal">graal</tt>.</p>
</li>
<li><p class="first">Translation into one real layer. <em>First</em> the source &amp; target coordinates and width
of the symbolic segment are multiplied by the <tt class="docutils literal">LAMBDA</tt> value to obtain a real
segment. <em>Then</em> one of the <tt class="docutils literal">VW</tt>, <tt class="docutils literal">LCW</tt> or <tt class="docutils literal">RCW</tt> transformation is applied to
that segment to get the final real rectangle.</p>
<ul>
<li><p class="first"><tt class="docutils literal">VW</tt> 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...</p>
<p><span class="raw-html"><center><img src="./images/RDS_VW.png" alt="RDS Variable Width Rule"></center></span></p>
</li>
<li><p class="first"><tt class="docutils literal">LCW</tt> or <tt class="docutils literal">RCW</tt> for Left/Right Constant Width, create an off-center rectangle
of fixed width relatively to the real segment. Note that the <tt class="docutils literal">SP</tt> number
is the distance <em>between the edge</em> of the real segment and the edge of the
generated real rectangle (<em>not</em> from the axis). It is often zero.</p>
<p><span class="raw-html"><center><img src="./images/RDS_LCW.png" alt="RDS Left Constant Width Rule"></center></span></p>
</li>
</ul>
</li>
</ol>
<p><span class="raw-html"><br></span></p>
<p>Examples:</p>
<pre class="literal-block">
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
</pre>
<p><span class="fboxtt">Case 1</span> the <tt class="docutils literal">ALU1</tt> is translated in exacltly one real rectangle of
<tt class="docutils literal">RDS_ALU1</tt>, both ends are extended by 0.18µm and it's width is increased
by 0.09µm.</p>
<p><span class="fboxtt">Case 2</span> the <tt class="docutils literal">NDIF</tt> will be translated into only one segment
under <tt class="docutils literal">graal</tt>, for symbolic visualization. And into three real rectangles
for <tt class="docutils literal">s2r</tt> and <tt class="docutils literal">druc</tt>.</p>
<p><span class="fboxtt">Case 3</span> the <tt class="docutils literal">NTRANS</tt>, associated to a transistor is a little bit
more complex, the generated shapes are different for the extractor <tt class="docutils literal">cougar</tt>
in one hand, and for both <tt class="docutils literal">druc</tt> &amp; <tt class="docutils literal">s2r</tt> in the other hand.</p>
<ul>
<li><p class="first">For the extractor (<tt class="docutils literal">EXT</tt> &amp; <tt class="docutils literal">ALL</tt> flags) there will be four rectangles
generateds:</p>
<ol class="arabic simple">
<li>The gate (<tt class="docutils literal">RDS_GATE</tt>)</li>
<li>The left diffusion of the transistor (source or drain) (<tt class="docutils literal">RDS_NDIF</tt>).</li>
<li>The right diffusion of the transistor (drain or source) (<tt class="docutils literal">RDS_NDIF</tt>).</li>
<li>The active area (<tt class="docutils literal">RDS_ACTIV</tt>).</li>
</ol>
<p>As the extractor must kept separate the source and the drain of the transistor,
they are generated as two offset rectangles, using the <tt class="docutils literal">LCW</tt> and <tt class="docutils literal">RCW</tt> directives.</p>
</li>
<li><p class="first">For <tt class="docutils literal">s2r</tt> and <tt class="docutils literal">druc</tt> (<tt class="docutils literal">DRC</tt> and <tt class="docutils literal">ALL</tt>), five rectangles are generateds:</p>
<ol class="arabic simple">
<li>The poly (<tt class="docutils literal">RDS_POLY</tt>).</li>
<li>The gate (<tt class="docutils literal">RDS_GATE</tt>).</li>
<li>The diffusion, as one rectangle that covers both the <tt class="docutils literal">LCW</tt> and the <tt class="docutils literal">RCW</tt> (<tt class="docutils literal">RDS_NDIF</tt>).</li>
<li>The active area (<tt class="docutils literal">RDS_ACTIV</tt>).</li>
<li>The N implantation (<tt class="docutils literal">RDS_NIMP</tt>).</li>
</ol>
<p>In the layout send to the foundry, the source &amp; drain are draw as one rectangle
across the gate area (the transistor being defined by the intersection of both
rectangles).</p>
</li>
</ul>
<p><span class="raw-html"><br></span></p>
</div>
<div class="section" id="the-mbk-to-rds-via-table">
<h2><a class="toc-backref" href="#id5">The <tt class="docutils literal">MBK_TO_RDS_VIA</tt> table</a></h2>
<p>This table is to translate <em>default</em> 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.</p>
<p>Note that although we are refering to VIAs, which for the purists are between two
metal layers, this table also describe <em>contacts</em>.</p>
<p>Example:</p>
<pre class="literal-block">
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
</pre>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>In CONT_DIF_P</strong> you may see that only three layers will be shown under
<tt class="docutils literal">graal</tt>, but five will be generated in the <tt class="docutils literal">gds</tt> layout.</p>
</div>
</div>
<div class="section" id="the-mbk-to-rds-bigvia-hole-table">
<h2><a class="toc-backref" href="#id6">The <tt class="docutils literal">MBK_TO_RDS_BIGVIA_HOLE</tt> table</a></h2>
<p>In <tt class="docutils literal">s2r</tt>, 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 <tt class="docutils literal">gds</tt> file, the holes may not be centerend
inside one individual BIGVIA.</p>
<p>The <tt class="docutils literal">MBK_TO_RDS_BIGVIA_HOLE</tt> 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).</p>
<p>Example:</p>
<pre class="literal-block">
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
</pre>
<p><span class="raw-html"><br></span></p>
</div>
<div class="section" id="the-mbk-to-rds-bigvia-metal-table">
<h2><a class="toc-backref" href="#id7">The <tt class="docutils literal">MBK_TO_RDS_BIGVIA_METAL</tt> table</a></h2>
<p>This table describe how the metal part of a BIGVIA is expanded (for the hole
part, see the previous table <tt class="docutils literal">MBK_TO_RDS_BIGVIA_HOLE</tt>). The rule give for each
metal:</p>
<ol class="arabic simple">
<li>The <em>delta-with</em> (have to ask Franck).</li>
<li>The <em>overhang</em>, the length the real rectangle is expanded on each side from
the symbolic rectange.</li>
</ol>
<p>Example:</p>
<pre class="literal-block">
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
</pre>
<p><span class="raw-html"><br></span></p>
</div>
<div class="section" id="the-mbk-wiresetting-table">
<h2><a class="toc-backref" href="#id8">The <tt class="docutils literal">MBK_WIRESETTING</tt> table</a></h2>
<p>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 (<tt class="docutils literal">ocp</tt>, <tt class="docutils literal">nero</tt>, <tt class="docutils literal">ring</tt>).</p>
<p>This table defines the cell gauge the routing pitch and minimal (symbolic)
wire width and minimal spacing for the routers. They are patly redundant.</p>
<p>Example:</p>
<pre class="literal-block">
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
</pre>
</div>
</div>
</div>
</body>
</html>

349
documentation/RDS/RDS.rst Normal file
View File

@ -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: <alliance-users@soc.lip6.fr>
: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

View File

@ -0,0 +1,5 @@
.. -*- Mode: rst -*-
.. include:: HTML_defs.rst
.. include:: RDS.rst

View File

@ -0,0 +1,4 @@
.. -*- Mode: rst -*-
.. include:: LaTeX_defs.rst
.. include:: RDS.rst

790
documentation/RDS/SoC.css Normal file
View File

@ -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;
*/
}

Binary file not shown.

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -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}

View File

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

View File

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

View File

@ -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;
}
}

View File

@ -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 <string>
#include <map>
#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

View File

@ -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 */
};

View File

@ -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();

View File

@ -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 ();

View File

@ -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 ();

View File

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

View File

@ -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 {

View File

@ -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;

View File

@ -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 <cki> 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;

View File

@ -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;

View File

@ -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;

View File

@ -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":"-" );

View File

@ -16,8 +16,9 @@
#include <climits>
#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 );

View File

@ -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;