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

Rebase analog fixes #110

Merged
merged 51 commits into from
Jan 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
17bff6a
Add support for MOSIS & AMS350 (c35b4) in designflow.technos.
jpc-lip6 Oct 24, 2023
4ff63cf
The karakaze tool (AnalogDesign) was forgotten in the installation.
jpc-lip6 Oct 24, 2023
7926084
Intalling the techno files for gf180mcu_c4m from CRL.
jpc-lip6 Oct 20, 2023
1b31166
The designflow sv2v, svase & surelog were forgotten in the merges.
jpc-lip6 Oct 20, 2023
8aa6565
One more forgotten to install gf180mcu file.
jpc-lip6 Oct 20, 2023
118913c
Must setup the Coriolis source directory in regression tests.
jpc-lip6 Oct 24, 2023
4ca2809
Create separate rules for meson configure & setup.
jpc-lip6 Nov 25, 2023
60bc114
New Rectilinear::getAsBiggestrectangles() method.
jpc-lip6 Nov 29, 2023
4146bae
In technos.setupCMOS(), find liberty from ALLIANCE_TOP instead of CEL…
jpc-lip6 Nov 29, 2023
e8def68
Slightly clrearer display of C++ exception catched through Python.
jpc-lip6 Dec 4, 2023
33e5861
Systematically throw an error in case of faulty contact topology.
jpc-lip6 Dec 4, 2023
55678be
Reorganization of the size detection of RoutingPad.
jpc-lip6 Dec 5, 2023
845cd30
Implementation of Pin Rectilinear Support
jpc-lip6 Dec 5, 2023
af8c71f
Create the first technical log entry.
jpc-lip6 Dec 5, 2023
8485f0b
The karakaze tool (AnalogDesign) was forgotten in the installation.
jpc-lip6 Jan 10, 2024
95b4577
Make the left menu *not* overlap the page contents.
jpc-lip6 Dec 6, 2023
983cf4b
Add all the .rst page dependencies to meson.buil.
jpc-lip6 Dec 6, 2023
30861eb
In GF180MCU techno, configuration now support HV or VH topologies.
jpc-lip6 Dec 18, 2023
3829a80
In LefParser::_pinStdPostProcess(), improved way to choose H/V.
jpc-lip6 Dec 18, 2023
246fa6d
In technos.setupGF180MCU_GF(), provide a flag to select HV or VH.
jpc-lip6 Dec 18, 2023
04fde50
Support for offgrid M1 & VH topologies (WIP 1).
jpc-lip6 Dec 18, 2023
1a98984
New type of LayerRoutingGauge : LocalOnly, for local interconnect.
jpc-lip6 Dec 21, 2023
d4105d8
Do not process the blockages layers in FlattenPower (not needed).
jpc-lip6 Dec 21, 2023
65cae59
A DebugSession was left open in Katana::PropagateCagedConstraints().
jpc-lip6 Dec 26, 2023
aff70ef
Create a new type of TrakElement : TrackBlockage.
jpc-lip6 Dec 26, 2023
b715212
More adjustements for the perpandicular track span & positions.
jpc-lip6 Dec 26, 2023
e8d5582
Keep track of the position of the BreakpointWidget.
jpc-lip6 Dec 26, 2023
b624c77
Display the "ripup ratio" in Katana::Statistics (NegociateWidow).
jpc-lip6 Dec 28, 2023
4db450e
Support saving & restoring positions and settings of graphic windows.
jpc-lip6 Dec 30, 2023
5927fe4
In Rectilinear, support for horizontal slicing.
jpc-lip6 Jan 1, 2024
c607d43
Support Rectilinear in the two setupPowerRails() (Etesian & Katana).
jpc-lip6 Jan 1, 2024
f7a339a
Fix TrackBlockage::_getString() when the is not yet a track (transient).
jpc-lip6 Jan 1, 2024
b03c7e3
protectRoutingPads() call moved from ::digitalInit() to ::runGlobalro…
jpc-lip6 Jan 1, 2024
bdc035f
Support for offgrid M1 & VH topologies (WIP 2).
jpc-lip6 Jan 5, 2024
6d37f7c
Support for offgrid M1 & VH topologies (WIP 3).
jpc-lip6 Jan 10, 2024
9f675e8
Ignore Emacs backup files.
jpc-lip6 Jan 10, 2024
72a4e80
Fix in oroshi.Stack, PMOS must be in nWell (not pWell).
jpc-lip6 Jan 10, 2024
508e572
Seems that when doc only is acivated, we no longer could compile.
jpc-lip6 Jan 10, 2024
a8eff15
Fixes in protectRoutingPads().
jpc-lip6 Jan 10, 2024
9df0b5c
In selectRpComponent(), do not deflate VIAs in symbolic mode.
jpc-lip6 Jan 10, 2024
76322a9
New Rectilinear::getAsBiggestrectangles() method.
jpc-lip6 Nov 29, 2023
4287835
Support for offgrid M1 & VH topologies (WIP 1).
jpc-lip6 Dec 18, 2023
26d1428
Removing code duplication due to a bad merge in Rectilinear.
jpc-lip6 Jan 11, 2024
4d18fc6
Force DoglegDown when slackening and AutoSegment from a Terminal.
jpc-lip6 Jan 16, 2024
8f74dc4
In NetBuilderHV, check for up density before moving up a global.
jpc-lip6 Jan 16, 2024
aab4c5a
Added isUsable() and getFirstroutingLayer() proxies to Anabatic::Conf…
jpc-lip6 Jan 16, 2024
533b102
Export RoutingLayerGauge::isHorizontal() & isVertical() to Python.
jpc-lip6 Jan 16, 2024
feff2de
Add a failsafe in case the graphic style index no longer exists.
jpc-lip6 Jan 16, 2024
e8ed673
Fix wrong import path.
jpc-lip6 Jan 16, 2024
1418f47
Manage layer change for south terminals of a macro.
jpc-lip6 Jan 16, 2024
758fe3a
More accurate search for obstacle of the H-Tree sub-branches.
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)) {
Copy link
Collaborator

@Coloquinte Coloquinte Jan 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's unclear to me what's going on here. Why is depth 1 special?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mmm. It means that if either we are at depth 0 (M1) or above depth 3 (M3), we use the specific wire width and perpandicular pitch of those layers. Otherwise (M2 or M3) we use the default defined wire width and perpandicular. Re-reading that code make me thinks I could do it in a more clear way.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe at least commenting it, as it's difficult to understand for someone that doesn't know the codebase

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. But, this is typically something I should rewrite and cleanup.

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