Got rid of one problem with timestamps, which was the requirement

to force an update on a child cell to match the timestamp of the
parent.  This is no longer done on read-only cells, although it
probably ought to be applied to all cells.  A timestamp should
change when a cell has been modified, but a parent cell should never
force a child cell to update its timestamp if the child cell has
not been modified.  The main problem is that "drc check" runs checks
on all child cells, and they then are marked as modified without
consideration of whether the child's DRC status changed.  A better
solution would be to avoid unnecessary updates by detecting a
change in DRC results, but for now, just disabling updates on
read-only cells (which can't be updated anyway) should suffice.
This commit is contained in:
R. Timothy Edwards 2025-11-29 13:24:23 -05:00
parent 98aa2f760a
commit ff718c3ecf
3 changed files with 14 additions and 3 deletions

View File

@ -1 +1 @@
8.3.579
8.3.581

View File

@ -4308,6 +4308,8 @@ CmdDrc(
#endif
TxPrintf("Error area #%d:\n", result);
if (DRCWhy(dolist, rootUse, &area, findonly)) break;
/* Check for interrupt or this will go into an infinite loop */
else if (SigInterruptPending) break;
drc_nth++;
}
else if (result < 0)

View File

@ -247,9 +247,18 @@ dbStampFunc(cellDef)
if (cellDef->cd_timestamp == timestamp) return 0;
if (!(cellDef->cd_flags & CDFIXEDSTAMP))
cellDef->cd_timestamp = timestamp;
/*
* Do not force a non-edit cell or a cell with a fixed timestamp
* to update its timestamp, as it cannot or should not. Just clear
* any flag suggesting that it needs a new timestamp.
*/
if (!(cellDef->cd_flags & (CDNOEDIT | CDFIXEDSTAMP)))
{
cellDef->cd_flags &= ~CDGETNEWSTAMP;
return 0;
}
cellDef->cd_timestamp = timestamp;
cellDef->cd_flags &= ~CDGETNEWSTAMP;
// printf("Writing new timestamp %d for %s.\n", timestamp, cellDef->cd_name);