Anlog integration part I. Atomic devices support (transistors).
* Change: In boostrap, remove support for Chams. * New: In Hurricane::Technology, added support for DTR rules, UnitRule, PhysicalRule and TwoLayersPhysicalrule. Added devices descriptors and models descriptors (for Spice). Spice description is not used yet but kept anyway in case of future use. * New: Hurricane::Analog whole library and it's Python interface. This provides support for transistors, capacitors and resistors. Only transistor support is fully implemented as of now. * New: In CRL/python/coriolisInit.py, read configuration files for the Analog extension (analog.conf & devices.conf). Thoses are optionals and a simple warning is issued if not found. Added helpers/AnalogTechno.py DTR loading helper. Add analog configuration files for 180/scn6m_deep_09. * New: Oroshi tool that provides actual layout drawing for transistors.
This commit is contained in:
parent
dc01b60d5c
commit
3f73b9d033
|
@ -11,6 +11,7 @@ GRTAGS
|
|||
.dir-locals.el
|
||||
.projectile
|
||||
|
||||
lefdef/src/lef/lef/lef.tab.h
|
||||
|
||||
man/
|
||||
rtf/
|
||||
|
|
|
@ -17,9 +17,6 @@ projects = [
|
|||
, "vlsisapd"
|
||||
, "hurricane"
|
||||
, "crlcore"
|
||||
#, "nimbus"
|
||||
#, "metis"
|
||||
#, "mauka"
|
||||
, "anabatic"
|
||||
, "katana"
|
||||
, "knik"
|
||||
|
@ -29,6 +26,7 @@ projects = [
|
|||
, "etesian"
|
||||
, "equinox"
|
||||
, "solstice"
|
||||
, "oroshi"
|
||||
, "unicorn"
|
||||
, "tutorial"
|
||||
#, "testbench"
|
||||
|
@ -38,21 +36,6 @@ projects = [
|
|||
, "documentation"
|
||||
]
|
||||
, 'repository': 'ssh://asim-t/users/largo2/git/coriolis.git' }
|
||||
|
||||
, { 'name' : "chams"
|
||||
, 'tools' : [ "hurricaneAMS"
|
||||
, "amsCore"
|
||||
, "opSim"
|
||||
#, "scribe"
|
||||
, "graph"
|
||||
, "pharos"
|
||||
, "isis"
|
||||
, "horus"
|
||||
#, "schematic"
|
||||
, "solver"
|
||||
, "autoDTR"
|
||||
]
|
||||
, 'repository':"ssh://melon-t/users/outil/chams/chams.git" }
|
||||
]
|
||||
|
||||
package = { 'name' : 'coriolis2'
|
||||
|
|
|
@ -159,12 +159,8 @@ def autoLocate ():
|
|||
locations = [ os.path.abspath(os.path.dirname(sys.argv[0]))
|
||||
, os.environ['HOME']+'/coriolis-2.x/src/coriolis/bootstrap'
|
||||
, os.environ['HOME']+'/coriolis/src/coriolis/bootstrap'
|
||||
, os.environ['HOME']+'/chams-1.x/src/coriolis/bootstrap'
|
||||
, os.environ['HOME']+'/chams/src/coriolis/bootstrap'
|
||||
, '/users/outil/coriolis/coriolis-2.x/src/coriolis/bootstrap'
|
||||
, os.environ['HOME']+'/coriolis-2.x/'+osType+'/Release.Shared/install/'+libDir+'/'+sitePackage
|
||||
, os.environ['HOME']+'/chams-1.x/'+osType+'/Release.Shared/install/'+libDir+'/'+sitePackage
|
||||
, os.environ['HOME']+'/chams/'+osType+'/Release.Shared/install/'+libDir+'/'+sitePackage
|
||||
, '/users/outil/coriolis/coriolis-2.x/'+osType+'/Release.Shared/install/'+libDir+'/'+sitePackage
|
||||
]
|
||||
|
||||
|
|
|
@ -185,7 +185,6 @@ if __name__ == "__main__":
|
|||
parser.add_option ( "--devel" , action="store_true" , dest="devel" )
|
||||
parser.add_option ( "--static" , action="store_true" , dest="static" )
|
||||
parser.add_option ( "--shared" , action="store_true" , dest="shared" )
|
||||
parser.add_option ( "--chams" , action="store_true" , dest="chams" )
|
||||
parser.add_option ( "--no-python" , action="store_true" , dest="nopython" )
|
||||
parser.add_option ( "--root" , action="store" , type="string", dest="rootDir" )
|
||||
( options, args ) = parser.parse_args ()
|
||||
|
|
|
@ -220,7 +220,7 @@ class Configuration ( object ):
|
|||
|
||||
PrimaryNames = \
|
||||
[ 'sender' , 'receivers'
|
||||
, 'coriolisRepo', 'chamsRepo' , 'benchsRepo', 'supportRepos'
|
||||
, 'coriolisRepo', 'benchsRepo', 'supportRepos'
|
||||
, 'homeDir' , 'masterHost'
|
||||
, 'debugArg' , 'nightlyMode'
|
||||
, 'rmSource' , 'rmBuild', 'doGit', 'doBuild', 'doBenchs', 'doSendReport'
|
||||
|
@ -235,7 +235,6 @@ class Configuration ( object ):
|
|||
self._receivers = [ 'Jean-Paul.Chaput@lip6.fr', 'Eric.Lao@lip6.fr' ]
|
||||
self._supportRepos = [ 'http://github.com/miloyip/rapidjson' ]
|
||||
self._coriolisRepo = 'https://www-soc.lip6.fr/git/coriolis.git'
|
||||
self._chamsRepo = 'file:///users/outil/chams/chams.git'
|
||||
self._benchsRepo = 'https://www-soc.lip6.fr/git/alliance-check-toolkit.git'
|
||||
self._homeDir = os.environ['HOME']
|
||||
self._debugArg = ''
|
||||
|
@ -458,7 +457,6 @@ try:
|
|||
for supportRepo in conf.supportRepos:
|
||||
gitSupports.append( GitRepository( supportRepo, conf.srcDir+'/support' ) )
|
||||
gitCoriolis = GitRepository( conf.coriolisRepo, conf.srcDir, conf.fds['build'] )
|
||||
gitChams = GitRepository( conf.chamsRepo , conf.srcDir, conf.fds['build'] )
|
||||
gitBenchs = GitRepository( conf.benchsRepo , conf.srcDir, conf.fds['build'] )
|
||||
|
||||
if conf.doGit:
|
||||
|
@ -492,7 +490,7 @@ try:
|
|||
, ' <%s>' % ccbBin
|
||||
] )
|
||||
|
||||
buildCommand = '%s --root=%s --project=support --project=coriolis --project=chams --make="-j%%d install" %%s' \
|
||||
buildCommand = '%s --root=%s --project=support --project=coriolis --make="-j%%d install" %%s' \
|
||||
% (ccbBin,conf.rootDir)
|
||||
benchsCommand = 'cd %s/benchs && ./bin/go.sh clean && ./bin/go.sh lvx' \
|
||||
% (gitBenchs.localRepoDir)
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -301,7 +301,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -159,7 +159,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -265,7 +265,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -563,7 +563,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -267,7 +267,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -174,7 +174,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -231,7 +231,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -401,7 +401,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -189,7 +189,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -166,7 +166,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -127,7 +127,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -125,7 +125,7 @@ Static Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -873,7 +873,7 @@ Static Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -175,7 +175,7 @@ Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -474,7 +474,7 @@ Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -284,7 +284,7 @@ Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -733,7 +733,7 @@ Static Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -813,7 +813,7 @@ Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -104,7 +104,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -1075,7 +1075,7 @@ Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -131,7 +131,7 @@ Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -76,7 +76,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -428,7 +428,7 @@ Static Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -683,7 +683,7 @@ Static Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -438,7 +438,7 @@ Static Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -190,7 +190,7 @@ Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -198,7 +198,7 @@ Static Public Member Functions</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -55,7 +55,7 @@ Directories</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -55,7 +55,7 @@ Directories</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -77,7 +77,7 @@ Files</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -109,7 +109,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -105,7 +105,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -99,7 +99,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -298,7 +298,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -137,7 +137,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -88,7 +88,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -191,7 +191,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -88,7 +88,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -627,7 +627,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -158,7 +158,7 @@ Typedefs</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -157,7 +157,7 @@ Enumerations</h2></td></tr>
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -99,7 +99,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Sat Aug 18 2018</small></td>
|
||||
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
\vspace*{1cm}
|
||||
{\large Generated by Doxygen 1.8.5}\\
|
||||
\vspace*{0.5cm}
|
||||
{\small Sat Aug 18 2018 22:39:38}\\
|
||||
{\small Mon Oct 1 2018 14:29:07}\\
|
||||
\end{center}
|
||||
\end{titlepage}
|
||||
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
# -*- Mode:Python; explicit-buffer-name: "analog.conf<scn6m_deep_09>" -*-
|
||||
|
||||
import helpers
|
||||
|
||||
|
||||
execfile( helpers.ndaConfDir+'/common/analog.conf' )
|
|
@ -0,0 +1,6 @@
|
|||
# -*- Mode:Python; explicit-buffer-name: "devices.conf<hcmos9gp>" -*-
|
||||
|
||||
import helpers
|
||||
|
||||
|
||||
execfile( helpers.ndaConfDir+'/common/devices.conf' )
|
|
@ -0,0 +1,164 @@
|
|||
|
||||
# Name: dtr_scn6m_deep_09.py -- mosis scalable CMOS SCN6M_DEEP General Purpose with MIM capacitor
|
||||
# Unit: micro
|
||||
# version: rev.LIP6-1
|
||||
#
|
||||
# The MOSIS Scalable (SCMOS) design rules can be found here:
|
||||
# https://www.mosis.com/files/scmos/scmos.pdf
|
||||
#
|
||||
# Used revision 8.00 of May 11, 2009.
|
||||
|
||||
from Hurricane import DbU
|
||||
from helpers.AnalogTechno import Length
|
||||
from helpers.AnalogTechno import Area
|
||||
from helpers.AnalogTechno import Asymmetric
|
||||
|
||||
|
||||
analogTechnologyTable = \
|
||||
( ('Header', 'scmos6m_deep_09', DbU.UnitPowerMicro, 'rev.LIP6-1')
|
||||
# ------------------------------------------------------------------------------------
|
||||
# ( Rule name , [Layer1] , [Layer2] , Value, Rule flags , Reference )
|
||||
, ('physicalGrid' , 0.09 , Length , 'N/A')
|
||||
, ('transistorMinL' , 0.18 , Length , '2l rule 3.1 p.26')
|
||||
, ('transistorMaxL' , 18 , Length , '200l arbitrary')
|
||||
, ('transistorMinW' , 0.27 , Length , '3l arbitrary')
|
||||
, ('transistorMaxW' , 270 , Length , '300l arbitrary')
|
||||
|
||||
, ('minWidth' , 'nWell' , 1.08 , Length , '12l rule 1.1 p.16')
|
||||
, ('minSpacing' , 'nWell' , 1.62 , Length , '18l rule 1.2 p.16')
|
||||
, ('minArea' , 'nWell' , 0 , Area , 'N/A')
|
||||
, ('minWidth' , 'active' , 0.27 , Length , '3l rule 2.1 p.19')
|
||||
, ('minSpacing' , 'active' , 0.27 , Length , '3l rule 2.2 p.19')
|
||||
, ('minArea' , 'active' , 0 , Area , 'N/A')
|
||||
, ('minEnclosure' , 'nWell' , 'active' , 0.54 , Length|Asymmetric, 'rule X.Y, p.Z')
|
||||
, ('minEnclosure' , 'nImplant', 'nWell' , 0 , Length|Asymmetric, 'rule X.Y, p.Z')
|
||||
, ('minWidth' , 'poly' , 0.18 , Length , '2l rule 3.1 p.26')
|
||||
, ('minSpacing' , 'poly' , 0.27 , Length , '3l rule 3.2 p.26')
|
||||
, ('minGateSpacing' , 'poly' , 0.36 , Length , '4l rule 3.2.a p.26')
|
||||
, ('minArea' , 'poly' , 0 , Area , 'N/A')
|
||||
, ('minGateExtension' , 'poly' , 'active' , 0.225, Length|Asymmetric, '2.5l rule 3.3 p.26')
|
||||
, ('minGateExtension' , 'active' , 'poly' , 0.225, Length|Asymmetric, 'N/A')
|
||||
, ('minExtension' , 'poly' , 'active' , 0.225, Length|Asymmetric, 'N/A')
|
||||
, ('minExtension' , 'active' , 'poly' , 0.36 , Length|Asymmetric, '4l rule 3.4 p.26')
|
||||
, ('minSpacing' , 'poly' , 'active' , 0.09 , Length , '1l rule 3.5 p.26')
|
||||
|
||||
, ('minGateSpacing' , 'nImplant', 'poly' , 0.27 , Length , '3l rule 4.1 N+ p.29')
|
||||
, ('minEnclosure' , 'nImplant', 'active' , 0.18 , Length|Asymmetric, '2l rule 4.2 N+ p.29')
|
||||
, ('minExtension' , 'nImplant', 'active' , 0.18 , Length|Asymmetric, 'dup. 4.2 N+' )
|
||||
, ('minEnclosure' , 'nImplant', 'cut0' , 0.135, Length|Asymmetric, '1.5l rule 4.3 N+ p.29')
|
||||
, ('minExtension' , 'nImplant', 'cut0' , 0.135, Length|Asymmetric, 'dup. 4.3 N+' )
|
||||
, ('minWidth' , 'nImplant' , 0.36 , Length , '4l rule 4.4 N+ p.29')
|
||||
, ('minSpacing' , 'nImplant' , 0.36 , Length , '4l rule 4.4 N+ p.29')
|
||||
, ('minArea' , 'nImplant' , 0 , Area , 'N/A')
|
||||
, ('minSpacing' , 'nImplant', 'active' , 0 , Length , 'N/A')
|
||||
, ('minEnclosure' , 'nImplant', 'poly' , 0 , Length|Asymmetric, 'N/A')
|
||||
, ('minLengthEnclosure', 'nImplant', 'active' , 0 , Length|Asymmetric, 'N/A')
|
||||
, ('minWidthEnclosure' , 'nImplant', 'poly' , 0 , Length|Asymmetric, 'N/A')
|
||||
, ('minGateEnclosure' , 'nImplant', 'poly' , 0 , Length|Asymmetric, 'N/A')
|
||||
, ('minStrapEnclosure' , 'nImplant' , 0.135, Length , 'N/A')
|
||||
, ('minSpacing' , 'nImplant', 'pImplant', 0 , Length , 'N/A')
|
||||
|
||||
, ('minGateSpacing' , 'pImplant', 'poly' , 0.27 , Length , '3l rule 4.1 P+ p.29')
|
||||
, ('minEnclosure' , 'pImplant', 'active' , 0.18 , Length|Asymmetric, '2l rule 4.2 P+ p.29')
|
||||
, ('minExtension' , 'pImplant', 'active' , 0.18 , Length|Asymmetric, 'dup. 4.2 P+' )
|
||||
, ('minEnclosure' , 'pImplant', 'cut0' , 0.135, Length|Asymmetric, '1.5l rule 4.3 P+ p.29')
|
||||
, ('minExtension' , 'pImplant', 'cut0' , 0.135, Length|Asymmetric, 'dup. 4.3 P-' )
|
||||
, ('minWidth' , 'pImplant' , 0.36 , Length , '4l rule 4.4 P+ p.29')
|
||||
, ('minSpacing' , 'pImplant' , 0.36 , Length , '4l rule 4.4 P+ p.29')
|
||||
, ('minArea' , 'pImplant' , 0 , Area , 'N/A')
|
||||
, ('minSpacing' , 'pImplant', 'active' , 0 , Length , 'N/A')
|
||||
, ('minEnclosure' , 'pImplant', 'poly' , 0 , Length|Asymmetric, 'N/A')
|
||||
, ('minLengthEnclosure', 'pImplant', 'active' , 0 , Length|Asymmetric, 'N/A')
|
||||
, ('minWidthEnclosure' , 'pImplant', 'poly' , 0 , Length|Asymmetric, 'N/A')
|
||||
, ('minGateEnclosure' , 'pImplant', 'poly' , 0 , Length|Asymmetric, 'N/A')
|
||||
, ('minStrapEnclosure' , 'pImplant' , 0.135, Length , 'N/A')
|
||||
|
||||
, ('minWidth' , 'cut0' , 0.18 , Length , '2l rule 5.1 p.35')
|
||||
, ('minEnclosure' , 'poly' , 'cut0' , 0.135, Length|Asymmetric, '1.5l rule 5.2 p.35')
|
||||
, ('minExtension' , 'poly' , 'cut0' , 0.135, Length|Asymmetric, 'dup. 5.2' )
|
||||
, ('minSpacing' , 'cut0' , 0.36 , Length , '4l rule 5.3 p.35')
|
||||
, ('minGateSpacing' , 'cut0' , 'poly' , 0.18 , Length|Asymmetric, '2l rule 5.4 p.35')
|
||||
, ('minSpacing' , 'cut0' , 'poly' , 0.18 , Length , 'dup. 5.4' )
|
||||
, ('minSpacing' , 'cut0' , 'active' , 0.18 , Length , 'dup. 5.4' )
|
||||
# Rule 6.1, 6.3 & 6.4 are the same as 5.1, 5.3 & 5.4.
|
||||
, ('minEnclosure' , 'active' , 'cut0' , 0.135, Length|Asymmetric, '1.5l rule 6.2 p.37')
|
||||
|
||||
, ('minWidth' , 'metal1' , 0.27 , Length , '3l rule 7.1 p.39')
|
||||
, ('minSpacing' , 'metal1' , 0.27 , Length , '3l rule 7.2 p.39')
|
||||
, ('minArea' , 'metal1' , 0 , Area , 'N/A')
|
||||
, ('minEnclosure' , 'metal1' , 'cut0' , 0.09 , Length|Asymmetric, '1l rule 7.3 p.39')
|
||||
, ('minExtension' , 'metal1' , 'cut0' , 0.09 , Length|Asymmetric, 'dup. 7.3' )
|
||||
|
||||
, ('minWidth' , 'cut1' , 0.27 , Length , '3l rule 8.1 p.40')
|
||||
, ('minSpacing' , 'cut1' , 0.27 , Length , '3l rule 8.2 p.40')
|
||||
, ('minEnclosure' , 'metal1' , 'cut1' , 0.09 , Length|Asymmetric, '1l rule 8.3 p.40')
|
||||
, ('lineExtension' , 'metal1' , 'cut1' , 0.09 , Length|Asymmetric, 'N/A')
|
||||
|
||||
, ('minWidth' , 'metal2' , 0.27 , Length , '3l rule 9.1 p.41')
|
||||
, ('minSpacing' , 'metal2' , 0.36 , Length , '4l rule 9.2 p.41')
|
||||
, ('minArea' , 'metal2' , 0 , Area , 'N/A')
|
||||
, ('minExtension' , 'metal2' , 'cut1' , 0.09 , Length|Asymmetric, '1l rule 9.3 p.41')
|
||||
, ('minEnclosure' , 'metal2' , 'cut1' , 0.09 , Length|Asymmetric, 'dup. 9.3' )
|
||||
|
||||
, ('minWidth' , 'cut2' , 0.27 , Length , '3l rule 14.1 p.42')
|
||||
, ('minSpacing' , 'cut2' , 0.27 , Length , '3l rule 14.2 p.42')
|
||||
, ('minEnclosure' , 'metal2' , 'cut2' , 0.09 , Length|Asymmetric, '1l rule 14.3 p.42')
|
||||
|
||||
, ('minWidth' , 'metal3' , 0.27 , Length , '3l rule 15.1 p.43')
|
||||
, ('minSpacing' , 'metal3' , 0.36 , Length , '4l rule 15.2 p.43')
|
||||
, ('minArea' , 'metal3' , 0 , Area , 'N/A')
|
||||
, ('minExtension' , 'metal3' , 'cut2' , 0.09 , Length|Asymmetric, '1l rule 15.3 p.43')
|
||||
, ('minEnclosure' , 'metal3' , 'cut2' , 0.09 , Length|Asymmetric, 'dup. 15.3' )
|
||||
|
||||
, ('minWidth' , 'cut3' , 0.27 , Length , '3l rule 21.1 p.44')
|
||||
, ('minSpacing' , 'cut3' , 0.27 , Length , '3l rule 21.2 p.44')
|
||||
, ('minEnclosure' , 'metal3' , 'cut3' , 0.09 , Length|Asymmetric, '1l rule 21.3 p.44')
|
||||
|
||||
, ('minWidth' , 'metal4' , 0.27 , Length , '3l rule 22.1 p.45')
|
||||
, ('minSpacing' , 'metal4' , 0.36 , Length , '4l rule 22.2 p.45')
|
||||
, ('minArea' , 'metal4' , 0 , Area , 'N/A')
|
||||
, ('minExtension' , 'metal4' , 'cut3' , 0.09 , Length|Asymmetric, '1l rule 22.3 p.45')
|
||||
, ('minEnclosure' , 'metal4' , 'cut3' , 0.09 , Length|Asymmetric, 'dup. 22.3' )
|
||||
|
||||
, ('minWidth' , 'cut4' , 0.27 , Length , '3l rule 25.1 p.49')
|
||||
, ('minSpacing' , 'cut4' , 0.27 , Length , '3l rule 25.2 p.49')
|
||||
, ('minEnclosure' , 'metal4' , 'cut4' , 0.09 , Length|Asymmetric, '1l rule 25.3 p.49')
|
||||
|
||||
, ('minWidth' , 'metal5' , 0.27 , Length , '3l rule 26.1 p.50')
|
||||
, ('minSpacing' , 'metal5' , 0.36 , Length , '4l rule 26.2 p.50')
|
||||
, ('minArea' , 'metal5' , 0 , Area , 'N/A')
|
||||
, ('minExtension' , 'metal5' , 'cut4' , 0.09 , Length|Asymmetric, '1l rule 26.3 p.50')
|
||||
, ('minEnclosure' , 'metal5' , 'cut4' , 0.09 , Length|Asymmetric, 'dup. 26.3' )
|
||||
|
||||
, ('minWidth' , 'cut5' , 0.36 , Length , '4l rule 29.1 p.51')
|
||||
, ('minSpacing' , 'cut5' , 0.36 , Length , '4l rule 29.2 p.51')
|
||||
, ('minEnclosure' , 'metal5' , 'cut5' , 0.09 , Length|Asymmetric, '1l rule 29.3 p.51')
|
||||
|
||||
, ('minWidth' , 'metal6' , 0.45 , Length , '5l rule 30.1 p.52')
|
||||
, ('minSpacing' , 'metal6' , 0.45 , Length , '5l rule 30.2 p.52')
|
||||
, ('minArea' , 'metal6' , 0 , Area , 'N/A')
|
||||
, ('minExtension' , 'metal6' , 'cut5' , 0.18 , Length|Asymmetric, '2l rule 30.3 p.52')
|
||||
, ('minEnclosure' , 'metal6' , 'cut5' , 0.18 , Length|Asymmetric, 'dup. 30.3' )
|
||||
|
||||
# MIM Rules (Metal In Metal Capacitor).
|
||||
# In SCN6M_DEEP metbot is metal5 and metcap is *below* metal6.
|
||||
# metbot can be accessed with cut4 (down) and via5 (up).
|
||||
# metcap can only be accessed *from* up with cut5.
|
||||
, ('minWidth' , 'metcap' , 4.05 , Length , '45l rule 28.1 p.46')
|
||||
, ('minWidth' , 'metcapdum' , 0.45 , Length , '9l rule 28.8 p.47')
|
||||
, ('maxWidth' , 'metcap' , 30.0 , Length , '30um rule 28.12 p.47')
|
||||
, ('maxWidth' , 'metbot' , 35.0 , Length , '35um rule 28.13 p.47')
|
||||
, ('minSpacing' , 'metcap' , 1.26 , Length , '14l rule 28.2 p.46')
|
||||
, ('minSpacing' , 'metbot' , 0.81 , Length , '9l rule 28.9 p.47')
|
||||
, ('minSpacing' , 'cut4' , 'metcap' , 0.45 , Length , '5l rule 28.5 D p.46')
|
||||
, ('minSpacing' , 'cut5' , 'metcap' , 0.45 , Length , '5l rule 28.5 U p.46')
|
||||
, ('minSpacingOnMetbot', 'cut5' , 4.05 , Length , '45l rule 28.11 p.47')
|
||||
, ('minSpacingOnMetcap', 'cut5' , 2.07 , Length , '23l rule 28.10 p.47')
|
||||
, ('minEnclosure' , 'metbot' , 'metcap' , 0.45 , Length|Asymmetric, '5l rule 28.3 p.46')
|
||||
, ('minEnclosure' , 'metbot' , 'cut4' , 0.18 , Length|Asymmetric, '2l rule 28.6 D p.46')
|
||||
, ('minEnclosure' , 'metbot' , 'cut5' , 0.18 , Length|Asymmetric, '2l rule 28.6 U p.46')
|
||||
, ('minEnclosure' , 'metcap' , 'cut5' , 0.27 , Length|Asymmetric, '3l rule 28.4 p.46')
|
||||
, ('minArea' , 'metcap' , 0 , Area , 'N/A')
|
||||
, ('minAreaInMetcap' , 'cut5' , 0 , Area , 'N/A')
|
||||
)
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
# -*- Mode:Python; explicit-buffer-name: "analog.conf<common>" -*-
|
||||
|
||||
import helpers
|
||||
|
||||
|
||||
parametersTable = \
|
||||
( ('analog.techno' , TypeString, 'Analog_technology_is_disabled',
|
||||
{ 'flags':Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist } )
|
||||
, ('analog.devices', TypeString, helpers.technoDir+'/devices.conf' )
|
||||
)
|
|
@ -0,0 +1,10 @@
|
|||
# -*- Mode:Python; explicit-buffer-name: "analog.conf<common>" -*-
|
||||
|
||||
import helpers
|
||||
|
||||
|
||||
parametersTable = \
|
||||
( ('analog.techno' , TypeString, 'Analog_technology_has_not_been_set',
|
||||
{ 'flags':Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist } )
|
||||
, ('analog.devices', TypeString, helpers.technoDir+'/devices.conf' )
|
||||
)
|
|
@ -0,0 +1,117 @@
|
|||
# -*- Mode:Python; explicit-buffer-name: "devices.conf<common>" -*-
|
||||
|
||||
import helpers
|
||||
|
||||
|
||||
analogDir = helpers.sysConfDir + '/share/coriolis2/analog'
|
||||
spiceDir = analogDir + 'spice/'
|
||||
|
||||
|
||||
devicesTable = \
|
||||
( { 'name' : 'DifferentialPairBulkConnected'
|
||||
, 'spice' : spiceDir+'DiffPairBulkConnected.spi'
|
||||
, 'connectors' : ( 'D1', 'D2', 'G1', 'G2', 'S' )
|
||||
, 'layouts' : ( ('Horizontal M2' , 'DP_horizontalM2.py' )
|
||||
, ('Symmetrical' , 'DP_symmetrical.py' )
|
||||
, ('Common centroid', 'DP_2DCommonCentroid.py')
|
||||
, ('Interdigitated' , 'DP_interdigitated.py' )
|
||||
, ('WIP DP' , 'WIP_DP.py' )
|
||||
)
|
||||
}
|
||||
, { 'name' : 'DifferentialPairBulkUnconnected'
|
||||
, 'spice' : spiceDir+'DiffPairBulkUnconnected.spi'
|
||||
, 'connectors' : ( 'D1', 'D2', 'G1', 'G2', 'S', 'B' )
|
||||
, 'layouts' : ( ('Horizontal M2' , 'DP_horizontalM2.py' )
|
||||
, ('Symmetrical' , 'DP_symmetrical.py' )
|
||||
, ('Common centroid', 'DP_2DCommonCentroid.py')
|
||||
, ('Interdigitated' , 'DP_interdigitated.py' )
|
||||
, ('WIP DP' , 'WIP_DP.py' )
|
||||
)
|
||||
}
|
||||
, { 'name' : 'LevelShifterBulkUnconnected'
|
||||
, 'spice' : spiceDir+'LevelShifterBulkUnconnected.spi'
|
||||
, 'connectors' : ( 'D1', 'D2', 'S1', 'S2', 'B' )
|
||||
, 'layouts' : ( ('Horizontal M2' , 'LS_horizontalM2.py' )
|
||||
, ('Symmetrical' , 'LS_symmetrical.py' )
|
||||
, ('Common centroid', 'LS_2DCommonCentroid.py')
|
||||
, ('Interdigitated' , 'LS_interdigitated.py' )
|
||||
)
|
||||
}
|
||||
, { 'name' : 'TransistorBulkConnected'
|
||||
, 'spice' : spiceDir+'TransistorBulkConnected.spi'
|
||||
, 'connectors' : ( 'D', 'G', 'S' )
|
||||
, 'layouts' : ( ('Rotate transistor', 'Transistor_rotate.py' )
|
||||
, ('Common transistor', 'Transistor_common.py' )
|
||||
, ('WIP Transistor' , 'WIP_Transistor.py' )
|
||||
)
|
||||
}
|
||||
, { 'name' : 'TransistorBulkUnconnected'
|
||||
, 'spice' : spiceDir+'TransistorBulkUnconnected.spi'
|
||||
, 'connectors' : ( 'D', 'G', 'S', 'B' )
|
||||
, 'layouts' : ( ('Rotate transistor', 'Transistor_rotate.py' )
|
||||
, ('Common transistor', 'Transistor_common.py' )
|
||||
, ('WIP Transistor' , 'WIP_Transistor.py' )
|
||||
)
|
||||
}
|
||||
, { 'name' : 'CrossCoupledPairBulkConnected'
|
||||
, 'spice' : spiceDir+'CCPairBulkConnected.spi'
|
||||
, 'connectors' : ( 'D1', 'D2', 'S' )
|
||||
, 'layouts' : ( ('Horizontal M2' , 'CCP_horizontalM2.py' )
|
||||
, ('Symmetrical' , 'CCP_symmetrical.py' )
|
||||
, ('Common centroid', 'CCP_2DCommonCentroid.py')
|
||||
, ('Interdigitated' , 'CCP_interdigitated.py' )
|
||||
)
|
||||
}
|
||||
, { 'name' : 'CrossCoupledPairBulkUnconnected'
|
||||
, 'spice' : spiceDir+'CCPairBulkUnconnected.spi'
|
||||
, 'connectors' : ( 'D1', 'D2', 'S', 'B' )
|
||||
, 'layouts' : ( ('Horizontal M2' , 'CCP_horizontalM2.py' )
|
||||
, ('Symmetrical' , 'CCP_symmetrical.py' )
|
||||
, ('Common centroid', 'CCP_2DCommonCentroid.py')
|
||||
, ('Interdigitated' , 'CCP_interdigitated.py' )
|
||||
)
|
||||
}
|
||||
, { 'name' : 'CommonSourcePairBulkConnected'
|
||||
, 'spice' : spiceDir+'CommonSourcePairBulkConnected.spi'
|
||||
, 'connectors' : ( 'D1', 'D2', 'S', 'G' )
|
||||
, 'layouts' : ( ('Horizontal M2' , 'CSP_horizontalM2.py' )
|
||||
, ('Symmetrical' , 'CSP_symmetrical.py' )
|
||||
, ('Interdigitated' , 'CSP_interdigitated.py' )
|
||||
, ('WIP CSP' , 'WIP_CSP.py' )
|
||||
)
|
||||
}
|
||||
, { 'name' : 'CommonSourcePairBulkUnconnected'
|
||||
, 'spice' : spiceDir+'CommonSourcePairBulkUnconnected.spi'
|
||||
, 'connectors' : ( 'D1', 'D2', 'S', 'G', 'B' )
|
||||
, 'layouts' : ( ('Horizontal M2' , 'CSP_horizontalM2.py' )
|
||||
, ('Symmetrical' , 'CSP_symmetrical.py' )
|
||||
, ('Interdigitated' , 'CSP_interdigitated.py' )
|
||||
, ('WIP CSP' , 'WIP_CSP.py' )
|
||||
)
|
||||
}
|
||||
, { 'name' : 'SimpleCurrentMirrorBulkConnected'
|
||||
, 'spice' : spiceDir+'CurrMirBulkConnected.spi'
|
||||
, 'connectors' : ( 'D1', 'D2', 'S' )
|
||||
, 'layouts' : ( ('Horizontal M2' , 'SCM_horizontalM2.py' )
|
||||
, ('Symmetrical' , 'SCM_symmetrical.py' )
|
||||
, ('Common centroid', 'SCM_2DCommonCentroid.py')
|
||||
, ('Interdigitated' , 'SCM_interdigitated.py' )
|
||||
)
|
||||
}
|
||||
, { 'name' : 'SimpleCurrentMirrorBulkUnconnected'
|
||||
, 'spice' : spiceDir+'CurrMirBulkUnconnected.spi'
|
||||
, 'connectors' : ( 'D1', 'D2', 'S', 'B' )
|
||||
, 'layouts' : ( ('Horizontal M2' , 'SCM_horizontalM2.py' )
|
||||
, ('Symmetrical' , 'SCM_symmetrical.py' )
|
||||
, ('Common centroid', 'SCM_2DCommonCentroid.py')
|
||||
, ('Interdigitated' , 'SCM_interdigitated.py' )
|
||||
)
|
||||
}
|
||||
, { 'name' : 'MIMCapacitor'
|
||||
, 'spice' : spiceDir+'MIMCapacitor.spi'
|
||||
, 'connectors' : ( 'P1', 'P2' )
|
||||
, 'layouts' : ( ('SimpleMatrix' , 'MIM_simpleMatrix.py' )
|
||||
,
|
||||
)
|
||||
}
|
||||
)
|
|
@ -0,0 +1,10 @@
|
|||
# -*- Mode:Python; explicit-buffer-name: "analog.conf<common>" -*-
|
||||
|
||||
import helpers
|
||||
|
||||
|
||||
parametersTable = \
|
||||
( ('analog.techno' , TypeString, 'Analog_technology_is_disabled',
|
||||
{ 'flags':Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist } )
|
||||
, ('analog.devices', TypeString, helpers.technoDir+'/devices.conf' )
|
||||
)
|
|
@ -7,3 +7,5 @@
|
|||
install( FILES helpers/Patterns.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers )
|
||||
install( FILES helpers/Technology.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers )
|
||||
install( FILES helpers/Debug.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers )
|
||||
install( FILES helpers/Devices.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers )
|
||||
install( FILES helpers/AnalogTechno.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers )
|
||||
|
|
|
@ -13,6 +13,7 @@ try:
|
|||
from helpers import Configuration
|
||||
from helpers import ErrorMessage
|
||||
from helpers import WarningMessage
|
||||
#from helpers import Devices
|
||||
from helpers.Configuration import TypeBool
|
||||
from helpers.Configuration import TypeInt
|
||||
from helpers.Configuration import TypeEnumerate
|
||||
|
@ -33,6 +34,8 @@ try:
|
|||
from helpers.Display import Drawing
|
||||
from helpers import Alliance
|
||||
from helpers import Technology
|
||||
from helpers import AnalogTechno
|
||||
from helpers import Devices
|
||||
import helpers.Display
|
||||
except ImportError, e:
|
||||
serror = str(e)
|
||||
|
@ -106,11 +109,12 @@ def coriolisConfigure():
|
|||
, (helpers.technoDir+'/kite.conf' , SystemFile|ConfigurationHelper|KiteHelper)
|
||||
, (helpers.technoDir+'/stratus1.conf' , SystemFile|ConfigurationHelper)
|
||||
, (helpers.technoDir+'/plugins.conf' , SystemFile|ConfigurationHelper)
|
||||
, (helpers.technoDir+'/analog.conf' , SystemFile|ConfigurationHelper)
|
||||
]
|
||||
if os.getenv('HOME'):
|
||||
confFiles += [ (os.getenv('HOME')+'/.coriolis2/settings.py', 0) ]
|
||||
else:
|
||||
w = WarningMessage(['The <HOME> environment variable is not defined, this is most unusual.'
|
||||
w = WarningMessage(['The "HOME" environment variable is not defined, this is most unusual.'
|
||||
,'It prevents the loading of ${HOME}/.coriolis2/settings.py'])
|
||||
print w
|
||||
|
||||
|
@ -123,11 +127,11 @@ def coriolisConfigure():
|
|||
if not os.path.isfile(confFile):
|
||||
if confFlags & SystemFile:
|
||||
print '[ERROR] Missing mandatory Coriolis2 system file:'
|
||||
print ' <%s>' % confFile
|
||||
print ' "%s"' % helpers.truncPath(confFile)
|
||||
print ' Your installation may be broken. Trying to continue anyway...'
|
||||
continue
|
||||
|
||||
print ' - Loading \"%s\".' % helpers.truncPath(confFile)
|
||||
print ' - Loading "%s".' % helpers.truncPath(confFile)
|
||||
execfile(confFile,moduleGlobals)
|
||||
except Exception, e:
|
||||
helpers.showPythonTrace( confFile, e )
|
||||
|
@ -139,8 +143,8 @@ def coriolisConfigure():
|
|||
else:
|
||||
if confFlags & loaderFlags & HelpersMask:
|
||||
if confFlags & SystemFile and loaderFlags & SystemMandatory:
|
||||
print '[ERROR] Mandatory symbol <%s> is missing in system configuration file:' % symbol
|
||||
print ' <%s>' % confFile
|
||||
print '[ERROR] Mandatory symbol "%s" is missing in system configuration file:' % symbol
|
||||
print ' "%s"' % helpers.truncPath(confFile)
|
||||
print ' Trying to continue anyway...'
|
||||
|
||||
if confFile.endswith('settings.py'):
|
||||
|
@ -160,4 +164,56 @@ def coriolisConfigure():
|
|||
parameter.setString( mappingFile )
|
||||
parameter.flags = Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist
|
||||
|
||||
confFile = None
|
||||
if Cfg.hasParameter('analog.techno'):
|
||||
confFile = Cfg.getParamString('analog.techno').asString()
|
||||
if confFile == 'Analog_technology_has_not_been_set': confFile = None
|
||||
if confFile == 'Analog_technology_is_disabled': return
|
||||
|
||||
if not confFile:
|
||||
vendorTech = helpers.techno.split('/')[-1]
|
||||
confFile = os.path.join( helpers.technoDir, 'dtr_%s.py'%vendorTech )
|
||||
Cfg.getParamString('analog.techno').setString( confFile )
|
||||
|
||||
if not os.path.isfile(confFile):
|
||||
print '[WARNING] Analog technology file (aka DTR) has not been found:'
|
||||
print ' "%s"' % helpers.truncPath(confFile)
|
||||
print ' Use of Coriolis analog is disabled.'
|
||||
return
|
||||
|
||||
try:
|
||||
if not helpers.quiet: print ' - Loading \"%s\".' % helpers.truncPath(confFile)
|
||||
execfile(confFile,moduleGlobals)
|
||||
except Exception, e:
|
||||
showPythonTrace( confFile, e )
|
||||
|
||||
if moduleGlobals.has_key('analogTechnologyTable'):
|
||||
AnalogTechno.loadAnalogTechno( moduleGlobals['analogTechnologyTable'], confFile )
|
||||
del moduleGlobals['analogTechnologyTable']
|
||||
else:
|
||||
print '[ERROR] Mandatory symbol <%s> is missing in technology configuration file:' % 'analogTechnologyTable'
|
||||
print ' "%s"' % helpers.truncPath(confFile)
|
||||
sys.exit( 1 )
|
||||
|
||||
confFile = Cfg.getParamString('analog.devices').asString()
|
||||
if not os.path.isfile(confFile):
|
||||
print '[ERROR] Missing mandatory analog devices description file:'
|
||||
print ' "%s"' % helpers.truncPath(confFile)
|
||||
print ' Please look for the "analog.devices" parameter in configuration files.'
|
||||
sys.exit( 1 )
|
||||
|
||||
try:
|
||||
if not helpers.quiet: print ' - Loading \"%s\".' % helpers.truncPath(confFile)
|
||||
execfile(confFile,moduleGlobals)
|
||||
except Exception, e:
|
||||
showPythonTrace( confFile, e )
|
||||
|
||||
if moduleGlobals.has_key('devicesTable'):
|
||||
Devices.loadDevices( moduleGlobals['devicesTable'], confFile )
|
||||
del moduleGlobals['devicesTable']
|
||||
else:
|
||||
print '[ERROR] Mandatory symbol "%s" is missing in technology configuration file:' % 'devicesTable'
|
||||
print ' "%s"' % helpers.truncPath(confFile)
|
||||
sys.exit( 1 )
|
||||
|
||||
return
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
# -*- Mode:Python; explicit-buffer-name: "AnalogTechno.py<crlcore/helpers>" -*-
|
||||
#
|
||||
# This file is part of the Coriolis Software.
|
||||
# Copyright (c) UPMC 2015-2018, All Rights Reserved
|
||||
#
|
||||
# +-----------------------------------------------------------------+
|
||||
# | C O R I O L I S |
|
||||
# | Alliance / Hurricane Interface |
|
||||
# | |
|
||||
# | Author : Jean-Paul CHAPUT |
|
||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
# | =============================================================== |
|
||||
# | Python : "./crlcore/python/helpers/AnalogTechno.py" |
|
||||
# +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import sys
|
||||
import Hurricane
|
||||
from Hurricane import DbU
|
||||
from Hurricane import DataBase
|
||||
from Hurricane import Layer
|
||||
from helpers import ErrorMessage
|
||||
from helpers import Debug
|
||||
|
||||
|
||||
technoFile = '<technoFile has not been set>'
|
||||
|
||||
|
||||
Length = 0x0001
|
||||
Area = 0x0002
|
||||
Asymmetric = 0x0004
|
||||
Unit = 0x0008
|
||||
|
||||
|
||||
def valueToDbU ( value, unit, lengthType ):
|
||||
length = DbU.fromPhysical( value, unit )
|
||||
if lengthType & Length: return length
|
||||
|
||||
area = DbU.fromPhysical( float(length), unit )
|
||||
return area
|
||||
|
||||
|
||||
def checkEntry ( entry, entryNo ):
|
||||
if not isinstance(entry,tuple):
|
||||
raise ErrorMessage( 1, [ 'Entry %d is malformed in <analogTechnologyTable>.' % entryNo
|
||||
, 'Not a tuple (a, b, c, ...) or (a,).'
|
||||
, str(entry)
|
||||
] )
|
||||
if not len(entry) in (4, 5, 6):
|
||||
raise ErrorMessage( 1, [ 'Entry %d is malformed in <analogTechnologyTable>.' % entryNo
|
||||
, 'Tuple must have *4*, *5* or *6* items only.'
|
||||
, str(entry)
|
||||
] )
|
||||
if not entry[-2] in (Length, Length|Asymmetric, Area, Unit):
|
||||
raise ErrorMessage( 1, [ 'Entry %d is malformed in <analogTechnologyTable>.' % entryNo
|
||||
, 'Beforelast item is neither Length, Length|Asymmetric nor Area.'
|
||||
, str(entry)
|
||||
] )
|
||||
return
|
||||
|
||||
|
||||
def _loadAnalogTechno ( techno, ruleTable ):
|
||||
unit = None
|
||||
entryNo = 0
|
||||
for entry in ruleTable:
|
||||
entryNo += 1
|
||||
|
||||
try:
|
||||
if entryNo > 1:
|
||||
checkEntry( entry, entryNo )
|
||||
|
||||
if entry[0] == 'Header':
|
||||
unit = entry[2]
|
||||
techno.setName( entry[1] )
|
||||
continue
|
||||
|
||||
# Zero-layer rule.
|
||||
if len(entry) == 4:
|
||||
if entry[2] & Unit:
|
||||
techno.addUnitRule( entry[0], entry[1], entry[3] )
|
||||
else:
|
||||
techno.addPhysicalRule( entry[0]
|
||||
, valueToDbU( entry[1], unit, entry[2] )
|
||||
, entry[3]
|
||||
)
|
||||
# One-layer rule.
|
||||
if len(entry) == 5:
|
||||
techno.addPhysicalRule( entry[0]
|
||||
, entry[1]
|
||||
, valueToDbU( entry[2], unit, entry[3] )
|
||||
, entry[4]
|
||||
)
|
||||
# Two-layer rule.
|
||||
if len(entry) == 6:
|
||||
symmetric = True
|
||||
if entry[4] & Asymmetric: symmetric = False
|
||||
|
||||
techno.addPhysicalRule( entry[0]
|
||||
, entry[1]
|
||||
, entry[2]
|
||||
, symmetric
|
||||
, valueToDbU( entry[3], unit, entry[4] )
|
||||
, entry[5]
|
||||
)
|
||||
except Exception, e:
|
||||
ErrorMessage.wrapPrint(e,'In %s:<analogTechnologyTable> at index %d.' % (technoFile,entryNo))
|
||||
return
|
||||
|
||||
|
||||
def loadAnalogTechno ( table, fromFile ):
|
||||
global technoFile
|
||||
technoFile = fromFile
|
||||
techno = DataBase.getDB().getTechnology()
|
||||
|
||||
_loadAnalogTechno( techno, table )
|
||||
return
|
|
@ -0,0 +1,102 @@
|
|||
# -*- Mode:Python; explicit-buffer-name: "Devices.py<crlcore/helpers>" -*-
|
||||
#
|
||||
# This file is part of the Coriolis Software.
|
||||
# Copyright (c) UPMC 2015-2018, All Rights Reserved
|
||||
#
|
||||
# +-----------------------------------------------------------------+
|
||||
# | C O R I O L I S |
|
||||
# | Alliance / Hurricane Interface |
|
||||
# | |
|
||||
# | Author : Jean-Paul CHAPUT |
|
||||
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||
# | =============================================================== |
|
||||
# | Python : "./crlcore/python/helpers/Devices.py" |
|
||||
# +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import sys
|
||||
from Hurricane import DataBase
|
||||
from helpers import ErrorMessage
|
||||
from helpers import Debug
|
||||
|
||||
|
||||
devicesFile = '<devicesFile has not been set>'
|
||||
|
||||
|
||||
def checkEntry ( entry, entryNo ):
|
||||
if not isinstance(entry,dict):
|
||||
raise ErrorMessage( 1, [ 'Entry %d is malformed in <devicesTable>.' % entryNo
|
||||
, 'Not a dictionnary { key1:value1, key2:value2 }.'
|
||||
, str(entry)
|
||||
] )
|
||||
if not entry.has_key('name'):
|
||||
raise ErrorMessage( 1, [ 'Entry %d is malformed in <devicesTable>.' % entryNo
|
||||
, 'Dictionnary is missing the <name> key/value pair.'
|
||||
, str(entry)
|
||||
] )
|
||||
if not entry.has_key('spice'):
|
||||
raise ErrorMessage( 1, [ 'Entry %d is malformed in <devicesTable>.' % entryNo
|
||||
, 'Dictionnary is missing the <spice> key/value pair.'
|
||||
, str(entry)
|
||||
] )
|
||||
if not entry.has_key('connectors'):
|
||||
raise ErrorMessage( 1, [ 'Entry %d is malformed in <devicesTable>.' % entryNo
|
||||
, 'Dictionnary is missing the <connectors> key/value pair.'
|
||||
, str(entry)
|
||||
] )
|
||||
if not entry.has_key('layouts'):
|
||||
raise ErrorMessage( 1, [ 'Entry %d is malformed in <devicesTable>.' % entryNo
|
||||
, 'Dictionnary is missing the <layouts> key/value pair.'
|
||||
, str(entry)
|
||||
] )
|
||||
if not isinstance(entry['connectors'],tuple):
|
||||
raise ErrorMessage( 1, [ 'Entry %d is malformed in <devicesTable>.' % entryNo
|
||||
, 'The <connectors> value is not a *tuple*.'
|
||||
, str(entry)
|
||||
] )
|
||||
layouts = entry['layouts']
|
||||
if not isinstance(layouts,tuple):
|
||||
raise ErrorMessage( 1, [ 'Entry %d is malformed in <devicesTable>.' % entryNo
|
||||
, 'The <layout> value is not a *tuple*.'
|
||||
, str(entry)
|
||||
] )
|
||||
for layout in layouts:
|
||||
if not isinstance(layout,tuple) or len(layout) != 2:
|
||||
raise ErrorMessage( 1, [ 'Entry %d is malformed in <devicesTable>.' % entryNo
|
||||
, 'One <layout> item is not a two element *tuple*.'
|
||||
, str(entry)
|
||||
] )
|
||||
return
|
||||
|
||||
|
||||
def _loadDevices ( techno, ruleTable ):
|
||||
unit = None
|
||||
entryNo = 0
|
||||
for entry in ruleTable:
|
||||
entryNo += 1
|
||||
|
||||
try:
|
||||
checkEntry( entry, entryNo )
|
||||
|
||||
devDesc = techno.addDeviceDescriptor( entry['name'] )
|
||||
devDesc.setSpiceFilePath( entry['spice'] )
|
||||
|
||||
for connector in entry['connectors']:
|
||||
devDesc.addConnector( connector )
|
||||
|
||||
for layout in entry['layouts']:
|
||||
devDesc.addLayout( layout[0], layout[1] )
|
||||
except Exception, e:
|
||||
ErrorMessage.wrapPrint(e,'In %s:<devicesTable> at index %d.' % (devicesFile,entryNo))
|
||||
return
|
||||
|
||||
|
||||
def loadDevices ( table, fromFile ):
|
||||
global devicesFile
|
||||
devicesFile = fromFile
|
||||
techno = DataBase.getDB().getTechnology()
|
||||
|
||||
_loadDevices( techno, table )
|
||||
return
|
|
@ -46,9 +46,16 @@ def isderived ( derived, base ):
|
|||
return False
|
||||
|
||||
|
||||
def truncPath ( path, maxlength=70 ):
|
||||
def truncPath ( path, maxlength=80 ):
|
||||
if len(path) < maxlength: return path
|
||||
return '.../'+os.sep.join(path.split(os.sep)[-4:])
|
||||
components = path.split(os.sep)
|
||||
trunc = ''
|
||||
for i in range(-1,-len(components),-1):
|
||||
if len(trunc)+len(components[i]) >= maxlength: break
|
||||
if not len(trunc): trunc = components[i]
|
||||
else: trunc = os.path.join( components[i], trunc )
|
||||
|
||||
return '...' + os.sep + trunc
|
||||
|
||||
|
||||
def showPythonTrace ( scriptPath=None, e=None, tryContinue=True ):
|
||||
|
|
|
@ -318,14 +318,14 @@ namespace CRL {
|
|||
Utilities::Path crlcoreDir = pythonSitePackages / "crlcore";
|
||||
Utilities::Path stratusDir = pythonSitePackages / "stratus";
|
||||
Utilities::Path cumulusDir = pythonSitePackages / "cumulus";
|
||||
Utilities::Path pharosDir = pythonSitePackages / "pharos";
|
||||
Utilities::Path oroshiDir = pythonSitePackages / "oroshi";
|
||||
|
||||
Isobar::Script::addPath ( sysConfDir.toString() );
|
||||
Isobar::Script::addPath ( pythonSitePackages.toString() );
|
||||
Isobar::Script::addPath ( crlcoreDir.toString() );
|
||||
Isobar::Script::addPath ( stratusDir.toString() );
|
||||
Isobar::Script::addPath ( cumulusDir.toString() );
|
||||
Isobar::Script::addPath ( pharosDir.toString() );
|
||||
Isobar::Script::addPath ( oroshiDir.toString() );
|
||||
|
||||
// Triggers Configuration singleton creation.
|
||||
Cfg::Configuration::get ();
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
.. -*- Mode: rst -*-
|
||||
|
||||
.. include:: ../etc/definitions.rst
|
||||
|
||||
|
||||
==========================
|
||||
Hurricane/Analog Reference
|
||||
==========================
|
||||
|
||||
The Viewer C++ API reference is generated by Doxygen_ and is
|
||||
available here: `Hurricane/Analog <file:../../analog/index.html>`_
|
|
@ -0,0 +1,11 @@
|
|||
.. -*- Mode: rst -*-
|
||||
|
||||
.. include:: ../etc/definitions.rst
|
||||
|
||||
|
||||
================
|
||||
Oroshi Reference
|
||||
================
|
||||
|
||||
The Oroshi Python API reference is generated by Doxygen_ and is
|
||||
available here: `Oroshi <file:../../oroshi/index.html>`_
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue