Modified an ad-hoc rule in CIFgen stating that "squares" and similar
rules do not get hierarchical processing. I am not sure why I added that exception, which clearly is not like "bound" or "net" in causing serious issues when used hierarchically. The current counterexample is the use in sky130A.tech for the NPC layer. Based on that usage, the exception has been relaxed to consider any "squares" and similar rule during hierarchical processing if followed by a "grow" operator. Possibly this is still not relaxed enough to capture all meaningful use cases, but should suffice for now.
This commit is contained in:
parent
25166f2f7c
commit
11c53bb6d5
26
cif/CIFgen.c
26
cif/CIFgen.c
|
|
@ -4418,6 +4418,11 @@ CIFGenLayer(op, area, cellDef, origDef, temps, hier, clientdata)
|
|||
* NOTE: Some opcodes (and whatever follows them) should never
|
||||
* be run during hierarchical processing. That includes BOUNDARY,
|
||||
* SQUARES/SLOTS, BBOX, and NET.
|
||||
*
|
||||
* Caveat: SQUARES/SLOTS followed by GROW can be used to define
|
||||
* an etch area around a contact; this should be considered a
|
||||
* special case that requires hierarchical processing on SQUARES/
|
||||
* SLOTS.
|
||||
*/
|
||||
|
||||
for ( ; op != NULL; op = op->co_next)
|
||||
|
|
@ -4717,8 +4722,11 @@ CIFGenLayer(op, area, cellDef, origDef, temps, hier, clientdata)
|
|||
case CIFOP_SQUARES:
|
||||
if (hier)
|
||||
{
|
||||
hstop = TRUE; /* Stop hierarchical processing */
|
||||
break;
|
||||
if ((op->co_next == NULL) || (op->co_next->co_opcode != CIFOP_GROW))
|
||||
{
|
||||
hstop = TRUE; /* Stop hierarchical processing */
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (CalmaContactArrays == FALSE)
|
||||
{
|
||||
|
|
@ -4734,8 +4742,11 @@ CIFGenLayer(op, area, cellDef, origDef, temps, hier, clientdata)
|
|||
case CIFOP_SQUARES_G:
|
||||
if (hier)
|
||||
{
|
||||
hstop = TRUE; /* Stop hierarchical processing */
|
||||
break;
|
||||
if ((op->co_next == NULL) || (op->co_next->co_opcode != CIFOP_GROW))
|
||||
{
|
||||
hstop = TRUE; /* Stop hierarchical processing */
|
||||
break;
|
||||
}
|
||||
}
|
||||
DBClearPaintPlane(nextPlane);
|
||||
cifPlane = nextPlane;
|
||||
|
|
@ -4748,8 +4759,11 @@ CIFGenLayer(op, area, cellDef, origDef, temps, hier, clientdata)
|
|||
case CIFOP_SLOTS:
|
||||
if (hier)
|
||||
{
|
||||
hstop = TRUE; /* Stop hierarchical processing */
|
||||
break;
|
||||
if ((op->co_next == NULL) || (op->co_next->co_opcode != CIFOP_GROW))
|
||||
{
|
||||
hstop = TRUE; /* Stop hierarchical processing */
|
||||
break;
|
||||
}
|
||||
}
|
||||
DBClearPaintPlane(nextPlane);
|
||||
cifPlane = nextPlane;
|
||||
|
|
|
|||
Loading…
Reference in New Issue