Issie logo Issie

Constants Module

Functions and values

Function or value Description

clearanceCostWeight

Full Usage: clearanceCostWeight

Returns: float

What a unit of missing symbol clearance costs, relative to a unit of wire drawn. The exchange rate has a break-even that can be worked out rather than guessed. Separation's canonical move pushes a segment d further from a symbol edge; where the segment beyond it has zero length - which is how a route arrives at a port - both of its neighbours grow, so the move costs 2d of wire to buy d of clearance. Any weight above 2 accepts that move and any weight below rejects it, which is what the cost function did when it had no clearance term at all: separation was refused whole on every sheet with no overlap to pay for it. 5 leaves margin over the break-even without letting clearance outrank wire length so far that a long detour looks worth making: a 500-unit detour still has to buy 100 units of clearance before it is taken. Measured over the WireQuality corpus, 3 and 5 give identical wire, bends and crossings on every sheet - the plateau runs from just above the break-even - while 10 is over the far edge of it, flipping wrappedArrays to its worse phase and costing reg16x8 five crossings.

Returns: float

clearanceFromSymbol

Full Usage: clearanceFromSymbol

Returns: float

How far a segment ought to stand from a symbol it runs alongside. This is what calcSegPositions places one at when a symbol edge bounds its cluster, so it is the clearance separation is actually trying to achieve - which is what makes it the right thing for the acceptance rule to score.

Returns: float

extensionTolerance

Full Usage: extensionTolerance

Returns: float

How close are segment extensions caused by corner removal allowed to get to other elements? Maybe needs to be smaller than some otehr things for successful corner removal?

Returns: float

maxCallsToShiftHorizontalSeg

Full Usage: maxCallsToShiftHorizontalSeg

Returns: int
Returns: int

maxCornerSize

Full Usage: maxCornerSize

Returns: float
Returns: float

maxSegmentSeparation

Full Usage: maxSegmentSeparation

Returns: float
Returns: float

maxSettlingRounds

Full Usage: maxSettlingRounds

Returns: int

Most rounds of (horizontal, then vertical) separation. A round is only entered while the sheet is still improving, so this binds only where the two directions fight each other. Measured at 2, 3 and 5 over the WireQuality corpus and a 192-wire sheet: wire drawn, bends and crossings come out identical, and the extra rounds are time spent for nothing. Raising it is safe - the loop leaves early when a round does not improve the sheet - so if a design ever needs more, raise it and let the corpus say whether it helped.

Returns: int

minVisibleSegmentLength

Full Usage: minVisibleSegmentLength

Returns: float

Must be smaller than Buswire.nubLength Segments shorter than this are drawing artifacts - a port pair misaligned by a fraction of a pixel puts a jog this size in an otherwise straight wire - and separation must not treat one as a real segment: on the eep1 alu sheet a 0.04px jog became a movable line, was made the head of a same-net link whose union bounds were 359px long, and the cluster pass then dragged a genuinely long riser through a multiplexer by moving the invisible stub it was linked to. IsZero (epsilon 1e-7) is far too fine to catch these.

Returns: float

minWireLengthToSeparate

Full Usage: minWireLengthToSeparate

Returns: float
Returns: float

minWireSeparation

Full Usage: minWireSeparation

Returns: float
Returns: float

overlapCostWeight

Full Usage: overlapCostWeight

Returns: float

What two nets drawn on top of each other cost, per unit length, relative to a unit of wire drawn. Removing an overlap must always beat any saving in wire length.

Returns: float

overlapTolerance

Full Usage: overlapTolerance

Returns: float

lines within this distance of each other are considered to overlap

Returns: float

sameNetTrunkCapture

Full Usage: sameNetTrunkCapture

Returns: float

Same-net segments this close together are one line of the drawing and are linked, so that separation moves them as one and never pulls them apart. This used to be modernCirclePositionTolerance (2), which answers a different question: how close two coordinates must be to count as the same point when working out where a net crosses itself, so that a circle can be drawn there. A circle is what tells a reader that four wires meeting at a cross-roads are one net rather than two crossing - so that tolerance is about whether two things are at the same place, and two units is the right answer to it. It is the wrong answer to "are these close enough that they should be one line", which is what this is: a sink port a couple of units off its neighbours' gives that wire a trunk segment 2 away from theirs, which was then not linked, is movable where theirs are fixed, and so was pushed a full maxSegmentSeparation clear of a trunk it was almost on. Measured over the WireQuality corpus: 8, 10 and 12 all merge the stray wire back onto the trunk and change nothing else; 15 and above cost crossings after a drag without merging anything more. 10 is the middle of that, and is nubLength - a segment closer to another than a nub is long is not a separate line of the drawing.

Returns: float

separateCaptureOverlap

Full Usage: separateCaptureOverlap

Returns: float

corners with max length edge larger than this are not removed

Returns: float

settlingTolerance

Full Usage: settlingTolerance

Returns: float

Improvement in wiring cost below which another round is not worth keeping. Two layouts within this of each other are a tie, and a tie is broken towards not moving.

Returns: float

smallOffset

Full Usage: smallOffset

Returns: float
Returns: float

wireSeparationFromSymbol

Full Usage: wireSeparationFromSymbol

Returns: float

How far a wire routed AROUND a symbol clears its edge, when there is room. 15 is the pitch between two 2-input gate inputs: anything hugging tighter reads as touching, and separation's channel machinery will still squeeze below this where space demands it. The obstacle boxes routing shifts past are already expanded by minWireSeparation, so the shift sites aim (this - minWireSeparation) beyond them. It was 7 for years - equal to the box expansion, so the shifts aimed a hair past the expanded box and every wire passing a symbol hugged it at exactly 7px while wires in channels sat 15-30 apart.

Returns: float

Type something to start searching.