diff --git a/VERSION b/VERSION index c2e2d718..6e70b3e3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.329 +8.3.330 diff --git a/commands/CmdFI.c b/commands/CmdFI.c index d856dbd2..0c8a2093 100644 --- a/commands/CmdFI.c +++ b/commands/CmdFI.c @@ -2004,7 +2004,10 @@ CmdFlatten(w, cmd) toplabels = (invert) ? FALSE : TRUE; break; case 'p': - doports = (invert) ? FALSE : TRUE; + if (!strncmp(cmd->tx_argv[i] + 3, "prop", 4)) + xMask = (invert) ? CU_DESCEND_ALL : CU_DESCEND_PROP_FLAT; + else + doports = (invert) ? FALSE : TRUE; break; case 's': xMask = (invert) ? CU_DESCEND_NO_SUBCKT : CU_DESCEND_ALL; @@ -2014,7 +2017,7 @@ CmdFlatten(w, cmd) break; default: TxError("options are: -nolabels, -nosubcircuits, -noports, " - "-novendor, -dotoplabels, -dobox\n"); + "-novendor, -dotoplabels, -doproperty, -dobox\n"); break; } } diff --git a/database/DBcellsubr.c b/database/DBcellsubr.c index d9e6ee8c..b9c60b47 100644 --- a/database/DBcellsubr.c +++ b/database/DBcellsubr.c @@ -64,6 +64,8 @@ DBDescendSubcell(use, xMask) CellUse *use; unsigned int xMask; { + bool propfound; + /* Check single bit (window ID) or zero */ if (((xMask - 1) & xMask) == 0) return ((use->cu_expandMask & xMask) == xMask); @@ -91,6 +93,16 @@ DBDescendSubcell(use, xMask) case CU_DESCEND_NO_VENDOR: return (use->cu_def->cd_flags & CDVENDORGDS) ? FALSE : TRUE; + case CU_DESCEND_PROP_FLAT: + if (use->cu_expandMask == CU_DESCEND_SPECIAL) + return TRUE; + else + { + /* Descend only into cells marked with property "flatten" */ + DBPropGet(use->cu_def, "flatten", &propfound); + return (propfound) ? TRUE : FALSE; + } + case CU_DESCEND_NONE: return FALSE; } diff --git a/database/database.h.in b/database/database.h.in index c011daad..2c622916 100644 --- a/database/database.h.in +++ b/database/database.h.in @@ -559,6 +559,7 @@ typedef struct celluse #define CU_DESCEND_NO_VENDOR 0x0006 /* Descend no vendor-GDS subcells */ #define CU_DESCEND_NO_LOCK 0x0007 /* Descend unlocked subcells only */ #define CU_DESCEND_NONE 0x0009 /* Descend no subcells */ +#define CU_DESCEND_PROP_FLAT 0x000a /* Descend by property string "flatten" */ /* * Declare tile type structure for non-manhattan geometry diff --git a/doc/html/dump.html b/doc/html/dump.html index 2a25e854..052b407b 100644 --- a/doc/html/dump.html +++ b/doc/html/dump.html @@ -25,16 +25,20 @@ Copy contents of the indicated cell into the current edit cell.
- dump cell [child child_refpoint] + dump cell [orientation] + [child child_refpoint] [parent parent_refpoint]diff --git a/doc/html/flatten.html b/doc/html/flatten.html index 5fedfb9e..6cd5639e 100644 --- a/doc/html/flatten.html +++ b/doc/html/flatten.html @@ -30,8 +30,8 @@ Flatten edit cell into the indicated destination cell. where cellname is the name of a cell definition to be created, and into which the flattened geometry will be placed. option may be one of -nolabels, -nosubcircuits, - or -noports, -novendor, -dotoplabels, and - -dobox. + or -noports, -novendor, -dotoplabels, + -doproperty, and -dobox. @@ -63,6 +63,11 @@ Flatten edit cell into the indicated destination cell.
where cell is the name of the cell whose contents are to be copied, and optional child_refpoint and parent_refpoint are coordinate pairs of x y values, - or keywords ll, lr, ul, or ur. The - syntax and use of the reference points is the same as for the - getcell command. + or keywords ll, lr, ul, or ur. + The optional orientation may be any valid orientation + (flip or rotation), such as h, v, 90, + 180, or 270. + The syntax and use of the orientation and reference points is the + same as for the getcell command.