From cc4eef4eb1491576f03e0b2bf4db1a7a1e8dc4bc Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Wed, 5 Jul 2023 12:37:56 -0400 Subject: [PATCH] Added a (obvious, in retrospect) additional automatic handling of nets to be avoided for running antenna gate and diffusion area checks when doing "lef write", which is to check if the pin of the net is flagged with use "power" or use "ground". This avoids the need to use the (recently added) "lef nocheck" option (although that still exists as an additional way to control which nets do and do not get checked). --- VERSION | 2 +- doc/html/lef.html | 12 ++++++++++++ lef/lefWrite.c | 16 +++++++++++++--- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/VERSION b/VERSION index be769205..3411c173 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.409 +8.3.410 diff --git a/doc/html/lef.html b/doc/html/lef.html index c387cf64..c632dc23 100644 --- a/doc/html/lef.html +++ b/doc/html/lef.html @@ -76,6 +76,18 @@ LEF-format input and output itself would be written to a DEF file.
Options -hide, -tech, and -toplayer are the same as for the lef write command. +
nocheck [netname ...]|[none] +
Do not check for antenna diffusion and gate area on the nets with + the names given as option netname. + Any number of net names may be given as arguments. Typically, + power and ground nets should not need these checks. If the nets + are attached to port labels that have been flagged with the use + "power" or "ground", then these nets will be + skipped automatically. If not, then this command option provides + an alternative way to avoid running the checks, which can cause + a huge performance hit when generating a LEF view of a large + layout. With the single argument "none", removes the + list of net names for which antenna checks should be skipped.
datestamp [value|default]
Force all cell definitions generated from LEF macros to have the datestamp (timestamp) of value. This can be used to diff --git a/lef/lefWrite.c b/lef/lefWrite.c index 7dcc6388..aed92f05 100644 --- a/lef/lefWrite.c +++ b/lef/lefWrite.c @@ -1442,12 +1442,22 @@ lefWriteMacro(def, f, scale, setback, pinonly, toplayer, domaster) scx.scx_area = labr; SelectClear(); - // Check for net names to ignore for antenna checks. ignored = FALSE; - for (lnn = lefIgnoreNets; lnn; lnn = lnn->lnn_next) - if (!strcmp(lnn->lnn_name, lab->lab_text)) + + // Ports that have been flagged as power or ground should not be + // checked for antenna diffusion and gate area. + + if ((lab->lab_flags & PORT_DIR_MASK) != 0) + if (((lab->lab_flags & PORT_USE_MASK) == PORT_USE_POWER) || + ((lab->lab_flags & PORT_USE_MASK) == PORT_USE_GROUND)) ignored = TRUE; + // Check for net names to ignore for antenna checks. + if (!ignored) + for (lnn = lefIgnoreNets; lnn; lnn = lnn->lnn_next) + if (!strcmp(lnn->lnn_name, lab->lab_text)) + ignored = TRUE; + if (!ignored || (setback != 0)) SelectNet(&scx, lab->lab_type, 0, NULL, FALSE);