Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Analog fixes #76

Closed
wants to merge 121 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
07b4e5c
Add support for MOSIS & AMS350 (c35b4) in designflow.technos.
jpc-lip6 Oct 24, 2023
83d0275
The karakaze tool (AnalogDesign) was forgotten in the installation.
jpc-lip6 Oct 24, 2023
9fcfba9
Added Verilog driver for netlist export (#80)
lanserge Nov 2, 2023
e41024e
Split callback in Etesian to allow for derived placer classes
Coloquinte Nov 2, 2023
528a471
Introduce flags for placement callbacks in Etesian
Coloquinte Nov 2, 2023
89bb6a5
Introduce complete ripup functions for the router
Coloquinte Nov 2, 2023
4df2268
Simple clang format file
Coloquinte Oct 10, 2023
a11ed6d
Update coloquinte version for slightly better results and easier debu…
Coloquinte Nov 2, 2023
e2cb269
Extend .gitignore
Coloquinte Nov 2, 2023
7fddf91
Update Coloquinte version to 0.4.1 (bug fixes + area update infrastru…
Coloquinte Nov 7, 2023
f620d4e
Filter out redundant plugs that have no connection inside cell while …
lanserge Nov 10, 2023
8898b13
Fix _PDM link in README
rossmotley Nov 14, 2023
c4107af
Fix meson README link
rossmotley Nov 14, 2023
85b85c4
Failures in PyPi uploads should fail workflows
rossmotley Nov 14, 2023
e48a619
Update doxyfiles to latest doxygen
robtaylor Oct 20, 2023
bee26ff
Remove generated doc files
robtaylor Sep 2, 2023
14d2866
Add meson build infrastructure for doxygen based content
robtaylor Nov 17, 2023
54fd2f9
Update requirements and add missing pdm.lock
robtaylor Nov 3, 2023
fe2c6f5
Add meson build infrastructure for pelican webpage
robtaylor Nov 17, 2023
a3632b9
Fix header character usage - crashes with newer docutils
robtaylor Nov 17, 2023
34eb6b7
Add github pages workflow
robtaylor Nov 16, 2023
fed60b9
Fix some typos in documentation and a number of whitespace issues
robtaylor Nov 17, 2023
c2b5655
tweak readme
robtaylor Nov 16, 2023
d1117dc
Rename tabs.css into custom_tabs.css to avoid doxygen overwrite.
jpc-lip6 Nov 21, 2023
368a94f
Install Oroshi doc in the right place.
jpc-lip6 Nov 21, 2023
7ed1000
One less level in the left menu (was too wide).
jpc-lip6 Nov 21, 2023
9d282e7
New rule "install_docs" to build the documentation.
jpc-lip6 Nov 21, 2023
b446495
Fix the loading of initHook.py, use Python loading mechanism directly.
jpc-lip6 Nov 21, 2023
5e75036
Don't connect with M2 on M3 RoutingPads.
jpc-lip6 Nov 22, 2023
a7f4241
Do not protect with TrackMarkers M2 RoutingPads.
jpc-lip6 Nov 22, 2023
b2738cd
Duplicated ".spi" targets in pnrcheck designflow.
jpc-lip6 Nov 22, 2023
85ba249
Get version from git tag
robtaylor Dec 5, 2023
13d3489
Fix warning when compiling EtesianEngine
Coloquinte Nov 3, 2023
26ef494
Mention hTracksReservedMin in the documentation
Coloquinte Nov 27, 2023
1453979
Show track reserve options for what they are in viewer
Coloquinte Nov 27, 2023
147c95b
Hide max number of reserved tracks in doc
Coloquinte Nov 27, 2023
ba1e109
Add new purple color to debug Sky130 VexRam
Coloquinte Nov 29, 2023
29ee88d
Fix bloat factor reporting in Etesian (has wrong % symbol)
Coloquinte Nov 29, 2023
ccad0f7
Fix unclear printing in Etesian
Coloquinte Nov 30, 2023
97284e2
Use Coloquinte cell expansion instead of Etesian, so that target dens…
Coloquinte Nov 30, 2023
a887dda
Show placement effort in the logs
Coloquinte Nov 30, 2023
89c781b
Update etesian parameters in techno files
Coloquinte Nov 30, 2023
2e9dec1
Fix format specifier in flute printf
Coloquinte Dec 6, 2023
5470215
Use a maximum expanded width when using Coloquinte expansion
Coloquinte Dec 6, 2023
4d448f0
Fixed Verilog netlist export with presence of unconnected plugs (#96)
lanserge Dec 7, 2023
d4d4faa
Fix for cell net names with indexes be in proper Verilog format (#97)
lanserge Dec 7, 2023
403b669
GDS: Actually skip discarded text
gatecat Dec 6, 2023
17c66a7
remove python36-devel and liblemon build from docker file
robtaylor Dec 8, 2023
1cd5ad6
set pkgconfig path for cibuildwheel python
robtaylor Dec 8, 2023
5ab8588
Try adding linker script to ignore libpython symbols
robtaylor Dec 12, 2023
a727c6a
Try adding linker script to ignore libpython symbols
robtaylor Dec 12, 2023
b4bec2d
Just allow undefined symbols
robtaylor Dec 12, 2023
b09d526
set 'b_lundef=false' for the project
robtaylor Dec 12, 2023
4c4b97e
wip
robtaylor Dec 12, 2023
52bd8c1
Revert "wip"
robtaylor Jan 9, 2024
0b2bc9e
Revert "Revert "wip""
robtaylor Jan 9, 2024
fa6c711
Set write-all permission for ghpages workflow
robtaylor Jan 9, 2024
0ba89d0
anabatic: Fix connectivity for staircases
gatecat Jan 9, 2024
1a3a0c3
Meson: remove old build system artifacts
robtaylor Sep 29, 2023
96370a9
Intalling the techno files for gf180mcu_c4m from CRL.
jpc-lip6 Oct 20, 2023
1f02821
The designflow sv2v, svase & surelog were forgotten in the merges.
jpc-lip6 Oct 20, 2023
f96f42c
One more forgotten to install gf180mcu file.
jpc-lip6 Oct 20, 2023
b257a04
Must setup the Coriolis source directory in regression tests.
jpc-lip6 Oct 24, 2023
7b17f62
Create separate rules for meson configure & setup.
jpc-lip6 Nov 25, 2023
fed6fb8
New Rectilinear::getAsBiggestrectangles() method.
jpc-lip6 Nov 29, 2023
57caba6
In technos.setupCMOS(), find liberty from ALLIANCE_TOP instead of CEL…
jpc-lip6 Nov 29, 2023
346edee
Slightly clrearer display of C++ exception catched through Python.
jpc-lip6 Dec 4, 2023
dba04e0
Systematically throw an error in case of faulty contact topology.
jpc-lip6 Dec 4, 2023
dcc88ce
Reorganization of the size detection of RoutingPad.
jpc-lip6 Dec 5, 2023
1196603
Implementation of Pin Rectilinear Support
jpc-lip6 Dec 5, 2023
5941e43
Create the first technical log entry.
jpc-lip6 Dec 5, 2023
e76b4af
The karakaze tool (AnalogDesign) was forgotten in the installation.
jpc-lip6 Jan 10, 2024
3bd1ab7
Make the left menu *not* overlap the page contents.
jpc-lip6 Dec 6, 2023
9170826
Add all the .rst page dependencies to meson.buil.
jpc-lip6 Dec 6, 2023
f2f99b0
In GF180MCU techno, configuration now support HV or VH topologies.
jpc-lip6 Dec 18, 2023
b044a3e
In LefParser::_pinStdPostProcess(), improved way to choose H/V.
jpc-lip6 Dec 18, 2023
41388fa
In technos.setupGF180MCU_GF(), provide a flag to select HV or VH.
jpc-lip6 Dec 18, 2023
08437a5
Support for offgrid M1 & VH topologies (WIP 1).
jpc-lip6 Dec 18, 2023
54301c5
New type of LayerRoutingGauge : LocalOnly, for local interconnect.
jpc-lip6 Dec 21, 2023
52f918c
Do not process the blockages layers in FlattenPower (not needed).
jpc-lip6 Dec 21, 2023
9ea525f
A DebugSession was left open in Katana::PropagateCagedConstraints().
jpc-lip6 Dec 26, 2023
c8c639e
Create a new type of TrakElement : TrackBlockage.
jpc-lip6 Dec 26, 2023
3c3283b
More adjustements for the perpandicular track span & positions.
jpc-lip6 Dec 26, 2023
e6aff7e
Keep track of the position of the BreakpointWidget.
jpc-lip6 Dec 26, 2023
813f5e5
Display the "ripup ratio" in Katana::Statistics (NegociateWidow).
jpc-lip6 Dec 28, 2023
c1e7e65
Support saving & restoring positions and settings of graphic windows.
jpc-lip6 Dec 30, 2023
f44eb37
In Rectilinear, support for horizontal slicing.
jpc-lip6 Jan 1, 2024
610bb30
Support Rectilinear in the two setupPowerRails() (Etesian & Katana).
jpc-lip6 Jan 1, 2024
3b3f41a
Fix TrackBlockage::_getString() when the is not yet a track (transient).
jpc-lip6 Jan 1, 2024
6241de9
protectRoutingPads() call moved from ::digitalInit() to ::runGlobalro…
jpc-lip6 Jan 1, 2024
72e8ad4
Support for offgrid M1 & VH topologies (WIP 2).
jpc-lip6 Jan 5, 2024
f104a85
Support for offgrid M1 & VH topologies (WIP 3).
jpc-lip6 Jan 10, 2024
b50bfb2
Ignore Emacs backup files.
jpc-lip6 Jan 10, 2024
a76a5a8
Fix in oroshi.Stack, PMOS must be in nWell (not pWell).
jpc-lip6 Jan 10, 2024
0a19f66
Seems that when doc only is acivated, we no longer could compile.
jpc-lip6 Jan 10, 2024
ae3b873
Fixes in protectRoutingPads().
jpc-lip6 Jan 10, 2024
85f72f5
In selectRpComponent(), do not deflate VIAs in symbolic mode.
jpc-lip6 Jan 10, 2024
f231ab1
New Rectilinear::getAsBiggestrectangles() method.
jpc-lip6 Nov 29, 2023
e689345
Support for offgrid M1 & VH topologies (WIP 1).
jpc-lip6 Dec 18, 2023
b8767c2
Removing code duplication due to a bad merge in Rectilinear.
jpc-lip6 Jan 11, 2024
aebb4aa
Force DoglegDown when slackening and AutoSegment from a Terminal.
jpc-lip6 Jan 16, 2024
7e6df32
In NetBuilderHV, check for up density before moving up a global.
jpc-lip6 Jan 16, 2024
9a58e16
Added isUsable() and getFirstroutingLayer() proxies to Anabatic::Conf…
jpc-lip6 Jan 16, 2024
13bac95
Export RoutingLayerGauge::isHorizontal() & isVertical() to Python.
jpc-lip6 Jan 16, 2024
0bc1bdd
Add a failsafe in case the graphic style index no longer exists.
jpc-lip6 Jan 16, 2024
af654fe
Fix wrong import path.
jpc-lip6 Jan 16, 2024
eda39f4
Manage layer change for south terminals of a macro.
jpc-lip6 Jan 16, 2024
fa2ba40
More accurate search for obstacle of the H-Tree sub-branches.
jpc-lip6 Jan 16, 2024
f9190f2
Merge branch 'main' into analog-fixes
jpc-lip6 Jan 16, 2024
ad691f7
Update doxyfiles to latest doxygen
robtaylor Oct 20, 2023
27dad88
Add meson build infrastructure for doxygen based content
robtaylor Nov 17, 2023
4d2658a
Add meson build infrastructure for pelican webpage
robtaylor Nov 17, 2023
1a9f97e
Fix bloat factor reporting in Etesian (has wrong % symbol)
Coloquinte Nov 29, 2023
4fcce09
Fix unclear printing in Etesian
Coloquinte Nov 30, 2023
b36ecc7
Use Coloquinte cell expansion instead of Etesian, so that target dens…
Coloquinte Nov 30, 2023
ca3b2f1
Use a maximum expanded width when using Coloquinte expansion
Coloquinte Dec 6, 2023
2457d92
remove python36-devel and liblemon build from docker file
robtaylor Dec 8, 2023
a38aa77
Try adding linker script to ignore libpython symbols
robtaylor Dec 12, 2023
f3666d5
Try adding linker script to ignore libpython symbols
robtaylor Dec 12, 2023
5cce2ff
Set write-all permission for ghpages workflow
robtaylor Jan 9, 2024
9f5f996
Do not give the python linker script twice in meson.build
jpc-lip6 Jan 16, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/regression.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
cd ${{ github.workspace }}/coriolis-2.x/src/coriolis
make -f Makefile.LIP6 install install_alliance
make -f Makefile.LIP6 SRC_DIR=${{ github.workspace }}/coriolis-2.x/src install install_alliance
- name: Check for binaries
run: ls -1 ${{ github.workspace }}/coriolis-2.x/release/install/bin
- name: Run the reference set of designs
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*.pyc
*.log
*.bak
.#*

TAGS
GTAGS
Expand All @@ -24,6 +25,7 @@ build/
venv/
coriolis.egg-info/
.pdm-python
.doit.db

bootstrap/coriolis2.spec

Expand Down
17 changes: 12 additions & 5 deletions Makefile.LIP6
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,19 @@ $(CORIOLIS_SRC)/.pdm-plugins/bin/pdm: $(HOME)/.local/bin/pdm
@$(localpath) pdm install --no-self -d --plugins


wipe:
@$(localpath) pdm run meson setup ${BUILDDIR} --wipe -Dpython.install_env=prefix -Donly-docs=false


setup:
@$(localpath) pdm run meson setup ${BUILDDIR} --prefix=$(PREFIX) -Dpython.install_env=prefix -Donly-docs=false


configure:
@$(localpath) pdm run meson setup ${BUILDDIR} --prefix=$(PREFIX) -Dpython.install_env=prefix
@$(localpath) pdm run meson configure ${BUILDDIR} --prefix=$(PREFIX) -Dpython.install_env=prefix


install: check_dir $(CORIOLIS_SRC)/.pdm-plugins/bin/pdm configure
install: check_dir $(CORIOLIS_SRC)/.pdm-plugins/bin/pdm setup configure
@$(localpath) pdm run meson install -C $(BUILDDIR)
@echo ""; \
echo "============================================================================"; \
Expand All @@ -80,7 +88,6 @@ install: check_dir $(CORIOLIS_SRC)/.pdm-plugins/bin/pdm configure

install_docs: check_dir $(CORIOLIS_SRC)/.pdm-plugins/bin/pdm configure
@$(localpath) pdm run meson configure ${BUILDDIR} --prefix=$(PREFIX) \
-Donly-docs=true \
-Ddocs=true
@$(localpath) pdm run meson install -C $(BUILDDIR)

Expand All @@ -92,10 +99,10 @@ install_alliance:
sed -i 's,dirs="\\$$newdirs documentation",dirs="$$newdirs",' ./autostuff; \
./autostuff clean; \
./autostuff; \
mkdir -p $(BUILDDIR); \
mkdir -p $(BUILDDIR); \
cd $(BUILDDIR); \
$(ALLIANCE_SRC)/configure --prefix=$(PREFIX) --enable-alc-shared; \
make -j1 install
make -j1 install


clean_build: check_dir
Expand Down
8 changes: 6 additions & 2 deletions anabatic/src/AnabaticEngine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1177,7 +1177,10 @@ namespace Anabatic {
}
cleanupGlobal();

if (not _configuration->isTwoMetals()) relaxOverConstraineds();
if (not _configuration->isTwoMetals()) {
if (_configuration->getDirection((size_t)0) & Flags::Vertical)
relaxOverConstraineds();
}

_state = EngineActive;
}
Expand Down Expand Up @@ -1776,7 +1779,8 @@ namespace Anabatic {
UpdateSession::open();

for ( auto rp : rps ) {
if (not _configuration->selectRpComponent(rp))
bool ongrid = _configuration->selectRpComponent(rp);
if (not ongrid and not _configuration->isM1Offgrid())
cerr << Warning( "AnabaticEngine::computeEdgeCapacities(): %s has no components on grid.", getString(rp).c_str() ) << endl;

Point center = rp->getBoundingBox().getCenter();
Expand Down
29 changes: 15 additions & 14 deletions anabatic/src/AutoContact.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -392,38 +392,39 @@ namespace Anabatic {

void AutoContact::showTopologyError ( const std::string& message, Flags flags )
{
Component* anchor = NULL;
Horizontal** horizontals = new Horizontal* [10];
Vertical** verticals = new Vertical* [10];

if (not (flags & Flags::CParanoid)) cparanoid.setStreamMask( mstream::PassThrough );
Component* anchor = NULL;
Horizontal** horizontals = new Horizontal* [10];
Vertical** verticals = new Vertical* [10];
ostringstream strError;

strError << "In topology of " << this << "\n";
_getTopology ( base(), anchor, horizontals, verticals, 10 );

cparanoid << Error("In topology of %s",getString(this).c_str()) << endl;
if (anchor) cparanoid << " A: " << anchor << endl;
if (anchor) strError << " A: " << anchor << "\n";

for ( size_t i=0 ; (i<10) and (horizontals[i] != NULL); ++i ) {
AutoSegment* autoSegment = Session::lookup ( horizontals[i] );
if (autoSegment != NULL)
cparanoid << " " << (autoSegment->isGlobal()?'G':'L') << ": " << autoSegment << endl;
strError << " " << (autoSegment->isGlobal()?'G':'L') << ": " << autoSegment << "\n";
else
cparanoid << " ?: " << horizontals[i] << endl;
strError << " ?: " << horizontals[i] << "\n";
}

for ( size_t i=0 ; (i<10) and (verticals[i] != NULL); ++i ) {
AutoSegment* autoSegment = Session::lookup ( verticals[i] );
if (autoSegment != NULL)
cparanoid << " " << (autoSegment->isGlobal()?'G':'L') << ": " << autoSegment << endl;
strError << " " << (autoSegment->isGlobal()?'G':'L') << ": " << autoSegment << "\n";
else
cparanoid << " ?: " << verticals[i] << endl;
strError << " ?: " << verticals[i] << "\n";
}

cparanoid << " " << message << endl;
if (not (flags & Flags::CParanoid)) cparanoid.unsetStreamMask( mstream::PassThrough );

strError << " " << message << "\n";
Error error ( strError.str().c_str() );
delete [] horizontals;
delete [] verticals;

throw error;
}


Expand Down
23 changes: 22 additions & 1 deletion anabatic/src/AutoContactTerminal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,8 @@ namespace Anabatic {

ostringstream message;
if (not hasBadTopology()) {
if (getAnchor()->getLayer() == getLayer()) setFlags ( CntMetalOnly );
else unsetFlags( CntMetalOnly );
Box anchorBb = getAnchor()->getBoundingBox();
anchorBb.inflate( Session::getViaWidth (getAnchor()->getLayer())
- Session::getWireWidth(getAnchor()->getLayer()) );
Expand All @@ -475,6 +477,25 @@ namespace Anabatic {
setHeight( _segment->getContactWidth() );
}

if (canDrag()) {
AutoContact* opposite = _segment->getOppositeAnchor(this);
AutoSegment* perpandicular = opposite->getPerpandicular( _segment );
if (perpandicular) {
cdebug_log(145,0) << "Draging H interval ["
<< DbU::getValueString(getCBXMin()) << " "
<< DbU::getValueString(getCBXMax()) << "]" << endl;
Point onGrid = Session::getNearestGridPoint( Point(perpandicular->getAxis(),getY())
, getConstraintBox() );
DbU::Unit x = onGrid.getX();
x = std::min( x, getCBXMax() );
x = std::max( x, getCBXMin() );
setX( x );
cdebug_log(145,0) << "Dragging to X @" << DbU::getValueString(x)
<< " pitched:" << DbU::getValueString(onGrid.getX())
<< " " << getConstraintBox() << endl;
}
}

if (not getUConstraints(Flags::Vertical).contains(axis)) {
cdebug_log(145,0) << "Cached: " << _segment << endl;
message << "Terminal horizontal segment Y " << DbU::getValueString(axis)
Expand Down Expand Up @@ -503,7 +524,7 @@ namespace Anabatic {
AutoContact* opposite = _segment->getOppositeAnchor(this);
AutoSegment* perpandicular = opposite->getPerpandicular( _segment );
if (perpandicular) {
cdebug_log(145,0) << "Draging V interval ["
cdebug_log(145,0) << "Dragging V interval ["
<< DbU::getValueString(getCBYMin()) << " "
<< DbU::getValueString(getCBYMax()) << "]" << endl;
DbU::Unit y = perpandicular->getAxis();
Expand Down
23 changes: 18 additions & 5 deletions anabatic/src/AutoHorizontal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -386,13 +386,13 @@ namespace Anabatic {
int nativeSlack = nativeConstraints.getSize() / getPitch();

cdebug_log(149,0) << "Source constraint: " << constraints
<< " slack:" << slack
<< " native slack:" << nativeSlack << endl;
<< " slack:" << slack
<< " native slack:" << nativeSlack << endl;
cdebug_log(149,0) << "Perpand constraints on target: " << perpandConstraints << endl;
// Ugly: GCell's track number is hardwired.
if (isNonPrefSource or (nativeSlack < lowSlack) or (nativeSlack - slack < 3)) {
cdebug_log(149,0) << "Slackening from Source: " << source << endl;
_makeDogleg( source->getGCell(), Flags::NoFlags );
_makeDogleg( source->getGCell(), Flags::DoglegDown );
sourceSlackened = true;
} else if (slack < 10) {
halfSlackened = true;
Expand Down Expand Up @@ -430,7 +430,7 @@ namespace Anabatic {
<< " native slack:" << nativeSlack << endl;
if (isNonPrefTarget or (nativeSlack < lowSlack) or (nativeSlack - slack < 3)) {
cdebug_log(149,0) << "Slackening from Target: " << target << endl;
parallel->_makeDogleg( target->getGCell(), Flags::NoFlags );
parallel->_makeDogleg( target->getGCell(), Flags::DoglegDown );
targetSlackened = true;
} else if (slack < 10) {
halfSlackened = true;
Expand Down Expand Up @@ -541,6 +541,11 @@ namespace Anabatic {
{
_sourcePosition = getSourceU() - getExtensionCap(Flags::Source);
_targetPosition = getTargetU() + getExtensionCap(Flags::Target);
if (isNonPref()) {
DbU::Unit halfCap = getExtensionCap( Flags::NoFlags ) -1;
_sourcePosition -= halfCap;
_targetPosition += halfCap;
}
}


Expand All @@ -562,6 +567,11 @@ namespace Anabatic {
bool coherency = true;
DbU::Unit sourcePosition = _horizontal->getSource()->getX() - getExtensionCap(Flags::Source);
DbU::Unit targetPosition = _horizontal->getTarget()->getX() + getExtensionCap(Flags::Target);
if (isNonPref()) {
DbU::Unit halfCap = getExtensionCap( Flags::NoFlags ) -1;
sourcePosition -= halfCap;
targetPosition += halfCap;
}

if ( _sourcePosition != sourcePosition ) {
cerr << "extensionCap: " << DbU::getValueString(getExtensionCap(Flags::Source)) << endl;
Expand Down Expand Up @@ -879,7 +889,10 @@ namespace Anabatic {
} else if (Session::getRoutingGauge()->isVH()) {
upLayer = (depth < 2);
} else {
upLayer = (depth+1 <= Session::getConfiguration()->getAllowedDepth());
if ((depth > 0) and (flags & Flags::DoglegDown))
upLayer = not (Session::getConfiguration()->isUsable( depth-1 ));
else
upLayer = (depth+1 <= Session::getConfiguration()->getAllowedDepth());
}

size_t doglegDepth = depth + ((upLayer)?1:-1);
Expand Down
52 changes: 30 additions & 22 deletions anabatic/src/AutoSegment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -789,23 +789,29 @@ namespace Anabatic {
// cdebug_log(150,0) << "-> Custom cap (-duSource):" << DbU::getValueString(cap) << endl;
}
}
}

if (flags & Flags::Target) {
if (getFlags() & SegTargetTop ) cap = getViaToTopCap (depth);
else if (getFlags() & SegTargetBottom) cap = getViaToBottomCap(depth);
else cap = getViaToSameCap (depth);
// cdebug_log(150,0) << "getExtensionCap(): (target) flags:" << getFlags()
// << " VIA cap:" << DbU::getValueString(cap)
// << " t:" << (getFlags() & SegSourceBottom)
// << " b:" << (getFlags() & SegSourceTop)
// << endl;
if (not (flags & Flags::NoSegExt)) {
// cdebug_log(150,0) << "duTarget=" << DbU::getValueString(getDuTarget()) << endl;
if (getDuTarget() > cap) {
cap = getDuTarget();
// cdebug_log(150,0) << "-> Custom cap (+duTarget):" << DbU::getValueString(cap) << endl;
} else {
if (flags & Flags::Target) {
if (getFlags() & SegTargetTop ) cap = getViaToTopCap (depth);
else if (getFlags() & SegTargetBottom) cap = getViaToBottomCap(depth);
else cap = getViaToSameCap (depth);
// cdebug_log(150,0) << "getExtensionCap(): (target) flags:" << getFlags()
// << " VIA cap:" << DbU::getValueString(cap)
// << " t:" << (getFlags() & SegSourceBottom)
// << " b:" << (getFlags() & SegSourceTop)
// << endl;
if (not (flags & Flags::NoSegExt)) {
// cdebug_log(150,0) << "duTarget=" << DbU::getValueString(getDuTarget()) << endl;
if (getDuTarget() > cap) {
cap = getDuTarget();
// cdebug_log(150,0) << "-> Custom cap (+duTarget):" << DbU::getValueString(cap) << endl;
}
}
} else {
//cap = getViaToBottomCap( depth );
cap = getViaToSameCap( depth );
// cdebug_log(150,0) << "getExtensionCap(): (force bottom) flags:" << getFlags()
// << " VIA cap:" << DbU::getValueString(cap)
// << endl;
}
}

Expand All @@ -823,6 +829,7 @@ namespace Anabatic {

if (getLayer()->isSymbolic() and (cap < getWidth()/2)) cap = getWidth()/2;
if (not (flags & Flags::LayerCapOnly)) cap += getLayer()->getMinimalSpacing()/2;
// cdebug_log(150,0) << "getExtensionCap(): cap=" << DbU::getValueString(cap) << endl;
return cap;
}

Expand Down Expand Up @@ -2544,7 +2551,7 @@ namespace Anabatic {

cdebug_log(149,0) << "isSource:" << isSource << endl;

makeDogleg( from->getGCell(), Flags::NoCheckLayer );
makeDogleg( from->getGCell(), Flags::NoCheckLayer|Flags::NoCheckGCell );
if (doglegs.size() == index) {
cdebug_tabw(149,-1);
return NULL;
Expand Down Expand Up @@ -2697,7 +2704,7 @@ namespace Anabatic {
return 0;
}

if (doglegGCell->getSide(getDirection()).intersect(getSpanU())) {
if ((flags & Flags::NoCheckGCell) or doglegGCell->getSide(getDirection()).intersect(getSpanU())) {
cdebug_log(149,0) << "Dogleg in " << this << " spanU:" << getSpanU() << endl;
rflags = _makeDogleg( doglegGCell, flags );
} else {
Expand Down Expand Up @@ -2822,7 +2829,7 @@ namespace Anabatic {
DbU::Unit verticalWidth = Session::getDVerticalWidth();
if (not Session::getAnabatic()->getConfiguration()->isGMetal(hurricaneSegment->getLayer())) {
size_t depth = Session::getAnabatic()->getConfiguration()->getLayerDepth( hurricaneSegment->getLayer() );
if (depth > 2) {
if ((depth == 0) or (depth > 2)) {
horizontalLayer = verticalLayer = hurricaneSegment->getLayer();
horizontalWidth = Session::getAnabatic()->getConfiguration()->getWireWidth( depth );
verticalWidth = Session::getAnabatic()->getConfiguration()->getPWireWidth( depth );
Expand Down Expand Up @@ -3066,9 +3073,10 @@ namespace Anabatic {
} else
throw Error( badSegment, getString(source).c_str(), getString(target).c_str() );

if (wPitch > 1) segment->setFlags( SegWide );
if (source->canDrag() or target->canDrag()) segment->setFlags( SegDrag );
if (dir & Flags::UseNonPref) segment->setFlags( SegNonPref );
if (wPitch > 1) segment->setFlags( SegWide );
if (source->canDrag() or target->canDrag()) segment->setFlags( SegDrag );
if (dir & Flags::UseNonPref) segment->setFlags( SegNonPref );
if (dir & Flags::Unbreakable) segment->setFlags( SegUnbreakable );
if (dir.contains(Flags::UseNonPref|Flags::OnVSmall)) segment->setFlags( SegOnVSmall );

return segment;
Expand Down
19 changes: 16 additions & 3 deletions anabatic/src/AutoVertical.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ namespace Anabatic {

// Ugly: GCell's track number is hardwired.
if ((slack < lowSlack) or (nativeSlack - slack < 3)) {
_makeDogleg( source->getGCell(), Flags::NoFlags );
_makeDogleg( source->getGCell(), Flags::DoglegDown );
sourceSlackened = true;
} else if (slack < 10) {
halfSlackened = true;
Expand Down Expand Up @@ -348,7 +348,7 @@ namespace Anabatic {

// Ugly: GCell's track number is hardwired.
if ((slack < lowSlack) or (nativeSlack - slack < 3)) {
_makeDogleg( target->getGCell(), Flags::NoFlags );
_makeDogleg( target->getGCell(), Flags::DoglegDown );
targetSlackened = true;
} else if (slack < 10) {
halfSlackened = true;
Expand Down Expand Up @@ -432,6 +432,11 @@ namespace Anabatic {
{
_sourcePosition = getSourceU() - getExtensionCap(Flags::Source);
_targetPosition = getTargetU() + getExtensionCap(Flags::Target);
if (isNonPref()) {
DbU::Unit halfCap = getExtensionCap( Flags::NoFlags ) - 1;
_sourcePosition -= halfCap;
_targetPosition += halfCap;
}
}


Expand All @@ -453,6 +458,11 @@ namespace Anabatic {
bool coherency = true;
DbU::Unit sourcePosition = _vertical->getSource()->getY() - getExtensionCap(Flags::Source);
DbU::Unit targetPosition = _vertical->getTarget()->getY() + getExtensionCap(Flags::Target);
if (isNonPref()) {
DbU::Unit halfCap = getExtensionCap( Flags::NoFlags ) - 1;
sourcePosition -= halfCap;
targetPosition += halfCap;
}

if ( _sourcePosition != sourcePosition ) {
cerr << Error ( "%s\n Source position incoherency: "
Expand Down Expand Up @@ -740,7 +750,10 @@ namespace Anabatic {
} else if (Session::getRoutingGauge()->isVH()) {
upLayer = (depth < 2);
} else {
upLayer = (depth+1 <= Session::getConfiguration()->getAllowedDepth());
if ((depth > 0) and (flags & Flags::DoglegDown))
upLayer = not (Session::getConfiguration()->isUsable( depth-1 ));
else
upLayer = (depth+1 <= Session::getConfiguration()->getAllowedDepth());
}

size_t doglegDepth = depth + ((upLayer)?1:-1);
Expand Down
Loading
Loading