coriolis/crlcore/etc/node600/phenitec/technology.py

184 lines
7.5 KiB
Python
Raw Normal View History

Support for full Database clear & restart. * New: In CRL/etc/node600/phenitec, ported configuration of Phenitec 0.6um Compliant with DataBase reset. * New: In CRL/python/helpers, added function "unloadUserSettings()" to unload Python modules prior to a full reset. Added "resetCoriolis()" to perform full DataBase reset. * Change: In CRL::AllianceFramework, make it a derived class of DBo so the destroy() is now provided. * Bug: In CRL::AllianceFramework::getCell(), do not attempt any load if the library list is empty. Should never occur except in case of a botched databse reset. * New: In CRL::AllianceFramework, new method "saveCATAL()" to write back the catalog of a library and "saveCells()" to write back the cells. Note: only cells actually loaded in memory will be write back. * New: In CRL::Catalog, add method "saveToFile()" to write back the CATAL of a library. * Change: In CRL::ParserDriver, replace "const string&" by "string" (improved string support of the GNU STL). * Change: In CRL::ParserSlot, use string instead of Name. * Change: In CRL::ApParser, make _layerInformation an ordinary attribute instead of a static one. This allow for it's correct resetting across databas resets. * Change: In CRL::VstParserGrammar, reinitialize Vst::framework at each parser call. Needed to support database reset. * New: In Hurricane::DBo, add an object counter to be sure that when we perform a reset, no remaining DBo is allocated. This is different of the object id which is ever increasing. Note that, at reset, we check against "1" remaining element as at this point only Database is still allocated. Add a new "resetId()" method. MUST NEVER BE CALLED except by DataBase::_preDestroy(). * New: In Hurricane::Database, new clear() method to remove the Cells of all the libraries in reverse hierarchical depth order. Make use of the new CellsSort class. * Change: In Hurricane::DataBase::_preDestroy(), call "clear()" and DBo::resetId(). * Change: In Hurricane::Breakpoint, change the default callback to be a static function. So we can restore it later. * Bug: In Hurricane::Instance::_preDestroy(), there was yet another loop of deletion over a collection for the shared pathes. Replace it by the repetitive deletion of the first element. * Bug: In Hurricane::Net::_preDestroy(), RoutingPads must be destroyed prior to any other component. * New: In Hurricane::ColorScale, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::DrawingStyle, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::Graphics, add a "disable()" method to call the various "qtFree()" of the sub-objects.
2020-02-29 09:55:14 -06:00
# This file is part of the Coriolis Software.
Migration towards Python3, first stage: still based on C-Macros. * New: Python/C++ API level: * Write a new C++/template wrapper to get rid of boost::python * The int & long Python type are now merged. So a C/C++ level, it became "PyLong_X" (remove "PyInt_X") and at Python code level, it became "int" (remove "long"). * Change: VLSISAPD finally defunct. * Configuration is now integrated as a Hurricane component, makes use of the new C++/template wrapper. * vlsisapd is now defunct. Keep it in the source for now as some remaining non essential code may have to be ported in the future. * Note: Python code (copy of the migration howto): * New print function syntax print(). * Changed "dict.has_key(k)" for "k" in dict. * Changed "except Exception, e" for "except Exception as e". * The division "/" is now the floating point division, even if both operand are integers. So 3/2 now gives 1.5 and no longer 1. The integer division is now "//" : 1 = 3//2. So have to carefully review the code to update. Most of the time we want to use "//". We must never change to float for long that, in fact, represents DbU (exposed as Python int type). * execfile() must be replaced by exec(open("file").read()). * iter().__next__() becomes iter(x).__next__(). * __getslice__() has been removed, integrated to __getitem__(). * The formating used for str(type(o)) has changed, so In Stratus, have to update them ("<class 'MyClass'>" instead of "MyClass"). * the "types" module no longer supply values for default types like str (types.StringType) or list (types.StringType). Must use "isinstance()" where they were occuring. * Remove the 'L' to indicate "long integer" (like "12L"), now all Python integer are long. * Change in bootstrap: * Ported Coriolis builder (ccb) to Python3. * Ported Coriolis socInstaller.py to Python3. * Note: In PyQt4+Python3, QVariant no longer exists. Use None or directly convert using the python syntax: bool(x), int(x), ... By default, it is a string (str). * Note: PyQt4 bindings & Python3 under SL7. * In order to compile user's must upgrade to my own rebuild of PyQt 4 & 5 bindings 4.19.21-1.el7.soc. * Bug: In cumulus/plugins.block.htree.HTree.splitNet(), set the root buffer of the H-Tree to the original signal (mainly: top clock). Strangely, it was only done when working in full chip mode.
2021-09-19 12:41:24 -05:00
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
Support for full Database clear & restart. * New: In CRL/etc/node600/phenitec, ported configuration of Phenitec 0.6um Compliant with DataBase reset. * New: In CRL/python/helpers, added function "unloadUserSettings()" to unload Python modules prior to a full reset. Added "resetCoriolis()" to perform full DataBase reset. * Change: In CRL::AllianceFramework, make it a derived class of DBo so the destroy() is now provided. * Bug: In CRL::AllianceFramework::getCell(), do not attempt any load if the library list is empty. Should never occur except in case of a botched databse reset. * New: In CRL::AllianceFramework, new method "saveCATAL()" to write back the catalog of a library and "saveCells()" to write back the cells. Note: only cells actually loaded in memory will be write back. * New: In CRL::Catalog, add method "saveToFile()" to write back the CATAL of a library. * Change: In CRL::ParserDriver, replace "const string&" by "string" (improved string support of the GNU STL). * Change: In CRL::ParserSlot, use string instead of Name. * Change: In CRL::ApParser, make _layerInformation an ordinary attribute instead of a static one. This allow for it's correct resetting across databas resets. * Change: In CRL::VstParserGrammar, reinitialize Vst::framework at each parser call. Needed to support database reset. * New: In Hurricane::DBo, add an object counter to be sure that when we perform a reset, no remaining DBo is allocated. This is different of the object id which is ever increasing. Note that, at reset, we check against "1" remaining element as at this point only Database is still allocated. Add a new "resetId()" method. MUST NEVER BE CALLED except by DataBase::_preDestroy(). * New: In Hurricane::Database, new clear() method to remove the Cells of all the libraries in reverse hierarchical depth order. Make use of the new CellsSort class. * Change: In Hurricane::DataBase::_preDestroy(), call "clear()" and DBo::resetId(). * Change: In Hurricane::Breakpoint, change the default callback to be a static function. So we can restore it later. * Bug: In Hurricane::Instance::_preDestroy(), there was yet another loop of deletion over a collection for the shared pathes. Replace it by the repetitive deletion of the first element. * Bug: In Hurricane::Net::_preDestroy(), RoutingPads must be destroyed prior to any other component. * New: In Hurricane::ColorScale, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::DrawingStyle, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::Graphics, add a "disable()" method to call the various "qtFree()" of the sub-objects.
2020-02-29 09:55:14 -06:00
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
# | Alliance / Hurricane Interface |
# | |
# | Author : Jean-Paul CHAPUT |
# | E-mail : Jean-Paul.Chaput@lip6.fr |
# | =============================================================== |
# | Python : "./etc/node600/phenitec/technology.py" |
# +-----------------------------------------------------------------+
import helpers.io
Migration towards Python3, first stage: still based on C-Macros. * New: Python/C++ API level: * Write a new C++/template wrapper to get rid of boost::python * The int & long Python type are now merged. So a C/C++ level, it became "PyLong_X" (remove "PyInt_X") and at Python code level, it became "int" (remove "long"). * Change: VLSISAPD finally defunct. * Configuration is now integrated as a Hurricane component, makes use of the new C++/template wrapper. * vlsisapd is now defunct. Keep it in the source for now as some remaining non essential code may have to be ported in the future. * Note: Python code (copy of the migration howto): * New print function syntax print(). * Changed "dict.has_key(k)" for "k" in dict. * Changed "except Exception, e" for "except Exception as e". * The division "/" is now the floating point division, even if both operand are integers. So 3/2 now gives 1.5 and no longer 1. The integer division is now "//" : 1 = 3//2. So have to carefully review the code to update. Most of the time we want to use "//". We must never change to float for long that, in fact, represents DbU (exposed as Python int type). * execfile() must be replaced by exec(open("file").read()). * iter().__next__() becomes iter(x).__next__(). * __getslice__() has been removed, integrated to __getitem__(). * The formating used for str(type(o)) has changed, so In Stratus, have to update them ("<class 'MyClass'>" instead of "MyClass"). * the "types" module no longer supply values for default types like str (types.StringType) or list (types.StringType). Must use "isinstance()" where they were occuring. * Remove the 'L' to indicate "long integer" (like "12L"), now all Python integer are long. * Change in bootstrap: * Ported Coriolis builder (ccb) to Python3. * Ported Coriolis socInstaller.py to Python3. * Note: In PyQt4+Python3, QVariant no longer exists. Use None or directly convert using the python syntax: bool(x), int(x), ... By default, it is a string (str). * Note: PyQt4 bindings & Python3 under SL7. * In order to compile user's must upgrade to my own rebuild of PyQt 4 & 5 bindings 4.19.21-1.el7.soc. * Bug: In cumulus/plugins.block.htree.HTree.splitNet(), set the root buffer of the H-Tree to the original signal (mainly: top clock). Strangely, it was only done when working in full chip mode.
2021-09-19 12:41:24 -05:00
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
Support for full Database clear & restart. * New: In CRL/etc/node600/phenitec, ported configuration of Phenitec 0.6um Compliant with DataBase reset. * New: In CRL/python/helpers, added function "unloadUserSettings()" to unload Python modules prior to a full reset. Added "resetCoriolis()" to perform full DataBase reset. * Change: In CRL::AllianceFramework, make it a derived class of DBo so the destroy() is now provided. * Bug: In CRL::AllianceFramework::getCell(), do not attempt any load if the library list is empty. Should never occur except in case of a botched databse reset. * New: In CRL::AllianceFramework, new method "saveCATAL()" to write back the catalog of a library and "saveCells()" to write back the cells. Note: only cells actually loaded in memory will be write back. * New: In CRL::Catalog, add method "saveToFile()" to write back the CATAL of a library. * Change: In CRL::ParserDriver, replace "const string&" by "string" (improved string support of the GNU STL). * Change: In CRL::ParserSlot, use string instead of Name. * Change: In CRL::ApParser, make _layerInformation an ordinary attribute instead of a static one. This allow for it's correct resetting across databas resets. * Change: In CRL::VstParserGrammar, reinitialize Vst::framework at each parser call. Needed to support database reset. * New: In Hurricane::DBo, add an object counter to be sure that when we perform a reset, no remaining DBo is allocated. This is different of the object id which is ever increasing. Note that, at reset, we check against "1" remaining element as at this point only Database is still allocated. Add a new "resetId()" method. MUST NEVER BE CALLED except by DataBase::_preDestroy(). * New: In Hurricane::Database, new clear() method to remove the Cells of all the libraries in reverse hierarchical depth order. Make use of the new CellsSort class. * Change: In Hurricane::DataBase::_preDestroy(), call "clear()" and DBo::resetId(). * Change: In Hurricane::Breakpoint, change the default callback to be a static function. So we can restore it later. * Bug: In Hurricane::Instance::_preDestroy(), there was yet another loop of deletion over a collection for the shared pathes. Replace it by the repetitive deletion of the first element. * Bug: In Hurricane::Net::_preDestroy(), RoutingPads must be destroyed prior to any other component. * New: In Hurricane::ColorScale, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::DrawingStyle, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::Graphics, add a "disable()" method to call the various "qtFree()" of the sub-objects.
2020-02-29 09:55:14 -06:00
Migration towards Python3, first stage: still based on C-Macros. * New: Python/C++ API level: * Write a new C++/template wrapper to get rid of boost::python * The int & long Python type are now merged. So a C/C++ level, it became "PyLong_X" (remove "PyInt_X") and at Python code level, it became "int" (remove "long"). * Change: VLSISAPD finally defunct. * Configuration is now integrated as a Hurricane component, makes use of the new C++/template wrapper. * vlsisapd is now defunct. Keep it in the source for now as some remaining non essential code may have to be ported in the future. * Note: Python code (copy of the migration howto): * New print function syntax print(). * Changed "dict.has_key(k)" for "k" in dict. * Changed "except Exception, e" for "except Exception as e". * The division "/" is now the floating point division, even if both operand are integers. So 3/2 now gives 1.5 and no longer 1. The integer division is now "//" : 1 = 3//2. So have to carefully review the code to update. Most of the time we want to use "//". We must never change to float for long that, in fact, represents DbU (exposed as Python int type). * execfile() must be replaced by exec(open("file").read()). * iter().__next__() becomes iter(x).__next__(). * __getslice__() has been removed, integrated to __getitem__(). * The formating used for str(type(o)) has changed, so In Stratus, have to update them ("<class 'MyClass'>" instead of "MyClass"). * the "types" module no longer supply values for default types like str (types.StringType) or list (types.StringType). Must use "isinstance()" where they were occuring. * Remove the 'L' to indicate "long integer" (like "12L"), now all Python integer are long. * Change in bootstrap: * Ported Coriolis builder (ccb) to Python3. * Ported Coriolis socInstaller.py to Python3. * Note: In PyQt4+Python3, QVariant no longer exists. Use None or directly convert using the python syntax: bool(x), int(x), ... By default, it is a string (str). * Note: PyQt4 bindings & Python3 under SL7. * In order to compile user's must upgrade to my own rebuild of PyQt 4 & 5 bindings 4.19.21-1.el7.soc. * Bug: In cumulus/plugins.block.htree.HTree.splitNet(), set the root buffer of the H-Tree to the original signal (mainly: top clock). Strangely, it was only done when working in full chip mode.
2021-09-19 12:41:24 -05:00
from helpers import l, u, n
from Hurricane import DbU
from Hurricane import DataBase
from Hurricane import Technology
Support for full Database clear & restart. * New: In CRL/etc/node600/phenitec, ported configuration of Phenitec 0.6um Compliant with DataBase reset. * New: In CRL/python/helpers, added function "unloadUserSettings()" to unload Python modules prior to a full reset. Added "resetCoriolis()" to perform full DataBase reset. * Change: In CRL::AllianceFramework, make it a derived class of DBo so the destroy() is now provided. * Bug: In CRL::AllianceFramework::getCell(), do not attempt any load if the library list is empty. Should never occur except in case of a botched databse reset. * New: In CRL::AllianceFramework, new method "saveCATAL()" to write back the catalog of a library and "saveCells()" to write back the cells. Note: only cells actually loaded in memory will be write back. * New: In CRL::Catalog, add method "saveToFile()" to write back the CATAL of a library. * Change: In CRL::ParserDriver, replace "const string&" by "string" (improved string support of the GNU STL). * Change: In CRL::ParserSlot, use string instead of Name. * Change: In CRL::ApParser, make _layerInformation an ordinary attribute instead of a static one. This allow for it's correct resetting across databas resets. * Change: In CRL::VstParserGrammar, reinitialize Vst::framework at each parser call. Needed to support database reset. * New: In Hurricane::DBo, add an object counter to be sure that when we perform a reset, no remaining DBo is allocated. This is different of the object id which is ever increasing. Note that, at reset, we check against "1" remaining element as at this point only Database is still allocated. Add a new "resetId()" method. MUST NEVER BE CALLED except by DataBase::_preDestroy(). * New: In Hurricane::Database, new clear() method to remove the Cells of all the libraries in reverse hierarchical depth order. Make use of the new CellsSort class. * Change: In Hurricane::DataBase::_preDestroy(), call "clear()" and DBo::resetId(). * Change: In Hurricane::Breakpoint, change the default callback to be a static function. So we can restore it later. * Bug: In Hurricane::Instance::_preDestroy(), there was yet another loop of deletion over a collection for the shared pathes. Replace it by the repetitive deletion of the first element. * Bug: In Hurricane::Net::_preDestroy(), RoutingPads must be destroyed prior to any other component. * New: In Hurricane::ColorScale, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::DrawingStyle, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::Graphics, add a "disable()" method to call the various "qtFree()" of the sub-objects.
2020-02-29 09:55:14 -06:00
tech = DataBase.getDB().getTechnology()
if tech:
Update the channel routing feature to integrate with the OTC P&R. * Update: In CRL/node600/phenitec/kite.py, update the routing gauge to the new format. So now we can use again SxLib-2M (channel routing SxLib for two metal technologies). * Change: In CRL::BlifParser, if a master cell is not found in the AllianceFramework, then try in the Blif supplied libraries. This is used to load the zero, one and tie cells. Add a Blif::getCell() static function to look into the Blif supplied libraries. * Change: In CRL::LefImport, sometimes there can be discrepencies between the LEF ROUTING layers and the Coriolis routing gauge. Now ignore routing layers that are *not* presents in the Coriolis gauge. * Change: In AnabaticEngine, moved routingMode attribute from KatanaEngine, as some setup operations needs it. * Change: In AutoSegment::canReduce(), allow fixed segments to be reduced if they are "jumpers" (turn+turn and top+top or bot+bot). This case arise on the edge of routing channels for fixed wires to connect terminals. * Change: In AutoSegment::getTopologicalinfos(), compute differently the (leftBound,rightBound) interval when in channel mode. In over-the-cell mode, this interval is the one of the whole GCells under the wire. In channel mode, for fixed wires (that is, verticals connecteds to cells) this interval is reduced to half the GCell height, on the connected side of said channel. This allows Manipulator::_insertToTrack() to issue disantangling requests (push left/push right) for fixed segments that are face to face in the channel. * Change: In Anabatic::Configuration CTOR, allow the cellGauge to have a different name from the routingGauge. Now if the cell gauge that should match the routing gauge is not found, fallback to the name set in "anabatic.cellGauge" parameter. Case occur when we try to match with CORE sites from LEF files. * Change: In Etesian::Configuration CTOR, same change as in the Anabatic configuration. * Change: In Anabatic::GCell::updateDensity(), never set the GoStraight flag in channel mode. This flag makes sense when there is at least 4 routing layers (so we have 2 contiguous free of blockages). * Bug: In Anabatic::Session::_getNearestGridpoint(), sometimes the nearest on grid point is outside the constraint box. Now force the point to remains inside constraints even if offgrid. * Change: In Katana::DataNegociate::update(), perpandiculars that are either reduced or in non-preferred routing direction should not trigger a bug message. * Change: In KatanaEngine::_check(), do not check for fixed, horizontal non-prefs AutoSegments in channel mode (avoid false bug display). * Bug: In Manipulator::_forceToTrack(), slighty shrink (-1) the interval to free. The intersection function of intervals returns true when the two intervals *exactly* touches (1.vMax == 2.vMin). But in this specific case, they are not *overlapping* and no action should be taken... * Bug: In Manipulator::_insertInTrack(), do not reject the track when we are overlapping a fixed vertical segment in channel mode. (Hmm, maybe already corrected by the previous one). * Change: In Katana::NegociateOverlapCost(), in channel mode, do not put two overlaping vertical fixed segments into infinite cost. This happens when two cell connected verticals are face to face in a channel. We want them negociated the track (by shrinking their length) instead of excluding it right away. * Change: In NegociateWindow::createTrackSegment(), in channel mode, do not attempt to create a track segment over a fixed and reduced AutoSegment. Do not attempt to put a non-preferred AutoSegment on a Track either. * Bug: In RoutingEvent::revalidate(), the number of availables tracks was badly computed when in the pure constraint case, when there was only one it was reporting zero. * Change: In TrackElements::TrackElements_Perpandicular::Locator, do not issue a bug when an non-pref or reduced AutoSegment do not have an associated TrackElement. * Change: In TrackSegmentCost::update(), do not issue a bug when a perpandicular is reduded or non-pref and do not have a TrackElement.
2022-10-22 09:39:22 -05:00
print( WarningMessage( 'cmos.technology: Technology already exists, "{}"'.format(tech.getName()) ))
Support for full Database clear & restart. * New: In CRL/etc/node600/phenitec, ported configuration of Phenitec 0.6um Compliant with DataBase reset. * New: In CRL/python/helpers, added function "unloadUserSettings()" to unload Python modules prior to a full reset. Added "resetCoriolis()" to perform full DataBase reset. * Change: In CRL::AllianceFramework, make it a derived class of DBo so the destroy() is now provided. * Bug: In CRL::AllianceFramework::getCell(), do not attempt any load if the library list is empty. Should never occur except in case of a botched databse reset. * New: In CRL::AllianceFramework, new method "saveCATAL()" to write back the catalog of a library and "saveCells()" to write back the cells. Note: only cells actually loaded in memory will be write back. * New: In CRL::Catalog, add method "saveToFile()" to write back the CATAL of a library. * Change: In CRL::ParserDriver, replace "const string&" by "string" (improved string support of the GNU STL). * Change: In CRL::ParserSlot, use string instead of Name. * Change: In CRL::ApParser, make _layerInformation an ordinary attribute instead of a static one. This allow for it's correct resetting across databas resets. * Change: In CRL::VstParserGrammar, reinitialize Vst::framework at each parser call. Needed to support database reset. * New: In Hurricane::DBo, add an object counter to be sure that when we perform a reset, no remaining DBo is allocated. This is different of the object id which is ever increasing. Note that, at reset, we check against "1" remaining element as at this point only Database is still allocated. Add a new "resetId()" method. MUST NEVER BE CALLED except by DataBase::_preDestroy(). * New: In Hurricane::Database, new clear() method to remove the Cells of all the libraries in reverse hierarchical depth order. Make use of the new CellsSort class. * Change: In Hurricane::DataBase::_preDestroy(), call "clear()" and DBo::resetId(). * Change: In Hurricane::Breakpoint, change the default callback to be a static function. So we can restore it later. * Bug: In Hurricane::Instance::_preDestroy(), there was yet another loop of deletion over a collection for the shared pathes. Replace it by the repetitive deletion of the first element. * Bug: In Hurricane::Net::_preDestroy(), RoutingPads must be destroyed prior to any other component. * New: In Hurricane::ColorScale, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::DrawingStyle, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::Graphics, add a "disable()" method to call the various "qtFree()" of the sub-objects.
2020-02-29 09:55:14 -06:00
else:
Migration towards Python3, first stage: still based on C-Macros. * New: Python/C++ API level: * Write a new C++/template wrapper to get rid of boost::python * The int & long Python type are now merged. So a C/C++ level, it became "PyLong_X" (remove "PyInt_X") and at Python code level, it became "int" (remove "long"). * Change: VLSISAPD finally defunct. * Configuration is now integrated as a Hurricane component, makes use of the new C++/template wrapper. * vlsisapd is now defunct. Keep it in the source for now as some remaining non essential code may have to be ported in the future. * Note: Python code (copy of the migration howto): * New print function syntax print(). * Changed "dict.has_key(k)" for "k" in dict. * Changed "except Exception, e" for "except Exception as e". * The division "/" is now the floating point division, even if both operand are integers. So 3/2 now gives 1.5 and no longer 1. The integer division is now "//" : 1 = 3//2. So have to carefully review the code to update. Most of the time we want to use "//". We must never change to float for long that, in fact, represents DbU (exposed as Python int type). * execfile() must be replaced by exec(open("file").read()). * iter().__next__() becomes iter(x).__next__(). * __getslice__() has been removed, integrated to __getitem__(). * The formating used for str(type(o)) has changed, so In Stratus, have to update them ("<class 'MyClass'>" instead of "MyClass"). * the "types" module no longer supply values for default types like str (types.StringType) or list (types.StringType). Must use "isinstance()" where they were occuring. * Remove the 'L' to indicate "long integer" (like "12L"), now all Python integer are long. * Change in bootstrap: * Ported Coriolis builder (ccb) to Python3. * Ported Coriolis socInstaller.py to Python3. * Note: In PyQt4+Python3, QVariant no longer exists. Use None or directly convert using the python syntax: bool(x), int(x), ... By default, it is a string (str). * Note: PyQt4 bindings & Python3 under SL7. * In order to compile user's must upgrade to my own rebuild of PyQt 4 & 5 bindings 4.19.21-1.el7.soc. * Bug: In cumulus/plugins.block.htree.HTree.splitNet(), set the root buffer of the H-Tree to the original signal (mainly: top clock). Strangely, it was only done when working in full chip mode.
2021-09-19 12:41:24 -05:00
tech = Technology.create( DataBase.getDB(), 'phenitec06' )
Support for full Database clear & restart. * New: In CRL/etc/node600/phenitec, ported configuration of Phenitec 0.6um Compliant with DataBase reset. * New: In CRL/python/helpers, added function "unloadUserSettings()" to unload Python modules prior to a full reset. Added "resetCoriolis()" to perform full DataBase reset. * Change: In CRL::AllianceFramework, make it a derived class of DBo so the destroy() is now provided. * Bug: In CRL::AllianceFramework::getCell(), do not attempt any load if the library list is empty. Should never occur except in case of a botched databse reset. * New: In CRL::AllianceFramework, new method "saveCATAL()" to write back the catalog of a library and "saveCells()" to write back the cells. Note: only cells actually loaded in memory will be write back. * New: In CRL::Catalog, add method "saveToFile()" to write back the CATAL of a library. * Change: In CRL::ParserDriver, replace "const string&" by "string" (improved string support of the GNU STL). * Change: In CRL::ParserSlot, use string instead of Name. * Change: In CRL::ApParser, make _layerInformation an ordinary attribute instead of a static one. This allow for it's correct resetting across databas resets. * Change: In CRL::VstParserGrammar, reinitialize Vst::framework at each parser call. Needed to support database reset. * New: In Hurricane::DBo, add an object counter to be sure that when we perform a reset, no remaining DBo is allocated. This is different of the object id which is ever increasing. Note that, at reset, we check against "1" remaining element as at this point only Database is still allocated. Add a new "resetId()" method. MUST NEVER BE CALLED except by DataBase::_preDestroy(). * New: In Hurricane::Database, new clear() method to remove the Cells of all the libraries in reverse hierarchical depth order. Make use of the new CellsSort class. * Change: In Hurricane::DataBase::_preDestroy(), call "clear()" and DBo::resetId(). * Change: In Hurricane::Breakpoint, change the default callback to be a static function. So we can restore it later. * Bug: In Hurricane::Instance::_preDestroy(), there was yet another loop of deletion over a collection for the shared pathes. Replace it by the repetitive deletion of the first element. * Bug: In Hurricane::Net::_preDestroy(), RoutingPads must be destroyed prior to any other component. * New: In Hurricane::ColorScale, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::DrawingStyle, add a "qtFree()" method for freeing the Qt Brush, Pen & Color. * New: In Hurricane::Graphics, add a "disable()" method to call the various "qtFree()" of the sub-objects.
2020-02-29 09:55:14 -06:00
DbU.setPrecision ( 2 )
DbU.setPhysicalsPerGrid ( 0.002, DbU.UnitPowerMicro )
DbU.setGridsPerLambda ( 150 )
DbU.setSymbolicSnapGridStep( DbU.fromLambda( 1.0) )
DbU.setPolygonStep ( DbU.fromGrid ( 150.0) )
import common
from common.technology import *
# Redefine all size from the "cmos" common part.
NWELL.setExtentionCap( nWell, l(4.0) )
PWELL.setExtentionCap( pWell, l(4.0) )
NTIE.setMinimalSize ( l( 3.0) )
NTIE.setExtentionCap ( nWell , l( 3.0) )
NTIE.setExtentionWidth( nWell , l( 2.0) )
NTIE.setExtentionCap ( nImplant, l( 2.5) )
NTIE.setExtentionWidth( nImplant, l( 1.5) )
NTIE.setExtentionCap ( active , l( 0.5) )
NTIE.setExtentionWidth( active , l(-0.5) )
PTIE.setMinimalSize ( l( 3.0) )
PTIE.setExtentionCap ( nWell , l( 3.0) )
PTIE.setExtentionWidth( nWell , l( 2.0) )
PTIE.setExtentionCap ( nImplant, l( 2.5) )
PTIE.setExtentionWidth( nImplant, l( 1.5) )
PTIE.setExtentionCap ( active , l( 0.5) )
PTIE.setExtentionWidth( active , l(-0.5) )
NDIF.setMinimalSize ( l(3.0) )
NDIF.setExtentionCap ( nImplant, l(4.0) )
NDIF.setExtentionWidth( nImplant, l(2.0) )
NDIF.setExtentionCap ( active , l(2.0) )
NDIF.setExtentionWidth( active , l(0.0) )
PDIF.setMinimalSize ( l(3.0) )
PDIF.setExtentionCap ( pImplant, l(4.0) )
PDIF.setExtentionWidth( pImplant, l(2.0) )
PDIF.setExtentionCap ( active , l(2.0) )
PDIF.setExtentionWidth( active , l(0.0) )
GATE.setMinimalSize ( l(2.0) )
GATE.setExtentionCap ( poly , l(2.5) )
NTRANS.setMinimalSize ( l( 2.0) )
NTRANS.setExtentionCap ( nImplant, l( 2.0) )
NTRANS.setExtentionWidth( nImplant, l( 7.0) )
NTRANS.setExtentionCap ( active , l( 0.0) )
NTRANS.setExtentionWidth( active , l( 3.0) )
NTRANS.setExtentionCap ( poly , l( 3.0) )
NTRANS.setExtentionWidth( poly , l( 0.0) )
PTRANS.setMinimalSize ( l( 2.0) )
PTRANS.setExtentionCap ( nWell , l( 2.5) )
PTRANS.setExtentionWidth( nWell , l( 7.5) )
PTRANS.setExtentionCap ( pImplant, l( 2.0) )
PTRANS.setExtentionWidth( pImplant, l( 7.0) )
PTRANS.setExtentionCap ( active , l( 0.0) )
PTRANS.setExtentionWidth( active , l( 3.0) )
PTRANS.setExtentionCap ( poly , l( 3.0) )
PTRANS.setExtentionWidth( poly , l( 0.0) )
POLY .setMinimalSize ( l(2.0) )
POLY .setExtentionCap ( poly , l(1.0) )
POLY2.setMinimalSize ( l(2.0) )
POLY2.setExtentionCap ( poly , l(1.0) )
# Routing Layers (symbolic).
METAL1 .setMinimalSize ( l( 2.0) )
METAL1 .setExtentionCap ( metal1 , l( 2.0) )
METAL1 .setExtentionWidth( metal1 , l( 1.0) )
METAL1 .setMinimalSpacing( l( 6.0) )
METAL2 .setMinimalSize ( l( 4.0) )
METAL2 .setExtentionCap ( metal2 , l( 2.0) )
METAL2 .setMinimalSpacing( l( 6.0) )
METAL3 .setMinimalSize ( l( 4.0) )
METAL3 .setExtentionCap ( metal3 , l( 2.0) )
METAL3 .setMinimalSpacing( l( 6.0) )
METAL4 .setMinimalSize ( l( 4.0) )
METAL4 .setExtentionCap ( metal4 , l( 2.0) )
METAL4 .setMinimalSpacing( l( 6.0) )
# Contacts (i.e. Active <--> Metal) (symbolic).
CONT_BODY_N.setMinimalSize( l( 2.0) )
CONT_BODY_N.setEnclosure ( nWell , l( 4.0), Layer.EnclosureH|Layer.EnclosureV )
CONT_BODY_N.setEnclosure ( nImplant, l( 3.5), Layer.EnclosureH|Layer.EnclosureV )
CONT_BODY_N.setEnclosure ( active , l( 1.5), Layer.EnclosureH|Layer.EnclosureV )
CONT_BODY_N.setEnclosure ( metal1 , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
CONT_BODY_P.setMinimalSize( l( 2.0) )
CONT_BODY_P.setEnclosure ( pWell , l( 4.0), Layer.EnclosureH|Layer.EnclosureV )
CONT_BODY_P.setEnclosure ( pImplant, l( 3.5), Layer.EnclosureH|Layer.EnclosureV )
CONT_BODY_P.setEnclosure ( active , l( 1.5), Layer.EnclosureH|Layer.EnclosureV )
CONT_BODY_P.setEnclosure ( metal1 , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
CONT_DIF_N.setMinimalSize( l( 2.0) )
CONT_DIF_N.setEnclosure ( nImplant, l( 4.0), Layer.EnclosureH|Layer.EnclosureV )
CONT_DIF_N.setEnclosure ( active , l( 2.0), Layer.EnclosureH|Layer.EnclosureV )
CONT_DIF_N.setEnclosure ( metal1 , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
CONT_DIF_P.setMinimalSize( l( 2.0) )
CONT_DIF_P.setEnclosure ( pImplant, l( 4.0), Layer.EnclosureH|Layer.EnclosureV )
CONT_DIF_P.setEnclosure ( active , l( 2.0), Layer.EnclosureH|Layer.EnclosureV )
CONT_DIF_P.setEnclosure ( metal1 , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
CONT_POLY.setMinimalSize( l( 2.0) )
CONT_POLY.setEnclosure ( poly , l( 2.0), Layer.EnclosureH|Layer.EnclosureV )
CONT_POLY.setEnclosure ( metal1 , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
# VIAs (i.e. Metal <--> Metal) (symbolic).
VIA12 .setMinimalSize( l( 2.0) )
VIA12 .setEnclosure ( metal1 , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
VIA12 .setEnclosure ( metal2 , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
VIA23 .setMinimalSize( l( 2.0) )
VIA23 .setEnclosure ( metal2 , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
VIA23 .setEnclosure ( metal3 , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
VIA34 .setMinimalSize( l( 2.0) )
VIA34 .setEnclosure ( metal3 , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
VIA34 .setEnclosure ( metal4 , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
# Blockages (symbolic).
BLOCKAGE1 .setMinimalSize ( l( 4.0) )
BLOCKAGE1 .setExtentionCap ( blockage1 , l( 2.0) )
BLOCKAGE1 .setExtentionWidth( blockage1 , l( 0.5) )
BLOCKAGE2 .setMinimalSize ( l( 4.0) )
BLOCKAGE2 .setExtentionCap ( blockage2 , l( 2.0) )
BLOCKAGE3 .setMinimalSize ( l( 4.0) )
BLOCKAGE3 .setExtentionCap ( blockage3 , l( 2.0) )
BLOCKAGE4 .setMinimalSize ( l( 4.0) )
BLOCKAGE4 .setExtentionCap ( blockage4 , l( 2.0) )
gdsLayersTable = \
[ ("pWell" , "CWN" , 41, 0)
, ("nWell" , "CWP" , 42, 0)
, ("active" , "CAA" , 43, 0)
, ("pImplant", "CSP" , 44, 0)
, ("nImplant", "CSN" , 45, 0)
, ("poly" , "CPG" , 46, 0)
, ("poly2" , "CM1" , 49, 0) # poly2 is in fact metal1.
, ("cut0" , "CCC" , 25, 0)
, ("metal1" , "CM1" , 49, 0)
, ("cut1" , "CV1" , 50, 0)
, ("metal2" , "CM2" , 51, 0)
, ("cut2" , "CV2" , 61, 0)
, ("metal3" , "CM3" , 62, 0)
, ("cut3" , "CV3" , 30, 0)
, ("metal4" , "CM4" , 31, 0)
]
common.loadGdsLayers( gdsLayersTable )