Magic 8.3 Revisions
Magic 8.2 Revisions
Magic 8.1 Revisions
Magic 8.0 Revisions
Magic 7.5 Revisions
Magic 7.4 Revisions
Magic 7.3 Revisions
Magic 7.2 Revisions
- posted: December 26, 2024 at 2:00am version: 8.3 revision: 508
Implemented a new CIF/GDS generation operator option for "bloat-all" which is "bloat-all types1 types2 distance" where the "distance" value is a maximum amount to grow. It is not (that I know of) particularly useful for generating output GDS, but it is very useful for generating temporary layers for DRC checks, especially things like determining tap distance for latch-up rules. The alternative (used in the sky130 tech file) is a tedious step-by-step "grow" followed by "and-not". This rule option is much cleaner to implement and computes faster (although it is still a boolean operator and is much slower than an edge rule).
- posted: December 17, 2024 at 2:00am version: 8.3 revision: 507
Corrected an error with the bloat-all CIF operator in which bloat-all would fail to operate from the top layer of a contact type due to the use of DBplane(type) instead of counting all planes of the contact.
- posted: December 13, 2024 at 2:00am version: 8.3 revision: 506
Corrected the run-length wide-spacing rule so that it correctly identifies areas which meet the proper definition of run-length (both edges are parallel for the run-length distance or more). Previously, errors were getting triggered for geometry where only one edge exceeded the run-length distance.
- posted: December 9, 2024 at 2:00am version: 8.3 revision: 505
Extended the "cifmaxwidth" function to include the option "both", which has the same meaning as the "maxwidth" function ("both" checks either tile dimension to see if it exceeds the maximum). This is a simple per-tile check and assumes that violations do not occur across multiple tiles. This should be sufficient for most checks.
- posted: December 7, 2024 at 2:00am version: 8.3 revision: 504
Extended the device parameters to allow a terminal width that is different from the device (i.e., gate) width, for devices that do not define a MOS-like gate spanning the width of the device. This is restricted to the assumption that the terminal is rectangular and therefore a simple width and length can be derived from the area and perimeter. Also, length is defined as the smaller dimension and width as the larger dimension. For additional restrictions, see the updated documentation. This was added to allow correct width and length extraction of a bipolar emitter window, but may be more generally useful.
Additional coding to handle discovery of terminal types on different planes of a device that are connected to a multi-tile device. This is a more general solution than previously coded, in which only the first tile of a device would be searched for terminals on other planes, which was only guaranteed to work if the device was represented by a single tile.
Also: Corrected two errors with the wiring tool: (1) Ignore "angles"-type width rules when calculating the default metal width DRC rule (this width when present will always be larger than the minimum metal width), and (2) If an exiting wire is larger than the contact size, then set the contact size such that the contact PLUS the surrounding metal is the width of the exiting wire. The existing code sets the contact size itself to the width of the exiting wire, such that when surrounding material is added, the contact is larger than it needs to be. The fix to (1) will also fix other places where the default DRC width rule is computed, which includes LEF and DEF handling and computing rendered text sizes when reading GDS.
- posted: December 3, 2024 at 2:00am version: 8.3 revision: 503
Corrected an error in which DRC rules for width of material drawn at a 45 degree angle will shadow the DRC rule for the material drawn orthogonally (that is, the DRC rule for the distance between orthogonal shapes will be eliminated from the rule deck).
- posted: November 27, 2024 at 2:00am version: 8.3 revision: 502
Corrected a long-standing crash condition that happens when a generated cell is modified multiple times. If the original cell is orphaned (no longer used anywhere in the design), it is deleted. However, an instance of the cell may exist in the secondary select buffer if the cell was previously moved or copied, and an attempt to do another move or copy will clear the secondary select buffer, encounter the deleted cell, and crash the program.
- posted: November 20, 2024 at 2:00am version: 8.3 revision: 501
Modified behavior of the "property device" value. It was previously ignoring the parameters of the entire cell including the device being overridden by the property, causing the output to be wrong. The parameters should always be written out to the .ext file, including the device whose output is being overridden.
- posted: November 15, 2024 at 2:00am version: 8.3 revision: 500
Tracked down an obscure error that was causing a property mismatch in the SkyWater sky130_fd_io__top_pwrdetv2 circuit because a resistor with ends shorted together was being assigned an incorrect length and width. This was due to the similarity in characteristics of the boundary vector between a shorted resistor and an annular resistor. The terminals need to be checked for shorted ends to disambiguate the two cases.
- posted: November 8, 2024 at 2:00am version: 8.3 revision: 499
Coded around an issue where the antenna violation checker comes up with zero gate error (and was reporting an infinite antenna ratio). For now, just ignoring the zero-area case. However, since the procedure is supposed to be looping through nets connected to specific devices in the .ext file, then every entry is supposed to have non-zero area, so there is some underlying problem here that needs to be fixed.
- posted: November 3, 2024 at 2:00am version: 8.3 revision: 498
Corrected a long-standing but rare error in which diagonal tiles surrounding a device tile may cause the device to be extracted with the wrong node (picking up the node from the wrong side of the diagonal tile). Added extra handling to capture the case where two ports on two different nets are merged when using "ext2spice short" (previously it was handling only ports on the same net). Also: Removed the redundant readline-4.3 from the readline/ directory; only readline/readline is left, which is version 4.3.
- posted: October 11, 2024 at 2:00am version: 8.3 revision: 497
Corrected an error introduced in yesterday's commits by a combination of a syntax cleanup and an incorrect declaration. See github issue
Revised the previous commit after discussion with Darryl Miles on the possible ways that other textio routines could affect the string contents.
- posted: October 10, 2024 at 2:00am version: 8.3 revision: 496
Added a missing description of the "flatten" property, which is documented briefly in the "flatten" command reference page, but no in the "property" command reference page.
HashGetValue: warning: comparison between pointer and integer
Also: DBPropGet(): error: assignment to 'char *' from 'ClientData'
Also: database/DBio.c: error: assignment to 'char *' from 'ClientData'
Also: DBWelement.c: passing argument 1 of 'TxPrintf' from incompatible pointer type
Also: HashLookOnly(): passing argument 2 of 'HashLookOnly' makes pointer from integer without a cast
Also: graphics: multiple definition of `various_x11_symbols'
Also: readline: define _XOPEN_SOURCE at the top of files
Also: SimSelect.c: type defaults to 'int' in declaration of 'RsimErrorMsg'
Also: DLONG_PREFIX is %ld on x86_64 LP64
Also: ExtBasic.c: comparison between pointer and integer
Also: ExtHier.c: format '%ld' expects argument of type 'long int', but .. 'dlong'
Also: ExtUnique.c: '_uq' directive writing 3 bytes into a region of size between 1 and 1024
Also: ResPrint.c: '%s' directive writing 2 bytes into a region of size between 1 and 1000
Also: SimRsim.c: directive writing 1 byte into a region of size between 0 and 255
Also: txOutput.c:408: warning: missing sentinel in function call
Also: niceabort.c: '%s' directive writing up to 199 bytes into a region of size 177
Also: defWrite.: '%.10g' directive writing between 1 and 17 bytes into a region of size 12
Also: grouteCrss.c: '%s' directive writing up to 1023 bytes into a region of size 227
Also: DBio.c: resolve warnings and use snprintf()
Also: graphics: windowname[] potential buffer overrun warning
Also: appimage/Dockerfile: fix CentOS7 based docker build due to EOL
Also: DBcellcopy.c: fix warning: self-comparison always evaluates to false
Also: lefTech.c: fix: default value logic error
Also: rtrStem.c: fix: warning: statement with no effect
Also: NMbutton.c: fix: warning: statement with no effect
Also: DRCsubcell.c: fix: warning: value computed is not used
Also: DRCtech.c: warning: use of logical '&&' with constant operand
Also: GCC14: warning: missing braces around initializer
Also: ResReadSim.c: warning: this 'if' clause does not guard...
Also: CIFgen.c: warning: this 'for' clause does not guard...
Also: geofast.h: warning: this 'else' clause does not guard...
Also: mzMain.c: warning: this 'else' clause does not guard...
Also: PlowTest.c: warning: enumeration value 'PC_ERROR' not handled in switch
Also: CIFrdcl.c: warning: comparison between two arrays
Also: 4 x warning: suggest explicit braces to avoid ambiguous 'else'
Also: 37 x warning: array subscript has type 'char'
Also: bpEnum.h: warning: suggest parentheses around assignment used as truth value
Also: 36 x warning: suggest parentheses around assignment used as truth value
Also: 42 x warning: suggest parentheses around assignment used as truth value
Also: 38 x warning: suggest parentheses around assignment used as truth value
Also: 35 x warning: suggest parentheses around assignment used as truth value
Also: 22 x warning: suggest parentheses around assignment used as truth value
Also: 17 x warning: suggest parentheses around assignment used as truth value
Also: grTk3.c: warning: suggest parentheses around '-' in operand of '&'
Also: 12 x warning: suggest parentheses around '&&' within '||'
Also: plotPNM.c:521:5: warning: statement with no effect
Also: DRCtech.c:4141:21: warning: suggest parentheses around comparison in operand of '=='
Also: DBcellsrch.c:2249:22: warning: too many arguments in call to 'dbMovePlane'
Also: DBio.c:1604:65: warning: too many arguments in call to 'dbReadOpen'
Also: selOps.c:1000:70: warning: too many arguments in call to 'selShortFindForward'
Also: lefRead.c:1334:63: warning: too few arguments in call to 'LefPaintPolygon'
Also: DBio.c: warning: 'sscanf' may overflow; destination buffer in argument ...
Also: irRoute.c: warning: expression which evaluates to zero treated as a null pointer ...
Also: ExtBasic.c: warning: incompatible pointer types passing 'NodeRegion *' ...
Also: plotHP.c: warning: incompatible pointer types passing 'int *' to ...
Also: strings.h: add #include required when strict
Also: netlist.c: etext symbol for __clang__
Also: CmdCD.c: 'option' is used uninitialized
Also: DRCcif.c: 'thislayer' is used uninitialized
Also: EFvisit.c: warning: misleading indentation;
Also: ExtBasic.c: warning: variable ... is used uninitialized whenever
Also: grTk3.c: warning: variable 'font' is used uninitialized
Also: grTOGL3.c: warning: variable 'font' is used uninitialized
Also: PlowRandom.c: warning: variable 'f2' is used uninitialized
Also: selOps.c: warning: variable 'type' is used uninitialized
Also: txCommands.c: warning: variable ... is used uninitialized whenever
Also: macros.c: warning: variable 'kc' is used uninitialized
Also: set.c: warning: variable 'result' is used uninitialized
Also: CalmaRdcl.c: warning: variable 'rtype' is used uninitialized
Also: CalmaRdpt.c: warning: variable 'rtype' is used uninitialized
Also: CalmaWrite.c: warning: variable 'rtype' is used uninitialized
Also: CalmaWriteZ.c: warning: variable 'rtype' is used uninitialized
Also: plotPNM.c: warning: variable 'strip' is used uninitialized
Also: irRoute.c: warning: variable '...' is used uninitialized
Also: tclmagic.c: warning: variable 'arg0' is used uninitialized
Also: gaMain.c: warning: variable 'errs' is used uninitialized
Also: gaStem.c: warning: variable '...' is used uninitialized
Also: CalmaRead.c: warning: variable 'libnameptr' is used uninitialized
Also: Updated the version to go along with a bunch of pull request merges from syntax and error cleanup work done by Darryl Miles (thanks, Darryl!).
- posted: October 8, 2024 at 2:00am version: 8.3 revision: 495
Corrected an error in which "extract unique noports" and "extract unique notopports" both fail to work correctly because an attempt some time ago to avoid issuing warnings about shorted port names when using those options was changed in the wrong line.
- posted: October 4, 2024 at 2:00am version: 8.3 revision: 494
Corrected the "bloat-all" function so that it behaves properly on angled edges. This is a rare case and so has never come up before, but can happen especially on transistors with gate or diffusion with 45 degree chamfers or flanges. Thanks to Mark Martin for providing the use case.
- posted: October 2, 2024 at 2:00am version: 8.3 revision: 493
database/DBio.c: Fix MAGIC_WRAPPER #endif to fix CI WASM build
gcr/gcrShwFlgs.c: Likely overrunning write
Also: lef/defWrite.c: Too few arguments to formatting function
Also: lef/defWrite.c: Too few arguments to formatting function
Also: router/rtrCmd.c: Incorrect return-value check for a 'scanf'-like function
Also: graphics/grDStyle.c: Incorrect return-value check for a 'scanf'-like function
Also: graphics/grCMap.c: Incorrect return-value check for a 'scanf'-like function
Also: gcr/gcrDebug.c: Incorrect return-value check for a 'scanf'-like function
Also: extract/ExtBasic.c: Incorrect return-value check for a 'scanf'-like function
Also: extract/ExtTech.c: Incorrect return-value check for a 'scanf'-like function
Also: database/DBtech.c: Incorrect return-value check for a 'scanf'-like function
Also: cmwind/CMWcmmnds.c: Incorrect return-value check for a 'scanf'-like function
Also: database/DBcellcopy.c: Call to function with fewer arguments than declared parameters
Also: database/DBcellname.c: Call to function with fewer arguments than declared parameters
Also: textio/txCommands.c: Wrong type of arguments to formatting function
Also: textio/txCommands.c: Wrong type of arguments to formatting function
Also: textio/txCommands.c: Wrong type of arguments to formatting function
Also: utils/undo.c: Wrong type of arguments to formatting function
Also: utils/undo.c: Wrong type of arguments to formatting function
Also: commands/CmdLQ.c: Call to function with fewer arguments than declared parameters
Also: utils/main.c: Call to function with fewer arguments than declared parameters
Also: utils/main.c: LefRead() Call to function with fewer arguments than declared parameters
Also: utils/main.c: DefRead() Call to function with fewer arguments than declared parameters
Also: select/selOps.c: CmdFindNetProc() Call to function with fewer arguments than declared parameters
Also: resis/ResSimple.c: ResGetDevice(): Call to function with fewer arguments than declared parameters
Also: cif/CIFgen.c: CmdFindNetProc() Call to function with fewer arguments than declared parameters
Also: calma/CalmaRdcl.c: calmaFindCell() Call to function with fewer arguments than declared parameters
Also: ext2sim/ext2sim.c: EFDone() Call to function with fewer arguments than declared parameters
Also: ext2spice/ext2spice.c: EFDone() Call to function with fewer arguments than declared parameters
Also: extcheck/extcheck.c: EFDone() Call to function with fewer arguments than declared parameters
Also: extflat/EFantenna.c: EFDone() Call to function with fewer arguments than declared parameters
Also: database/DBcellsrch.c: Wrong type of arguments to formatting function
Also: plow/PlowTest.c: Wrong type of arguments to formatting function
Also: plow/PlowTest.c: Wrong type of arguments to formatting function
Also: plow/PlowTest.c: Wrong type of arguments to formatting function
Also: resis/ResDebug.c: Wrong type of arguments to formatting function
Also: resis/ResRex.c: Wrong type of arguments to formatting function
Also: extract/ExtBasic.c: Incorrect return-value check for a 'scanf'-like function
Also: extract/ExtBasic.c: Incorrect return-value check for a 'scanf'-like function
Also: ext2spice/ext2spice.c: %x => (intmax_t) %lx
Also: commands/CmdWizard.c: %x => (intmax_t) %lx
Also: extract/ExtTech.c: Too few arguments to formatting function
Also: extract/ExtTech.c: Too few arguments to formatting function
Also: grouter/grouteTest.c: Wrong type of arguments to formatting function
Also: grouter/grouteMaze.c: Wrong type of arguments to formatting function
Also: windows/windDebug.c: Wrong type of arguments to formatting function
Also: sim/SimExtract.c: extEnumTilePerim() Call to function with fewer arguments than declared parameters
Also: lef/defWrite.c: Call to function with fewer arguments than declared parameters
Also: resis/ResMerge.c: Too few arguments to formatting function
Also: database/DBio.c: Redundant null check due to previous dereference
Also: windows/windDisp.c: Redundant null check due to previous dereference
Also: resis/ResDebug.c: %.2f Wrong type of arguments to formatting function
Also: gcr/gcrDebug.c: (intmax_t) %ld Wrong type of arguments to formatting function
Also: gcr/gcrDebug.c: Wrong type of arguments to formatting function
Also: extract/ExtTest.c: Too few arguments to formatting function
Also: extract/ExtHier.c: Wrong type of arguments to formatting function
Also: windows/windDebug.c: Wrong type of arguments to formatting function
Also: graphics/grTk1.c: Wrong type of arguments to formatting function
Also: ext2spice/ext2spice.c: Multiplication result converted to larger type
Also: drc/DRCbasic.c: Multiplication result converted to larger type
Also: extflat/EFvisit.c: Multiplication result converted to larger type
Also: extract/ExtCouple.c: Multiplication result converted to larger type
Also: extract/ExtBasic.c: Multiplication result converted to larger type
Also: lef/defWrite.c: Multiplication result converted to larger type
Also: plot/plotPNM.c: Multiplication result converted to larger type
Also: debug/debugFlags.c: Wrong type of arguments to formatting function
Also: debug/debugFlags.c: Wrong type of arguments to formatting function
Also: database/DBtiles.c: Multiplication result converted to larger type
Also: drc/DRCcif.c: Multiplication result converted to larger type
Also: ext2spice/ext2hier.c: Multiplication result converted to larger type
Also: ext2spice/ext2hier.c: Multiplication result converted to larger type
Also: plot/plotRutils.c: Multiplication result converted to larger type
Also: ext2spice/ext2hier.c: Multiplication result converted to larger type
Also: ext2spice/ext2hier.c: Multiplication result converted to larger type
Also: ext2spice/ext2spice.c: Multiplication result converted to larger type
Also: ext2spice/ext2spice.c: Multiplication result converted to larger type
Also: ext2spice/ext2spice.c: Multiplication result converted to larger type
Also: ext2spice/ext2spice.c: Multiplication result converted to larger type
Also: ext2spice/ext2spice.c: Multiplication result converted to larger type
Also: ext2spice/ext2spice.c: Multiplication result converted to larger type
Also: extract/ExtHier.c: Wrong type of arguments to formatting function
Also: plot/plotRutils.c: Multiplication result converted to larger type
Also: mzrouter/mzDebug.c: (intmax_t) %lx Wrong type of arguments to formatting function
Also: mzrouter/mzEstimate.c: (intmax_t) %lx Wrong type of arguments to formatting function
Also: ext2spice/ext2hier.c: Wrong type of arguments to formatting function
Also: calma/CalmaRead.c missing initialization
Also: database/DBio.c read of variable before initialization
Also: ext2sim/sim2simp.c ParseAttr does not return a value
Also: garouter/gaChannel.c use of unintialized or incorrect variable
Also: graphics/cairo_orig/grTCairo3.c uninitialized value
Also: graphics/cairo_orig/grTCairo5.c uninitialized local variable
Also: graphics/grClip.c Branch condition evaluates to a garbage value
Also: graphics/grOGL1.c: non-void function does not return a value
Also: graphics/grOGL1.c Dereference of null pointer
Also: gcr/gcrDebug.c Add a field width specifier to this "%s" placeholder.
Also: utils/magic.h pointertype prefer use of 'long' instead of 'int'
Also: gcr/gcrDebug.c Opened stream never closed. Potential resource leak
Also: grouter/groutePin.c: multiple: non-void function does not return a value
Also: textio/txInput.c non-void function does not return a value
Also: utils/geometry.c: non-void function does not return a value in all control paths
Also: graphics/grX11su1.c: Dereference of null pointer
Also: graphics/grX11su1.c: Dereference of null pointer
Also: debug/hist.c Access .. results in a dereference of a null
Also: fix: Accessing uninitialized variable
Also: fix: read of uninitialized data at inChar[0]
Also: fix: lef write crash (when cells with labels in space pNum==-1)
Also: fix: findUse can return NULL crash
Also: Updated the revision number to go along with the merge of pull request #325 from Daryl Miles. Made a few simple style changes to conform to (what is vaguely defined as) the overall programming style for magic (passed down from John Ousterhout).
Also: Finally got around to restoring the behavior of the toolbar with respect to using the 3rd mouse button to hide a layer, and indicating the layer is hidden by blanking the icon (which works better with the new scrollable icon list, but got broken by the same). Also: Added a previously missing behavior, which is to correctly update the icon settings based on using the command "see" and "see no" with layer aliases (e.g., "allm1").
Also: Corrected the previous commit, which did not fix the problem that it claimed to fix, but caused an incorrect DRC maxwidth check instead. The problem appears to be correctly resolved now. Also: Tracked down a recently-introduced minor issue in which the interactive DRC stops running after issuing "drc check" and does not resume until another key or mouse even occurs. This turned out to be caused by the work on the "logcommands" command, which should have used "*bypass" before "logcommands suspend" and "logcommands resume", since the "*bypass" indicates that the command has no impact on layout and should not interrupt the DRC checker.
Also: Update appimage.yml (rename job)
Also: GHA: BUMP actions/checkout@v4 (from v2)
Also: GHA: BUMP actions/upload-artifact@v4 (from v3)
Also: GHA: CI WASM build use --disable-compression
- posted: September 26, 2024 at 2:00am version: 8.3 revision: 492
Corrected an error that was introduced in the August 3 commit and which prevents the "Ctrl-P" key from raising the .params window; the underlying error is that the original error in the "property" command was a disagreement about where "argstart" is placed. The command was fixed to make the "property" command work correctly. However, the solution made "argstart" wrong when using the command "cellname property". Now both uses are handled correctly.
- posted: September 16, 2024 at 2:00am version: 8.3 revision: 491
Changed the behavior of renaming conflicting cells from "# " to " __ ", because the use of "#" is considered illegal for cell names in GDS.
- posted: August 30, 2024 at 2:00am version: 8.3 revision: 490
Corrected a missing pointer to integer cast in code that was added fairly recently when getting rid of crashes related to commands operating on non-edit cells. The lack of a cast was prevening compilation on systems with more rigorous error checking.
- posted: August 17, 2024 at 2:00am version: 8.3 revision: 489
Revised the file opening routine with respect to the search paths. Previously, a file path beginning with "/", "./", or "../" would be searched for verbatim and no searching would be done over paths. This behavior now occurs for a leading "/" only. File paths with "./" or "../" will search for the file with the path verbatim, then proceed to search for the file with each search path prepended to the filename as usual. This solves a problem for reusable, non- PDK IP blocks, where the IP block may have an abstract view pointing to a GDS file which is specified as being located at "../gds/". This file would not be found if the IP block was included into another project. Now it can be done if the path to the IP is given by "addpath".
- posted: August 7, 2024 at 2:00am version: 8.3 revision: 488
Change to ext2spice which should solve the problem of ports no longer being output in order after flattening a circuit.
- posted: August 5, 2024 at 2:00am version: 8.3 revision: 487
Corrected the "property" command parsing, which had a print statement without an argument, resulting in random things getting printed to the output when a property name does not exist.
Corrected an issue causing a crash condition when using "extract unique" on a flattened layout (some labels end up NULL and the NULL condition needs to be checked). Also remembered to update VERSION, which was missed on the last commit.
- posted: June 14, 2024 at 2:00am version: 8.3 revision: 486
Added two checks when loading a file to determine if two cells are the same: (1) If the inodes of the filename are the same, then the cells are the same. This avoids treating symbolic links as different paths with different files; (2) If both layouts are in git repositories and the git repository commit hashes are the same, then the cells are considered to be the same. This allows projects to be cloned into other projects as dependencies and used in multiple places without magic treating them as different layouts.
- posted: May 26, 2024 at 2:00am version: 8.3 revision: 485
Another correction that avoids a crash condition when attempting to do an instance array resizing on an uneditable cell.
- posted: May 25, 2024 at 2:00am version: 8.3 revision: 484
Corrected another error related to read-only views in which magic crashes when attempting to place a generated cell in the layout, as pointed out by Mark Martin in github Issue #309.
- posted: May 14, 2024 at 2:00am version: 8.3 revision: 483
Corrected a bad statement running Tcl_NewListObj() that fails to assign the result to anything, causing later uses of variable "lobj" to have an unitialized value and potentially causing a crash condition. Thanks to Risto Bell for pointing out the error.
- posted: May 13, 2024 at 2:00am version: 8.3 revision: 482
Corrected an issue introduced in version 8.3.471 when trying to fix some of the "select" command syntax; the code change caused the "select top cell" command to behave the same as "select cell". There was no specific code for handling "top", so now there is.
- posted: May 12, 2024 at 2:00am version: 8.3 revision: 481
Modified the "lef nocheck" command to take the argument "*", meaning that no nets will be checked for antenna gate and diffusion area, and no antenna properties will be output to the LEF file. This can greatly speed up LEF output file generation for a large design. Thank you to Tamas Hubai for the code patch.
- posted: May 11, 2024 at 2:00am version: 8.3 revision: 480
Corrected a fairly long-standing error in which the MASKHINTS_ values in the .mag file "properties" list are not handled as being in database units during .mag file reading and writing (although they do track internally), making them subject to being scaled incorrectly and change between a read and a write. Thanks to Sylvain Munaut for identifying the problem.
- posted: May 8, 2024 at 2:00am version: 8.3 revision: 479
Added code that when running "extract unique" always prefers to change a non-port label name instead of a port name whenever it finds one of each with the same text on different nets.
- posted: May 5, 2024 at 2:00am version: 8.3 revision: 478
Made some changes to the extresist code to handle the case where a transistor's first tile record is a well or substrate type; normally this is avoided, but if that's the only device terminal that connects to the node, it will be used. Also changed the code to not report a failure when space is found under the device, when space is allowed as a substrate type. Instead it will print a message that the substrate is not being extracted as a resistive network. However, note that the correct solution is to do what the regular "extract" code does, which is to paint the substrate type in the cell area first, so that there are valid tile types to use for extracting the substrate network.
Altered the behavior of handling labels when a layer under a label is erased. In cases where magic would previously unattach the label from the material and attach it to "space", now magic will instead adjust the size of the label to stay entirely on the material. That avoids a common error of losing label or port connections when the material is trimmed back. Thanks to Philipp Guhring for suggesting this implementation (github issue #305).
- posted: May 4, 2024 at 2:00am version: 8.3 revision: 477
Changed the automatic search for tech files from the "tech" line in a .mag file to include the original system path. This restores the ability to find the tech file for any cell created using the old SCMOS technologies. This method is as problematic as is the way all SCMOS tech files used the same name "scmos". But at least it preserves backwards-compatible behavior (behavior prior to 8.3.471). This commit corrects github issue #306.
- posted: May 2, 2024 at 2:00am version: 8.3 revision: 476
Corrected the routine that parses MASKHINTS_* in cell properties to avoid an infinite loop in the case that the mask hint does not have a number of values that is a multiple of 4.
- posted: April 30, 2024 at 2:00am version: 8.3 revision: 475
Added the ability to track the first CellDef to fail to read and report it after "Failure to read in entire sub-tree". This will not report every failing cell (since it quits reading after the first failure) but will avoid the existing issue of printing nothing and leaving the user with no feedback as to which cell was the problem.
- posted: April 17, 2024 at 2:00am version: 8.3 revision: 474
Committing a patch to prevent segfaulting during "extresist" when non-Manhattan geometry is analyzed for resistance extraction. This patch merely prevents the crash condition. It does not solve the root of the problem, which is that split tiles can belong to two different nets, but the tile can hold extraction information for at most one of those nets.
- posted: April 12, 2024 at 2:00am version: 8.3 revision: 473
Removed an "if" statement that was apparently designed to reduce the amount of redundant painting done by the connectivity search algorithm, but which was preventing composed types (such as FET gates) from getting added to a net if one of the composing types (such as poly) was drawn over the device in an ancestor cell. Removing the "if" statement does not appear to have any significant performance impact, so this change is being adopted.
- posted: April 11, 2024 at 2:00am version: 8.3 revision: 472
Corrected an issue with passing a Tcl script as a command-line argument. For interactive magic in the Tcl/Tk wrapper, the "-nowindow" option was appended to the command line. But for Tcl scripts on the command line, all arguments following the script name are considered arguments of the script. So the "-nowindow" argument has to be inserted at the beginning of the command line as the first argument after "magic".
- posted: April 9, 2024 at 2:00am version: 8.3 revision: 471
Made a slight modification to the "lef write -hide" routine; previously, MASTERSLICE layers would not be added to obstruction layers made by "-hide". However, an nwell, for example, that stuck outside of a prBoundary *would* be recorded, which was inconsistent. Resolved this by allowing MASTERSLICE layers in the OBS block, but only for layers that are not a substrate type. NOTE: It may be better to just insist that a MASTERSLICE layer define an obstruction type in the "lef" section of the tech file, and treat it like routing obstructions. Alternatively, one may question whether special obstruction types are needed at all, as one could simply define an obstruction as a type without a port label.
Modified the "select" command routine to get rid of the very hack method of messing with the argument count when using qualifiers like "less" and "more". Now it keeps a separate count of the number of non-qualifier arguments.
- posted: April 7, 2024 at 2:00am version: 8.3 revision: 470
Corrected the failure to copy mask hints to the flattened DRC yank cell. Otherwise, DRC errors corrected by mask hints will get flagged.
Discovered that the non-Euclidean distance checks had not been completely implemented for the "cifwidth" and "cifspacing" rules, resulting in those rules being Manhattan distance checks. Finished the implementation (duplicating code from DRCbasic.c, with appropriate scaling to CIF coordinates).
- posted: April 6, 2024 at 2:00am version: 8.3 revision: 469
Corrected an issue with "instance celldef" when the instance name contains brackets which are not indicating a cell array. Also fixed a related issue with the PDK toolkit code, in which the gencell routines fail if an instance name contains brackets which are not indicating a cell array.
- posted: April 3, 2024 at 2:00am version: 8.3 revision: 468
Corrects "ext2spice hierarchy off" when subcircuits with ports are present. Note, however, this fix breaks the use of "ext2spice subcircuit descend off" because subcircuits are always descended into. It's not clear that "subcircuit descend off" worked at all before, anyway. That still needs fixing.
- posted: April 2, 2024 at 2:00am version: 8.3 revision: 467
Corrected issue from github issue tracker #297, where "Import SPICE" fails on instances with names containing brackets.
- posted: March 21, 2024 at 2:00am version: 8.3 revision: 466
Fixed an error when reading a DEF file using generated vias in a non-default rule. The code was first failing to identify the via cut type from the generated via record, and then it was failing to return to the non-default rule width after the route exits the via. Both issues have been fixed. Thanks to Sylvain Munaut for providing a reproducible test case.
Correction to the previous bug fix: The layer was correct and did not need to be changed, but the line below it that depended on the layer being a contact type was wrong; the contact had to be identified independently of the last layer type, which might not be the contact cut type.
- posted: March 19, 2024 at 2:00am version: 8.3 revision: 465
Corrected an issue with annotating a layout from a LEF file; if new port labels are created for an existing port, then they must take the existing port number. The code was previously causing collisions between port numbers on different pins.
- posted: March 9, 2024 at 2:00am version: 8.3 revision: 464
Corrected an error in defGetType() that incorrectly looks at a lefLayer's "via" record even when the layer might not be a via, causing potential issues with uninitialized variables. Not sure if this is related to the bug that started this investigation, but it was the only thing that looked relevant.
Corrected an error in lefWrite where SelectClear() is called without SelectRootDef being set, which causes SelectClear() to return without doing anything. However---question is why SelectClear() needs SelectRootDef to be non-NULL since it is clearing the selection, not the selection source. For now, just patching the failing case, not trying to mess with the whole selection mechanism.
- posted: February 28, 2024 at 2:00am version: 8.3 revision: 463
Modified the schematic-to-layout script to be better at being used in a re-entrant manner. Applied to an existing layout, it will no longer keep generating new instances and ports over top existing ones. Could use improvement by attempting to retain the location of a device when the instance changes device type (such as when a device parameter was changed in the netlist). However, the current set of changes should help, whether the re-entrant use is purposeful or accidental.
- posted: February 20, 2024 at 2:00am version: 8.3 revision: 462
Was given a use case by Carsten Wulff (github issue #289) that fails in the bplane code for subcell binning. It is still not clear why this example causes a failure when the bplane code has been working for so long. However, simply checking for the BT_ARRAY bit at one additional point in the code prevents the crash condition and appears not to have caused any issue with the database.
- posted: February 19, 2024 at 2:00am version: 8.3 revision: 461
Corrected two separate issues with R-C extraction: (1) There was a method that failed to work on devices with complex shapes on the device recognition layer, such as snake-geometry resistors. (2) The use of contact type "xpc" in the sky130 tech file as its own contact residue caused the contact tracing in extresist to fail. I opted to keep the unorthodox contact description in the tech file and wrote an extension to a routine in extresist to handle the case.
- posted: January 24, 2024 at 2:00am version: 8.3 revision: 460
Use raw strings in preproc.py
Updated the version to go along with the merge of pull request #288 from Ryan Schmidt, changing regular expression strings in the python preprocessor to raw string types so that they don't produce warnings in python 3.12.
- posted: January 22, 2024 at 2:00am version: 8.3 revision: 459
Corrected an error when using the "instance" command with an instance name. The instance search routine was not rejecting internal cells, and so would choose, e.g., a selection cell and reject it because it was not the edit cell.
Corrected a long-standing error, which caused "getcell child" to place a cell in a meaningless position for any rotation and flip combination other than zero. The issue was that the reference point was not rotated along with the cell.
Also: One correction to the previous commit to restore the original behavior when a child coordinate is not specified; otherwise, the original code's setting of the child reference point to the bounding box lower left causes the lower left point to be used always, which is not how the getcell command is supposed to function.
- posted: January 15, 2024 at 2:00am version: 8.3 revision: 458
Corrected a recently-discovered error in the "minimum area" DRC rule. The fractional part of the rule distance (modulus after scaling) does not fit in the unsigned char variable unless it is first divided by the scalefactor (also requires multiplying up by the same amount when scaling the other direction). The truncation of the unsigned char value was causing the minimum area value to be off by a small amount, causing false negatives (no DRC violation is shown when metal area is slightly smaller than the minimum allowed).
Corrected an error in the "cifarea" rule that had previously been fixed for "cifwidth" and "cifspacing", in which the rule distance is incorrectly multiplied by the expander (in the case of area, multiplied by the expander squared).
- posted: January 10, 2024 at 2:00am version: 8.3 revision: 457
Updated the HTML command reference files to refer to magic version 8.3, since all of the title images still had 8.2, and the title text still said 7.3 or 7.4, having not been updated for a long time.
- posted: January 2, 2024 at 2:00am version: 8.3 revision: 456
Inadvertently introduced a segfault on exit on the last commit, while trying to get rid of a compiler warning. Fixed by this update.
- posted: December 31, 2023 at 2:00am version: 8.3 revision: 455
Added a tile unfracture routine at the end of CIFMakeManhattanPath that resolves issues of excessive tile fracturing during read-in of GDS (or CIF) polygons and paths that have non-manhattan geometry. This was particularly noticeable when reading the GF180MCU corner I/O cell, which ended up being something close to a worst-case scenario.
Got rid of two compiler warnings; one recently introduced, the other from some time ago.
- posted: December 16, 2023 at 2:00am version: 8.3 revision: 454
EDIT: wrapper maketoolbar method refactored into a separate script, with changes to the toolbar. Reorder layers functionality added as well
Updated version to go along with the merge of pull request #283 from Vasil Yordanov, which changes the toolbar icon into a scrollable list with layer names, much better than the former minimalist array of icons.
- posted: December 5, 2023 at 2:00am version: 8.3 revision: 453
More explicit pointer truthiness check
Updated version to go along with the merge of pull request #282 from Donn (corrects a pointer incorrectly passed to dbReadOpen() that should have been a boolean).
- posted: November 28, 2023 at 2:00am version: 8.3 revision: 452
One more change to the "extresist" code which prevents extresist from substituting a regular label for a port during a node merge, which can cause ports to become orphaned.
- posted: November 25, 2023 at 2:00am version: 8.3 revision: 451
Fixed two independent errors, both of which can cause devices to be missing from a netlist generated by ext2spice with the "extresist" option enabled. The first had to do with some parts of nets being given alias names for a net, and the second was caused during "extresist" and would also result in error messages about devices missing terminals.
- posted: November 22, 2023 at 2:00am version: 8.3 revision: 450
Added checks for GDS scalefactor (DBU) both when reading GDS in "gds readonly true" mode and when writing a GDS file in full-dump mode. Reading or writing a file with an incompatible DBU is now prohibited. This is not a great solution, as it forces the original file to be rewritten with a different DBU. Preferably there should be code to scale the units during a dump, but that needs to be coded.
- posted: November 16, 2023 at 2:00am version: 8.3 revision: 449
Updated the SPICE import routine in the toolkit so that it will correctly handle subcircuits that are used before they are defined, and will determine whether the imported spice does or does not contain a top level, and either return to the top level or any top level cell found in the netlist.
- posted: November 15, 2023 at 2:00am version: 8.3 revision: 448
Corrected an error that can prevent capacitances to substrate from being output if the substrate node is declared as a port.
- posted: November 12, 2023 at 2:00am version: 8.3 revision: 447
Corrected the Tcl exit hook routine so that it passes on the client data value as the exit status value (this was not at all clear from the documentation and required a bit of experimentation). The fix allows Tcl scripts to exit magic with a non-zero status by invoking "exit" in Tcl.
- posted: November 11, 2023 at 2:00am version: 8.3 revision: 446
Corrected a typo in the ext2spice code as pointed out (with corretion) user cgurleyuk on github.
Added "u" as a recognized suffix to dimensions, meaning the same thing as "micron" or "um", since it is regularly used that way.
Also: Yet another fix to the ext2spice code handling output formatting of SI values, this time to put the precision and the value in the order that is generally more accepted. The gcc compiler, at least, doesn't seem to care which order they are given in.
- posted: November 6, 2023 at 2:00am version: 8.3 revision: 445
Corrected ext2spice to avoid incorrect precision when writing out values. The "%.3g" format was changed to "%.*g" with a variable precision that accounts for the actual precision required by the manufacturing grid.
- posted: November 3, 2023 at 2:00am version: 8.3 revision: 444
appended macOS install file for XQuartz Display issue.
Updated version to go along with the merge of pull request #278 from user pinu-73 (updates to the MacOS install instructions with additional information and explanation).
- posted: October 29, 2023 at 2:00am version: 8.3 revision: 443
Modified the "makedbh.in" script ("makedbh", after running configure) so that it does not use python-3.6-style f-strings, and so is backwardly compatible with any python-3 revision.
- posted: October 28, 2023 at 2:00am version: 8.3 revision: 442
Corrected an extraction error that can cause an infinite loop depending on the order of extraction devices. Specifically, the case of a source-drain tied FET was breaking out of a loop when it should have been breaking out of a double loop.
- posted: October 25, 2023 at 2:00am version: 8.3 revision: 441
When writing a GDS file, there is a statement printed about each cell being generated. This statement does not disambiguate the case where a cell is being ripped verbatim from GDS instead of being generated from the magic database. This print statement has been split into two cases, and where a cell is being ripped verbatim, the name of the file is indicated. This provides better information to the user.
Corrected the extraction offset, in which a parameter like "l" can provide a delta offset such as "l+0.06", indicating that the extraction model has a length larger than the drawn device. Previously the value was assumed to be in microns but did not scale between the .ext file and the SPICE netlist. Corrected so that it scales like the other parameter values, being converted to internal units and tracking the internal grid scale.
- posted: October 18, 2023 at 2:00am version: 8.3 revision: 440
After a discussion about "cifinput" rules, realized that there is no way to implement boolean operators on labels, so any "label" statement in the section can apply only to one magic layer. This is regularly violated in most (all?) techfiles (due mainly to lack of explanation and guidance). The addition of the "no-reconnect- labels" option for cifinput made it worse, as it can cause a label to be attached to the wrong layer and be stuck that way. Even without the option, an attachment to a non-connecting type is a problem; DIFF cannot simultaneously have a connection to both ndiff and pdiff, so it will be one or the other, and the one not connected can easily get labels moved to other nets. To avoid this: (1) removed the "no-reconnect-labels" option, and (2) made the automatic label reconnection smarter, as well as splitting it into two different behaviors based on whether a label is being created or manipulated from the command line (more or less the original behavior) vs. being read from GDS or LEF. The new rules assume that labels attached to a GDS type will all map to the same plane in magic. To avoid excessive error messages from existing tech files, a warning is issued only if "labels" changes the plane of the target layer (a realistic solution rather than the preferred one). Also: Fixed an error that causes a crash on the "wizard" command "*watch" if the cell being observed is read-only (see github issue #271).
Two small tweaks on plot filename behavior: (1) "plot svg" without a filename causes an error instead of generating a trash filename or crashing, while (2) "plot pnm" with a filename that has the ".pnm" extension does not add another ".pnm" extension to the end of it.
- posted: October 17, 2023 at 2:00am version: 8.3 revision: 439
Corrected an extraction issue in which an error message about "unexpected asymmetric device" is printed prematurely, as it is inside a loop checking over all device entries compatible with a device type. Also: Flagged an issue with the "label" keyword in the "cifinput" section of a tech file. The "label" keyword cannot be used in conjunction with boolean operators. It can only connect labels on a specific GDS type to one magic type. Unfortunately, because this was not flagged before as an error or warning, the incorrect usage has crept into a lot of tech files. This uncovers an underlying issue that labels must be allowed to automatically reconnect types, which is undermined by the "no-reconnect-labels" cifinput option. That issue will be addressed in an upcoming commit.
- posted: October 13, 2023 at 2:00am version: 8.3 revision: 438
Corrected an error in which DRCStatus is set outside of an #ifdef for MAGIC_WRAPPER, which is required.
- posted: October 7, 2023 at 2:00am version: 8.3 revision: 437
Corrected a small error in the device generator toolkit that fails to pick up properties from an existing cell and prints an error message instead. This will likely cause non-default properties of an instance to be lost if the SPICE import is used in a re-entrant manner (not exactly a common use-case).
Made another change to the netlist-to-layout procedure so that it better supports re-entrant use, especially for the use case where the import was abandoned before saving, or the generated cells were not saved (which is easy to do, because the top level cell is always written out to disk, but the rest of the cells will only be written when "writeall" is executed). The new code detects input cells that did not have any layout file (has flag "not-found" after loading) and deletes them and their instances so that they can be regenerated from scratch.
- posted: September 30, 2023 at 2:00am version: 8.3 revision: 436
Corrected an error in the original resistor network simplifying routine that marks resistors in loops to prevent infinite recursion, but later incorrectly eliminates those resistors. Also: Changed the "tolerance" command to affect only the R-C time constant tolerance. Added a "threshold" command option that limits output of small resistors. This can help reduce large networks that are otherwise not reducible by the three methods of reduction (serial, parallel, and delta-wye), but does affect output values (slightly). This will probably need to be revisited at some point.
Corrected a toolkit error where the callback to check parameter bounds should be called whenever an entry is changed and either the entry window loses focus or thekey is pressed. This had ended up disabled when the scrollbar was added to the dialog window, causing the window hierarchy to change, which invalidated the regexp used to identify the entry and checkbox widgets.
Also: Found that "extresist" double-counts contacts because no attempt was made to limit the ExtFindRegions() search to one plane per contact. Fixed this simply by doubling the resistance per via so that the final result is correct.
Also: Changed the fix from the last commit by solving the problem in a different way. Added a routine to remove all layers of a contact from all planes except the contact's base plane before finding and processing contacts. This causes ExtFindRegions() to find and process only one tile on one plane per contact, so there are no redundant contact entries. Also, any overlapping stacked contacts are resolved, which avoids the very common error of contacts not being processed at the correct size because they are being processed per tile for chopped-up areas.
Also: Backed up the version by one minor revision because I accidentally upped it twice in one day.
- posted: September 29, 2023 at 2:00am version: 8.3 revision: 435
Corrected an error in the calculation of the number of contact cuts per contact area during parasitic resistance extraction. Previously, the result was divided by the via pitch twice, resulting in most contact areas being reported as a single cut.
- posted: September 27, 2023 at 2:00am version: 8.3 revision: 434
Corrected an issue with the implementation of nondefault rules in DEF read and write. The NONDEFAULT LAYER WIREEXT was assumed to refer to the default wire extension at segments, when instead it refers to the wire extension only at vias. The wire extension at segments is presumably defined by the nondefault segment (and wire extension at vias remains unimplemented, which is probably not a big issue because everyone puts the wire extensions into the via definitions anyway).
- posted: September 26, 2023 at 2:00am version: 8.3 revision: 433
Fixed an error that causes magic to segfault when doing "def write" on a layout that is caused by either having no .ext file, having labels attached to space, or possibly both.
- posted: September 24, 2023 at 2:00am version: 8.3 revision: 432
Modified the "def write" function so that obstruction layers are output as blockages. That allows obstruction layers to be placed in a layout specifically for the purpose of being output as a blockage. Otherwise, an obstruction layer is generally considered non-electrical and will not show up as a node in the extraction file, so obstruction layers were being missed entirely by "def write". Also: Where "def write" complains about floating labels, made an exception for labels on non-electrical layers (like "comment").
Fixed another issue in which sticky labels on a non-electrical type (like "comment") show up as nodes in the .ext file, which they shouldn't.
Also: Documented the "def write -anal" command option, which had previously been implemented without being documented.
Also: Found an extreme issue in "extresist" in which the algorithm spent all of its time running area searches on zero-area rectangles, which was causing simple extractions to run hours. Checking for a zero area rectangle and conditionally skipping the area search resulted in a massive speed-up in parasitic extraction.
- posted: September 21, 2023 at 2:00am version: 8.3 revision: 431
Corrected an issue with "drc catchup" that causes it not to work because commands issued during initialization set the DRC status in a way that causes DRCContinuous() to return immediately. Also: Implemented a slightly different method when automatically finding the tech file from the input .mag file that loads a technology .magicrc file if one exists. If not, just the .tech file is loaded. This replaces the method of a previous commit that loads the technology .tcl script. The .magicrc file will include the .tcl script but does other things as well.
- posted: September 14, 2023 at 2:00am version: 8.3 revision: 430
Documented the "extract halo" command option (which was missed at the time the option was implemented), and also implemented (and documented!) a similar command option "extract stepsize" for reporting or changing the extraction step size.
Corrected the scrollbar function on the parameterized device generation dialog window. The window is now made to fit the list of parameters when it is made, but can be reduced in size which allows the scrollbar to function. Event bindings for the mouse scrollwheel were added so that it can subsitute for the scrollbar within the parameter window.
Also: Modified the behavior of "gds read" (and by extension "cif read") so that it does not fail if an edit cell is not loaded, but simply loads the default unnamed edit cell. This is somewhat bad behavior in the case of reading GDS, since if the GDS is a library and does not have a top level cell that matches the name of the GDS library, then the edit cell that is loaded when the "gds read" command is issued remains unchanged, so it didn't need to be there in the first place. Fixing this to behave better would require a bit of additional work.
- posted: September 13, 2023 at 2:00am version: 8.3 revision: 429
Made an enhancement to the code that automatically tries to figure out where to find the technology corresponding to a file given on the command line: (1) Changed the default search location from /usr/share/pdk to /usr/local/share/pdk, which is the actual default for open_pdks (can still be overridden by environment variable PDK_ROOT). (2) Made the PDK name by itself preferable to the PDK name plus any extension when searching (e.g., "sky130A" is preferred over "sky130A_backup"). (3) Check the located directory for any file.tcl and source it if it exists. (4) Run any tag callbacks on the "tech load" command, which rebuilds the tool icons.
Added a "Place" button in the cell manager after realizing that other commands like "Place Instance" and "Library Manager" do not track cells in the internal database, and so are unable to place a cell instance that does not have a corresponding file on disk (e.g., a cell read from GDS or LEF).
- posted: September 12, 2023 at 2:00am version: 8.3 revision: 428
Modified "lef write -hide" behavior to fix problems that occur when a label has no area and magic has to go searching for the label area. The resulting behavior is better but is not really a substitute for adding ports on the proper layers in the proper locations for routing connections.
- posted: August 30, 2023 at 2:00am version: 8.3 revision: 427
Allow Python 3 to not be in PATH, Fix `clean` re-building dependencies
Updated the version to go along with Donn's pull request #266 (fixes some issues around python3 on the Mac, python3 conflicting with that found by /usr/bin/env, and an issue around "make clean" attempting to rebuild the Depend files).
- posted: August 28, 2023 at 2:00am version: 8.3 revision: 426
Corrected what looks like a very long-standing error in the DRC engine. Rule checks of triggering rules are not subject to clipping to the clip area. However, they *must* be clipped to the (larger) overall DRC check area, because no layout is valid outside of that area. This clipping was missed, allowing triggering rules to trigger on areas outside the valid layout, resulting in mysterious false-positive DRC errors. This has been fixed.
- posted: August 26, 2023 at 2:00am version: 8.3 revision: 425
Changed Lookup() to LookupFull() in all the LEF and DEF read routines. Lookup() is used for command-line parsing in magic and accepts any unique string that matches a partial keyword. LEF and DEF do not allow partial keywords, so only LookupFull() is appropriate to use for LEF and DEF file parsing. This fixes issue #263 from Christian Haufe.
Corrected defRead.c so that "read def" will read multiple "+ ROUTED" (and similar) independent routed segments in the SPECIALNETS section (which was already working correctly for regular NETS). This solves github issue tracker issue #264 from Christian Haufe.
Also: Build Updates
- posted: August 9, 2023 at 2:00am version: 8.3 revision: 424
Added an include forwhich is needed for readline to avoid an implicit declaration error.
- posted: August 8, 2023 at 2:00am version: 8.3 revision: 423
Corrected an issue with the last commit for fixing the "extresist" command for use with "extract path"; the cellname was being cleared after generating the filename with the extract path, but was being used afterward, so it needed to be reverted back to the original value, not just free'd. Otherwise "extresist" will fail to produce any results.
- posted: August 7, 2023 at 2:00am version: 8.3 revision: 422
Corrected one major error which will cause magic to fail to find the ".res.ext" file from "extresist" after using "extract do local" (and probably with "extract path" as well). Fixed this, and also made sure that "extresist" writes the ".res.ext" file to the same location as ".ext" always, so that handling is consistent throughout the full R-C extraction process, across the use of "extract", "ext2sim", "extresist", and "ext2spice".
- posted: August 2, 2023 at 2:00am version: 8.3 revision: 421
Corrected an issue where code expected sticky labels to be at the front of the list during extraction, except that after copying they're not. Removed the expectation, although that causes the entire linked list of labels to be parsed and may cause excessive run-times in pathological situations. Keep an eye out for unintended consequences.
- posted: August 1, 2023 at 2:00am version: 8.3 revision: 420
Made a minor change to the handling of device nodes in EFBuildDevNode() to catch cases where a device terminal is connected to the global substrate node even when the terminal is not specifically a substrate terminal (e.g., diode cathode or bipolar collector) and mark them with the "substrate is port" flag.
- posted: July 30, 2023 at 2:00am version: 8.3 revision: 419
Discovered an error in region and net selection that can cause unrelated nets to be captured in the same selection, due to the use of the label bounding box instead of the label rectangle. The bounding box is used for display only and should not be used for connectivity.
- posted: July 29, 2023 at 2:00am version: 8.3 revision: 418
Corrected a previous implementation that was supposed to not print warning messages about ports being electrically connected when those ports have names that match under rules of case-insensitivity, and the .ext file is being read for the purpose of generating a SPICE netlist, which is case-insensitive. Also: Corrected a crash condition when using "extract path" when directory does not exist.
Corrected an issue with "flatten -doinplace" with no cell name argument, which is supposed to flatten all selected instances. After flattening, instead of deleting the instance from the cell, it deleted the instance from the selection, leaving the one in the cell.
- posted: July 26, 2023 at 2:00am version: 8.3 revision: 417
Corrected the variable string "RCS" in tkcon.tcl, which had become truncated, causing the "About" menu item in the console to generate an error message. Since the tkcon.tcl used in my other software packages like IRSIM was correct, I just pulled the RCS string from there, and it seems to be okay now. This solves github issue #259.
- posted: July 22, 2023 at 2:00am version: 8.3 revision: 416
Corrected an error introduced by the code added recently for support of command logging, which caused the "select cell" command option to become invalid; this command option is used by the parameterized cell generator and makes it impossible to edit the parameterized cells.
- posted: July 21, 2023 at 2:00am version: 8.3 revision: 415
Corrected an issue that undermined the "locking disable" command, and would keep files open (even though they were not marked as locked) and not close them, causing an open file descriptor overflow when too many files are read for the same design.
- posted: July 20, 2023 at 2:00am version: 8.3 revision: 414
Implemented a new command option "gds magscale" to reinterpret the meaning of the MAG record in GDS files. Most available GDS documentation is decidedly vague about what MAG means. Most layout tools seem to interpret a MAG of 1 as corresponding to a text height of 1um. However, there are a few tools that interpret it as 1 centimicron, and there's no reason to assume that any given interpretation is correct. "gds magscale" allows the scale to be redefined.
- posted: July 12, 2023 at 2:00am version: 8.3 revision: 413
quick and dirty emscripten port
github/workflows: add simple_build_wasm
Also: configure: add asmjs-unknown-emscripten target
Also: calma: fix linux build?
Also: configure: cleanup diff
Also: textio: add TxErrorV variant
Also: textio: add missing TxErrorV call
Also: Updated the version to go along with pull request #256 from Proppy.
- posted: July 9, 2023 at 2:00am version: 8.3 revision: 412
Corrected an issue in which ports which have the same name under the assumption of case insensitivity (e.g., VSS, Vss, and vss) are kept separate even when writing SPICE netlists, which are case insensitive. The code fix both avoids flagging these ports when running ext2spice, and more importantly, allows the use of "ext2spice short" without these ports ending up separate in the output netlist.
Corrected an error in the previous commit. Implemented a new form of the "edit" command that takes an instance name as an argument. This is the first of a small series of command extensions to provide the capability to replace any command that is dependent on the pointer position with an equivalent command that is not, for the purpose of removing pointer and screen coordinate dependencies from the log file created by "logcommands".
Also: Completed the small set of command extensions to make sure all commands that make use of the pointer position have an equivalent command that operates solely on layout coordinates, or otherwise avoids needing a pointer position. Added the command option "down" to avoid using the pointer to disambiguate selections. Added the command option "select ... at x y" to do paint or cell selections at a specific coordinate instead of the pointer position.
Also: Extended the "paint" and "erase" commands to accept an option "pick x y" which acts like "cursor", but operates on a database coordinate instead of a pointer coordinate. Made a few other corrections to the command logging code so that it produces valid output when the log file is sourced.
Also: Corrected a few errors from the previous commit (support for logging commands without any pointer or screen coordinate references).
- posted: July 7, 2023 at 2:00am version: 8.3 revision: 411
Added a new method to the extraction which allows parameter limits to be declared for each device model, so that different models can be specified for different parameter ranges. For example, this will simplify the definition of the high-sheet-rho poly resistors and the bipolar transistors in sky130 by removing the need for ID marker layers; it also allows the correct device model to be extracted when reading data from GDS that does not contain the extra (and not foundry-approved) ID markers.
- posted: July 6, 2023 at 2:00am version: 8.3 revision: 410
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).
- posted: June 29, 2023 at 2:00am version: 8.3 revision: 409
Finally got around to fixing the "logcommands" command, which has been broken ever since moving to the Tcl/Tk wrapped version. Added some new features that allow background commands from the window handling (like pointer tracking) to be omitted from the log file via a suspend/resume function. Added a header file and a few commands at the top of the log file that align the log file contents with the screen and box state at the start of logging. This makes a log file which can be "played back" by sourcing it from the magic console prompt. Per request from Harald Pretl.
- posted: June 28, 2023 at 2:00am version: 8.3 revision: 408
Found that extNodeName() prefers the first name in a region's label list for output, but that the code in ExtRegion.c does not sort a region's label list to keep ports at the beginning of the list. So any net with multiple labels may end up with a non-port label as the name of the node, which eventually becomes the name of the port. A quick fix keeps these lists sorted.
- posted: June 27, 2023 at 2:00am version: 8.3 revision: 407
Corrected one array overrun error caused by using the command "drc printrules". Implemented a new "drc" command option called "drc ignore", which can be used to suppress reporting of specific rules, for both "drc why" and "drc find". This can help with finding an error buried among a large number of other errors.
Extended the method of the previous commit to include the command option "drc find", to find the next error of a specific type based on the contents of the DRC error message (e.g., "drc find li.1").
- posted: June 24, 2023 at 2:00am version: 8.3 revision: 406
Corrected a typo in the previous commit that causes parameters to be output twice for scaled devices (such as diodes in the sky130 process). Above and beyond the typo, though, the implementation of offsets is not very well thought out and needs to be revised. For one, the +/- notation can be confused with signs in the parameter expression; that is also fixed in this commit. But there is currently no way to express both a scale and an offset for a device parameter.
- posted: June 22, 2023 at 2:00am version: 8.3 revision: 405
Extended the device parameter notation to include offsets using '+' and '-' in the same way that '*' is currently used for specifying a parameter scaling. The combination of a scale and offset for the same parameter has not (yet) been implemented.
- posted: June 15, 2023 at 2:00am version: 8.3 revision: 404
Reimplemented the "extract do local" option as "extract path" with "extract do local" now being equivalent to "extract path .". This allows extraction files to be put in a subdirectory and not clog up the current working directory. Also: Fixed some behavior around the use of "ext2spice -p " so that it (1) works, and (2) is compatible with the new "extract path". Since the ext2spice and ext2sim commands are effectively independent of the primary extraction, the "-p" option is needed to correspond to the use of "extract path". Hopefully this is seen as only a minor inconvenience.
- posted: June 14, 2023 at 2:00am version: 8.3 revision: 403
Extended the "lef" command to include a new option "lef nocheck" to create a list of net names to ignore for antenna gate and diffusion area checks. This allows the nets not to have to be selected in their entirity but selected by chunk only. This reduces the time to write LEF on a large layout back to approximately what it was before the change to include the hidden area from "-hide" in the antenna area checks. Plus, it greatly reduces the time to generate LEF for large layouts when not using the "-hide" option.
Corrected an issue that produces potentially incorrect output from ext2spice due to "equiv" statements in the .ext file. The algorithm was not properly keeping the port as the preferred name of the node, resulting in the non-preferred name being used instead of the port name in the output. This would happen only if there was a label on a net that had a different name than the port name. The error became much more prevalent after changing the extract behavior to make "extract do aliases" default. Also fixed a somewhat related minor error in which magic would print an error message about ports being shorted together on the same kind of net where both a port and a (different) label were attached to the net. Since the non-port label is not a preferred name, then there should be no warning message. The warning is only intended for cases where two (or more) ports are truly shorted together.
- posted: June 10, 2023 at 2:00am version: 8.3 revision: 402
Added code to calculate area and perimeter of layers that are not on the same plane as a device identifier layer. This (finally!) allows proper calculation of area and perimeter of diodes and bipolars, for example.
- posted: June 8, 2023 at 2:00am version: 8.3 revision: 401
(1) Corrected an error with extraction in which terminal area and perimeter are not initialized, and if a terminal perimeter/area calculation is missed (which is happening on devices with terminals in planes other than the plane of the identifying type), then the perimeter/area of a previously handled device will get output. (2) Corrected an error with "flatten -inplace" in which the command fails to deal with instance arrays.
- posted: May 22, 2023 at 2:00am version: 8.3 revision: 400
Corrected an issue in which the device merging routine can generate NaN results for devices which are not FETs (specifically, devices that are declared using "msubckt" but are not FETs, although there may have been a related issue with non-FET devices not getting the correct M count), due to the device having zero measured width or length. NOTE: This may need more investigation. If a subcircuit device's method of merging cannot be understood, then such devices should never extract with "merge aggressive", and should always merge conservatively if and only if all parameters match.
- posted: May 19, 2023 at 2:00am version: 8.3 revision: 399
Apparently forgot to push the last set of changed. Fixes a null return value in EFbuild.c and adds a couple of sanity checks.
- posted: May 9, 2023 at 2:00am version: 8.3 revision: 398
Modified the handling of substrate ports so that an existing port number for a substrate port does not get reassigned, which will cause port ordering issues.
- posted: April 29, 2023 at 2:00am version: 8.3 revision: 397
Added a warning message if attempting to extract an empty cell, so that it is not so mysterious as to why no output was generated.
- posted: April 28, 2023 at 2:00am version: 8.3 revision: 396
Corrected a potential crash condition in extflat which can show up when reading .ext files with "equiv" statements in them. The generation of "equiv" statements was expanded recently, making it more likely for this issue to show up. There may be devices in a file that have a terminal node pointing to the node that gets removed, and these must be updated to point to the node that remains after merging. This requires a full loop over all devices and so could have a potentially large impact; but in general there are not many equiv statements (implying multiple different labels attached to the same node) and so it is unlikely that there would be a noticeable performance hit in practice.
- posted: April 27, 2023 at 2:00am version: 8.3 revision: 395
Rearranged the "lef write" routine so that the search for antenna gate and diffusion area on each pin is done before erasing parts of the cell that are to be hidden by obstruction layers. That preserves the antenna information even when "-hide" is used. This corrects the issue raised by Kareem Farid in the github issue tracker #236.
- posted: April 25, 2023 at 2:00am version: 8.3 revision: 394
Corrected an error in search for substrate under a device. If "space" is considered part of the substrate, then the check for planes to search should exclude "space" from the type mask first. Otherwise, all planes get searched, not just the substrate. Also: The same routine can falsely flag a device terminal as substrate if a split tile is marked as the device's region. This was also fixed.
- posted: April 23, 2023 at 2:00am version: 8.3 revision: 393
Allow for bash in locations other than /bin
Updated version with the merge of pull request #235 from Brad Smith.
- posted: April 19, 2023 at 2:00am version: 8.3 revision: 392
Corrected behavior of "load ... -dereference" to bring back a previous behavior that had inadvertently been changed. In recent versions, "load-dereference" would incorrectly apply the dereferencing to rather than just its subcells. Cleaned up the code around DBCellRead() in the process, so everything is more straightforward (although probably more could be done in that regard).
- posted: April 17, 2023 at 2:00am version: 8.3 revision: 391
Changed the default extraction options to include "do aliases" by default, since not setting it can have unfortunate consequences for cells that don't declare ports and have multiple conflicting labels on a node.
- posted: April 16, 2023 at 2:00am version: 8.3 revision: 390
Added a statement for every file load that prints the file path of the cell. This will greatly help in diagnosing issues when reading cells from multiple locations including cwd, relative paths, PDK libraries, and the search path. Also: Reworked the timestamp update message so that it prints all at once at the end of processing, not printing output for every cell processed as it is being processed. That prevents output from the file read routine from getting interleaved with the timestamp processing output.
- posted: April 7, 2023 at 2:00am version: 8.3 revision: 389
Implemented a change to differentiate between "sticky" labels and labels that are not connected to their declared layers. It's the latter type that need additional processing in ExtSubtree. Limiting this processing significantly cuts down on processing time when there are many labels in a layout, as happens with the "def read -labels" command option.
- posted: March 26, 2023 at 2:00am version: 8.3 revision: 388
Corrected errors in the extresist code and in extflat, both of which can result in negative resistors due to integer overflow. In all cases, the target was floating-point and it was only necessary to recast everything to float first.
Fixed the "flatten" command so that "-dotoplabels" works as advertised, and doesn't crash magic.
Also: Removed an unused variable declaration.
Also: changed MAXTOKEN in ResReadSim.c from 256 to 1024, having encountered an issue where a label in a flattened layout exceeded 256 characters, ended up in the .sim file, and was truncated when read back during "extresist". The change to 1024 is a stop-gap measure because ultimately I want to replace the use of .sim files with .ext files using the routines in extflat/, which would deprecate everything in ResReadSim.c.
- posted: March 25, 2023 at 2:00am version: 8.3 revision: 387
Finally tracked down several bugs in the sidewall walking routines that had been causing negative capacitances to substrate to be generated for certain complex geometries.
Found one additional issue in the extraction that causes incorrect partitioning of unshielded areas reaching outward from any given edge, caused by using a boundary value in the 2nd recursion call that had been modified for the 1st recursion call and so was no longer valid.
- posted: March 24, 2023 at 2:00am version: 8.3 revision: 386
Minor adjustment to output from esSIvalue() to avoid round-off error causing the SI suffix not to be the expected one. Adjusted the bounds where each SI suffix is used to keep output in the range of 0.1 to 100, although the boundary is very subjective. Made a correction to the extresist code to scan through all device records for a tile type. However, (1) there are cases being missed, and (2) this should not be necessary since all device types should be able to be known exactly from the contents of the .sim file. Needs more work.
- posted: March 23, 2023 at 2:00am version: 8.3 revision: 385
Corrected problem caused by adding a scrollbar to the parameters window in the toolkit, which was to the "tkwait" command, which waits for a change in state. What was intended was to wait for a change in state to visible only; once visible, the "tkwait" command should not invoked or else the process will block.
- posted: March 22, 2023 at 2:00am version: 8.3 revision: 384
Applied patch from Donn that converts strcpy() calls in ext2spice to "safer" strncpy() calls to prevent string buffer overflow. Also: Reimplemented the loop in the GDS write routine that counts ports and then outputs them in order. It was possible to hang magic for a long time by giving a port a very, very large index number. The new implementation uses qsort() to sort the ports by index, which is obviously much more efficient for the worst case (and efficient enough for all normal cases).
- posted: March 21, 2023 at 2:00am version: 8.3 revision: 383
Modified the behavior of cell reading, mainly with respect to dereferencing, and making the behavior of "load" on the command line (i.e., loading a cell from a file) the same as the behavior of loading a cell as a result of expanding an unloaded instance. In both cases, if "load -dereference" is used, and a cell does not exist in any search path but does exist in the original location, without dereferencing, then the cell will be loaded from the original location. Also: Corrected an error that has existed since adding the capability to read compressed files, which causes magic to crash when attempting to run the "crash recover" command (because that routine was mixing compressed and regular file stream calls).
- posted: March 18, 2023 at 2:00am version: 8.3 revision: 382
More corrections to the method of calculating fringe capacitance inside a halo area. The previous implementation used a linear accounting of error to determine the amount of shielding, but since the shielding is nonlinear, this is a poor approximation and regularly overestimates the shielding and leads to negative capacitances. The corrected method makes many more calls to the atan() function and the performance impact for extraction will need to be evaluated.
A couple of corrections to the last commit, where the equation for computing the amount of fringe shielding was wrong. This fixes one of my example cases, but not the other one, so I still need to pin down a condition that can result in negative capacitance.
Also: Found another error causing negative capacitances and fixed it, but the search continues for another mechanism that continues to do the same thing.
- posted: March 16, 2023 at 2:00am version: 8.3 revision: 381
Corrected issue with the commit of version 8.3.378, which can cause a crash when extracting some devices like bipolars with terminals on different plance.
- posted: March 15, 2023 at 2:00am version: 8.3 revision: 380
Corrected an issue from the last commit, which is that the default ground node name (which is static) gets put on the node list and is improperly deallocated. Corrected by simply allocating the string for the default substrate node instead of using the static string.
- posted: March 14, 2023 at 2:00am version: 8.3 revision: 379
Removed from the "lef" HTML document some mentions of property names that aren't actually handled by the "lef write" command. The three mentions are "LEFsource", "LEFuse", and "LEFshape", all of which refer to names of pin properties, not macro properties. These mentions were probably left over from early work.
Changed the behavior of capacitance value output in ext2spice and ext2sim to make use of the new esSIvalue() routine, so that it no longer depends on a preformatted string. Corrected an issue where the esSIvalue() routine would output "a" for "atto" which is not supported by ngspice.
- posted: March 13, 2023 at 2:00am version: 8.3 revision: 378
Corrected the extraction of length and width of devices that are (truly) missing a terminal (such as a MOSCAP made with a gate extending into but not crossing a diffusion region). Added the most requested GUI feature, which is a vertical scrollbar on the parameterized device window (could be improved by maximizing window height without exceeding display height).
- posted: March 11, 2023 at 2:00am version: 8.3 revision: 377
rename Region to ExtRegion
Updated the version to go along with the merge of pull request 222 from Sean Cross. Corrected a few places where the blanket conversion "Region"->"ExtRegion" picked up some comment lines that were unrelated to the structure name.
- posted: March 9, 2023 at 2:00am version: 8.3 revision: 376
Made a simple but important change to "readspice.tcl" to unexpand the cell being reworked for port numbering. Otherwise *all* labels are selected, which can take a very long time depending on how many labels are in the layout. Note: Need a "select area ports" function, and better yet, rework the whole label database so that magic no longer has to run compute-intensive routines like DBEraseLabelsByContent().
- posted: March 8, 2023 at 2:00am version: 8.3 revision: 375
Implemented and revised the "CIFhier" property to override the "cif *hier write disable" and "cif *array write disable" commands for a specific cell def and its descendents. The revision ensures that all descendents apply the override. The "cif write" command uses a stack instead of recursion, which makes it difficult to apply the same method. Currently the method only works for the "gds write" command, and implementing the feature for "cif write" is deemed not worth the effort.
- posted: March 6, 2023 at 2:00am version: 8.3 revision: 374
Corrected a buffer overrun situation in ExtBasic.c when printing the "connected other node to. . ." message when terminals of a device are shorted. A long enough node name, especially one created by concatenating hierarchy when flattening a cell, can easily overrun the short 256-byte string buffer. Fixed by changing strcat() to strncat().
- posted: March 1, 2023 at 2:00am version: 8.3 revision: 373
Corrected the ext2spice device output for device length, which somehow acquired a typo which made it write "w=". Resolves issue #223 from Mitch Bailey.
Corrected "ext2spice" to mark nodes on resistors from "extresist" so that they do not get marked as "FLOATING" nodes when writing out the parasitic capacitances at the end.
Also: Corrected an error in the check for coincident instances. This check was too aggressive and would delete coincident instances based on cell def and bounding box only. If the cells were at different orientation or mirrored, they would be incorrectly flagged as coincident. Instances read from GDS could be deleted due to this issue.
- posted: February 28, 2023 at 2:00am version: 8.3 revision: 372
Modified the "port renumber" command to use (case-insensitive) natural sort instead of ASCII-based sorting, so that ports that are numbered arrays will be indexed properly by count. Also: Modified the "extresist" handling of substrate to draw the default substrate type over the entire cell area (less areas of nwell or other conflicting type). This allows extresist to extract the entire substrate as a resistive network. The result is ugly and may warrant some aggressive network simplification, but it should at least be realistic.
- posted: February 25, 2023 at 2:00am version: 8.3 revision: 371
Corrected the ext2sim output and extresist to properly handle 2-terminal devices without complaining. The previous handling seemed to be technically correct other than spitting out warnings about missing terminals.
- posted: February 24, 2023 at 2:00am version: 8.3 revision: 370
Added code to handle string overflows in property strings. It might be better to flag a warning, as property strings longer than the original buffer size of 2048 are probably a bad idea.
- posted: February 23, 2023 at 2:00am version: 8.3 revision: 369
Corrected the reading of the "defaultsidewall" statement in the tech file "extract" section to work correctly when the offset is negative. Generally, a negative offset is nonphysical and is just curve-fitting round-off error, but the existing code was failing to divide out the factor of 1000 that had been multiplied through when reading the tech file, resulting in a very wrong offset.
Corrected an error in the extract section setup of the tech file that allocates and deallocates a single layer mask used by the tech reader. Decided to work around the issue just by allocating it only once and not releasing it---it's just a few bytes.
- posted: February 21, 2023 at 2:00am version: 8.3 revision: 368
Corrected the "measure" (Tcl scripted) command to fix an error when internal units no longer match lambda units. The text would match the dimension of the cursor box, but the measurement lines would be drawn assuming a lambda scale, not the internal scale.
- posted: February 17, 2023 at 2:00am version: 8.3 revision: 367
Important update: Reworked the extraction method to properly isolate the terminal areas of a device (e.g., source and drain) and calculate their area and perimeter individually for the device (in addition to the traditional method of calculating area and perimeter of each resistance class for the entire node).
- posted: February 14, 2023 at 2:00am version: 8.3 revision: 366
Corrected the "extresist" command behavior to ensure that transistor records match between the ".ext" file and the ".res.ext" file for the number of terminals per device. Previously, the first device type for the layer type was always being used, and if it had fewer terminals (e.g., a MOScap), then one terminal would go missing in the output.
Reworked the previous commit in a way that makes more sense, as the problem only occurs when handling the legacy "fet" device.
- posted: February 3, 2023 at 2:00am version: 8.3 revision: 365
Remove cast of pointer to struct and back again.
Updated version to go along with the merge of pull request #217 from Anton Blanchard.
- posted: January 28, 2023 at 2:00am version: 8.3 revision: 364
(1) Added a check for unclosed boundaries when reading GDS. This is diagnostic only and does not change the read-in behavior. (2) ext2spice: Corrected an error that had been introduced into version 8.3.171 that accidentally marks all devices as visited which causes all source/drain areas and perimeters to be output as zero. (3) extract: Sweeping changes to handling of fringe capacitance. Removed the (recently added) "fringeshieldhalo" parameter from the tech file. Reworked the fringe capacitance models based on results from the "capiche" project (github/RTimothyEdwards/capiche). Fringe shielding is now done by clipping fringe at the boundary of a shielding shape, rather than trying to calculate the amount of shielding (as the "capiche" project proved this to be equivalent). Values for partial fringing are modeled by atan(x), which like the sidewall (1/x) curve, extends to infinity and values are limited by the halo but do not otherwise depend on the halo. Because of this, the halo can be made variable and controlled by the user for deciding on the tradeoff between accuracy and run time. A new command option "extract halo" was added to allow this control over the halo distance.
- posted: January 18, 2023 at 2:00am version: 8.3 revision: 363
Modified the "gds subcell polygon" command option to split into three types: "none", "temporary", and "keep" (instead of "true" or "false"). "none" now reverts back to the original behavior, because it was found that saving polygons in subcells prevents them from participating in boolean operations. The "keep" option is the original option (polygons kept in subcells), and "temporary" is the one recently introduced (which puts polygons in subcells and then flattens them). This restores the original method while retaining the recently implemented method. However, a proper solution needs to be found that deals with the problem of boolean operators.
One small revision to the last commit, to make the command option "gds polygon subcells true" the same as "gds polygon subcells temporary" instead of "gds polygon subcells keep". This works well for gf180mcu in open_pdks to keep the existing behavior but won't break the GDS input on an older version of magic.
- posted: January 17, 2023 at 2:00am version: 8.3 revision: 362
Don't cast pointer to struct and back again in DBDiagonalProc()
Fix compiler warning in drcMaskSpacing()
Also: Fix a few issues in leaDBSearchForTech()
Also: Remove spurious ; from PlotPS()
Also: Updated the version to go along with the merge of pull request 213 from Anton Blanchard (1. Don't cast pointer to struct and back again in DBDiagonalProc(), 2. Fix compiler warning in drcMaskSpacing(), 3. Fix a few issues in leaDBSearchForTech(), 4. Remove spurious ";" from PlotPS()).
- posted: January 14, 2023 at 2:00am version: 8.3 revision: 361
Added an experimental option for the cifoutput tech file section to force magic to scale down the internal grid to the minimum manufacturing grid size specified in the cifoutput section, upon reading the techfile.
- posted: January 9, 2023 at 2:00am version: 8.3 revision: 360
Add PlowShowTime prototype when NO_RUSAGE isn't defined
Use offsetof()
Also: Fix clang unsequenced modification warning
Also: Updated version to go along with pull requests #208 from Alessandro de Laurenzis, and pull requests #209 and #210 from Anton Blanchard.
- posted: January 5, 2023 at 2:00am version: 8.3 revision: 359
Added a command option "setlabel box" to modify the attachment box of a label from the command line. Also fixed a long-standing irritation that "setlabel" would change the properties of a label in the edit cell but not in the selection itself, which would cause the label to be drawn both with the original properties in the selection and the new properties in the edit cell. Now both views will track the same changes.
- posted: December 23, 2022 at 2:00am version: 8.3 revision: 358
Added handling of mask-hints properties to the flatten-in-place method to ensure that mask hint geometry is retained when a cell instance is flattened into the parent cell.
Expanded the method for "flatten in place" to include the more natural flattening from a selection. That is, instead of specifying "flatten -doinplace", you can select some number of instances and just do "flatten -doinplace". |
- posted: December 22, 2022 at 2:00am version: 8.3 revision: 357
Reworked the "port" and "noport" label type designations in the tech file to correct the underlying problem with the SkyWater sky130 process in which a different layer/purpose pair is used for TEXTTYPE and DATATYPE for the same layer. Previously, all output from magic writes the same pair for both when writing a port label. The new method preserves existing syntax, although there are some differences based on what order the "port" statement appears relative to other types for the same layer.
Changed the default behavior of the "load" command to print verbose messages (got changed in a recent commit to a quieter output which doesn't provide much feedback about what's going on during a lengthy load).
Also: One more correction related to the "verbose" level of the "load" command, without which the previous commit does nothing.
- posted: December 20, 2022 at 2:00am version: 8.3 revision: 356
Modified the "load" command so that "-quiet" is promoted to "-silent", and "-quiet" now produces relatively little output except for important warnings and errors.
Updated the documenation on the "load" command to include the "-silent" option and the redefinition of "-quiet".
Also: Added code to avoid making a call to get a default layer width on an invalid type. This prevents magic from generating unneeded error messages about default layer widths on GDS read-in.
Also: Corrected the "flatten in place" command to force a redraw after flattening, since the appearance of the layout will change even though there are no physical changes. Finally got around to debugging and correcting the input mask-hints, which can preserve vendor GDS by marking areas where the vendor GDS differs from magic's automatically generated output (the method was almost correct and only needed an input scale factor change).
- posted: December 17, 2022 at 2:00am version: 8.3 revision: 355
Corrected the method of "flatten in place" from the previous commit to prevent port labels from being copied up from the flattened cell into the parent, and prefixing the instance name to text in the instance top level so that there will be no port or label collisions in the parent cell after flattening the child cell in place. Also: Changed "extract dolabelcheck" to be the default setting.
- posted: December 16, 2022 at 2:00am version: 8.3 revision: 354
Reverted the toolkit change from the last commit after realizing that the feature for implementing callbacks on a selection list was already implemented via the add_dependency procedure. Modified the GDS read to remove cell instances that are placed directly on top of one another in the same cell. Modified the GDS read to make a better selection of a default font size for text that specifies a font but not a size, using the minimum width for the layer the text is placed on. Modified the GDS read to remove text with empty-string placeholders (created when a pin layer is read but no text exists to go along with it, due to GDS not having a specific way to make pins, such that pins have to be split between one record for geometry and another for text).
- posted: December 15, 2022 at 2:00am version: 8.3 revision: 353
Discovered that reading in polygons as subcells and then flattening can be much, much faster than reading in polygons directly into a cell from GDS. Modified the handling of polygons so that they are *always* read into subcells. If the "polygon subcell flatten true" option is not enabled, then the subcells are flattened at the end of reading the cell, and the polygon cells are deleted. This method avoids most of the cases in which "polygon subcell flatten true" has ever needed to be set.
Added a new option "-doinplace" for the "flatten" command. This should have been done a long time ago! Allows an instance to be flattened in place inside a cell def, which otherwise requires a complicated set of commands to do. Also: Modified the polygon handling routine from the previous commit so that it correctly removes the polygon cell defs after flattening them into the parent cell.
Also: Modified the toolkit add_selection procedure to take an extra optional argument that is a callback function, so that the act of selecting something from the drop-down menu can cause things to happen such as changing the GUI window contents for the item selected.
Also: Implemented simple drain and source length calculations as device parameters l1 and l2. Provides a way to pass the source or drain length as a parameter for, for example, an extended FET drain implemented as a resistor abutting the FET gate. Could potentially be used as a way to determine source/drain area and perimeter without resorting to measurements of a shared node.
- posted: December 14, 2022 at 2:00am version: 8.3 revision: 352
Added a new special device model name "Short" which enables the use of a resistor type as a FET extended drain, allowing the FET drain node to short across to the other side of the resistor so that the resistor is absorbed into the FET device. Used with the GF180MCU process to describe the salicide-block ESD FET types.
- posted: December 13, 2022 at 2:00am version: 8.3 revision: 351
Modified the "lef read -annotate" method so that pins are checked for compatible layout over the area of the pin rectangle in the entire hierarchy of the cell, not just in the top level. This corrects issues where pins are placed in the top level cell with no metal underneath. It is written in such a way that it will work regardless of whether paint is split across the hierarchy, or the label spans different types (such as crossing a contact).
- posted: December 10, 2022 at 2:00am version: 8.3 revision: 350
Fixed an error with LEF read where duplicate macros are encountered in the input. The name of one was being modified but was being right-justified into the string, resulting in a name starting with many space characters. Also: Fixed an issue with extresist where a label that ends up with an empty string can become a node with an empty string name in the .res.ext file output.
- posted: December 7, 2022 at 2:00am version: 8.3 revision: 349
Corrected an error in "extresist" that can output an incorrect number of terminals for devices that don't have the usual gate/ source/drain terminals (e.g., diodes, resistors, capacitors) when writing the devices with re-mapped terminals into the .res.ext file. Also: Changed the size of the word containing the name refcount for "equiv" statements, since an accidental shorting of pins can cause a large number of "equiv" statements in a .ext file, causing an overrun of the previously 1-byte refcount (this probably does not make the structure any longer, since it likely has to fit to a word boundary).
- posted: December 1, 2022 at 2:00am version: 8.3 revision: 348
Made a variant of the "directional surround" rule to be able to implement a GF DRC rule. This variant allows for a difference between the minimum allowed surround on one side and the amount that must be extended on the adjacent side.
Added a method for a property named OBS_BBOX to specify a minimum area to be marked as an obstruction when writing a LEF file with the "-hide" option.
Also: Revised the string array for labels during output of a .mag file from 256 to 2048. The latter matches the maximum array used for DEF file labels, although allocation is probably preferable.
- posted: November 30, 2022 at 2:00am version: 8.3 revision: 347
Fixed an error in "lef read" that fails to apply an annotated pin on a compatible area due to an incorrect type mask. (Also note that this routine only works (after correction) for RECT statements, but there should be a similar check for POLYGON statements.)
- posted: November 23, 2022 at 2:00am version: 8.3 revision: 346
Modified the "dereference" behavior so that it does not produce warnings when rereferencing a layout file as intended.
- posted: November 22, 2022 at 2:00am version: 8.3 revision: 345
Implemented a method to handle empty subcells that exist because a library has been read in with the "gds readonly true" option set because the cell contains information on where in the GDS the cell is located, but the cell is empty because it was flattened into the magic view and all of its contents were erased. This can cause issues with LVS if magic generates an empty cell into the netlist and the LVS tool tries to compare the cells by name. Also, this prevents unnecessary .ext files and unnecessary merges to the substrate of such cells (since all cells have an implied substrate).
- posted: November 21, 2022 at 2:00am version: 8.3 revision: 344
Added pin connection to the list of NET connections in a DEF file when doing "def write", which was missing.
Revised the last commit slightly to put the PIN entry as the first entry of a set of net connections in a DEF file, instead of the last entry.
Also: Corrected the LEF technology setup, where LEF layers (routes and contacts) take default values from the DRC section. Since both are in lambda, but the DRC section uses a two-part integer and modulus representation, if default values are taken before scaling, the LEF layers may get rounded values. This has been solved by marking values with -1 to indicate that they require defaults, and then set those defaults (from scaled DRC rules) after scaling all other tech values.
- posted: November 20, 2022 at 2:00am version: 8.3 revision: 343
Final (I hope!) corrections to the "def write" command.
- posted: November 19, 2022 at 2:00am version: 8.3 revision: 342
Small correction to defWrite to cancel a non-default rule when a wire with default width is encountered.
Implemented a method in EFBuildNode() to capture nodes which are redundant (same name, different net). Previously, the method was to keep the first such node and ignore all others except to add their resistance and capacitance to the original node. This prevented routines like "def write" from enumerating all nets unless they had unique names. The new method keeps the additional records including the node location where they can be found by EFNodeVisit(), but flags them with EF_UNIQUE_NODE so that routines like ext2spice or ext2sim can choose to ignore them. This implies that this method could be used to reimplement "extract unique" within "ext2spice" or "ext2sim" without altering label text. This has not yet been implemented.
Also: One correction to the last commit, to avoid missing output of port nets in "def write".
- posted: November 18, 2022 at 2:00am version: 8.3 revision: 341
Substantially revised the "def write" and "def read" routines. Both were corrected with respect to the definition of non-default (taper) rules. "def write" was additionally modified to avoid redundantly processing tiles where tile areas were merged together to form a complete wire. There is plenty of room for optimization, but the output appears to be matching the layout. Also: Revised the definition of "(not) visible layers" to include labels attached to those layers, so that turning off visibility of any layer will also hide all labels attached to that layer.
- posted: November 12, 2022 at 2:00am version: 8.3 revision: 340
Corrected an issue with readline that breaks the non-Tcl/Tk flow due to a missing function prototype. Modified the GDS output flow to always output instance IDs as a property, not just in the non-default case. The property has been used for many years and appears to be accepted by all tools reading GDS, so there is no downside to always generating this output. This has the upside that default instance names don't get scrambled by going from magic to GDS and back to magic.
- posted: November 11, 2022 at 2:00am version: 8.3 revision: 339
Based on output from a large contact array for a pad, modified the default behavior of magic to make use of the "gds contacts true" option to output contacts as arrays of subcells instead of individual boundary entries, as the former is much more efficient than the latter. Set the option to be true by default, and set the "gds flatglob" option to have one entry "$$*$$" corresponding to the contact subcells created by the "gds contacts" option, so that GDS reads and writes as it did previously (but using a different method). Expanded the method to include "squares-grid" and "slots" operators (the latter should produce much more efficient fill pattern arrays). Implemented for both compressed and uncompressed GDS. Tested in all variations.
Left in the new code supporting the "calma contact true" option for the squares-grid operator and for GDS compression. But I reverted the "calma contact" option to be false by default, because the method does not exactly match the output when not using cell instance arrays, and so may produce unexpected results. Will need a different implementation that uses the same code to generate the same (effective) layout.
- posted: November 10, 2022 at 2:00am version: 8.3 revision: 338
Fixed the DEF write routine, which had an error in identifying "slivers"; the error tended to produce artifacts (extra metal) around contacts. Fixed an issue that caused the DEF write routine to open the same file twice instead of a new file for the second part of the DEF data, and then potentially hit a runaway condition when trying to merge the two files together.
Corrected an error introduced with the last push which changes wire direction on vias during DEF write without changing the "orient" value, causing Y values to get copied into X positions in the output.
Also: Corrected the "def write" output with respect to the "-units" option. This is important as the default units of 1nm are not necessarily able to be converted to integer values if the minimum manufacturing grid is an odd number of nanometers.
- posted: November 9, 2022 at 2:00am version: 8.3 revision: 337
Corrected an error in "def write" that starts output on the wrong layer when the first part of the route is a contact (starts on the via top instead of the via bottom).
- posted: November 7, 2022 at 2:00am version: 8.3 revision: 336
Corrected the antenna checking routines, which were incorrect with respect to calculations around diode-connected diffusion regions. The diffusion area calculation needed to be fixed to avoid double- counting contacts, and the value for the ratioDiffA coefficient needed to be scaled, since it is multiplied by the diffusion area and therefore has dimensioned units of (1/area^2) and should be treated like all other dimensioned units in magic.
- posted: November 4, 2022 at 2:00am version: 8.3 revision: 335
Fixed an instance where dbFgets() was used in the "def write" routine; that is incorrect, and it should have been fgets(). When dbFgets() is recast to a zlib version, then its use in "def write" causes magic to crash.
- posted: November 3, 2022 at 2:00am version: 8.3 revision: 334
Changed the behavior of GDS writing to halt with an error if an attempt is made to write an abstract view to GDS. This behavior can be overridded with the new command option "gds abstract [enable|disable]". Also: Corrected extraction to allow split tiles to be set as the reference tile for a node. Previously this was allowed only if the tile was the first to be searched, but that can cause different tiles to be marked as the reference depending on where the search starts, resulting in different names for the same node in .ext files, which is bad. Also: Modified the LEF annotation to avoid bad entries in the LEF that would create layers in the layout where none exist.
Added the ability to read compressed .mag files (writing is not yet supported). Fixed the long-standing issue in which DRC does not get stopped by the "drc off" command (the behavior for interrupting the DRC was dependent on the DRC being turned on, and the "drc off" command was turning it off before breaking, causing the interrupt to be ignored).
- posted: October 30, 2022 at 2:00am version: 8.3 revision: 333
Compatibility with C99 standard
graphics/grTkCommon.c: remove OGL includes
Also: C99 code compat when configured with no TCL support
Also: Define Cairo functions prototypes only when support is enabled
Also: A handful of changes after applying pull request #191 from Alessandro De Laurenzis. That pull request cleaned up the vast majority of compiler warnings. However, that cleanup exposed a few additional warnings pointing to errors in the code that needed fixing. The code now compiles cleanly except for one warning about redefined CAD_DIR that I have not looked into.
Also: Added "-Werror=implicit-function-declaration" to CFLAGS in the configure script, now that Alessandro De Laurenzis has cleaned up the code so that it will compile with the setting (now, just need to do the same thing for "implicit-int"!).
- posted: October 23, 2022 at 2:00am version: 8.3 revision: 332
Corrected an error in parsing the "defaultperimeter" statement in tech files which incorrectly parses the syntax using five parameters. This syntax variant does not get used often, which is why the error went undetected for a long time.
- posted: October 19, 2022 at 2:00am version: 8.3 revision: 331
Corrected the GDS write for "boundary" to make sure that the calculation of the area to check for output and the clip box does not reduce the size of any layer associated with the fixed bounding box declared by the FIXED_BBOX property.
- posted: October 16, 2022 at 2:00am version: 8.3 revision: 330
Added a "flatten -doproperty" command option that allows selective flattening based on cells which have a property "flatten". Also: Modified the DEF read and write to convert DIEAREA into a FIXED_BBOX property. This solves issues with placing of components from DEF, when those components may not have have come from place & route and may not have P&R bounding boxes. Also: Fixed the documentation for the "dump" command, which was missing the optional orientation in the description.
- posted: October 8, 2022 at 2:00am version: 8.3 revision: 329
Corrected a small error in "extract unique" that will attempt to run free() on a memory location that was never allocated. This error has no effect on anything, but correcting it prevents magic from issuing a mysterious warning.
- posted: September 29, 2022 at 2:00am version: 8.3 revision: 328
Corrected a really stupid error which prevented the "extract unique notopports" from working. Fixes issue #186 reported by Mitch Bailey.
- posted: September 28, 2022 at 2:00am version: 8.3 revision: 327
Corrected a stack corruption error (that I have never seen in practice but which was detected by AddressSanitizer. Also corrected a crash condition in the absence of a window; also hard to reproduce.
Corrected the cell search algorithm so that it allocates memory for BPEnum instead of putting it in the local frame. The structure is half a megabyte and will severely limit the hierarchy depth because it is used in the recursive cell search.
- posted: September 24, 2022 at 2:00am version: 8.3 revision: 326
Made some modifications to the "def write" command: It now handles non-default rules and so can accurately capture wire widths other than the technology LEF defaults (also corrected a bug with non- default rules for "def read"). Corrected via handling in "def write" to function as claimed (although the algorithm is still naive and expects all contacts to be rectangular, which is usually true but doesn't have to be).
Found a crash condition reported by Abhinav Uppal where labels that are unattached (type = space) will cause magic to crash on the command "lef write -hide"---The lowest level issue was in SelectChunk(), so for good measure SelectChunk() now checks for type == TT_SPACE, and "lef write" does also.
- posted: September 20, 2022 at 2:00am version: 8.3 revision: 325
Added a check for unfortunate values of a MAG record in a GDS text record. Failure to use the right 8-byte real format can produce bizarre results where a label's bounding box ends up in some random place and messes up an entire top level circuit's bounding box.
- posted: September 15, 2022 at 2:00am version: 8.3 revision: 324
Enhanced the "def read -annotate" option to correctly annotate pins with class, use, and shape information from the DEF file PINS record. This is similar to what is done with LEF file annotation, but less sophisticated (only erases an existing pin if it is an exact match for pin name and location).
- posted: September 9, 2022 at 2:00am version: 8.3 revision: 323
Modified the cell copy routine so that it does not attempt to guarantee unique instance names during generation of each new copy, but only afterward, in bulk. Otherwise the copy routine has a runtime that is exponential with the number of cells being copied. This and the last commit guarantee that the "flatten -novendor" option works as advertised.
Updated the version with the last commit, which was supposed to be done yesterday and so shouldn't have needed a version update.
Also: Modified the "flatten" command so that flattened labels use an alternative separator "." instead of "/". This prevents other routines that expect "/" to indicate a true hierarchy from treating the label as hierarchical instead of flat, which should be the correct handling for a flattened cell.
- posted: September 8, 2022 at 2:00am version: 8.3 revision: 322
Added a prototype function for DBDescendSubcell(), without which the return value is cast to the wrong size and all calls fail.
- posted: September 5, 2022 at 2:00am version: 8.3 revision: 321
Make use of termios on OpenBSD
Updated version to go along with the merge of pull request #181 from Brad Smith, for OpenBSD compatibility.
- posted: September 2, 2022 at 2:00am version: 8.3 revision: 320
Modified the "element" command so that coordinates may be given in physical units (e.g., um).
- posted: August 31, 2022 at 2:00am version: 8.3 revision: 319
Corrected an error with perimeter calculation of a device that was caused by other code that can move the plane of a device to match the plane of a port. Solved by retaining the original plane of the node in the extTransRec structure, and using that to determine the device plane for purposes of calculating perimeters and not double- counting contacts.
- posted: August 27, 2022 at 2:00am version: 8.3 revision: 318
Modified the handling of GDS library names to avoid creating cells with slashes in the name (picks up the text after the last slash). Also allowed the "gds library" command option to modify the behavior of "gds read" (previously only affected "gds write") to indicate that the GDS file is a library and that there are no top- level contents, only subcell definitions. Also: Corrected a typo from yesterday's commit that prevents magic from compiling (oops).
Corrected a failure to check for an invalid layer in the routine that queries a default layer width. Otherwise this can cause a segfault, especially when a technology file has not been specified and the minimum tech is in effect.
- posted: August 26, 2022 at 2:00am version: 8.3 revision: 317
Print cell name for antenna violations with diffusion diodes
Implemented the correction of Anton Blanchard's git pull request #180 "Antenna checker should ignore vias in partial mode". I changed the implementation by moving the correction into the antennaAccumFunc() subroutine so that it skips the area calculations for the contacts, avoiding unnecessary computation. Otherwise, it's the same (vias do not contribute to the surface area of the antenna when calculating antenna area in "partial" mode).
- posted: August 23, 2022 at 2:00am version: 8.3 revision: 316
Use proper path for more(1) on OpenBSD / NetBSD and DragonFly
Simplify OpenBSD shared lib handling
Also: Updated version to go along with the merge of pull requests 175 and 176 (OpenBSD/NetBSD/DragonFly support), and a change to the wrapper to allow manual override of the number of icon columns (because sometimes some window managers are clueless about the correct window dimensions).
- posted: June 25, 2022 at 11:03am version: 8.3 revision: 315
Added an option to "def read" to avoid creating obstructions from "BLOCKAGES" statements.
- posted: June 21, 2022 at 2:00am version: 8.3 revision: 314
Added a catch for a node named "(none)" in a merge line. This prevents magic from crashing but does not do anything about the fact that a non-existent node ended up in the .ext file, which will have to be investigated.
Added a quick check on cell defs when running "antennacheck" to make sure that the cell def's .ext is not marked "abstract". Otherwise, "antennacheck" appears to run, but no output is produced, and no reason is given.
- posted: June 15, 2022 at 2:00am version: 8.3 revision: 312
Fix bugs in port first, next commands.
Updated version to go along with the merge of pull request #169 from Matt Guthaus.
- posted: June 11, 2022 at 2:00am version: 8.3 revision: 311
Modified the handling of polygon cells when writing GDS; if a polygon cell has been created with the "gds polygon subcell" option and the parent cell is read-only (vendor GDS), then the polygon cell does not actually exist in the original GDS and should not be output during a "gds write".
- posted: June 9, 2022 at 2:00am version: 8.3 revision: 310
Fixed two issues: (1) Found a backwards-incompatibility with the fringe capacitance halo where the default halo distance was set to zero instead of one and caused divide-by-zero issues; (2) Found extraction issues where labels picked up from cells flattened during GDS reading cause the flattened/emptied cells to show up in the extraction with extra pins that can mess up LVS. Solved this by removing labels from flattened/emptied cells.
- posted: June 5, 2022 at 2:00am version: 8.3 revision: 309
Working through various issues with parasitic capacitance extraction using the newer methods for nearest-edge searching and fringe area of effect. Removed a same-net check in a routine that removes capacitances that are redundant due to hierarchical overlaps; these redundancies must be checked on shapes within the same net. Corrected (again) an out-of-clip-bounds check.
Found one more error that was causing issues with the hierarchical capacitance adjustments, and may have caused issues with basic hierarchical extraction as well (although I have not checked or proven the latter).
- posted: June 1, 2022 at 2:00am version: 8.3 revision: 308
Corrected an error in the fringe area calculation that was supposed to be ignoring geometry outside the area of the halo, but wasn't.
Found another place where a bounds check on the clip area was not done (at all), again resulting in negative capacitances.
- posted: May 30, 2022 at 2:00am version: 8.3 revision: 307
Corrected a (very bad) accidental deletion in the last commit that causes the compile to fail.
- posted: May 29, 2022 at 2:00am version: 8.3 revision: 306
(1) Corrected an error in generating GDS_FILE properties when reading GDS files, caused by an unneeded change to pass both the "original" filename and the actual filename when handling compressed files---The original filename is unneeded. (2) Implemented several new methods for parasitic extraction. The first is an option offset value to apply to sidewall calculations. This handles issues where actual wire separation is different from drawn wire separation, which can be significant for the 1/d calculation of sidewall coupling. The second method is to use the recently-added fringe halo to compute the coupling of the fringe capacitance to nearby wires. Prior to this change, all fringe capacitance was applied to surfaces directly under a wire edge as if the fringe capacitance did not extend outward from the edge. Now the capacitance is properly pro-rated for the position of any overlapped shape inside the fringing field. Finally, the third method added is a new search algorithm for finding the nearest shapes along the length of a boundary. This is used for sidewall coupling and fringe shielding, where the nearest shape dominates the coupling, and any shapes behind are shielded and may (to first order) be ignored. Previously, the entire halo was searched without regard to shapes shielding other shapes behind, and a recent correction added an ad-hoc search for blocking shapes that was inefficient and not always correct. The new method is both efficient and accurate.
Modified the configure script and Makefiles so that systems that do not include zlib by default will pick it up from the compile line.
- posted: May 19, 2022 at 2:00am version: 8.3 revision: 305
Corrected a typo in the new sidewall coupling shield check that will cause an infinite loop during extraction. Fixes issue #166 on the github issue tracker.
- posted: May 13, 2022 at 2:00am version: 8.3 revision: 304
Modified the configure script to allow zlib compression to be disabled from the configure command line. Corrected an error with the non-zlib-enabled compile.
A number of other corrections around CalmaFullDump, which had mistakenly recast the input file routines from zlib back to stdio; only the output file routines should have been changed.
Also: Added some code to the sidewall coupling search that will avoid computing coupling to shapes that are shielded by other intervening shapes. This is not a perfect solution but will properly handle all but a few pathological cases.
Also: Applied the same solution as was just committed for sidewall coupling to the fringe shielding calculations, which uses very similar code and suffered the same problem of not being able to recognize when another shape was between the two edges under consideration. Fixing this makes the fringe shielding calculations symmetric, as they should be.
Also: Updated the version because the github mirror was copied earlier today due to the critical fix for the compressed GDS file code.
Also: Corrected an error in the call to calmaDumpStructure(), which I added an extra argument to, briefly, and then failed to remove it from one call.
- posted: May 12, 2022 at 2:00am version: 8.3 revision: 302
Corrected an error in the new zlib GDS reading code that missed changing the "rewind" function to "gzrewind", causing a crash when a GDS file has to be re-read due to out-of-order contents.
- posted: May 11, 2022 at 2:00am version: 8.3 revision: 301
Implemented native gzip compression/decompression using zlib routines. Compression levels of the output can be controlled with the "gds compress []" command, where 0 (default) is uncompressed output, 6 is "normal" gzip compression, and 9 is maximum compression.
Removed the unused former checks for system "gzip" and "gunzip" from the configuration script.
- posted: May 10, 2022 at 2:00am version: 8.3 revision: 300
Removed the "-k" option from "gunzip", which is not only redundant with "-c" but is unsupported on some OS versions of gunzip.
- posted: May 6, 2022 at 2:00am version: 8.3 revision: 299
Added the capability to handle compressed GDS files through the use of systems calls to "gzip" and "gunzip". A compressed GDS file can be made simply by doing "gds write.gds.gz", and can be read simply by doing "gds read .gds.gz". Names of compressed files can be put in the GDS_FILE property of a cell.
Extended the code from the previous commit to handle automatically pointing GDS_FILE to a compressed filename when using "gds readonly true" on a compressed file. The start and end pointers still point to data bounds in the uncompressed file.
- posted: May 5, 2022 at 2:00am version: 8.3 revision: 298
Corrected an issue in the extraction where a region could be set to a split tile type, causing a crash if the node name had to be discovered by a "hard search".
Added a 2nd use of the "device" property, which has long been needed, which instead of defining a device or subcircuit that exists inside the cell, instead redefines the cell itself as a device or subcircuit model that exists in the PDK. This is used where a specific layout subcell has its own associated device definition in the PDK. Instead of the "device" property value being the line that gets generated for a device in the subcells .ext file, the property value should be the word "primitive" optionally followed by any parameters that need to be passed to the subcircuit call.
- posted: May 4, 2022 at 2:00am version: 8.3 revision: 297
Add AppImage Building Capabilities
Makefile cleanup, dockerignore
Also: Update to CentOS 7, Add AppImage CI
Also: Mac Build Fixes
Also: Disable Mac CI for now: XQuartz breaks on Github Actions
Also: Updated VERSION to go along with the merge of pull requests 160 and 161 from Donn, and modified one of the files from PR 161 to maintain typographic consistency.
Also: Still recovering from unintended consequences of setting EditCellUse to NULL for a read-only view. . . Changed the command "what" so that it will not fail on a non-edit cell. There are likely a few other commands that should not fail on non-edit cells because they do not alter anything.
- posted: May 3, 2022 at 2:00am version: 8.3 revision: 295
Made some corrections to the "extresist" code to avoid issues with extracting a port-to-port net that does not touch any devices. The error happens in a fairly rare set of cases.
Made a correction to the command option "contact erase" which was not properly handling stacked contacts, failing to erase a contact out of the middle of a stack.
Also: Corrected a problem with extresist in which node names are not transferred when doing a node merge, which can cause named terminals to get lost, because there is no longer a node with a name corresponding to the terminal. The node gets a default name which is not the terminal name, and the netlist is broken.
- posted: April 26, 2022 at 2:00am version: 8.3 revision: 294
Modified the file locking behavior so that the command "locking" is recognized as a valid command when file locking has been disabled as a compile-time option. The command then generates an error on "locking enable" but simply ignores the command "locking disable".
- posted: April 21, 2022 at 2:00am version: 8.3 revision: 293
Added new tech DRC rule option "angles 45-only", which handles rules such as "No 90 degree bends on transistors".
Updated version.
Also: Corrected an issue with non-Manhattan tiles, caused by the fact that the "width" rule is assumed to be symmetric, and not checked in all four directions, as that would be redundant. But non-Manhattan tiles are not symmetric and must be checked all four directions. Implemented in a way that does not increase the DRC processing time.
Also: Additional extensions to allow "extend" to be used for transistor gates when the gate length minimum may be larger than the gate width minimum, and to implement an "angles" option on the "width" rule that can implement rules where a layer width must be wider as measured from angled edges than from straight edges.
- posted: April 20, 2022 at 2:00am version: 8.3 revision: 292
Found a problem with the calculation for the non-Euclidean grow/ shrink routine that over-computes the diagonal position (the equation failed to divide the intersecting angle in half). Rewrote the equation for the correct grow distance, still accounting for the grid limit (if set).
- posted: April 14, 2022 at 2:00am version: 8.3 revision: 291
Use the python3 that configure found
Resolve -Wcomment warnings
Also: Fix inadequate quoting in MSED variable
Also: Updated version to go along with pull requests 155, 157, and 158 from Ryan Schmidt.
Also: Also fixed the error noted by Ryan Schmidt in Issue #156 (void function attempts to return a value).
Also: Made a correction to extHierSubstrate, which was checking for substrate shielding types in a subcell inside the interaction area only. Since the interaction area is clipped by the "cookie cutter" extraction areas, it could completely miss the shielding. As revised, any shielding under a subcell will effectively shield the entire subcell. This could be improved by warning if the subcell has substrate connections outside of the shield area (as that is not extractable), but that requires additional processing.
- posted: April 13, 2022 at 2:00am version: 8.3 revision: 290
Corrected issue with extresist that involves a device with a terminal connected to a substrate or well type that is not a FET 4th terminal (e.g., a varactor, or maybe a diode).
- posted: April 8, 2022 at 2:00am version: 8.3 revision: 289
Added a new command option "contact erase". This provides a way to remove contact cuts from a layout without affecting the surrounding metals, which is something that the "erase" command does not do.
- posted: April 7, 2022 at 2:00am version: 8.3 revision: 288
Corrected another instance where running a command on a non- writeable cell causes magic to crash.
- posted: April 6, 2022 at 2:00am version: 8.3 revision: 287
Added a prototype declaration for LefReadLayerSection (see github issue tracker issue #154).
Found another issue with the substrate extraction, caused by the fact that "extract all" does not enumerate cells from bottom up as I had assumed---The order is roughly bottom-to-top, but cells re-used in different places in the hierarchy could end up called before one or more of their own subcells is extracted. Since this conflicted with the preparation of the substrate in each extracted subcircuit, I changed the method to enumerate cells so that it is properly bottom-to-top. Also, methods were added to "extract" (incremental), "extract cell", and "extract parents" to ensure that the substrate is prepared on all subcells before extraction.
- posted: April 5, 2022 at 2:00am version: 8.3 revision: 286
Found that ExtFindRegions() does not set temp_subsnode to NULL like extFindNodes() does; consequently, ExtLabelRegions() when called after ExtFindRegions() may accidentally chain together a substrate region with whatever was left in this linked list after the previous call to extFindNodes(), with unpredictable results.
- posted: April 1, 2022 at 2:00am version: 8.3 revision: 285
Tentative implementation of parsing NONDEFAULTRULE definitions in a LEF file (complementary to the implementation recently added to the DEF file parser).
Corrected parsing of NONDEFAULTRULES in a LEF file. Modified the DEF reading to use vector fonts on PIN labels, with some ad hoc rules for size and rotation (may need refinement). Modified the DEF annotation (def read -annotate) so that the preferred position of labels is on a wire leading out from a pin connection, which is a "safer" place to put it, in case the layout was manually edited between the DEF read and annotation. Fixed another two crash conditions related to read-only views. Corrected a startup error caused by an uninitialized variable used by the "wiring" section of the tech file.
- posted: March 31, 2022 at 2:00am version: 8.3 revision: 284
Cleaned up a bunch of stuff around "magicdnull", starting with not linking it to Tk or X11 graphics. Added new command "display" which returns the display type, which is good for finding out if the display is "NULL". Added code to allow the wrapper to be defined for NULL graphics with the Tk console, the main necessities of which are to remove the "openwrapper" command, and to return immediately from a number of tag callback functions.
Added command option "-annotate" for "def read" that allows nets to be annotated from a DEF file. This is particularly useful if "def read" has been used without the "-labels" option, and the labels are needed at some point.
Also: One correction to prevent some unnecessary messages when doing a label annotation from a DEF file.
Also: Updated the command reference for the "def" command and the new "display" command.
Also: Corrected the diagnostic output of "configure" to no longer refer to the "make.log" and "install.log" files, which no longer exist.
- posted: March 30, 2022 at 2:00am version: 8.3 revision: 283
Modified the configure scripts and makefile per Proppy's comments in github issue #149. This causes magic to no longer write log files for "make" and "make install" but will properly exit with a non-zero return code on any error during compile.
Removed some diagnostic messages from "def write", and added code to prevent "def write" from running on an unnamed cell.
- posted: March 29, 2022 at 2:00am version: 8.3 revision: 282
Corrected a minor issue in "def write" that will ignore a wire completely if the width does not match the wire minimum width, rather than attempt to cope with it gracefully.
scripts/configure: enable building without x
Also: Reran autoconf after merging changes from configure.in.
- posted: March 26, 2022 at 2:00am version: 8.3 revision: 281
Corrected the offsets caused in "def write" when writing components with "FIXED_BBOX" properties, which need to be positioned relative to the abutment box, not the cell bounds.
Updated version with the offset fix.
- posted: March 25, 2022 at 2:00am version: 8.3 revision: 280
Fixed some errors in DEF read/write and added behavior to "def write" to treat unlabeled/unconnected layout as blockage statements in the output.
- posted: March 23, 2022 at 5:14pm version: 8.3 revision: 279
Corrected the equations for fringe shielding, as the equation for the shielding fraction was inverted---I do not know how the tests could pass that way.
Implemented non-default rules for DEF reads. This is in preparation for using such non-default rules for "def write" to capture any layout geometry that is not a "special net" and does not have the default wire width.
- posted: March 22, 2022 at 2:00am version: 8.3 revision: 278
Corrected a potential segfault condition on "extract" if a cellname contains slashes (which makes it look like a full path).
- posted: March 18, 2022 at 3:00am version: 8.3 revision: 277
Added an important new method: If the keyword "fringeshieldhalo" is specified in the extraction section of the techfile, then magic will compute the effect of a nearby shape partially shielding the sidewall overlap capacitance, which approaches 100% shielding as the shapes converge to zero separation. This method prevents magic from vastly overestimating the fringe capacitance of closely spaced wires, which was magic's worst problem with parasitic accuracy. The "fringeshieldhalo" value is the distance at which the fringe shielding becomes negligible. Typically, it will be about three times the distance at which half the fringe value is shielded. It may be necessary at some point to make both the fringe shielding halo and the sidewall halo values per-type values (or per-plane, at least). For now, it should suffice to bring Magic's parasitic extraction back in line with other tools.
- posted: March 9, 2022 at 3:00am version: 8.3 revision: 276
Modified the routine that flattens labels so that it does not prepend the name of the cell use if the cell use is a top level window. It was accidentally discovered that using "select top cell ; select flat" will do this (creating label text with spaces in the process, which is illegal syntax for netlists).
- posted: March 8, 2022 at 3:00am version: 8.3 revision: 275
Corrected the (recently implemented) "labellayer" GDS/CIF output function, which was incorrectly multiplying through by two scale factors, resulting in incorrectly-placed labels in the GDS output.
- posted: February 27, 2022 at 3:00am version: 8.3 revision: 274
Debugged an issue where a label on the default substrate node may not be seen during hierarchical processing, causing the substrate to get split into several names that may conflict in the netlist. At issue is the fact that ExtLabelRegions() will not attach a default substrate label to a default substrate region. This may need further untangling, as extFindNodes() will set the default substrate node and is sometimes followed by ExtLabelRegions(), which will label it. Any place ExtFindRegions() is called, this could be an issue.
- posted: February 26, 2022 at 3:00am version: 8.3 revision: 273
Added a command-line option "magic --commit" which provides the commit number from the git repository, which is overall more reliable than the version number, but mainly to support a common method across the open source tools for providing information to builds like open_pdks that may need to know what version of every tool was used for the build.
Added a procedure to esMakePorts() in ext2hier.c which tracks the EF_SUBS_PORT flags up the hierarchy. This is a rather lot of code needed to make substrate connections to circuits where the substrate connects to devices but not make such connections where the substrate doesn't. There may be simpler ways to accomplish the same thing, depending on whether the order of "merge" statements in a .ext file is reliable; this code does not depend on it.
- posted: February 25, 2022 at 3:00am version: 8.3 revision: 272
Corrected some issues related to the handling of substrate hierarchy. Most of this had to do with the incorrect use of the parent's substrate name in extHierSubstrate(). After the correction, there still remains an issue that is caused when a labeled isolated substrate region overlaps an extraction tile boundary. I believe that this particular error has existed for some time and is not new, so I am committing these changes.
- posted: February 24, 2022 at 3:00am version: 8.3 revision: 271
Resolved an issue with magic crashing during "antennacheck" due to a routine that should have been called with a NULL argument, but instead was called with no argument, making the behavior system- dependent. Revised the parsing of the "defaultareacap" and "defaultperimeter" statements in the tech file, such that the short version of both statements gets automatic handling of the substrate and isolated substrate areas; this goes back to the recent change in extraction behavior to redefine the "substrate type" (e.g., pwell) during extraction as defining isolated substrate areas, and not the default substrate. The earlier code change dealt with problems related to extracting nodes and regions, but did not consider how parasitic capacitance was affected. This commit resolves that issue.
Several important fixes to the handling of coupling capacitance, which had become fouled up due to the changes in the way that the substrate is defined and handled. Worked through a large torture test until all types of substrate coupling and overlap shielding were resolved to be extracted as expected.
Also: Fix a few issues with missing or incorrect prototypes
- posted: February 21, 2022 at 3:00am version: 8.3 revision: 270
Tackling a section of code with poor performance in extraction. The extSubtree() routine cuts a layout into squares and extracts each separately, checking for subcell interactions. In each square it parses all labels looking for unconnected ones. This section of code not only parses all labels M x N times, but it then marks interaction areas where there may be none, forcing additional unnecessary processing. This commit makes the first quick optimization, which is to change the return value of DRCFindInteractions() from boolean to integer, allowing it to return a value indicating that there are no subcells in the area. This prevents the loop through labels from happening in cases where there can never be interactions. More to come.
- posted: February 18, 2022 at 3:00am version: 8.3 revision: 269
Changed the behavior of "extract" routine extFindNodes() to not check for abstract views to determine how to handle the substrate node. Running tests to check if this has any negative impact on the extraction of abstract views that do not specify substrate and well types.
This commit adds an additional function to the substrate generation, effectively forcing the substrate type (e.g., "pwell") to be defined as delineating isolated substrate areas only (e.g., pwell in deep nwell or isosub a.k.a. subcut). It does so by erasing all of the substrate type out of a cell prior to extraction before redrawing it in the isolated areas. This avoids issues caused by pwell drawn in separate unconnected areas of a cell, as these are removed and the area treated as the default substrate everywhere. Has worked on all layouts tested so far.
- posted: February 17, 2022 at 3:00am version: 8.3 revision: 268
Corrected the "select flat" command, which failed to recompute the selection bounding box, causing all following commands to fail to handle anything in the selection outside of the unit area (0, 0) to (1, 1).
fix error in transform part in cmdDumpParseArgs
- posted: February 16, 2022 at 3:00am version: 8.3 revision: 267
Corrected a small issue in the "property" command that will attempt to free memory from location 0 if the cell is not editable.
commands/CmdLQ: fix typo
Also: Add AppImage + CI
Also: Reverting the last commit, as the author (Donn) says it is not ready and needs some work before it should be integrated into the github workflows.
Also: Added "!" as a macro for "drc find ; findbox zoom ; zoom 16" as suggested by Matt Guthaus in github issue #127.
- posted: February 9, 2022 at 3:00am version: 8.3 revision: 266
Restored compiling of the non-Tcl/Tk version of magic. This has traditionally been kept for backwards compatibility. However, the operation of "ext2spice" and "ext2sim" as separate programs has become extremely difficult to maintain, and so it has been dropped in favor of folding both into the program as commands, as was done a long time ago in the Tcl/Tk version.
- posted: February 2, 2022 at 3:00am version: 8.3 revision: 265
Applied the same method as used in the last commit, to put all cell properties in natural sort order when writing a .mag file. This should remove the last bit of indeterminism in the output of magic database files.
- posted: February 1, 2022 at 3:00am version: 8.3 revision: 264
Applied a string sort to the dump of cell uses when writing a .mag file. This makes the output of .mag files deterministic (except possibly for properties, which may also need to be handled this way).
Updated version (after pulling last commit).
- posted: January 28, 2022 at 3:00am version: 8.3 revision: 263
Modified the "box" command to run a check on the specified box values and raise an error if the values are outside the range (MINFINITY, INFINITY) used by magic's layout planes.
- posted: January 25, 2022 at 3:00am version: 8.3 revision: 262
Corrected an error in LEF write in which sticky labels that declare the label to be attached to a non-contact type when the label is actually over a contact are not handled correctly when checking if multiple labels should belong to the same port record.
- posted: January 23, 2022 at 3:00am version: 8.3 revision: 261
Decided that a different approach needed to be taken for having timestamps that are fixed, since the timestamp update routine is called from too many places, too many times. Instead created a new cell definition flag indicating a fixed timestamp, which can be set by "cellname timestamp" for an individual cell, or with "gds datestamp" for cells read from a GDS file.
Fixed the "copy-up" CIF rule handling, which failed to clear the CDFLATGDS flags after removing the copied-up planes.
Also: Added a "lef datestamp" command option which is the equivalent of "gds datestamp" for LEF reads. When set to non-default, all cell definitions created from LEF macros will be given the specified timestamp, which allows the stamps of abstract views to match the stamps of full views, preventing issues of updated timestamps whenever a layout is switched between views.
Also: Could not get the LEF datestamp to work correctly as a pointer, due to issues of declaring global variables; rather than track down the correct use, just reworked it so that the value is just an integer and takes -1 as the default (fixed timestamping disabled).
Also: Corrected a typo from the previous commit (causes other flags to be cleared when setting the fixed timestamp flag for LEF reads).
- posted: January 22, 2022 at 3:00am version: 8.3 revision: 260
Changed the "gds nodatestamp" option to "gds datestamp" and added "gds datestamp" as an option to force a specific datestamp on the GDS output. This is a third option beyond the previous two which were either to use the current time or to write zero. The new option allows an entire library to get a common timestamp, for example, related to a PDK version number. The "gds nodatestamp" option has been retained for backwards compatibility.
Updated all of the documentation by copying back from the website. The website documentation now points to these contents in a clone of the repository on opencircuitdesign.com, so all future edits of the command-line documentation will be made directly to the git repository. Also: Changed the precision of box values printed in microns from 2 to 3 digits after the decimal place, so that 5 nanometer grids do not get values clipped in the output.
Also: Extended the GDS timestamp handling to GDS input. Unlike former behavior, in which all cells read from GDS are given a zero timestamp, and the timestamp is set when the file is written to disk, the default behavior now is to set the layout cell's timestamp from the timestamp provided in the GDS (the creation date timestamp, specifically). The same command "gds datestamp" implemented in the previous commit for GDS writes now also applies to GDS reads: If set to "no", then the timestamp value from the GDS file is transferred to the layout view (default behavior); if set to "yes", then the timestamp is set to zero (legacy behavior). If set to a value, then the value is used as the timestamp.
Also: Refined the new "gds maskhints" command option for GDS input from yesterday's commit to allow the syntax "gds maskhints", in which mask hints can be restricted to a specific list of layers rather than all layers which define mask hints in the cifoutput rule.
Also: Modified the "writeall" command to (1) raise an error message when "writeall force" is used but | doesn't exist, and (2) to add options "writeall modified" and "writeall noupdate" (which may or may not be useful). |
Also: After much pain and suffering, finally tracked down all the places that the timestamp is updated after reading in CIF or GDS, and managed to get the timestamp dirty flag to remain clear after reading when "gds datestamp" is used. This includes a modification of the timestamp update routine that only updates timestamps on a single file if only a single file is being written.
- posted: January 21, 2022 at 3:00am version: 8.3 revision: 259
First cut at a method to automatically generate mask hint properties in a cell to account for the difference between what's in an input GDS file and what magic would write out itself from the processed data. This potentially allows library cells to be read in that will generate the equivalent mask data as output without resorting to using GDS file references as properties. The method is activated with the new command option "gds maskhints on" and the default is off.
- posted: January 20, 2022 at 3:00am version: 8.3 revision: 258
Corrected an error in the hierarchical GDS processing of mask hints, which failed to translate hint coordinates from subcells into the composite cell, resulting in hierarchical GDS errors.
Missed a few calls in CIFsee.c to the routine that was modified in the previous commit, causing segfaults when using "cif see".
- posted: January 15, 2022 at 3:00am version: 8.3 revision: 257
Cleaned up a bit of confusing diagnostic output when reading GDS. If cells are instanced before being defined, causing the GDS parser to rewind the cell from the top, then the "already defined" error messages will be suppressed, since it is to be expected that cells will be seen twice (and ignored the 2nd time). When rewinding, an output message is issued so that it is clear that the file contains instances that are used before they are defined, and recommends the "gds ordering on" setting. Also: Fixed the "gds ordering" command code so that the command with no third argument returns the state of the "gds ordering" setting instead of generating a parser error.
Modified the extraction code to work around a problem created some time ago by cleaning up excess usage of "equiv" lines in the .ext file output. The hierarchical extraction code did not distinguish between node names which were output and those that were not, requiring a setting "extract do aliases" to force all node aliases to be output with "equiv" statements. So hierarchical names might be any alias, whether output or not, and "merge" and "cap" lines might contain references to nodes that were not output, causing them to be disconnected nodes. This fix handles the "extract no aliases" (default) case by flagging node names that are redundant and not output, and not creating hierarchical names with them.
Also: Added some automatic handling of the "extract" section in the tech file to generate a mask of all the types called out in the section as being used for parasitic calculations (resistive and capacitive) and device terminal types. This is supplemented with a list of all types that are specified in the "connect" and "contact" sections as connecting to something other than themselves. All remaining types are considered non-electrical and removed from the list of types that can be considered electrical nodes. This works a bit better than the existing method of using "resistNone" to specify non-electrical types, as it is backwardly-compatible to older tech files. The upshot is that in the worst case, if a type needs to be extracted as an electrical node but does not satisfy any of the above criteria, then it should be added to the "resist" list, with a resistance of 0 if necessary.
Also: Slight change to the criteria for "electrical" types: Removed device ID layers, and added substrate shield layers.
- posted: January 14, 2022 at 3:00am version: 8.3 revision: 256
Made a change to basic extraction to avoid generating an extra node representing the global substrate on cells that are abstract views. Corrected a typecasting issue in ext2spice.c that throws a compiler warning. Added another check for a cell being editable when painting, which is a case that was not covered by the previous code change to address the same issue.
(1) Modified the method used for the previous commit, as it was found to make ext2spice runtimes very long for large layouts. The new method is equivalent but doesn't incur the overhead. Also: Changed a flag check which was causing the substrate node to be output as a port for certain layouts where the substrate node connects to no devices, and so should be optimized out.
- posted: January 13, 2022 at 3:00am version: 8.3 revision: 255
Removed code from ext2spice that is no longer functional. Implemented a separate check for ports when writing a subcircuit that cross-checks against the port list in the flattened extraction. This allows ports that were optimized out during flattening of the hierarchy to be removed from the cell's port list, which cuts down on disconnected nodes in the output port list.
Patch for gcc11/RHEL9
Also: Changed FPRINT* macros to FPUTS* in DBio.c to match the change of the underlying function from fprintf() to fputs(), which was changed for gcc11 compatibility by Jean-Paul Chaput in github issue #123. Also corrected a typo from the previous commit.
Also: Fix to the previous commit, which was implemented incorrectly. The current implementation works, but it is not clear that it does anything differently than before the start of today's modifications.
- posted: January 11, 2022 at 3:00am version: 8.3 revision: 254
Fix typo in MakeLegalLEFSyntax
Add missing includes
Also: Add missing types in function prototypes
Also: Updated the version to go along with the merge of several pull requests (117, 118, and 119) from Anton Blanchard.
Also: Add more information to illegal overlap warnings
Also: Made small modifications to Anton Blanchard's pull request #120 to use DBTypeLongNameTbl[] instead of DBTypeShortName() to print the names of the illegally overlapping types.
- posted: January 7, 2022 at 3:00am version: 8.3 revision: 253
Modified the short selection routine (again) to avoid issues when tracing the short path back through stacked contacts. Discovered a problem with the connectivity search routine (which has been in the code for a very long time) which will fail to copy contacts to the selection cell if it has already drawn one of the metal layers in the same place. This has now been fixed.
- posted: January 4, 2022 at 3:00am version: 8.3 revision: 251
Some optimizations on the "select search" function. Mainly this stops checking for the "best" path during the feed-forward check and only enumerates the cost function for every tile in the selection, moving outward from the source. This keeps the algorithm efficient.
- posted: January 3, 2022 at 4:02pm version: 8.3 revision: 250
Corrected the last commit's problem with file locking, which is that there was no distinction between a locked file and a new cell (initial state) before writing to disk. This prevents any new cell from being saved! Also: Revised the behavior of the "select short" search, but this still has issues with long run-times on complex layouts, so this is an ongoing effort.
- posted: January 2, 2022 at 3:00am version: 8.3 revision: 249
fix tech file load error with qflow
Updated the version to go along with pull request #115 from github user susinxy. Edited the merged code slightly, without changing the functionality.
Also: Reworked the file locking option as a command instead of as a compile-time option. The behavior can now be controlled from within the program with "locking disable" or "locking enable".
Also: Played around with the file locking and discovered to my chagrin that whenever a process writes a cell to disk, it immediately releases the file lock it had on that cell, which is clearly not the intent of file locking. Fixed this issue. On a related topic, revised the "cellname writeable" command so that it can make a cell editable even if the cell has an advisory lock and cannot be made writeable. Perhaps there should be a clearer distinction here between "writeable" and "editable". Also: Reconsidered the previous commit, which removed the "--disable-locking" from the configuration options. Because some operating systems may not implement fnctl()-based file locking (Cygwin, for one, apparently doesn't), it is still useful to be able to completely remove the function, in case the operating system will fail to recognize the fnctl() values in the code. Now, file locking behavior can be permanently removed through the configuration option, or temporarily disabled from the command line.
- posted: January 1, 2022 at 3:00am version: 8.3 revision: 248
Updated the way that the technology file parser handles the "defaultareacap" and "defaultperimeter" statements in the technology file. Now, the parser makes use of the configuration of the substrate from the "substrate" line to generate a default list of which types and planes represent the substrate, and which types and planes represent shielding to the substrate. This solves an issue with the use of substrate isolation layers (e.g., "isosub" in sky130A), because its definition and usage created substrate shields on two planes (well and dwell), while the syntax for "defaultareacap" and "defaultperimeter" only allow one shielding plane to be defined.
Attempt to lighten up on the use of "fatal" referring to errors that are not fatal to the program, the circuit, and sometimes not even errors.
Also: Missed one use of the word "fatal" in ExtCell.c.
Also: Modified the routines used by "select short" so that they use the stack routines in utils/stack.c instead of relying on a recursive routine, which will run out of the computer's stack space pretty quickly on a large layout.
Also: One additional optimization to the routine just committed, which avoids pushing space tiles and processing them just so it can pop them off the stack and deallocate the memory.
Also: Attempted another optimization to speed up the short-finding algorithm, but it's clear it needs a lot more than that.
Also: Revised the messaging coming from "gds read" so that it does not post error messages when a GDS library addendum is read. It now assumes that if a cell is called but not defined in the GDS, and that cell happens to be in memory already, then this is intentional.
- posted: December 31, 2021 at 3:00am version: 8.3 revision: 247
Correct & has lower precedence than parentheses warnings.
Updated version to go along with the merge of pull request #113 from Brad Smith.
Also: Corrected the use of EF_SUBS_NODE to distinguish between device substrate (bulk terminal) and global substrate. Otherwise, the routine in ext2hier.c that finds the substrate node will find the first device bulk connection, not the default substrate.
- posted: December 30, 2021 at 3:00am version: 8.3 revision: 246
Eliminate bogus clearing of CPPFLAGS so the contents of CPPFLAGS is properly passed down throughout the autoconf script.
Updated the version to go along with the merge of pull request 112 from Brad Smith. Also ran autoconf, since change was made to configure.in and the standard instructions don't call for autoconf to be run.
Also: Removed a bogus setting for freeBSD that was pointed out by Brad Smith and which had escaped my attention. The commit from 8/3/2019 fixed an obvious fatal error but just replaced it with something syntactically clean but nonsensical. This commit just removes the questionable line altogether.
- posted: December 26, 2021 at 3:00am version: 8.3 revision: 245
Removed an oddball method put into the extflat code some time ago that makes a net a global net if there is a Tcl variable of the same name. This conflicts with a later use of Tcl variables VDD and GND to denote power and ground names, which is a completely different usage.
- posted: December 24, 2021 at 3:00am version: 8.3 revision: 244
Corrected the return value of extSubsFunc2(), which was returning value 1 after finding a substrate connecting type shielded (by deep nwell, in the example) from the substrate, thus preventing the search from processing any remaining substrate types. Solved by changing the return value to zero to keep the search going.
- posted: December 22, 2021 at 2:05pm version: 8.3 revision: 243
Made a few corrections that stem from the change to add a separate record to the label structure to hold the port number. One major issue stemming from this was reported in github issue #203 by Anton Blanchard. This commit fixes that error.
- posted: December 21, 2021 at 3:00am version: 8.3 revision: 242
Got to the bottom of why area and perimeter values are no longer output for transistors. The problem came from a change made to fix an issue with capacitors marked as floating nodes because some nodes are not output as source or drain. But those nodes are output before the parameters, so when generating parameter output, all nodes appear to have already been output. Solution: Specify an additional bit in the "visited" mask for the node having been output that is separate from the mask for resist classes used by the code that writes parameter values, and use that bit as a test for whether the node is connected to some device (not necessarily a FET source or drain).
- posted: December 14, 2021 at 3:00am version: 8.3 revision: 241
There being a specific situation where the enumeration of ports used by "topVisit" and "subcktVisit" in ext2spice.c, probably caused by having different names on the same port number, the subcktVisit() routine was modified to use exactly the same enumeration as topVisit() so that they are guaranteed to have the same result.
Corrected a failure (in the code for many a decade) to properly clean up memory after running "ext2spice". There are apparently still memory leaks somewhere, difficult to diagnose with valgrind, but this fix removes the most substantial leakage and allows "ext2spice" to be run continuously, at least for a while.
Also: Found another long-time error in which a hash table created during ext2spice is not freed. This may account for the rest of the memory leak that was partially fixed in the previous commit.
Also: Tracked down two more memory leaks coming from ext2spice, due to client data generated by ext2spice and attached to a node's nodeClient record; there is an initNodeClient() routine but no corresponding freeNodeClient() routine. Eventually had to add a callback function passed to EFDone() and EFFlatDone() to clean up these entries. After doing that, valgrind reports clean for all memory allocated within ext2spice (there are other things that are not freed but not related to a specific command, so do not need to be treated as leaks).
- posted: December 13, 2021 at 3:00am version: 8.3 revision: 240
Corrected an issue with the limited bitfield dedicated to port numbers; this limited ports to 16384, which seemed reasonable at the time. However, the sky130_sram_macro layouts connect power and ground in a way that when coupled with "extract unique" can generate tens of thousands of ports and overrun the bit field, showing that automation can do the unexpected. The solution was to split out the port number from the label record as its own 32-bit value.
- posted: December 8, 2021 at 3:00am version: 8.3 revision: 239
Modification to prevent crashing on an attempt to do an area erase on a read-only layout.
- posted: December 7, 2021 at 3:00am version: 8.3 revision: 238
One small change to the ext2spice topVisit code to ignore nodes that have already been output; i.e., that have EF_PORT set. However, since EF_PORT is now set on all implicit ports, it is likely that this part of the code is no longer exercised at all, and may be removed.
Fixed the behavior of the "def write" command, which was not clearing the "subcircuit" flag from the top level cell, causing only nets connected to ports to be output.
- posted: December 5, 2021 at 3:00am version: 8.3 revision: 237
Modified the "extract unique" behavior so that it treats "soft" connections through the substrate as the same node, and so will not force different nodes names on the soft connection to be unique. This should probably be selectable behavior. However, as written, the "extract" command will always merge soft connections, so giving them unique names just causes problems with "extract".
- posted: December 4, 2021 at 3:00am version: 8.3 revision: 236
Reverted most of yesterday's modifications. Instead located the issue at the change made in revision 214. This was done incorrectly in two ways, one being a set of statements inside an if() block that should have been executed always, and the other an incorrect use of the EF_DEVTERM flag, setting it when it should not have been set.
- posted: December 3, 2021 at 3:00am version: 8.3 revision: 235
Corrected a problem with implicit substrate ports and connections; implicit substrate connections under some conditions were not added to the subcircuit pin list. When this was corrected, the call to the subcircuit was missing the implicit substrate port. When that was corrected, the implicit substrate port printed was the subcircuit's local node name, not the connection from above in the hierarchy. The underlying problem was that the substrate was marked as a port in a node record that was in another (flattened and unused) def and so not seen when enumerating the def's node list. It's possible that the better solution is that the efNodeHashTable() should be enumerated to write subcircuit ports, not def->def_nodes. However, now, by using EFHNLook(), the corresponding entry in efNodeHashTable() is found and used.
- posted: December 1, 2021 at 3:00am version: 8.3 revision: 234
Added behavior for reading cells with or without "-dereference" to work around the issue of loading a file containing references to cells with the same name as cells already loaded. This is probably going to cause additional headaches until a proper checksum method is implemented.
- posted: November 30, 2021 at 3:00am version: 8.3 revision: 233
Corrected a recent line change to return "0" instead of void, per github Issue #104 by lantertronics.
Updated the README.md file to change a broken web link and correct some other horribly outdated content.
- posted: November 25, 2021 at 1:29pm version: 8.3 revision: 232
Slightly modified various use cases of "cellname" so that they behave as one would expect; e.g., "cellname self" returns the name of the currently edited cell if nothing is selected; "cellname rename" renames the currently edited cell to . Modified the "extract" command so that it will not extract a cell named "(UNNAMED)" but will insist that the cell must be given a proper name, much like the "writeall" command does.
Corrected an error that happens if a layout file read flags a timestamp error, causing a segfault because it runs HashKill on a hash table that was never initialized.
- posted: November 25, 2021 at 3:00am version: 8.3 revision: 231
Fixed a segfault condition if doing "splitpaint" on a zero-area rectangle. Likewise, this also fixes an unexpected result when doing "spliterase" on a zero-area rectangle (which does not cause a segfault, but is not what one would want magic to do).
Corrected issues with loading an invalid tech file. Also corrected the behavior that extensions other than ".tech*" are not honored in a tech file name.
Also: Corrected the error in which "splitpaint" and "spliterase" are incorrectly applied to locked layers, as reported by Mark Martin in issue #95 on github.
Also: Modified the print routines so that TxPrintf and certain uses of Tcl_SetResult() will backslash-escape "$" characters occurring in names (e.g., cell and net names) when the "$" does not represent a Tcl variable.
- posted: November 21, 2021 at 3:00am version: 8.3 revision: 230
Realized a very stupid error in the handling of the "use" lines when reading in a .mag file. The routine was not checking for whether a "use" entry in the file was the first one encountered or not. The path is only ever given for the first use of any cell def, so for any cell after the first, the path should have already been resolved. This fix avoids lots of unnecessary error messages when reading a file in a different directory. Also, because the routine now checks for the first use in a file, any error messages that do occur will only be displayed for the first use, not all of them.
- posted: November 18, 2021 at 3:00am version: 8.3 revision: 229
Corrected 'def write' location of components. It was using the boundaries on the parent without taking into account the internal cell origin point
Fixed 'def write' warning message about default net widths. It was informing the wrong dimension
Also: Quick fix of 'def write' issue with the nets extending beyond it's original shape in some cases. It would be good to analyze in more detail the use of the extlen variable
Also: Updated the version to go along with the merge of pull request the existing coding style.
Also: Corrected the non-Manhattan DRC edge check, which was failing to account for the fact that non-Manhattan tiles are processed twice in the search, with the side mask bit 1 and 0 for each call. The DRC check, like the Manhattan checks, only needs to check one of these.
- posted: November 17, 2021 at 3:00am version: 8.3 revision: 228
Modified the Euclidean distance "grow" operator so that it honors the grid limit setting.
Added a new cif/calma layer type "labellayer" that can be used to tag geometry with a specific label which is the name of the layer.
Also: More or less reverted the last commit, as it was found that the calculation for "limit" in the CIFgen routines was wrong, not the interpretation of the "gridlimit" value in the tech file. The parsing of "gridlimit" has been put back the way it was before the last commit, and the "limit" value calculations have been corrected.
Also: Corrected the "grow-euclidean" option for grow/shrink/bloat-or so that it correctly lands on a grid limit boundary (which the previous commit did not do). Note that work is still ongoing to detect some pathological cases where the shapes end up off-grid where two non-manhattan shapes intersect at different angles (such as an inside corner).
- posted: November 12, 2021 at 5:02pm version: 8.3 revision: 227
Corrected the "lef write" routine to more correctly handle port statements, with all "hard" connections being enumerated in the same PORT entry, and "soft" connections (same label on unconnected areas; e.g., through substrate or resistor device) being enumerated as separate PORT entries, per the LEF spec. Also corrected behavior with respect to the "lef write -toplayer" option, which was treating each port label independently, and so generating entries for lower layers of a port if there were ports on those layers, in contravention to the "-toplayer" option. Also: Added the PINS section to the "def write" output; this had been left as a "to be completed" item but was never done in spite of being easy to add.
More updates to prevent magic from crashing when commands are run on non-edit cells (this time, "erase").
- posted: November 12, 2021 at 3:00am version: 8.3 revision: 226
Removed the dependence on EXT_DOLABELCHECK when generating node entries for "floating" labels. Otherwise it is possible for the hierarchical checks to find the label in flattened geometry and reference it, resulting in merge statements in an .ext file that reference undeclared nodes, ultimately resulting in extflat failing to perform the merge, and an incorrect netlist.
- posted: November 9, 2021 at 3:00am version: 8.3 revision: 225
Added an error message when writing GDS if any cell being written still has the default "(UNNAMED)" cell name; this is not strictly an error, but is almost certainly not what the user intended.
- posted: November 6, 2021 at 3:00am version: 8.3 revision: 224
Corrected a case of a missing variable initialization in the case of reading a bad "bloat-all" statement in a techfile. This prevents magic from eventually segfaulting when exercising the recipe in which the bad statement occurs.
Updated version with the previous commit.
- posted: November 4, 2021 at 3:00am version: 8.3 revision: 223
A recent commit caused connections to implicit (unlabeled) substrate to not get into the subcircuit port list during ext2spice. The new fix brings back (unfortunately) the behavior of creating a substrate node for cells that have no substrate connection to any device; this will have to be handled separately.
- posted: November 2, 2021 at 3:00am version: 8.3 revision: 222
Adjusted LAYERS_PER_CONTACT from 3 to 4. This is not a preferred solution; it would be much better to make the value adjustible, but the array of tiles sized to LAYERS_PER_CONTACT is a Region structure, and the routine that frees the Region structures does not have a way to call a routine to take additional measures like free'ing a sub- structure of the Region. A proper solution will require some work.
- posted: October 29, 2021 at 3:00am version: 8.3 revision: 221
Added checks to prevent magic from crashing when running various commands on selections in a cell that is not editable. Moves and Copies were already handled correctly; this correction fixes Delete and transforms (e.g., rotates and flips).
- posted: October 12, 2021 at 3:00am version: 8.3 revision: 220
The "extresist" command was still generating "Couldn't find wire" messages which was traced to code that changes a drivepoint position to match a label; the same drivepoint may be part of the record for the initial position to search on the net, in which case if the position is changed, then the tile type needs to be changed to match the new position.
Corrected the "ext2sim" output, since it was using "D" records for diodes, whereas the .sim format does not have a record type for diodes, but "D" is used for a delay value.
- posted: October 11, 2021 at 3:00am version: 8.3 revision: 219
Revised the routine ResSortByGate() in ResRex.c so that it sorts using qsort() instead of its own linked-list-based sorting, which is horribly inefficient. This change allows power nets (which tend to be connected to all transistors) to be extracted in a reasonable amount of time (hours instead of days).
- posted: October 10, 2021 at 3:00am version: 8.3 revision: 218
Implemented glob-style matching for label selection. Introduces an optional extra argument to the "select" command that can be used to select labels by glob-style matching; e.g., "select area labels VSS*" or "select less area labels *_1". This will help in managing labels after flattening a standard cell design; e.g., by using "select less area labels */VDD".
- posted: October 9, 2021 at 3:00am version: 8.3 revision: 217
Modified the generation of "equiv" statements in "extract" some more, to eliminate all redundant names resulting from redundant labels. Changed the behavior of "goto" so that it will find local names with slashes, which are the result of using "flatten". A hierarchical search is done first, as before, but on failure to find a subcell component, the local cell is searched for the verbatim name.
- posted: October 8, 2021 at 9:37am version: 8.3 revision: 216
Removed a line that should have been removed before the last commit.
Update of version with the fix to the last commit.
- posted: October 8, 2021 at 3:00am version: 8.3 revision: 215
Made another correction to the recent change in ext2spice.c where an out-of-bounds array access occurs that can cause bad output at best and a crash condition at worst.
One more correction to limit, by default, the generation of "equiv" statements in the .ext file output to those that mark a port as equivalent to the node name used elsewhere in the file. This limits unnecessary output of "equiv" statements that can bog down ext2spice and other commands that use the .ext file contents.
- posted: October 6, 2021 at 3:00am version: 8.3 revision: 214
Correction to yesterday's commit (minor issue with line length in the SPICE netlist output of ext2spice).
Fix to new ext2spice code to prevent a crash condition when multiple instances of a port name are present.
Also: Another correction with a line that should have been removed in a previous commit and can cause ports in the SPICE netlist to have names other than what the port label declared. Expected not to be fatal to the netlist, but it's a bit difficult to work with a subcircuit that doesn't have the expected pin names.
Also: Made a change to ext2hier.c that should prevent the propagation of substrate nodes in subcircuits that don't make connections to the substrate (such as arrays of pFETs). This is done under the restriction that ext2spice is being called without generating parasitics (otherwise the connection to substrate is valid), as it would be when extracting for LVS. The ground node must not appear as a connection to any device. This is then propagated up the hierarchy such that if none of a subcell's descendents connect to the substrate, then neither does the subcell.
- posted: October 5, 2021 at 3:00am version: 8.3 revision: 213
Added another option to the "extresist" command, this one to include specific nets to extract, rather than excluding them. That allows "extresist" to target specific nets like the power supply or a clock tree for extraction.
Added a check for interrupt in "extresist". Modified the output of ports in SPICE so that ports are first ordered by index into a string array, and then output. This avoids executing an expensive double loop.
- posted: October 3, 2021 at 3:00am version: 8.3 revision: 212
Added installation instructions for MacOS (Big Sur).
Update README.md
Also: Updated version to go along with the merge of pull request #90 from Harald Pretl.
- posted: September 29, 2021 at 3:00am version: 8.3 revision: 211
Reverted a change made in version 8.1.154. The implementation is wrong, and it needs revisiting. This is the cause of a number of negative capacitances appearing in the netlist (even after accounting for overlap with subcircuits).
Reverted a line in EFread.c back to the way it had been before magic version 8.1.154.
- posted: September 21, 2021 at 3:00am version: 8.3 revision: 210
Modified EFbuild.c to stop generating an error message when an "equiv" statement is encountered in a .ext file when using the "ext2spice short" option.
Fix to the last commit, which was in error as pointed out by Manar Abdelatty.
Also: One more round of edits on that issue. . .
- posted: September 16, 2021 at 3:00am version: 8.3 revision: 209
Corrected the "def read" command so that when reading PIN blocks, all geometry will be handled; the previous behavior expected only a single rectangle per pin and so would only acknowledge the last entry in any list of rectangles for the pin.
Modified the extresist code to handle substrate extraction. Currently this appears to work correctly but does not yet handle the implicit substrate (space as substrate) or "virtually" isolated substrate regions (which need to be removed for full parasitic extraction).
- posted: September 15, 2021 at 3:00am version: 8.3 revision: 208
Cleaned up a few lines related to "equiv" nodes, which are not actually an issue and probably never relevant. extresist now works except for substrate connections and soft connections between substrate regions. That will require additional coding, not bugfixing, so I'm committing the last of this set of bugfixes before starting that.
- posted: September 14, 2021 at 3:00am version: 8.3 revision: 207
Separated out the flag used for "ext2spice extresist on" and "ext2sim extresist on", which was being shared; that leads to confusion, especially when using "ext2sim" to generate a node name input file for "extresist". Also: Added a warning when two ports are merged in a .ext file, as this can lead to numerous incorrect entries in netlist output.
Modified "ext2sim" behavior so that "=" statements are output (since these are interpreted by IRSIM, the only known program to parse .sim output)---the "ext2sim alias on" option now just moves such statements from the ".sim" file to a ".al" file. Corrected the ResSimMerge() routine to reverse the nodes, so that the devices belonging to the aliased node are added to the original node, instead of the other way around. This corrects "missing gate" and "missing SD" errors that occur due to nodes connected through the substrate.
Also: Finally got around to removing the hack that ignores power and ground nets in "extresist" and replaced it by an option "extresist ignore" in which specific nets can be called out to be ignored by extresist.
- posted: September 13, 2021 at 3:00am version: 8.3 revision: 206
Corrections to the extresist code. Some of the changes are just text formatting. Made one critical correction to ResGetDevice() to pass the device type; otherwise, devices on different planes (e.g., MiM caps) with the same coordinate will always return the device on the lowest plane, leading to incorrect results and an eventual crash when the device record is free'd twice.
Another correction to deal with labels that are on contacts (the port generation routine comes after contacts are removed, so such labels must be searched for on the contact residues, not the contact type itself).
- posted: September 10, 2021 at 3:00am version: 8.3 revision: 205
Added option "notopports" to "extract unique". The option behaves like "extract unique all" on all cells below the topmost level of hierarchy, and "extract unique noports" on the top level.
- posted: September 9, 2021 at 3:00am version: 8.3 revision: 204
Made various updates and corrections to the "extresist" code in support of devices with terminals on different plances, such as capacitors, diodes, and bipolar transistors. Output now appears to give meaningful results for flattened layouts, although numerous issues remain for hierarchical layouts.
- posted: August 29, 2021 at 3:00am version: 8.3 revision: 203
Fix typo in comment
Updated VERSION to go along with pull request #87 from Ryan Schmidt. Also using this to test the last update to the continuous integration.
- posted: August 28, 2021 at 1:15pm version: 8.3 revision: 202
Changed README to README.md to be compatible with github.
- posted: August 28, 2021 at 1:05pm version: 8.3 revision: 201
Corrected the badge link in the README file to point to my own repository and not Sai Charan's fork.
- posted: August 28, 2021 at 1:00pm version: 8.3 revision: 200
Update techbuilder.tcl
Delete techbuilder.tcl
Also: Create main.yml
Also: Update README
Also: Create techbuilder.tcl
Also: Updated VERSION to go along with the merge of pull request #88 from Sai Charan.
- posted: August 26, 2021 at 3:00am version: 8.3 revision: 199
Corrected an error that prematurely exists the substrate search if a shielded type is found, preventing any other substrate types from being discovered and processed.
Updated the version with the last commit.
- posted: August 24, 2021 at 3:00am version: 8.3 revision: 198
Corrected a scaling error that causes all extraction dimension values to be scaled twice when using the "extract style" command and with an extraction style that uses micron units. The microns-to-internal units conversion expects an unscaled result when calling CIFGetOutputScale(), but except when loading a tech file for the first time, this value is scaled, and causes the double scaling. Fixed by unscaling the CIF output before reloading the extraction style, then scaling it afterward.
- posted: August 21, 2021 at 3:00am version: 8.3 revision: 197
Corrected an error caused by the modifications to the DRC engine to copy up errors from non-interacting subcells. The routine was only copying up TT_ERROR_P type errors, but for deep hierarchies, TT_ERROR_S type errors may have to be propagated up as well.
- posted: August 5, 2021 at 3:00am version: 8.3 revision: 196
Modified the way that ToolGetEditBox() works so that it does not require that an edit cell be defined. This stops a lot of commands from failing on non-writeable cells. There really should not be a concept of "non-editable" cells at all, just non-writeable ones.
Corrected an issue caused by the commit to version 8.3.190. Although that commit claimed to correct an issue with implicit ports not being output, the solution often failed to properly assign the port number, so while the implicit ports were added to the subcircuit definition, they were often missing from the subcircuit call.
- posted: August 2, 2021 at 3:00am version: 8.3 revision: 195
Fixed an error in the DRC rule optimization ("||" used instead of "|"), pointed out by Jim Everitt. The error is pretty major, but because the section of code it affects is just eliminating unnecessary DRC rules, I believe that the only effect is that the DRC ruleset ends up using more memory than it needs to. But, good to have fixed.
- posted: July 30, 2021 at 5:51pm version: 8.3 revision: 194
Added sanity checks to the GDS dump from GDS_FILE pointers. Since it is easy to subvert the process by updating GDS without updating the pointers, it is trivial to end up with bad GDS output. The sanity checks confirm that the position pointed to is a complete structure (check begin and end records), and that it has the same name as the cell (this is not a requirement, as there are reasons one might want to point to data from a structure of a different name, but a warning will be printed).
Modified the "close" function in CIFgen.c so that it uses the STACKPUSH/STACKPOP functions instead of recursing. Otherwise it has a tendency to cause the process to exceed the recursion limit.
Also: Simple change to "gds read" to print out a diagnostic message for every 5000 uses read instead of 100; this significantly cuts down on the output.
- posted: July 30, 2021 at 3:00am version: 8.3 revision: 193
Extended the "cellname rename" command to add an option "-force" that can be used to force renaming of a read-only cell. The action revokes the read-only status of the cell and removes any GDS filename and pointers from the cell's properties. This can be used to swap out a library cell in a layout for a custom version, by first forcing a rename of the cell, and then resetting the filepath of the cell and flushing.
- posted: July 29, 2021 at 3:00am version: 8.3 revision: 192
Corrected the "bridge" operator, which failed to check for "false" tile corners in the check area to find areas needing bridges. This prevents generation of unnecessary bridging geometry; and since the error made the check rotation-dependent, this may resolve some "parent and child disagree on CIF" errors.
- posted: July 28, 2021 at 3:00am version: 8.3 revision: 191
Corrected issue with finding devices in ResMain()---there is not necessarily a 1:1 correspondence from tile types to extracted device names, and not necessarily a 1:1 correspondence in the other direction, either. So the search for devices at the location given by the .sim file has been loosened to look for any tile type at that location. Matches are restricted to those in which the plane of the type found is the same as the plane of the device recorded in the .sim file; this prevents matching device like MiM caps that may be in the same location as a device in another plane.
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.
- posted: July 26, 2021 at 3:00am version: 8.3 revision: 190
Corrected a problem in ext2spice which has been in the code for a very long time but never discovered; in which any implicit port connection into a subcell (that is otherwise labeled with ports) that appears at the end of the node list (i.e., after all the declared ports), will not be output, either in the subcircuit definition or calls.
- posted: July 24, 2021 at 3:00am version: 8.3 revision: 189
Corrected a potential segfault issue in "extresist" if it encounters a port label that is not connected to a valid layer (e.g., space).
- posted: July 14, 2021 at 3:00am version: 8.3 revision: 188
Corrected an error caused by fixing the unterminated comment in the last commit, which was an undeclared variable in the block that was being left out accidentally. So that has now been fixed.
- posted: July 13, 2021 at 3:00am version: 8.3 revision: 187
Corrected an unterminated comment pointed out by Jim Everitt.
- posted: July 11, 2021 at 3:00am version: 8.3 revision: 186
Implemented a command option "ext2spice short voltage|resistor|none" that implements a method for handling ports in a subcircuit that have different port names and indexes but are shorted together. "none" is the default and backwards-compatible behavior that merges ports together, which will often cause one of the ports to be optimized out of the netlist. "resistor" will separate the port names with a 0-ohm ideal resistor. "voltage" will separate the port names with a 0-volt voltage source. This should work well for simulation and potentially for LVS, although its impact on LVS has not been fully investigated.
Updated version with the last commit.
Also: Correction to prior commit to remove collision between defined flag bits for name trimming and short handling method in the ext2spice options.
- posted: July 9, 2021 at 3:00am version: 8.3 revision: 185
Modified the startup behavior so that if a ".tcl" script file is presented on the command line, then all following arguments are assumed to be arguments of the script and not additional input to be processed by magic. This allows arguments to be passed to scripts passed to magic on the command line.
- posted: July 5, 2021 at 3:00am version: 8.3 revision: 184
Corrected the "cif coverage" command so that the coverage is not accidentally converted from (long long) back to (int); otherwise the coverage is wrong on any large layouts, especially full-chip sizes.
Updated the version along with the fix to "cif coverage".
- posted: June 30, 2021 at 3:00am version: 8.3 revision: 183
parse USEMINSPACING LEF statement
Updated the version to match pull request #84 from Dan Moore.
- posted: June 24, 2021 at 3:00am version: 8.3 revision: 182
Modified the "flatten" command so that when used with "-dobox", it is not necessary that the target cell not exist. That allows a layout to be flattened into a destination in pieces. Also found that the "flatten" command never frees memory for the CellUse it creates for the copy, so fixed that as well.
- posted: June 20, 2021 at 3:00am version: 8.3 revision: 181
Added a missing include of ctype.h to a source file that uses the isalnum() subroutine. Corrected an assignment in utils/tech.c which was a syntax error that passes through the compiler.
- posted: June 18, 2021 at 3:00am version: 8.3 revision: 180
Corrected issues with GDS write that come from two features recently introduced: The use of substitutions for PDKPATH and home directory in path names for GDS files referenced in abstract views, and the "gds addendum" option. Both were interfering with magic's handling of writing GDS files from abstract layout views.
One small enhancement to the code of the previous commit: If a cell is referenced by a GDS "addendum" file but is not in either the tree of the root def or any other dumped GDS file, then check the database for those files and output them if they exist. This allows one way to get around missing cells in the GDS output if a cell from a GDS addendum is used but no cells from the library that the file is an addendum of are used.
- posted: June 15, 2021 at 3:00am version: 8.3 revision: 179
Added missing function declaration for GeoCanonicalRect in geometry.h.
- posted: June 14, 2021 at 3:00am version: 8.3 revision: 178
Changed the property attribute number used for cell instance names from 98 (arbitrarily selected) to 61 (apparently commonly used by other tools). This should help increase compatibility with GDS files output from other tools.
Modified the node merging in ExtHier.c to match the node merging optimization done in ExtFlat, which is to keep a count of the number of different node names assigned to the node so that when merging, the one with fewer nodes can be updated to match the one with more nodes. Note: This change is made on the assumption that the names for node1 and node2 are equally preferred. Supposedly the first name in the node list is canonical, so if node1 is preferred in any case, it may be necessary to move the first item of the second list to the beginning (a minor code change).
Also: A very minor change to the code of the last commit preserves the behavior of keeping the same first record when merging two nodes. This does not seem to have any effect on extraction output. But since the order of nodes can make a difference and there is no performance impact in the code change, I will keep it as-is.
- posted: June 13, 2021 at 3:00am version: 8.3 revision: 177
Corrected an error in initNodeClient in ext2spice that uses TTMaskSetMask() like = instead of |=, which doesn't work because the mask is uninitialized.
Corrected the GDS read routine so that the "gds noduplicates" option does not get undermined by GDS files that have cell instances appear before cell definitions.
Also: This corrects the issue raised in pull request #75 that breaks the compile on clang and probably other finicky compilers (as well as just being wrong).
- posted: June 8, 2021 at 3:00am version: 8.3 revision: 176
Modified the CIF/GDS array processing in CIFhier.c, finding that there were incorrect assumptions made in the code from 35 years back or so, for the case where the CIF layer halo is larger than the size/separation of the cells in the array. The new code will prevent the array routine from copying hierarchical additions to the mask layers outside of the array area. Whether or not the new code has its own faulty assumptions remains to be seen through thorough vetting.
- posted: June 7, 2021 at 3:00am version: 8.3 revision: 175
Corrected CalmaRead to remove a syntax error that managed to end up in the last commit, unfortunately. Thanks to Matt Guthaus for alerting me to this. Also updated parts of the extresist code that remove the dependence on ResConDCS; this is a minor update and should not affect the operation of extresist. It is preparatory to doing more work to support additional device types like capacitors, bipolars, and diodes.
- posted: June 6, 2021 at 3:00am version: 8.3 revision: 174
Corrected a potential crash condition if attempting to read a GDS cell without any edit cell defined.
- posted: June 5, 2021 at 3:00am version: 8.3 revision: 173
Corrected the "surround_ok" spacing rule, which did not prevent the layers2->layers1 swapped case from being implemented; the surround_ok rule type is by definition asymmetric and the two layer sets cannot just be swapped.
- posted: June 2, 2021 at 3:00am version: 8.3 revision: 172
Corrected an error in the implementation of the CIF "mask-hints" operator that failed to set cifplane to curplane before drawing into it. This can cause the "mask-hints" layers to vanish, or worse, cause a segfault.
- posted: May 28, 2021 at 3:00am version: 8.3 revision: 171
Recast all uses of resist-class and device class in routines using code from extflat from type unsigned long to type TileTypeBitMask. This increases the number of types of each to 256 and tracks the number of types, so it should be difficult to exceed this amount.
Updated the version number.
- posted: May 27, 2021 at 3:00am version: 8.3 revision: 170
Additional changes, almost all stylistic, to make the resis/ section style conform to the rest of the database. It is difficult to work with code written in a sloppy, random style.
- posted: May 26, 2021 at 3:00am version: 8.3 revision: 169
Corrected a problem with character array bound overflow when writing values to a LEF file.
A number of fixes to the extresist code (as well as style cleanup). Still tracking down a problem with non-FET devices (e.g., capacitors). So, work in progress. Nothing should be affected outside of extresist.
- posted: May 24, 2021 at 3:00am version: 8.3 revision: 168
Modified the cell load routine to avoid creating an "undo" record for loading a cell after displaying an unmodified "(UNNAMED)" cell, because "(UNNAMED)" will be deleted, leaving the undo record invalid and causing a crash if it is attempted to be invoked.
Modified the "cmdDumpParseArgs()" routine (used, for instance, by the "getcell" command) so that the "parent" and "child" arguments will accept the standard syntax for coordinates used by most other commands (will accept SI units or trailing suffix i/l for internal or lambda units).
Also: Corrected two somewhat related errors. When "getcell" finds a name conflict and renames a cell, the name was not pointing to the new name and immediately caused a crash condition. However, it got to that point by believing that cell "path/x" and "path/x.mag" were different files. The name was stripped of the extension but the full file path was not, causing the confusion.
Also: One correction to the last commit, otherwise segfaults are essentially guaranteed. . .
- posted: May 22, 2021 at 3:00am version: 8.3 revision: 167
Corrected an error in the extresist code that will cause an infinite recursive loop and crash magic. Corrected a number of other issues along the way, especially one where routines in EFantenna and extresist make use of array EFDevTypes which was only created by ext2sim and ext2spice, and freed when done. Having run extresist through valgrind, there are still issues in the code.
Resolved an outstanding issue with extresist, which is that the extresist extractor is less sophisticated than the standard extraction and will not check through the list of device records belonging to a single device type. Therefore a device in the .res.ext may have a different device name. So name hashing and checks are made against the tile type, not the device name, as the tile type + device coordinates is sufficient to uniquely identify the device. However, the extresist extractor does need to be sophisticated enough to find all the terminal types, so that needs to be fixed.
- posted: May 20, 2021 at 3:00am version: 8.3 revision: 166
Modified the condition under which the (UNNAMED) file is deleted on loading a layout to avoid doing so with in a suspendall ... resumeall block. That avoids weird errors occurring when the PDK toolkit scripts are run to generate a new device layout if the top level layout is still (UNNAMED) and empty.
- posted: May 18, 2021 at 3:00am version: 8.3 revision: 165
Corrected an error in the "cifspacing" rule check for non-Manhattan geometry (which had gone unnoticed due to the lack of use of "cifspacing" in any rule decks). The rule was not checking for all synthetic edges, because the tile type was expected to match the rule type when the function is called, but with a non-Manhattan tile, that may or may not be true and needs to be checked.
Updated VERSION.
- posted: May 15, 2021 at 3:00am version: 8.3 revision: 164
Implemented a basic DRC check on non-Manhattan edges. Previously checks on non-Manhattan tiles were made only on the straight edges; this was sufficient for most checks. However, it can miss the case of facing non-Manhattan edges. This check does not do triggered rules because there is no non-Manhattan maxwidth algorithm implemented, and because the triggering clipping area is a triangle and needs an extension to support it.
- posted: May 13, 2021 at 3:00am version: 8.3 revision: 163
Corrected an issue with a conflict between the "gds ordering" and "gds noduplicates" options (essentially, they were canceling each other out).
Updated version for the last commit.
- posted: May 10, 2021 at 3:00am version: 8.3 revision: 162
Corrected an error in extresist that caused it to lose track of any port that has zero area for the label rectangle.
- posted: May 8, 2021 at 3:00am version: 8.3 revision: 161
Corrected the array DRC checking, which was clipping to the error area + halo but then failing to limit overlap checks to that clip area, resulting in bizarre errors whenever an array is made. Not sure why the error didn't show up more often.
- posted: April 28, 2021 at 3:00am version: 8.3 revision: 160
Added a "gds unique" option that behaves like the default CIF behavior, in which if a cell is read from GDS that has the same name as a cell in memory, then the cell in memory is renamed to keep all cell names unique in the database.
Correction to the previous commit (didn't work as advertised).
- posted: April 27, 2021 at 3:00am version: 8.3 revision: 159
Modified the behavior of "extract" so that it does not try to check for sticky labels making connections through the hierarchy. This is only needed for some annoying layouts that put point-size labels with no connecting geometry in cells, and causes magic to spent excessive amounts of time searching through labels for any layout that has lots of labels.
Added exceptions to avoid processing sticky labels in two other places; this cuts extraction time by half for the example being used to test.
- posted: April 25, 2021 at 3:00am version: 8.3 revision: 158
Corrected two potentially fatal errors: (1) Code doing the PDK_PATH and HOME substitution in filenames needs to watch for a NULL cd_file, and (2) The routine that removes the (UNNAMED) cell when another cell is loaded needs to NULL the boxRootDef pointer or else it ends up pointing to deallocated memory.
- posted: April 23, 2021 at 3:00am version: 8.3 revision: 157
Created a method for annotating abstract views with GDS pointers. This can be done now by reading a LEF file, followed by reading a GDS file with the "noduplicates" option set. In addition, annotation of either the LEF view or a read-only view follows the same protocol as cell paths in the .mag file, which is to replace leading path components matching Tcl variables for PDKPATH or PDKROOT, and replace the home directory path with a tilde.
Properly handled the yes/no argument to "cellname writeable" so that like other commands, it accepts the usual assortment of true/false, yes/no, 1/0.
- posted: April 22, 2021 at 3:00am version: 8.3 revision: 156
Corrected issues in the extresist function found after the previous commit, mostly relating to the scale of values in the ".nodes" file produced by ext2sim. Making this file CIF syntax seemed unnecessary, so I removed the CIF syntax and scaling. "extresist" can now produce an apparently valid output on a standard cell layout. Even with the change, the extresist output is still only pseudo-hierarchical, so this does not preclude the need for eliminating the .sim format file in favor of the .ext file, but it provides a working intermediate form.
Additional correction for properly handling the substrate node when generating the device outputs in the .res.ext file, which was one of the main points of this exercise.
- posted: April 21, 2021 at 3:00am version: 8.3 revision: 155
Added a "-pinonly" option to "lef write" to restrict the pin area to what is defined by the label, and no additional surrounding geometry.
Additional modification to the previous commit to make the "-pinonly" argument to "lef write" take an optional value which is a setback distance, similar to "-hide", but specifically for limiting the distance that pins can extend into the center of a macro.
Also: Some changes to ext2sim and extresist to support arbitrary device types and substrate connections. This is an intermediate step to switching from a sim file format to an ext file format for input, but resolves the worst issues of having the sim file not recognize the devices or the substrate nodes. Implemented by using the sim subcircuit format introduced in IRSIM with the "user subcircuit" package. Implementation unfinished (work in progress).
- posted: April 20, 2021 at 3:00am version: 8.3 revision: 154
Revert "Removed the stupid restriction that "cellname readwrite" won't work
Finally got around to modifying the "cellname [list] top" command so that it returns cellnames in "natural sort" alphabetical order instead of the random order produced by scanning the hash table of cell names. Since this command is used by the "cell manager" window code, which was also not doing any sorting, then this fixes the same issue in the "cell manager".
Also: Modified the "gds write" command so that it issues a strongly- worded warning if an abstract cell view is written to GDS. Corrected the "cellname ... writeable" command to allow an overrride of the read-only status of a cell. That change had been made before but apparently got reverted by the recent rollback.
- posted: April 7, 2021 at 3:00am version: 8.3 revision: 153
Corrected a few errors in the code from yesterday's commit.
Removed some testing code that was not supposed to be in the last commit.
Also: Corrected the "font measure" line in the wrapper Tcl code from revision 131, as a Tk default font size less than 10 will round the scaling factor down to zero and result in bad things happening.
- posted: April 6, 2021 at 3:00am version: 8.3 revision: 152
Tests of substrate extraction
Committing final verified method for handling isolated substrate.
Also: Updated version along with isolated substrate handling in extraction.
Also: Cleaned up some unused code left over from extraction tests.
Also: Corrected an error causing weird and undefined behavior when extracting substrate regions, due to failure to clean up the tagged tiles after exiting a search due to finding a substrate type that was not the global substrate.
Also: Moved the substrate plane/restore further out so that planes are not restored until after all cells have been processed through extraction. Otherwise, top-down connections can end up with different generated names for the same node, resulting in a disconnect in the netlist.
- posted: April 2, 2021 at 3:00am version: 8.3 revision: 151
Got rid of the annoying behavior of "popstack" to not return to the original view position; this was due to not setting units to internal before re-applying the previous view position. Also wrapped most of the "popstack" routine into a suspendall...resumeall block so that the view is refreshed only once; this is especially important when popping back into a full chip view.
Removed the stupid restriction that "cellname readwrite" won't work on a non-writeable cell. While technically valid, that just means that nobody can make temporary edits on the cell in memory, which is useful in many applications. A slight quirk of the "cellname" command is that if applied to the cell currently in the layout window, it is not possible to make the cell show as edited and editable until leaving and re-entering the cell.
Also: First pass at properly handling deep nwell in a parent cell under subcells that do not have deep nwell. This commit handles the case where the pwell region is explicitly marked with a layer type. To do: Handle the case where the pwell region is implicit.
- posted: March 30, 2021 at 3:00am version: 8.3 revision: 150
Extended the "port" command with option "-quiet" to suppress error output when using the "port ... index" or "port ... name" to query values from a specific port by name or index. The "readspice" script has been modified to use this option to prevent unnecessary error output from the script as it searches a layout for possible name matches to a SPICE netlist subcircuit pin list.
Corrected an error in the previous commit, and updated the version number.
- posted: March 26, 2021 at 3:00am version: 8.3 revision: 149
Created a new command "drop" which can be used to drop a layer into subcells in a hierarchy. The intent is to use this in conjunction with the "select intersect" command option added yesterday to add deep nwell into the cells containing the devices that need it.
Updated VERSION
Also: Modified the "flatten" command so that ports of the topmost cell are preserved, which seems like reasonable behavior.
Also: Added a negation capability to the "select intersect" command, so that the intersection of (A and-not B) can be found. This and the (A and B) version give a large amount of capability like the cifoutput operators available as command-line commands. Also: Fixed the new "drop" command so that it properly redisplays and runs DRC after executing, and modified the behavior so that the dropped material is clipped to the area of the selection.
- posted: March 25, 2021 at 3:00am version: 8.3 revision: 148
Added a new selection command option "select intersect" that selects the area of intersection between any number of types.
Updated VERSION
Also: Extended the "what" command to take the option "-listall" in addition to "-list", where the list of layers returned is more like the (recently extended) non-listing method where each type is followed by a list of cell names in which that type is found (within the selection area).
Also: Revised the "select intersect" command from the previous commit so that the behavior is to pare down any existing selection by removing any parts of it that do not intersect the layer specified on the command line. This is generally more useful than the previous method, as the intended purpose is to intersect a number of layers against one (e.g., all transistors intersecting deep nwell).
Also: Corrected an error in the last commit's implementation of the "what" command.
Also: Corrected the list produced by "what -listall" to have the intended nesting. Corrected the "select visible" command, which got broken during the modifications.
- posted: March 24, 2021 at 3:00am version: 8.3 revision: 147
Corrected typo from the last commit that will cause a crash. . .
- posted: March 23, 2021 at 3:00am version: 8.3 revision: 146
Applied the same change made yesterday to DBconnect.c to ResConDCS.c and SimDBstuff.c, which have nearly the same connectivity search functions. All three now use the hybrid list + stack method.
- posted: March 22, 2021 at 3:00am version: 8.3 revision: 145
Made the "select short" command a bit easier to use (and more in line with the existing documentation) by not requiring the net containing the two labels to be selected before running the "select short" command. The command now first checks if the labels exist in the selection, and if not, the command effectively executes "goto label1 ; select net" and then continues as previously implemented.
Modified the connectivity finding search routine so that it does not crash if too many unprocessed areas get queued up. Also modified it to prune entries that match one of the last five entries created before searching the current tile. However, it is not clear that that makes any significant difference to the run time, and it needs to be analyzed vs. the number of entries to check against.
Also: A few corrections to the network connection selection. The pruning method does not work and needs debugging, but is otherwise harmless.
Also: Changed to a hybrid list and stack; the list keeps 65536 entries at a time, and when it runs out of space, it pushes the stack. This should speed up the connectivity routine somewhat, as it no longer has to copy memory when expanding the list size, and it no longer has limit at the integer boundary for memory allocation.
Also: Corrected an error in the connectivity tables that for contact types failed to add in any layers from other planes that are marked as connected in the "connect" section of the techfile but otherwise unrelated to the contact type and its residues.
- posted: March 21, 2021 at 3:00am version: 8.3 revision: 144
Corrected the "what" command so that the correct cells are listed that contain the selected paint. Previously, all cells inside the area of the selection box would be printed, which is completely wrong, and can lead unexpectedly to thousands of cell instance names being printed out.
- posted: March 19, 2021 at 3:00am version: 8.3 revision: 143
Correction from a recent commit; complicated sets of "equiv" statement in a .ext file require that all aliases of a node name be rehashed after a node merge, or else node loops can occur. Also prevented statements of the form "equiv A A" from being output in the .ext file, as they are useless.
Corrected a bad typo, "==" instead of "="; can cause a crash condition when doing ext2spice.
Also: Modified the GDS read routine behavior so that if a cell is being flattened per "gds flatten" or "gds flatglob", and the "gds readonly" option is not set, then the instances of the flattened cells are removed from the layout. They are retained for the "readonly" option because when writing GDS of such a cell, the full hierarchy needs to be walked.
Also: Removed one diagnostic message after flattening a cell in GDS input because depending on the GDS file it could be printed millions of times.
- posted: March 18, 2021 at 3:00am version: 8.3 revision: 142
Modified the crash backup script to add options "disable" and "resume". However, this has not been implemented as it has been observed that the use of itimer() has a restriction of one timer per process, which interferes with the three or more uses of the timer within magic. The timer method will have to be changed to use the POSIX timer_create() routine, before this will work properly.
Added a reference count to the node structure in extflat to account for the "equiv" statement---equivalent nodes names have to be registered in the def->def_nodes hash table, and if they point to the same node, then that node can't be free'd until the last referenced node is seen when iterating through the hash table to free the node records during EFDone(). This is handled by the reference count.
- posted: March 17, 2021 at 3:00am version: 8.3 revision: 141
Modified the "label" and "setlabel" commands, giving "setlabel" an extra option "-default" that allows defaults to be set for any label property other than text or port-related properties. Subsequently, the command "label" will apply the given defaults to the label. This allows a simpler way to create rendered labels from the command line without remembering all of the arguments to the extended "label" command.
Encountered a crash condition caused by the "equiv" statement, for circuits with nets having multiple conflicting labels, depending on where the "equiv" statement occurs in the .ext file output. Corrected the error but am still puzzled as to why this has never shown up before, as it does not appear to be the result of any recent development work.
Also: Found no fewer than three separate places that cause a pop-up prompt for saving on a cell which is completely unmodified. One of these was due to the BPlane implementation, which forces an instance to be deleted and re-placed on a bounding box recomputation, which should not, in that case, be considered a modification. Another always runs DRC on a subcell upon reading rather than relying on any checkplane entries in the file itself; and the last one marking the timestamp as modified stemming from an attempt to correct an O(N^2) check to O(N). All three cases have now been corrected.
- posted: March 12, 2021 at 3:00am version: 8.3 revision: 140
Corrected a set of regexps in the schematic-to-layout script that prevented normal x=y type parameters from being parsed.
Restored the toolkit behavior of spreading out cells that are read in from a SPICE netlist in a row instead of placing them on top of each other.
Also: More enhancements for schematic_to_layout to parse various non-circuit content in a SPICE netlist (mainly to ignore test- bench elements and commands).
- posted: March 10, 2021 at 3:00am version: 8.3 revision: 139
Added extensions to the toolkit base to add netlist-to-layout conversion, largely converted from the python script in open_pdks, which itself was derived from an efabless script, and none of which have been particularly well tested.
- posted: March 7, 2021 at 3:00am version: 8.3 revision: 138
Modified the handling of subcircuit names beginning with non-alphanumeric characters. Instead of removing the non-alphanumeric characters, magic now prepends an "x" to the name. Since this naming restriction does not necessarily impact, say, LVS, it would probably be better to let this behavior be enabled or disabled by a command.
- posted: March 5, 2021 at 3:00am version: 8.3 revision: 137
Added some options to the net selection with respect to labels. The previous behavior was to generate hierarchical names for all labels when copying contents of subcells. This is "safe" for copying selections without accidentally shorting things through labeling, but it can make a mess of the selection. Options are now "select do labels" for the existing behavior, "select no labels" to not show any labels, and "select simple labels" to show only the root name of labels in subcells.
- posted: March 4, 2021 at 3:00am version: 8.3 revision: 136
Modification of readspice.tcl script to work around issue if no ports are found (i.e., "port first" returns nothing, instead of a number).
- posted: March 2, 2021 at 3:00am version: 8.3 revision: 135
Corrected an error that was causing disconnects in the hierarchical SPICE netlist output that appears to have come from flags created for writing DEF that inappropriately got set during ext2spice. A redundant call to efAddNodes() was adding confusion by appearing to handle most cases but actually missing some. With the corrected flag, the redundant call is really redundant and can be removed. It has not been tested whether DEF output is affected by the change (DEF output from magic is rarely used, anyway).
Updated VERSION with the previousl commit to fix problems with the hierarchical SPICE netlist generation.
- posted: February 26, 2021 at 3:00am version: 8.3 revision: 134
Implemented more automation for attempting to find a tech file based on the contents of a .mag file being read in, assuming compatibility with principles of open_pdks. The search paths are not meddled with unless a file is read for which the technology cannot be found (and a technology has not already been read, or at least no database file exists in memory using any technology that has already been read). If so, then variables PDK_PATH and PDK_ROOT are searched for in both the shell environment and the local Tcl environment. Also, if open_pdks has installed PDKs in the path /usr/share/pdk/, then that path will be searched. If a corresponding technology file is found, it will be loaded. If the path corresponds to an open_pdks-style path, then the library paths in libs.ref will also be added to the search paths for cells.
Corrected some errors relating to distributed allocation of node area and perimeter across devices. The distributed allocation was missing for hierarchical output, and the function that accumulates values per resistance class was initializing by iterating over device classes, not resistance classes, leading to a segfault if the number of device classes is larger than the number of resistance classes.
- posted: February 25, 2021 at 3:00am version: 8.3 revision: 133
Revert "Modified the .ext file reading and the .spice file writing so that
Gave up on attempting to separate out slashes in instance names from slashes in hierarchical names. Magic does not allow slashes in names when using "identify", so the simplest solution is just to prohibit them in names being read from GDS files, and replace them with underscores to make them magic-compatible. Changing GDS names always has repercussions on things like back-annotating delays, so it should probably be revisited in the future.
Also: Also modified DEF reads to avoid letting instance names contain either slash or comma.
- posted: February 24, 2021 at 3:00am version: 8.3 revision: 132
Fixed a minor error in the plot command that is missing a value in the print statement on detecting an invalid plot parameter value name.
Modified the .ext file reading and the .spice file writing so that array delimiters and hierarchy separators (characters '/', '[', and ']') that are part of instances or labels passed to magic, are preserved from input to output, but internally marked (with a backslash escape) so that they are not misinterpreted my magic when running ext2spice.
- posted: February 21, 2021 at 3:00am version: 8.3 revision: 131
Revised the wrapper script to use the Tk command "font measure" to get the pixel size of the default font, and scale the window glyphs and scrollbars to match, so that the display is automatically adjusted for screen resolution and does not require manual intervention to correct for high resolution displays.
- posted: February 20, 2021 at 3:00am version: 8.3 revision: 130
Altered the way that cells in unknown GDS libraries get prefixed, to make it more compatible with SPICE by keeping it case-sensitive and avoiding a number for the first character.
- posted: February 19, 2021 at 3:00am version: 8.3 revision: 129
Corrected an error in which the "select" command returns the name of an instance with double-escaped brackets if the instance name contains brackets. This then undermines the use of the backslash escape and causes the interpreter to raise an error instead of printing the name.
Corrected the "property put" command to handle changes in the GDS_FILE property in the same way that it handles changes to the FIXED_BBOX property, by setting or clearing the associated flag bit in the cell. Otherwise, it becomes impossible to make a cell writeable, as it always has some belief that it is still attached to a specific GDS file. Corrected an error in the "gds" ("calma") command parsing that switched the callbacks for the "noduplicates" and "nodatestamp" options.
Also: Corrected variables that set the PaintPlane routine, which had been changed from returning void to returning int without changing the type of the variable, thus causing a compiler warning.
- posted: February 18, 2021 at 3:00am version: 8.3 revision: 128
Restore terminal if exit is called inside a TCL script at startup
Updated VERSION along with pull request #68 from Anton Blanchard
Also: Updated from pull request #49 (required a manual merge due to change in DRC flags type).
Also: Merged pull request #35 from Jan Belohoubek
Also: Merged pull request #53 from Dan Moore.
- posted: February 17, 2021 at 3:00am version: 8.3 revision: 127
Corrected an error with the new off-grid DRC check that can cause a crash condition during GDS read-in.
- posted: February 14, 2021 at 3:00am version: 8.3 revision: 126
Added return values to DBPaintPlaneVert(), which was missing them and causing compiling under clang-10 to fail.
- posted: February 11, 2021 at 3:00am version: 8.3 revision: 125
Added an "off-grid geometry" check, in two versions. The simple one is an "off_grid" DRC type, which can be used to check geometry that is below the manufacturing grid. Normally magic prevents the grid from being subdivided below the manufacturing grid, but this limit can be removed and replaced by DRC checks to check for such errors in a GDS file of unknown origin. The second version looks for interactions between subcells that end up with intersections of non-manhattan geometry landing on points that are not on the database internal grid. Such errors cannot be seen by magic's DRC engine by definition, and so must be detected while flattening geometry for the DRC checks.
Revised DBWloadWindow (again) so that boolean flags are passed to it as a single value "flags" (unsigned char) with meaningful flag names. Added new option "-fail" to the load command to allow magic to fail on loading a cell that does not have a corresponding file rather than the default action of creating a new cell. Added a flag for the "-quiet" option so that behavior on "-fail" can be done quietly.
- posted: February 4, 2021 at 3:00am version: 8.3 revision: 124
Moved the "Generating output" statement for "gds write" after the calls on subcells, as otherwise the statement is confusing.
Added Shift-scroll-wheel scrolling (maps to horizontal scroll) to the default macros.
Also: Added "cellname timestamp" option to the "cellname" command to print or set cell timestamps. This is intended to be used with a PDK installer like open_pdks.
- posted: February 3, 2021 at 3:00am version: 8.3 revision: 123
Reverted about half of pull request #41 because it breaks compatibility with qflow, which wants to launch applications from symbolic links. The portability of magic now depends only on setting environment variable CAD_ROOT, but the portability should still be ensured.
Updated VERSION with the latest commit.
- posted: January 26, 2021 at 3:00am version: 8.3 revision: 122
Corrected the CIF input scaling to include the 2nd set of planes used by GDS reads.
Updated VERSION.
- posted: January 25, 2021 at 3:00am version: 8.3 revision: 121
Substantially revised the equations for computing bridges for the "bridge" GDS output operator; the previous equations were, under some situations, failing to meet the width requirement. Also: corrected the "cif style" check so that it does not claim that a style name with an exact match is ambiguous. Also: Corrected the use of "grid limit", so that the limit correctly scales with the output expander value.
- posted: January 22, 2021 at 3:00am version: 8.3 revision: 120
Corrected the extraction method for devices with terminals on the implicit global substrate, as a block of code meant to handle this case was left unreachable by another recent code fix.
Corrected the "extract unique" method so that ports which are made unique will also be assigned a unique port index at the end of the port list. That ensures that the unique names are all properly found in the extracted .subckt for the cell.
- posted: January 21, 2021 at 3:00am version: 8.3 revision: 119
Another change to CalmaWrite to avoid writing subcells of any cell def that is marked for a "full dump" from a referenced GDS file. This change was supposed to have been done a few commits ago but did not work as advertised.
- posted: January 18, 2021 at 3:00am version: 8.3 revision: 118
Corrected one small inconsistency in the handling of symmetric vs. asymmetric MOSFET definitions in the tech file "extract" section. Corrected the nmos.tech.in file to put the resistance classes in plane order, as otherwise the interpretation of which resistance classes belongs to the transistor source and drain can get messed up by the presence of buried contacts.
- posted: January 16, 2021 at 3:00am version: 8.3 revision: 117
Modified the behavior of "gds write" to refuse to write out the magic database derived layout of a cell that declares GDS_FILE but for which the GDS file referenced cannot be found or read. This will produce an incomplete GDS file instead of an apparently good and complete GDS file that actually contains bad data. Also: Added new command "random" that allows a random seed to be set, for use with the GDS output when writing a full dump of a GDS file. Otherwise, the output prefixes are always the same, which defeats the purpose of adding the random prefix.
- posted: January 15, 2021 at 3:00am version: 8.3 revision: 116
One last change for issue #50
Updated VERSION to go along with the pull request #64 from Dan Moore.
Also: Implemented a return value for the cell read-in checks with an option to stop the search whenever a cell is not found. Used this to implement a new option for GDS writes, "gds undefined allow|disallow" (default "disallow") controls whether or not GDS with undefined references will be allowed to be written. Similarly affects CIF and LEF writes, extraction, and DRC (when running "drc check" from the top).
Also: Added the old (very old!) nmos.tech file from the early days of magic (version 6.3) and lightly edited it to make it compatible with version 8.3. Edited the scmos/Makefile so that it installs with the rest of the distributed tech files.
- posted: January 14, 2021 at 3:00am version: 8.3 revision: 115
Skip over BLOCKAGES section when reading DEF files
Updated VERSION to go along with the merge of pull request #63.
- posted: January 13, 2021 at 3:00am version: 8.3 revision: 114
I discovered that for large designs, running DBWredisplay will take significant amounts of time even though there is no display to receive the result. However, the "suspendall" command only works if a window exists. The obvious solution is to set GrDisplayStatus to DISPLAY_SUSPEND whenever magic is run with the "-dnull" option. This should help speed up a lot of scripts, in particular where designs are large.
Because the pull update was missed, the version was not updated to the correct number.
Also: Added the ability to handle command option "cif list cover ..." to provide a single decimal value back to the interpreter, without the additional diagnostic output.
- posted: January 9, 2021 at 3:00am version: 8.3 revision: 113
A few minor edits to prevent compiler warnings around the changes made in yesterday's commit (implicit return value, missing string.h include).
- posted: January 8, 2021 at 3:00am version: 8.3 revision: 112
Corrected the use of the global substrate node name; this has been restricted to its original intent, which is to replace the long name formed from the plane short name and the "minfinity" coordinate. This avoids issues with conflicting substrate names derived from a real layer such as pwell. Also, the global substrate node name now returns the variable name without the "$" in front if the variable has not been set to anything. This avoids potential syntax errors in the netlist.
Corrected error caused by empty string labels in GDS input; when a cell is flattened, these were getting the hierarchy prepended and therefore became non-NULL and tending to screw up things generally.
- posted: January 7, 2021 at 3:00am version: 8.3 revision: 111
Extended the "mask-hints" operator to work correctly through a hierarchy.
Additional code to make sure that the database scaling acts on all values in a mask hints property, and added back the handling of mask hints in the top level cell, since the hierarchical function on cells does not apply the function to the top level.
Also: Small correction to the mask hints code to correctly handle multiple rectangles in a single property.
- posted: January 6, 2021 at 3:00am version: 8.3 revision: 110
Changed "realpath" in the scripts (added from a pull request merge earlier today) to "readlink -f", because "realpath" does not exist on some systems (e.g., CentOS). "readlink" seems to be more universally available. Noticed that the ext2spice and ext2sim scripts use /bin/sh instead of /bin/bash, which would cause problems with some systems where sh != bash.
One additional correction to yesterday's commit, as the 2nd solution was compatible with CentOS but not OSX. This solution appears to be more universally compatible.
Also: Made corrections to the extraction based on a pull request by Dan Moore for preventing integer overflow in the area calculations.
- posted: January 5, 2021 at 3:00am version: 8.3 revision: 109
Add dependencies on the VERSION file
Set GrClosePtr back to NULL before calling MainExit() to squash the seg fault. It appears that calling GrTkClose before graphics are fully initialized causes this.
Also: Ignore derived files when compiling on OSX
Also: Have magic.tcl look for the shared library in the script directory
Also: Make bash wrapper relocatable
Also: Add configure flag for wish binary
Also: Made a few modifications to the patch from Keno Fischer (pull request startup. I'm not sure that it is even possible to have a Tcl variable set at this point in the startup procedure, though.
Also: A few minor changes to the last commit to prevent compiler warnings.
- posted: December 31, 2020 at 3:00am version: 8.3 revision: 108
Added a "-quiet" option to "load" so that scripts that use "load" to create a new cell that is not expected to exist on disk will not generate annoying error messages.
Changed "Writing cell" to "Generating output for cell" from the "gds write" command, since "Writing cell" is easily confused with writing a .mag database file. "Generating output" seems clearer to me. Maybe it's just me.
- posted: December 30, 2020 at 3:00am version: 8.3 revision: 107
Correction to yesterday's commit to fix the "bridge" operator for CIF/GDS output. Yesterday's commit did not completely solve the issue. Today's commit should.
Added an option "-dobox" to the "flatten" command, which flattens just the area inside the cursor box. This is important for certain methods like stepped fill pattern generation.
- posted: December 29, 2020 at 3:00am version: 8.3 revision: 106
Corrected two errors: (1) Do not write subcircuit calls to subcircuits that have been removed by flattening into the parent cell due to lack of devices. Previously the checks on writing the subcircuit and writing the call were slightly different, leading to instances in which the subcircuit call would be written to the netlist output without the subcircuit being defined. (2) Corrected an error in the "bridge" CIF/GDS output operator. In certain (somewhat rare) geometries, the tile behind (instead of in front of) the corner being checked may be incorrectly flagged as a DRC spacing error. The fix is to ignore tiles that are behind the corner being checked.
- posted: December 28, 2020 at 3:00am version: 8.3 revision: 105
CIFgen: Fix processing of MASKHINTS_* properties
Updated VERSION along with Sylvain Munaut's fix to the maskhints code.
- posted: December 25, 2020 at 3:00am version: 8.3 revision: 104
Update config.guess/config.log
Fix a few compiler warnings
Also: Updated VERSION to rev 104 in conjunction with pull request merges from github.
- posted: December 24, 2020 at 3:00am version: 8.3 revision: 103
Corrected an error that can confuse a source-drain tied device with another device record for the same magic type.
- posted: December 23, 2020 at 3:00am version: 8.3 revision: 102
Added an option "gds flatglob [|none]" that allows flattening of input cells on a per-cellname basis, using glob-style pattern matching. This is probably the best way to deal with 3rd-party vendor GDS with unfortunate practices like dividing devices up among cells in a hierarchy, even though it comes across as a bit of a hack solution.
Made a slight change to the "gds flatglob" command option to allow cells with subcells to be flattened in this way, as there does not seem to be any prohibition against it.
- posted: December 22, 2020 at 3:00am version: 8.3 revision: 101
Fixed a problem with extraction. If an extraction line specifies one terminal of a device as the substrate, but also specifies shielding types for the substrate, then the extraction cannot just assume that a missing terminal is connected to the substrate without first checking that there are no substrate shielding types under the device.
Corrected a subtle but very bad compiler-dependent error in the extflat code; failure to provide a forward external reference to EFHNBest() resulted in a failure to correctly evaluate a boolean expression. That resulted in a failure to merge hierarchical nodes during ext2spice, resulting in an incorrect netlist with single nodes broken up into pieces.
- posted: December 19, 2020 at 3:00am version: 8.3 revision: 100
Corrected the "lef" command so that "lef help" works again. Corrected the "lef write -hide" command option so that obstructions outside of the boundary are included in the obstruction list, in addition to the block inside. This had previously been done correctly for use with the "setback" option but would fail only for setback = 0.
- posted: December 17, 2020 at 3:00am version: 8.3 revision: 99
Several changes and updates: (1) Added a new keyword "required" to the tech file format "version" section. This can be used to specify the version of magic that must be used to be compatible with the tech file. This effectively supercedes the technology version number. (2) Changed the behavior of "make" to set the version and revision numbers on doing "make" instead of "configure". This allows the version to update correctly after doing a "git pull" followed by "make" without doing "configure" in between. (3) Fixed a couple of issues that were flagged as compile-time warnings.
- posted: December 16, 2020 at 3:00am version: 8.3 revision: 98
Added "gds" command option "gds nodatestamp [true|false]". Set to true, this will force the "gds write" command to write out creation date stamps as zero. This is very useful for avoiding changing the contents of an otherwise-unchanged layout, especially if it is in a git repository where it will force the entire file to be replaced.
- posted: December 15, 2020 at 3:00am version: 8.3 revision: 97
Implemented first part of "mask hints", a method to allow mask layers that are normally automatically generated to be supplemented with additional geometry in the form of properties. The first commit implements a CIF operator "mask-hints" that tells CIFGenLayer that additional geometry may be specified with a property named "MASKHINTS_" plus the name passed to the operator as its only argument. A more extensive commit to be done will allow this operator to be used on cifinput to use mask hints to retain the exact geometry of mask layers used in the input file.
Changed the cif output style option "see-vendor" to "see-no-vendor" and made the default behavior equivalent to "see-vendor". While it is true that running "cif see" on a readonly cell shows layers that are not necessarily representative of what is in the file, the opposite behavior manifests itself in ways that are confusing.
- posted: December 11, 2020 at 3:00am version: 8.3 revision: 96
Added a command option "cellname dereference" to force a dereferencing flush of a cell, by name.
Added command options "flush -dereference" and also "cellname dereference" to allow a cell to be flushed with dereferencing (i.e., discard any file path attached to the cell, and use the search paths to find the cell when it is reloaded).
- posted: December 10, 2020 at 3:00am version: 8.3 revision: 95
Removed .gitconfig, which I thought I did yesterday. But apparently not.
- posted: December 9, 2020 at 3:00am version: 8.3 revision: 94
Corrected a scaling error in the post-order reading routine. The routine attempts to rescale the contents of the top-level cell after moving forward in the GDS to find a cell that was used before it was defined, if reading that cell caused the scale to change. However, the numerator and denominator were reversed, causing the scaling to be the inverse of what it should have been.
- posted: December 8, 2020 at 3:00am version: 8.3 revision: 93
Modified the DEF read routine (following a diff script from Ahmed Ghazy) to read pin uses from a DEF file, including the three types that are not defined by the LEF format (go figure). Expanded the bitmask of label flags to include the additional use types. Also shifted the label flag bitmask up to make additional room for more port number, as there is no point in having unused bits in the bitmask.
- posted: December 4, 2020 at 5:12pm version: 8.3 revision: 92
Updated PaOpen() to handle a Tcl variable of the type ${X} as well as just plain $X (i.e., ignore any brackets around the variable) when doing variable expansion.
Several enhancements: (1) Added command option "gds no_duplicates" to allow a "gds read" command to ignore cells in the GDS which already exist in memory. This allows magic to be "pre-seeded" with specific views of cells in the GDS. Default is false, which is backwards- compatble behavior. (2) Changed the behavior of the the way the use path is written to and read from a .mag file, checking the path prefix against Tcl variables PDK_PATH, PDKPATH, PDK_ROOT, and PDKROOT, and replacing any such leading path component with the variable name. On reading a .mag file, any variable name at the start of the path that matches a Tcl variable will be substituted.
- posted: December 4, 2020 at 3:00am version: 8.3 revision: 91
Corrected a crash condition that can occur if a GDS file pointed to by GDS_FILE does not exist.
Added missing brackets around a phrase in the "close" operator that was causing false positive errors in DRC checks involving CIF rules using the "close" operator, such as the minimum hole size in the sky130A PDK.
Also: Modified the DEF and LEF read/write routines to keep the defMakeInverseLayerMap() from returning complete contact types when used by the lefWrite command when writing LEF macros, which contain cut layers but not entire contacts.
- posted: December 3, 2020 at 3:00am version: 8.3 revision: 90
Reinstated the search on subcells when doing "drc check". This is somewhat inefficient, but otherwise subcells do not get re-checked for errors.
- posted: November 25, 2020 at 3:00am version: 8.3 revision: 89
Corrected two annoying errors: (1) SPICE netlist output subcircuits could have multiple ports of the same name. This problem had been worked over before, but there was an indpendent mechanism producing the same result for a completely different reason, caused by subcells being much larger than the cookie-cutter extraction method's extraction regions. Solved by tracking port names in a hash table and preventing re-use. (2) ext2spice was producing "no such node" errors; like (1) this had been previously worked on, and like (1) this mechanism was independent. Problem came from not passing -1 to extHierSubstrate for the non-arrayed dimension of a 1-dimensional array. Also: Removed the word "fatal" from extraction error reporting, as nearly all extraction errors are entirely benign. This should clear up confusion among alarmed end-users.
Updated VERSION to 8.3.89.
Also: Corrected an error in the "close" CIF operator, which was checking for infinities in space tiles by checking tile dimensions against TiPlaneRect, where in fact TiPlaneRect is slightly smaller than the plane boundaries, so this check would always fail, causing unpredictable behavior due to integer overflow.
- posted: November 24, 2020 at 3:00am version: 8.3 revision: 88
Corrected the lefRead routine so that LEF annotation works properly on cells with multiple ports per pin. As written, the code was erasing all labels before creating a new port label, which would erase all previous port labels. This should have been done only on the first port.
- posted: November 22, 2020 at 3:00am version: 8.3 revision: 87
Updated version to go along with the pull request merge from github.
- posted: November 21, 2020 at 3:00am version: 8.3 revision: 86
Added an option to "findlabel", a 3rd argument which is the occurrence of the label to place the box on. This can be used with "findlabel -glob" to get a list of labels and determine the length of the list, and then iterate through each occurrance of the label in the edit cell.
Partly" corrected an issue in GDS read: The cd_client record is used both for counting cells during GDS write and for saving geometry data from the "copyup" operator during GDS read. The write routine does not clear the client record, and the read routine was checking if the cd_client value was default. Corrected the resulting crash condition by resetting cd_client before GDS reads. However, the underlying problem is that the GDS read is reading data into a cell that already exists in the database, and is not handling it robustly by renaming the existing cell. So this should be revisited.
- posted: November 19, 2020 at 3:00am version: 8.3 revision: 85
Rewrote the hierarchical check routine so that it does not report disagreements between parent and child cells on GDS generation for templayers, as these layers are not output; any resulting differences showing up eventually on an output layer will be reported.
- posted: November 17, 2020 at 2:36pm version: 8.3 revision: 84
Such a little typo, such a big problem. . . Fixed error from last commit.
Updated version in preparation of forcing the github mirror update.
- posted: November 17, 2020 at 3:00am version: 8.3 revision: 83
Corrected a badly-written routine for the CIF generator for operator bloat-all, that was resetting flags in the entire plane within the callback for each tile processed. This would push DRC run-times from minutes to hours. Also corrected another, much more minor, efficiency, in which the connection mask was generated in the callback routine for each tile, instead of calculating before the plane search and passing the mask to the callback function in the client data.
- posted: November 14, 2020 at 3:00am version: 8.3 revision: 82
Corrected a bad error (missing braces around a code block of more than one line) in the "grow-min" function that was affecting GDS output for any layers using the grow-min operator.
- posted: November 13, 2020 at 3:00am version: 8.3 revision: 81
Modified the CIFGenLayer() routine to be aware of when it is called during hierarchical processing from CIFGenSubcells() and CIFGenArrays(), and to avoid certain operators that are useless and harmful when applied hierarchically; namely squares, slots, bbox, boundary, and net.
Fixed two misspellings in comments.
Also: Changed the readspice (annotation) script so that it uses the exact label name with "port make", resolving any issues that might arise if the label overlaps another.
Also: Applied a patch by Matt Guthaus to a routine in the readspice annotation script, that moves a block of code making a list of all labels outside of an inner loop where it causes a huge slowdown.
- posted: November 12, 2020 at 3:00am version: 8.3 revision: 80
Corrected the handling of DRC in cell instance arrays so that it matches the handling of subcell instances generally. Previously it would check the interaction between neighboring cells in an array without regard to any material in the parent cell which might remove those errors; consequently, the array would have to be DRC clean by itself in order for the parent cell to show as DRC clean. The array check has been moved inside the DRCInteractionCheck() routine, so that it runs only where arrayed instances do not interact with anything else. Within interaction areas, the area is flattened and checked, so the array check is not needed.
Corrected the "grow-min" CIF operator to grow more than the minimum amount as needed to land on the specified minimum manufacturing grid.
Also: Added a forward reference to prevent a compiler warning.
- posted: November 11, 2020 at 3:00am version: 8.3 revision: 79
Corrected the CIF "close" function to accommodate non-manhattan geometry.
Corrected an error that makes the "drc listall why" command segfault.
Also: Problem apparently stems from the routine not being in the header file, so corrected that, too.
Also: Additional correction for the CIF "close" operator.
- posted: November 8, 2020 at 3:00am version: 8.3 revision: 78
Corrected the LEF read routine so that it preserves the sticky flag on labels while annotating other properties (this error was a simple typo).
- posted: November 7, 2020 at 3:00am version: 8.3 revision: 77
Corrected the "suspendall" and "resumeall" Tcl scripts so that they do not fail when using "magicexec -dnull" (because there are no layout windows, there is nothing to suspend and resume).
- posted: November 4, 2020 at 3:00am version: 8.3 revision: 76
Corrected what appears to be a long-standing error in the "extract unique" code. It was using DBEraseLabelsByContent() which would erase all matching labels, and could potentially erase labels that were still remaining on the list being processed, causing a segfault. Also corrected minor errors identified by valgrind during debugging the above-referenced problem.
- posted: October 31, 2020 at 3:00am version: 8.3 revision: 75
Made a change to the way that the parameterized cells are handled. Instead of a 6-character suffix generated randomly, the 6-character suffix is generated by a hash algorithm from the device parameters. If the cell parameters are changed, then the cell itself changes. If the instance name was default (derived from the cell name) then the instance name changes accordingly. The result is that there cannot be two (auto-)generated cells with the same parameters but with different cell names.
Corrected the paint table from "compose", which was improperly handling compose lines that override contact behavior.
- posted: October 28, 2020 at 3:00am version: 8.3 revision: 74
Changed the readspice script to avoid changing pin direction from a CDL file unless the existing pin direction is set to "default". This is consistent with the way the LEF annotation works, as well.
- posted: October 27, 2020 at 3:00am version: 8.3 revision: 73
Added a method to ignore a specific device extraction combination by setting the model name to "Ignore" in the tech file.
Changed the behavior of searches for labels in the basic extraction such that it looks for material connecting to the label at the center point of the label and not the lower left corner. This keeps the behavior of looking for tiles on the corners of a degenerate label line or point between layers, but avoids problems with sticky labels that are not quite aligned with the rectangle (due to certain commercial EDA tools that have a sloppier notion of labeling).
Also: Also added code to not put parameters for a device marked "Ignore" into the .ext file, in case such devices were assigned parameters.
Also: Corrected a wayward cut-and-paste error from the last commit.
- posted: October 23, 2020 at 3:00am version: 8.3 revision: 72
Corrected a problem with argument passing in the DRC subcell copying up of DRC errors into the parent cell.
- posted: October 21, 2020 at 3:00am version: 8.3 revision: 71
Made a change to the way ext2sim determines if a FET type is an n or p device; this was previously dependent only on the first character of the extracted device model name. Since the tech file has control over what the device layer names are but not the extracted model names, the device layer type name is used as a backup way to determine if the type is n or p, if that cannot be determined from the extracted model name.
Updated version to go along with the last commit.
- posted: October 19, 2020 at 3:00am version: 8.3 revision: 70
Corrected an error in the "bloat-all" operator of the CIF generation, which was failing to clear tiles in the layout of the "processed" state, leading to unpredicatable results if the same layout layer is used in a subsequent CIF operation.
Corrected the (minor) problem caused by the slightly different handling of an alias that defines only one type (which is treated like it would be if it were declared on the same line as the original type declaration), such that the alias name does not become the default name for the layer (which is the one that ends up showing in the title bar when hovering over the layer toolbar icon). Mainly the problem showed up as "nwell" for the sky130A process appearing in the toolbar as "allwellplane".
- posted: October 18, 2020 at 3:00am version: 8.3 revision: 69
Corrected a few wayward commas in the "lef" command that prevented correct operation of "lef write".
Corrected the algorithm created yesterday for copying up DRC errors from child cells, which was incorrectly descending all the way down into the hierarchy; not only can this produce the incorrect result but it also wastes time searching cells that don't need to be searched.
Also: Added new cif operator bridge-lim
Also: Corrected a problem in which extraction of MOS caps (or any device with two or more terminals other than the device identifier type tied together) would fail if there were not a device record specifically matching a one-S/D-terminal device. This is inconsistent with past behavior, and so has been fixed.
- posted: October 17, 2020 at 3:00am version: 8.3 revision: 68
Removed the scalefactor from the DRC-CIF rule parsing, so that rules are interpreted in the dimensions used in the cifoutput section rather than always in centimicrons (otherwise, rules at, say, 5nm cannot be represented in the DRC section).
- posted: October 16, 2020 at 3:00am version: 8.3 revision: 67
Fixed a missing requirement of a reverse direction check on spacing rules with "surround_ok" on different planes.
Substantially overhauled the way that the DRC checker finds and processes "interaction areas". This should eliminate weirdnesses where errors will fail to show up in a subcell that does not interact with paint or other subcells in the top level edit cell. These errors cannot be reported directly in the top level cell, but a new error message has been created to direct the user to check the subcell for errors. Also: Modified the toolkit procedures to force DRC to be run on newly created or modified parameterized cell layouts. There is some oddity about the process that causes DRC errors to be delayed unless a print statement is put before the DRC check; I would like to investigate this further.
Also: Additional change: The switch to propagating DRC errors up from the bottom in non-interacting areas means that any change in DRC to a subcell must be handled before checking DRC in the parent. Previously the order of checks was reversed, moving parent cells to the beginning of the check list. This prevents the error cited in the previous commit which was showing up as a delayed DRC check when creating parameterized cells.
- posted: October 15, 2020 at 3:00am version: 8.3 revision: 66
Added two small features: (1) Added the "-annotate" option to "lef read". While "lef read" normally annotates existing layout, this option ensures that no additional cells are created from macros in the input LEF file. (2) Added a check on the "Input off lambda grid" warning during CIF/GDS input such that it is not repeated once issued, as it tends to be output many times when it occurs.
Made a small change to add a flag to the DRC rules to denote whether the rule is a normal database rule or a CIF-DRC rule. For the latter, the flag is used when substituting for escape strings in the "why" rule explanation to produce the correct value in microns.
Also: Added the correct header to DRCmain.c to see the prototype for CIFGetScale().
Also: Added a fix from Dan Moore to remove the Depend files on "make clean" (these are automatically removed and regenerated on "make" anyway).
Also: Added another fix from a pull request by Dan Moore, which apparently fixes a problem with substrate nodes not being flagged as such when reading .ext files.
- posted: October 14, 2020 at 3:00am version: 8.3 revision: 65
Added experimental "calma addendum" option to output only references to readonly cells but not the readonly cells themselves when writing a GDS library.
- posted: October 9, 2020 at 3:00am version: 8.3 revision: 64
Added new command option "box remove" that removes the cursor box from the layout window. The main reason for this is to keep the box out of the image when doing "plot svg". The "plot" command was also modified to always do a plot of the entire cell in the active layout window if the box is not present.
Upon reflection, decided to just omit the cursor box when generating an SVG plot.
- posted: October 8, 2020 at 3:00am version: 8.3 revision: 63
Added two new command options: "select bbox", which returns the bounding box of the selection (somewhat unuseful, especially as the result gets absorbed by the tag callback), and "box select", which sets the cursor box to the bounding box of the selection (much more useful). Also corrected the "port" command so that the command "port make" will search only for non-port labels.
Another update that properly deals with the "port" command for limiting search to non-port labels or to port labels only, depending on the command option (which was previously not implemented properly).
Also: Modified the "lef write -toplayer" option so that masterslice layers are considered an exception to the "-toplayer" restriction; this is because masterslice well/substrate layers will affect the electrical connectivity between port and sustrate or well.
Also: Corrected a simple error from the last commit.
- posted: October 7, 2020 at 3:00am version: 8.3 revision: 62
Added a "-nomaster" option to "lef write", and made writing masterslice layers in the output a default option. Use "-nomaster" to prevent the output of masterslice layers.
- posted: September 26, 2020 at 3:00am version: 8.3 revision: 61
Corrected a problem with both the "port" command and the "lef read" command when annotating an existing layout from a LEF database, if there is a port in the layout that is shadowed by a label with the same name that is not a port.
- posted: September 23, 2020 at 3:00am version: 8.3 revision: 60
Changed the behavior of the "compose" paint and erase rules to allow multiple types to be painted; for example, to paint over both planes of a contact when a paint type causes the contact to disappear.
- posted: September 22, 2020 at 3:00am version: 8.3 revision: 59
Modified the extraction code to properly handle length and width of devices that have a terminal underneath the device. Code not yet tested.
Also corrected an error where the bounds search uses the device type in the device record, which was not updated at the end of checking terminals for matching device extraction types. so the boundary survey might see the wrong device type and generate an incorrect boundary survey as a result.
Also: Corrected one final case of extracting an extended-drain pFET because the opposite type (pwell) is not directly underneath the gate, but touches it on the plane below. Because the pwell may be represented by space tiles on the well plane, it was also necessary to deal with the space type in the bitmask.
- posted: September 16, 2020 at 3:00am version: 8.3 revision: 58
Implemented an additional setback value for "lef write -hide" that produces a result that looks like "lef write -hide" in the middle but "lef write" around the edge. Can be useful for catching all the detail around the edges but obscuring/simplifying the bulk of the cell interior.
Found an apparent error in the continuous DRC that tends to erase errors in the periphery of where a change has been made. For some reason this was not apparent before, but seems to be from a change dating back to 2008---which seems unlikely. The fact that it has not been seen before may have something to do with the size of the DRC halo compared to the DRC step size in the SkyWater PDK, where it has suddenly become apparent. Jury is still out on this one.
Also: Updated version to force the overnight github mirror.
- posted: September 12, 2020 at 3:00am version: 8.3 revision: 57
Separated drain and source records for the esFetInfo array, to support asymmetric FETs and other devices like bipolars that have three distinct terminals. This does not go as far as it should to make the array independent of the number of declared terminals of the device. However, it suffices to make, e.g., parameter "a2=area" work for a bipolar device, and to generate the right drain and source areas and perimeters for asymmetric (e.g., extended-drain) devices.
Updated the version number to trigger the git mirror.
- posted: September 11, 2020 at 3:00am version: 8.3 revision: 56
Corrected an extraction error that prevented the use of the same device layer type to describe the extraction for both a regular FET and an extended-drain device. Note that the current code still requires that the extended-drain device be declared first, and does not check for this or attempt to reorder if incorrect.
- posted: September 10, 2020 at 3:00am version: 8.3 revision: 55
Corrected a tiny but bad error in the extract section reading of the tech file that completely undermined the ability to describe an asymmetric device (different materials for terminals).
- posted: September 5, 2020 at 3:00am version: 8.3 revision: 54
Corrected issue with parent and child cells in completely different directories starting from root getting the root directory "/" removed from the front of the child cell path.
Corrected a problem with the last commit, in which the check for no common directory components between parent and child should have been outside the while loop.
- posted: September 4, 2020 at 3:00am version: 8.3 revision: 53
Accidentally managed to add some test code into the database that was not supposed to have been committed. It has been removed.
Modified version to make sure the github repo and tarball gets updated.
- posted: September 3, 2020 at 3:00am version: 8.3 revision: 52
Changed the "port renumber" command option to sort ports by case- insensitive alphabetical order instead of case-sensitive.
- posted: September 2, 2020 at 3:00am version: 8.3 revision: 51
Added new command options "port first" and "port next" to make it easier to scan through a cell's ports. Used that capability in the "readspice" script to handle case sensitivity problems, and to find labels that are not ports and force them to be ports to match the reference netlist.
- posted: August 12, 2020 at 3:00am version: 8.3 revision: 50
Provisionally switched the memory allocation definitions away from Tcl_Alloc() and Tcl_Free() because Tcl_Alloc() uses (unsigned int) for the argument type and therefore limits memory allocations to what can fit in 32 bits. Using the system malloc(size_t) should not cause any issues.
- posted: August 10, 2020 at 3:00am version: 8.3 revision: 49
swapDrainSource moved into a function to encapsulate swap-related tasks; area parameters swapped according to the D/S attributes; SPICE attribute comment printf moved to the end of export function as it allows to add more device types
Pulled merge request from Jan Belohoubek, but corrected the problem of needing to revert parameter definitions after swapping them during a device source/drain swap.
- posted: August 9, 2020 at 3:00am version: 8.3 revision: 48
Applied a patch from Ahmed Ghazy that corrects an error reading PINS from a DEF file that have the PLACED or FIXED property declared before LAYER.
Fixed a long-standing but unnoticed (or unreported) error in which using the "-rcfile" switch fails if running magic from a user home directory.
- posted: August 4, 2020 at 3:00am version: 8.3 revision: 47
Added an assertion in ExtCell.c to force a fault if the technology is NULL when writing a .ext file; this should help with tracking down an obscure bug.
- posted: August 3, 2020 at 3:00am version: 8.3 revision: 46
Corrected a potential segfaulting error in which (apparently) port labels that are unnattached ("attached" to space), or possibly sticky labels without any geometry underneath, end up with a NULL node during EFBuild().
- posted: August 1, 2020 at 3:00am version: 8.3 revision: 45
Modified the routine that determines contact size from the CIF rules to accomodate a method used for processes that require additional spacing between contacts for large via arrays; this requires distinguishing between large and small areas to output vias, and so requires use of "and" and "and-not" before "squares". This highlights the arbitrary nature of this routine, which probably works better getting data from cifinput, or not at all (i.e., it is used when reading LEF, but it is known that the LEF read routines would be better implemented by running input through CIFGen(). If that were done, then this problem would not come up).
Corrected some uninitialized variables in the "lef write" function.
Also: Corrected one more uninitialized variable, in ExtHard.c.
- posted: July 31, 2020 at 3:00am version: 8.3 revision: 44
Corrected an error with the "slots" function that prevents slots from being generated in areas of negative coordinates when a grid limit is defined for the output style.
- posted: July 30, 2020 at 3:00am version: 8.3 revision: 43
Corrected ext2spice, which was reversing source and drain for the "msubcircuit" extraction model, which would normally not make any difference except that when source and/or drain are tagged with terminal attributes, then the source and drain are swapped with respect to what is expected in the output SPICE netlist.
Updated version to force new tarball and github mirror.
- posted: July 28, 2020 at 3:00am version: 8.3 revision: 42
Implemented a string truncation with ellipsis for the output to the caption line in the GUI window, which was causing problems with long filenames overrunning the string array dedicated to the caption line. Thanks to Sylvain Munaut for the patch.
- posted: July 27, 2020 at 3:00am version: 8.3 revision: 41
Modified the warning in database/DBio.c that says "Cannot open file for writing!" so that it actually tells you what is the name of the file that it is trying to write.
Extended the "port" command with the option "renumber", which forces all ports in a cell to be reordered in alphabetical order, which ensures that the output of "extract" is always the same (apart from coupling capacitance, which still ends up in randomized order due to the use of hashing based on memory address followed by iterating through the hash table).
- posted: July 26, 2020 at 3:00am version: 8.3 revision: 40
Removed "UNITS \n DATABASE MICRONS" entry from all LEF file output other than the technology LEF (when given the option to dump the technology LEF information).
- posted: July 23, 2020 at 3:00am version: 8.3 revision: 39
Removed "NAMESCASESENSITIVE" from "lef write", since this has been deprecated since LEF version 5.6.
- posted: July 22, 2020 at 3:00am version: 8.3 revision: 38
Removed handling of LEF macro "SOURCE", which is only valid pre- version 5.6, and Magic now officially writes version 5.7.
- posted: July 20, 2020 at 3:00am version: 8.3 revision: 37
Corrected an error in the last commit in which I expanded the body of a "for" loop in extract/ExtHier.c from one line to two but failed to then put braces around the whole loop.
Corrected a problem with "lef read" that prevents it from working with non-standard extensions such as ".tlef".
Also: Also corrected the "lef write" output to always put "END LIBRARY" at the end of a macro output, even if it is not part of a library. According to some commercial tools, this is what is expected, even though the use of "END LIBRARY" is never explained in the LEF/DEF spec.
- posted: July 19, 2020 at 3:00am version: 8.3 revision: 36
Corrected an error in the the extSubtreeFunc() routine, that is supposed to pull "sticky labels" into the cumulative flattened layout. Because it failed to check for the "sticky" flag, it would copy all labels, causing extraction time to go exponential as the number of labels in the design increases. Based on this correction, the extHierConnectFunc1() routine should be able to be optimized by stopping the search for sticky labels on the first non-sticky label, since extSubtreeFunc() ensures that all sticky labels come first in the label list.
- posted: July 18, 2020 at 3:00am version: 8.3 revision: 35
Corrected an error pointed out by Sylvain Munaut in which the "plow" command fails for the tutorial tut3d cell due to a missing initialization of the cd_cellPlane record in DBCellCopyDefBody(). This was missed in the implementation of "bplane", and was not checked because the routine is only called from the "plow" command routines.
- posted: July 17, 2020 at 3:00am version: 8.3 revision: 34
Added a "calma library" command option, to generate a GDS library from the subcircuits of a top-level layout without also writing the top level.
- posted: July 16, 2020 at 3:00am version: 8.3 revision: 33
Two changes to "lef write": (1) Added support for generating output for geometry on MASTERSLICE layers (which was inadvertantly broken), and (2) Added option "lef write -toplayer", which outputs pin geometry only for the topmost layer belonging to a pin, with connected layers underneath being designated as obstructions.
- posted: July 6, 2020 at 3:00am version: 8.3 revision: 32
Test.
Test again.
Also: Updated VERSION to force an update on the system; no changes were made.
- posted: July 1, 2020 at 3:00am version: 8.3 revision: 31
Modified the "plot svg" command to remove the window trimmings (scrollbar, title bar, etc.) from the output if the command is called from the non-GUI-wrapper environment (where the border area is part of the rendered output). This was required due to an unsolved bug in which calling magic to write SVG output from the wrapper in some pathological case exposed a Tk bug that caused the Tk grid manager to infinite loop, filling memory without limit.
Corrected readspice.tcl script to ignore CDL parameters in the subcircuit I/O list, and to not fail with an error if something in the PININFO line cannot be found in the layout (just prints an error message instead).
- posted: June 30, 2020 at 3:00am version: 8.3 revision: 30
Not sure why the temporary copy of DRCtech.c was not removed in previous commits, but am now doing 'git rm' on it to make sure it stays banished.
Corrected defs.mak.in to use @LD@ passed from the configure script instead of hard-coding "ld" for the LINK variable.
Also: Modified readspice to support the CDL "*.PININFO" line for annotating layouts with pin class (direction) from CDL files.
- posted: June 28, 2020 at 3:00am version: 8.3 revision: 29
Changed the end-of-line comment character from ';' to '$' when formatting a SPICE netlist for NGSPICE. This is the documented character as described in the NGSPICE User Manual, section 2.2.4 End-of-line comments
Updated VERSION along with the pull request merge for changing the in-line comment character recognized by ngspice (which has changed since the version of the documentation I had, which supported the use of the character ';', which was what magic was using).
Also: Corrected the readspice script to treat the input line as a string and not a character list when checking the first character of a SPICE netlist for a comment or continuation character.
- posted: June 26, 2020 at 3:00am version: 8.3 revision: 28
Corrected the "macro" command so that if no help text has been given for the key bindings, then the key bindings themselves will be printed when "macro help" is run, and not just empty strings.
- posted: June 18, 2020 at 3:00am version: 8.3 revision: 27
Corrected an error in the GDS output hierarchical adjustments code caused by the new bloat-all with templayers, which used the distance record in the bloat structure differently than the other bloat functions, and therefore was messing up the enumeration of layers needing to be handled by the hierarchical output. This was probably also wrong for the existing bloat-all function, which might explain some problems recently with the GDS output.
Further refined the layers used in hierarchical GDS generation to exclude layers created using the "boundary" or "bbox" operators, since they only exist in specific levels of the hierarchy. Pretty much by definition they should not be used in a way that requires additional geometry to be added to the parent cell. This greatly reduces parent-vs.-child disagreements (and the corresponding error messages), but does not entirely eliminate them.
Also: Updated VERSION to trigger the github mirror and tarball generation.
- posted: June 16, 2020 at 3:00am version: 8.3 revision: 26
Applied a patch from Ahmed Ghazy to correct the last change to "lef write", which had one typo in the formatting, plus was using a static string method for generating the formatted output that was implementation-dependent on fprintf(). These have been fixed.
Corrected error in the new expansion of the cifoutput "bloat-all" rule to include CIF templayers; the connection mask was not correctly generated for the CIF templayer, leading to bad GDS output.
- posted: June 14, 2020 at 3:00am version: 8.3 revision: 25
Changed the behavior of "lef write" (again) to set the UNITS to the minimum manufacturing grid (normally 1000 but can be altered by the "angstroms" flag in the cifoutput section, and by "gridlimit"). The output values then are truncated such that the floating-point output value, when multiplied by the UNITS value, is always an integer. e.g., "gridlimit 5" will change UNITS to 200, and values will be minimum precision 0.005, or 5 nanometers.
An additional change to remove the formatting for the antenna area output values, which were set to format according to database distance precision (which is not the same as area).
Also: Corrected an error in the global substrate name method added recently; the extractor was not checking temp_subsname as well as glob_subsname, and so was failing to apply the substrate name to child cells in "merge" statements in the extract file, causing the substrate to get disconnected between parent and child.
- posted: June 12, 2020 at 3:00am version: 8.3 revision: 24
Added a "bridge" operator to the set of operators used for CIF layer generation in the "cifoutput" section of the techfile. This operator solves the problems with the catecorner position of geometry when attempting to automatically close up gaps between islands of a layer.
- posted: June 11, 2020 at 3:00am version: 8.3 revision: 23
Update directed case for drcSurround in DRCtech.c
Updated DRCtech with fix by Fabian Cabrera to make the "surround ... directional" rule work correctly for types not on the same plane.
Also: Corrected the handling of the "defaultsideoverlap" statement so that it works for the first pair of types/plane being below the second pair of types/plane (upward fringing from the top of a wire to an overlapping wire above it), which was not being handled due to an implicit assumption that plane1 < plane2, which does not have to be the case.
- posted: June 6, 2020 at 3:00am version: 8.3 revision: 22
Corrected a problem with an uninitialized entry in ExtCurStyle that could cause serious errors on systems that do not auto-zero allocated memory. Also: Fixed an error introduced by a recent commit to allocate character memory for efReadLine() which frees the memory before reading a .res.ext file, causing a crash when using "ext2spice" with the "extresist on" option.
Reverted a change from a prior commit that removed backslashes in front of brackets in LEF names. These have a special meaning that is not yet handled correctly, but removing them is the wrong approach.
- posted: June 4, 2020 at 3:00am version: 8.3 revision: 21
Modified the EFread routine so that it will not infinite loop on a truncated line. There is still a question as to why an example occurred that caused a line to be truncated, and whether a buffer size needs to be made larger or made dynamically allocated.
Modified the efReadLine() routine so that it dynamically allocates memory for the input line instead of using a fixed 1024-character buffer. That avoids the issue of rare but possible overflow when reading a .ext file with unknown line lengths.
- posted: June 2, 2020 at 3:00am version: 8.3 revision: 20
Added two new features: (1) Default substrate name: Added an optional name field to the "substrate" line in the extract section of the techfile. This is the default name of the substrate if not connected to anything labeled. It may use a Tcl variable (preferred). (2) Added command option "instance orientation [-def]" that returns the orientation of the named or selected instance. The -def option returns the orientation using DEF naming convention; otherwise, the naming used with "getcell" is generated.
Additional modification to the devVisit routine in extflat to change from passing the HierName to passing the HierContext (of which HierName is a part) so that more information from HierContext (such as the cell use being visited) can be passed to the callback procedure (largely for diagnostic purposes).
- posted: May 30, 2020 at 3:00am version: 8.3 revision: 19
Corrected an out-of-order code block that can cause the USE statement to be printed twice for a pin during "lef write".
Corrected the readspice.tcl routine to correctly handle input without filename extensions.
Also: Added CDL to the types of file extensions checked by the readspice script.
Also: Correct readspice script to close the file after reading.
Also: Try again without confusing Tcl and python syntax. . .
Also: Additional change to readspice script to handle various issues with pins not matching between netlist and layout due to delimiter changes or case sensitivity.
Also: Making the "lef read" usage for annotation of an existing layout somewhat flexible with regard to pin name translations between the LEF and the layout.
Also: Added more behavior to "lef read" annotation to include handling bracket characters in the LEF file that are escaped with backslashes.
Also: Corrected a improperly placed call to freeMagic() from the last commit.
Also: Modified LEF read and write to preserve macro PROPERTY lines. This probably needs revisiting, because "lef write" and "lef writeall" need handling to generate the PROPERTYDEFINITIONS block for the PROPERTY entries to be correct.
Also: Added handling of PROPERTYDEFINITIONS block in LEF output based on properties in the cells.
Also: Corrected the type of hash key on the property definitions hash table in lefWrite.
Also: And one more hash key type needed to be changed in the other call to HashInit().
Also: And the corresponding pointer.
Also: One more fix. . .
Also: Added missing close-bracket in the readspice script, and corrected a diagnostic error output in the port command.
- posted: May 29, 2020 at 3:00am version: 8.3 revision: 18
Added a Tcl scripted command "readspice" that can be used to read SPICE subcircuit definitions from a netlist file and apply the port order in the netlist to the port labels in the corresponding cell or cells in the magic database. Also: Corrected an error in the bloat-all code introduced in a recent commit that can cause a segfault.
Additional correction to make the "port" command options "use", "class", and "index" operate on all ports with the same name.
Also: Moved the read-in of the readspice script from the wrapper to the startup file, since the script is not (and should not be) wrapper- dependent.
Also: Corrected several improper uses of StrDup() that used the first argument as a pointer but also set the same variable to the return value. This is ambiguous, because the behavior depends on whether the value being set upon return is the original value or the reallocated value. The result is system-dependent behavior.
Also: Fixing the same problem again. . . actual mechanism was slightly different than I expected.
Also: Added support for "PORT SHAPE" in LEF files.
- posted: May 28, 2020 at 3:00am version: 8.3 revision: 17
Corrected the expected position of top and bottom layers in a DEF VIA ENCLOSURE when doing "def read". Thanks to Ahmed Ghazy for finding the error and providing the patch.
Removing extra `$Header$`
- posted: May 27, 2020 at 3:00am version: 8.3 revision: 16
Modified the "bloat-all" cifoutput operator to allow operations on templayers. This permits some useful interactions like growing to the size of a bounding box, or abutment box, as well as many other possibilities. Also: Corrected the use of "cif see" for the boundary (abutment box) layer, which was not working because the "cif see" command uses a flattened CellDef that does not have the boundary property of the cell it was flattened from.
Modified lefWrite with the odd trick of adding a zero to prevent fprint from printing "negative zeros", which routinely happens in the ORIGIN output of LEF files with "lef write".
Also: Modified LEF and DEF writes to set VERSION to 5.7, as nothing in the output is known to be incompatible with LEF/DEF version 5.7.
Also: Corrected LEF annotation so that it does not try to change or any port indexes, or create duplicated port indexes.
Also: One additional place where the port number needed to be taken from the existing label on "lef read", where the port record is never read.
- posted: May 26, 2020 at 3:00am version: 8.3 revision: 15
Modified the LEF write routine so that it correctly handles contact layers (apart from the fact that contacts are output as magic's contact layer representation, and not as cuts; this still needs to be handled properly).
Corrected segfault condition when running "lef write" on a cell with split tiles (error caused by previous commit).
Also: Updated revision.
- posted: May 24, 2020 at 3:00am version: 8.3 revision: 14
Add Makefile target which strips all trailing whitespace.
Convert expanded $Id:XXXXX$ values back to placeholder $Id$
Also: Convert $Id$ placeholders to $Header$ placeholders.
Also: Remove all the $XXX: YYY$
Also: Committing changes
Also: LEF writer: Fix indenting.
Also: Updates from running the fix-ending-whitespace script.
Also: Changed the "feedback count" command to return the feedback count as a Tcl int object instead of printing out a text message, per the suggestion from Dan Moore.
Also: Corrected potential crash condition that can happen if there is one or more repeated "equiv" lines in a .ext file. This implies two ports with different names are connected, indicating probably a bad layout, but that's not a reason to have magic crash.
- posted: May 23, 2020 at 3:00am version: 8.3 revision: 13
One correction to yesterday's commit for "lef write" enhancements: If the last pin to be parsed generated no output, then the obstructions would generate no output as well.
Modified area accumulation routines to avoid double-counting contacts during "lef write".
Also: LEF writer: Use 6 decimal places of accuracy in output.
Also: LEF writer: Move formatting properties to #defines
Also: Remove trailing whitespace.
- posted: May 22, 2020 at 3:00am version: 8.3 revision: 12
Modified LEF read to give all labels the sticky flag so that they cannot be moved from the layer on which they are defined in the LEF file.
Enhanced the "lef write" routine: (1) Calculates gate and diff areas and writes ANTENNAGATEAREA and ANTENNADIFFAREA values. (2) Determines "USE POWER" or "USE GROUND" from label names matching Tcl variables $VDD and $GND, if the USE has not been registered as a cell property (knowning the use allows magic to avoid writing an ANTENNADIFFAREA for power rails, although doing so should not be an issue).
Also: Modified the LEF write routine so that it will not output ports that have no geometry (that do not exist on planes defined in LEF).
- posted: May 21, 2020 at 3:00am version: 8.3 revision: 11
Corrected error introduced a while ago, probably with the addition of cell name dereferencing on file loads, where the cell load subroutine call ended up with the wrong number of arguments, resulting in an invalid pointer and a crash condition.
- posted: May 19, 2020 at 3:00am version: 8.3 revision: 10
Corrected the cell delete routine to include removing any elements related to that cell (since elements are usually temporary and so kept in a separate list, not in the cell). Corrected a major error in the bplane implementation that failed to remove a cell use from the child def's parent list when deleting the use. Can cause magic to go into an infinite loop, especially after selecting and unselecting cells.
Updated revision so that new tarball will be posted with fix and commit from Saturday.
- posted: May 15, 2020 at 3:00am version: 8.3 revision: 9
Changed the handling of GDS reads so that if the cifinput option "ignore-unknown-layer-labels" is set, then error messages will not be displayed when labels in the GDS input are on unknown layers (this option is and has been otherwise handled correctly; the only issue is the generation of an error message on the output).
Added extension to "gds flatten" command option to change the limit of geometry primitives that triggers flattening (default 10).
- posted: May 13, 2020 at 3:00am version: 8.3 revision: 8
Modified GDS read output to avoid generating error messages on unrecognized layers when the "readonly" read option is set. Added support to scale elements (from the "element" command, such as the measurement text and arrows) when the grid scales, which was missing. Corrected the output of persistent elements in a .mag file so that they are correctly scaled by the scale reducer.
Added code to fail on the "cellname rename" command if the cell in question is a read-only cell.
- posted: May 11, 2020 at 3:00am version: 8.3 revision: 7
Corrected the LEF read routine so that it parses an ORIGIN line in a LEF macro that has parentheses around the coordinates. Weirdly, this is requires by the LEF/DEF spec, but is rarely if ever seen in actual LEF files. Go figure.
Corrected unfortunate typo from today's previous commit, and corrected a wrong typecasting that results in a compile warning.
- posted: May 9, 2020 at 3:00am version: 8.3 revision: 6
Corrected CalmaRdpt() routine to avoid crashing if the cd_client record is uninitialized when calling the rescale routine.
Corrected another similar bit of code causing a segfault. It is not known, though, why the flag is set indicating valid planes in the clientdata record when there in fact is none. That seems to be the underlying bug.
- posted: April 24, 2020 at 3:00am version: 8.3 revision: 5
Corrected CalmaWrite behavior to be as was intended for handling vendor GDS of abstract views, such that if the cellname being dumped is the same as the library name, then no prefix is added to subcells. This behavior may be changed in the future.
One modification to the last commit, such that if the cell is not marked as abstract yet has GDS_START but not GDS_END defined, magic will not crash by attempting to use the nonexistant value of GDS_END.
Also: Added a way to subvert the adding of a prefix to subcells of a dumped GDS library from an abstract view, by defining the property LEFview in the cell as "no_prefix" instead of "TRUE".
- posted: April 19, 2020 at 3:00am version: 8.3 revision: 4
Corrected typo in CmdCD.c for "count_total" when compiled without Tcl/Tk.
- posted: April 15, 2020 at 3:00am version: 8.3 revision: 3
Corrected error in the bplane implementation that accidentally called the undo record generation twice when transforming (move, copy, etc.) cell instances. This would cause the "undo" command to regenerate the old instance position in the bplane records, generally causing trouble down the road (did not encounter any fatal errors, but it can't be good).
Updated revision to 3.
- posted: April 10, 2020 at 3:00am version: 8.3 revision: 2
Removed a diagnostic debugging message from the antennacheck routine.
- posted: April 9, 2020 at 3:00am version: 8.3 revision: 1
Corrected bpDump to remove UnitsS2I(), replacing with scalefactor determined by CIFGetOutputScale().
Updated VERSION to trigger overnight tarball and mirror.
Also: Found and added another unused but missing subroutine from the bplane implementation.
- posted: April 8, 2020 at 12:00pm version: 8.3 revision: 0
Initial commit of version 8.3. The bplane branch was merged into the master branch.
- posted: April 2, 2020 at 3:00am version: 8.2 revision: 208
Corrected an error in lefWrite that should have avoided degenerate labels by expanding a zero area label rectangle, but then if "select chunk" returns nothing, it sets the area to the zero area label rectangle instead of the expanded one that it just created. This is the reason that "lef write" is producing pins with no geometry in the LEF file output.
Decided that "lef write -hide" should always use widespacing rules, because otherwise all pins will flag metal-to-obstruction spacing within the cell if the cell is wide enough that the obstruction layer satisfies the width requirement for the rule. It is too complicated to try to find specific places where the wide spacing might not be needed. Potentially this could be a problem for technologies that define a number of graded wide-spacing rules, as the largest-width rule is always used now by "lef write -hide", and the largest-width rule could theoretically allow enough space to route through, which would cause a short that cannot be detected. That would be a pathological case that may not show up in practice.
Also: Corrected "lef write" to add the SITE definition that it may have been preserving in the cell properties (which was inadvertently omitted).
- posted: April 1, 2020 at 3:00am version: 8.2 revision: 207
Changed mallocMagic() argument to size_t. However, this is probably not useful so long as Tcl_Alloc() has (unsigned int) for an argument. The more important investigation is probably to determine if there is a way to keep csa2_list from growing to absurdly large sizes on connectivity checks.
Updated VERSION with commit.
- posted: March 31, 2020 at 3:00am version: 8.2 revision: 206
Corrected LEF read routine so as not to truncate LEF "CLASS" to a single token (LEF CLASS records may have a subclass, such as "PAD INPUT").
- posted: March 29, 2020 at 3:00am version: 8.2 revision: 205
Modified line in DBconnect.c to cast csa2_size to type (size_t), as magic crashed when the conSrArea array exceeded the size of a 32-bit int during the antenna rule check. Should be good for another four orders of magnitude.
- posted: March 28, 2020 at 3:00am version: 8.2 revision: 204
Corrected problem with ResSimple where extresist was not handling non-manhattan geometry in device types.
Corrected bad reference to GDS_FILE property when it may not exist.
Also: Updated version with the last fix.
- posted: March 26, 2020 at 3:00am version: 8.2 revision: 203
Enhanced the "lef write -hide" command option to check for metal wide spacing rules; should result in LEF views that can import back into magic without DRC errors.
Modified lefWrite to ensure maximum spacing per all widespacing rules for any gap between a pin touching the cell boundary and the internal obstruction layer.
Also: Modified GDS read to assign the same port index to incoming port labels with the same text.
Also: Quick fix to last commit.
Also: Corrected uninitialized variable problem in lefWrite.
- posted: March 25, 2020 at 3:00am version: 8.2 revision: 202
Missed one instance of extFileOpen() in the implementation of the "extract do local" command option.
Updated VERSION to revision 202.
- posted: March 24, 2020 at 3:00am version: 8.2 revision: 201
Corrected the "save" ("writeall") command, which after the fixes of the last couple of days, was left in a state where it keeps appending ".mag" to the filename if "save" or "writeall" is executed more than once in the same edit session. Also, added ext2sim.sh and ext2spice.sh to the CLEANS list in tcltk, and added both to .gitignore so they are not tracked. Removed them from git to stop the current tracking.
Found that the "crash save" command in tools.tcl also disrupts redirected command-line entry from the layout window; fixed.
- posted: March 22, 2020 at 3:00am version: 8.2 revision: 200
Corrected the DEF read routine's ROWCOL parsing. It was not treated as an optional argument (which it is), and so defaults were not applied, potentially leading to the wrong number of rows/columns in a generated via if ROWCOL is not present in the DEF file.
Corrected a bad error from a few commits ago, probably 198, which can deallocate the cell name and causes all sorts of unexpected and unwanted behavior.
Also: One more change to add back the .mag extension when writing the file from the contents of def->cd_file.
Also: Added new command option "extract do local" to force all .ext files to be written to the local directory instead of the directory where the .mag file is located.
- posted: March 21, 2020 at 3:00am version: 8.2 revision: 199
Added a "move" command option "move origin" which will move the coordinate system origin to the specified (current) location. This is a much more efficient method than selecting everything in a layout and moving it, especially for very large layouts where selection and moving becomes prohibitive.
Corrected ext2spice for the case where a port has been given more than one name, because in that case one of the port records ends up with a null pointer to a node, and causes a crash condition. This can happen inadvertently, as when a connected node is not specifically designated a port, but is forced to be a port because of the connection.
Also: Corrected the "lef write -hide" method to keep a list of the areas of the pin port geometry and using those areas to create the spacing between them and the obstruction layer. Otherwise, the existing method used different databases (source vs. flattened) to find the pin area, and they did not always agree on the exact dimensions, leading to spacing errors within the LEF view.
- posted: March 20, 2020 at 3:00am version: 8.2 revision: 198
Corrected an error in which the "save" command attempts to overwrite an allocated Tcl argument, and can cause a crash for a filename of sufficient length.
Updated revision.
- posted: March 18, 2020 at 3:00am version: 8.2 revision: 197
Fixed a recent addition to the extraction method that prevents generating duplicate devices that may have parts overlaid in different subcells; this failed to filter the check by plane of the device, and so if any two devices exist at the same point in two different planes (e.g., metal resistor and a transistor), one of them would get eliminated.
- posted: March 15, 2020 at 3:00am version: 8.2 revision: 196
Corrected careless error from yesterday's commit that causes "gds read" to crash.
Updated version so critical fix will get into a new tarball.
Also: Substantially enhanced the "lef write" methods. This now preserves multiple ports; also, when using the "-hide" option, the obstruction area is computed from layer geometry, not from the bounding box. Still left to do: Ensure minimum width on pins, and remove slivers of obstruction that are below minimum width.
- posted: March 14, 2020 at 3:00am version: 8.2 revision: 195
Substantial improvements on several fronts, mostly to do with extraction: Fixed a problem causing long extraction times, at least some of which had to do with a poor string hash function implementation. Fixed a huge problem in ext2spice, where the node merge function was particularly poorly implemented, causing exponentially increasing processing times with layout size. Corrected a minor issue with ext2spice where arguments were improperly specified, causing unnecessary error messages to be issued. Fixed an error in the "load -dereference" command option, which again caused unnecessary error messages to be issued. Changed .gitignore to ignore Depend files, which are now regenerated on every build.
One more change to the extraction method to avoid extracting the substrate more than once for the same subcell, since the substrate extraction method scans the entire plane area; this was making large standard cell layouts extract very slowly, as every component cell was causing the substrate search to be repeated.
Also: Missed one place to flag the substrate extraction; fixed now.
Also: Updated revision to 195.
Also: Removed the Depend files, which were being tracked with .gitignore pointing to Depend instead of */Depend.
- posted: March 10, 2020 at 3:00am version: 8.2 revision: 194
Corrected an obscure error in GDS generation caused by an uninitialized variable, with the result that writing GDS would claim that it cannot scale down enough and that the output units are either wrong or the output style must have "units angstroms". Using angstrom units would solve the problem but did not treat the root of the problem.
- posted: March 7, 2020 at 3:00am version: 8.2 revision: 193
Modified the LEF read routine to use the via geometry manipulations from the cifoutput section, NOT the cifinput section. This change underscores the point that LEF and DEF formats define mask data, and therefore all LEF and DEF routines should be using the CIF input/output methods and layers. That is a major code change; meanwhile, getting via layer values from the cifoutput parameters is slightly more reliable than using cifinput, since there is good reason to use templayers to read vias, and that sort of indirection makes it difficult to determine a simple relationship between a LEF cut layer and a magic contact.
Updated VERSION along with the LEF/DEF input correction.
Also: Corrected the improper use of the variable DRCErrorTable twice, which results in conflicting hash tables and a crash, if a DRC section is reloaded when doing an error count.
- posted: March 6, 2020 at 3:00am version: 8.2 revision: 192
Modified the LEF VIAGEN reading such that it can accomodate a different order of layers than specified in the LEF/DEF spec. It is not clear whether this is common practice, or a bug in the tool that produced the DEF file that prompted this change. NOTE: The "grow" function applied in this case should be replaced by the actual GDS input rule sequence, that includes the grow and shrink merge. Otherwise, vias read from DEF files do not match the layout from those read from GDS, even though the mask layers represented by the layouts are the same.
Corrected the "lef writeall" command to add the "-hide" option, as is available for "lef write". This was inadvertently omitted.
Also: Implemented the "def read ... -labels" option, which labels each net with the name given to the net in the DEF file. Especially useful for LVS.
- posted: February 29, 2020 at 3:00am version: 8.2 revision: 190
Corrected lefTech.c not to issue a warning if defining a contact type as an obstruction; that should be perfectly acceptible.
- posted: February 27, 2020 at 3:00am version: 8.2 revision: 189
Changed the PNG bitmaps to GIF, because PNG is not supported in Tcl/Tk 8.5, which is still installed and considered current/stable on a lot of systems.
- posted: February 26, 2020 at 3:00am version: 8.2 revision: 188
Corrected the last commit for fixing the "drc count" command option, which had been changed a few months back to remove the individual cell count and only list the top level cell. The behavior has been changed a bit so that "list" returns values for the top level cell only, but "listall" returns a complete list. "drc list count total" gives the DRC count for the top cell, but "drc listall count total" gives the DRC count for everything (probably not very useful). Also: Implemented a behavior by request to automatically removed the (UNNAMED) cell whenever a new cell is loaded and the (UNNAMED) cell has not been modified.
Modified the handling of "why" strings in the DRC mechanism, so that DRC records contain an index into a string array instead of containing a copy of a string. This is preliminary to changing the way the DRC error plane is painted, so that the types painted will mark the error type. This will (1) allow "drc why" to simply scan the DRC error plane rather than running the DRC engine, (2) allow DRC errors to be counted by area rather than by tile, and (3) let the DRC count be the same whether done by "drc listall why" or "drc count".
- posted: February 25, 2020 at 3:00am version: 8.2 revision: 187
Reverted the "drc count" command to the way it was. There is more to be investigated here. I am no longer sure why I removed the cell search from DRC count, but it appears that the cell search is non-functional, and it should be determined why. There is no particular reason not to have a DRC count search. It could be implemented such that "list" vs. "listall" counts the top cell vs. all cells. First it must be determined why there are no subcell counts.
updated VERSION for the night (to be checked tomorrow---versioning, git, and the update script should all be working smoothly now).
- posted: February 24, 2020 at 5:34pm version: 8.2 revision: 186
Corrected Makefile to use -include instead of include on defs.mak so that "make distclean" works.
Manual VERSION update, checking regeneration of tarball build.
- posted: February 24, 2020 at 5:26pm version: 8.2 revision: 185
One more version update, checking fixes. . .
- posted: February 24, 2020 at 5:21pm version: 8.2 revision: 184
Forcing a version update.
- posted: January 30, 2020 at 3:00am version: 8.2 revision: 182
Implemented a new configuration variable "dist_prefix" for distributed installations, where the immediate installation location is different from the final installation location, but in the case where it is not desirable to put the entire install hierarchy as a subdirectory of DESTDIR.
Corrected missing references to the dist_dir install location in the top-level Makefile.
Also: Correction to the configuration for distributed install.
Also: Missed a number of Makefiles in directories two levels down.
- posted: January 25, 2020 at 3:00am version: 8.2 revision: 181
Corrected problem in "extresist" if a port is a label with the sticky flag set, and the type of the label does not correspond exactly to the type under the label (e.g., label defined on m1 but is on top of a contact).
- posted: January 19, 2020 at 3:00am version: 8.2 revision: 180
Corrected a missing argument from the call to DBFlagMismatches() that causes the recovery option (magic -r) to fail with a segfault (which is definitely not helpful for recovering lost work).
- posted: January 18, 2020 at 3:00am version: 8.2 revision: 179
Corrected the ifdef MAGIC_WRAPPER placement in the EFantenna.c file, which should have been only around the tclmagic.h include.
- posted: January 14, 2020 at 3:00am version: 8.2 revision: 178
Fixed typo
Resolved some issues with working with ext2spice using abstract views. Because the abstract view does not necessarily represent actual connectivity, rely on the port indexes in the .ext file to determine the number of ports and port order. Do not use SpiceNodeName() to look up the node name, or unique ports that are deemed shorted will go missing. Also: Modified the read-in of .ext files so that use names may contain backslashes. Only backslashes that end a line will be handled differently.
- posted: January 4, 2020 at 3:00am version: 8.2 revision: 177
Corrected the dereferencing code from the last commit, where the flag definition had been put in database.h instead of database.h.in, and so was deleted on "make clean". Also, corrected a problem that causes the cif output style to be lost when running DRC-CIF checks if the first output style is the DRC style.
- posted: January 3, 2020 at 3:00am version: 8.2 revision: 176
Corrected dereferencing of cell dependencies, which was being applied only at the time of running the command "load". But cells are generally loaded only on an as-needed basis, so the dereferencing option must be saved as a flag in the cell and honored whenever its subcells are expanded or otherwise read at a later time.
- posted: December 20, 2019 at 3:00am version: 8.2 revision: 175
Modified "lef writeall" to only generate output for the set of subcells that are direct children of the top level cell. The "-all" option was added to enable the previous behavior, although its usefulness is doubtful.
Apparently GDS format does not enforce the original string character limit of the Calma definition, and probably has not done so for ages. Nobody informed me of this. The restriction has been lifted from GDS input and output in Magic. It can be reinstated if necessary by setting a flag in the cifoutput section of the techfile, but it is likely that this will not be necessary unless there are other tools that enforce the limit and will not read a GDS file that exceeds it.
- posted: December 17, 2019 at 3:00am version: 8.2 revision: 174
Corrected ext2hier.c so that resistance output from extresist takes the right argument type (float, not int). Otherwise all resistances from extresist come out zero when doing "ext2spice extresist on" and "ext2spice hierarchy on". Also changed the format of the resistance in the SPICE output to type float, since values are in standard units of ohms, and rounding to the nearest ohm seems excessively coarse-grained.
- posted: December 15, 2019 at 3:00am version: 8.2 revision: 173
Corrected .mag file read-in so that it will not complain about a layout being redefined if one records the full path name and the other records the home directory tilde expression.
- posted: December 9, 2019 at 3:00am version: 8.2 revision: 172
Overhauled the extresist code (again), this time to (1) correct for a long-standing error (introduced with the "extresist geometry" option) that can cause nets not to be extracted (due to the first record not having extraction data, which was itself a long-standing error in the code but which was not fixed correctly); (2) handle "device mosfet" type transistors (previously only handled the old "fet" type extraction devices); and (3) correct for the res.ext file having a different scalefactor relative to the .ext file. The latter item was solved by forcing all input to scale like ExtCurStyle->exts_unitsPerLambda, locally correcting all input as needed. Note that extresist still needs to handle other extraction devices (e.g., resistors and capacitors) but those will require additional handling in the routines which analyze the current path to determine how to break up wires into paths.
- posted: December 3, 2019 at 3:00am version: 8.2 revision: 171
Added new CIF generation op "grow-min" that ensures a minimum width for a layer.
- posted: November 28, 2019 at 3:00am version: 8.2 revision: 170
Expanded the antenna rule violation setup and calculations to include (1) specification of sidewall or surface to use for each type individually, rather than a single method for all types, and (2) specification of a linear model R = Ax + B for the ratio limit when diodes are attached to the wire, where x is the diode surface area (unitless, as this is a ratio).
- posted: November 27, 2019 at 3:00am version: 8.2 revision: 169
Modified the behavior of the LEF read routine when used to annotate an existing cell. If the existing cell has labels but the labels are defined as point labels (no rectangle defined using specific layer-purpose pairs), then the LEF macro's port geometry will be used for the labels. Because the GDS file can define label sizes and fonts, which the LEF file cannot, but because the LEF file may define multiple rectangles per port, the original point label is given the first port rectangle from the LEF file, while the remainder of the labels in the LEF file generate new non-rendered labels in the cell.
- posted: November 26, 2019 at 3:00am version: 8.2 revision: 168
Corrected an error in the dual CIF style (output & drc) method where the output style is not set back to what it was before if there are no cif rules in the default DRC style.
Implemented new CIF operator "close", in the syntax "close ", which takes the existing generated CIF plane, finds all enclosed areas that have an area less than , and fills them in. This satisfies a minimum hole area rule in a way that is not possible with any of the existing CIF operators.
Also: Small correction on the last commit to avoid an integer overflow error on large areas (need type dlong to encode areas in internal units).
- posted: November 24, 2019 at 3:00am version: 8.2 revision: 167
Corrected a problem from the last commit that causes error messages in the toolkit Tk window when any parameter is modified, due do the use of a variable before its being defined in the dialog update.
- posted: November 22, 2019 at 3:00am version: 8.2 revision: 166
Modified the toolkit to take a selectlist with the special variable name "gencell" and use that to create a selection that can change between (compatible or somewhat compatible) device types.
- posted: November 21, 2019 at 3:00am version: 8.2 revision: 165
Added indexed selection to the PDK toolkit script (returns an index from a selection, which can then be used to index into other lists. This lets one selection be made on a list of arbitrary names, and then additional parameters can be linked together with the same index). Also, implemented (finally!) the "offset" parameters of the "slots" function (as advertised in the documentation).
Created an additional argument "start" to the "slots" operator, which adds an offset value of "start" to both X and Y from the lower left corner of the fill area. This allows the use of the "offset" (from the previous git commit) to be declared on different layers without creating an exact overlap, as is often required by foundries for fill patterns.
- posted: November 20, 2019 at 3:00am version: 8.2 revision: 164
Changed extraction to avoid generating an error message for devices like resistors where a tile other than space may border the resistor device on its non-terminal sides (which is handled correctly, and should not be considered an error).
- posted: November 18, 2019 at 3:00am version: 8.2 revision: 163
Additional correction to extraction, still part of the effort to remove redundant ports. A comment that I left in the code at the last commit asked if it was necessary to call efAddNodes and efAddConns recursively. An example came up in which the answer is apparently "yes". These routines have been replaced by efFlatNodes(), which appears to solve the problem. There is now a question of whether efFlatNodesDeviceless() does anything, and should its main behavior (to flag deviceless subcircuits) be folded into efFlatNodes.
- posted: November 16, 2019 at 3:00am version: 8.2 revision: 162
Added a "DRC manager" window option. This allows DRC errors to be categorized by error type and scrolled through conveniently. However, it needs work dealing with finding the actual error bounds. The "DRC count" counts tiles, which is tile-plane-geometry-specific, and "DRC listall why" fractures errors both over tiles and over the square areas that the interactive DRC splits the layout into, for performance. The DRC error plane needs to be changed to hold different types for each error class, so that errors can be scanned by boundary instead of by tile (work to be done).
- posted: November 15, 2019 at 3:00am version: 8.2 revision: 161
Corrected an error in ext2spice related to the recent modification to get rid of redundant port entries in subcircuits. There is still an outstanding issue as to whether nodes and connections need to be recursively iterated to the hierarchy bottom. The current fix corrected the test case. Also, added a "-dereference" option to the "load" command to revert to the original behavior of using only search paths from "addpath" when searching for files to load.
- posted: November 14, 2019 at 3:00am version: 8.2 revision: 160
Corrected an error in ext2spice caused by recent changes, that can generate an extra node in the extract output that comes out as a "(none)" node in the SPICE netlist from ext2spice.
Corrected an error introduced with the extension of extraction methods to multiple entries per device; the resistor length and width calculating routine lost a break statement and would go into an infinite loop for resistors with bends in them.
Also: Modified "lef write" so that if a cell has a bounding box declared by FIXED_BBOX derived from GDS and the new "boundary" cif input rule, then the bbox property values take precedence over the extent-of-geometry bounding box.
- posted: November 13, 2019 at 3:00am version: 8.2 revision: 159
Added code to avoid a problem with "lef write" when a sticky label is placed over multiple types. This causes SelectChunk() to fail and the pin will have no geometry output in the LEF file. To avoid this, the area of the label is always painted into the select cell so that if SelectChunk() fails, the label area still exists with the label tile type.
- posted: November 12, 2019 at 3:00am version: 8.2 revision: 158
Corrected an apparently long-standing error with the triggered rules (such as widespacing or directional surround) that will cause the rule to be triggered without a cause due to a failure to reset the error count from a previous triggered rule (the condition of failure is much more rare than this explanation makes it sound, which is why it went undiscovered for so long).
- posted: November 2, 2019 at 3:00am version: 8.2 revision: 157
Corrected an erroneous scalefactor used when reading geometry attached to a label in a GDS input file; the scalefactor that was being used is reset at the beginning of a GDS read, and so becomes invalid after a database rescaling, resulting in improperly scaled label geometry if "gds read" is used more than once.
Corrected a long-standing error in the "widespacing" rule implementation that was intended to avoid computing maxwidth more than necessary, but ended up causing the widespacing rule to not be checked in certain situations.
Also: Corrected problem that can cause magic to crash on a "lef read" command due to an uninitialized variable.
- posted: November 1, 2019 at 3:00am version: 8.2 revision: 156
Corrected one error in the recent fix for port enumeration in ext2spice (hierarchy on), where the port index was not checked for value -1 (no port) before indexing into the port list.
- posted: October 30, 2019 at 3:00am version: 8.2 revision: 155
Made some changes to the way that ext2spice generates subcircuit ports, to avoid creating ports for node names that are redundant. It would probably be better to avoid creating the redundant node names in the first place; however, I am less certain why these are generated. The incorrect additional ports all have hierarchical names in the cell, which is a sign that they are incorrect, as the cell itself should not have any parents. The level of certainty about this fix is definitely not 100%, but it was tested on a hierarchical analog design, and setting levels of parasitic caps caused new nodes to appear in subcircuits and in no cases did information appear to be lost.
Again revisited the problem of duplicate nodes. This time, I think I understand the problem, which is that nodes are ordered according to precedence of EFHNBest() within a circuit, but there is no concept of ordering between circuits. So ports end up listing nodes in arbitrary order, and the only way to resolve the order is to use EFHNBest() as is done within a subcircuit. Appears to work for different edge cases tested.
- posted: October 29, 2019 at 3:00am version: 8.2 revision: 154
More corrections to extresist, which now appears to work if used with ext2spice without the hierarchy option. More work needed to produce correct hierarchical output and to support extraction devices other than the old "fet" record.
- posted: October 26, 2019 at 3:00am version: 8.2 revision: 153
Modified the check for redundant label indexes in lefWrite so that it only complains about (i.e., issues an error message) ports with the same index but different text, indicating a read port number collision and a true error.
- posted: October 25, 2019 at 3:00am version: 8.2 revision: 152
Corrected routine lefFileOpen() so that it will read files with extensions other than specifically ".lef" or ".def" (such as ".tlef" for technology LEF, recently encountered).
- posted: October 24, 2019 at 3:00am version: 8.2 revision: 151
Fixed a long-standing error in which "ext2spice merge" fails when used with "ext2spice hierarchy on" because the device index is not reset between calls to output cells in the hierarchy, leading to a mismatch of the index for all cells after the first one output.
Corrected an error that prevented the "load" command from working with the simultaneous use of "scaled" and one of the options "-force" or "-nowindow", due to the use of a wrong index value.
Also: Realizing that the "no such node" messages were directly related to the below-threshold coupling caps being removed from the hierarchy, added code to suppress the error message when it is clearly related to a below-threshold cap that has been removed.
- posted: October 21, 2019 at 3:00am version: 8.2 revision: 150
Finished first cut at an implementation of antenna rule violation checks. Added new command "antennacheck" and a routine that adds feedback entries where violations are found. Extended the syntax of the extraction section of the techfile to support the antenna ratios and antenna calculation methods.
- posted: October 19, 2019 at 3:00am version: 8.2 revision: 149
Corrected error causing a crash when parasitic extraction is invoked on a layout with an array of instances. Also, continued implementation of antenna violation checking (not done yet).
Fixed an additional call to HashFind() that should have been HashLookOnly() and can potentially cause a crash.
- posted: October 18, 2019 at 3:00am version: 8.2 revision: 148
Preliminary changes to support extraction devices other than the original simple FET device in extresist. Also: Extended the bloat-all CIF operator again, allowing the trigger layer for the bloat operation to include both CIF layers and magic layers (previously only magic layers were supported). This extension is possible due to the previous extension allowing the trigger layer and bloating layers to be on separate planes. This operator extension is useful for tagging geometry that is in the proximity of, but not overlapping, geometry on another plane.
- posted: October 17, 2019 at 3:00am version: 8.2 revision: 147
Corrected EFArgs() so that "ext2spice run -help" works as advertised; e.g., "-h" or "-help" is now recognized as a valid option instead of printing a usage message by way of throwing an error.
Removed an error message from DRCcif.c; otherwise it raises an error whenever there are no DRC-CIF rules in the techfile. The same error will be raised anyway when reading the techfile if DRC-CIF rules are declared without a style being specified.
Also: Corrected missing NULL initializer for device substrate name, which can result in a segfault when reloading a techfile.
Also: Corrected a mistake with the extension of the bloat-all CIF operator that broke the operator for the usual case of all types in the same plane.
- posted: October 16, 2019 at 3:00am version: 8.2 revision: 146
Corrected node reading from extresist because the ".nodes" file does not have any scaling in the dimensions and so values should not be divided by the factor lambda from the .sim file "units" line.
Another correction to fix the tile type for port drivers in extresist, as the tile type was being set to a transistor gate type and not the type of the port.
Also: Finally got around to undoing an annoyance caused by the wholesale reduction of memory and startup time, which was to maintain only one CIF style in memory. The new method is just to read in and keep the DRC CIF style separately from the output CIF style. Because the CIF sections of the techfile are read before the DRC sections, and the CIF DRC style is declared in the DRC section, the CIF DRC style is read in on the fly during the first DRC checking.
Also: Fixed the value of property FIXED_BBOX when saving a file; it needs to be scaled down by "reducer" like all other values in the cell. Suggests a need to have property types other than string, so that a property type "rect" or "box" can be declared that is saved as a Rect and always scales without special hack handling of the specific string FIXED_BBOX. . .
- posted: October 15, 2019 at 3:00am version: 8.2 revision: 145
Modified the new extraction method with multiple records for each device type so that it is now properly backwards compatible with the old-style "fet" records. Also corrected the record matching such that it properly matches according to the number of terminals while allowing the traditional interpretation that there may be fewer S/D type records than terminals if the S/D types are the same for all terminals.
Corrected another problem where the device source/drain area and perimeter were not output because of recent code that broke the routine that assigns the resistance classes to devices. This is now fixed. Thanks to Dan Moore for bringing this to my attention, and debugging investigations.
Also: Corrected problem in which using "ext2spice -d" (distributed junctions) causes magic to crash.
Also: Corrected errors preventing extresist from working properly with hierarchical cells (namely a scaling issue with .sim file units). More can be done to make the extresist command more user friendly, but at least port connections as drivers appears to work.
Also: Added substitution for commas in SPICE output, because commas in instance names and node names are basically fatal to running ngspice.
- posted: October 3, 2019 at 3:00am version: 8.2 revision: 144
Made a correction to the last commit as the wrong hash search function was used (HashFind, which never returns NULL, vs. HashLookOnly, which does) resulting in a failure to solve the problem which was being patched, which was ext2spice crashing when cell arrays are present, which itself was due to allowing brackets in base cell use names.
- posted: October 2, 2019 at 3:00am version: 8.2 revision: 143
Corrected method relating to use of array notation in the base use name (not part of an array in magic). This was failing in ext2spice due to code in extflat dealing incorrectly with the array delimiters. The correction fixes the problem but leaves the possibility that there could be a conflict between a use name that is an array and a use name that has the array index as part of the name.
- posted: September 20, 2019 at 3:00am version: 8.2 revision: 142
Corrected a bad error from a previous commit (5 days ago, for fixing the forward-referenced GDS cell problem) in which when writing cells from 3rd-party GDS, the structure names are written to GDS with the indicator flag in front, making the structure names and the referenced names different, so that the GDS file is no longer valid. This has been fixed.
Corrected drcAssign for use with CIF drc rules, where the check for plane is not relevant and can generate false-positive error messages (although no actual errors occur).
- posted: September 19, 2019 at 3:00am version: 8.2 revision: 141
Corrected an error that causes alias names for layers to become the principle layer name, which should not happen (especially in the case of space, where layers may be aliased to "space" to make them ignored on input). Also: Implemented a "-" option to the "substrate" record in the techfile to declare types which shield layers from the substrate. This allows types like pwell to be used in different contexts, e.g., as part of the substrate, or as a P-well in deep N-well, without requiring a different type. This works in conjunction with the recently-implemented "+ " ID types for devices. All of this may seem unnecessary but helps to reduce the number of layers needing to be defined, and the subsequent complexity of the DRC rulesets.
- posted: September 14, 2019 at 3:00am version: 8.2 revision: 140
Corrected an error in the GDS compositing that fails to handle GDS files that have forward references (cells that are instanced before they are defined), resulting in those cells being given an undefined string for a prefix, which will result in corrupted GDS output. Also added a method to prevent forward-referenced cells from triggering a "redundantly defined" error message when the structure is output.
- posted: September 4, 2019 at 3:00am version: 8.2 revision: 139
Corrected error where modification to allow use of brackets inside a cell instance name not related to an array moved a variable that was used later in the routine to the inside of an if block, effectively making that variable undefined in most cases.
- posted: August 25, 2019 at 3:00am version: 8.2 revision: 138
Hopefully final correction to new extraction method. Now correctly handles diodes or other devices with source/drain on planes other than the plane of the device type. This no longer requires that the non-connecting type be in any given terminal position. The device type boundary is surveyed for all types, connecting or overlapping, and at least one of each required type must be present.
- posted: August 24, 2019 at 3:00am version: 8.2 revision: 137
Minor correction to device extraction using the new device structure format with multiple devices per magic tile type. The code was left incompatible with diodes defined with one terminal as substrate (and therefore no source/drain-like types connecting to the device type). This has been fixed.
- posted: August 21, 2019 at 3:00am version: 8.2 revision: 136
Revised the substrate extraction method: Instead of searching on all types specified in the "substrate" statement, split such types into those on the declared well plane, and everything else. Any types on the well plane are searched as before. Types not on the well plane (e.g., psd on active) are searched and added to the substrate node *only* if overlapping nothing on the well plane. This allows a type such as "psd" to be used on, e.g., both space (substrate) and deep pwell, but only be extracted as part of the substrate when found over space. Note that if there is NO implicit substrate, the substrate connections will always be found through the usual connection rules.
Since allowing brackets to be part of cell names in a previous commit, found that DBTreeFindUse fails to find such uses because it strips the array delimiters off the name. Fixed the routine although the routine really should be checking if the use is a 1- or 2- dimensional array and stripping off only the components expected. The current code will probably fail for cell uses that have brackets in the name AND are arrayed. Fortunately this search routine does not appear to be used frequently or in any critical database functions like netlisting.
Also: Corrected check on cd_client in CalmaRdcl; if not set for holding GDS plane data, it is initialized to CLIENTDEFAULT, not NULL.
Also: Corrected one other instance of checking for NULL when it should have checked for CLIENTDEFAULT.
Also: Finally realized the problem came from a quick addition of a TO-DO item that was never properly validated. Corrected the root of the problem, which was an attempt to deallocate memory that had never been allocated in the first place.
- posted: August 20, 2019 at 3:00am version: 8.2 revision: 135
Revised the method for multiple extraction models per device type to be more robust and not depend on the ordering of the devices in the techfile. The extraction method now keeps a mask of which properties of the device (source/drain types, substrate type, identifier type) have been found, and will look only for device records that match what is known about the device. Added a device identifier record which is the last record before parameters if the record begins with "+". This allows marker layers to be placed over a device such that it will extract with a different type. This helps reduce the complexity of the techfile and allows certain specialized devices like RF or ESD to be identified without a separate layer type for the device.
- posted: August 10, 2019 at 3:00am version: 8.2 revision: 134
Copied the text of the BSD copyright in the C source code into its own file, to be consistent with most other software these days.
- posted: August 4, 2019 at 3:00am version: 8.2 revision: 133
Added FreeBSD detail to INSTALL
Edited configure scripts for FreeBSD installation
Also: Updated outdated files in utils/magsgtty.h
Also: Removed files in .gitignore from repo
- posted: August 3, 2019 at 3:00am version: 8.2 revision: 132
Removed a badly implemented double-loop from the timestamp mismatch code.
Removed diagnostic print from last commit.
- posted: July 30, 2019 at 3:00am version: 8.2 revision: 131
Corrected the handling of UNPLACED components in a DEF file, which was previously (and erroneously) lumped with PLACED and FIXED which take a position argument afterward. Note that this fix allows the DEF file to be read without error but does not have the (presumably desired) behavior of parsing SITE information from the LEF file and ROWS information from the DEF file and giving each unplaced component an arbitrary but legal position. That would require a significant amount of additional coding work.
- posted: July 26, 2019 at 3:00am version: 8.2 revision: 130
Changed a recent commit which removed brackets from instance names while reading DEF. To preserve names as much as possible, such names are now kept. To avoid problems, EFbuild.c and ext2hier behavior has been changed to only parse entries in a .ext file as instance arrays if the array notation follows the specific syntax of [ax:bx:cx][ay:by:cy], letting all other uses of brackets pass through unaffected.
Corrected CalmaError() to CalmaReadError() in cif/CIFrdcl.c. Thanks to Toby Schaffer for the bug report and patch!
- posted: July 25, 2019 at 3:00am version: 8.2 revision: 129
Removed the rule for building database.h from rules.mak and instead created a dependency on database.h for compiling any source file. This should (I hope) avoid conflicts when running "make" with the "-j" option for parallel compilation.
- posted: July 24, 2019 at 3:00am version: 8.2 revision: 128
Changed two output lines in the LEF read subroutine to conform to the standard message/warning/error method.
Cleaned up an inconsistency with GDS read-in that generates informational output that references a (non-existing) CIF file.
- posted: July 20, 2019 at 3:00am version: 8.2 revision: 127
Modified DEF reads to avoid instance names with brackets. Not sure if this is the best policy. The brackets should be okay but interfere with ext2spice when it reads them from the .ext file and decides that they refer to arrays. May be a better way to handle this.
- posted: July 18, 2019 at 3:00am version: 8.2 revision: 126
Added a missing include for utils/utils.h which has the function prototype for StrDup(). Otherwise, use of StrDup() in the LEF read routine can cause an inscrutible crash.
- posted: July 17, 2019 at 3:00am version: 8.2 revision: 125
Added missing handling of text in GDS input with PRESENTATION followed by WIDTH (previously it assumed that PRESENTATION and WIDTH were mutually exclusive).
Added the capability to read a value from a WIDTH entry for text. Still not sure how it is supposed to be used, exactly. Used it to set a default text size in case a MAG value is missing.
Also: Modified the GDS read routine to account for use of WIDTH in a text record without a MAG in the PRESENTATION record to override it.
- posted: July 15, 2019 at 3:00am version: 8.2 revision: 124
Corrected the dependency list in the Makefile for "modules", which should depend on database/database.h; otherwise running distributed make can start compiling modules before the database.h file is created.
- posted: July 9, 2019 at 3:00am version: 8.2 revision: 123
Corrected the generation of bounding box positions from a GDS boundary layer, which was being saved in GDS coordinates, not magic database coordinates.
- posted: July 5, 2019 at 3:00am version: 8.2 revision: 122
Added a number of enhancements to the DEF reading to handle various forms of syntax found in the LEF/DEF spec up to version 5.8. Handles vias formed by parameter and a number of syntax variations that mess up the usual parsing. Corrected an error in the calculation of wire extensions when wires are given with three coordinates.
One minor correction to the creation of generated vias in defRead.c.
Also: Was missing needed expansion of via cut sizes to match magic's internal definition of via areas, when reading parameterized vias from a DEF file.
Also: Corrected error in generated vias (set top layer type on bottom, so bottom layer went missing).
Also: One last problem fixed, as RECT entries in nets are relative, not absolute.
- posted: July 3, 2019 at 3:00am version: 8.2 revision: 121
Corrected the argument passing from the top-level wrapper for configure script to the actual configure script.
Added the handling of SHAPE statements in NET records in the DEF file read routine.
- posted: June 8, 2019 at 3:00am version: 8.2 revision: 120
Cleanup of a number of uninitialized variable issues flagged by the compiler. Some are obscure functions (plot verstatec hasn't been used in years) but others (like SPICE distributed junctions) are potentially significant sources of unexpected crashes on systems that don't zero uninitialized memory.
Corrected a few additional uninitialized variable situations that had been shadowed by the previous set of fixes.
Also: One last correction, as I accidentally dropped two calls to getCurDevMult() inside spcHierWriteParams(), where it was being passed as an argument, therefore making a redundant call and wasting compute cycles.
- posted: June 7, 2019 at 3:00am version: 8.2 revision: 119
Corrected an error in the LEF/DEF geometry reading, because I discovered that not all LEF/DEF rectangle coordinates are in canonical order. Took the opportunity to update the LefError() routine with an additional argument so that it can separate errors, warnings, and informational messages, and will correctly state whether the output is for a LEF or DEF read operation.
Changed the size of argv[] in efReadLine() to be 128 instead of 64 because I overran the 64 array with too many resistclasses in a techfile. This really should be dynamically allocated; this requires parsing the line to count tokens and reallocating as needed (to be done).
- posted: June 6, 2019 at 3:00am version: 8.2 revision: 118
Enhancements to cifinput and cifoutput in the tech file: Added option "labels ... cellid" to handle some vendor files where apparently to get around the 30-character cell name limit, the actual cellname is encoded on a text layer. Added new cifop "boundary" (no arguments) for cases where a cell abutment box is encoded on a GDS layer; this now translates the bounding box to the FIXED_BBOX property, as is done with the LEF bounding box. Also corrected the property set function to free existing property value allocated memory when overwriting a property with a new value.
Modified the cell clear routine so that it removes properties in addition to subcells, paint, and labels. Otherwise problems arise if a cell is read from LEF followed by GDS; the GDS view overwrites the LEF but the property "LEFview" remains and causes problems when writing GDS output subsequently.
Also: Corrected the LEF read routine so that when LEF is read to annotate an existing GDS file, the "LEFview" property is not set (i.e., it should not be marked as an abstract view because it is still a GDS view).
- posted: June 5, 2019 at 3:00am version: 8.2 revision: 117
Modified the techfile "wiring" section to allow a scalefactor with the same interpretation as the scalefactor for the DRC section: Values in the section are interpreted as lambda divided by the scalefactor. That allows the wiring values to be real units such as nanometers and avoid problems with fractional lambda values.
Additional corrections to the wiring for some code changes that were made where contacts are placed when shifting up on metal layer but not made for the reverse case. Also corrected one inconsistency with non-minimum width wires.
Also: Fixed the "writeall force" command, which was behaving exactly the same as "writeall", meaning that "force" was not being honored and only cells that were modified were being written, in either case.
- posted: May 29, 2019 at 3:00am version: 8.2 revision: 116
Modified the "def write" routine to strip any path component off of a cell name (although cell names are not supposed to have path components, so need to find out where they came from. . .).
- posted: May 23, 2019 at 3:00am version: 8.2 revision: 115
Corrected a badly-implemented search for electrical connectivity through labels with the same text (particularly necessary for abstract views, since the real connectivity may not be represented). The original implementation could generate very deep subroutine call stacks and lead to stack overflow. The new implementation performs the same check but without the deep nesting.
Corrected an error in the GDS read routine which attempts to kill a hash table that was never initialized, if the GDS file input reader encounters an error in the GDS data.
Also: Added information to the GDS read routine error output to indicate the byte position of the error.
Also: Corrected a problem in CalmaWrite where a cell that was defined redundantly was flagged, and output anyway, but the cellname was not being written to the output, resulting in a bad GDS file.
Also: Additional change to CalmaWrite: when handling cellnames with lengths exceeding the maximum GDS name length (32 characters), truncate by removing all but the last 32 characters, instead of the previous behavior which was to remove all but the first 32 characters. The last 32 characters are far more likely to be unique than the first 32, given that the usual reason for extra- long names is the concatentation of hierarchical names.
- posted: May 17, 2019 at 3:00am version: 8.2 revision: 114
Corrected the wiring command (adjustment to recent change for centering wires on grid lines when using a snap grid) so that the wire width is maintained when switching from one layer to another, when the wire width is larger than the minimum for the route layer.
Corrected an error that has been in the magic code forever, in which if a GDS (CIF) layer is dependent on, and only on, a templayer or layers that get hierarchically processed, it will not get added to the list of layers needing hierarchical processing, and therefore end up not being generated in the output.
- posted: May 12, 2019 at 3:00am version: 8.2 revision: 113
Modified "def write" to prevent out-of-bounds array access when writing vias. However, the underlying problem, which is that stacked vias are not decomposed into their constituent parts, has not been addressed. A "-units" option was added to the "def write" command to force the units of the output file to be different than the default of 1000 (nanometers). No checks are made for whether values can be accurately represented at the specified scale.
- posted: May 7, 2019 at 3:00am version: 8.2 revision: 112
Updated the handling of fixed bounding boxes for abstract views (once corrected in an experimental branch but never merged). This avoids changing the actual bounding box of the cell to match the LEF bounding box, but defines a property instead and uses that property for certain functions such as displaying the bounding box outline or selecting the cell. This avoids certain related errors such as the failure to extract connections to areas outside of the fixed bounding box.
- posted: May 4, 2019 at 3:00am version: 8.2 revision: 111
ocd_git_pure automatic update to repo
Modified the way magic does wiring so that when working on a grid, the wires stay centered on a centerline with respect to each other. Also corrected the long-standing minor issue that the outline drawing of the wire does not update when using the mouse scroll wheel, making it unclear that the wire size has changed until the wire position changes.
Also: Extended the wiring section definition to add wire extensions in addition to wire overlaps, and added a method when painting contacts to draw the necessary wire extension past the contact. Since the wiring method draws single contacts by default, this wiring method assumes a change in direction between layers. But the main point is to generate wire contacts without DRC errors.
Also: Corrected command option "select [more|less] cell", which was not recognizing the more|less option and therefore failing to search for the instance , rendering the command non-functional.
Also: Extended the "port" command to operate on labels in non-edit cells as long as the command is not attempting to modify the port. Attempts to modify ports in non-edit cells result in an error message that is more helpful than the previous "Exactly one label must be present..." text.
- posted: April 11, 2019 at 3:00am version: 8.2 revision: 110
ocd_git_pure automatic update to repo
- posted: April 10, 2019 at 3:00am version: 8.2 revision: 109
ocd_git_pure automatic update to repo
- posted: April 9, 2019 at 3:00am version: 8.2 revision: 108
ocd_git_pure automatic update to repo
- posted: April 8, 2019 at 3:00am version: 8.2 revision: 107
ocd_git_pure automatic update to repo
- posted: April 7, 2019 at 3:00am version: 8.2 revision: 106
ocd_git_pure automatic update to repo
- posted: April 6, 2019 at 3:00am version: 8.2 revision: 105
ocd_git_pure automatic update to repo
- posted: April 5, 2019 at 3:00am version: 8.2 revision: 104
ocd_git_pure automatic update to repo
- posted: April 2, 2019 at 3:00am version: 8.2 revision: 103
Extended the "lef read" command when used to annotate existing cells so that PIN information including USE and CLASS are added to port labels (previously only the bounding box was annotated).
Corrected errors in LEF output syntax (missing semicolons at statement ends on properties imported from a LEF file). Never noticed before because writing LEF after reading LEF was unusual.
- posted: March 26, 2019 at 3:00am version: 8.2 revision: 102
Update at Wed Mar 20 10:09:07 EDT 2019 by tim
Fixed an error in the previous commit handling pin labels in GDS input, which failed to update the "lastLabel" record of the cell in the case that the placeholder label being deleted was the last label, leading to labels being lost during GDS input.
- posted: March 21, 2019 at 3:00am version: 8.2 revision: 102
Update at Wed Mar 20 10:09:07 EDT 2019 by tim
Fixed an error in the previous commit handling pin labels in GDS input, which failed to update the "lastLabel" record of the cell in the case that the placeholder label being deleted was the last label, leading to labels being lost during GDS input.
- posted: March 20, 2019 at 3:00am version: 8.2 revision: 101
Update at Tue Mar 19 22:29:29 EDT 2019 by tim
Corrected scaling of label rectangles in GDS (that is, GDS layer types that have been specified as being ports or text), since the labels are in the magic database and at a different scale. Added code to cope with the fact that the labels may come after the definition of the rectangle, so a rectangle identified as a port or text label will generate an empty placeholder label, and all new labels are checked against any empty labels in the database to see if they are bounded by them. If so, then the empty label is removed and the label point is replaced by the rectangle. This is a ridiculously round-about way to deal with an under-specified file format. . .
- posted: March 13, 2019 at 3:00am version: 8.2 revision: 100
Update at Tue Mar 12 13:31:32 EDT 2019 by tim
Added a "plot svg" command that, when used in conjuction with the Cairo graphics package (magic -d XR), will map the display onto an SVG surface and save it to a file using the Cairo SVG backend. Due to the simplicity of the mapping, there are no options to this plot command; it just creates a file that is a (scalable!) replica of the layout window.
- posted: February 19, 2019 at 3:00am version: 8.2 revision: 99
Update at Mon Feb 18 10:01:58 EST 2019 by tim
Corrected a potential problem with the substrate finding search, which can be given an invalid area for the search.
- posted: February 15, 2019 at 3:00am version: 8.2 revision: 98
Update at Thu Feb 14 12:21:56 EST 2019 by tim
Added code to avoid mishandling negative layer numbers when a label in a DEF file is on a layer that has not been properly mapped to a magic layer. This would apply a negative index to a TileType bitmask and crash the program. Also: Changed the style and colormap slightly to make the via2 and via4 styles more visible.
- posted: February 10, 2019 at 3:00am version: 8.2 revision: 97
Update at Sat Feb 9 17:05:48 EST 2019 by tim
Modified the label connect function so that it only copies connected labels if they are in the top-level cell of the connection search. Otherwise, this slows the connection search way down for nets with lots of internal labels, and can also have potentially bad consequences if, for example, the connected network is copied to another position, and carries all the flattened and non-hierarchically-named labels with it.
- posted: February 8, 2019 at 3:00am version: 8.2 revision: 96
Update at Thu Feb 7 10:56:32 EST 2019 by tim
Found an additional scaling-up problem in ext2spice (previously handled a scaling issue in extract) which was caused by the addition of hierarchical netlist generation. Finding hierarchical connections requires finding instances by name, so it is vastly better to create a hash table of instances instead of a linked list.
- posted: February 7, 2019 at 3:00am version: 8.2 revision: 95
Update at Wed Feb 6 11:09:52 EST 2019 by tim
Corrected error that potentially causes a segfault in "lef write" when accessing the inverse layer map array beyond its defined allocated limit of DBNumUserLayers.
- posted: February 1, 2019 at 3:00am version: 8.2 revision: 94
Update at Thu Jan 31 11:00:23 EST 2019 by tim
Modified the behavior of label handling in GDS input so that a label specified as having type "space" automatically overrides the "no-reconnect-labels" flag. Modified the behavior of the label reconnect algorithm so that it searches by plane order so that material on the highest plane that matches the reconnection criteria is chosen over similar materials on lower planes.
- posted: January 31, 2019 at 3:00am version: 8.2 revision: 93
Update at Wed Jan 30 17:18:49 EST 2019 by tim
Corrected an apparently long-standing (but relatively obscure) error where devices extracted as "device resistor" or "device capacitor" and defining parameters (e.g., area, perimeter) will generate the device arguments in the wrong order in the .ext file, resulting in incorrect readback when attempting to do ext2spice, resulting in the device being omitted from the resulting netlist.
- posted: January 30, 2019 at 3:00am version: 8.2 revision: 92
Update at Tue Jan 29 16:46:38 EST 2019 by tim
Found an error that causes the worst of the problem in long extraction times, which is an incorrect units conversion of the "step" parameter in the extract section. It was converting based on the "lambda" parameter in the same section, which has to do with the scaling of values in the output file, not the scale factor of the database to be extracted, which is set by the current CIF output scale. Once fixed, extraction times are minimized using the rule of thumb mentioned in the techfile reference, which is 50 times the minimum feature size. Also: Give the lengthy nature of extraction on large designs no matter how well optimized, added a feature to mark the progress of the extraction in increments of 5%. Does not output progress for small cells that extract quickly.
- posted: January 29, 2019 at 3:00am version: 8.2 revision: 91
Update at Mon Jan 28 22:39:04 EST 2019 by tim
Corrected a problem that can cause super-long run times for extraction. The plane mask array that denotes for each type which planes should be searched for connecting types is supposed to be a rare case that covers situations where planes connect by types that are not contacts. Instead, many planes were in this array, causing the worst-case extraction methods to be run constantly.
- posted: January 2, 2019 at 3:00am version: 8.2 revision: 90
Update at Tue Jan 1 20:40:47 EST 2019 by tim
Added same correction as made to version 8.1 to prevent leaving the undo mechanism in the wrong state when writing a LEF header with no route track information. Also added code to the DEF write routine to handle subcell arrays. Thanks to Martin Devera for both patches.
- posted: December 29, 2018 at 3:00am version: 8.2 revision: 89
Update at Fri Dec 28 10:29:29 EST 2018 by tim
Corrected an error that causes run-time issues with compiling the non-Tcl/Tk version, as the routine DRCBreak() is called but never defined.
- posted: December 15, 2018 at 3:00am version: 8.2 revision: 88
Update at Fri Dec 14 11:58:22 EST 2018 by tim
Created a method for distance substitutions in DRC "why" strings in DRC rules. The substitutions are specified by "%d" for the main rule distance, "%c" for the corner rule distance (sometimes interpreted differently; e.g., as width in the widespacing rule), and "%a" for rule area (e.g., maxarea rule). In addition to simplifying the process of writing rule violation strings, the benefits are twofold: (1) The output is in meaningful physical units, but in the case of SCMOS technology, will scale properly depending on the selected GDS output style, and in the case of all technologies, will scale properly with internal grid division; and (2) when using lambda, but where rules are given in vendor minimum dimensions, the rules will be based on the lambda rule approximation (that is, distances will be rounded to the nearest lambda but reported in microns). Behavior is unchanged from previous versions for "why" strings not using the defined substitution sequences.
Also: Corrected DRC "why" message subsitution sequence "%a" so that it corresponds to drcc_cdist, which encodes the area (not drcc_dist).
Also: Corrected error in technology file reloading that causes the plow module to fill up its rules table and start printing errors about the table overflow. Tables are now properly reset on tech reload.
- posted: December 14, 2018 at 3:00am version: 8.2 revision: 87
Update at Thu Dec 13 12:05:16 EST 2018 by tim
Corrected a few aspects of LEF write: (1) Put BUSBITCHARS in the header, (2) Use CLASS BLOCK in the macro if no class is defined, and (3) Add END LIBRARY to the end of the file.
- posted: December 13, 2018 at 3:00am version: 8.2 revision: 86
Update at Wed Dec 12 17:25:15 EST 2018 by tim
Corrected hierarchical SPICE extraction to reset the subcircuit name-to-number mapping used for the HSPICE format between subcircuits. Otherwise, subcircuits with the same instance ID remain in the table and may cause nodes to be output with a name that collides with other names in the same subcircuit. This only affects output in HSPICE format.
- posted: December 8, 2018 at 3:00am version: 8.2 revision: 85
Update at Fri Dec 7 10:12:29 EST 2018 by tim
Modified the "makedbh" script to avoid intermixing "printf" and "echo", because there is at least one OS variant out there where the two buffer independently and cause the output to have lines out of order. The script had previously used "printf" because "echo -n" is not POSIX-compliant and so not necessarily universally compatible. The script was changed to use "printf" throughout.
- posted: November 21, 2018 at 3:00am version: 8.2 revision: 84
Update at Tue Nov 20 13:07:54 EST 2018 by tim
Minor typo correction.
- posted: November 20, 2018 at 3:00am version: 8.2 revision: 83
Update at Mon Nov 19 15:04:29 EST 2018 by tim
Added new option "-hide" to the "lef write" command, which causes the output to have an obstruction area over the entire cell except for a keep-out area around each pin. Instead of marking every part of the pin geometry, only the "chunk" (largest immediate rectangle) surrounding the port label is output as part of port LEF geometry. This avoids making unnecessarily complicated abstract views, and makes it easier for other tools to read and manage the same abstract views.
- posted: November 17, 2018 at 3:00am version: 8.2 revision: 82
Update at Fri Nov 16 14:03:58 EST 2018 by tim
Update for writing files from abstract views. Previous behavior was to prefix all library components read from GDS files pointed to by an abstract view (other than the cell itself) with a prefix. But this does not account for the fact that the same library may be read by other cells. The solution is for every cell in the library, check if there is a cell in magic with the same name which is also an abstract view that points to the same GDS library. Those cells do not get prefixes. At the same time, however, it was discovered that the GDS cellname character limit is set at 32, and so prefixes must be kept short. To keep the prefixes unique, the prefix was changed to a 4 character random alphanumeric sequence, and a warning is issued if any GDS cell exceeds the 32 character limit.
Also: Removed a few diagnostic output statements from the last commit.
- posted: November 16, 2018 at 3:00am version: 8.2 revision: 81
Update at Thu Nov 15 15:57:56 EST 2018 by tim
Corrected node merging, which failed to copy the EF_TOP_PORT flag bit into the merged node. Corrected reference to efNodeHashTable to the more proper call to EFHNLook().
- posted: November 13, 2018 at 3:00am version: 8.2 revision: 80
Update at Mon Nov 12 13:27:12 EST 2018 by tim
Corrected invalid logic in the interpetation of (cif/gds) label options "text", "port", and "noport" in the techfile. The incorrect interpretation was preventing backwards compatibility, such that ports would not be output on GDS layers if the "port" option was not used.
- posted: November 1, 2018 at 3:00am version: 8.2 revision: 79
Update at Wed Oct 31 14:36:01 EDT 2018 by tim
Two improvements: (1) Command extension "ext2spice lvs" sets up all the settings normally used for LVS (hierarchy on, cthresh infinite, subcircuit top auto, etc.). (2) Extract and extract unique ignore cells marked as abstract views (property LEFview is set) when checking for unconnected nets with the same name label.
Also: Corrected "ext2spice lvs" to add "global off" as a setting, which is normal for top level designs (no implicit label connections should be made at the top level).
- posted: October 31, 2018 at 3:00am version: 8.2 revision: 78
Update at Tue Oct 30 16:22:11 EDT 2018 by tim
Added extraction device type "csubcircuit", which should have been added a long time ago, since capacitors use a different method for calculating width and length than either transistors or resistors, so subcircuits need a special class designator or else the extraction may calculate the wrong dimensions for device width by totalling the perimeter between the device and terminal types, as it would for a MOSFET.
Also: Corrected an error in the last commit that causes serious problems in the SPICE netlist when using new device "csubcircuit" due to a mismatch in the expected number of parameters. However, more work needs to be done to cover capacitor top and bottom plates on different planes.
Also: Corrected a few errors in the implementation of "csubcircuit", now fully tested and verified.
- posted: October 30, 2018 at 3:00am version: 8.2 revision: 77
Update at Mon Oct 29 17:32:07 EDT 2018 by tim
Corrected an error that was previously assumed to be fixed in 8.2.74. Top-level port names are now flagged independently of any subcircuit port, so they are easier to identify when determining naming precedence for the net. This makes the code cleaner and removes the problems arising from non-top-level ports and global names overriding the subcircuit port names.
- posted: October 24, 2018 at 3:00am version: 8.2 revision: 76
Update at Tue Oct 23 08:49:15 EDT 2018 by tim
Corrected an obscure error that causes the background of the layout window to change after hiding a layer using the toolbar and then refreshing the layout. Fixed by saving and restoring the graphics state around the routine that configures the toolbar image. Also added a check to CifPaintCurrent to guard against using an unassigned ClientData record as a pointer (causes a crash), and added braces around "expr" values in the Tcl wrapper, which reportedly results in faster execution of the expression.
- posted: October 18, 2018 at 3:00am version: 8.2 revision: 75
Update at Wed Oct 17 10:33:38 EDT 2018 by tim
Resolved a tricky issue with the crosshair drawing. The crosshair routine was erasing and redrawing in one step, which ignored the possibility of having to erase from one window and redraw in another if the cursor moved focus from one window to another. This led to crosshairs being improperly drawn and erased when multiple windows were present, if the windows had different cells loaded.
- posted: September 28, 2018 at 3:00am version: 8.2 revision: 74
Update at Thu Sep 27 08:16:05 EDT 2018 by tim
Oops, Sept. 25 commit introduced an error that causes exactly what the patch was attempting to fix. For node naming, ports were given precedence over globals. However, this failed to distinguish between ports on the top level and ports down in the hierarchy. This has now been fixed. Ports on the hierarchy top level have naming precedence over everything else; otherwise, the traditional rules of node naming precedence apply.
- posted: September 26, 2018 at 3:00am version: 8.2 revision: 73
Update at Tue Sep 25 14:21:53 EDT 2018 by tim
Added code to EFread to make sure that reading .ext files is symmetric with writing them. Since the writing of .ext files was changed to preferably use the location of the cell being read, and since the extflat database does not save this path information, it was necessary to check the main database entry for each cell to determine if there is a non-default path where the .ext file may have been saved (with the current working directory used as a fall-back if the directory is not writeable).
Also: Corrected the routines that determine the "best" name for a node so that they always give precedence to a port name over a global name.
- posted: September 22, 2018 at 3:00am version: 8.2 revision: 72
Update at Fri Sep 21 14:44:26 EDT 2018 by tim
Refinement of run-length spacing rule analyzes all of the maximum area rectangles returned by the "maxrect" function and so does not get triggered simply by the length of the edge being checked.
Also: Additional adjustment to ensure that "run length" means the length shared by the material on both sides. However, it may require a clipping method to avoid triggering on shared lengths that are on an offset.
- posted: September 20, 2018 at 3:00am version: 8.2 revision: 71
Update at Wed Sep 19 17:10:42 EDT 2018 by tim
Modifed the DRC section of the techfile to add two additional behaviors: (1) An additional syntax for "widespacing" that allows both the triggering metal's width AND run-length, which is typical of rules in 65nm-and-below processes; and (2) a new "option" statement for the DRC section, with (for now) one possible flag "wide-width-noninclusive", indicating that the metal width given for "widespacing" rules means that a violation is only triggered for material with a width greater than the given rule width (as opposed to the default interpretation of a width greater than or equal to the given rule width).
- posted: September 14, 2018 at 3:00am version: 8.2 revision: 70
Update at Thu Sep 13 10:21:41 EDT 2018 by tim
Corrected an error that prevents the compile option "--enable-cairo-offscreen" from working. Because the option does not run the full Cario initialization, the grTCairoVisualInfo is not set, and the first attempt to create a Cairo surface fails with a segfault.
Also: Corrected the "port makeall" command so that it actually works, and since the edit box was undefined in the code, potentially this fixes any number of random problems that might be seen with the "port" command. Also: Modified the cell bounding box recalculation so that it does not continually update a parent cell on every addition of a child cell but only once for each child cell found. This greatly reduces the time for GDS file input in the case of large arrays of cells.
- posted: September 10, 2018 at 3:00am version: 8.2 revision: 69
Update at Sun Sep 9 15:11:47 EDT 2018 by tim
Implemented an idea from Staf Verhaegen to have "labels" options "port" and "noport" in the cifoutput section to distinguish between layer:purpose pairs for port text vs. other kinds of text. This allows a closer correspondence between GDS read and write. Note that the port writing is currently only in the GDS write routine, not in the CIF routine.
- posted: August 28, 2018 at 3:00am version: 8.2 revision: 68
Update at Mon Aug 27 11:00:50 EDT 2018 by tim
Attempt at finishing the support of standard practices to define geometry attached to a label in GDS using specific layer:purpose pairs. The additional code maintains the order of ports when writing out text to GDS, and attempts to attach geometry to labels when the geometry is defined on the same layer:purpose pair as the text, and the cifinput style declares the purpose to be a port label.
Also: Extended the code of the previous commit to include attaching labels to geometry defined using either the "port" or "text" options of the "label" statement in a cifinput section.
Also: Corrected a number of errors in the last two commits, as well as additional functionality for ports in GDS format. This has been tested with a techfile encoding pin types on a different purpose than the metal layer drawing purpose. The label rectangle is correctly written to the GDS output as geometry on the pin purpose layer, and the same layer gets read back in from the GDS file and translated back into the label rectangle. Port order is maintained.
- posted: August 27, 2018 at 3:00am version: 8.2 revision: 67
Update at Sun Aug 26 22:42:09 EDT 2018 by tim
Added new option "port" for the "labels" statement in cifinput. This allows text appearing on a specific GDS layer:purpose pair to be interpreted as a port. This does not quite match the intended behavior of such layers, since it is implied that any layer geometry coincident with the text should form the area of the port, which is not (yet) handled. Also, it is presumably implied that the port order matches the order in which text appears in the GDS stream, but magic does not preserve this order when re-writing any GDS output.
- posted: August 21, 2018 at 3:00am version: 8.2 revision: 66
Update at Mon Aug 20 22:13:31 EDT 2018 by tim
Corrected CIF import for reading CIF area labels correctly when the label causes a scale change. Thanks to Iain McNally for the patch. Same correction as made to magic-8.1.
Also: Applied another patch by Iain McNally that restores the obscure function that was available in versions 7.1 and earlier that allows the use of the command "erase errors" to remove DRC error paint (only when the DRC checker is off, of course).
- posted: July 20, 2018 at 3:00am version: 8.2 revision: 65
Update at Thu Jul 19 10:24:42 EDT 2018 by tim
Corrected an error in the DEF file read routine's check on via DRC rules, which was conflating magic and CIF tile types, resulting in incorrect reading of via layers.
- posted: June 22, 2018 at 3:00am version: 8.2 revision: 64
Update at Thu Jun 21 12:52:31 EDT 2018 by tim
Modified the LEF read routine so that it determines the LEF-to- magic conversion for making magic contact types from contact cuts from the CIF/GDS input rules rather than the output rules. This generally makes more sense, plus avoids conflicts where the output rules may be set for CIF-DRC checks and may not be appropriate for LEF input without changing the style.
- posted: June 18, 2018 at 3:00am version: 8.2 revision: 63
Update at Sun Jun 17 15:12:46 EDT 2018 by tim
Corrected missing include to tclmagic.h from txCommands.c, where freeMagic() is used (and is a macro to Tcl_Free()).
- posted: May 31, 2018 at 3:00am version: 8.2 revision: 62
Update at Wed May 30 22:52:11 EDT 2018 by tim
Fixed a crash condition on saving a backup file if a cellDef's cd_file entry is NULL, relying on cd_name instead.
- posted: May 18, 2018 at 3:00am version: 8.2 revision: 61
Update at Thu May 17 09:51:39 EDT 2018 by tim
Changed behavior of DEF read to flag labels as "sticky" so that the layer a label is attached to in the DEF file does not get reassigned.
- posted: April 25, 2018 at 3:00am version: 8.2 revision: 60
Update at Tue Apr 24 09:31:03 EDT 2018 by tim
Corrected a minor issue with the database read incorrectly generating an error message when reading uses from a .mag file. Also modified the GDS write routine to provide an error message when an abstract view points to a GDS file but the GDS file cannot be found.
- posted: April 20, 2018 at 3:00am version: 8.2 revision: 59
Update at Thu Apr 19 16:15:03 EDT 2018 by tim
Corrected an error in which the selection definition may contain invalid pointers to a cell that was deleted while it was selected. Solution is to clear selections before deleting a cell.
- posted: April 19, 2018 at 3:00am version: 8.2 revision: 58
Update at Wed Apr 18 14:02:23 EDT 2018 by tim
Extremely useful new GDS compositing feature: Any cell that is both an abstract view (i.e., comes from a LEF file or otherwise has been marked with the LEFview property) and a GDS_FILE property expects to insert the contents of GDS_FILE into the GDS output stream minus header and trailer, and with all internal cells renamed by prefixing them with the top-level cell name to avoid naming conflicts.
Also: Added ever so slightly more information to the output when handling issues with subcell loading.
- posted: April 18, 2018 at 3:00am version: 8.2 revision: 57
Update at Tue Apr 17 10:10:04 EDT 2018 by tim
Some minor changes to file instance handling, mostly to make output less confusing. Removed leading spaces in instance path which could cause a failure to recognize that a path was not specified for a use in an input file.
- posted: April 17, 2018 at 3:00am version: 8.2 revision: 56
Update at Mon Apr 16 11:40:39 EDT 2018 by tim
Cleaned up the library manager a bit, making sure both columns appear, formatting headers for the columns, and adding a filter for items with matching technology and a checkbutton to turn off the filter.
Also: Added a fallback method to file reading so as to not create havoc from the rigorous method of versioning in case files are relocated and the use paths are no longer valid. Cells are then searched for in the search paths in the traditional manner, albeit with a stern warning. This should avoid most backwards-compatbility issues.
- posted: April 7, 2018 at 3:00am version: 8.2 revision: 55
Update at Fri Apr 6 13:28:08 EDT 2018 by tim
Last update contained an error in writing database files in which the path component of the use def was interpreted as being relative to the parent when reading the cell def but not when writing, resulting in paths being interpreted incorrectly.
Also: Additional corrections to ensure that every cell that is read or written interprets the path of every use as either a full absolute path or a path relative to the parent cell, given the different ways that a parent cell's path could be specified (absolute or relative).
- posted: April 5, 2018 at 3:00am version: 8.2 revision: 54
Update at Wed Apr 4 10:38:10 EDT 2018 by tim
Correction to cell versioning handling for the "getcell" command. This correction allows a full path to be passed for the cellname and will (correctly) break the path into cell name and path components (previously was naming the cell with the full path). To avoid name conflicts, the cell name gets modified if the path cannot be resolved against an existing cell of the same name.
- posted: April 2, 2018 at 3:00am version: 8.2 revision: 53
Update at Sun Apr 1 14:42:25 EDT 2018 by tim
Re-implemented plow setup for the first time since about 2006, enabling the "plow" command. At this time, however, not all rules are being implemented correctly given the numerous changes to the DRC handling since the last time "plow" was working. Fixes are ongoing.
Also: Corrected the plow width rules. However, plow spacing rules seem to be not quite right, and all sets of rules need to be updated to match the latest DRC rule parsing. Also, plowing does not handle contact types correctly.
Also: Corrected problem with spacing rules. Only contact handling problem remains.
Also: Finished restoring the plow function to the original capability. However, various updates are needed to match changes in magic over the years, including handling of non-manhattan geometry, and handling of added DRC rules such as surround and extend.
Also: Removed swap file caused by editing a file during a push.
- posted: March 29, 2018 at 3:00am version: 8.2 revision: 52
Update at Wed Mar 28 12:10:29 EDT 2018 by tim
Option "ext2spice subcircuit top" was implemented wrong and would cause a crash. Corrected the implementation as well as implemented an option for "subcircuit top auto" that generates a subcircuit header or not depending on the presence or absense of ports in the top level cell.
- posted: March 28, 2018 at 3:00am version: 8.2 revision: 51
Update at Tue Mar 27 18:20:05 EDT 2018 by tim
Corrected an error in which ext2spice fails on hierarchies of cells with abstract views on all leaf nodes using the "LEFview" property to declare the cell view to be abstract. Such cells were being misinterpreted as containing no active devices.
- posted: March 24, 2018 at 3:00am version: 8.2 revision: 50
Update at Fri Mar 23 10:55:41 EDT 2018 by tim
Finished implementing cell versioning, which was implemented for file writes by adding the path for each cell use, but being ignored for file reads. The cell path saved in the .mag file is now honored on read-back. If the cell needs updating, then the cell version can be manipulated using "cellname filepath". No UI methods are currently implemented for managing cell versions.
Also: Added additional handling for versioning to include relative paths and home paths.
- posted: March 20, 2018 at 3:00am version: 8.2 revision: 49
Update at Mon Mar 19 15:02:08 EDT 2018 by tim
Once again reworked the DRC code. The function that clears DRC errors from the area checked must use the same area as is used by the interaction checker to recompute errors. In earlier code, both these areas were much larger than necessary. In the last code update, the area to make revised checks was reduced, but the area cleared of errors was not, resulting in errors that would disappear from the layout as paint changes were made, until a full "drc check" was run again. This code commit makes the areas the same again so that no errors are lost.
- posted: March 16, 2018 at 3:00am version: 8.2 revision: 48
Update at Thu Mar 15 10:53:27 EDT 2018 by tim
Corrected two errors in the DRC checking, one of which passed a much larger area than necessary to the interaction check, and the other which failed to scale the tech halo distance down after scaling all the rules. Both of these led to huge areas of a layout being unnecessarily checked when even a tiny part of the layout was modified. Corrected behavior matches expectations for interactive DRC response.
- posted: February 22, 2018 at 3:00am version: 8.2 revision: 47
Update at Wed Feb 21 10:02:59 EST 2018 by tim
Corrected an error in LEF write that will cause a segfault if a label is attached to space.
- posted: February 3, 2018 at 3:00am version: 8.2 revision: 46
Update at Fri Feb 2 14:17:29 EST 2018 by tim
Enhanced the LEF file parser to handle many more standard keywords without throwing an error message.
- posted: January 31, 2018 at 3:00am version: 8.2 revision: 45
Update at Tue Jan 30 10:03:03 EST 2018 by tim
Corrected an error in the DEF read that skips a line if a cell cannot be found. This particularly screws up the file parsing if the "END COMPONENTS" line is skipped.
- posted: January 8, 2018 at 9:45pm version: 8.2 revision: 44
Corrected an error in writing out .mag files with property values that are longer than the formerly-fixed array size 256. This conflicted with the recent addition of holding path data in properties, where the path coordinates can be significantly longer than the fixed array size. Same change as made to magic version 8.1.
Also: Modified possibly incorrect use of DBSrCellDefs in extresist to ignore internal cells (select, yank, etc.).
Also: Added initialization for node location so if something goes wrong with extresist, it does not have random numbers for node locations.
- posted: January 2, 2018 at 9:38am version: 8.2 revision: 43
Corrected an extresist error that had an incorrect interpretation of the return code from reading the sim file and therefore failed to read the nodes file, causing node information to go missing.
- posted: December 18, 2018 at 8:24pm version: 8.2 revision: 42
Corrected an error in the CIF read routine, caused when adding handling for grid subdivision. Scaled the value of "center" for a CIF box and then attempted to use "center" as an unscaled value. Same correction as made to magic-8.1.
Also: Corrected the "setlabel" command for edit-in-place cells, for which setlabel would report label properties correctly but would never alter them.
Also: Corrected error in the extraction for magic-8.2 (only) that appears to have come from an unfinished (or at least unchecked) development effort on improving the checks for DRC interaction errors (which also affects extraction).
Also: Corrected the "Text..." dialog to auto-update ports after making a port so that repeated uses of "apply" won't fail because the port number is already used. Corrected the "port remove" command, which didn't work, and corrected the script to do "port exists" before "port index" so that the latter won't complain if the label is not a port. Same changes made to magic-8.1.
- posted: December 13, 2018 at 11:16am version: 8.2 revision: 41
Corrected extended bounding box for LEF-derived views setting FIXED_BBOX; same change made to magic version 8.1.
- posted: November 25, 2017 at 4:09pm version: 8.2 revision: 40
Corrected a bug in CIFMakeManhattanPath that can cause a segfault or a hang in rare geometry situations. Same fix as was made to magic version 8.1.
Also: Added back a missing multiplication by the number of merged devices for "ext2sim" when using "ext2sim merge" (either aggressive or conservative merge). Same change as made to magic-8.1.
- posted: October 20, 2017 at 4:08pm version: 8.2 revision: 39
Possible fix to problem with substrate node being unitialized when called after "merge conservative" is selected in ext2spice.
- posted: October 16, 2017 at 7:56pm version: 8.2 revision: 38
Updates and fixes to the configuration file definitions for Mac OSX using MacPorts, with considerable help from Ryan Schmidt.
- posted: October 14, 2017 at 6:43pm version: 8.2 revision: 37
Removed the "macosx" definition from the configuration file, which got copied over from another project but apprently causes serious issues with the OSX compilation.
- posted: October 13, 2017 at 10:28am version: 8.2 revision: 36
Rewrote the configuration scripts, makefiles, and some initialization routines to use the Tcl and Tk stubs libraries.
- posted: October 12, 2017 at 10:42am version: 8.2 revision: 35
Corrected duplicate global variable grVisualInfo between grTOGL1.c and grTCairo1.c.
- posted: October 9, 2018 at 11:52am version: 8.2 revision: 34
Preliminary method to record polygons and wire paths with property records when they are read in into their own subcells using the cif/gds read options.
Also: Corrected custom wire extension handling in GDS file reads.
Also: Modified the gds command options to separate "gds path subcell" from "gds polygon subcell". Previously both polygons and paths were put into subcells named polygonXXXXX (substitute numbers for XXXXX). Now polygons go into cells named polygonXXXXX and paths go into cells named pathXXXXX. This makes it easier to keep track of the original path. NOTE: The path centerline should be kept as a cell property in this case, and the path options like endcap style can also be held as properties. The polygon boundary should be treated similarly.
Also: Fixed calma custom paths (pathtype 4) so that it doesn't generate an error message (otherwise it was already being handled correctly).
- posted: October 6, 2017 at 12:47pm version: 8.2 revision: 33
Experimental change in the way hierarchical DRC is handled. To avoid the problem where subcells violate DRC themselves but do not violate DRC in the context of the parent (i.e., the parent adds metal to avoid minimum area error), DRC errors in subcells are neither counted nor displayed, but they remain present in the subcell database. The DRC check enumerates all subcell errors as mandatory check areas in DRCFindInteractions(), so that those areas are always counted with the interaction areas. Previously, if a subcell violated a DRC rule by itself, that error would be counted and displayed in the parent even if the parent had paint causing the error to no longer exist.
Also: Corrected "lef write" command to act as advertised and take a filename as the next argument.
Also: Corrected an error in lefWrite where a variable was not set, causing occasional intermittent crashes on "lef write".
- posted: October 5, 2017 at 9:45pm version: 8.2 revision: 32
Corrected an error in the "lef write" command that prevents obstruction layers from being generated in the output LEF file.
Also: Additional small correction.
Also: Removed the call to glFinish() because it appears mostly to cause synchronization delays.
Also: Removed two temporary backup files.
- posted: October 4, 2017 at 2:57pm version: 8.2 revision: 31
Finally worked out how to correctly use the OpenGL general-purpose frame buffers and render buffers, and use fast frame buffer bit block transfers to do copies to and from backing store. Also found a long-standing problem where multiple windows fail to refresh properly in OpenGL and Cairo interfaces due to a lack of calling GrLock() and GrUnlock() around the call to fetch backing store after an expose event. The use of the general purpose frame buffer allows magic to avoid calling any indirect rendering methods and should now (finally) allow magic to run in OpenGL mode over a VNC. Use of direct rendering methods only also means that magic does not need to be compiled with the ad hoc switch to have Cairo handle drawing into pixmaps for the icons (this remains to be tested).
- posted: September 28, 2017 at 3:00am version: 8.2 revision: 30
Corrected pattern drawing on polygons.
- posted: September 27, 2017 at 3:00am version: 8.2 revision: 29
Corrected failure to update root box and crosshair position when rescaling the internal units. The former in particular can cause problems when moving the root box and importing cells from a script (same change as made to magic-8.1).
Also: Update at Tue Sep 26 14:09:49 EDT 2017 by tim
Also: Merge branch 'work' into tomerge
- posted: September 18, 2017 at 3:00am version: 8.2 revision: 28
Attempt to work around problems with the OpenGL off-screen rendering by using a Pbuffer instead of a GLXPixmap, which is too often not supported for direct rendering. The only way I found to make this work was to do a (very) slow pixel-by-pixel copy from the Pbuffer into the pixmap. However, this only needs to be done once for each toolbar icon, and the icons are small, so it is not really a problem.
Also: Update at Sun Sep 17 11:24:19 EDT 2017 by tim
Also: Merge branch 'work' into tomerge
Also: Changed CONST86 back to CONST84 to maintain compatibility with Tcl/Tk 8.5, although this should probably be in an ifdef or something.
Also: One more attempt at correcting off-screen rendering. Noting that Cairo works perfectly for the off-screen rendering and that OpenGL works perfectly for the on-screen rendering, make a compile-time option to use both in their respective areas of perfection.
- posted: September 17, 2017 at 3:00am version: 8.2 revision: 27
Corrected error attempting to free the backing store memory twice during a window close event (Cairo graphics interface only).
Also: Update at Sat Sep 16 15:40:48 EDT 2017 by tim
Also: Merge branch 'work' into tomerge
- posted: September 16, 2017 at 3:00am version: 8.2 revision: 26
Corrected typo in call to cairo_surface_destroy, incorrectly written cairo_destroy_surface (fails to run with Tcl <= 8.5, runs with Tcl 8.6 and "load -lazy" but then creates a potential crash condition).
Also: Update at Fri Sep 15 11:24:43 EDT 2017 by tim
Also: Merge branch 'work' into tomerge
Also: Applied an upside-down scale transformation to the pattern matrix, otherwise patterns end up upside-down relative to other graphics interfaces.
Also: Corrected text clipping to cell bounds, and adjusted screen to a half-pixel offset that centers coordinates on pixels, so single- pixel objects like cell boundaries or the crosshair will be drawn a single pixel in width.
Also: Corrected problem with passing the MagWindow to the backing store routine; failure to use the passed MagWindow value caused crashes when using more than one window in the Cairo graphics interface.
Also: Corrected backing store put/get in the case of obscuring windows. The OpenGL version was disabling backing store while any window obscures the layout; the Cairo version was not.
Also: Found that the crosshair function was wasting compute cycles by drawing out-of-bounds when the crosshair was turned off rather than just not drawing it.
- posted: September 15, 2017 at 3:00am version: 8.2 revision: 25
Finished the implementation of Cairo 2D graphics (yay!). Specifically, fixed the initial background, display of text, reinstated supercolor values, and fixed the backing store coordinates.
Also: Update at Thu Sep 14 17:05:47 EDT 2017 by tim
Also: Merge branch 'work' into tomerge
- posted: September 13, 2017 at 3:00am version: 8.2 revision: 24
Corrected problems having to do with color (blue and green were swapped) and incorrect call to cairo_set_source_rgba which is in an unused function and has no effect except with versions of Tcl less than 8.6 where "load -lazy" is not available and unknown functions cause immediate exit. Cleaned up remaining references to OpenGL in the Cairo code, and updated the copyright and acknowledged Chuan Chen, who coded the Cairo interface. No attempt yet to deal with memory leaks caused by calling Cairo "create" functions without the accompanying "destroy" functions.
Also: Update at Tue Sep 12 15:45:00 EDT 2017 by tim
Also: Merge branch 'work' into tomerge
- posted: September 7, 2017 at 3:00am version: 8.2 revision: 23
Update at Wed Sep 6 13:50:36 EDT 2017 by tim
- posted: September 6, 2017 at 3:00am version: 8.2 revision: 22
Update at Tue Sep 5 08:50:58 EDT 2017 by tim
- posted: September 5, 2017 at 3:00am version: 8.2 revision: 21
Remote changes at Fri Sep 1 14:41:47 EDT 2017 by chuan on vivaldi
Also: Update at Mon Sep 4 23:20:20 EDT 2017 by chuan
Also: Remote changes at Mon Sep 4 23:20:22 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
Also: Remote changes at Mon Sep 4 23:35:07 EDT 2017 by chuan on vivaldi
- posted: September 2, 2017 at 3:00am version: 8.2 revision: 20
Update at Fri Sep 1 08:28:49 EDT 2017 by tim
Also: Changed the definition of CPP again so that even in the absence of the python preprocessor version, the techfiles and .magicrc file will get the correct arguments, without affecting the use of CPP in the configure script.
Also: Changed the offscreen-rendering handling in SetProjection to be more like the Tk/X11 model than the OpenGL model, since Cairo isn't picky about pixmaps.
- posted: September 1, 2017 at 3:00am version: 8.2 revision: 19
Update at Thu Aug 31 08:10:52 EDT 2017 by tim
Also: Remote changes at Thu Aug 31 14:11:17 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
Also: Remote changes at Thu Aug 31 23:54:11 EDT 2017 by chuan on vivaldi
Also: Remote changes at Fri Sep 1 00:39:19 EDT 2017 by chuan on vivaldi
- posted: August 31, 2017 at 3:00am version: 8.2 revision: 18
Update at Wed Aug 30 16:34:41 EDT 2017 by chuan
Also: Remote changes at Wed Aug 30 16:34:42 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
- posted: August 30, 2017 at 3:00am version: 8.2 revision: 17
Remote changes at Thu Aug 24 17:24:48 EDT 2017 by chuan on vivaldi
- posted: August 26, 2017 at 3:00am version: 8.2 revision: 16
Update at Fri Aug 25 12:47:39 EDT 2017 by chuan
Also: Corrected the configure.in and defs.mak.in file so that the python3 preprocessor is captured in the variable MCPP, not CPP, since CPP is meaningful to the make process. Also, the MAGICDIR variable in the name needed to be escaped so that the variable is not evaluated within the configure script.
Also: Merge branch 'work' into tomerge
- posted: August 25, 2017 at 3:00am version: 8.2 revision: 15
Corrected .gitignore to ignore files from configuration (defs.mak, config.log, etc.). Not sure that is working properly with gitocd since "defs.mak" was already in the .gitignore file but it queued for commit.
Also: Changes that should have been ignored by .gitignore.
Also: Update at Thu Aug 24 16:47:27 EDT 2017 by tim
Also: Merge branch 'work' into tomerge
Also: Updated configure to add both m4 and python3, then corrected the python preprocessor script to execute "env python3" instead of the hard-coded non-existent directory that was on the shebang line.
Also: Didn't make clean before git push; these files should be in the gitignore file. . .
- posted: August 24, 2017 at 3:00am version: 8.2 revision: 14
Update at Wed Aug 23 07:27:58 EDT 2017 by tim
- posted: August 19, 2017 at 3:00am version: 8.2 revision: 13
Update at Fri Aug 18 14:15:11 EDT 2017 by chuan
Also: Remote changes at Fri Aug 18 14:15:12 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
Also: Remote changes at Fri Aug 18 14:42:55 EDT 2017 by chuan on vivaldi
- posted: August 18, 2017 at 3:00am version: 8.2 revision: 12
Update at Thu Aug 17 13:47:37 EDT 2017 by chuan
Also: Remote changes at Thu Aug 17 13:47:38 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
Also: Remote changes at Thu Aug 17 15:42:31 EDT 2017 by chuan on vivaldi
- posted: August 17, 2017 at 3:00am version: 8.2 revision: 11
Update at Wed Aug 16 13:52:31 EDT 2017 by chuan
Also: Remote changes at Wed Aug 16 13:52:31 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
Also: Remote changes at Wed Aug 16 14:11:12 EDT 2017 by chuan on vivaldi
- posted: August 16, 2017 at 3:00am version: 8.2 revision: 10
Update at Tue Aug 15 14:53:25 EDT 2017 by tim
Also: Remote changes at Tue Aug 15 15:19:13 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
- posted: August 15, 2017 at 3:00am version: 8.2 revision: 9
Update at Mon Aug 14 16:07:11 EDT 2017 by tim
- posted: August 12, 2017 at 3:00am version: 8.2 revision: 8
Update at Fri Aug 11 15:18:31 EDT 2017 by chuan
Also: Remote changes at Fri Aug 11 15:18:32 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
Also: Remote changes at Fri Aug 11 15:42:32 EDT 2017 by chuan on vivaldi
- posted: August 11, 2017 at 3:00am version: 8.2 revision: 7
Update at Thu Aug 10 14:27:50 EDT 2017 by chuan
Also: Remote changes at Thu Aug 10 14:27:50 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
Also: Remote changes at Thu Aug 10 14:28:06 EDT 2017 by chuan on vivaldi
- posted: August 10, 2017 at 3:00am version: 8.2 revision: 6
Update at Wed Aug 9 09:04:45 EDT 2017 by tim
Also: Remote changes at Wed Aug 9 14:55:30 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
- posted: August 9, 2017 at 3:00am version: 8.2 revision: 5
Update at Tue Aug 8 14:15:26 EDT 2017 by tim
Also: Remote changes at Tue Aug 8 15:00:19 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
- posted: August 8, 2017 at 3:00am version: 8.2 revision: 4
Update at Fri Aug 4 14:25:41 EDT 2017 by chuan
Also: Remote changes at Fri Aug 4 16:43:56 EDT 2017 by chuan on vivaldi
Also: Merge branch 'master' into work
Also: Remote changes at Mon Aug 7 14:17:12 EDT 2017 by chuan on vivaldi
Also: Update at Mon Aug 7 14:17:23 EDT 2017 by chuan
Also: Merge branch 'master' into work
Also: Remote changes at Mon Aug 7 14:38:50 EDT 2017 by chuan on vivaldi
Also: Remote changes at Mon Aug 7 15:37:14 EDT 2017 by chuan on vivaldi
Also: Remote changes at Mon Aug 7 16:22:11 EDT 2017 by chuan on vivaldi
- posted: August 5, 2017 at 3:00am version: 8.2 revision: 3
Remote changes at Fri Aug 4 13:22:18 PDT 2017 by tim on andro8
Also: Update at Fri Aug 4 16:25:40 EDT 2017 by tim
Also: Merge branch 'work' into tomerge
Also: Remote changes at Fri Aug 4 13:29:41 PDT 2017 by tim on andro8
Also: Remote changes at Fri Aug 4 13:30:36 PDT 2017 by tim on andro8
Also: Remote changes at Fri Aug 4 13:33:41 PDT 2017 by tim on andro8
- posted: August 2, 2017 at 3:00am version: 8.2 revision: 2
Set of changes updating version 8.2 to the level of 8.1, since 8.2 development had been halted since it was first created back in April. Version 8.2 is now the official development version, with the first development push to create a Cairo graphics interface.
Also: Update at Tue Aug 1 22:15:44 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: April 26, 2017 at 3:00am version: 8.2 revision: 1
New commit of development version 8.2.
- posted: February 7, 2019 at 3:00am version: 8.1 revision: 224
Update at Wed Feb 6 11:09:35 EST 2019 by tim
Corrected error that potentially causes a segfault in "lef write" when accessing the inverse layer map array beyond its defined allocated limit of DBNumUserLayers.
- posted: January 30, 2019 at 3:00am version: 8.1 revision: 223
Update at Tue Jan 29 16:47:17 EST 2019 by tim
Found an error that causes the worst of the problem in long extraction times, which is an incorrect units conversion of the "step" parameter in the extract section. It was converting based on the "lambda" parameter in the same section, which has to do with the scaling of values in the output file, not the scale factor of the database to be extracted, which is set by the current CIF output scale. Once fixed, extraction times are minimized using the rule of thumb mentioned in the techfile reference, which is 50 times the minimum feature size. This is a bug fix, same fix as made to magic version 8.2.
- posted: January 2, 2019 at 3:00am version: 8.1 revision: 222
Update at Tue Jan 1 20:26:20 EST 2019 by tim
Corrected an error in lefWrite that prevents magic from leaving the "undo" in a disabled state when writing a LEF file with no technology information (just the header). Thanks to Martin Devera for the bug report and bug fix.
- posted: December 29, 2018 at 3:00am version: 8.1 revision: 221
Update at Fri Dec 28 10:28:56 EST 2018 by tim
Corrected an error that causes run-time issues with compiling the non-Tcl/Tk version, as the routine DRCBreak() is called but never defined.
- posted: December 14, 2018 at 3:00am version: 8.1 revision: 220
Update at Thu Dec 13 12:05:46 EST 2018 by tim
Corrected a few aspects of LEF write: (1) Put BUSBITCHARS in the header, (2) Use CLASS BLOCK in the macro if no class is defined, and (3) Add END LIBRARY to the end of the file. Same change as made to Magic version 8.2.
- posted: December 13, 2018 at 3:00am version: 8.1 revision: 219
Update at Wed Dec 12 17:32:00 EST 2018 by tim
Corrected an error that can cause node names to collide in hierarchical SPICE netlists when using HSPICE output mode. Same correction as made to magic version 8.2.
- posted: October 18, 2018 at 3:00am version: 8.1 revision: 218
Update at Wed Oct 17 10:49:44 EDT 2018 by tim
Corrected a long-standing error in drawing the crosshair when multiple windows are present and different cells are loaded into different windows. Same correction as was made to magic-8.2.
- posted: September 14, 2018 at 3:00am version: 8.1 revision: 217
Update at Thu Sep 13 21:12:26 EDT 2018 by tim
Corrected the "port makeall" command so that it actually works, and since the edit box was undefined in the code, potentially this fixes any number of random problems that might be seen with the "port" command. Same correction as made to magic-8.2.
- posted: August 27, 2018 at 3:00am version: 8.1 revision: 216
Update at Sun Aug 26 22:44:38 EDT 2018 by tim
Corrected an error found with the "labelstext" option in the techfile cifinput. This was supposed to define labels as "sticky". However, when reading text, the layer was mapped from the first layer to use the same magic type, not the specific layer:purpose pair, so the sticky flag was applied arbitrarily depending on how many other layer definitions used the same magic layer. This has been fixed.
- posted: August 21, 2018 at 3:00am version: 8.1 revision: 215
Update at Mon Aug 20 22:13:09 EDT 2018 by tim
Corrected CIF import for reading CIF area labels correctly when the label causes a scale change. Thanks to Iain McNally for the patch.
Also: Applied another patch by Iain McNally that restores the obscure function that was available in versions 7.1 and earlier that allows the use of the command "erase errors" to remove DRC error paint (only when the DRC checker is off, of course). Same change as made to magic-8.2.
- posted: June 18, 2018 at 3:00am version: 8.1 revision: 214
Update at Sun Jun 17 15:13:06 EDT 2018 by tim
Corrected missing include to tclmagic.h from txCommands.c, where freeMagic() is used (and is a macro to Tcl_Free()). Thanks to Laurent Charrier for the bug fix.
- posted: May 31, 2018 at 3:00am version: 8.1 revision: 213
Update at Wed May 30 22:52:32 EDT 2018 by tim
Fixed a crash condition on saving a backup file if a cellDef's cd_file entry is NULL, relying on cd_name instead. Same correction as made to magic version 8.2.
- posted: May 18, 2018 at 3:00am version: 8.1 revision: 212
Update at Thu May 17 09:51:56 EDT 2018 by tim
Changed behavior of DEF read to flag labels as "sticky" so that the layer a label is attached to in the DEF file does not get reassigned.
- posted: April 25, 2018 at 3:00am version: 8.1 revision: 211
Update at Tue Apr 24 09:35:37 EDT 2018 by tim
Corrected improper generation of an error message when reading cell uses from a .mag file. Same change as made to magic-8.2.
- posted: April 20, 2018 at 3:00am version: 8.1 revision: 210
Update at Thu Apr 19 16:15:22 EDT 2018 by tim
Corrected an error in which the selection definition may contain invalid pointers to a cell that was deleted while it was selected. Solution is to clear selections before deleting a cell. Same change as was made to magic version 8.2.
- posted: April 18, 2018 at 3:00am version: 8.1 revision: 209
Update at Tue Apr 17 10:10:24 EDT 2018 by tim
Some minor changes to file instance handling, mostly to make output less confusing. Removed leading spaces in instance path which could cause a failure to recognize that a path was not specified for a use in an input file. Same changes as made to version 8.2.
- posted: April 17, 2018 at 3:00am version: 8.1 revision: 208
Update at Mon Apr 16 21:46:15 EDT 2018 by tim
Added a fallback method to file reading so as to not create havoc from the rigorous method of versioning in case files are relocated and the use paths are no longer valid. Cells are then searched for in the search paths in the traditional manner, albeit with a stern warning. This should avoid most backwards-compatbility issues. This is the same change made to magic-8.2. Also, updated the library manager to filter results by technology and to clean up some issues with the formatting of the pop-up window.
- posted: April 7, 2018 at 3:00am version: 8.1 revision: 207
Update at Fri Apr 6 13:28:29 EDT 2018 by tim
Last update contained an error in writing database files in which the path component of the use def was interpreted as being relative to the parent when reading the cell def but not when writing, resulting in paths being interpreted incorrectly. Same correction as made to magic-8.2.
Also: Additiona correction to the header file to match the C code change.
Also: Additional corrections to ensure that every cell that is read or written interprets the path of every use as either a full absolute path or a path relative to the parent cell, given the different ways that a parent cell's path could be specified (absolute or relative). Same correction as made to magic-8.2.
- posted: April 5, 2018 at 3:00am version: 8.1 revision: 206
Update at Wed Apr 4 10:38:33 EDT 2018 by tim
Correction to cell versioning handling for the "getcell" command. This correction allows a full path to be passed for the cellname and will (correctly) break the path into cell name and path components (previously was naming the cell with the full path). To avoid name conflicts, the cell name gets modified if the path cannot be resolved against an existing cell of the same name. Same change as was made to magic version 8.2.
- posted: March 29, 2018 at 3:00am version: 8.1 revision: 205
Update at Wed Mar 28 12:10:47 EDT 2018 by tim
Option "ext2spice subcircuit top" was implemented wrong and would cause a crash. Corrected the implementation as well as implemented an option for "subcircuit top auto" that generates a subcircuit header or not depending on the presence or absense of ports in the top level cell. Same changes as made to magic-8.2.
- posted: March 28, 2018 at 3:00am version: 8.1 revision: 204
Update at Tue Mar 27 18:20:26 EDT 2018 by tim
Corrected an error in which ext2spice fails on hierarchies of cells with abstract views on all leaf nodes using the "LEFview" property to declare the cell view to be abstract. Such cells were being misinterpreted as containing no active devices. Same correction as made to magic-8.2.
- posted: March 24, 2018 at 3:00am version: 8.1 revision: 203
Update at Fri Mar 23 10:56:15 EDT 2018 by tim
Finished implementing cell versioning, which was implemented for file writes by adding the path for each cell use, but being ignored for file reads. The cell path saved in the .mag file is now honored on read-back. If the cell needs updating, then the cell version can be manipulated using "cellname filepath". Same update as made to magic version 8.2.
Also: Added additional handling for versioning to include relative paths and home paths. Same change as made for magic version 8.2.
- posted: March 20, 2018 at 3:00am version: 8.1 revision: 202
Update at Mon Mar 19 15:13:41 EDT 2018 by tim
Same corrections made to magic-8.2; additional change to code from last commit matches the area cleared of DRC errors to the area where DRC errors are recomputed, so that existing DRC errors not in the area checked don't get erased.
- posted: March 16, 2018 at 3:00am version: 8.1 revision: 201
Update at Thu Mar 15 10:53:49 EDT 2018 by tim
Corrected two errors in the DRC checking, one of which passed a much larger area than necessary to the interaction check, and the other which failed to scale the tech halo distance down after scaling all the rules. Both of these led to huge areas of a layout being unnecessarily checked when even a tiny part of the layout was modified. Corrected behavior matches expectations for interactive DRC response. Same correction as was made to magic version 8.2.
- posted: February 22, 2018 at 3:00am version: 8.1 revision: 200
Update at Wed Feb 21 10:04:48 EST 2018 by tim
Corrected an error in LEF write that causes a segfault if a label is attached to space (same error corrected in version 8.2).
- posted: February 3, 2018 at 3:00am version: 8.1 revision: 199
Update at Fri Feb 2 14:28:01 EST 2018 by tim
Updated LEF reading with additional handling of standard LEF keywords without spitting out error messages.
- posted: January 31, 2018 at 3:00am version: 8.1 revision: 198
Update at Tue Jan 30 10:03:27 EST 2018 by tim
Corrected an error in the DEF read that skips a line if a cell cannot be found. This particularly screws up the file parsing if the "END COMPONENTS" line is skipped. Same change as was made to magic-8.2.
- posted: January 24, 2018 at 4:53pm version: 8.1 revision: 197
Update at Mon Jan 8 21:45:14 EST 2018 by tim
Also: Corrected an error in writing out .mag files with property values that are longer than the formerly-fixed array size 256. This conflicted with the recent addition of holding path data in properties, where the path coordinates can be significantly longer than the fixed array size.
Also: Modified possibly incorrect use of DBSrCellDefs in extresist to ignore internal cells (select, yank, etc.).
Also: Added initialization for node location so if something goes wrong with extresist, it does not have random numbers for node locations.
- posted: January 2, 2018 at 3:00am version: 8.1 revision: 196
Corrected an extresist error that had an incorrect interpretation of the return code from reading the sim file and therefore failed to read the nodes file, causing node information to go missing. Same change as made to magic-8.2. Merge branch 'master' into work
- posted: December 18, 2017 at 3:00am version: 8.1 revision: 195
Corrected an error in the CIF read routine, caused when adding handling for grid subdivision. Scaled the value of "center" for a CIF box and then attempted to use "center" as an unscaled value. Corrected the "setlabel" command for edit-in-place cells, for which setlabel would report label properties correctly but would never alter them. Same change as made to magic-8.2. Merge branch 'master' into work
- posted: December 14, 2017 at 3:00am version: 8.1 revision: 194
Corrected the "Text..." dialog to auto-update ports after making a port so that repeated uses of "apply" won't fail because the port number is already used. Corrected the "port remove" command, which didn't work, and corrected the script to do "port exists" before "port index" so that the latter won't complain if the label is not a port. Corrected reference to "unfracture" option in "gds" command (which shouldn't be there; it belongs to "cif" command only). Merge branch 'master' into work
- posted: December 13, 2017 at 3:00am version: 8.1 revision: 193
Corrected an error critical for reading magic layout that has been created with the "lef write" command, as read-back was not adjusting the label (non-physical) bounding box, causing all sorts of problems when placing an instance of the LEF-like view. Merge branch 'master' into work
- posted: November 25, 2017 at 3:00am version: 8.1 revision: 192
Corrected a bug in CIFMakeManhattanPath that can cause segfaults or hangs in somewhat rare geometry conditions. Added back a missing multiplication by the number of merged devices for "ext2sim" when using "ext2sim merge" (either aggressive or conservative merge). This got lost quite a while ago when the new method for computing length and width was introduced. Merge branch 'master' into work
- posted: October 20, 2017 at 3:00am version: 8.1 revision: 191
Possible fix to problem with substrate node being unitialized when called after "merge conservative" is selected in ext2spice. Merge branch 'master' into work
- posted: October 16, 2017 at 3:00am version: 8.1 revision: 190
Updates and fixes to the configuration file definitions for Mac OSX using MacPorts, with considerable help from Ryan Schmidt. Merge branch 'master' into work
- posted: October 13, 2017 at 3:00am version: 8.1 revision: 189
Rewrote the configuration scripts, makefiles, and some initialization routines to use the Tcl and Tk stubs libraries. Corrected custom wire extension handling in GDS file reads. Merge branch 'master' into work
- posted: October 6, 2017 at 3:00am version: 8.1 revision: 188
Fixed calma custom paths (pathtype 4) so that it doesn't generate an error message (otherwise it was already being handled correctly). Corrected "lef write" command to act as advertised and take a filename as the next argument. Corrected an error in lefWrite where a variable was not set, causing occasional intermittent crashes on "lef write". Same correction made to version 8.2. Merge branch 'master' into work
- posted: October 5, 2017 at 3:00am version: 8.1 revision: 187
Corrected an error in the "lef write" command that prevents obstruction layers from being generated in the output LEF file (Same change as made to magic version 8.2). Merge branch 'master' into work
- posted: September 26, 2017 at 3:00am version: 8.1 revision: 186
Corrected failure to update root box and crosshair position when rescaling the internal units. The former in particular can cause problems when moving the root box and importing cells from a script.- posted: August 10, 2017 at 3:00am version: 8.1 revision: 185
- posted: August 9, 2017 at 3:00am version: 8.1 revision: 184
Merge branch 'master' into work
- posted: July 29, 2017 at 3:00am version: 8.1 revision: 183
Minor changes to the library manager to 1) alphabetically sort files, and 2) add a button that invokes the "pick tool" for interactive cell placement. Merge branch 'master' into work
- posted: July 28, 2017 at 3:00am version: 8.1 revision: 182
Typo correction on libmgr.tcl. Merge branch 'master' into work
- posted: July 27, 2017 at 3:00am version: 8.1 revision: 181
Corrected an error in the new library manager dialog that leaves files open and so collects them until the system runs out of file descriptors, if the system is not configured for unlimited file descriptors (but it's good practice to close them all, anyway, of course). Merge branch 'master' into work
- posted: July 24, 2017 at 3:00am version: 8.1 revision: 180
Quick fix to the last patch (for the case OpenGL is not selected at compile time). Merge branch 'master' into work
- posted: July 23, 2017 at 3:00am version: 8.1 revision: 179
Two fixes from Southampton U., GB; one which fixes a bug in openwindow, and the other which fixes a problem with terminal getting plastered with error messages when OpenGL is not enabled. Merge branch 'master' into work
- posted: July 18, 2017 at 3:00am version: 8.1 revision: 178
Corrected search path defaults (again), this time to force a default behavior when a tech file default is not specified, so that the level 2 search path contains the tutorials; also added sys/current because the SCMOS files contain example layout. Also: Created a new library manager UI that scans the search paths to find what cells are available and makes a list that can be used for loading cells and placing cell instances. This first cut is overly simplified; needs filtering and such, and that does not alter the fact that magic still needs a real library management system. Corrected lef and def commands so that "lef write -tech" is a valid option and "def write -allspec" is a valid option. Merge branch 'master' into work
- posted: July 17, 2017 at 3:00am version: 8.1 revision: 177
Corrected ext2hier to not put parasitic capacitances or any other components into a subcircuit stub definition (used with the "ext2spice blackbox" option and the black-box property on cell views derived from LEF source). Merge branch 'master' into work
- posted: July 12, 2017 at 3:00am version: 8.1 revision: 176
The ext2spice code that generates parameters for subcircuit calls from a cell's properties was writing the parameters before the subcircuit name instead of after, which is incompatible with SPICE syntax. Merge branch 'master' into work
- posted: June 29, 2017 at 3:00am version: 8.1 revision: 175
Fixed issue with using "specialopen"; was sizing window based on window flags which were not valid if the window record passed to the routine was NULL. Error was hidden by several nested defines. Changed it to use the default flags if no window is specified (WindDefaultFlags). Merge branch 'master' into work
- posted: June 26, 2017 at 3:00am version: 8.1 revision: 174
Applied a patch by Iain McNally (U. Southampton) to fix a clearly incorrect setting of CellLibPath in main.c. This bit of code was apparently missed when rearranging the startup sequence, and ends up setting the first entry in the cell library path to a string that is clearly a format string for a printf subroutine, not an actual valid path. The code patch sets the first entry to a directory name defined by the technology passed as option -T on the command line. Reworked the method of the previous commit, which was supposed to prevent the substrate node from being tacked onto the end of black-box subcircuit stub definitions. Instead, the new method lets the substrate node be declared a new port of a black-box cell, but does not output that node in the subcircuit definition, by identifying that the port number isn't assigned (is equal to -1). Handled the more important place where substrate ports get added to the list of subcell ports, for the case of black-box circuits, which should not have any ports added beyond those that are specifically declared with port labels. Merge branch 'master' into work
- posted: June 22, 2017 at 3:00am version: 8.1 revision: 173
Corrected the "ext2spice blackbox on" mode such that it does not generate extra pins in the .subckt declaration representing implicit substrate connections, but only generates subcircuit pins for ports in the layout. Merge branch 'master' into work
- posted: June 21, 2017 at 3:00am version: 8.1 revision: 172
Corrected the DRC "extend" rule so that it matches the behavior of "overhang" with respect to situations like the diffusion between two gates in series without a contact, allowing the diffusion area to be smaller than the extend minimum because the diffusion is not really an extension since it continues under the next gate area. Corrected generation of property "LEFview" when reading LEF files into a magic database. It was setting the value to whatever the token was at the time, which was somewhat random. The value is ignored (so this is not truly an error) but for the sake of having a sensible value set, it is now set to "TRUE". Merge branch 'master' into work
- posted: June 19, 2017 at 3:00am version: 8.1 revision: 171
Added behavior for cells read from LEF files such that upon extraction, they are given a keyword "abstract" indicating that they represent an abstract view. Then if "ext2spice blackbox on" is used, "ext2spice" will generate stub entries for each of these views which indicates the name and order of all ports, so that the netlist can be used for LVS purposes without losing information about port connections. Corrected issue preventing crosshair from being turned off from the options menu (applied patch from Risto Bell). Corrected a (rare) error in which the DBTreeSrLabels() routine was not able to tell when it was searching on a triangular area for which a label touching the non-active edges of the triangle should not be counted as connected. Corrected net selection to use the connection mask of the supplied type to search. SelectNet() should probably be changed to take a mask to begin with instead of a type. Corrected lefWrite with a revised algorithm that erases each net out of the flattened cell def so that after writing out all port geometry, everything left is by definition an obstruction. Merge branch 'master' into work
- posted: June 12, 2017 at 3:00am version: 8.1 revision: 170
Corrected extraction error in which the substrate connection to other nodes may get ignored if there is no geometry in the parent node (i.e., the parent node only instantiates subcells but contains no material). Merge branch 'master' into work
- posted: June 7, 2017 at 3:00am version: 8.1 revision: 169
Removed line that clears the sticky flag from labels that are declared ports. There is no reason to do so that I am aware of. Merge branch 'master' into work
- posted: May 30, 2017 at 3:00am version: 8.1 revision: 168
Corrected the "lef write" routine to use the net selection routine SelectNet() instead of routines in DBConnect, so that the LEF write will connect together nets that are connected only by duplicate labels. Otherwise, making LEF files out of layouts that themselves contain LEF-like views will not find all parts of a port in a LEF-like cell if the parts are only connected by having a common label. Merge branch 'master' into work
- posted: May 26, 2017 at 3:00am version: 8.1 revision: 167
Corrected an error that used the wrong array for storing sticky label flags; it is rare but possible to overrun this array. Moved the sticky label flag to its own array of type boolean. Merge branch 'master' into work
- posted: May 13, 2017 at 3:00am version: 8.1 revision: 166
Corrected an issue caused by recent change in the handling of extracted subcircuits. The policy now is that subcircuits with ports that also contain active devices somewhere in the hierarchy are treated as normal subcircuits. Subcircuits with ports that have no devices are treated as black-box devices. Subcircuits that have neither ports nor devices are flattened and expunged from the netlist. Corrected an error that destroyed the bounding box of cells from "lef write" using property "FIXED_BBOX", when updating timestamps on cell read-in, making the cell 1 unit in size, and effectively unselectable. Merge branch 'master' into work
- posted: May 12, 2017 at 3:00am version: 8.1 revision: 165
Corrected an error that causes a crash if magic attempts to search connectivity on a label connected to space (due to the label having the same name as the net being searched for connectivity). Cleaned up additional problems with lefWrite, some pertaining to dbConnect which may have manifested elsewhere. Merge branch 'master' into work
- posted: May 11, 2017 at 3:00am version: 8.1 revision: 164
Corrected a problem with stacked contacts writing the wrong layers to LEF output. Corrected an error that was adding all types composing contacts to the list of types to output to the LEF file, instead of just those marked as ROUTE layers. Corrected read of .ext files to process port nodes for subcircuits; the subcircuit handling should only exclude descending into that cell to read subcells further down in the hierarchy. Merge branch 'master' into work
- posted: May 10, 2017 at 3:00am version: 8.1 revision: 163
Major overhaul of "lef write". The "lef write" command now flattens the cell for which LEF is being generated, as is appropriate for a LEF view. "lef write" works as advertised (but was being advertised as , not | , which is incorrect). The origin and bounding box are now correctly generated. Other updates: "def read" creates ports where PINS are declared. The "flatten" command preserves ports. "flatten" has a new option "-dotoplabels" which copies labels from the top level cell only when flattening. Final updates to make the subcircuit and msubcircuit extract statements as backwardly compatible as possible. Removed an edit swap file that got into the git push. Merge branch 'master' into work
- posted: May 8, 2017 at 3:00am version: 8.1 revision: 162
Updated handling of "device subcircuit" and "device msubcircuit" so that it correctly handles the number of nodes as the fourth argument. It also auto-detects the use of the substrate and node name at the end. But to accomodate the use of "msubcircuit" for diodes, it is necessary to have duplicate entries for source and for drain nodes. Merge branch 'master' into work
- posted: May 6, 2017 at 3:00am version: 8.1 revision: 161
Added more information to the output warning about not being able to find a vendor GDS file. This helps in tracking down the source of the problem, which is easy to happen if GDS files are moved around or deleted or paths are not set up correctly. Handled the somewhat obscure error of a device type like capacitor or diode that might have diffusion in one cell and a contact in another. The fix, however, handles any case where a device may be duplicated between cells and ensures that the extracted netlist does not contain duplicate devices. It is not foolproof but should catch cases in which split devices are generated by reading GDS files that are not created by magic. Merge branch 'master' into work
- posted: May 5, 2017 at 3:00am version: 8.1 revision: 160
Corrected an error with extraction in which some devices such as diodes may have extra one-terminal devices extracted if, for example, the device and contact are split between cells. But this does not solve the problem that such cases will duplicate the whole device in both subcells, however. Also, fixed an error with CIF and GDS reads in which flattening a cell on input (such as with "gds flatten true") will incorrectly draw the result of non-manhattan geometry if the flattened cell is flipped or rotated. Corrected an error with the "copyup" CIF/GDS operator. It would copy up only one level of hierarchy, and after that the last cell would be overwritten, which both undermined the copyup function and was a memory leak. Corrected the same code the right way this time---problem was not with the substrate node, but with the routine that determines whether or not to write out an 'X' record using the same method to determine whether it has ports, as the routine that actually writes the 'X' record. Merge branch 'master' into work
- posted: May 4, 2017 at 3:00am version: 8.1 revision: 159
Corrected error that outputs subcircuit 'X' records for subcircuits that have been absorbed into the parent and do not have .subckt records associated with them. This happens when the subcircuit has a substrate contact, as the substrate connection is automatically marked as a port. So substrate connections should not be counted when determining if a subcircuit should be ignored. Merge branch 'master' into work
- posted: April 6, 2017 at 3:00am version: 8.1 revision: 158
Corrected an error that would use an invalid interaction area to seed an area expansion to capture a label in subtree extraction. This can result in a huge check area and negate the benefit of the cookie-cutter division of the extraction method, resulting in potentially huge extraction runtimes. Corrected error that ran the parasitic cap visitation loop when "ext2spice hierarchy on" is used even if the capacitor threshold is infinite. This can result in a lot of false-positive error messages about nodes not being found. Merge branch 'master' into work
- posted: March 7, 2017 at 3:00am version: 8.1 revision: 157
Corrected problem with devices specified by property "device" in the cell having parasitic capacitances extracted which are part of the model and therefore double-counted. Merge branch 'master' into work
- posted: March 6, 2017 at 3:00am version: 8.1 revision: 156
Modified ext2spice to watch line length when generating output for subcircuit definitions and calls, and wrap lines around 80 characters. There is no particular attempt to limit lines to a specific amount, just to prevent ridiculously long lines that may exceed the internal limit of tools that read SPICE netlists and expect them to conform to some limit like 1024 or 4096 characters. Merge branch 'master' into work
- posted: March 2, 2017 at 3:00am version: 8.1 revision: 155
Corrected the parameter writing routine in ext2hier.c to match that of ext2spice.c. It was missing the lines at the end which write out any parameters that need to be simply copied verbatim (e.g., "m=1"). Corrected typo in extflat, otherwise the whole substrate capacitance correction thing fails. . . Merge branch 'master' into work
- posted: March 1, 2017 at 3:00am version: 8.1 revision: 154
A rather major fix to the extraction code. It was discovered that in cases where a node of a subcell shields a node in a top level cell but does not connect to the top level, no information about the shielding effect is passed back to the top level in the .ext file. Only connected nodes do this, though the "merge" lines. To solve this, it was necessary to ignore the capacitance adjustment in the "merge" lines, and instead generate a new entry in .ext files called "subcap" containing a substrate capacitance adjustment, including all adjustments from both connected and unconnected nodes. Merge branch 'master' into work
- posted: February 24, 2017 at 3:00am version: 8.1 revision: 153
Added some syntax variants to the default parasitic capacitance area and perimeter (to substrate) rules to allow specific types to be declared for the well plane, so devices like nwell resistor can be avoided for caculating parasitics (because the resistor body is effectively a floating node if the T-resistor model is not used). Changed the fringing capacitance to compute only type-to-space edges, which is nearly always the case and avoids generating many useless rules. Added a new wizard rule to output parasitic coupling information, similar to the existing one but with its own unique uses. Corrected the original macro set (the one which is enabled by default by configuring with --disable-new-macros) to match the recent change moving the colon and semicolon commands from being treated as special cases in the source code to being interactive macros in the standard macro setup. Corrected parasitic extraction, which was incorrect for the "defaultperimeter" command. Added substrate to the list of tiles marked as visited, such that connections to substrate are not considered floating nodes when using "ext2spice -F". Merge branch 'master' into work
- posted: February 21, 2017 at 3:00am version: 8.1 revision: 152
Fixed "ext2spice -F" for removing floating nodes, which was broken because it only flagged nodes that were output as FET terminals and ignored all others, resulting in all parasitics being removed from the output. Merge branch 'master' into work
- posted: February 18, 2017 at 3:00am version: 8.1 revision: 151
Corrected an error with hierarchical parasitic extraction. The "processed" flag was being set before the call to the function that checks it, so that it was always found true, causing only parasitics to substrate to be output. Also discovered that "ext2spice cthresh infinite" was setting a value for "infinity" assuming an integer number, which translated to floating point was not even especially large. Merge branch 'master' into work
- posted: February 16, 2017 at 3:00am version: 8.1 revision: 150
Revised the toolupdate command to run toolbar "configure" commands inside "catch {}", since use of "hidelocked" and "hidespecial" mean that the icons don't necessarily exist, and attempting to configure them (e.g., on the tag callback for the "see" command) will just generate an error. Corrections to previous update, mainly for arrays and fixed ("nocell") devices. Merge branch 'master' into work
- posted: February 14, 2017 at 3:00am version: 8.1 revision: 149
Expanded on the toolkit dialog window so that it displays the cellname and instance as well as the device, and allows the instance name to be changed from the dialog. Expanded the "dependency" callback to include checkboxes and selection menus. Added a "message" label to the types of widgets that can be added to the gencell dialog. Merge branch 'master' into work
- posted: February 10, 2017 at 3:00am version: 8.1 revision: 148
Corrected (hopefully) an error with extracting annular devices, in which a fix for source-drain shorted devices ended up breaking the code for annular devices. Changed the "snap" command so that it does not print a result when setting a snap type. "snap" with no arguments is equivalent to "snap list", and prints (or returns) the snap type as a string result. This change prevents unnecessary output from scripts that switch back and forth between the internal and user grids. Corrected the variable name used to indicate a suspend state so that the various scripts agree on when a window is in the suspend state. Merge branch 'master' into work
- posted: February 9, 2017 at 3:00am version: 8.1 revision: 147
Corrected screen coordinate transformation of elements such as those used by "measure"; otherwise, they get drawn at the edge of the window when the element is off-screen. Merge branch 'master' into work
- posted: February 8, 2017 at 3:00am version: 8.1 revision: 146
Changed a use of "string cat" to "append" to be backwards compatible with older versions of Tcl/Tk. Corrected the error (which shows up under some window managers but not others) that causes the toolkit dialog window to collapse in size and require manual resizing (problem not exactly solved; seems to be a Tk error, but changing the way the dialog window is rebuilt prevents the problem from being triggered). Merge branch 'master' into work
- posted: February 7, 2017 at 3:00am version: 8.1 revision: 145
Resolved issue with window focus and command entry window (due to Opts(redirect) being set outside of the command bound to XK_colon, when it should have been part of that command). Merge branch 'master' into work
- posted: February 6, 2017 at 3:00am version: 8.1 revision: 144
Corrected toolkit so that it generates random name suffixes instead of enumerating from 1; this avoids name collisions with cells in the same directory without having to check every directory. Also corrected the property read-in, which was limited to 128 characters and so tended to clip toolkit gencell parameter properties. Merge branch 'master' into work
- posted: February 3, 2017 at 3:00am version: 8.1 revision: 143
Corrected a side effect of preventing property generation in non- editable cells, which is the problem of setting the no-edit flag before reading properties in a .mag file. Merge branch 'master' into work
- posted: February 1, 2017 at 3:00am version: 8.1 revision: 142
Removed commented lines from toolkit. Revised extract behavior for read-only directories to extract into the current working directory (this was done previously, but only in very specific cases). Normalized use of namespaces for closewrapper, otherwise it becomes impossible to properly overlay the command. Removed edit swap file that got into the git push. Merge branch 'master' into work
- posted: January 31, 2017 at 3:00am version: 8.1 revision: 141
Corrected the "property" command to not change/create properties in a NOEDIT cell, and changed the toolkit to not attempt to do so. Merge branch 'master' into work
- posted: January 30, 2017 at 3:00am version: 8.1 revision: 140
Toolkit correction to avoid confusion when the gencell dialog is up for an instance and the instance gets deleted; the patch prevents "Apply" or "Okay" from attempting to operate on the deleted instance. Fixed a typo (missing close-brace) Merge branch 'master' into work
- posted: January 28, 2017 at 3:00am version: 8.1 revision: 139
Correction to toolbar to prevent error on callbacks using "toolupdate" which did not properly call the new window hierarchy. Merge branch 'master' into work
- posted: January 27, 2017 at 3:00am version: 8.1 revision: 138
Changed toolbar not to be rebuilt during suspend mode. If a techfile locks layers and a script locks and unlocks them, then the continuous redrawing of the toolbar greatly increases the time to run the script. Merge branch 'master' into work
- posted: January 25, 2017 at 3:00am version: 8.1 revision: 137
Corrected use of Opts(focus) when in batch mode, where the variable does not exist. Corrected obscure error caused by moving out of a window and then calling drawing commands from the toolkit without a referenced window. Merge branch 'master' into work
- posted: January 23, 2017 at 3:00am version: 8.1 revision: 136
Enhanced the "port" command to allow a port to be identified without selection, by using "port" or "port ". Also added command "port last" to identify the highest used port number. Updated the texthelper widget to allow ports to be created or removed as part of text management. Corrected behavior such that the "pick" tool does not copy locked layers. Modified "Save All and Quit" to be more obvious about failing due to modified contents in (UNNAMED). User will be prompted to select a valid name, and if all goes well, magic will then save the new file and exit without further comment. Merge branch 'master' into work
- posted: January 7, 2017 at 3:00am version: 8.1 revision: 135
Catch errors in toolkit check and draw procedures so that the errors are printed, and they don't leave magic in a suspended state. Fixed infinite looping if "macro search" is used without being followed by a search term. Also added behavior that "imacro" when used to return a list only returns results that are interactive macros. Added basic callback to parameter entries to automatically run the routine that checks parameters for out-of-bounds values, whenever the entry gets a Return key or focus-out event. Merge branch 'master' into work
- posted: January 3, 2017 at 3:00am version: 8.1 revision: 134
Corrected error preventing use of gencell from the command line. Merge branch 'master' into work
- posted: January 1, 2017 at 3:00am version: 8.1 revision: 133
Implemented command history retrieval for the window command entry. Corrected (by catching and ignoring) a one-time startup error that can happen on running the cursorview procedure. Corrected "closewrapper" command, which was not using the proper hierarchy since the paned window was added. Merge branch 'master' into work
- posted: December 31, 2016 at 3:00am version: 8.1 revision: 132
Corrected redirect of print statement to the terminal during initialization, which had been messed up by a change in the console printing to accomodate the command entry windows. Added keyword search capability to the "macro" command to get a refined list. Corrected macro behavior if an unregistered window is given as the first argument, so that it does not offset the list of arguments. Added feature to the "macro" command to allow help text to be saved and retrieved for each macro. Added Opts(autobuttontext) to control whether or not the routine that automatically generates accelerator text for menu buttons is called, in case a user wants to do customization. Merge branch 'master' into work
- posted: December 30, 2016 at 3:00am version: 8.1 revision: 131
Change tkcon "-under" commands to "-underline" since the abbreviation was generating an error on one platform. Added a new script to automatically fill in key binding names on the menu buttons. Changed wrapper to do menu button accelerators properly using the menu button -accelerator option. Also changed the 'macro list' command to return the key and value pairs, in reverse order (command first, then key) so that a reverse lookup hash can be made easily, for doing automatic generation of menu button accelerators (this procedure has not been written yet). Additional correction to avoid making changes to the texthelper at all when it is withdrawn. Merge branch 'master' into work
- posted: December 29, 2016 at 3:00am version: 8.1 revision: 130
Corrected problems with the texthandler GUI stemming from problems with the "setlabel" command when applied to labels not in the edit cell. Changed so that "setlabel" returns no values from labels that are not editable (because they are not in the edit cell), and does not attempt to modify labels that are not editable. The texthelper was changed so that it displays only results for the first editable selected label. Merge branch 'master' into work
- posted: December 27, 2016 at 3:00am version: 8.1 revision: 129
Quick hack to allow the "Delete" key to be mapped. There is no keysymdef definition for it. The hack lets "macro <del>" stand in for the delete key, which is non-standard but matches the string that has always been returned when the key is pressed. A better method allowing character codes to be entered is needed, though. Corrected an error in PDK gencell procedure that could confuse instance names in different cells and end up modifying the wrong one. Merge branch 'master' into work
- posted: December 26, 2016 at 3:00am version: 8.1 revision: 128
Corrected error that crashes magic if the "identify" command is used to attempt to change the instance ID of a top-level window cell (which is not like other instances and has no parent celldef). Corrected a typo affecting Cell -> Save as menu item. Merge branch 'master' into work
- posted: December 24, 2016 at 3:00am version: 8.1 revision: 127
Modified the layout wrapper window so that the layout and command entry windows exist in a paned window with a movable sash, so that the command entry window can be resized as needed. Made a number of changes to facilitate the command entry window in a layout window. This included un-hardwiring the colon key as a hack in the graphics code, to be replaced by doing 'imacro XK_colon ":"', allowing the colon to be replaced by a different macro. Then, the Tcl_printf statement was not tied to the console interpreter, which allowed print statements internal to magic to be redirected to places other than the console. Finally, the proper commands and scripts were put in place to make the command input window behavior match the console as much as possible. The result is not perfect but works okay if one either operates from the console or from the command windows but does not try switching between them much. Changed the TkShell code so that it does not use a slave interpreter, which just complicates the process of redirecting stdin/stdout/stderr. Merge branch 'master' into work
- posted: December 23, 2016 at 3:00am version: 8.1 revision: 126
Some additional features for the wrapper view, including a new dialog for new cell and save cell, and new menu items for clone window and set window editable. Fixed a very long-broken tool identifier message in the window header. Corrected the 'box' command's handling of area, which needed to be type dlong to accomodate maximum length * width values. Merge branch 'master' into work
- posted: December 20, 2016 at 3:00am version: 8.1 revision: 125
Cleaned up the toolkit data entry window a bit. Added "Okay" button to work in addition to "Apply" and "Cancel" although I find such things redundant. Corrected some problems with the text/label helper widget; most of these changes were in the widget script, although noting that "setlabel sticky" returns a boolean but does not accept a boolean as an argument, this was corrected in the setlabel command. Merge branch 'master' into work
- posted: December 19, 2016 at 3:00am version: 8.1 revision: 124
Update to toolkit resolves issues of units and parameters names by adding a client procedure_convert that takes a dictionary of SPICE netlist parameter names and values and converts to a dictionary of toolkit parameter names and values. Additional fixes for creating or editing gencell devices from the command line. Merge branch 'master' into work
- posted: December 16, 2016 at 3:00am version: 8.1 revision: 123
Correction to last change for dbGetUseName to detect 1D arrays as well as 2D arrays from a name without array indexes. Also updated toolkit significantly; corrected problems with pushstack/popstack (which did not save and restore view position), and with suspendall/ resumeall (which failed due to the unusual fact that the 'incr' command accepts an uninitialized variable name without comment). Merge branch 'master' into work
- posted: December 15, 2016 at 3:00am version: 8.1 revision: 122
Developed a new toolkit API. Not quite finished yet. Merge branch 'master' into work
- posted: December 14, 2016 at 3:00am version: 8.1 revision: 121
Several enhancements to do with arrays: (1) "array" command now has option "-list" to generate results as a Tcl list. (2) "select cell" now accepts without any array indexes as synonymous with the lower left array instance. (3) "what" command returns array indexes of selected instances. Corrected a focus issue with the command entry window that shows up if the command entry window option is set to 1 default. Merge branch 'master' into work
- posted: December 13, 2016 at 3:00am version: 8.1 revision: 120
Corrected a script error that undermines the whole PDK; not likely to be seen outside of some of the more obscure script-based functions. Merge branch 'master' into work
- posted: November 28, 2016 at 3:00am version: 8.1 revision: 119
Implemented a feature found on a modified version of ext2spice in which the terminal label "S$" and/or "D$" can be used to force the order of drain and source in the netlist output. Corrected SPICE output so that subcircuits without an alphabetic character as the first character, such as subcircuits referenced by a full path name, do not output illegal SPICE name syntax. Merge branch 'master' into work
- posted: November 26, 2016 at 3:00am version: 8.1 revision: 118
Corrected 'lock' symbol on locked layers to force it to be drawn on top; otherwise, some layers may obscure it completely. Corrected the callback to the toolbar redraw so that 'tech revert' forces a redraw of the toolbar. Changed behavior of extractor so that if it attempts to extract a cell in a read-only directory, it will instead write the .ext file to the current directory if there is no .mag file of the same name in the current directory (the need for library management is implied, and will be done soon, but meanwhile this will suffice for most purposes). Extflat has the complementary behavior but relies on the write behavior and does not check for a .mag file. Removed diagnostic message from debugging. Merge branch 'master' into work
- posted: November 25, 2016 at 3:00am version: 8.1 revision: 117
Found that the Tk graphics event ConfigureNotify was failing to update the backing store size to fit a resized screen in the case of a window resize caused by an internal event such as adding or removing the toolbar. On some systems, or possibly VNC sessions, this includes resizing of the entire window. Fixed this by explicitly calling the backing store create routine for ConfigureNotify events. Merge branch 'master' into work
- posted: November 23, 2016 at 3:00am version: 8.1 revision: 116
Revised tools.tcl so that suspend/resume and pushstack/popstack will work with "magic -dnull"; otherwise, they fail due to use of tk commands that are not available in null graphics mode. And one more addition to the toolkit, to add a selectable list entry for gencells. Merge branch 'master' into work
- posted: November 21, 2016 at 3:00am version: 8.1 revision: 115
Cleaned up the wrapper and worked on the gencell methods. Removed items from the menu that say 'unimplemented function'. Added separators to the gencell menu procedures, and added a checkbox as well. Merge branch 'master' into work
- posted: November 18, 2016 at 3:00am version: 8.1 revision: 114
Added a rule for hierarchical standard-cell parasitic extraction to treat LEF ports with no USE defined as use SIGNAL as long as the port direction is specified as INPUT or OUTPUT. Merge branch 'master' into work
- posted: November 10, 2016 at 3:00am version: 8.1 revision: 113
Corrected the LEF read routine to address several problems: (1) "lef write" with no other options is now a legal command, as is shown by "lef help". (2) Polygons in LEF macro ports are now written out as geometry instead of being ignored during "lef write", (3) Multiple polygons in a PORT record are handled correctly. Merge branch 'master' into work
- posted: November 5, 2016 at 3:00am version: 8.1 revision: 112
Corrected default key bindings: Old 'labelpaint' corrected to 'label', and diagonal stretch bindings (which are not legal commands) removed. Added an item to the "Options" menu that allows the toolbar to hide layers which are locked, resulting in a less-cluttered toolbar. Merge branch 'master' into work
- posted: October 26, 2016 at 3:00am version: 8.1 revision: 111
Corrected the "tech revert" command, which was changing the active layer mask but failing to correct the contact paint/erase tables as was done for the "tech lock" and "tech unlock" cases. Merge branch 'master' into work
- posted: October 22, 2016 at 3:00am version: 8.1 revision: 110
Corrected the generation of parameters in "device" properties. Since the property overrides all internal device extraction, no device properties will be listed, so instead properties are saved and copied verbatim to the spice output (these properties don't scale, however, so care must be taken with the 'scale' option for ext2spice). Merge branch 'master' into work
- posted: October 21, 2016 at 3:00am version: 8.1 revision: 109
Added extraction method if cell has a property name "device", which is a string representation of the device output in the .ext file, other than values being in lambda (which will be converted according to scale in the .ext file). This replaces any device that may be present in the cell, so it should only be used to annotate a cell that represents a single device. This allows any arbitrary device to be extracted from a subcell without the need for an extraction method. Merge branch 'master' into work
- posted: October 9, 2016 at 3:00am version: 8.1 revision: 108
Error in "drc why", and possibly all DRC checking, due to rectangle "square" being self-modified within a double loop over itself, causing the check area to shift unpredictably. Merge branch 'master' into work
- posted: September 5, 2016 at 3:00am version: 8.1 revision: 107
Added handling to .mag file reads to specifically ignore control-M characters at the ends of lines; otherwise, these characters get embedded in the label text and cause newlines in SPICE output from ext2spice, creating invalid SPICE files. Merge branch 'master' into work
- posted: July 28, 2016 at 3:00am version: 8.1 revision: 106
Fixed incorrect wrapper entry which had "grif" instead of "grid". Merge branch 'master' into work
- posted: July 21, 2016 at 3:00am version: 8.1 revision: 105
Updated configure script to extract the paths for the Tcl and Tk lib and include files, so that subsequent checks for those files are not disjoint from the contents of tclConfig.sh and tkConfig.sh. Resolved two additional errors when using command "see" with either option "$" or "connect". In addition to superfluous error messages, the former was incorrectly documented, and the latter was not documented at all. Merge branch 'master' into work
- posted: June 22, 2016 at 3:00am revision: 104
version: 8.1 Implemented some preliminary changes to extresist for treating subcircuits as black-box entities. This work is not complete. Also, corrected wrapper so that use of "see" with non-layer arguments such as "allSame" will not generate an error message (bugzilla issue 41). Merge branch 'master' into work
- posted: June 11, 2016 at 3:00am version: 8.1 revision: 103
Minor correction to magic.tcl script, which was still trying to unset the variable "cellname", which had been changed to "celllist". Merge branch 'master' into work
- posted: June 9, 2016 at 3:00am version: 8.1 revision: 102
Some preliminary changes to extresist for running extraction on standard cell circuits. Also: Did something I should have done long ago, which is to allow multiple filenames on the command line, and load them appropriately according to the file extension, in order. That allows one to read LEF and DEF files, magic database files, GDS files, CIF files, and TCL scripts from the command line. This makes it easier for another application (like qflow) to launch magic and run a number of commands to set up a specific display, or do some action, but leave magic running interactively once that setup is done. Corrected ordering of key strings for LEF class types, or else class "OUTPUT" gets confused with class "OUTPUT TRISTATE". Merge branch 'master' into work
- posted: June 1, 2016 at 3:00am version: 8.1 revision: 101
Corrected error that prevented "lef read" from annotating ports that are polygons instead of rects. This forced me to combine two similar linked rectangle structures into one. Re-ran configure with Tcl/Tk so that the corresponding defs.mak file ends up in the distribution. Merge branch 'master' into work
- posted: May 24, 2016 at 3:00am version: 8.1 revision: 100
Made two corrections in parts of the code that were breaking the non-Tcl/Tk based compile. Merge branch 'master' into work
- posted: May 23, 2016 at 3:00am version: 8.1 revision: 99
Finally got rid of that error that fails to update the toolbar when a command like "see" is issued; layer names were being appended with a space character, and so would fail to match any known layer name. Extended the method of disambiguating file-not-found errors and parsing errors, and printing the parse errors, to the system and local startup files. Merge branch 'master' into work
- posted: May 21, 2016 at 3:00am version: 8.1 revision: 98
Added warning to GDS reads when a path reverses on itself. Magic handles this cleanly, but other GDS readers may erase such a path. Changed the incorrect output message "this action is undoable" for LEF and DEF reads to the correct, and clearer, "this action cannot be undone". Changed the behavior of the reading and evaluating of the startup file so that (1) failure to find or read the file is disambiguated from failure due to an error in the file; and (2) errors in the startup file are output to the terminal. Additional change not to complain unnecessarily about cells read from a GDS file that are seen more than once, because all cells that have been read in by forcing post order and looking ahead fall in that category. Merge branch 'master' into work
- posted: May 10, 2016 at 3:00am version: 8.1 revision: 97
Corrected a long-standing error with "gds readonly", as subcells were parsed without passing the filename to the routine, which caused the GDS file position to be lost; if written back out, the cell would not appear in the file. Merge branch 'master' into work
- posted: May 9, 2016 at 3:00am version: 8.1 revision: 96
Modifications to allow layers to not participate in extraction (fix to segfault problem from previous commit). Extended "plot pnm" section so that keyword "default" can be used to load default colors; then individual colors can be modified afterward. This retains backwards compatibility. Added error message output when a "plot pnm" drawing style is unknown. Added proper deletion of existing saved geometry if the "gds flatten" option causes an entire cell's contents to be saved after reading. Also added a warning message if saved geometry is never instantiated, indicating information lost during the GDS read. Merge branch 'master' into work
- posted: May 6, 2016 at 3:00am version: 8.1 revision: 95
Revised the system of the "fault" operation in cifinput. The keyword "fault" is not deprecated (treated like "templayer"). Instead of a fault condition causing all paint to be pulled up to the next layer of hierarchy, the opcode "copyup" can be used to copy up only the geometry generated to the next level of hierarchy. This allows, for example, contact cuts with no context to be identified and copied up, without affecting any other layers. Merge branch 'master' into work
- posted: May 5, 2016 at 3:00am version: 8.1 revision: 94
Fixed option for processing faults when cells are read out of order and "ordering" option is not enabled. Merge branch 'master' into work
- posted: May 2, 2016 at 3:00am version: 8.1 revision: 93
Added a method for which "resist" in the "extract" techfile section can be given a list of types followed by "None" instead of a value, and those types will not participate in extraction. This avoids problems with implant layers like silicide block or thick oxide, or non-mask layers like identifiers and boundary markers, that can cause problems with LVS by being extracted as a network and connecting through pins, even though those nets do not terminate on any active device. Corrected post-order GDS reading with fault-based flattening (from previous check-in, error does not appear in any distribution tarball). Merge branch 'master' into work
- posted: May 1, 2016 at 3:00am version: 8.1 revision: 92
Modified handling of "fault" layer to revert to normal (non-faulting) GDS/CIF reads if the faulted layers cannot be copied up into the next level of hierarchy (e.g., if the cell that faults is a top-level cell). Merge branch 'master' into work
- posted: March 16, 2016 at 3:00am version: 8.1 revision: 91
Corrected an error with the FIXED_BBOX property that causes it to be written to every file, and fails to write the property header to the file so that it causes an error if read back in. Merge branch 'master' into work
- posted: March 7, 2016 at 3:00am version: 8.1 revision: 90
Changed definition of lab_font to "signed char" to correctly identify as signed on the ARM-based gcc compiler. Revised previous FIXED_BBOX property so that it is not kept internally as a property, but is generated into the .mag output as a property string whenever the CD_FIXEDBBOX flag is set. That way, the .mag property record holds the value, but the value does not have to be sync'd to changes in the internal scalefactor. Merge branch 'master' into work
- posted: February 21, 2016 at 3:00am version: 8.1 revision: 89
Corrected property generation from LEF file reading, which was not properly allocating memory for the property string, and therefore causing the string to be overwritten with other data, as well as being a potential memory error if the cell is deleted. Also, created unique property FIXED_BBOX that allows LEF macro bounding boxes to preserve the bounding box information in a .mag file. Merge branch 'master' into work
- posted: February 16, 2016 at 3:00am version: 8.1 revision: 88
Corrected non backwards-compatible treatment of substrate, which was failing to note when a tech file does not have any information about a substrate plane or substrate connections, and therefore would dump an unconnected substrate node called "(none)" while flagging a warning to the terminal. Merge branch 'master' into work
- posted: February 15, 2016 at 3:00am version: 8.1 revision: 87
Several minor changes, including a syntax fix for detecting the missing 3rd argument to "delete cell" Merge branch 'master' into work
- posted: December 7, 2015 at 3:00am version: 8.1 revision: 86
Corrected an issue in which a crash will be caused by failing to have the optional "plot" section in the techfile, but giving a plot command anyway, e.g., "plot pnm". Since "plot pnm" is able to use magic layout styles as defaults for rendering, it can simply flag a warning message, set up the defaults, and continue. Merge branch 'master' into work
- posted: November 15, 2015 at 3:00am version: 8.1 revision: 85
Changed the magic launch script from /bin/sh to /bin/bash because it contains a bash-ism. Really, though, this needs to be worked out in the configure script and handled appropriately, or perhaps just find a standard sh workaround for the bash syntax. Corrected a second instance needing protection against integer overflow in drcCifCheckArea(). Merge branch 'master' into work
- posted: October 22, 2015 at 3:00am version: 8.1 revision: 84
Corrected integer overflow error in drcArea(). Merge branch 'master' into work
- posted: October 12, 2015 at 3:00am version: 8.1 revision: 83
Lifted restriction on DRC scalefactor requiring it to be less than 256. This is unnecessary, and must have been left over from an earlier implementation. Merge branch 'master' into work
- posted: September 24, 2015 at 3:00am version: 8.1 revision: 82
Corrected an inequality that would prevent text labels on layer zero from being able to be made sticky. Corrected a long-standing error that can cause false DRC errors when the "mark" paint method fails to unmark tiles that get clipped outside the area boundary. Fixed by running the unmark search with an area expanded by one on all sides. Modified LEF macro reading behavior such that if a cell is already defined and loaded (as from a GDS file or magic database file), then it is used instead of the LEF macro geometry in the LEF file. It does not attempt to read a cell from disk, as previously done if encountering the "FOREIGN" keyword. The existing cell is modified, however, to take the bounding box defined in the LEF file, since the relationship between the LEF bouding box and a foreign source such as a GDS file is only found in the LEF file. Corrected the LEF read routine so that a section skip does not get tripped up by "END" followed by "END". Merge branch 'master' into work
- posted: September 11, 2015 at 3:00am version: 8.1 revision: 81
Corrected commands "drc *halo" and "drc *stepsize", which were missing an argument to the call to cmdScaleCoord(), but were also incorrectly converting the result (which is in internal units) into DRC units (according to the drc "scalefactor" value). Merge branch 'master' into work
- posted: September 7, 2015 at 3:00am version: 8.1 revision: 80
Added patches from Ryan Schmidt, updating a deprecated use of sys/types.h to obtain a definition of FD_SET (modern usage is apparently to include sys/select.h), and setting return values for TxTclDispatch in two places where they were missing. Merge branch 'master' into work
- posted: September 5, 2015 at 3:00am version: 8.1 revision: 79
Updated configure script for Mac compile (thanks to Ryan Schmidt). Merge branch 'master' into work
- posted: September 2, 2015 at 3:00am version: 8.1 revision: 78
Modified polygon read routine to avoid printing false-positive error messages about polygons with < 4 points. Merge branch 'master' into work
- posted: September 1, 2015 at 3:00am version: 8.1 revision: 77
Corrected missing initialization of crs_flags. Modified latest correction to match the version done for magic-8.0. Merge branch 'master' into work
- posted: August 25, 2015 at 3:00am version: 8.1 revision: 76
Fixed port boundary line error. Previous comments were for netgen, failed to note that magic-8.1 was being logged, and that due to compiling without cleaning up. Reverting; this check-in should be ignored. Merge branch 'master' into work
- posted: August 20, 2015 at 3:00am version: 8.1 revision: 75
Corrected an infinite loop caused by lack of a return character after ".ends" (seems to be unique to that situation), and a segfault due to having a cell with no components other than calls to uninstantiated subcircuits (recently added code references CurrentCell without checking if it exists). Corrected maketoolbar to allow a minimum of one column of toolbar icons instead of the previous minimum of two. Merge branch 'master' into work
- posted: July 31, 2015 at 3:00am version: 8.1 revision: 74
Corrected the inability to use "load-nowindow" if there is no existing layout window. Corrected toolbar window height calculation according to fix suggestion from Risto. My own window manager setup does not expose the problem. Merge branch 'master' into work |
- posted: July 26, 2015 at 3:00am version: 8.1 revision: 73
Implemented "load -nowindow", which calls DBWloadWindow with NULL for the window value, and uses the NULL value to bypass any actions associated with a window or edit use. Merge branch 'master' into work
- posted: July 24, 2015 at 3:00am version: 8.1 revision: 72
Corrected "tech load" so that "-nooverride" is ignored as an option but does not otherwise cause an error. Corrected the usage statement so that it mentions "-override" but not "-nooverride". Merge branch 'master' into work
- posted: July 23, 2015 at 3:00am version: 8.1 revision: 71
Removed the "-nooverride" option from "tech load". "-nooverride" is now the default behavior. However, the flag that prevents the overriding is removed after the complete startup sequence, so that use of "tech load" from the command line is not prohibited just because "-T" was passed to magic on the command line. Tech loading from a .mag cell's contents is restricted to the single case that the entire startup sequence has completed without a technology file being specified. Merge branch 'master' into work
- posted: July 21, 2015 at 3:00am version: 8.1 revision: 70
One more attempt at a sensible arrangement of handling startup files and command line options for technology file searching and loading. Merge branch 'master' into work
- posted: July 19, 2015 at 3:00am version: 8.1 revision: 69
Corrected the previous "fix", where initialization exit routines were being run when TechLoad() was called only to load a new extract, DRC, or GDS input/output style. In these uses, the calling routine always calls the exit routine specific to the single section being loaded, and the other exit routines should not be called at all. Merge branch 'master' into work
- posted: June 15, 2015 at 3:00am version: 8.1 revision: 68
Made some changes to dbcConnectFuncRCS to match similar changes made recently for database/dbConnect.c in function dbcConnectFunc regarding stacked contacts. Additional changes similar to the last set; moved post-load initializations, scaling, and plane change checks into TechLoad(), since they must be run every time a new technology file is loaded. Merge branch 'master' into work
- posted: June 12, 2015 at 3:00am version: 8.1 revision: 67
Found what was presumably the main error in the tech loading, which is that the "tech load" command would re-initialize the sections with styles (extract, cifinput, cifoutput), but in other places use of TechLoad() would not do this, allowing the old and deprecated styles to still be listed in the style table. Probably overkill, but refined the last bug fix such that the first call to TechLoad() to check the validity of the tech file makes certain that the first non-comment line of the file is the keyword "tech". To get that far, the file would have to have the .tech extension but not be an actual magic tech file. But, hey, just to be on the safe side. Merge branch 'master' into work
- posted: June 5, 2015 at 3:00am version: 8.1 revision: 66
Corrected the behavior of "tech load", which starts re-initializing various sections before determining if the requested tech file exists or is readable, such that the entire database can be hosed by doing, say, "tech load blah". Added a special case initmask == 2, which will open the tech file, read the first line, close the file, and return. Any error during that time returns 0, allowing the calling routing to catch and handle the case of a bad tech file before doing permanent damage to the database. Merge branch 'master' into work
- posted: June 2, 2015 at 3:00am version: 8.1 revision: 65
Implemented, at least in part, Risto's scheme of having a site-defined pre-initialization script. Merge branch 'master' into work
- posted: May 31, 2015 at 3:00am version: 8.1 revision: 64
Implemented a new command "xor" that is able to perform LVL (layout-vs.-layout) by removing all geometry that is the same between two cells. Normally, one would flatten at the top level before running "xor". After noticing that the documentation defines sidewall capacitance referenced to 2 lambda, I realized that when using "units microns", if the capacitance is then supposed to be referenced to 1 micron, then the value needs to be divided by two. Merge branch 'master' into work
- posted: May 6, 2015 at 3:00am version: 8.1 revision: 63
Corrected an error that incorrectly scales the sidewall overlap cap as an area capacitance, not a perimeter capacitance. Merge branch 'master' into work
- posted: May 2, 2015 at 3:00am version: 8.1 revision: 62
Corrected an error with sidewall capacitance, which because it is referred to a specific distance, does not scale (provided that the linear model is valid, which is somewhat doubtful). Corrected an error that prevented the "defaultperimeter" statement in the extract section of the techfile from registering the perimeter capacitance to substrate (all other sideoverlap values were not affected). Merge branch 'master' into work
- posted: April 28, 2015 at 3:00am version: 8.1 revision: 61
Corrected an error that prevented coupling capacitance calculations in the case of the older extraction style without substrate handling. Merge branch 'master' into work
- posted: April 22, 2015 at 3:00am version: 8.1 revision: 60
Corrected an error in which the index into CIF layer names was confused with the index into generated layers in cifinput, potentially causing a crash on cif/gds reads when reading in a label. Merge branch 'master' into work
- posted: April 16, 2015 at 3:00am version: 8.1 revision: 59
Corrected a problem in which the "*bypass" command increments the command reference number; because "*bypass" commands are generated by the background DRC, and because the selection mechanism uses the last command number to determine if selection commands are called multiple times in a row, the background DRC interferes with the incremental (tile, chunk, net) selection mechanism. Modified to avoid incrementing the command count on "*bypass", so that only typed or sourced commands will reset the selection mechanism. Merge branch 'master' into work
- posted: April 5, 2015 at 3:00am version: 8.1 revision: 58
Corrected substrate node merging to accomodate instance arrays. Previously, the array indexes were being left out, resulting in names that ext2spice could not parse. Merge branch 'master' into work
- posted: April 2, 2015 at 3:00am version: 8.1 revision: 57
Extended the use of parameters to include all device types; this supports a number of variants of SPICE syntax that allow parameters on low-level components that are not part of the standard SPICE3 syntax. Additional correction to assign labels when searching for a child use's substrate node. Otherwise, labeled substrates will not match the name used in the child's .ext file. Added substrate extraction for arrays to complete the substrate extraction method. Merge branch 'master' into work
- posted: March 28, 2015 at 3:00am version: 8.1 revision: 56
Finally corrected some of the main problems with the substrate extraction, resorting to a few global variables to take care of it. Merge branch 'master' into work
- posted: March 24, 2015 at 3:00am version: 8.1 revision: 55
Corrected an error which would not connect zero-area labels to a node region if they only touched material in another cell but were not overlapped by it. Merge branch 'master' into work
- posted: March 20, 2015 at 3:00am version: 8.1 revision: 54
Corrected error in "drc why", where error message printing routine was incorrectly translating the tile area back to top-level coordinates, when the search area had already been converted to local coordinates. Discovered a stupid error with the "sticky labels" (labels not attached to anything in their own cell, but placed on top of material in a subcell, for example) in which the check for the label being inside the search area had the two arguments reversed, leading to a "no" result every time. Added a long-missing feature to scale text using rendered fonts when scaling the database grid. Merge branch 'master' into work
- posted: March 19, 2015 at 3:00am version: 8.1 revision: 53
Reverted code for scaling cell to go back to using DBCellEnum(). Found the real underlying reason for the errors, which was the use of cu_extended as the bounding box rectangle when calling DBPlaceCell(). This corrupts the cell plane. Putting much of the latest change to the Cell plane cleanup back the way it was. The eventual conclusion is that DBCellEnum really does do (theoretically) an enumeration of unique cell instances without repeats. The repeats that are showing up in the GDS read are apparently a result of a corrupted Cell plane. Might be due to using plane 0 for writing GDS data, and then swapping planes with a database cell. . .? A few corrections to the previous check-in. Newest code works well, but faults that propagate to the top level cause the top level to be deleted, which needs to be addressed. Corrected an apparently very long-running error in which the routine that deletes cell planes calls the routine to delete cell uses found there, in spite of the fact that the cell plane is constructed such that uses may appear multiple times. When the use is deleted more than once, memory corruption occurs. Magic version 8.0 needs the same change. Merge branch 'master' into work
- posted: March 18, 2015 at 3:00am version: 8.1 revision: 51
Split the extraction devices for "diode" into "pdiode" and "ndiode", noting that the SPICE "D" device always has anode and cathode pins in the same position; but drawn layout will have the diffusion as the identifying layer. Therefore, a pdiode should be written out with the identifying layer node first, followed by the well, and an ndiode should be written out with the substrate connection first, followed by the identifying layer node. Attempted to correct the fault processing of GDS input. This seems to have problems when a faulted cell has subcells in it that need to be pulled up to the next level of hierarchy. Usage of the "fault" method for "cifinput" should be considered highly unstable. Corrected an error in the CIF "squares" generator where areas of connected tiles that were overlapping but not themselves connected would be processed twice. Merge branch 'master' into work
- posted: March 17, 2015 at 3:00am version: 8.1 revision: 51
Changed the feedback structure (again!) to a method using a reference counter, which results in a big speedup for certain uses like "cif see" that can create a lot of feedback entries all at once. Really ought to be storing string entries in a hash table, though. Finally found a clever way to get around the perennial problem of reading GDS from sources that define partial structures like diffusion without N or P implants, or contacts without both connecting layers, that are fundamentally incompatible with magic's database. I have added a keyword "fault" to the cifinput description. This is just like "templayer", but defines a series of boolean operations which will flag these kind of structures. When the "fault" descriptions are present in the cifinput section, cells containing such incompatible geometry will be flattened. In the worst case, this may cause large portions of the input to be flattened, but in my experience, these type of structures tend to be restricted to contacts, contact arrays, and transistors, and don't expand more than one level of hierarchy. The result, though, is no more geometry lost because cells define partial geometry. This feature largely replaces the more ad-hoc "gds flatten" option. Removed the requirement that "device capacitor" must include an areacap value, since modeled devices will take length and width, and ignore any value given. Extended the capacitor extraction to include capacitors defined on two different layers, or modeled parasitics (layer to substrate; e.g., a pad may have a precisely characterized parasitic model, and should not rely on simple parasitic extraction). The terminal type for a modeled parasitic to substrate may be given in the same way as the substrate, that is, "space/w". Merge branch 'master' into work
- posted: March 16, 2015 at 3:00am version: 8.1 revision: 50
Extension of extraction method allows device terminals to be on a plane other than the plane of the device identifier type; further, there can be multiple device terminals stacked on multiple planes; and finally, the substrate (e.g., "space/w") can be declared as a terminal type. This allows definition and correct extraction of, for example, ESD diodes between ndiffusion and the substrate. Corrected a bad error stemming from a misunderstanding of the DBCellEnum() routine, which processes cell uses in a way that is not necessarily calling each one exactly once. This assumption causes the cell scaling to fail by processing some uses' transforms more than once. Replaced with a hash enumeration of cd_idHash. Made a quick attempt to see what happens if DBCellEnum is replaced by a hash enumeration, but that did not work and I conclude that historic use of DBCellEnum is correct, although I do not entirely understand the difference between that and a hash enumeration. Merge branch 'master' into work
- posted: March 14, 2015 at 3:00am version: 8.1 revision: 49
Corrected a crash condition that can occur if magic is passed the name of a nonexistant technology file. Merge branch 'master' into work
- posted: March 12, 2015 at 3:00am version: 8.1 revision: 48
Corrected an ext2sim error that would crash on devices with only one terminal identified. Merge branch 'master' into work
- posted: March 10, 2015 at 3:00am version: 8.1 revision: 47
Corrected another hidden error related to gridlimit that caused a crash on CIF reads when the limit is zero (no limit). Merge branch 'master' into work
- posted: March 9, 2015 at 3:00am version: 8.1 revision: 46
Preliminary code that allows terminal types of a device to be on a different plane than the device identifier type. For now, this makes use of the existing substrate search routine, and has the restriction (like the substrate) that only one electrical node may exist under the area of the device identifier type. Also, the search only occurs if no (other) terminals are found connected to the device identifier type on its own plane. The new method works for capacitors where top and bottom types are defined on different planes. It must be cautioned that the capacitance will be double-counted if a parasitic capacitance is defined between the two types. Additional correction to remove added whitespace introduced by the solution found on stackoverflow for parsing command-line arguments. Merge branch 'master' into work
- posted: March 5, 2015 at 3:00am version: 8.1 revision: 45
Corrected shell launcher script to preserve quotes in arguments, as was done recently for netgen-1.5. Merge branch 'master' into work
- posted: February 26, 2015 at 3:00am version: 8.1 revision: 44
Corrected error in which lack of a gridlimit statement causes the grid limit to be set to zero and results in a divide-by-0 error. Corrected the "box" command so that "box position ... -edit" and others work as advertised; also modified the behavior so that the "-edit" switch is valid for all "box" command options. Merge branch 'master' into work
- posted: February 21, 2015 at 3:00am version: 8.1 revision: 43
A few minor changes to avoid printing stderr messages in batch mode, to generate a proper exit value, and to print all messages into the console when available except for error messages associated with an early exit that closes the console. Finally corrected the -noconsole replacement of the inputProc for the stdin channel in a way that is compatible with Tcl/Tk 8.6. Should be properly compatible with Tcl/Tk 8.5 as well. Reverted tclmagic.c, did not mean to check in non-working code meant to fix -noconsole mode when using Tcl/Tk 8.6. Merge branch 'master' into work
- posted: February 20, 2015 at 3:00am version: 8.1 revision: 42
Corrected the "gridlimit" such that (1) it properly scales by the CIF expander value (output) and multiplier (input); and (2) it properly differentiates between input and output. That is, the "gridlimit" keyword can be put in either "cifinput" or "cifoutput" sections; if it does not appear in "cifinput", then input geometry is not confined to the grid, but the grid will be subdivided even if this violates the output grid limit. Correction to avoid the problem of having the console flag set before the options are read, or the code determines if a console is being used. Modified the startup procedure to redirect output back to the terminal during the startup phase. That allows the initialization script to exit in the case of a startup error, without the problem of losing output that was passed to the console. Fixed a typo that caused the tkcon command history saving to fail. Merge branch 'master' into work
- posted: February 19, 2015 at 3:00am version: 8.1 revision: 41
Added new command option "cellname [list] modified" to list all cells that have been modified without saving. This is used in conjunction with "writeall" to determine if "writeall" failed to save any cell, in which case the menu item "Save All and Quit" will prompt for a decision rather than risk losing unsaved data. Stopped requiring that whitespace lines delineate sections, although a warning will be posted. This does not really solve the overall problem of lack of syntax checking and handling, though. A few additions to the last change: Watch for errors during the loop over possible pathname attempts; any time a file is found but an error occurs, discontinue the loop over items in the path list. Also: On startup, if an error occurs when loading a file, default to using (UNNAMED). Otherwise, when loading a file, if an error occurs, then keep whatever cell was already in the window.- posted: February 17, 2015 at 3:00am version: 8.1 revision: 40
Highly experimental. Mucked with the fopen() result to try to differentiate the problem of loading a nonexistant file into a writeable directory (in which case you want to create an empty cell), vs. the problem of not loading an existing file due to some error that may need correcting (unwriteable directory, etc.). This is probably opening a can of worms. But for starters, the code now reports the system error string for return codes from fopen(). However, the inner loop currently does not break on error, so continues looking for a file of the given name in an alternative directory even if a file of the given name was found but generated an error when attempting fopen() on it.
Also: Corrected handling of SIGALRM when in batch mode.
- posted: February 16, 2015 at 3:00am version: 8.1 revision: 39
Moved console manipulations of "exit" and "quit" out of console.tcl and into magic's startup code. That way if magic's startup fails and dumps back to the console, it is still possible to exit from the console in the normal way.
Also: Update at Mon Feb 16 19:22:43 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Corrected invalid access to "longname" in GrStyleTable, which may be NULL.
- posted: February 15, 2015 at 3:00am version: 8.1 revision: 38
Modified the "tech revert" command so that it can take an argument, as specified in the help text; also, corrected the "quit" command so that it calls the tkcon exit routine, allowing tkcon to save the command-line history before exiting.
Also: Update at Sun Feb 15 14:03:49 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Finally corrected the way the tkcon console is set up so that doing File->Exit from the tkcon menu will call Magic's exit routine instead of tkcon's; and Magic calls tkcon's exit routine as the last thing before quitting.
Also: Modified "tech layers" command to be compliant with the general principle of allowing comma-separated lists of types.
- posted: February 15, 2015 at 3:00am version: 8.1 revision: 37
Revised command "tech" so that "tech layer lock" and "tech layer unlock" and "tech layer revert" are now just "tech lock", "tech unlock", and "tech revert", to avoid unnecessary prohibitions of layer names that collide with the command options.
Also: Update at Sat Feb 14 11:56:53 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: February 14, 2015 at 3:00am version: 8.1 revision: 36
Fixed GUI callback for "see" command so that it properly ignores anything that isn't a layer name.
Also: Update at Fri Feb 13 17:01:06 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: February 12, 2015 at 3:00am version: 8.1 revision: 35
Created a method to copy a selection into a feedback area of a specified color, with optional attached text.
Also: Update at Wed Feb 11 10:13:43 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Completed the selection feedback function (text handling was missing).
Also: Corrected an error that failed to check for a valid return value when using "select feedback" with a style name or number, resulting in a segfault for bad input.
- posted: February 11, 2015 at 3:00am version: 8.1 revision: 34
Corrected the file access in LEF/DEF reads and writes to make it compatible with similar changes made to database files (requires stripping off any extension before calling PaOpen()).
Also: Update at Tue Feb 10 08:39:41 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: January 26, 2015 at 3:00am version: 8.1 revision: 33
Corrected toolbar behavior when a comma-separated list is passed to the "see" (including "see no") command.
Also: Update at Sun Jan 25 11:13:06 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Corrected an error which generates substrate name "0" for substrate nodes that have internally generated node names (the internally generated name should be output instead).
- posted: January 24, 2015 at 3:00am version: 8.1 revision: 32
Modified "setlabel" command so that it does not output any information when loading a font, unless an error occurs.
Also: Update at Fri Jan 23 21:38:03 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: January 22, 2015 at 3:00am version: 8.1 revision: 31
Altered the startup file magic.tcl so that it checks if a startup script has already generated a window, and does not create a new one if one is already present.
Also: Update at Wed Jan 21 20:34:07 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: January 21, 2015 at 3:00am version: 8.1 revision: 30
Modified the handling of filenames during tech file loading to match changes made for database file loading.
Also: Update at Tue Jan 20 08:33:18 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Fixed one more instance where a dot character was used to check for an extension but was not ignoring everything before the final slash like it should.
- posted: January 19, 2015 at 3:00am version: 8.1 revision: 29
Corrected error (more than one, but one is known to cause problems) with handling path names with a "." character in them, which is confused with the file extension. There may still exist instances in which filenames with more than one "." in them may cause problems if saved and loaded multiple times, but that has not been tested thoroughly.
Also: Update at Sun Jan 18 20:50:23 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: January 14, 2015 at 3:00am version: 8.1 revision: 28
Corrected crosshair drawing, both scale and color; the color correction also corrects a general offset in the solid color numbering; may affect some other drawing features that specifically call out the solid colors (I don't think there are many of these).
Also: Update at Tue Jan 13 14:16:42 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Changed behavior of calls to PaLockOpen so that the first argument never has a file extension (e.g., ".mag"). Hopefully this resolves ambiguity from calling PaLockOpen variously with the cell name or the file name, which might be causing magic to write out filenames "a.mag.mag" under some circumstance.
- posted: January 7, 2015 at 3:00am version: 8.1 revision: 27
Implemented new function with the "property" command, where a cell property called "parameters" can be used to specify a string of parameters to pass to instances of that subcell in a hierarchical SPICE definition.
Also: Update at Tue Jan 6 16:08:15 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Included the subcell parameter passing from the "property parameter" mechanism in the .subckt output for the cell definition (in addition to the subcircuit calls, where it was already implemented).
- posted: January 3, 2015 at 3:00am version: 8.1 revision: 26
Added a backwards-compatibility mode for substrate handling, if there is no "substrate" line in the tech file. This will prevent magic from making assumptions about the substrate and producing extracted output that is different from previous versions when using the same techfile. The new substrate handling will only take place with techfiles that specify how the substrate should be extracted.
Also: Update at Fri Jan 2 20:34:19 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: December 16, 2014 at 3:00am version: 8.1 revision: 25
Modified extraction so that subcircuits will be written even if the top level has ports.
Also: Update at Mon Dec 15 09:45:33 EST 2014 by tim
Also: Merge branch 'master' into work
Also: Initialized ll_attr on substrate node. The lack of initialization may have been causing the substrate node to be output as a port, causing downstream errors with standard cell extraction.
- posted: December 13, 2014 at 3:00am version: 8.1 revision: 24
Implemented "extract unique noports"
Also: Update at Fri Dec 12 20:55:23 EST 2014 by tim
Also: Merge branch 'master' into work
- posted: November 11, 2014 at 3:00am version: 8.1 revision: 23
Added connections due to parasitic caps to "esMakePorts", so that those connections will correctly show up as ports on the subcircuit definition and subcircuit instances.
Also: Update at Mon Nov 10 09:34:53 EST 2014 by tim
Also: Merge branch 'master' into work
Also: Somewhat more confident of the hierarchical parasitic result. Parasitics are now correctly enumerated, with adjustments potentially resulting in a negative capacitance at upper levels of the hierarchy. For a simple example using standard cells, the hierarchical and flattened results agree on parasitics.
- posted: November 10, 2014 at 3:00am version: 8.1 revision: 22
Correction preventing crashes when doing "ext2spice" with hierarchical output. Error from update a few days ago. Code is still very unstable.
Also: Update at Sun Nov 9 19:48:24 EST 2014 by tim
Also: Merge branch 'master' into work
Also: Corrected another problem leaving nodes named "error" in the parasitic caps. This only leaves the problem of ensuring that nodes listed as parasitic caps coupling to the hierarchy above get added to the I/O port list of the subcell.
- posted: November 9, 2014 at 3:00am version: 8.1 revision: 21
Corrected several errors in hierarchical spice extraction related mostly to parasitic caps. The "node visit" routine was looking through nodes of the definition only, not the flattened version, and so would miss nodes where subcircuits having no devices were flattened into the definition.
Also: Update at Sat Nov 8 21:18:28 EST 2014 by tim
Also: Merge branch 'master' into work
- posted: November 4, 2014 at 3:00am version: 8.1 revision: 20
First pass at correcting the whole substrate debacle in magic. This is largely untested code, and should be considered highly experimental. Only circuit extraction is affected by this method. Method currently has no backwards-compatible hooks, which will have to be put back in. Caveat emptor.
Also: Update at Mon Nov 3 16:20:46 EST 2014 by tim
Also: Merge branch 'master' into work
Also: Corrected an issue causing a crash with "ext2spice" when using the "hierarchy on" option. However, the underlying issue is records in def_nodes that have no pointers to a node. This issue has not been resolved, leading torecords in the output. But it no longer crashes. . .
Also: Additional correction to replace EFNHIsGND with a proper check for the substrate identifier flag.
- posted: November 2, 2014 at 3:00am version: 8.1 revision: 19
Attempt to fix hierarchical spice generation with respect to parasitics. A routine to output parasitics to substrate was missing. The routine to output parasitic coupling capacitances only considered local capacitances defined in the .ext file, and not capacitances created by flattening subcells. This is almost certainly not the final word in the matter, especially as at the moment, parasitics to substrate are using the pre-defined SPICE node 0 and not the defined ground node. As handling substrate is a major task to grapple with in version 8.1, this will be left as-is until everything involving the substrate is properly cleaned up.
Also: Update at Sat Nov 1 12:33:48 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: November 1, 2014 at 3:00am version: 8.1 revision: 18
Corrected an error in hierarchical spice that will not generate output for the top level if the top level contains no extracted devices, even if it contains parasitic devices.
Also: Update at Fri Oct 31 12:58:05 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 31, 2014 at 3:00am version: 8.1 revision: 17
Reverted a change from September 9 that is obviously not the right solution. Causes extraction to produce unconnected node names. Need to revisit the original problem. . .
Also: Update at Thu Oct 30 21:08:39 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 30, 2014 at 3:00am version: 8.1 revision: 16
Corrected an error that would cause a crash if attempting to save a file in an unwriteable directory.
Also: Update at Wed Oct 29 11:04:58 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 26, 2014 at 3:00am version: 8.1 revision: 15
Fix lots of typos in comments.
Also: Replace index() and rindex() with strchr() and strrchr().
Also: sys_errlist is not actually used, so remove all reference to it.
Also: Always use, not the nonportable extern definition.
Also: Rely on the C89 sprintf return type.
Also: Remove last remnants of FANCY_ABORT.
Also: Assume the C89 string functions exist via headers instead of extern.
Also: Remove vax definition of MAXINT.
Also: Delete unused manpages.
Also: In manpages, new sentences must start on a new line.
Also: Use the .BI macro in magic.1 to avoid having to escape across lines.
Also: Remove #ifdef __STDC__.
Also: Use the portable FLT_MAX instead of defining MAXFLOAT.
Also: Use MAX_INT instead of defining our own INTMAX.
Also: Remove unused ALPHA32BIT ifdef.
Also: Replace use of SIZEOF_UNSIGNED_LONG with stdint.h.
Also: Remove unused (commented out) status variable.
Also: Use unsigned char instead of nonportable u_char.
Also: Don't poke around in system headers.
Also: These includes are not actually used.
Also: Replace complicated dlong definition with int64_t.
Also: Remove unused dlong.h.
Also: Applied numerous patches from Anthony Bentley. But. . . I need to figure out why this git send command only seems to be updating a few configuration files from the build. . .
Also: Update at Sat Oct 25 09:57:06 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 23, 2014 at 3:00am version: 8.1 revision: 14
Changed "view" command so that "view llx lly urx ury" also works on a set of four values passed in a single argument, as happens when a Tcl list is generated, e.g., by "view [box values]". Used this command variant to implement automatic view sizing to the box dimensions when opening a new window with the "o" key macro.
Also: Update at Wed Oct 22 09:15:25 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 22, 2014 at 3:00am version: 8.1 revision: 13
Corrected an error where the search for "sticky labels" exceeds the boundary of the current search area, thus tending to add nodes outside, say, the extraction area and leading to node searches that end on space tiles because there isn't anything there.
Also: Update at Tue Oct 21 20:22:08 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 21, 2014 at 3:00am version: 8.1 revision: 12
Made several changes, mostly to accomodate the former use of the "o" command (formerly "openwindow", before the Tcl/Tk version) to generate small layout windows near the cursor. This required adding procedures to grab the root screen coordinates from an X11 event, and query them using the "cursor" command in Magic. Additional changes were made to move the window geometry sizing to just below the "toplevel" command. It remains to be seen whether some systems will object to putting the resize statements before the "tkwait visibility". Additional changes push error messages from WindSendCommand higher up the chain, with a "quiet" flag being passed to TxTclCommand and WindSendCommand, so that the Tcl/Tk scripting can control errors using "catch", without having WindSendCommand print out error or warning messages to the terminal.
Also: Update at Mon Oct 20 13:56:14 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: On further reflection, other systems probably DO object to resizing before mapping, so "tkwait visibility" has been moved back to being above the resizing commands.
- posted: October 15, 2014 at 3:00am version: 8.1 revision: 11
Modified the glyph rendering, as promised, so that parts specified in the glyph data file as "background" (".") are not drawn, as opposed to being drawn in the background color, but opaque. The "lock" icon on the toolbar now does not obscure the layer color on the button.
Also: Update at Tue Oct 14 08:24:28 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 14, 2014 at 3:00am version: 8.1 revision: 10
Removed "magic" from .gitignore. There is no executable called just "magic" in the source (it's magic.sh), and "magic" is the name of a directory, so this line just prevents git from making any changes in the magic/ directory (like adding lock.xbm).
Also: Update at Mon Oct 13 20:07:45 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Extended the "image layer" format to include an extra argument "-icon". This option will draw the glyph (from file color.glyphs) on top of the image. So far, transparency is not supported (that will be the next fix).
- posted: October 13, 2014 at 3:00am version: 8.1 revision: 9
Corrected off-screen rendering, should finally fix errors with the side toolbar.
Also: Update at Sun Oct 12 16:33:18 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Added a configuration option for the obscure condition in which the OpenGL window is drawn upside-down. Not sure what is at fault, exactly, but this gets rid of the problem.
Also: A number of additions to the toolbar, including display of "locked" vs. "unlocked" layers in different styles (probably to be done a bit better, shortly). The toolbar now is visible by default. Keys "l" and "u" can lock and unlock layers from the toolbar.
- posted: October 12, 2014 at 3:00am version: 8.1 revision: 8
Modified the selection code so that "select cell" and other non-layer selections will reset the level for the code that cycles through chunk/region/net selection. This prevents "select cell" followed by "select more" from hosing the select use. Hopefully no side effects to this correction.
Also: Update at Sat Oct 11 15:24:31 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 11, 2014 at 3:00am version: 8.1 revision: 7
Changed TxTclDispatch to return the value returned by WindSend, so that errors generated in magic commands can be passed back to the interpreter. This can be used to prevent, for example, popup windows due to attempts to execute magic layout commands in callbacks from non-layout windows like the title bar, when multiple windows are present.
Also: Update at Fri Oct 10 09:32:36 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 4, 2014 at 3:00am version: 8.1 revision: 6
Removed the senseless restriction on non-conforming characters in GDS file string input. Also removed the restriction on spaces in GDS output generated with the "calma-permissive-labels" flag.
Also: Update at Fri Oct 3 08:46:56 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 3, 2014 at 3:00am version: 8.1 revision: 5
Modified signal handling in batch mode to *not* ignore SIGINT, but to just handle it normally. Also in batch mode set SIGTERM handling to normal.
Also: Update at Thu Oct 2 08:48:07 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Added command-line options "magic --version" and "magic --prefix"
Also: Fixed the error in the DRC-CIF "cifspacing" rule.
- posted: October 2, 2014 at 3:00am version: 8.1 revision: 4
Corrected (I think) an error with non-Manhattan fracturing and painting. The fracturing made an optimization for types that don't interact which was not mirrored by the paint operation, resulting in the two functions disagreeing about what area they were supposed to be painting.
Also: Update at Wed Oct 1 17:46:46 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Added printing of box coordinates when the box is manipulated with mouse button commands on the "box tool". Also modified the wrapper so that it not only reads the "tools.tcl" script, but executes the box tool. Otherwise the box tool appears with the original bindings, not those in the "tools.tcl", which only go into effect after switching tools. Also modified the "boxview" script so that it prints microns dimensions, like the other scripts have been made to do.
Also: Modified the startup script to move the printout of the technology name and version to after the startup script has been run. If the startup script or rcfile choose to load a different technology, the end user will not get confusing information about the technology that was briefly in existence and then deleted.
- posted: October 1, 2014 at 3:00am version: 8.1 revision: 3
Corrected (1) Problem with duplicate read of .magicrc if the current working directory is the same as the home directory; (2) Incorrect parsing of command line arguments, and (3) Incorrect display of microns position in window.
Also: Update at Tue Sep 30 08:58:56 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Added tentative code to prevent premature exit of the terminal input prompt read in case of a system interrupt. Added additional code that suppresses interrupts on batch-mode processing. This code is experimental, as it is unknown whether there are unintended consequences.
- posted: September 28, 2014 at 3:00am version: 8.1 revision: 2
Corrected a minor error in which a DRC "no overlap" error can cause spurious random errors to be reported by "drc why".
Also: Update at Sat Sep 27 11:40:04 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Removed files from build that should not have been pushed to the git database.
Also: Corrected an error in the DRC-CIF code that would occasionally cause areas to be skipped when they need checking.
- posted: September 18, 2014 at 8:29am version: 8.1 revision: 1
Attempting to fix website problem caused by not initializing the git tag.
- posted: September 17, 2014 at 3:00am version: 8.1 revision: 0
Initial check-in of development version 8.1, unchanged from the last revision of version 8.0.
- posted: April 7, 2017 at 3:00am version: 8.0 revision: 217
Same correction as made to magic-8.1, to prevent an error that makes the interaction area for extraction arbitrarily large and can result in very long extraction runtimes.
Also: Update at Thu Apr 6 11:33:01 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: February 11, 2017 at 3:00am version: 8.0 revision: 216
Corrected (hopefully) an error with extracting annular devices, in which a fix for source-drain shorted devices ended up breaking the code for annular devices.
Also: Update at Fri Feb 10 22:14:39 EST 2017 by tim
Also: Merge branch 'master' into work
- posted: November 29, 2016 at 3:00am version: 8.0 revision: 215
Implemented a feature found on a modified version of ext2spice in which the terminal label "S$" and/or "D$" can be used to force the order of drain and source in the netlist output.
Also: Update at Mon Nov 28 11:20:45 EST 2016 by tim
Also: Merge branch 'master' into work
- posted: November 6, 2016 at 3:00am version: 8.0 revision: 214
Corrected default key bindings: Old 'labelpaint' corrected to 'label', and diagonal stretch bindings (which are not legal commands) removed.
Also: Update at Sat Nov 5 20:51:34 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: October 10, 2016 at 3:00am version: 8.0 revision: 213
Added an area clip that avoids large DRC penalties when the DRC step size is too large, and avoids extra overhead in general by not looking outside the immediate area of the cell. Includes fix just made in magic 8.1, which had the area limit but which was done incorrectly.
Also: Update at Sun Oct 9 11:27:39 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: September 6, 2016 at 3:00am version: 8.0 revision: 212
Added handling to .mag file reads to specifically ignore control-M characters at the ends of lines; otherwise, these characters get embedded in the label text and cause newlines in SPICE output from ext2spice, creating invalid SPICE files. Same changes as made to magic version 8.1.
Also: Update at Mon Sep 5 09:20:39 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: July 22, 2016 at 3:00am version: 8.0 revision: 211
Updated configure script to extract the paths for the Tcl and Tk lib and include files, so that subsequent checks for those files are not disjoint from the contents of tclConfig.sh and tkConfig.sh.
Also: Update at Thu Jul 21 11:22:11 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: September 12, 2015 at 3:00am version: 8.0 revision: 210
Corrected commands "drc *halo" and "drc *stepsize", which were missing an argument to the call to cmdScaleCoord(), but were also incorrectly converting the result (which is in internal units) into DRC units (according to the drc "scalefactor" value).
Also: Update at Fri Sep 11 10:10:06 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: September 6, 2015 at 3:00am version: 8.0 revision: 209
Updated configure script for Mac compile (thanks to Ryan Schmidt).
Also: Update at Sat Sep 5 10:43:58 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: August 26, 2015 at 3:00am version: 8.0 revision: 208
Corrected a bad reference to an uninitialized variable caused by a missing subroutine call. The bug causes some ports to be drawn incorrectly, often with lines running off the screen to infinity.
Also: Update at Tue Aug 25 21:21:36 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: May 7, 2015 at 3:00am version: 8.0 revision: 207
Corrected an error that incorrectly scales the sidewall overlap cap as an area capacitance, not a perimeter capacitance.
Also: Update at Wed May 6 11:07:03 EDT 2015 by tim
Also: Merge branch 'master' into work
Also: After noticing that the documentation defines sidewall capacitance referenced to 2 lambda, I realized that when using "units microns", if the capacitance is then supposed to be referenced to 1 micron, then the value needs to be divided by two.
- posted: May 3, 2015 at 3:00am version: 8.0 revision: 206
Corrected an error with sidewall capacitance, which because it is referred to a specific distance, does not scale (provided that the linear model is valid, which is somewhat doubtful).
Also: Update at Sat May 2 13:24:44 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: April 29, 2015 at 3:00am version: 8.0 revision: 205
Corrected an error that prevented the "defaultperimeter" statement in the extract section of the techfile from registering the perimeter capacitance to substrate (all other sideoverlap values were not affected).
Also: Update at Tue Apr 28 11:06:09 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: March 21, 2015 at 3:00am version: 8.0 revision: 204
Reverted one change from the incorrect attempt to fix the cell plane corruption problem, that was not removed after the proper fix was implemented.
Also: Update at Fri Mar 20 12:50:53 EDT 2015 by tim
Also: Merge branch 'master' into work
Also: Corrected error in "drc why", where error message printing routine was incorrectly translating the tile area back to top-level coordinates, when the search area had already been converted to local coordinates.
- posted: March 20, 2015 at 3:00am version: 8.0 revision: 203
Found the underlying reason for duplicate cell use errors, which was the use of cu_extended as the bounding box rectangle when calling DBPlaceCell(). This corrupts the cell plane.
Also: Update at Thu Mar 19 09:59:19 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: March 18, 2015 at 3:00am version: 8.0 revision: 202
Corrected an error in the CIF "squares" generator where areas of connected tiles that were overlapping but not themselves connected would be processed twice.
Also: Update at Tue Mar 17 12:39:13 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: March 15, 2015 at 3:00am version: 8.0 revision: 201
Same correction as made to magic-8.1, to correct an error that can cause occasional cell uses to be scaled several times when scaling the internal grid to a finer resolution. Replaced DBCellEnum() with a simple hash enumeration of cd_idHash.
Also: Update at Sat Mar 14 21:54:26 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: March 13, 2015 at 3:00am version: 8.0 revision: 200
Same correction as made to version 8.1 to fix crashes when ext2sim encounters a 1-terminal device.
Also: Update at Thu Mar 12 16:15:05 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: November 1, 2014 at 3:00am version: 8.0 revision: 199
Corrected an error in hierarchical spice that will not generate output for the top level if the top level contains no extracted devices, even if it contains parasitic devices.
Also: Update at Fri Oct 31 12:58:15 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 31, 2014 at 3:00am version: 8.0 revision: 198
Reverted a change from September 9 that is obviously not the right solution. Causes extraction to produce unconnected node names. Need to revisit the original problem. . .
Also: Update at Thu Oct 30 21:08:52 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 30, 2014 at 3:00am version: 8.0 revision: 197
Corrected an error that would cause a crash if attempting to save a file in an unwriteable directory. Thanks to Doug McKnight for the bug report.
Also: Update at Wed Oct 29 11:05:32 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 22, 2014 at 3:00am version: 8.0 revision: 196
Corrected an error in which the search for "sticky labels" works outside the bounds of the area used for generating nodes, and adds those labels to the node list. Later routines search at the location of the label and find nothing, return a pointer to a space tile, and crash the program.
Also: Update at Tue Oct 21 20:31:12 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 14, 2014 at 3:00am version: 8.0 revision: 195
Removed "magic" from .gitignore. There is no executable called just "magic" in the source (it's magic.sh), and "magic" is the name of a directory, so this line just prevents git from making any changes in the magic/ directory.
Also: Update at Mon Oct 13 20:07:55 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 13, 2014 at 3:00am version: 8.0 revision: 194
Corrected off-screen rendering, should finally fix errors with the side toolbar.
Also: Update at Sun Oct 12 16:33:31 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 3, 2014 at 3:00am version: 8.0 revision: 193
Made the CIF-DRC "cifspacing" rule symmetric by doubling the number of rules to incorporate both the (layer->space) and (space->layer) edges. This increases the overhead for DRC rules, but (1) the vast majority of the overhead for CIF-DRC rules is the generation of the CIF layers, not the DRC rule evaluation, and (2) in practice everyone uses "edge4way" rules, not "edge" rules, because even though technically, all possible errors are caught by "edge" rules for most rule conditions like simple spacing, the non-reflexive error box placement looks so weird that it actually interferes with understanding what the error is. People are scratching their heads wondering why this error paint is over here and that error paint is over there. . . it is all around better to just keep all rules reflexive (symmetric). At the cost of a bit more computation, the errors appear where one would expect them to be.
Also: Update at Thu Oct 2 20:14:23 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: FIXME: Last git commit comments need to be swapped between 8.0 and 8.1!
- posted: October 1, 2014 at 3:00am version: 8.0 revision: 192
Corrected parsing of arguments. Same change made to version 8.1.
Also: Update at Tue Sep 30 09:08:47 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: September 28, 2014 at 3:00am version: 8.0 revision: 191
Rolled back the change of position printed in the titlebar from lambda to microns; this change was intended for the development version but was made before version 8.0 was declared "stable". However, the modification was not finished and so is being pulled out of the stable code base.
Also: Ignore this update, will be reverted.
Also: Update at Sat Sep 27 10:04:46 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Removed test file as promised.
Also: Corrected a minor error in which a DRC "no overlap" error can cause spurious random errors to be reported by "drc why".
Also: Corrected an error with the DRC-CIF checks that failed to set the plane of comparison and therefore would occasionally cause some checks to be skipped.
- Feburary 3, 2008
Original version. The only difference between this and version 7.5 is the introduction of vector outline fonts (unfinished).
Also: Minor corrections to vector font selection and transformation; also unfinished.- February 7, 2008 at 2:40am
Expanded upon scripted routines "pushstack" and "popstack" (">" and "<" macros) to avoid pushing into anything other than a child of the edit cell, and to avoid popping an empty stack (same change made to version 7.5)
Also: 2008-02-07 02:40 tim- February 8, 2008 at 2:40am
Corrected an error in which running magic in batch mode with a read-only cell causes the edit cell to end up pointing to the initial empty "UNNAMED" cell rather than being set to NULL (because the loaded cell is not editable).- February 10, 2008 at 2:40am
Corrected the DRC spacing rule to reinstate the ability to specify multiple layers on multiple planes in either of the two type lists "spacing from" and "spacing to". The recent changes to DRC initialization in magic-7.5 forced an assumption of each layer set being in the same plane. With no check of this, however, specification of layers in different planes would cause magic to crash. Also: changed the "pushstack" script (again) to remove the arbitrarily-imposed condition that one may only push into a child cell of the current edit cell.- February 11, 2008 at 2:40am
Removed DBResidueMask() subroutine calls from inside TTMask* constructs, where they get repeated (unnecessarily) once for each byte in the mask.- February 12, 2008 at 2:40am
Corrected the DRCcif functions to match the changes to the arguments of drcAssign(). Also: Corrected a label subroutine call with mismatched parameters caused by recent changes to the label code.
Also: Added some command options for modifying labels on the fly: "label set" command with options "font", "rotate", "size", etc.- February 15, 2008 at 2:40am
Modified the label commands so that "label" is essentially back to what it used to be (except for optional extensions for outline fonts), and loading fonts and adjusting properties of existing labels has been moved to the new "setlabel" command.
Also: Started on a text helper window for editing labels. Implemented new option "setlabel fontlist" to generate a list of available fonts, and rewrote all of the "setlabel" routines to return Tcl lists. Implemented Bertrand Irissou's extended GUI menus.- February 18, 2008 at 2:40am
Modified SelEnumPaint so that "chunk" selection is handled differently than other selections (so that "compatible" types in other cells are not copied into the selection cell).
Also: Extended the aforementioned method for handling "select chunk" to similarly handle "select area", such that material compatible with (but not included in) is not copied into the selection cell.
Also: Corrected the "what" command to produce a unique list of subcells in which each paint type is found. Prior code only checked each subcell name against the previous one searched, so cells visited cyclically (typical for deep hierarchy) would be repeated for each occurrence.- June 2, 2008 at 2:40am
Updated a number of files to match changes made in version 7.5. Specifically, added extensions for not using the ".option scale" card in HSPICE output format, and an extension for devices with different drain and source types.- June 28, 2008 at 9:50am
2008-06-28 09:50 tim- August 15, 2008 at 2:40am
2008-08-14 08:26 tim Corrected an integer overflow error in non-Manhattan tile painting (most likely to occur on GDS read-in).- September 4, 2008 at 2:40am
2008-09-03 10:22 tim Corrected the DBFracturePlane() routine to preserve the maximum horizontal stripes rule when fracturing split tiles. Also: Added the standalone ext2spice and ext2sim programs, which run as scripts. Additionally, modified the makefile to include the library runtime path for systems that require it (otherwise the scripts mentioned above don't work).
Also: Corrected tkcon.tcl for running correctly under Tcl/Tk version 8.5.- September 6, 2008 at 2:40am
2008-09-05 06:56 tim Extended the syntax of the "wire" command to match changes made to magic version 7.5- September 9, 2008 at 2:40am
2008-09-08 12:55 tim Gave up on Philippe's modifier mask change, which screws up magic on various linux distributions, and solaris. Restricting the change to Mac OS X only.- October 16, 2008 at 2:40am
2008-10-15 07:35 tim Hack solution to prevent segfaults on extraction of bent gates. Need to add a correct solution for handling diagonal boundaries. . .- November 6, 2008 at 2:40am
2008-11-05 07:18 tim corrected extraction of asymmetric FET devices- November 9, 2008 at 2:40am
Corrections to the plot PNM routine to match the changes made to magic 7.5.- November 22, 2008 at 2:40am
Corrections to selection and moving/stretching of contacts to match changes made to magic version 7.5.- December 4, 2008 at 2:40am
Changes corresponding to functional additions to magic-7.5: New contact generation algorithm, new "cif paint" function, and new subcircuit and rsubcircuit devices for extraction.- December 5, 2008 at 2:40am
Created new cif output operators "net" and "maxrect". Moved the maximum rectangle routines into a new file in the utils directory so that they are no longer dependent upon the DRC code.
Also: Added the "no-errors" warning to the cifoutput options.- December 6, 2008 at 2:40am
Corrections to CIF text label I/O for what may or may not be correct scaling. Corrected the "cif paint" function to use the "undo" mechanism and properly update the bounding box information and register the area for a DRC check.- December 10, 2008 at 2:40am
Corrections on the new CIF contact generation algorithm, plus a few more corrections on the rendered text (OpenGL driver only).- December 11, 2008 at 2:40am
Finished (well, not counting unforseen bug fixes) the rendered font display routines for both X11 and OpenGL. The X11 routines involve rather too much memory allocation/deallocation of pixmaps and could use a bit of optimizing. For that matter, the OpenGL routines could be optimized with display lists, but at least it all (apparently) works. Needs a GUI. . .- December 12, 2008 at 2:40am
A couple of corrections to the font text code, to complete and correct the "setlabel" function options, and to fix the label offset calculations, which was being canceled by the justification computations.
Also: Correction to avoid hanging or segfaulting on devices with no terminals.
Also: Added corner resistance scaling to the "resist" line in the techfile extract section. Defaulting to 1.0, this can be specified for each resist group. Often this is set to 0.5 in practice.
Also: One more correction for refresh areas not being computed correctly when checking for expanded regions around labels.
Also: Corrected an error where selected labels are not redrawn after being unselected.- December 13, 2008 at 2:40am
Corrected the step size and side halo scaling when using option "units microns" to match the correction made to magic 7.5.- December 17, 2008 at 2:40am
Corrected an error in the bounding boxes that causes subcells to disappear when reading in a .mag file.- December 18, 2008 at 2:40am
Corrected the GDS write of rendered text, which would crash on attempting to write rotation and scale values. Also corrected the GDS write of vendor GDS files, which failed to scan the correct seek pointer into the GDS file on 64-bit machines, where off_t is defined as (long long), and is therefore incompatible with a "%d" in a scanf() statement.
Also: 2008-12-18 02:40 tim- December 19, 2008 at 2:40am
Corrected scaling and conversion of sideOverlap and sideCouple capacitances.- December 20, 2008 at 2:40am
Corrected the GDS output of labels; this has now been confirmed in stream-out and stream-in from Magic back into Magic as well as from Magic to Cadence, and from Cadence to Magic.- December 24, 2008 at 2:40am
Corrected several errors, including two in the (new) "maxrect" cif operator computation, and one that causes the DRC halo to grow every time the tech file is re-read.- December 30, 2008 at 2:40am
Corrected the extflat (EFbuild.c) code to prevent a crash condition caused by the code changes for the subcircuit and rsubcircuit extraction device types (same change as made to the magic version 7.5 code).- January 14, 2009 at 2:40am
Altered the contact generation algorithm to cover cases in which non-manhattan beveled edges are placed such that they prevent any contact cuts from being placed (because the cut positions have been computed from the bounding box of the area, not the actual structure).
Also: Changed the contact cut-generation algorithm to prevent it from generating cuts that violate the required border amount. This breaks backward- compatibility, but the original function, which may have been meant to accomodate cuts with different border allowances on different sides, can be replaced by the "slots" function. Otherwise, it can generate bad layout.- January 15, 2009 at 2:40am
Corrected an error that caused the extractor to ignore transistor source/ drain resistclasses.
Also: Modified the search algorithm in the contact cut generation to (greatly) speed up the processing, which had been made slow in some cases when the new algorithm was instantiated.- January 16, 2009 at 2:40am
Modified the "cif see" and "cif paint" commands such that they do not attempt to generate all CIF layers, but only those requested and the layers on which those layers depend. This speeds up the process, avoids unnecessary computation, and avoids generating unrelated warning and error messages.- January 20, 2009 at 2:40am
Corrected ext2spice and ext2sim such that (1) the version of magic that was compiled is called (replaced "magic" with the full path to "magicdnull"), and (2) if the technology is not the default (scmos), and no layout has been loaded (which is true of "magicdnull" batch mode), then the technology specified by the .ext file will be loaded.
Also: Made one further change to the "ext2spice" and "ext2sim" scripts (standalone commands), which is to allow arguments separated by "--". Arguments before the double-dash are passed to magic as arguments to magic, and those after the double-dash become arguments of the "ext2spice" or "ext2sim" command. This somewhat breaks backward compatibility with the original standalone commands, but allows all command-line options for magic to be used.- January 22, 2009 at 2:40am
Corrected one of those wonderful "wrote == instead of =" errors. Keeps the CIF contact generation from running forever (same change made to version 7.5; the code was apparently copied verbatim).- January 30, 2009 at 2:40am
Made a small correction that prevents magic from counting the metal-to-space edge on a contact as part of a device perimeter. Original assumption was that the contact would only be on the boundary outside edge, which is not true.
Also: Corrected handling of asymmetric FETs such that ext2spice does not try to merge devices that are antiparallel. This is an unlikely situation, but is checked for completeness. This requires a new device type "asymmetric" to be written to the .ext file.- April 11, 2009 at 2:40am
Corrected a DRC error which would cause magic to "optimize out" (remove) rules that should not have been, as they are active in a different plane from the one that ought to be deleted. Changed correspond to changes made to magic version 7.5.- April 24, 2009 at 2:40am
2009-04-23 09:26 tim Corrected an error which caused copying contacts to incorrectly flag the existance of overlap errors (same as change made to magic v7.5).- April 30, 2009 at 2:40am
2009-04-29 10:12 tim Reverted the last change, which was completely wrong, does not fix what it was meant to fix, and causes a whole lot of other errors instead. The real underlying problem is now understood, but the solution is likely to be pretty tedious and time-consuming.- May 2, 2009 at 2:40am
2009-05-01 11:59 tim Reworked the last bugfix, using a completely new method to implement the paint routine used by DRC to find overlap violations (was DBPaintPlaneMergeOnce(), is now a variation on the DBPaintPlane() call). This code is experimental, so I will not add it to the stable version until it has been proven correct and shown not to cause additional errors. In short, the DBPaintPlaneMergeOnce() routine prevents double-processing tiles in the DBPaintPlane() routine. Because the algorithm is less efficient than DBPaintPlane(), it is used only for the DRC overlap check (i.e., used when flattening cells during hierarchy and array checks). The new routine uses the clientData record to mark tiles, then clears them afterward. It is just as inefficient as the original version, possibly slightly more so. However, it prevents the necessity of having (and maintaining) multiple copies of hundreds of lines of paint code.
Also: Added the extended bounding box (bbox with labels) to the "undo" record for cell instances---otherwise, cell instance get lost during undo operations, which is naturally a bad thing.- May 4, 2009 at 2:40am
2009-05-03 08:01 tim Implemented the "templayer" keyword for the "cifinput" section, which was previously unavailable. This allows the user (techfile maintainer) to define new CIF/GDS types to be used as temporary storage for derived layers.- May 14, 2009 at 2:40am
2009-05-13 08:03 tim Corrected wire value scaling when the internal grid changes (it was backwards). Also, applied Jason Schonberg's patch which corrects undeclared (implicit integer) variables.- May 19, 2009 at 2:40am
2009-05-18 20:06 tim Corrected an error that prevents magic from identifying isolated contact squares that are too small to draw a cut and generating an error message.
Also: 2009-05-19 02:40 tim- May 22, 2009 at 2:40am
2009-05-21 05:28 tim Corrected an instance of DBUndoPutLabel() that was still making the call with the old parameter list.- May 30, 2009 at 2:40am
2009-05-29 20:13 tim Corrected another error with the extended bounding box that prevents it from forcing a recompute after invalidating a subcell bounding box, leaving that subcell with an invalid bounding box and causing all sorts of trouble.- June 2, 2009 at 2:40am
2009-06-01 10:18 tim Moved the "slots" function to the new contact cut generation method.- June 5, 2009 at 2:40am
2009-06-04 06:54 tim Corrected an error in the parsing of the "device subcircuit" statement to allow devices with zero nodes declared (such as diodes).- June 13, 2009 at 2:40am
2009-06-12 10:40 tim Revised the contact cut generation algorithm so that it is more compatible with the original behavior in which contacts may be generated where the border area is insufficient. This is a temporary solution, as there needs to be a proper check against borders in each contact residue, separately.- July 2, 2009 at 2:40am
2009-07-01 06:39 tim Corrected an error that ignores resistor length and width when generating a semiconductor resistor output in a spice file with ext2spice.- July 14, 2009 at 2:40am
2009-07-13 19:54 tim Correction to the wrapper script submitted by Daniel Barden, that removes the checkmark for the Tech Manager when the window is removed forcibly by the window manager.- July 18, 2009 at 2:40am
2009-07-17 07:54 tim Corrected the "cellname" and "instance" functions that return the name of child instances to both run more efficiently, and return a unique set.- July 27, 2009 at 2:40am
2009-07-26 17:56 tim Corrected the "instance list celldef" command, which would miss children of the top-level cell due to the lack of an immediate parent instance.- July 28, 2009 at 2:40am
2009-07-27 07:16 tim And one more correction, to the configure.in script, to help configure find Tcl/Tk packages on Ubuntu and other systems that hide them in obscure places.- August 4, 2009 at 2:40am
2009-08-03 06:41 tim Two corrections: (1) The "extresist" command was missing an assignment of the third boolean argument in options like "extresist simplify on", making it impossible to set them, and (2) The continuous DRC breaks to check for Tcl/Tk pending events so that the DRC can be interrupted; however, this check was extended to file events, making it impossible to run DRC in batch, as the following command would immediately interrupt any DRC check. Thanks to Graham Petley for bringing these to my attention.- September 11, 2009 at 2:40am
2009-09-10 13:32 tim Corrected hierarchical extraction of non-Manhattan nets. Isolated non-Manhattan tiles (most likely to occur during hierarchical extraction when the layout is chopped up into squares and processed individually) are now properly handled as reference tiles for node regions, and so do not cause errors.- September 12, 2009 at 2:40am
2009-09-11 07:30 tim Corrected the DRC checker to allow commands forcing an immediate check to execute. Code that was meant to prevent the continuous DRC checker from being executed in the middle of a command prevented this. Same change as made to version 7.5.
Also: Additional measures to ensure that the continuous DRC does not run in the middle of tool initialization.
Also: Yet more alterations to the DRC status/on/off/count commands and behavior.
Also: And one final correction.- December 31, 2009 at 2:40am
2009-12-30 05:42 tim Corrected an integer-to-boolean conversion that breaks on machines not defining bool as type int. Thanks to Dinesh Sharma for pointing out this error.- February 10, 2010 at 2:40am
Corrected a typo that mysteriously slipped into the configure script, noticed by Svenn Bjerkem.- March 9, 2010 at 2:40am
Applied patches from Dan McMahill and Jason Shonberg- March 13, 2010 at 2:40am
Corrected DRCcontinuous so that background commands that modify the DRC state do not cause a crash when run during an interpreter catch-up in the middle of the background DRC checker.- April 30, 2010 at 2:40am
Corrected X11/OpenGL graphics to prevent the backing store mechanism from crashing when using multiple windows (multiple calls to free grXcopyGC). Thanks to Philippe Pouliquen for identifying the problem and sending a patch.- May 3, 2010 at 2:40am
2010-05-02 06:41 tim Extended the bloat-or function to make use of the "grow-euclidean" option. This is dreadfully slow, but it works.- May 4, 2010 at 2:40am
2010-05-03 08:02 tim Corrected an error with the nonmanhattan paint function in which two adjacent nonmanhattan tiles can be merged. It was thought that this was a non-occurrance, but it happens during plane fracturing.
Also: First cut at a routine to merge non-manhattan tiles back into the plane in such a way as to minimize the number of non-manhattan tiles in an area. This can be used either on a per-tile basis, or per-plane. For instance, it can be used after a CIF plane generation to clean up any fracturing caused by boolean operators. Currently it is only applied to the paint and splitpaint commands, and file loads.- May 5, 2010 at 2:40am
2010-05-04 11:40 tim Another correction, on the non-manhattan bloat-or function, where calculation on the corners of triangles causes the routine to generate zero-size errors to the paint function (which results in a corrupted tile plane, and may be fatal).
Also: Corrected a few more errors and moved the unfracture routine to a CIF command option, since it takes rather a long time to run and does not reduce the output file size by enough to make it worth the extra time.- May 12, 2010 at 2:40am
2010-05-11 12:28 tim Implemented new code optimizing non-Manhattan geometry to maintain, if not the minimum number of non-Manhattan tiles required, then at least something very close. Code should probably be considered very unstable at this point until it has been in use long enough to check that all cases have been covered in the paint routines.- May 14, 2010 at 2:40am
2010-05-13 14:28 tim Added routine to scale CIF-GDS rules along with the grid scaling, a routing which was missing (same correction as was made to version 7.5).- May 15, 2010 at 2:40am
2010-05-14 11:57 tim Corrected an error in the euclidean distance DRC calculations that did not reset the flags for which corners to check, resulting in some very strange errors.- May 19, 2010 at 2:40am
2010-05-18 07:21 tim Unhandled case found in select enumeration of non-Manhattan tiles.- May 22, 2010 at 2:40am
2010-05-21 13:30 tim Corrected an error that crept into the paint code during recent work, that can cause an infinite loop during DBFracturePlane.
Also: Corrected an error in the GDS/CIF polygon reading, which incorrectly computes the intersection of a polygon with the break-out triangle being analyzed in one case, due to a bad assumption about the geometry.- May 27, 2010 at 2:40am
2010-05-26 14:34 tim Final (I hope!) corrections on the non-Manhattan geometry paint routines. Magic version 8.0 now passes my worst polygonal torture test with zero errors.- June 9, 2010 at 2:40am
2010-06-08 12:16 tim So much for hopes about the last version of the non-Manhattan paint routines. The previous version indeed passed the non-Manhattan torture test. However, it was many times slower than the original version. This version combines parts of both the original and new algorithms to create one which maintains the speed of the original one and the correctness of the new one. Unfortunately, the tile fracturing is less optimal than the previous algorithm, but correctness will take precedence over efficiency of the database. There is room for changes to reduce unnecessary fracturing. The current version also implements an undo function for splitting and joining non-Manhattan fractures that ensures the reversibility of any action on the database involving non-Manhattan geometry.- June 18, 2010 at 2:40am
2010-06-17 06:00 tim Corrected the non-Tcl/Tk code for use with the vectored font code. It now compiles. Whether or not it works correctly is another question.
Also: Corrected an error in which "expand toggle" would crash magic if a cell forced an internal database rescaling.- June 25, 2010 at 2:40am
2010-06-24 05:37 tim At last, added a usefully working cell manager, based on Tcl/Tk 8.5, with its built-in "ttk::treeview" widget. This cell manager implementation does not attempt to build the entire cell structure at once, and so does not incur huge delays as the former one did. It also does not attempt to record every instance; it will record the first instance of each cell when walking through the tree view, and when a cell is selected in the layout window, it will change the instance numbers to match the hierarchy of the selected cell. Also, added a primitive but workable text helper window for generating labels using the rendered-font labels new to magic version 8.0.
Also: Modified the CIF euclidean distance bloat operation to match version 7.5, where the two versions differed, and magic-8.0 was crashing. I did not analyze the exact issue, but it seems to be resolved.- June 26, 2010 at 2:40am
2010-06-25 06:59 tim Corrected an error in which the GDS paint copy function ignored non-manhattan geometry, such that non-manhattan geometry would be lost when using the "gds flatten" option.- August 10, 2010 at 2:40am
2010-08-09 17:18 tim Corrected an error in which the hint tile of the cell plane ends up as one of the boundary tiles after expanding a cell with scaled subcells. Resetting the hint tile seems to solve the problem.- August 11, 2010 at 2:40am
2010-08-10 11:06 tim Left the distribution in an uncompilable state yesterday. This has been fixed.- August 16, 2010 at 2:40am
2010-08-15 07:35 tim Removed the call to DBUpdateStamps() from inside DBScaleEverything(). This command recomputes bounding boxes and can end up modifying the cell plane from inside a search on the same cell plane, with predictably disasterous results. Same change as made to version 7.5.- August 23, 2010 at 2:40am
2010-08-22 14:58 tim Corrected an error where nmPutNums() was not declared and therefore returns the wrong type in selOps.c.
Also: Added new files ext2hier.c and ext2spice.h to the CVS database.- August 24, 2010 at 2:40am
2010-08-23 10:11 tim Added a forward declaration for extHierSDAttr() to prevent compile-time errors with the new ext2hier.c source file.- August 26, 2010 at 2:40am
2010-08-25 10:33 tim Fixed an error in the databases that can cause patches of layout to be missed when painting or erasing material near a split tile. Also: Introduced the first working version of a hierarchical SPICE output, good for generating decks to use with hierarchical LVS, such as netgen.- August 27, 2010 at 2:40am
2010-08-26 12:12 tim Added two missing files to the tcltk directory on the CVS server. Thanks to Oliver King-Smith for pointing out the problem.- September 13, 2010 at 2:40am
2010-09-12 13:32 tim Corrected a crash error in which a netlist-tool-based net search crashes magic immediately due to a missing argument in the call to the label search routine (which I modified some time ago). Thanks to Oliver King-Smith for pointing out the error.
Also: Additional change to make the check on the first line of a netlist file case-insensitive. It really should be a much more relaxed check than it is. Generally speaking, it only reads netlist files it has written, but it is sometimes convenient to write them by hand, and getting the 1st line format exactly right is a pain.- September 16, 2010 at 2:40am
2010-09-15 08:45 tim Changed the techfile parsing so that for the cifinput/cifoutput sections, the grammatically correct "scalefactor 1 nanometer" will not be parsed as syntactically incorrect.
Also: Correction that allows the connectivity search be called recursively without attempting to run multiple times on the same network, causing an infinite nesting of subroutine calls.
Also: Corrected what must have been a rather long-standing error in version 8.0 that causes all sorts of trouble by not resetting the label-extended bounding box of a cell when the cell is cleared.
Also: Another correction to scale the label-expanded bounding box in both the cell def and cell use when doing the "scalegrid" command.- September 17, 2010 at 2:40am
2010-09-16 14:33 tim Implemented new DRC option "exact_width" for the "surround" rule. This rule enforces both minimum and maximum value for the surround distance.- September 21, 2010 at 2:40am
2010-09-20 14:13 tim drc "extend" rule corrected, using a new technique to let the trigger rule mechanism compute extension of one type over another in different planes. The new technique also corrects the behavior of other trigger rules where the triggering edge may be longer than the area on which the triggered rule should search.- September 25, 2010 at 2:40am
2010-09-24 12:53 tim Corrected an error in the DBPaintPlane routine when "mark" is TRUE. This can cause the database to be corrupted when running the DRC check between subcells or between array instances, causing infinite loops or crashes.- October 15, 2010 at 2:40am
2010-10-14 14:55 tim Modified the transistor extraction routine to fix an original error that prevents correct substrate extraction if a transistor gate does not consist of a single tile, and the substrate node does not completely cover the transistor. This is a rare condition, but should not be ignored.
Also: Correction to the original commit, which did not return NULL as is should in the case of finding no substrate type.- October 20, 2010 at 2:40am
2010-10-19 09:01 tim Modified the previous transistor extraction algorithm so that in the standard case of a single tile transistor, it will skip the plane search, which will keep the extraction time nearly the same as before for most extractions.- October 21, 2010 at 2:40am
2010-10-20 05:04 tim Removed drcCifScale(); drc-cif rules are in centimicrons and don't need to be scaled with the database.
Also: Okay, axe that last change from yesterday. CIF-DRC rules do need to be scaled, but they need to be scaled from inside the scaling routine for the cifoutput rules, not the scaling routine for DRC rules.- October 23, 2010 at 2:40am
2010-10-22 08:02 tim Corrected a bad longstanding error in mzNumLine.c where an allocated block of an array of ints was mistakenly allocated as an array of bytes. Also, corrected a recent error where trans_SDtypes was not initialized.- December 14, 2010 at 2:40am
2010-12-13 14:02 tim Corrected the substrate extraction code again; this time, because magic cannot differentiate between different substrates under multiple devices electrically connected in parallel (such as capacitors). Reverted to a method that is more like the original (checks for substrate under each transistor), but put this inside the loop that searches for all tiles beloning to a transistor/device. It saves the substrate node in the transistor record, and uses this value when generating device output.- December 17, 2010 at 2:40am
Made corrections to the hierarchical ext2spice; it now generates correct netlists for standard-cell designs (have not tried examples with connections more than one level deep in the hierarchy).
Also: Corrected hierarchical spice deck writing with respect to arrayed instance and with respect to connections made to levels deeper than the next level of the hierarchy.
Also: Correction to extraction tile perimeter walk, to avoid splitting a node where two non-manhattan tiles join at a corner, where both tiles have been processed before. Such tiles effectively pinch off the node as seen by the walk algorithm. Solution is to process non-Manhattan tiles twice, reassigning them to each node region. Each one ends up assigned one of the two regions, randomly, as before, but ensuring that all tiles in a node get processed.- December 23, 2010 at 2:40am
Corrected a GDS output error in which magic generates output from its own database for a cell placed (manually) inside a vendor GDS cell which itself points to a nonexistant GDS file. A rare error, but one that produces very bad output. Changes correspond to change made to the magic-7.5 database.- April 26, 2011 at 12:36pm
Corrected an error with the basic extraction: The "hairy case" (ExtBasic.c line 3000 or so) looks for connecting types on other planes. This requires extending the bounding box of the tile by one in all directions. For non-Manhattan tiles, the resulting search must be done on the resulting expanded TRIANGLE using DBSrPaintNMArea(), NOT the expanded rectangle, which can accidentally cause an extraction short to a type that bounds the split tile on its "empty" side. This occurs in rare occasions, usually where a metal route takes a 45 degree bend around a contact, and will short the route to the contact.
Also: Attempting to fix the git database. . .
- May 26, 2011 at 2:40am
Patches to configure.in and makedbh by David Fang to avoid problem of "echo -n" on systems that do not support that option.
- June 10, 2011 at 2:40am
Corrected the default route width in DEF reads from 3 internal units to 3 lambda, so that the width scales with internal grid scaling.
Also: Update at Thu Jun 9 07:01:15 PDT 2011 by tim
Also: Merge branch 'master' into work
- September 27, 2011 at 3:00am
Modified configure to allow option "--disable-modular" to avoid compiling ext2sim and ext2spice as external modules.
Also: Update at Mon Sep 26 07:49:00 PDT 2011 by tim
Also: Merge branch 'master' into work
Also: Completed changes to make ext2spice and ext2sim internal commands and routines if the "--disable-modular" option is selected.
- November 25, 2011 at 3:00am
Corrected the transistor extraction routine, which would not correctly compute width and length of snaked transistors and resistors for certain geometries where the bottommost segment was not at one of the device ends.
Also: Update at Thu Nov 24 10:42:18 PST 2011 by tim
Also: Merge branch 'master' into work
- March 7, 2012 at 3:00am
Corrections to DRC error updates, which were being incorrectly parsed as subcell interaction errors and given a different area, where they were being deleted later.
Also: Update at Tue Mar 6 11:48:02 PST 2012 by tim
Also: Merge branch 'master' into work
Also: Corrected an error with the multi-plane "surround" DRC rule, which was thought to be correct, but clearly wasn't. . .
- March 8, 2012 at 3:00am
Corrected the minimum number of arguments to a "device" line in the extract file from 13 to 11. This allows the use of vertical diode devices, where the device has only two connections, one of which is a substrate type.
Also: Update at Wed Mar 7 09:18:17 PST 2012 by tim
Also: Merge branch 'master' into work
- March 23, 2012 at 3:00am
Corrected an error with tile marking for DRC hierarchical copying that would mark merged tiles outside of the paint area which would then be missed when un-marking everything at the end of the routine, potentially causing spurious DRC errors.
Also: Update at Thu Mar 22 11:40:25 EDT 2012 by tim
Also: Merge branch 'master' into work
- March 27, 2012 at 3:00am
Tracked down and corrected an error with resistor extraction that affects Intel processor target compiles only---apparent compiler error. Modified code to work around the bug.
Also: Update at Mon Mar 26 17:47:43 EDT 2012 by tim
Also: Merge branch 'master' into work
Also: Cleanup of files that were not supposed to have been in the git repository.
- March 29, 2012 at 3:00am
Correction to ext2spice to avoid accessing the device merge array after merging has been set back to "none" after being set to something else. Otherwise, an array underrun occurs. Also modified ext2spice so that if a cell which itself declares ports is extracted, it does not skip over the contents of the cell, but dutifully creates the netlist as it should.
Also: Update at Wed Mar 28 17:59:14 EDT 2012 by tim
Also: Merge branch 'master' into work
- March 30, 2012 at 3:00am
Changed "u" to "p" in subcircuit area parameter value output, since the 1E6 scalefactor implied by "u" is squared when computing area, as pointed out by Mark Martin.
Also: Update at Thu Mar 29 11:12:11 EDT 2012 by tim
Also: Merge branch 'master' into work
Also: Modified ext2spice behavior so that if a default substrate node is declared to be a non-global (e.g., "gnd"), then that node name will be declared as a port to the subcircuit during hierarchical spice extraction, and the same node name will be used on the top level. This is somewhat of a hack, but so is the concept of an implicit substrate node. It is necessary to ensure that the default substrate name does not conflict with any local node names. However, it does have the correct behavior in that a local name for a substrate, dropped into a subcircuit, becomes a local node in that subcircuit. Note: Still need to do: Pass any substrate node name all the way up the hierarchy.
Also: Additional modification because I realized that the scmos tech allows different implicit substrate nodes for p and n devices, and these need to be properly sorted and made into subcircuit pins.
- April 19, 2012 at 3:00am
As part of debugging a problem with the connect selection method, implemented a useful command option "select short". This command option will search through an existing selection, find the shortest distance between the two (connected) labels, and replace the selection with the shortest path. This makes it very easy to trace shorts in a layout. Unfortunately, it doesn't help at all to debug the problem with the connect selection algorithm. . .
Also: Update at Wed Apr 18 10:25:46 EDT 2012 by tim
Also: Merge branch 'master' into work
Also: Corrected a few errors in the short locator algorithm; seems to work reliably now.
- April 20, 2012 at 3:00am
Corrected an error with connectivity searches on non-Manhattan tiles. Also, corrected an error in the Tcl script that prevented closing layout windows.
Also: Update at Thu Apr 19 15:26:56 EDT 2012 by tim
Also: Merge branch 'master' into work
- April 21, 2012 at 3:00am
Changed default behavior to NOT compile ext2spice and ext2sim as independent loadable libraries. This has been having serious problems with newer versions of gcc, especially in the Ubuntu distribution. Also, cleaned up the scmos directory in the git repository.
Also: Update at Fri Apr 20 10:13:27 EDT 2012 by tim
Also: Merge branch 'master' into work
Also: Removed some diagnostic print statements that got into the distribution by accident.
Also: Corrected an error in the connection search for contact layers, which was missing a check for a contact type, thereby often not selecting certain contacts during a net connectivity search.
- April 25, 2012 at 3:00am
Change to force checking of minimum number terminals for all devices except subcircuit and rsubcircuit in ext2spice. Also, corrected memory allocation for the "maxrect" DRC function, which could cause program crashes. The code was correct in version 7.5 but incorrect in version 8.0.
Also: Update at Tue Apr 24 12:12:40 EDT 2012 by tim
Also: Merge branch 'master' into work
- May 18, 2012 at 3:00am
Argh! New gcc breaks cpp behavior wrt backslash-newline! Still hacking on scmos.tech which should have been switched to M4 a long time ago. This hack uses "sed" to convert backslash to double-backslash so that the preprocessor passes the backslash to the output instead of (unfortunately) breaking input into two lines where one was intended.
Also: Update at Thu May 17 14:44:57 EDT 2012 by tim
Also: Merge branch 'master' into work
- September 10, 2012 at 3:00am
Update at Sun Sep 9 15:44:09 EDT 2012 by tim
- September 18, 2012 at 3:00am
Modified the backing-store mechanism under OpenGL to use the OpenGL back buffer for backing store, instead of copying between the X11 window and a pixmap. This allows backing store to work on systems where the OpenGL bypasses the X11 mapping completely.
Also: Update at Mon Sep 17 10:04:21 EDT 2012 by tim
Also: Merge branch 'master' into work
- September 19, 2012 at 3:00am
Correction to the configure script for OS X. Thanks to Ryan Schmidt of MacPorts for the patch.
Also: Update at Tue Sep 18 08:00:59 EDT 2012 by tim
Also: Merge branch 'master' into work
- September 22, 2012 at 3:00am
Corrected symbol conflict between ext2spice and ext2sim
Also: Update at Fri Sep 21 11:15:06 EDT 2012 by tim
Also: Merge branch 'master' into work
Also: Corrected a bunch of wrong usages of AC_ARG_ENABLE in the configure script
- September 23, 2012 at 3:00am
Applied a patch from Ryan Schmidt to replace the "macosx" definition with the externally-defined "__APPLE__". Also corrected a number of errors where non-void functions fail to return a value.
Also: Update at Sat Sep 22 09:53:44 EDT 2012 by tim
Also: Merge branch 'master' into work
- September 25, 2012 at 3:00am
More function return-value cleanup.
Also: Update at Mon Sep 24 19:15:44 EDT 2012 by tim
Also: Merge branch 'master' into work
- September 30, 2012 at 3:00am
Corrected a small error that allowed unknown layers to define LEF geometry, which would get copied with a negative layer type and cause trouble. . .
Also: Update at Sat Sep 29 18:00:06 EDT 2012 by tim
Also: Merge branch 'master' into work
- October 2, 2012 at 3:00am
Cleanup of return-type compile-time warnings, and duplicate esDevsMerged declaration in ext2spice and ext2sim.
Also: Update at Mon Oct 1 10:35:22 EDT 2012 by tim
Also: Merge branch 'master' into work
Also: Corrections to Cygwin, for compile time (finding Tcl/Tk when library files are named .dll.a), run time (Cygwin no longer sets TERM to "cygwin", or at least seems to have replaced the cygterm with a plain xterm), and for OpenGL using the WGL-enabled (hardware accelerated OpenGL) XWin server.
- October 3, 2012 at 3:00am
Two corrections, one for proper startup under Cywgin and OS X, the other for proper operation with "-dnull".
Also: Update at Tue Oct 2 17:47:09 EDT 2012 by tim
Also: Merge branch 'master' into work
- October 7, 2012 at 3:00am
Correction of launch script for Cygwin
Also: Update at Sat Oct 6 13:25:29 EDT 2012 by tim
Also: Merge branch 'master' into work
- October 12, 2012 at 3:00am
Corrected an error with the CIF "94" and "9" commands and the new rendered label format that would cause a crash if the short form of "94" (no layer given, existing layer assumed) was used.
Also: Update at Thu Oct 11 15:03:03 EDT 2012 by tim
Also: Merge branch 'master' into work
- November 3, 2012 at 3:00am
Revised hierarchical netlist output from "ext2spice" such that instance IDs are retained in the instance name passed to SPICE for the subcircuit. This will aid in cross-probing between netgen and magic for LVS purposes.
Also: Update at Fri Nov 2 13:10:59 EDT 2012 by tim
Also: Merge branch 'master' into work
- November 7, 2012 at 3:00am
Corrections for OpenBSD compilation from Anthony J. Bentley. This includes a more proper handling of Tcl/Tk in the configure.in file, and removes a bunch of dubious in-line code from getrect.c that inadvisedly poked around inside the stdio FILE structure for what may have once been (but probably no longer is) a performance improvement on some systems.
Also: Update at Tue Nov 6 16:54:14 EST 2012 by tim
Also: Merge branch 'master' into work
- November 15, 2012 at 3:00am
Corrected an error in the non-Tcl compile that was introduced by switching the Tcl compile to "disable-modular" by default. non-Tcl version now compiles without fatal errors.
Also: Update at Wed Nov 14 09:16:51 EST 2012 by tim
Also: Merge branch 'master' into work
- November 16, 2012 at 3:00am
Corrected an error in which "lef read" would cause magic to crash if no technology file was read, or if the technology file was lacking any cifoutput styles.
Also: Update at Thu Nov 15 13:25:58 EST 2012 by tim
Also: Merge branch 'master' into work
- December 3, 2012 at 3:00am
Corrected an error in the tile unmarking algorithm in which the last tile in the search path does not get unmarked.
Also: Update at Sun Dec 2 17:22:23 EST 2012 by tim
Also: Merge branch 'master' into work
- January 24, 2013 at 3:00am
Added backslash preprocessing to cif_template/Makefile to work around a gcc preprocessor bug. Not certain that the change is actually useful.
Also: Update at Wed Jan 23 12:43:50 EST 2013 by tim
Also: Merge branch 'master' into work
- March 15, 2013 at 3:00am
Corrected an extractor error when printing region information for a region that declares a non-Manhattan tile type at the region origin. This would create a crash condition.
Also: Update at Thu Mar 14 15:20:50 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Ext2spice correction: Addition of hierarchical SPICE decks introduced the use of names instead of numbers after "X" for subcircuits. The full hierarchical name should have been used, not just the use ID name.
- March 16, 2013 at 3:00am
Corrected a problem with commas from 2-dimensional arrays ending up in SPICE node names, where SPICE considers a comma to be a field delimiter. Also: Added an extension to the subcircuit parameter definition in the techfile to account for additional scaling inside the subcircuit.
Also: Update at Fri Mar 15 11:34:50 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Added code to handle annular (ring) resistors.
- March 17, 2013 at 3:00am
Corrected subcircuit output from ext2spice to avoid generating duplicate ports when the port has more than one label attached to it.
Also: Update at Sat Mar 16 13:57:22 EDT 2013 by tim
Also: Merge branch 'master' into work
- April 12, 2013 at 3:00am
Expanded LEF file syntax to include reading POLYGON statements.
Also: Update at Thu Apr 11 10:38:05 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Added FIXED to the pin properties handled by the DEF file reader.
- April 15, 2013 at 3:00am
Corrected a segfault condition when magic is passed a graphics style file that is an older format.
Also: Update at Sun Apr 14 10:11:08 EDT 2013 by tim
Also: Merge branch 'master' into work
- April 25, 2013 at 3:00am
Changes to several "drc" commands to return lists to Tcl/Tk, including "drc list find", "drc list count", and "drc list count total".
Also: Update at Wed Apr 24 13:34:10 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Some changes to the DRC dump routine, uses hash table to hold lists of coordinates per error type, and these can be dumped per error type per cell. Tcl's handling of long list results is not particularly good. May add a version that dumps information directly into a file, later.
- April 27, 2013 at 3:00am
Corrections from the Gentoo developers
Also: Update at Fri Apr 26 15:38:36 EDT 2013 by tim
Also: Merge branch 'master' into work
- April 30, 2013 at 3:00am
Modified the parsing of the "lef" section of the techfile to include a statement "contact", which is similar to "cut", but will cause a LEF file read to replace any cut layer found in the input with a contact of the sort that magic usually defines (that is, a contact area to be filled with cuts according to a generate rule).
Also: Update at Mon Apr 29 17:42:25 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 3, 2013 at 3:00am
Corrected an error in which reading a DEF file does not register components' use IDs in the parent cell's hash table, resulting in the inability to find the cell use using "select cell".
Also: Update at Thu May 2 14:43:58 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 7, 2013 at 3:00am
Corrected the original graphics backing store behavior, which had become broken by the introduction of the OpenGL framebuffer backing store.
Also: Update at Mon May 6 11:15:52 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Realized after some research that OpenGL framebuffers will not update properly underneath obscured parts of the window. The X11 pixmap buffering is restored as the default setting, while the OpenGL framebuffer can be used (with annoying restrictions like having to keep the layout window on top) with systems that can't handle the X11 pixmap buffering.
- May 8, 2013 at 3:00am
This is a nonfunctional change, due to a reconfiguration step.
Also: Update at Tue May 7 16:15:27 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 15, 2013 at 3:00am
Made changes to attempt to overcome Magic's lack of handling labels that are attached to layers present in a subcell but not in the cell where the label resides. I believe that I have fixed this behavior with respect to circuit extraction. This behavior does not extend to the "getnode" command. The behavior always appeared to be correct for network connectivity selection.
Also: Update at Tue May 14 14:23:36 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Some corrections to code for handling sticky labels during extraction; succeeds in extracting a fairly comprehensive test case.
- May 16, 2013 at 3:00am
Implemented auxiliary methods to work with the improved handling of sticky labels. This includes the ability to read/write the sticky flag to database .mag files, a method to create a label with the sticky flag set using the "label" command, and a way to query both the sticky flag and the layer type of the label using "setlabel". Added widgets to the "texthelper" GUI window for both declaring the metal type to use and for setting the sticky flag.
Also: Update at Wed May 15 13:12:38 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 17, 2013 at 3:00am
Modifications to correct for sim file non-integer scalefactors confusing extresist. However, there are more things confusing extresist than this, but it's a start.
Also: Update at Thu May 16 10:33:32 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Corrected an error with the extresist options that would cause the options to get thoroughly messed up if any option was explicitly set or changed.
Also: More corrections related to non-integer lscale in .ext file. This had been handled incorrectly with the Transform for all device visits in ext2spice and ext2hier. It is now correct, although numerous instances of type re-casting from integer to float and back exist throughout the ext2spice and ext2hier code and should be checked carefully.
- May 18, 2013 at 3:00am
Corrected a minor issue where the extraction would send output to the xterm terminal rather than the tkcon console.
Also: Update at Fri May 17 12:15:54 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 21, 2013 at 3:00am
Found an unhandled issue with sticky labels: If a sticky label was outside the DRC interaction area of all paint (in the same cell), then it would be missed. Added a label check, and all is well now.
Also: Update at Mon May 20 19:31:59 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 22, 2013 at 3:00am
Corrections to GDS read to eliminate empty labels, and to generate better output for labels being modified. Added the ability to write a ".global" card on hierarchical ext2spice output, so that global substrate nodes are not represented as local nodes in each subcircuit.
Also: Update at Tue May 21 17:36:11 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 23, 2013 at 3:00am
Corrected an error in the GDS read that prevents the "post-order" read-in from working correctly under certain rare circumstances.
Also: Update at Wed May 22 13:14:58 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Quick correction to the post-order reading patch.
Also: Corrected a (rare) crash condition in ext2hier
- May 25, 2013 at 3:00am
Set of patches from Bernd Jendrissek; fixes a number of places where 64-bit pointers were handled incorrectly; also fixed the mess I made of the ext2spice print statements while fixing the non-integer scale error a few days ago.
Also: Update at Fri May 24 20:12:07 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 26, 2013 at 3:00am
Corrected an error in hierarchical spice extraction that would fail on arrayed instances in the middle of a 3 or more deep hierarchy. Also, corrected the output of the ".global" statement in hierarchical spice output to convert a TCL variable name to its value in the list of global variables.
Also: Update at Sat May 25 13:24:18 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 30, 2013 at 3:00am
Change to magic's hierarchical ext2spice to avoid writing the same node name twice in a subcircuit's port list. Not sure this is advisible. . .
Also: Update at Wed May 29 18:02:18 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 31, 2013 at 3:00am
Extended extflat flags to include converting "=" in node names, so that other tools do not confuse the node names with parameters.
Also: Update at Thu May 30 14:45:23 EDT 2013 by tim
Also: Merge branch 'master' into work
- June 2, 2013 at 3:00am
Corrections kindly submitted by Bernd Jendrissek to correct ext2sim to match changes in the arguments to calls made to EFVisitDevs() for use by ext2spice.
Also: Update at Sat Jun 1 11:42:01 EDT 2013 by tim
Also: Merge branch 'master' into work
- August 22, 2013 at 3:00am
Removed an errant "-pg" that was in the tcltk Makefile, leading to the creation of a "gmon.out" file everytime magic is invoked using magicexec (e.g., "magic -noconsole").
Also: Update at Wed Aug 21 12:54:52 EDT 2013 by tim
Also: Merge branch 'master' into work
- August 30, 2013 at 3:00am
Updated config.guess, especially for Cygwin on x86_64.
Also: Update at Thu Aug 29 13:40:46 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 8, 2013 at 3:00am
Correction to LEF read routine to properly parse quoted material.
Also: Update at Sat Sep 7 19:24:45 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 13, 2013 at 3:00am
Expanded the "CIFGetContactSize" function to include handling contacts formed by the "squares-grid" or "slots" operators.
Also: Update at Thu Sep 12 07:33:19 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Modification to value where Arm compiler is confused about what constitutes a signed value.
- September 14, 2013 at 3:00am
Modified code in ExtTech.c to work around a gcc compiler bug in which combining a result of atof() with a constant value (in this case, 1000) produces a NaN result on i686 processors with an FPU. Has not been an issue on 64-bit machines.
Also: Update at Fri Sep 13 10:03:45 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 15, 2013 at 3:00am
Discovered that drcAssign mapped arguments "dist" and "cdist" to type "short", incorrectly. Although distances don't usually exceed 16 bits, a minimum area DRC rule area value at a small feature size---like 0.18um using nanometer units for DRC rules--- can easily exceed this, and results definitely do not come out as expected. . .
Also: Update at Sat Sep 14 14:08:09 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 24, 2013 at 3:00am
Update at Mon Sep 23 22:18:32 EDT 2013 by tim
- October 1, 2013 at 3:00am
Irrelevant change to config.status; supposed to be ignored. . .
Also: Update at Mon Sep 30 11:44:38 EDT 2013 by tim
Also: Merge branch 'master' into work
- November 5, 2013 at 3:00am
Some changes to the "lef write" command to support writing of LEF macro libraries. Corrected LEF layer name output. Added "bound" keyword to LEF section to support boundary layers used to define a subcircuit boundary. Added command option "port makeall" to simplify the process of generating ports for a subcircuit, in case only normal labels are used to define the ports.
Also: Update at Mon Nov 4 17:49:54 EST 2013 by tim
Also: Merge branch 'master' into work
Also: Syntactical correction to LEF layer definitions for "lef write".
- November 6, 2013 at 3:00am
Improved the LEF write routine to first write the geometry for each pin into a yank buffer, and then copy the yank buffer to the LEF file output. This allows contacts to be pulled out of the metal route geometry, and the tile handling routines simplify the tile structure to its minimal form in the output file.
Also: Update at Tue Nov 5 10:09:10 EST 2013 by tim
Also: Merge branch 'master' into work
- February 11, 2014 at 3:00am
Corrected an error in sprintf() writing an array out-of-bounds, as kindly pointed out by David Binderman.
Also: Update at Mon Feb 10 09:10:28 EST 2014 by tim
Also: Merge branch 'master' into work
- February 12, 2014 at 3:00am
Some edits as a result of David Binderman's report on the results of running cppcheck on the source: Two failures to close an open file, and one string vector overrun.
Also: Update at Tue Feb 11 09:32:08 EST 2014 by tim
Also: Merge branch 'master' into work
- March 4, 2014 at 3:00am
Corrected two errors preventing the non-Tcl version from compiling properly.
Also: Update at Mon Mar 3 19:15:51 EST 2014 by tim
Also: Merge branch 'master' into work
- April 17, 2014 at 3:00am
Modified the DEF file reader to accomodate PIN statements that declare a pin placement before declaring the pin layer.
Also: Update at Wed Apr 16 09:41:07 EDT 2014 by tim
Also: Merge branch 'master' into work
- May 17, 2014 at 3:00am
Corrected an error that causes mouse buttons to generate Ctrl-C interrupts. Possibly due to changes in Tcl/Tk version 8.6. Thanks to Jim Everitt for the bug fix.
Also: Update at Fri May 16 12:12:59 EDT 2014 by tim
Also: Merge branch 'master' into work
- May 17, 2014 at 10:21am
Ah, that's where drc.tcl went. Will need to remove it. . .
Also: Update at Sat May 17 10:16:22 EDT 2014 by tim
Also: Merge branch 'master' into work
- May 17, 2014 at 10:24am
Removed drc.tcl from the main directory, as promised.
Also: Update at Sat May 17 10:24:32 EDT 2014 by tim
Also: Merge branch 'master' into work
- May 27, 2014 at 3:00am
Update at Mon May 26 09:55:08 EDT 2014 by tim
- May 28, 2014 at 3:00am
Update at Tue May 27 19:10:18 EDT 2014 by tim
- May 30, 2014 at 3:00am
Update at Thu May 29 10:52:48 EDT 2014 by tim
- May 31, 2014 at 3:00am
Update at Fri May 30 14:41:22 EDT 2014 by tim
- June 1, 2014 at 3:00am
Update at Sat May 31 14:50:55 EDT 2014 by tim
- June 28, 2014 at 3:00am
Added ext2spice and ext2sim support for diodes with one terminal on a substrate plane.
Also: Update at Fri Jun 27 15:16:14 EDT 2014 by tim
Also: Merge branch 'master' into work
- June 30, 2014 at 3:00am
Corrected an error in the automatic enumeration of ports that prevented numbered ports from being listed in a subcircuit's port list in SPICE.
Also: Update at Sun Jun 29 10:54:04 EDT 2014 by tim
Also: Merge branch 'master' into work
- July 1, 2014 at 3:00am
Added a new extraction type "msubcircuit" for the purpose of dealing with MOSFET models that are subcircuits having the same pin order as the M record. Normally the gate node is used as the identifier by the "subcircuit" extraction type and is written out as the first pin of the device. But SPICE MOSFETs use the bizarre and unfortunate order of S, G, D, B. The "msubcircuit" extraction type preserves this ordering. Otherwise, it operates exactly like the "subcircuit" extraction type.
Also: Update at Mon Jun 30 16:49:57 EDT 2014 by tim
Also: Merge branch 'master' into work
- July 13, 2014 at 3:00am
Implemented a new "surround" rule type "directional", which correctly handles cases in which a rule specifies an overlap that only needs to be on one side of any geometry outside corner. This rule usually applies to vias and allows a finer routing pitch. It can only be implemented using a triggered rule.
Also: Update at Sat Jul 12 14:14:11 EDT 2014 by tim
Also: Merge branch 'master' into work
- July 18, 2014 at 3:00am
Implemented command option "drccheck" for "cif" and "gds" commands. This option defaults to true, but can be set to false to force cells read from a database to be assumed DRC clean. This prevents the DRC checker from being forced to check every single cell from a GDS read but does not, like the "readonly" option, make it permanently un-checkable.
Also: Update at Thu Jul 17 09:46:43 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Changed the "drccheck" option to be the same for both the "cif" and "gds" commands, to avoid confusion.
- July 24, 2014 at 3:00am
Corrected the "gds drccheck false" command option, which was not working because a CIF routine was called at the end of a GDS read and was checking the wrong option "cif drccheck". Took the opportunity to fix some instances where a GDS read reports "CIF" errors, and vice versa.
Also: Update at Wed Jul 23 15:54:09 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Removed temporary files that should not have been copied to the git repository.
Also: Updated the .gitignore file so those files will be ignored in the future.
- August 21, 2014 at 3:00am
Corrected the "drc" command so that "drc list" or "drc listall" without additional arguments generates an error message rather than crashing magic.
Also: Update at Wed Aug 20 09:18:47 EDT 2014 by tim
Also: Merge branch 'master' into work
- August 28, 2014 at 3:00am
Corrected the extraction of devices with shorted terminals (like varactors) so that the width is not double-counted.
Also: Update at Wed Aug 27 14:56:24 EDT 2014 by tim
Also: Merge branch 'master' into work
- August 30, 2014 at 3:00am
Several corrections: (1) Changed "cif lambda in|out" to "cif scale in|out" because values returned are *not* in lambda! "cif lambda" retained so as to not break existing code, but returns a warning message. (2) "drc listall why" corrected to return error area positions in the coordinate system of the cell being checked. Comparing the check area in the top-level coordinate system vs. the error box in the local coordinate system probably was causing "drc why" to miss errors or report errors outside the check box. (3) Corrected an error that would cause the "edit" command to silently fail when a cell is not selected rather than return a "no cell selected" error message as it was supposed to.
Also: Update at Fri Aug 29 10:04:26 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Implemented a more rigorous system for determining the file path of instances. Instances that are not in the same directory as the parent cell will be written out to the parent cell definition as "use" instead of "use ". This is intended to prevent confusion between multiple versions of a cell definition that are all in the search path.
- August 31, 2014 at 3:00am
Extended the method for declaring parameters to pass to a subcircuit device (including rsubcircuit and msubcircuit) to include terminal areas and perimeters, a critical category of parameter types that was previously missing. This code does not address the additional problem of double-counting node parasitics.
Also: Update at Sat Aug 30 15:25:57 EDT 2014 by tim
Also: Merge branch 'master' into work
- September 1, 2014 at 3:00am
Modified the generation of terminal areas and perimeters for extracted subcircuit devices so that they match the values calculated for the same devices if they are extracted as non-subcircuit devices (mainly mosfets), which includes Magic's usual method of avoiding double-counting, with or without evenly distributing such values among devices connected to the same node.
Also: Update at Sun Aug 31 11:56:29 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Removed deprecated code.
Also: Corrected an error in which I forgot the local unique usage of StrDup() and caused a double-free incident.
- September 3, 2014 at 3:00am
Implemented the "tech layer revert" command option. The tech file can declare certain layers to be locked. Unlike previously, this information is saved. That way, processes can call the "tech layer unlock" command to access the locked layers, and do not need to track whether those layers were locked or unlocked prior to the process; the process just does "tech layer revert" at the end and the active layers return to the set declared in the tech file.
Also: Update at Tue Sep 2 11:22:13 EDT 2014 by tim
Also: Merge branch 'master' into work
- September 7, 2014 at 3:00am
Corrected/added some entries in the mos 7bit and 24bit dstyle files to make them compatible with the OpenGL dstyle file.
Also: Update at Sat Sep 6 11:26:53 EDT 2014 by tim
Also: Merge branch 'master' into work
- September 8, 2014 at 3:00am
Corrected parsing of the "msubcircuit" device, which was declaring that it requires only one terminal, leading to missing terminal records in the .ext file output, and, as a result, not enough pins for the corresponding FET call in the SPICE file output.
Also: Update at Sun Sep 7 17:10:12 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Corrections to extracted output of subcircuit devices: Area and perimeter were both parsed from the .ext file and output incorrectly to the spice file. Both errors have been fixed.
- September 10, 2014 at 3:00am
Corrected ext2hier, which was not able to generate parasitic cap values due to a missing printf format, and ext2spice and ext2hier, which were generating duplicate output of the source or drain parameter text for FET devices using the "msubcircuit" extraction method.
Also: Update at Tue Sep 9 14:09:19 EDT 2014 by tim
Also: Merge branch 'master' into work
- September 11, 2014 at 3:00am
Corrected a small error with the pick tool in which "pick copy" would not reset the cursor position and thus could acquire a large offset between the cursor position and the position of the selection being moved.
Also: Update at Wed Sep 10 17:39:57 EDT 2014 by tim
Also: Merge branch 'master' into work
- September 12, 2014 at 3:00am
Added a method, suggested by Miguel Eduardo Flores Gomez, to allow gate attribute text to be auto-incremented. Otherwise, gate attribute text on a device in a subcircuit that is used more than once will produce duplicate devices in the SPICE netlist when the circuit is flattened.
Also: Update at Thu Sep 11 10:26:13 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Reconsidered the previous change, modified it so that the gate attribute is prefixed by the hierarchy path when generating the device name, ensuring that names are unique without the user specifically making it that way.
- September 13, 2014 at 3:00am
Changed behavior of device merging to include "device msubcircuit" and "device rsubcircuit".
Also: Update at Fri Sep 12 20:47:21 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Corrected device merges, which were succumbing to magic's sloppy function prototyping. However, the devMerge record was changed to keep length and width records as type float, since the usage has been to apply merges after scaling.
- September 16, 2014 at 3:00am
Made a few changes to the macro parsing, including fixing a typo that for a long, long time had disabled multi-line macros by accident. The changes also include parsing key names that are surrounded by single quotes. Also, the wrapper now shows the cursor position in microns instead of lambda.
Also: Update at Mon Sep 15 14:55:14 EDT 2014 by tim
Also: Merge branch 'master' into work
- Feburary 9, 2006
Original version. The only difference between this and version 7.3 is a cleanup of some of the instructions, and removal of several unused experimental features (to improve stability of the product).- Feburary 16, 2006
Added new features to the technology file "drc" section:
- The ability to create multiple DRC styles, with the same format as "cifoutput", "cifinput", and "extract" styles.
- The ability to declare style variants for DRC styles, like "cifoutput", "cifinput", and "extract".
- A "scalefactor" line in the DRC style section that declares the scale of all distance units in DRC rules to be (lambda / scalefactor). So DRC distances can be given in fractional lambda (the scalefactor is needed because the distance values still need to be integers).
- Feburary 18, 2006
Two minor bug fixes for setting grXscrn in grTk1.c, and forcing tkcon.tcl to be world readable/executable on install.- Feburary 23, 2006
Changed $CAD_HOME to be "$libdir" instead of "$prefix", to comply with distributions that want to define $libdir as /usr/share/. This means that by default, $CAD_HOME is now /usr/local/lib/ instead of /usr/local/.- Feburary 24, 2006
Changed $CAD_HOME to $CAD_ROOT so as not to conflict with previous distributions of Magic. $CAD_HOME is no longer used by Magic. Also: Changed man page magic.5 to mag.5 to avoid conflicting with an existing man page by that name, and added man page magic.1 to the list of installed files in Makefile (don't know why it was missing).
Also: Added "$(DESTDIR)" to installation Makefiles so magic can be compiled in a sandbox using "make DESTDIR=staging_area install"- March 14, 2006
Corrections to the maxwidth and widespacing rules to match changes to version 7.4.7.- March 15, 2006
Minor correction to the CIF input code to prevent mishandling cells that are called prior to being defined, to match changes to version 7.4.8.
Also: Removed tcl_precision from the wrapper script and changed the scripts to use the Tcl format function instead.- April 3, 2006
Corrections by Philippe Pouliquen for DRC handling of corner extensions.- April 6, 2006
Corrected the "make depend" to generate dependencies on ALL of the sources in the graphics subdirectory, not just the ones selected for compilation. Recreated the Depend files.- April 7, 2006
Extended the use of the "alias" keyword in the "types" section of the techfile to include single-layer aliases, equivalent to adding the alias name to the list of names that define the layer in the first place.- April 10, 2006
Corrected round-off errors in the LEF read routines. Thanks to Frank Lien for identifying the error.- April 7, 2006 at 2:50pm
Further refinement of the use of the "alias" keyword: Labels placed on an alias layer in an input .mag file will be re-assigned to the first real layer defined by the alias.- April 13, 2006 at 9:06pm
Corrected the DEF read code (thanks to Frank Lien for bringing the error to my attention) to correctly generate the reverse mapping table for mapping LEF layers to magic layers.
Also: Fixed Philippe's changes to the DRC code so that it now (again) correctly computes the widespacing rule.- May 7, 2006 at 9:09pm
Corrected an error in the DEF read/write code in which the reverse lookup table for mapping LEF layers to magic layers was incorrectly mapping lef via layers to magic routing layers.
Also: Corrected Philippe's changes to the DRC code to let the code correctly compute the widespacing rule, as it used to.
Also: Corrected a crash condition that occurs when attempting to execute certain commands on a non-editable cell (copy, move, stretch, etc.). Thanks to Eric Work for helping to debug this error.
Also: Fixed 64-bit warnings about integer/pointer conversions
Also: Automated packaging and rpm building directly from CVS Build an RPM: make distclean; make dist; rpmbuild --clean -ta magic-*.tgz
Also: Didn't quite patch right the first time
Also: Fixed 64-bit warnings only in magic 7.5
Also: Applied clean-ups and updates to match recent fixes in magic 7.4
Also: Fixed fPIC problem on cygwin
Also: Fixed .spec file dependencies
Also: Updated 64-bit patch to match magic 7.4
Also: Changed tile.h to increase the value of INFINITY (although this did not actually fix my problem, it needs to be done anyway). Also, added a search path for Tk that is compatible with Ubuntu Linux. Thanks to Osei Poku for the patch.- May 10, 2006 at 2:40am
Fixed error that crashes magic when attempting to print the contents of a macro that has been set to an empty string.- May 12, 2006 at 2:40am
2006-05-11 22:19 tim Corrected the long-standing error in which labels randomly are turned into ports. This was caused by a type mismatch between the Label and labelUE (undo record) entries for label position and type.
Also: Made changes to allow the "scale" value in the extract section to be set to a non-integer value, so that values under 1 centimicron can be represented. This is necessary for proper extraction in 130nm and 90nm technologies, or for any value of magic internal units (e.g., after scaling) which is not an integer number of centimicrons.- May 13, 2006 at 2:40am
2006-05-13 00:36 tim Added sanity checking on the number and total length of the command line arguments in TxTclDispatch (i.e., the lack of checking only applies to the Tcl version). Raised the maximum number of command arguments to 200, because scripts can generate some pretty long commands (for example, "polygon").- May 24, 2006 at 2:40am
Added an alternative definition for roundf() to allow compilation under Solaris, which doesn't have it. Changed one of the makefiles which may or may not cause Solaris to properly generate the correct symbolic link to readline. My guess is, probably not.
Also: Added command options "cursor [internal | lambda | user]" to allow the cursor position to be specifically reported in the indicated units. Changed the returned cursor position to snap according to the current snap setting. Corrected the wrapper to place the crosshair according to true (internal) units, so that the crosshair is correct when the grid is scaled.- May 27, 2006 at 2:40am
2006-05-26 15:55 tim Restored a critical line that went missing in the DRCextend.c file; otherwise, magic goes into an infinite loop on a drc "area" operation.
Also: Changed man page Makefile to work correctly when $DESTDIR is defined.- June 14, 2006 at 2:40am
2006-06-14 00:13 eric Minor clean-up of build files- June 17, 2006 at 2:40am
2006-06-16 09:16 tim Added window manager handling for closing the 3D window, so that the magic window is properly closed when the window manager kills the window. Otherwise, magic can segmentation fault (error reported by Oliver Banzhaf).- June 20, 2006 at 2:40am
2006-06-19 07:00 tim Added lib64 to search path for Tcl/Tk in the "configure" script.
Also: Regenerated the "configure" script from "configure.in".- June 24, 2006 at 2:40am
2006-06-23 12:36 tim Added handling of variables $Opts(callback) and $Winopts(frame, callback) to take care of the case that a certain setup procedure needs to be called upon the creation of a window. For example, if one wants to set a grid, or turn on the crosshair, etc., it cannot be done in the .magicrc startup script, because at the time the script is executed, no window exists. The last action of procedure openwrapper{} is to do "catch $Opts(callback)" and "catch $Winopts(${framename}, callback)". So one can, for example, write "set Opts(callback) {grid 2 ; snap grid}" in the .magicrc to ensure that each window appears with a grid spacing of 2.- June 25, 2006 at 2:40am
2006-06-24 18:55 tim Corrected the "save" command so that it operates correctly when using the command to rename a non-edit cell to a different name. Previously such an attempt would crash magic.- July 10, 2006 at 2:40am
2006-07-09 09:05 tim Added DRC extension that lifts the restriction that "spacing" rules with "touching_ok" must have both layers in the same plane. This is a very useful rule extension, and allows the DRC to distinguish between, for example, ndiff inside or outside an nwell, or distinguish between types of contacts used with generic contact cuts.
Also: Redesigned the new spacing rule so that it requires the keyword "surround_ok", since mere coincidence doesn't satisfy the rule. May need to change the definition or allow "coincidence_ok" and/or "overlap_ok" to cover such situations.- July 14, 2006 at 2:40am
2006-07-13 16:35 tim Changed the code that handles GDS read-only cells so that 1) it doesn't crash if GDS_FILE is defined but GDS_START and GDS_END are not, and furthermore, 2) having GDS_FILE set but no GDS_START and GDS_END defined produces a GDS output in which the cell in question is instanced but not defined. This method can be used in conjunction with Cadence PIPO stream in with the option "Retain Reference Library" set to port layout between Cadence and Magic without having Cadence generate local copies of all the library parts.- July 15, 2006 at 2:40am
2006-07-14 11:34 tim Corrected an error in the Tcl wrapper script that generates an error message if the Opts(callback) variable is not defined.- July 26, 2006 at 2:40am
2006-07-25 12:10 tim Initial changes to the router code. Corrected errors arising from internal rescaling: Global pointers to planes in the maze router needed to be reattached (dangling pointer error), and the scaling of router parameters (e.g., route layer widths) was inverted (usually causing the route widths to become zero).- July 28, 2006 at 2:40am
2006-07-27 09:29 tim Fixes to the router code, adding necessary function prototypes and fixing problems due to the difference between "double int" and "double long" types in the heap routines. Thanks to Michael Godfrey for investigating the problems.
Also: And one more minor fix to the prototype declarations in heap.h.- July 29, 2006 at 2:40am
2006-07-28 08:57 tim Major, major changes to the router code in Magic. Reorganized the initialization routines for the routers so that they are stable with respect to reloading technology files and rescaling magic's internal grid. Fixed the code that is exercised by the "tech drc..." command, and used this code to set the maze router properties. Added a "tech drc surround" command option and associated code, which is currently not yet attached to the maze router initialization (but will be done soon). One side effect: The "plow" rule setup has been removed, so the "plow" function is temporarily disabled, until I can put them back in, based on the "tech drc" code.
Also: First important change to the Magic mazerouter: Prevented the maze router from registering blocks for routing layers in non-interacting planes. This single change has a SIGNIFICANT impact on router results. More to be done, though. . .
Also: Fixed the "other" error in the maze router, which is that a cast to double long was fouling up the arguments to mzExtendInitPath(), causing the maze router to completely lose track of any tiles at the start point.- July 30, 2006 at 2:40am
2006-07-29 16:03 tim Next router refinement: Corrected maze router to distinguish between contacts that are ABOVE the destination pin vs. those that are BELOW the destination pin. Otherwise, it just uses the first contact type that connects to the current route layer, without regard to whether or not it connects to the destination layer!- August 1, 2006 at 2:40am
2006-07-31 09:00 tim 1) Returned the OpenGL grid drawing to the original version, since I don't have time right now to work on the "fading grid" algorithm. 2) More refinements of the maze router.- August 2, 2006 at 2:40am
2006-08-01 15:43 tim Corrected a yet subtler error in the maze router in which marked tiles were not cleared between marking the route start and end points, so that if the route started and ended in different instances of the same cell, the destination connected area could get truncated or even completely lost.
Also: Reverted the "route" router to the traditional behavior. The "new" code allows the maze router to draw stems to connect to internal pins, which lifts the restriction that pins must be on the boundary of a cell for the router to be able to reach them. However, the maze router still has unsolved problems and uses different parameters from the technology file, so it can't be assumed to be a replacement for the simple stem router. Therefore, the option "router mazestems" enables the new code (with the internal pin stem router), while the default behavior is the original one.- August 14, 2006 at 2:40am
2006-08-13 14:41 tim Corrected the magic-to-screen coordinate conversion so that large coordinates don't overflow. Changed (dlong)(a * b) to ((dlong)a (dlong)b). Thanks to Mark Martin for pointing out the error.- August 21, 2006 at 2:40am
2006-08-20 16:38 tim More corrections for the maze router. There are still instances where the router goes berzerk, but these are becoming rarer. Reduced the size of the maze router paint tables, which were sized at TT_MAXTYPES x TT_MAXTYPES even though they use no more than about a dozen types. The router has successfully routed a simple test case in which it routed a whole netlist with single point-to-point routes using a simple TCL script.- August 23, 2006 at 2:40am
2006-08-22 16:13 tim More corrections and one major addition to the maze router. The addition is to add to the technology file format for mzrouter layers an "overCost" defining the cost of routing a layer directly over an adjacent route layer. The result is that Magic avoids routing directly over other pins and other obstructions unless it finds no other alternative. The result is that Magic's maze router results are much improved and tend not to block unrouted pins.
Also: Added the script mazeroute.tcl to the source distribution. This routing defines the Tcl procedure "mazeroute", which attempts to route a netlist using only the maze router.
Also: A couple of additions to allow the Tcl version of magic to automatically read in the mazeroute.tcl script and make the "mazeroute" command available.- August 26, 2006 at 2:40am
2006-08-25 09:18 tim Minor cleanup of the mazerouter code (mostly eliminating diagnostic messages). Also, changed "hnvdiff" to "hvndiff" in mos.24bit.dstyle, as pointed out by Erwin Prinz.
Also: Added script "mazeroute.tcl" that allows a more involved interactive rip-up and reroute maze router with a (1st attempt) GUI.- August 27, 2006 at 2:40am
2006-08-26 13:16 tim Yet more changes to that pesky maze router.
Also: Additions and corrections to the interactive maze router GUI. Added return codes to the iroute command so that the interactive maze router can tell what's going on.- September 2, 2006 at 2:40am
2006-09-01 11:37 tim Fixed error pointed out by James Stine in which "ext2sim" does not set parasitic resistor and capacitor thresholds based on the "-R" and "-C" options passed to "ext2sim" on the command line.
Also: Corrected proto.magicrc.m4 so that M4 correctly generates the right result when USE_NEW_MACROS is not set. Thanks to James Stine for the bug report.- September 14, 2006 at 2:40am
2006-09-13 14:02 tim 1) A few more changes to the maze router, especially to add a timeout function to the "iroute" command, so that failing routes do not hang the program and require a Ctrl-C delivered to the terminal, and 2) Correction to the routine that finds minimum width and spacing rules from the DRC tables. "widespacing" and "maxwidth" rules no longer mask the proper minimum tolerance rules. A more complete set of rule queries would be helpful.- September 20, 2006 at 2:40am
2006-09-19 13:56 tim Corrected a long-standing error in which the file descriptor opened by mkstemp() needs to be closed. Strangely, only Cygwin appears to care that "a" is open when doing rename("a", "b"). Possibly this has to do with the fact that the Windows filesystem doesn't implement files by inodes, but on the other hand, the man page for rename() claims that it will raise error EBUSY if either "a" or "b" is open.- September 22, 2006 at 2:40am
2006-09-21 14:12 tim Changed the "wire segment" routine (which also handles CIF and GDS paths) to handle paths with direction reversals (180 degree turns).- September 23, 2006 at 2:40am
2006-09-23 00:30 tim Corrections to the extraction method for "devcap" modeled capacitors, as shown in bug reports by Mark Martin. The simple 1-tile calculation was removed because the multi-tile calculation is more correct even for single tiles, since it computes L and W from the device boundary instead of estimating it from the area and perimeter values. The multi-tile calculation incorrectly output estimated width instead of estimated length. This has been fixed. The algorithm still computes the bounding box of the capacitor, then outputs the measured width and a length estimated from the total capacitor area divided by the measured width. This gives a result that is reasonably accurate given the brain-dead SPICE model for semiconductor capacitors as having parameters W and L instead of A and P.- September 25, 2006 at 2:40am
2006-09-24 16:35 tim Changed the "what" command to return labels along with their cell USES, not cell DEFS. With the change, it is possible to use the result of "what -list" to verify the validity of a routed network. Also: Added some routines to the mazerouter.tcl script, although as these have not been added to the GUI, they will not be immediately obvious. The gist of it, however, is to use the above change to the "what" command to verify each iroute result. One benefit is to read in a netlist and a partially-routed layout and automatically categorize the nets into routed and unrouted.- October 5, 2006 at 2:40am
2006-10-04 10:30 tim Changes to place the search for the round() and roundf() functions in the configure step, and to define them in utils/math.h if not available in the math library, instead of having definitions scattered through the code. This step fixes one compile error on systems (e.g., Sun) without the C99 math functions in libmath.
Also: Corrected the scaling routing to properly set the MODIFIED flag if points were rounded when scaled, and to leave it alone otherwise. Thanks to Philippe Pouliquen for pointing out the error.
Also: Fixed an error that failed to zero the layer mask assigned to an "alias" name, resulting in a random assortment of layers. Thanks to Marcus Escobosa for pointing out the error.- October 10, 2006 at 2:40am
2006-10-10 00:04 tim Changed the PNM plot command from "plot pnm" to "plot pnm ", with the 4th argument being the final width of the plot in pixels. This avoids the guessing game of what the plot size will be when using the scalefactor. Changed the maze router algorithm to allow routing inside start terminal connected areas with zero cost per length. The original algorithm forces the route to start on the lower left-hand corner of a tile in the start list, and route straight in any direction past the end of the start terminal area. This prevented the algorithm from starting a route in the middle of a long wire, even when that would produce the shortest route. The result is much better routing of networks of multiple nodes, such as clock networks. - October 14, 2006 at 2:40am
2006-10-13 08:27 tim Changes to "save" routine to match changes made to version 7.4: Does not create a temporary file if the file does not already exists, and otherwise, attempts the append-and-truncate method if creation of the temporary file failed.- October 15, 2006 at 2:40am
2006-10-14 14:52 tim Changes to the maze router; work in progress.
Also: Maze router now exhibits, as far as I can tell, routes with no DRC errors other than those between tiles belonging to the route itself. Took a first stab at correcting the intra-route errors by making adjustments to the route prior to painting back into the layout. More of this work will follow. . .- October 21, 2006 at 2:40am
2006-10-20 21:36 tim 1) Yet more optimization on the maze router, resulting in some percentage fewer DRC errors when routing. 2) Corrected some startup procedures so that magic will come up without crashing if the startup script attempts to load a non-existant techfile. More corrections to make sure that even if it starts up, it won't immediately crash if the grid is rescaled.- October 29, 2006 at 2:40am
2006-10-28 21:25 tim Implemented new keyword "ignore" in the techfile "lef" section to allow certain layers in a LEF file to be ignored (such as the poly layer, if we have set up the maze router not to route in poly and want to avoid the extra geometry in the LEF views of the cells).- November 2, 2006 at 2:40am
Corrected some of the LEF and DEF reading routines such that 1) VIA definitions in a LEF file override any internal layer definitions from the technology file (instead of vice versa), and VIA definitions from a DEF file override any internal layer definitions (previously, VIA definitions in a DEF file were handled differently from those in the LEF file, which was just bad); and 2) VIA definitions attempt to better reflect the actual geometry vis a vis magic contact layer definitions by growing any contact cut layer to the minimum DRC clean dimension for a magic contact layer, when the LEF "cut" layer is mapped to a magic contact layer ("generic vias" which are not declared contact types also work; these layers are copied verbatim).- November 3, 2006 at 2:40am
Corrected an error in the DEF reader in which line extension values were being halved. Also---corrected the VIA reading routine so that when a via is redefined, it checks if other names are associated with that LEF layer. If so, it creates a new layer record for the redefined layer. Otherwise you can get into trouble, e.g., if "via1" and "via12" are both defined in the tech file as corresponding to the magic layer type "m2c", then the LEF file defines "via1" as a set of rectangles, one of which is type "via12".
Also: Another correction to the LEF/DEF reader, to account for via definitions with multiple cuts (each cut layer is expanded to the size of a magic contact, independently). The routing now checks the size of the cut in the LEF definition against the size of a Magic contact cut and flags a warning if they are not the same.
Also: Added a statement "gridlimit" (or just "grid") to the cifoutput section of the techfile. This defines a process's minimum grid resolution, in CIF/GDS units (i.e., centimicrons or nanometers). Magic's internal grid will not scale below (or to units which are not multiples of) this value. Note that the cifoutput "squares" function needs to respect this limit, but doesn't (probably "squares" should just be defined as "squares-grid" with grid=gridlimit).
Also: 2006-11-03 02:40 tim- November 4, 2006 at 2:40am
First cut at cleaning up the parasitic capacitance definitions in the techfile by defining "default" cases for all capacitance types based on various sane assumptions. In a normal setup, this allows one to pretty much just copy down all the parasitic cap values from the electrical parameters spec sheet for a process without having to think too hard about it.- November 5, 2006 at 2:40am
Corrected "configure.in" to remove "-lGLU", which is 1) not needed, and 2) regularly causes compile problems.
Also: 2006-11-05 02:40 tim- November 6, 2006 at 2:40am
Added more "obsmetal" styles to the styles section (including updating the 24-bit styles to match the OpenGL styles). Also, corrected a problem using aliases (need to check exact matches to existing type names, not the "smallest unique string" method usually applied).- November 7, 2006 at 2:40am
Corrected the "overhang" rule, which was not zeroing the "ok types" typemask, preventing the rule from working in most cases. Changed the behavior of the type name parser to accept plane-qualified aliases in the cifoutput section.- November 8, 2006 at 2:40am
1. Reinstated a line in the GDS write routing for vendor GDS files that somehow got deleted. 2. Changed tile deallocation calls to TiFree() from freeMagic(). 3. Changed the color of port boundaries from white to dark blue since white makes it REALLY difficult to see when something's highlighted.
Also: Added new OS command-line options "-norcfile" and "-rcfile" to allow some control over what startup files are or are not sourced.
Also: Changed the techfile format to forbid aliases in the "types" section from containing the wildcard "*" notation, since contacts are not defined in this section. Also, added an optional section called "aliases" that comes *after* the "contacts" section, which allows aliases to be defined using the wildcards.- November 11, 2006 at 2:40am
Added the statement "units microns" to the "extract" section of the techfile so that capacitance units can be entered in standard metric units (aF/um and aF/um^2) rather than in awkward lambda units. Also deprecated the size/ spacing/border values for vias in the extract section. The "extresist" code now uses the CIF/GDS generation rules to determine the number of contacts; the extract section line only pays attention to the via resistance (in milliohms/square). Note that none of these additions or changes has been tested yet.
Also: 2006-11-10 16:35 tim Fixed crash situation when "drc euclidean" is specified with no 3rd option. Also, corrected read in of "cscale" in the techfile extract section, which is integer but was being read as type float (which is okay, but should flag a warning).- November 15, 2006 at 2:40am
2006-11-14 02:40 tim- November 18, 2006 at 2:40am
Changes to the DRC "width" and "surround" rule processing corrects missing rule checks for certain arrangements of stacked contacts.
Also: Changed the "surround" rule to allow intersection between inside and outside types, on the reasonable assumption that for a rule like "surround m3c m3", another m3c should be allowed as part of the surrounding m3 material. Thus, the rule should be stated "surround m3c m3,m3c", and implies that m3c->m3c edges are ignored.
Also: Changed the behavior of "squares" so that it automatically becomes "squares-grid" if the default grid (of 1) is less than the grid limit set by the (recently added) "gridlimit" statement. Changed the behavior of "squares-grid" so that it properly centers the via cuts while both staying on-grid and respecting the required borders. Previously "squares-grid" would start at the left- and bottom-most grid points past the border margins, which is DRC- correct but not necessarily centered.- December 2, 2006 at 2:40am
Made the maze router routing 64-bit clean. Note that any structure created in a 64-bit system is likely to be allocated to a 64-bit boundary. If the structure defines a number of bytes that is not a multiple of 64, then something must be done to ensure that the remainder bytes are not passed uninitialized to the hash function, or you can never find anything in the hash table!- December 4, 2006 at 2:40am
Corrections to the setup of the parasitic capacitance extraction tables for contact types. Contact types in statements like "overlap" and "areacap" are now ignored, with the tables being set up automatically for contact types based on the contact residues declared in the "contacts" section.- December 6, 2006 at 2:40am
Corrected another bug in the mazerouter that causes a segfault when a bad pointer is addressed before checking the boolean value that's supposed to indicate that it's a bad pointer. Also: Added command options "disable" and "enable" to the "undo" command.- December 7, 2006 at 2:40am
Changed the label layer reassignment algorithm to prefer contacting labels to layers that connect to other layers over layers that are electrically nonfunctional (such as comment, boundary, marker layers, etc.)- December 8, 2006 at 2:40am
Corrected an error in CIF/GDS output where results were improperly clipped because the clipping halo was not recomputed after scaling magic's internal grid.- December 13, 2006 at 2:40am
Added path-extension handling to the GDS read routine.- December 21, 2006 at 2:40am
Corrected a segfault when two labels with the same name are attached to the same piece of paint.- January 5, 2007 at 2:40am
Corrected an error in the drcWidth() routine that incorrectly computes the subset planes. Created a new routine "DBTechTypesOnPlane()" that replaces "DBTechSubsetLayers()", and is simpler. Due to the newer (magic 7.4/7.5) method of handling contacts, there are no separate layer images on different planes, and so DBTechSubsetLayers() always returns the same mask given it. Note that DBTechSubsetLayers should be replaced by DBTechTypesOnPlane throughout DRCtech.c. This has only been done in drcWidth(). This also involves a reorganization to work with mutiple matching planes to prevent missing DRC errors on stacked contact types.- January 10, 2007 at 2:40am
Corrected an error in the extraction method, in which capacitors defined with the original "fet" style double-count the area and perimeter of contacts by counting both the active and metal planes. The newer "device capacitor" method does not show this error. The change restores the backwards compatibility of the "fet" method for capacitors. This does not normally show up for transistors and resistors because most processes do not allow contacts on gates and active resistor areas. Thanks to Lloyd Clonts for the detailed bug report.- February 4, 2007 at 2:40am
Corrected window callback functions to, e.g., "eval $Opts(callback)". Otherwise the purpose for which this function was intended, i.e., to automatically add extra menu buttons and such without messing with the master wrapper script, can't be done.
Also: Also, rearranged the menubutton bar so that it is a single frame, and other buttons can be added to it without the hassle of rearranging everything else on the top frame of the layout wrappper window.- February 12, 2007 at 2:40am
Added a Tcl file for helping manage process toolkits. A few command options have been added to aid with the toolkit, including the "cellname property" option (like the "property" command, but does not have to refer to the current edit cell). Also added the command option "snap list" to return (as a Tcl object, in the Tcl version) the type of snap.- February 20, 2007 at 2:40am
Corrected an error with a procedure call that was not updated when the number of arguments in the procedure was changed. This will cause Magic to crash when attempting to extract a resistor defined in the techfile with the "device resistor" construct.- March 4, 2007 at 2:40am
Extraction algorithm corrections for contacts, especially for side overlap calculations. Thanks to Emerson Vernon at Brookhaven Lab for providing a thorough test case.- March 5, 2007 at 2:40am
Modifications to ExtTech.c to correct the "defaultsideoverlap" method. Verified by checking against the Brookhaven test cases.- March 19, 2007 at 2:40am
Added the keyword "connect" to the parsing of layers by CmdParseLayers. When added to a string of layers, causes the parser to add in all layers connected to the set of layers previously parsed. For example, "select box metal1,connect" will select the box under the cursor containing metal1 or anything that connects to metal1.
Also: 2007-03-18 11:39 tim Corrected the maze router helper window routines to correctly handle verification of groups of nets selected in the listbox (especially when verifying which nets are routed and which unrouted upon first read-in of the netlist).
Also: Fixed the "slots" CIF/GDS operator to properly take 7 options on read-in of the tech file (parsing was correct, but it was flagging the use of 7 options as an error; I still need to determine why this rule seems to have been accepted and used, but not in its proper form).- March 20, 2007 at 2:40am
2007-03-19 15:23 tim Changed the slots generation function so that it observes the "gridlimit" setting.
Also: 2007-03-20 02:40 tim- March 25, 2007 at 2:40am
2007-03-24 15:58 tim Added to the maze router the capability to handle non-square contacts. This is crucial for various processes, especially down around 180nm and smaller, which allow smaller margins on two sides of a contact cut with the restriction that the metal must extend further on the remaining two sides. This can be implemented with the "slots" function in cifoutput, and with one "width" plus one "area" rule in the DRC. section. The maze router now defines a "length" parameter which is assumed to be the longer dimension of the contact, and can be altered using the command option "iroute contactlength ". Currently there is no method to put the length value directly into the technology file. Still need to handle the non-square contacts into the "route cleanup" routine. - March 30, 2007 at 2:40am
2007-03-30 00:07 tim Corrected an error in the DRC "surround" rule, pointed out by Mark Martin, that was caused by alternative processing of planes, implemented recently.- March 31, 2007 at 2:40am
2007-03-30 14:35 tim Corrected what was probably a long-standing error in which the selection command could hang if the selected area was a stacked contact type.- April 21, 2007 at 2:40am
2007-04-20 10:56 tim Correction to the code to avoid setting ti_client and other ClientData records to the value "MINFINITY", which is defined in terms of a 32-bit integer, and therefore can be one of two different values on a 64-bit system, depending on how it is cast. The primary failure appears to be in the comparison made in STACKPUSH, which affects the way both the DRC and the cifoutput routines are run on 64-bit systems. Thanks to Jeff Sondeen at ISI and Emerson Vernon at Brookhaven.
Also: 2007-04-21 02:40 tim- August 24, 2007 at 2:40am
2007-08-23 09:39 tim Modified the path painting algorithm (for use with CIF and GDS path statement inputs, and the "wire segment" command). Previously, each path was broken into segments and each segment painted separately. This tended to cause plane fracturing at intersections of non-manhattan joins, often leading to a "preforated" line across the segment intersection (i.e., gaps). The new algorithm corrects this by computing a single polygon for the entire path.
Also: Also: Corrected a different and fundamental error in the polygon tiling algorithm, which finds the maximum sized triangle that can be broken out of a polygon segment without any part of that triangle extending outside of the polygon boundary. To do this, it 1) checks for polygon segments intersecting the triangle boundary, and 2) checks for polygon points inside the triangle. It failed to consider that *both* checks might apply to a single segment, and that either the inside point or the intersection point might be the limiting condition.- September 12, 2007 at 2:40am
2007-09-11 15:00 tim Corrected the capacitance calculation for the micron-to-lambda conversion of extraction values when using the "units microns" feature. As written, the result was meaningless.- September 27, 2007 at 2:40am
2007-09-26 11:04 tim Added new option "gds merge [true|false]" along with an algorithm that converts groups of tiles in the database into polygons. This significantly reduces the size overhead of the GDS output file! I intend to make the gds merge option TRUE by default, once I have debugged the algorithm thoroughly and am sure that it is both bug-free and reasonably efficient.
Also: Added removal of colinear points in non-Manhattan geometry.
Also: Corrections to the GDS tile-merging algorithm. It could still use a lot of optimizing for speed-up, but at least it is now passing my test cases, writing and recovering entire chip databases.- September 28, 2007 at 2:40am
2007-09-27 09:25 tim Corrected a bug in the threaded, non-Tcl version in which pthread_cancel() is called on an invalid thread if no technology file was found. Basically this is a harmless "crashes on exit" problem but it is best to have it fixed properly. Thanks to Stefano Pedretti for the bug report.- October 4, 2007 at 2:40am
2007-10-04 00:03 tim Another modification to the path painting algorithm. This corrects for (1) instances in which points are duplicated, and (2) instances in which segments are very short in the middle of a bend, (usually) forming a wedge-shaped cutout in the path. It also corrects for the problem of paths whose final segment is too short (a common problem in Cadence, which doesn't bother to fix it at all).- October 5, 2007 at 2:40am
2007-10-04 15:19 tim More corrections to the path computation algorithm to handle problems caused by short path lengths. Noted a problem caused by an obscure roundoff that can produce non-45 degree geometry from 45-degree-only paths. This has not been fixed.
Also: Added a "angles" rule to the technology file DRC section that allows each layer to be specified as restricted to orthogonal or 45-degree geometry. While working on coding this, I noted that several rules are tile-based, not edge-based, and might be best separated completely from the standard collection of DRC rules and placed in a separate array that is per tile type only, not per edge between tile types A and B.- October 10, 2007 at 2:40am
2007-10-09 12:00 tim Grid drawing changed so that it is not dependent on the pixel size of a display. Routines for Tk and X11 changed so that gridlines are drawn in multiple batches if necessary to complete the gridlines across the screen rather than attempting to define a single array to hold gridline segments and expecting it to cover every possible display size.
Also: 2007-10-10 02:40 tim- October 11, 2007 at 2:40am
2007-10-10 11:59 tim I put the WRL CIF-DRC extensions back into magic-7.5, having removed them a while back due to the fact that they were way out of date and use of the extensions would cause immediate crashes. These rulesets are very important for implementing Calibre-style DRC decks. I will make some attempt to update the rules themselves to cover nonmanhattan geometry, implement widespacing, overhang, surround, etc., rules. Stay tuned.- October 12, 2007 at 2:40am
2007-10-11 10:23 tim Corrected the subcell overlap DRC error, which had been inadvertently disabled (for a rather long time!). Also removed dCD_which from the DRC arguments passed to drcTile, which was not being used.
Also: Corrected the drcTechFinalStyle() routine such that stacked contact types are properly added to masks for all rules.
Also: 2007-10-12 02:40 tim- October 13, 2007 at 2:40am
2007-10-12 15:14 tim Added DRCcif.c to the CVS distribution (oops!). Thanks to Ian Ferguson for pointing out the omission.
Also: Corrected the DRC scalefactor to properly account for the "area" rule, which needs to have drcc_cdist adjusted by the scalefactor squared, since it represents an area, not a length. Also implemented fractional scalefactors at Jeff Sondeen's request (of fairly long ago). Although fractional scalefactors are not strictly necessary, they may be convenient for rescaling the entire DRC section without having to multiply up all the values. To get a scale factor of 0.5, use "scalefactor 1 2" (the same syntax used by the "scalegrid" command).- October 16, 2007 at 2:40am
2007-10-15 15:07 tim Corrected magic-7.5's transistor extraction with respect to non-Manhattan geometry. When non-Manhattan tiles are encountered, the diagonal split is ignored and the whole tile is incorporated into the transistor gate. Also, such transistors could fool Magic's extraction algorithm into thinking that the transistor's gate was a single tile and thus computing a wildly incorrect length and width. Instead, the more complex segment-matching algorithm previously reserved for annular devices has been promoted to the principal algorithm used for transistor extraction. Finally, one inaccuracy that tended to grab the inside-to-inside distance on a bent transistor as the transistor length was fixed.
Also: Corrected the DRC scaling routine so that "maxwidth" rules round down, not up, as pointed out to me by Jeff Sondeen.- October 17, 2007 at 2:40am
2007-10-16 10:47 tim Added a "S" option to the existing "B" and "X" for describing styles in the "style postscript" subsection of the techfile "plot" section. The "S" option forces a "solid" style, for which the rendering is much faster than the solid stipple fill, which (in addition to being slow) has been reported to cause artifacts (white lines) under some conditions, apparently due to specifics of the postscript interpreter implementation, target device resolution, etc. The artifacts make "plot postscript" unusable for simple mask generation.- October 22, 2007 at 2:40am
2007-10-21 03:20 tim Made a change to the display routine such that the command "see no subcell" will prevent cell names and bounding boxes from being drawn. Otherwise, this statement has no apparent effect that I can tell.- October 27, 2007 at 2:40am
2007-10-26 11:41 tim Rewrote the temporary file handling so that it does not change permissions of the original file when writing .mag file changes back to disk.- November 5, 2007 at 2:40am
2007-11-04 22:59 tim This fix contains a fix for problems related to DRC checks on stacked contacts. It removes the awkward multiple-pass algorithm in drcTile() in favor of handling stacked contacts in the DRC rule tables. A large amount of code in DRCbasic.c and DRCtech.c was altered in this version, and one should probably not put too much faith in this revision until the DRC rules have been thoroughly checked. This fix also corrects errors in the extraction of connected regions containing non-Manhattan geometry, corresponding to changes made to Magic version 7.4.- November 6, 2007 at 2:40am
Added a correction by Bertrand Irissou to DRCcif to multiply centidistance by cs_expander to get the correct resulting scale factor. Also, added a fix to prevent a segfault when doing "getcell" in a read-only cell def. These two changes match changes made to the stable 7.4 branch.- December 25, 2007 at 2:40am
A very large number of changes. Most of the changes are the same ones made to the stable (7.4) distribution over the time period since the last 7.5 distribution was made. These changes were not checked in until completion of the new DRC code, which has not been thoroughly checked but at least is good enough for an initial rollout. Other changes include: addition of the name "magic_setup" in the current working directory as a non-hidden alternative to ".magicrc", and a check for geometry in all cells prior to loading a technology file, such that no warnings are printed (and no prompt given) in the case of loading a new technology onto an empty database. Finally, the "styletype" keyword in the techfile "styles" section now takes additional arguments providing one or more pathnames to search for the style, colormap, and cursor glyph files (with the built-in system path being default). The technology name is now printed in the titlebar of the GUI wrapper window.
Also: First major correction to the new DRC code; re-implemented the "min set planes" routine, except that (1) it returns coincident planes (there may be more than one), and (2) it does not attempt to generate a new type mask.- December 26, 2007 at 2:40am
Removed a debug print statement from the CIF generation code.- December 27, 2007 at 2:40am
Another adjustment to the new DRC code, to move the addition of stacked contact types into DBTechNoisyNameMask, so that the stacked contact types are added properly for the various operators such as NOT (~) and plane qualifiers (/).
Also: 2007-12-26 15:33 tim- December 28, 2007 at 2:40am
Corrected an error in the DRC spacing rule, in which the planes are swapped in the reverse case.- January 2, 2008 at 2:40am
Corrected a few more errors in the DRC rule generation of spacing rules (both touching_ok and touching_illegal cases).- January 3, 2008 at 2:40am
Changes to the configure scripts for proper handling of round and roundf functions, and the handling of libXi.
Also: Implemented the "site.def" file for site-specific definitions that will not get overwritten by new installations of magic. Also, changed some configuration settings to deal with libXi and C99 round() and roundf() functions.
Also: Implemented layer locking, where a layer definition in the techfile with a '-' before the plane name is locked, and cannot be modified.
Also: Trivial implementation in preparation for a cell-locking feature.
Also: A couple of minor modifications of extresist, plus added a flag for CIF output styles for a future implementation of a euclidean-measure grow operation.- January 4, 2008 at 2:40am
Re-implemented layer locking with only type masks.
Also: Changes related to locked layers, which is still not correct. However, operation should not be affected when locked layers are not used.- January 5, 2008 at 2:40am
Minor adjustment between databases.
Also: 2008-01-04 12:34 tim Implemented cell instance locking via the "instance lock" command. Locked cell uses are prevented from being moved, rotated, flipped, etc.
Also: Fixes in the DRC area rule scaling to avoid overflow; another fix in the DRC area rule to properly restrict to the plane or planes coincident to all layers.
Also: 2008-01-05 02:40 tim- January 6, 2008 at 2:40am
Corrections to layer and cell locking mechanisms.
Also: Corrected the behavior of layer locking so that the treatment of contacts is now consistent (except for stacked contacts, probably).
Also: Completed the Euclidean-distance CIF grow operator- January 8, 2008 at 2:40am
More corrections to layer locking (match layer locking from tech file input to layer locking from the command-line)- January 17, 2008 at 9:22am
Rather fundamental changes to the painting procedures in yet another attempt to make the painting and erasing of locked layers consistent. I no longer make any claims as to the correctness or stability of the code. It will probably take a few revisions to resolve the problems stemming from this mess. You have been warned.
Also: 2008-01-09 20:06 tim Another valiant attempt to resolve all (or at least, most) problems with stacked contact types and painting/erasing/selecting/moving/stretching/etc. This involved some code changes to the ubiquitous DBCellCopyAllPaint, so some thorough checking will be necessary to ensure that this has not screwed up other features. This revision should be regarded as highly unstable!
Also: Correction to plane mask returned by DBTechNoisyNameMask---this needs to be checked for its effect on DRC rules.
Also: Correction to add stacked layers to types that are locked (and unlocked) by manipulating the erase tables.
Also: Corrected display of stacked contacts. Added support for HPRTL and HPGL2 plot output
Also: Correction to "plot versatec" defaults, and correction to manipulation of non-Manhattan selections. Both are known to still be buggy. Strong disclaimers still apply to this revision!
Also: Corrected the non-Manhattan selection manipulation. Versatec plotting is still completely hosed.
Also: Corrected the non-Manhattan raster plotting routines.
Also: 2008-01-11 16:28 tim
Also: Changed the behavior of "flush" so that it will reset the NOEDIT bit if the file has become writable. Changed the behavior of "edit" to disallow editing a file without write permissions (there should be some way to force that behavior, though. . .). Changed the raster plotting routine to handle "border" and "cross" styles correctly (more or less) with respect to non-manhattan geometry. Crosses are still drawn per-tile. All plot routines should have a "cut" style that paints contact cuts based on cifoutput rules. . .
Also: Two important changes to the database paint and selection code: Selection translations correctly remove paint from non-edit cells for operations (move, flip, etc.) that require it, and the undo mechanism now remembers non-manhattan tile 4-way splits, preventing unnecessary tile plane fracturing when using the "undo" function.
Also: Corrected the SelEnumPaint() function to what I suspected I would have to do from the beginning (after a number of failed attempts to make it a simpler problem), which is to clip a non-Manhattan tile against a Manhattan tile using GrClipTriangle(), and processing the resulting rectangles and triangle. Also, corrected the reporting of attempts to move paint in a non-edit-cell. This code should be considered highly suspect; although no errors have been found yet in the new selection code, there are many, many possible geometries to exercise.
Also: Another small correction to prevent false reporting about attempting to move paint in a non-edit cell.
Also: Corrected a DRC error in the post-techfile read-in cleanup routine, which was declaring illegal edges for rules with checks in planes that were not the plane of the edge. This caused many DRC rules to be systematically wiped out.
Also: Corrected the GDS read routine so that it does not generate an empty cell with the name of the GDS library when importing 3rd-party GDS files.
Also: Implemented PNM plot conversion to HPRTL format.
Also: Changed "plot pnm" command to allow filename to be absent in the case of spooling an RTL file to a printer, in which case a temporary filename is created.
Also: 2008-01-16 09:32 tim Added HPGL2 support for PNM-style plotting.
Also: Simplified the HPGL2 raster plotting by using a CMY space instead of converting an RGB color space to CMY.
Also: 2008-01-17 09:22 tim- January 18, 2008 at 2:40am
Corrected an error in DBEraseMask that prevents stacked contacts from being erased.
Also: Changed the wire tool so that it is unable to paint locked layer types.
Also: Corrected problems with printing of borders and crosses on non-Manhattan tiles.
Also: Correction in definition of tile push function. Prevents errors when extracting non-Manhattan geometry.
Also: Correction to "dump" and "getcell" to (properly) strip off any ".mag" extention given in the command-line. Also, correction to plotHP code to avoid problems with plotters that don't support a CMY plane-indexed mode.- January 26, 2008 at 2:40am
Corrected an error in the DRC section cleanup that causes edges to space to be declared "illegal edges" and improperly removed.
Also: Corrected an improperly-applied patch that itself was meant to correct the translation of illegal characters in strings output to GDS files.- January 29, 2008 at 2:40am
Corrected an error in DRC that forced all planes of a contact to meet width rules when only one was intended. Also, began implementation of a rendered font mechanism. At this time, it is unfinished, but should not interfere with normal operation of Magic.
Also: More work on the vector outline fonts. Rendering now works correctly in the OpenGL graphics environment, and a very preliminary X11 rendering routine has been added. Fonts now scale correctly with the window zoom factor, and the rendering can handle rotations. Non-convex polygon tesselations (apparently) fixed.- January 30, 2008 at 2:40am
Disabled the memory-mapped tile allocation routine until it can be determined why it goes into a runaway memory grab (seen when running the drc-cif routines; tiles allocated by CIFGen() do not get released).
Also: Corrected the mmap problem, which was due to the use of mallocMagic() instead of TiAlloc() to allocate tile memory. The use of mmap has been reinstated.
Also: Corrected selection moving and stretching with respect to "sandwiched contacts" (e.g., when the selection is a via that is in a stack of pc + via + via2).
Also: Another change to tidy up the behavior of stacked contacts when selecting and moving or stretching stacked contacts containing residues that are locked.- January 31, 2008 at 2:40am
Corrected two more errors: 1) DRC still identifying improper "illegal edges", in this case where the type on the edge to search is TT_SPACE, in which case the ok_types mask does not need to have TT_SPACE set (the only exception). 2) The command "what" crashes on read-only cells under some circumstances. This error has been expunged.
Also: More development on the vector outline font labels. OpenGL rendering essentially complete, except for clipping. Label font, rotation, size, and offset can be specified in the "label" line. All of this is still transparent to the end-user.- February 1, 2008 at 2:40am
Corrected an error in DRC scaling when scaling the grid to coarser levels that unfortunately can cause a divide-by-zero error and crash magic upon a command like "scalegrid 2 1" where the grid scale becomes coarser than the default.- February 2, 2008 at 2:40am
Corrected a bug that causes magic to crash when attempting to change the cell id ("identify" command) on any subcell of a non-writeable cell.
Also: Corrected selection of non-Manhattan geometry to prevent crashes on copying non-Manhattan tiles in a Manhattan select area, and preventing spurious reports of moving non-Edit paint.
Also: Corrected one other error that allows SelectClear() to not remove everything in the select cell. DBEraseMask needs to be replaced with DBErase, but the temporary hack should work for now.- February 4, 2008 at 2:40am
Making version 7.5 into the "stable" distribution. Removed all of the vector font-rendering code, which is now part of the "development" distribution version 8.0.- February 7, 2008 at 2:40am
Expanded upon scripted routines "pushstack" and "popstack" (">" and "<" macros) to avoid pushing into anything other than a child of the edit cell, and to avoid popping an empty stack.
Also: Cleaned up some problems with selection and enumeration of labels when cells are read-only.- February 8, 2008 at 2:40am
Corrected an error in which running magic in batch mode with a read-only cell causes the edit cell to end up pointing to the initial empty "UNNAMED" cell rather than being set to NULL (because the loaded cell is not editable).
Also: Corrected drcSpacing so that "spacing to" types with a mixture of different types on different planes does not cause Magic to place an illegal plane number in the DRC records and promptly crash when running DRC on any edge using that record. However, as now implemented, the DRC records are incomplete, so this still needs to be properly fixed.- February 10, 2008 at 2:40am
Corrected the DRC spacing rule to reinstate the ability to specify multiple layers on multiple planes in either of the two type lists "spacing from" and "spacing to". The recent changes to DRC initialization in magic-7.5 forced an assumption of each layer set being in the same plane. With no check of this, however, specification of layers in different planes would cause magic to crash.- February 11, 2008 at 2:40am
Removed instances of subroutine DBResidueMask() from inside "TTMask..." constructs; since "TTMask*" definitions are all repeated once for each mask byte, the subroutines were being called many times instead of just once.- February 12, 2008 at 2:40am
Corrected the DRCcif functions to match the changes to the arguments of drcAssign().- February 16, 2008 at 2:40am
Added some code that allows magic to determine from what window a command was executed if the command was entered by redirecting keystrokes into the terminal. Otherwise, magic will pass a NULL windowname to Tk and won't update per-window attributes such as the title bar.- February 18, 2008 at 2:40am
Changed SelEnumPaint so that selections created with "select chunk" do not pull "compatible" material from another cell into the selection.
Also: Extended the aforementioned method for handling "select chunk" to similarly handle "select area", such that material compatible with (but not included in) is not copied into the selection cell.
Also: Corrected the "what" command to produce a unique list of subcells in which each paint type is found. Prior code only checked each subcell name against the previous one searched, so cells visited cyclically (typical for deep hierarchy) would be repeated for each occurrence.- February 22, 2008 at 2:40am
Modified DBLockCell to prevent attempts to lock a subcell of a non-edit cell (which should be effectively locked anyway, since the cell can't be edited). Otherwise, EditCellUse being NULL generates a segfault.- February 29, 2008 at 2:40am
Corrected multi-window behavior so that captions always get updated in all windows. Switching the edit cell to a new window will now cause the non-focus window to display [NOT BEING EDITED] in the title.
Also: Modified the "load" command so that it strips all path information from the cell name when creating a new cell. If the cell exists, then the path information is used to confirm whether or not the new name and the existing cell point to the same file (using inodes). This ensures that all cells get unique names while also avoiding schizophrenic cells (can't have bipolar disorder in a CMOS technology!).
Also: 2008-02-28 16:14 tim Corrected the routine that processes pending events during DRC so that "undo" is not disabled while executing them. Otherwise the undo records get rather messed up.- March 5, 2008 at 2:40am
Corrected a problem in which ambiguous use of "space" in a DRC rule typelist is not parsed as intended. Magic version 7.5 has always made an exception for this questionable use, since it appears in a lot of old techfiles, and the newer DRC code broke the test for the exception.- March 6, 2008 at 2:40am
Corrected the paint and erase commands, which had been changed in a way that prevented them from painting or erasing the router fence, rotate, and magnet layers.
Also: Modified the DBTechNoisyNameMask to check through the alias list. If a type alias maps to a single user type, then that type is returned. If it maps to multiple types, then return value -1 (ambiguous layer) is set.
Also: Corrected an error in the mazerouter that causes segfaults due to resetting tile clientdata records on tiles that have been freed. Would be nice if this were the last segfaulting error in the mzrouter code. . .- March 7, 2008 at 2:40am
Corrected the mazerouter in a different way, so as not to completely remove the marked tiles. However, it is duly noted that it is improper to mark tiles in each subcell and check them during a tree search, since the source and destination areas are then marked in every instance of any subcell. This is a possible explanation for various failures to route otherwise apparently routable paths, but will take some extended effort to fix.- March 18, 2008 at 2:40am
Corrected an error in the CIF polygon read routine (uninitialized variable that may end up giving polygon points random values, depending on the specific compiler and CPU). Also, changed the wrapper script so that the window menu used by cellmanager is available to any window that wants it (change in organization only).
Also: Implemented an ad-hoc solution to the problem of a worst-case-scenario geometry for chunk selection. Such a geometry, caused by stair-stepped material at unit-length steps, proves the chunk selection (maximum-size rectangle finding) algorithm to be O(2^N)! The ad-hoc solution sets a recursion depth limit, ensuring that the algorithm finishes in reasonable time (e.g., 1 second worst case on a 2 GHz CPU), and return whatever it has discovered so far, even if the final answer is not maximum size. I could potentially add more kludgy ad-hoc additions to the algorithm, but I would prefer to see an implementation that is not O(2^N). . .- March 31, 2008 at 2:40am
2008-03-30 17:13 tim Corrected the euclidean-distance DRC checking, both to (1) fix a bug that missed checking one of four orientations, and (2) to include checks on non-Manhattan tiles that enter within the euclidean distance but do not have paint of the type that causes a DRC error within that distance.- April 1, 2008 at 2:40am
2008-03-31 12:30 tim Corrected a typo in the DRC enhancements from yesterday, which causes euclidean corner checks to be made in the wrong direction.- April 18, 2008 at 2:40am
2008-04-17 12:37 tim Corrected a couple of minor things: 1) grTOGL3.c should not include the GLU header file; 2) The linker should not link to libXi, libXmu, and libXext unless those libraries exist, and 3) removed "-exact" from the "package require Tk" command in tkcon.tcl, or else this command breaks under tcl version 8.5.2 (which ultimately needs to be fixed in Tcl/Tk).
Also: Commented out a diagnostic print line from the CIF read code.
Also: 2008-04-18 02:40 tim- April 23, 2008 at 2:40am
2008-04-22 12:57 tim Added processing of the "PINS" section to the DEF file reader.
Also: Modified "ext2spice" so that the option "scale on|off" will turn auto-scaling (using the ".option" card to indicate the scalefactor of distance units) on or off. The previous behavior was to use ".option" for HSPICE and not otherwise. The default behavior is preserved.- April 25, 2008 at 2:40am
2008-04-24 11:57 tim Changed the method of handling layer boundaries in the versatec plotting so that boundaries are darker than the layer type they surround, but do not fill all color planes; otherwise, any layer type that has components in C, M, and Y has a black border and makes the plot dark and gives it poor color hue. Added an automatic versatec plot setup to match screen display colors and stipple patterns, without having to specify any pattern in the technology file. An "alpha" parameter in the graphics controls the overall brightness of the output plot with respect to the screen display.- April 30, 2008 at 2:40am
2008-04-29 10:17 tim Corrected the length & width extraction algorithm so that it correctly handles annular FETs that are MOScap-connected (source and drain terminals shorted).
Also: Added command option "select flat", which flattens the contents of the select cell.
Also: 2008-04-29 14:03 tim
Also: Corrected an error that can cause ext2spice to hang due to an uninitialized flag byte.- May 1, 2008 at 2:40am
2008-04-30 20:30 tim Corrected the DRC techfile read-in so that the type "space" doesn't cause the plane mask to be reset to zero.- May 3, 2008 at 2:40am
2008-05-02 06:48 tim Corrected an error that prevents cellnames beginning with "$$" from being interpreted as-is, as opposed to attempting to treat them as a Tcl variable name.
Also: Modified the previous fix so that cells are handled properly even if they begin with "$" as well as "$$". Magic will attempt to make a Tcl variable expansion (or environment variable expansion) from the text following the "$"; however, if the result is NULL, then it assumes that the "$" is part of the name and continues accordingly. This does have one effect that should be dealt with, which is that the Tcl_printf() statement also tries to expand Tcl variables, and on error, nothing gets printed. So, if you attempt to load cell "$$test$$" but type '$test$$" instead, the error message simply vanishes. The Tcl_printf() routine should likewise test the variable expansion, and escape the dollar sign if the variable does not exist. There is an additional quirk that searching for Tcl variable names is somewhat limited; e.g., if $a and $b are really Tcl variables that form a valid cell name when concatenated, then "load $a$b" will fail simply because $a is not followed by whitespace or NULL. This should also be fixed.- May 11, 2008 at 2:40am
2008-05-10 13:13 tim Corrected an error in the DRC "widespacing" extension. It searches for rectangles satisfying the "wide material" width, but if there are multiple rectangles, it ORs them together. However, sometimes there may be two unconnected rectangles at opposite ends of the edge being checked, and merging them causes (false positive) errors to show up in the area between them. Thanks to Lloyd Clonts for identifying the bug.- May 12, 2008 at 2:40am
2008-05-11 20:11 tim Corrected an error that can cause the GDS reader to crash magic if a cell in the input is undefined and the "gds flatten" option is chosen.- May 18, 2008 at 2:40am
2008-05-17 13:29 tim Implemented Philippe Pouliquen's corrections to the key modifier mapping to deal with the way Mac OS X maps "Meta" to "Mod2" instead of "Mod1" like other X11 implementations.
Also: Implemented Philippe's idea of allowing two numbers to follow move, copy, or stretch commands to specify different X and Y values, such that "move ne" does not necessarily mean to move along a 45 degree angle (however, in such cases it should not be necessary to specify a direction. . .).
Also: Expanded upon the previous addition to copy/move/stretch, such that (e.g.) "move 0 10" does a relative move by x=0, y=10. Thus "move 10 10" is equivalent to "move ne 10".
Also: Corrected the 'stretch' command, which for some reason I had rewritten to allow non-Manhattan directions, although the SelectStretch function is not properly defined for non-Manhattan translations.
Also: Added error message for ambiguous syntax "move" or "copy " where specified only one coordinate.
Also: Corrected the first of two bugs pointed out by Philippe. This particular behavior involved layers being left behind when stretching a contact type. This problem has been a long-standing (and known) one. I have tackled it this time by implementing the stretch function in a completely different way. This corrects the above-mentioned behavior while preserving the behavior of allowing stackable contact types to "pass through" one another when stretched. I have also taken the opportunity to modify the way the "stretch" command works such that residue types of a contact will also "pass through" that contact when stretched across it, rather than destroying it.- May 19, 2008 at 2:40am
2008-05-18 07:46 tim Corrected the 2nd bug reported by Philippe, in which "move" used on multiple stacked contacts leaves everything between the top and bottom contacts unselected after the move (DBPaintValid was ignoring stacked types).- May 20, 2008 at 2:40am
2008-05-19 06:59 tim Removed the behavior in which stretching a layer through a contact containing its type will not destroy the contact---the behavior is inconsistent with respect to long stretches vs. a number of short stretches. The behavior is now consistent, although I don't like the way that, e.g., stretching metal2 across a via destroys the entire via, including the metal1 portion, even though no metal1 material was in the selection.
Also: Corrected a bounding box error discovered by Philippe, in which 'select region' or 'select net' loses any previous bounding box information in select. If selection material exists in the select cell, and 'select more' is issued, then the bounding box for the region or net overwrites the selection cell bounding box. If the selection is then moved, the display is only updated for the area of the region or net, and the original material is not erased.
Also: Changed the stretch code (yet again). For example, when stretching metal1 through a via, preserving the via (the behavior of about 2 revisions ago) violates the principle that stretching over distance X is equivalent to stretching distance 1, X times (because the latter always destroys the via). But destroying the whole via violates the principle that stretching only material in the metal1 plane should not affect material in the metal2 plane. So now, stretching metal1 through a contact will destroy the contact but leave the metal2 part of the contact. Hopefully there are fewer flaws in this scheme. A method that preserves connectivity through a stretch would be nice, but will probably require rather more coding work. So I'm not going to do it tonight.- May 27, 2008 at 2:40am
2008-05-26 11:37 tim Corrected the read-in of cells in GDS using the "gds flatten" option. Position of referenced subcells needs to be scaled to the magic database for placement, but flattened cells should not be scaled, since they are copied between GDS database cells. Thanks to Mark Martin for providing examples to track down the incorrect behavior.
Also: Corrected a long-standing error with the "contact" command that allows it to paint outside of the cursor box. This does not correct the second error of the command, which is the failure to convert to edit coordinates when doing edit-in-place.- May 28, 2008 at 2:40am
2008-05-27 19:14 tim Changed the Mod2Mask modifier handling back to the original code when "linux" is defined, because Linux maps NumLock to Mod2. Mac OS X, which maps the "Alt" key to Mod2, uses the new code, which maps all ModMask bindings back to Mod1.- June 2, 2008 at 2:40am
2008-06-01 07:47 tim Extension of the "device mosfet" extraction model allows asymmetric source and drain, and extension of the "device subckt" extraction model allows up to ten different terminal types.
Also: Added code to allow a variant of the "device mosfet" description that has separate types for source and drain (asymmetric mosfet).- June 28, 2008 at 9:50am
2008-06-28 09:50 tim- July 7, 2008 at 2:40am
2008-07-06 10:44 tim In response to several requests, I have provided two simple script wrappers for the commands "ext2spice" and "ext2sim" that allow them to run from the shell command-line, the way they do in the non-Tcl versions of magic.
Also: Added /usr/share/tcltk/ to the search path for Tcl and Tk configuration files (conforms to recent Ubuntu distributions). Also, added the Tcl/Tk version number to the final output of "configure" (good visual feedback in case the search finds the wrong one of multiple copies of Tcl/Tk).
Also: 2008-07-07 02:40 tim- August 15, 2008 at 2:40am
2008-08-14 08:25 tim Corrected an integer overflow error in non-Manhattan tile painting.- August 28, 2008 at 2:40am
2008-08-27 13:24 tim Corrected Makefile for magicexec and magicdnull so that various OS variants don't lose the built-in LD_LIBRARY_PATH information.- September 4, 2008 at 2:40am
2008-09-03 10:10 tim Corrected the DBFracturePlane() function to preserve the maximum horizontal strips rule, as was done previously for the DBPaintPlane function.
Also: 2008-09-04 02:40 tim- September 5, 2008 at 2:40am
2008-09-04 06:10 tim Corrected a problem in which an "alias" statement containing a single entry (e.g., "alias allnfets nfet") would replace the canonical name for the layer, such that .mag files containing that layer would list the geometry under the wrong name (e.g., "<>" instead of "< >"). - September 6, 2008 at 2:40am
2008-09-05 06:45 tim Added several options to the "wire" command and expanded the syntax to allow querying options such as "wire values" and "wire width", and to allow the use of "wire type" without specifying a width (keeps the same width). - September 9, 2008 at 2:40am
2008-09-08 12:56 tim Gave up on Philippe's modifier mask change, which messes up keystroke interpretation on various Linux versions, and on Solaris. Restricting the change to Mac OS X only.- October 16, 2008 at 2:40am
2008-10-15 07:34 tim Corrected an error that can cause a crash when attempting to extract a transistor with a bent (non-orthogonal) gate. This is mostly a hack solution that avoids a segfault and does not address the more difficult problem of having the extEnumTilePerim() function properly handle diagonal boundaries. This must be revisited some time in the future.- November 6, 2008 at 2:40am
2008-11-05 07:17 tim Corrected extraction of asymmetric FET devices- November 9, 2008 at 2:40am
Corrected the lanczos kernel computation in plotPNM. This somehow worked on my 32-bit system even though the kernel sinc() computation was called with an integer argument instead of a float. It completely broke down on my 64-bit system (probably for that reason), forcing me to work out what the convolution is supposed to be computing, and calculating the correct extents and normalizing factor for the kernel. The new code ensures that any block of pixel color X summed over a kernel area containing nothing but color X will produce exactly color X in the output.- November 15, 2008 at 2:40am
Corrected plotVers.c where one instance of plotVersRect() was missing the stipple argument.- November 16, 2008 at 2:40am
Improved version of automatic stipple pattern generation for the versatec hpgl2/hprtl plot option. The new version generates color halftone screens for each of the 3 CMY color planes, so the result is much better looking than the original first-cut algorithm with random dot patterns. The line- generation algorithm continues to use the random pattern generation and needs to be improved.- November 17, 2008 at 2:40am
More changes (corrections?) to the plotVers.c code. Changed "alpha" to "gamma" (it's doing gamma correction, after all), but I still think the output is less color-saturated than it ought to be.- November 22, 2008 at 2:40am
A small correction to selEnum to resolve stacked contacts prior to checking if material in the cell matches the selection exactly (which is required for chunk selections). Stacked contacts were being treated like material in another cell.
Also: And, corrected another logical error in erasing material from contacts being "stretched" over or under other contacts sharing a plane.- November 26, 2008 at 2:40am
Made one alteration to accomodate contacts on multiple layers such that the erase rules don't conflict with other contact groups covering the same planes. However, this is not the final word on the routine, which needs some fixing.
Also: Completed a preliminary "universal contact cut" generation algorithm. Currently, this is defined by the cifoutput keyword "squares-test" to distinguish it from the original contact cut generation algorithm. As yet there is no equivalent routine for "squares-grid" or "slots", but the algorithm seems to work well so these should be forthcoming.
Also: Finished implementing the universal contact generation algorithm for both the "squares" and "squares-grid" functions. Have not attempted an implementation of either "slots" or the cut generation using GDS contact arrays.
Also: Made one alteration to the contact algorithm, to identify as an error any instance in which a non-convex area contains no contact cuts.- December 2, 2008 at 2:40am
Corrected the "defaultsidewall" feature of the extract section, which was not building tables against type "space", which largely eliminates all sidewall calculations! Changed the rsubcircuit device model to use the new resistor extraction model (works correctly on bent resistors). Updated the rsubcircuit, resistor, and capacitor device models to include substrate types (and optional default node name). At least as far as SPICE is concerned, only the rsubcircuit device can make use of the substrate node, which is passed as the third argument.
Also: Changed the "side halo" and "step size" to be in units of microns when the "units microns" option is chosen.
Also: Addition to the last correction to allow fractional values in the units for "side halo" when also using the "units microns" option.
Also: Corrected ext2spice to output all terminals of an n-terminal "device subcircuit" device, for any arbitrary number of terminals defined.
Also: Correction to contact-generation algorithm to make sure it only shrinks tile edges on contact strips where they meet other tiles of the same type--- otherwise, the algorithm shrinks edges of minimum-area contacts and refuses to draw a cut! Also, added extraction types "subcircuit_lw" and "subcircuit_ap" to differentiate between subcircuits which take parameters length and width ("l" and "w") and those that take area and perimeter ("a" and "p"). The original "subcircuit" call now outputs length and width to the extract file, but "ext2spice" will follow up by not passing any parameters to the subcircuit.- December 3, 2008 at 2:40am
Implemented the all-new "subcircuit" and "rsubcircuit" extraction types. These are designed to allow a list of parameters to pass to the subcircuit, and what to call each parameter. Standard parameters that magic can extract and compute are handled (length, width, area, perimeter, resistance, capacitance, position, and substrate). See the on-line maint2 manual for the complete syntax.
Also: Implemented the new command option "cif paint[ ]" to allow direct generation of magic layout from CIF generation rules (this should have been thought of years ago!).
Also: One small correction to the contact generation function which was declaring certain non-manhattan, non-convex regions to be simple rectangles (specifically, diamond and inverse diamond patterns).- December 4, 2008 at 2:40am
Corrected the "select net" and "select region" commands so that they do not require to be preceded by "select chunk" in order to work correctly.- December 6, 2008 at 2:40am
Corrected the new "cif paint" function by adding a cell bounding box check and DRC check at the end, and enabling the undo mechanism during the final paint.- December 10, 2008 at 2:40am
2008-12-10 02:40 tim- December 12, 2008 at 2:40am
Correction to extraction method to avoid hanging or segfaulting on devices with no terminals drawn.- December 13, 2008 at 2:40am
Corrected the step size and side halo scaling from microns to database units when the "units microns" option is used. Also, added the "corner chop" option to resistance specification in the extract section, to assert how to scale the length of a resistor turning a corner as a fraction of a square per corner.- December 18, 2008 at 2:40am
Corrected an error in CalmaWrite which fails to correctly scan start and stop values for pointers into a GDS file when "off_t" is defined as an 8-byte (long long) integer, which happens on 64-bit systems.- December 19, 2008 at 2:40am
Corrected scaling and conversion of sideOverlap and sideCouple capacitances.- December 30, 2008 at 2:40am
Corrected an error introduced into the extflat code when adding the new subcircuit and rsubcircuit handling; this error regularly causes segfaults when running ext2spice.- January 14, 2009 at 2:40am
Back-annotated version 7.5 with the correction made to the 8.0 code with respect to the contact cut-generation algorithm in small (two contacts wide) areas.
Also: Changed the cut-generation algorithm to prevent it from generating cuts that violate the border requirement. This breaks backward-compatibility and may be changed later to accomodate it.- January 15, 2009 at 2:40am
Corrected an error that prevented resistclasses from being seen by the extractor, thus preventing source/drain area/perimeter values from being written.- January 16, 2009 at 2:40am
Back-annotated a change from magic-8.0 that greatly speeds up the new contact generation algorithm.
Also: A minor cleanup of the contact generation code, to remove some unnecessary steps. Also: added parsing of "flabel" lines in .mag files to be forward- compatible with magic version 8.0 and above. These font label lines are processed by magic 7.5 like ordinary labels, ignoring the extra information.- January 20, 2009 at 2:40am
Changed the ext2spice and ext2sim standalone scripts to accept options for both magic itself, and the ext2spice or ext2sim command. The options are separated by "--", with the options for magic coming first and the options for ext2sim coming last; e.g., "ext2spice -T newtech -- -d testlayout"- January 22, 2009 at 2:40am
Corrected one of those wonderful "wrote == instead of =" errors. Keeps the CIF contact generation from running forever.- January 30, 2009 at 2:40am
Made a small correction that prevents magic from counting the metal-to-space edge on a contact as part of a device perimeter. Original assumption was that the contact would only be on the boundary outside edge, which is not true.- April 11, 2009 at 2:40am
Corrected a DRC error which would cause magic to "optimize out" (remove) rules that should not have been, as they are active in a different plane from the one that ought to be deleted.- April 24, 2009 at 2:40am
2009-04-23 09:25 tim Corrected an error which caused copying contacts to incorrectly flag the existance of overlap errors.- April 29, 2009 at 2:40am
2009-04-28 05:47 tim Removed the last change, as it is really, really bad. Will look for a different (and hopefully correct) solution to the DRC overlap problem (which at least is a lot more obscure than the problems caused by this unfortunate last "fix").- May 14, 2009 at 2:40am
2009-05-13 08:01 tim Corrected the wire value scaling when the internal grid is scaled (it was backwards).- May 19, 2009 at 2:40am
2009-05-18 20:06 tim Corrected an error that prevents magic from identifying isolated contact squares that are too small to draw a cut and generating an error message.
Also: 2009-05-19 02:40 tim- May 30, 2009 at 2:40am
2009-05-29 06:54 tim Corrected an extraction error in which the nodename of an extracted region might differ between the top level and subcells if the lower-left-most tile of the region is non-Manhattan.- May 31, 2009 at 2:40am
2009-05-30 14:45 tim Corrected an error that causes incorrect extraction (not to mention strange error messages) when a device declares its minterms to be less than the maximum number of terminals (e.g., a FET device that declares minterms = 1 so that FET caps are legal entities).- June 5, 2009 at 2:40am
2009-06-04 07:01 tim Made a correction to the "device subcircuit" parsing in the techfile such that zero-terminal devices may be legally constructed.- July 2, 2009 at 2:40am
2009-07-01 06:38 tim Corrected an error that prevents resistor extracted length and width from getting to a spice file.- July 14, 2009 at 2:40am
2009-07-13 19:54 tim Correction to the wrapper script submitted by Daniel Barden, that removes the checkmark for the Tech Manager when the window is removed forcibly by the window manager.- August 4, 2009 at 2:40am
2009-08-03 06:43 tim Corrected two errors that were also corrected in version 8.0: Continuous DRC routine checks on Tcl/Tk events, and option parsing of extresis.- September 12, 2009 at 2:40am
2009-09-11 07:29 tim Corrected the DRC checker to allow commands forcing an immediate check to execute. Code that was meant to prevent the continuous DRC checker from being executed in the middle of a command prevented this.
Also: Additional measures to ensure that the continuous DRC does not run in the middle of tool initialization.
Also: Yet more changes to the drc on/off/status/count command and behavior.
Also: One final correction to the DRC continuous code, and an update of the extraction that avoids crash conditions and/or bad extraction when a non-Manhattan tile is the only tile in a region.- December 31, 2009 at 2:40am
2009-12-30 05:45 tim Corrected a problem (also corrected in magic 8.0) with an integer-to-boolean conversion on machines that declare type bool to be something smaller than type int.- March 9, 2010 at 2:40am
Applied patches from Dan McMahill and Jason Shonberg- March 13, 2010 at 2:40am
Corrected DRCcontinuous so that background commands that modify the DRC state do not cause a crash when run during an interpreter catch-up in the middle of the background DRC checker.- April 30, 2010 at 2:40am
Corrected X11/OpenGL graphics to prevent the backing store mechanism from crashing when using multiple windows (multiple calls to free grXcopyGC). Thanks to Philippe Pouliquen for identifying the problem and sending a patch.- May 3, 2010 at 2:40am
2010-05-02 06:41 tim Extended the bloat-or function to make use of the "grow-euclidean" option. This is dreadfully slow, but it works.- May 4, 2010 at 2:40am
2010-05-03 08:16 tim Corrected the nonmanhattan paint routine to avoid merging split tiles. It was thought that this situation could not occur, but it can in the plane fracturing routine, where the area outside the fracture zone was already painted and the area inside has not yet been.- May 5, 2010 at 2:40am
2010-05-04 11:46 tim Corrected an error in the CIF bloat-or function for non-manhattan tiles that can generate paint routine calls with zero area, thus corrupting the tile plane, which can be fatal.
Also: Yet another correction to the bloat-or generation routine, to avoid corner expansion of values at +/- infinity.- May 14, 2010 at 2:40am
2010-05-13 14:28 tim Added routine to scale CIF-GDS rules along with the grid scaling, a routing which was missing.- May 15, 2010 at 2:40am
2010-05-14 11:57 tim Corrected an error in the euclidean distance DRC calculations that did not reset the flags for which corners to check, resulting in some very strange errors.- May 19, 2010 at 2:40am
2010-05-18 07:21 tim Unhandled case found in select enumeration of non-Manhattan tiles.- May 22, 2010 at 2:40am
2010-05-21 13:29 tim Corrected an error that crept into the paint code during recent work, that can cause an infinite loop during DBFracturePlane.- May 27, 2010 at 2:40am
2010-05-26 14:35 tim Error that was reported corrected in last revision was not an error; it was messed up (temporarily) only in version 8.0, and version 7.5 should not have been changed.- June 18, 2010 at 2:40am
2010-06-17 07:40 tim Corrected an error in which "expand toggle" would cause magic to crash if the cell being expanded forced magic to rescale the database.- June 25, 2010 at 2:40am
2010-06-24 12:57 tim Correctly reverted the error claimed to be reverted in revision 199, this time. What a dingbat annoyance.- June 26, 2010 at 2:40am
2010-06-25 06:59 tim Corrected an error in which the GDS paint copy function ignored non-manhattan geometry, such that non-manhattan geometry would be lost when using the "gds flatten" option.- August 10, 2010 at 2:40am
2010-08-09 17:18 tim Corrected an error in which the hint tile of the cell plane ends up as one of the boundary tiles after expanding a cell with scaled subcells. Resetting the hint tile seems to solve the problem.- August 16, 2010 at 2:40am
2010-08-15 07:35 tim Removed the call to DBUpdateStamps() from inside DBScaleEverything(). This command recomputes bounding boxes and can end up modifying the cell plane from inside a search on the same cell plane, with predictably disasterous results.- August 23, 2010 at 2:40am
2010-08-22 14:58 tim Corrected an error where nmPutNums() was not declared and therefore returns the wrong type in selOps.c.- September 2, 2010 at 2:40am
2010-09-01 08:21 tim Minor corrections to device area and perimeter calculations, to avoid undercounting perimeters of non-Manhattan geometry, and to avoid overcounting area of devices containing stacked contacts.- September 16, 2010 at 2:40am
2010-09-15 08:45 tim Changed the techfile parsing so that for the cifinput/cifoutput sections, the grammatically correct "scalefactor 1 nanometer" will not be parsed as syntactically incorrect.
Also: Correction that allows the connectivity search be called recursively without attempting to run multiple times on the same network, causing an infinite nesting of subroutine calls.- September 22, 2010 at 2:40am
2010-09-21 10:08 tim Changes back-annotated into 7.5 from 8.0: Modified method for handling triggered DRC rules; corrected drc_extend rule and drc_overhang rules for multiplane cases using the new method. Implemented a DRC_OUTSIDE flag that allows rules to specify maximum distance for a rule. Used this method to implement an "exact_width" option for the "surround" rule.
Also: DRC extensions from version 8.0 added to version 7.5 (this update contains mainly corrections)- October 20, 2010 at 2:40am
2010-10-19 09:03 tim Corrected the transistor extraction algorithm to cover the (rare) case of a multi-tile transistor with a substrate that does not extend under the entire device (seen in certain extended-drain device layouts). The algorithm defaults to the normal extraction method when a transistor is a single tile (the most common case).- October 21, 2010 at 2:40am
2010-10-20 05:04 tim Removed drcCifScale(); drc-cif rules are in centimicrons and don't need to be scaled with the database.
Also: Okay, axe that last change from yesterday. CIF-DRC rules do need to be scaled, but they need to be scaled from inside the scaling routine for the cifoutput rules, not the scaling routine for DRC rules.- October 23, 2010 at 2:40am
2010-10-22 08:02 tim Corrected a bad longstanding error in mzNumLine.c where an allocated block of an array of ints was mistakenly allocated as an array of bytes. Also, corrected a recent error where trans_SDtypes was not initialized. Same changes as made to version 8.0.- December 14, 2010 at 2:40am
2010-12-13 14:33 tim Corrected the extraction mechanism to match version 8.0 regarding devices with multiple tiles. The substrate node is found and saved while the extractor searches for all tiles belonging to the device. This prevents the possible ambiguity caused by searching for the substrate at the time of generating device output.- December 23, 2010 at 2:40am
Corrected a GDS output error in which magic generates output from its own database for a cell placed (manually) inside a vendor GDS cell which itself points to a nonexistant GDS file. A rare error, but one that produces very bad output.- November 25, 2011 at 3:00am
Corrected the transistor extraction routine, which would not correctly compute width and length of snaked transistors and resistors for certain geometries where the bottommost segment was not at one of the device ends.
- March 7, 2012 at 3:00am
Update at Tue Mar 6 12:30:35 PST 2012 by tim
- March 29, 2012 at 3:00am
Update at Tue Mar 6 12:30:35 PST 2012 by tim
Also: Correction to ext2spice to avoid accessing the device merge array after merging has been set back to "none" after being set to something else. Otherwise, an array underrun occurs.
Also: Update at Wed Mar 28 17:58:13 EDT 2012 by tim
Also: Merge branch 'master' into work
- March 30, 2012 at 3:00am
Correction of area parameter value, which gets suffix 'p' (pico) instead of 'u' (micro) as the 1E6 term implied by the suffix is squared, as pointed out by Mark Martin.
Also: Update at Thu Mar 29 11:11:18 EDT 2012 by tim
Also: Merge branch 'master' into work
- April 20, 2012 at 3:00am
Corrected an error with connectivity searches on non-Manhattan tiles.
Also: Update at Thu Apr 19 15:26:11 EDT 2012 by tim
Also: Merge branch 'master' into work
- April 21, 2012 at 3:00am
Changed default behavior to NOT compile ext2spice and ext2sim as independent loadable libraries. This has been having serious problems with newer versions of gcc, especially in the Ubuntu distribution.
Also: Update at Fri Apr 20 10:12:44 EDT 2012 by tim
Also: Merge branch 'master' into work
- April 25, 2012 at 3:00am
Change to force checking of minimum number terminals for all devices except subcircuit and rsubcircuit.
Also: Update at Tue Apr 24 12:11:23 EDT 2012 by tim
Also: Merge branch 'master' into work
- May 1, 2012 at 3:00am
Corrected at typo in the ext2spice.c source
Also: Update at Mon Apr 30 08:17:36 EDT 2012 by tim
Also: Merge branch 'master' into work
- September 10, 2012 at 3:00am
Update at Sun Sep 9 15:44:09 EDT 2012 by tim
- September 19, 2012 at 3:00am
Correction to configure script for Mac OS X; thanks to Ryan Schmidt of MacPorts for the patch.
Also: Update at Tue Sep 18 08:00:27 EDT 2012 by tim
Also: Merge branch 'master' into work
- September 22, 2012 at 3:00am
Corrected symbol conflict between ext2spice and ext2sim
Also: Update at Fri Sep 21 11:14:46 EDT 2012 by tim
Also: Merge branch 'master' into work
Also: Corrected a bunch of wrong usages of AC_ARG_ENABLE in the configure script
- September 23, 2012 at 3:00am
Applied patch from Ryan Schmidt to change internally defined "macosx" to externally defined "__APPLE__". Also cleaned up a handful of functions failing to return values, and a few other minor problems that produce compiler warnings.
Also: Update at Sat Sep 22 09:52:37 EDT 2012 by tim
Also: Merge branch 'master' into work
- September 25, 2012 at 3:00am
More function return-value cleanup, and added another patch from Ryan Schmidt to fix the "echo -n" usage (which has been fixed in magic version 8.0 although I don't remember when).
Also: Update at Mon Sep 24 19:15:30 EDT 2012 by tim
Also: Merge branch 'master' into work
- September 30, 2012 at 3:00am
Corrected a small error that allowed unknown layers to define LEF geometry, which would get copied with a negative layer type and cause trouble. . .
Also: Update at Sat Sep 29 17:59:58 EDT 2012 by tim
Also: Merge branch 'master' into work
- October 2, 2012 at 3:00am
Cleanup of return-type compile-time warnings
Also: Update at Mon Oct 1 10:34:53 EDT 2012 by tim
Also: Merge branch 'master' into work
Also: Correction for Cywgin since Cygwin no longer sets TERM to "cygwin"
- October 3, 2012 at 3:00am
Two corrections, one for proper startup under Cywgin and OS X, the other for proper operation with "-dnull".
Also: Update at Tue Oct 2 17:47:02 EDT 2012 by tim
Also: Merge branch 'master' into work
- October 7, 2012 at 3:00am
Correction of launch script for Cygwin.
Also: Update at Sat Oct 6 13:25:16 EDT 2012 by tim
Also: Merge branch 'master' into work
- January 24, 2013 at 3:00am
Updated scmos/Makefile with the new code from magic-8.0 that avoids issues where a recently-introduced gcc preprocessor bug causes backslashes to be removed. It is believed that on preprocessors without the bug, double backslashes in the output will be handled without error.
Also: Update at Wed Jan 23 12:42:48 EST 2013 by tim
Also: Merge branch 'master' into work
- April 27, 2013 at 3:00am
Corrections from the Gentoo developers
Also: Update at Fri Apr 26 15:38:24 EDT 2013 by tim
Also: Merge branch 'master' into work
- August 30, 2013 at 3:00am
Updated config.guess, especially for Cygwin on x86_64.
Also: Update at Thu Aug 29 13:40:36 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 24, 2013 at 3:00am
Update at Mon Sep 23 22:18:32 EDT 2013 by tim
- May 17, 2014 at 3:00am
Corrected an error that causes mouse buttons to generate Ctrl-C interrupts. Possibly due to changes in Tcl/Tk version 8.6. Thanks to Jim Everitt for the bug fix.
Also: Update at Fri May 16 12:12:49 EDT 2014 by tim
Also: Merge branch 'master' into work
- May 27, 2014 at 3:00am
Update at Mon May 26 09:55:06 EDT 2014 by tim
- May 28, 2014 at 3:00am
Update at Tue May 27 19:10:17 EDT 2014 by tim
- May 30, 2014 at 3:00am
Update at Thu May 29 10:52:48 EDT 2014 by tim
- May 31, 2014 at 3:00am
Update at Fri May 30 14:41:22 EDT 2014 by tim
- June 1, 2014 at 3:00am
Update at Sat May 31 14:50:54 EDT 2014 by tim
- June 28, 2014 at 3:00am
Added ext2spice and ext2sim support for diodes with one terminal on a substrate plane.
Also: Update at Fri Jun 27 15:16:06 EDT 2014 by tim
Also: Merge branch 'master' into work
- September 16, 2014 at 3:00am
Same correction as made to magic-8.0, fixing a typo that crept into the code long ago and that prevents multi-line macros.
Also: Update at Mon Sep 15 16:52:36 EDT 2014 by tim
Also: Merge branch 'master' into work
- Feburary 9, 2006
Original version. The only difference between this and version 7.3 is a cleanup of some of the instructions, and removal of several unused experimental features (to improve stability of the product).- Feburary 12, 2006
Changes from Philippe Pouliquen for FreeBSD, Mac OSX, and Cygwin compatibility, and a few bug fixes (forward declarations, type casting, etc.).- Feburary 16, 2006
Removed redundant calls to the tech section "Final" callback function for cifinput, cifoutput, and extract sections.- Feburary 18, 2006
Two minor bug fixes for setting grXscrn in grTk1.c, and forcing tkcon.tcl to be world readable/executable on install.- Feburary 19, 2006
Two more fixes: 1) Tell "configure" to search for "wish-X11", which is used in Mac OS X, and set WISH_EXE accordingly. 2) Fixed windDefaultFlags, which was declared "bool" in one file and "int" in other places. This is the suspected cause of Magic drawing double borders on Tcl/Tk wrapper windows, presumably because Mac OS X defines "bool" as something smaller than "int".- Feburary 23, 2006
Changed $CAD_HOME to be "$libdir" instead of "$prefix", to comply with distributions that want to define $libdir as /usr/share/. This means that by default, $CAD_HOME is now /usr/local/lib/ instead of /usr/local/.- Feburary 24, 2006
Changed $CAD_HOME to $CAD_ROOT so as not to conflict with previous distributions of Magic. $CAD_HOME is no longer used by Magic. Also: Changed man page magic.5 to mag.5 to avoid conflicting with an existing man page by that name, and added man page magic.1 to the list of installed files in Makefile (don't know why it was missing).
Also: Added "$(DESTDIR)" to installation Makefiles so magic can be compiled in a sandbox using "make DESTDIR=staging_area install"- March 13, 2006
Note: Attempted corrections to the maxwidth rule seriously destabilized the code. I am removing this revision until I figure out what went wrong.
Made CAD_ROOT global in the techmanager script; otherwise it's not recognized.
Also: Corrected command "cursor" to return the correct Y value for Tk (non-OpenGL) windows (would become incorrect after resizing the window; thanks to Eric Wong of U. Md. for pointing out the error).
Also: Corrected an error with the maxwidth rule which caused it to incorrectly report an error for a layer with width equal to the maxwidth distance when using "bend_ok".- March 15, 2006
Minor correction to the CIF input code to prevent mishandling cells that are called prior to being defined.- April 3, 2006
Corrections by Philippe Pouliquen for DRC handling of corner extensions.- April 6, 2006
Corrected the "make depend" to generate dependencies on ALL of the sources in the graphics subdirectory, not just the ones selected for compilation. Recreated the Depend files.- April 7, 2006
Extended the use of the "alias" keyword in the "types" section of the techfile to include single-layer aliases, equivalent to adding the alias name to the list of names that define the layer in the first place.- April 10, 2006
Corrected round-off errors in the LEF read routines. Thanks to Frank Lien for identifying the error.- April 11, 2006
Further refinement of the use of the "alias" keyword: Labels placed on an alias layer in an input .mag file will be re-assigned to the first real layer defined by the alias.- April 13, 2006 at 9:25pm
Changed label attachment to accept type names in the alias hash table database. Because these names can refer to multiple layers, the first layer is returned in such cases.
Updated from configure.in with 64-bit changes
Corrected the DEF read code (thanks to Frank Lien for bringing the error to my attention) to correctly generate the reverse mapping table for mapping LEF layers to magic layers.
Also: Fixed Philippe's changes to the DRC code so that it now (again) correctly computes the widespacing rule.
- May 10, 2006 at 2:40am
Corrected the DEF read code (thanks to Frank Lien for bringing the error to my attention) to correctly generate the reverse mapping table for mapping LEF layers to magic layers.
Also: Fixed Philippe's changes to the DRC code so that it now (again) correctly computes the widespacing rule.
Also: Fixed 3D rotate 1 macros keys
Also: Updated rpm spec file for magic 7.4
Also: Automated packaging and rpm building directly from CVS Build an RPM: make distclean; make dist; rpmbuild --clean -ta magic-*.tgz
Also: Corrections to commands that cause segmentation faults when executed on non-edit cells. This fix overrides what was done previously in the select subdirectory source files selCreate.c, selEnum.c, and selOps.c. Instead, a check for the existance of the edit cell is made in each command dispatch routine (CmdArray, CmdDelete, etc.).
Also: Fixed 64-bit warnings about integer/pointer conversions
Also: Backport clean-ups and fixes from 7.5
Also: Fixed fPIC problem on cygwin
Also: Corrected .spec file dependencies
Also: Opps, forgot to add another dependency
Also: Fixed netlist label placement feature on 64-bit machines
Also: Reverted back to 32-bit TileType, put in appropriate 64-bit casts to suppress warnings
Also: Changed tile.h to increase the value of INFINITY (although this did not actually fix my problem, it needs to be done anyway). Also, added a search path for Tk that is compatible with Ubuntu Linux. Thanks to Osei Poku for the patch.
Also: Fixed error that crashes magic when attempting to print the contents of a macro that has been set to an empty string.- May 12, 2006 at 2:40am
2006-05-11 22:19 tim Corrected the long-standing error in which labels randomly are turned into ports. This was caused by a type mismatch between the Label and labelUE (undo record) entries for label position and type.- May 16, 2006 at 2:40am
2006-05-15 11:44 eric Added sanity checking on the number and total length of the command line arguments in TxTclDispatch (i.e., the lack of checking only applies to the Tcl version). Raised the maximum number of command arguments to 200, because scripts can generate some pretty long commands (for example, "polygon").- May 24, 2006 at 2:40am
2006-05-24 01:09 eric Added an alternative definition for roundf() to allow compilation under Solaris, which doesn't have it. Changed one of the makefiles which may or may not cause Solaris to properly generate the correct symbolic link to readline. My guess is, probably not.- May 27, 2006 at 2:40am
2006-05-26 20:03 tim Changed man page Makefile to work correctly when $DESTDIR is defined. Changed lefRead and defRead to define function roundf() on systems that do not define it (namely, Solaris).- June 14, 2006 at 2:40am
2006-06-14 00:12 eric Minor clean-up of build files- June 20, 2006 at 2:40am
2006-06-19 07:03 tim Added /usr/lib64 to the search path for Tcl/Tk to accomodate 64-bit architectures.- June 25, 2006 at 2:40am
2006-06-24 18:58 tim Made changes equivalent to those in magic 7.5, to avoid a segmentation fault when attempting to use the "save" command on a non-edit cell.- July 28, 2006 at 2:40am
2006-07-27 10:01 tim Changes to correct the heap code for type "double int", which was never finished after removing the local code for handling double-size integers about a year ago.- July 29, 2006 at 2:40am
2006-07-28 08:43 tim Corrected one missing change in utils/heap.c (change HeapAddDInt() to HeapAddDLong()).
Also: Made the same two bug fixes as were made to the 7.5 code today---fixing the dlong cast and preventing blocking layers from being painted on all planes.- August 14, 2006 at 2:40am
2006-08-13 14:43 tim Same change as made to version 7.5: magic-to-screen coordinate transform changed from (dlong)(a * b) to ((dlong)a * (dlong)b) to prevent overflow for any (a * b) that can't fit in 32 bits.- August 29, 2006 at 2:40am
2006-08-28 13:35 tim Correction to mos.24bit.dstyle, as pointed out by Erwin Prinz: name "hnvdiff" corrected to "hvndiff", as it ought to be.- September 2, 2006 at 2:40am
2006-09-01 11:37 tim Fixed error pointed out by James Stine in which "ext2sim" does not set parasitic resistor and capacitor thresholds based on the "-R" and "-C" options passed to "ext2sim" on the command line.
Also: Corrected proto.magicrc.m4 so that M4 correctly generates the right result when USE_NEW_MACROS is not set. Thanks to James Stine for the bug report.- October 2, 2006 at 2:40am
2006-10-01 16:29 tim Same changes as were made recently to version 7.5 to prevent errors on OS's (e.g., everybody except Linux) that rigorously check whether or not a file descriptor is closed before executing "rename" on it.- October 5, 2006 at 2:40am
2006-10-04 10:31 tim Changes to place the search for the round() and roundf() functions in the configure step, and to define them in utils/math.h if not available in the math library, instead of having definitions scattered through the code. Also: Fixed (again) the error that causes files not to be saved under Sun and Cygwin to match changes made in version 7.5.
Also: Corrected the scaling routing to properly set the MODIFIED flag if points were rounded when scaled, and to leave it alone otherwise. Thanks to Philippe Pouliquen for pointing out the error.
Also: Fixed an error that failed to zero the layer mask assigned to an "alias" name, resulting in a random assortment of layers. Thanks to Marcus Escobosa for pointing out the error.- October 13, 2006 at 2:40am
2006-10-12 10:02 tim Modified the way Magic writes files so that if a file is being saved for the first time, and therefore does not exist on the disk, then Magic will not go through the trouble of making a temporary file.- November 23, 2006 at 2:40am
2006-11-22 14:46 tim Corrections to capacitor device extraction code in extract/ExtBasic.c to match similar fixes made to the magic-7.5 code base.- December 4, 2006 at 2:40am
Corrections to the setup of the parasitic capacitance extraction tables for contact types. Contact types in statements like "overlap" and "areacap" are now ignored, with the tables being set up automatically for contact types based on the contact residues declared in the "contacts" section. These changes match the same correction made to the magic 7.5 code base.- January 19, 2007 at 2:40am
Corrected a typo in ExtCouple.c where "DBPlaneToResidue" was written "DBPlanetoResidue".- March 4, 2007 at 2:40am
Extraction algorithm corrections for contacts, especially for side overlap calculations. Thanks to Emerson Vernon at Brookhaven Lab for providing a thorough test case.- April 21, 2007 at 2:40am
Same changes as made to version 7.5 to correct the 64-bit non-compliance of the MINFINITY definition. Corrects errors in both the DRC minimum area rule and GDS output when magic is used on 64-bit platforms.- October 10, 2007 at 2:40am
2007-10-09 12:28 tim Same change made to GR_NUM_GRIDS as was made to magic version 7.5, to prevent the number of grid lines from being dependent upon the pixel size of the display.
Also: Added David Fang's patch, containing mostly Makefile changes to support DESTDIR staged installations, and a few related things. Also changed the techfile read routine to avoid a crash situation due partly to an attempt to re-read the techfile in the middle of a techfile read-in (bad idea), and changed the "cifstyle" command in the "drc" section such that it flags an error if the style to which it refers is not the default style. This is a band-aid solution and needs to be fixed properly, since changing cifoutput styles is likely to cause magic to crash. Finally, added another fix for a bug pointed out by Viet Dinh in which VERSATEC is misspelled in the plot section code.- October 11, 2007 at 2:40am
2007-10-10 11:05 tim Made a correction submitted by Bertrand Irissou at ASICAdvantage, correcting GDS string output when characters disallowed by the GDS spec are modified.- October 12, 2007 at 2:40am
2007-10-11 10:21 tim Corrected the DRC subcell overlap error, where the swapping of paint tables had been inadvertently commented out.
Also: 2007-10-12 02:40 tim- October 17, 2007 at 2:40am
2007-10-16 13:33 tim Corrected a typo in CalmaWrite.c, made when copying a change over from magic version 7.5. Thanks to Trey Greer for pointing out the error.- October 27, 2007 at 2:40am
2007-10-26 11:41 tim Rewrote the temporary file handling so that it does not change permissions of the original file when writing .mag file changes back to disk. Matches changes made to version 7.5.- November 2, 2007 at 2:40am
2007-11-01 22:09 tim Corrected "flatten" command so that it does not segmentation fault when attempting to flatten a read-only cell.
Also: Re-established the original code for DRCtech so that it will not surprise people with utterly bizarre behavior, while I work out the correct paint tables for stacked contact types.- November 5, 2007 at 2:40am
2007-11-04 11:28 tim Corrected the extraction region-finding routine for non-Manhattan geometry. While the routine in "ExtFindNeighbors" had been corrected earlier to save the "side of interest" when pushing non-Manhattan split tiles onto the stack, the bit indicating the side of interest was never set.- November 6, 2007 at 2:40am
Added a correction by Bertrand Irissou to DRCcif to multiply centidistance by cs_expander to get the correct resulting scale factor. Also, added a fix to prevent a segfault when doing "getcell" in a read-only cell def.- November 12, 2007 at 2:40am
Corrected another couple of instances where commands given with respect to a read-only cell cause magic to crash. Thanks once again to Bertrand Irissou for the bug report.
Also: Corrected an extraction problem, where a line added to prevent the transistor perimeter calculation from double-counting contacts was preventing any perimeter from being calculated if the transistor gate is tied to a well (or any plane below the active plane).- November 16, 2007 at 2:40am
Corrected an error in GDS/CIF generation discovered by Bertrand Irissou in which an unitialized variable plays havoc with the "bloat-or" operation, gone unnoticed for a surprisingly long time.- November 28, 2007 at 2:40am
Corrected the squares-grid function to ensure that contacts are centered to the extent allowed by the grid. This correction was previously made to version 7.5 but not changed in version 7.4.
Also: Corrected (again!) the "flush" command with respect to read-only cells, to prevent magic from crashing, and also to allow "flush" with no cellname given as an option to pick up a read-only cell as the cell to flush.- December 6, 2007 at 2:40am
Corrected a crash problem in the "extract" command for non-Manhattan contact tiles (meaning pads, typically) due to inadvertant passing of a non-Manhattan tile type to TTMaskHasType().
Also: Same correction as was mentioned in the previous commit, only this time it has been done correctly (ExtBasic code now matches changes made earlier to ExtNghbors, and both have been cleaned up a bit).
Also: Copied changes from version 7.5 back to 7.4 that correct hierarchical extraction of non-Manhattan geometry.- December 9, 2007 at 2:40am
Corrected a fatal error in the extraction "hard node search" caused by changes to the way plane numbers are derived from tiles. Also, implemented an extension to the "what" command that prints the name of each cell use where each type of paint is found (very, very useful!)
Also: A couple more changes to the "what" command routine that prints cell use names, simplifying the procedure and avoiding a static declaration.
Also: Corrected an unexpected error in which Tcl was discovered to run "idle procs" in the middle of a routine. In particular, Tcl calls Tcl_DoOneEvent after sending text to the console (via TxPrintf()), to force the console window to refresh. The unfortunate consequence is that DRCContinuous gets run as an idle proc in the middle of executing "drc why", thus fouling up its own database. This most quickly shows up when using the "drc cif" rules, where the CIF database is regenerated every time DRC checks are run (a bad setup that itself needs rewriting). A related problem was found where callbacks from the DRC code themselves call DRCBreak(), creating a horribly slow loop where DRCContinuous() forces itself to break and re-enter every iteration. This has probably always been this way, but shows up as being especially slow, again, in the case of "drc cif" rules where the regeneration of the CIF geometry inserts a huge delay into the loop. It has also been fixed.- December 14, 2007 at 2:40am
Implemented Graham Petley's suggestion to have the "see" command make contact residue layers visible when the residue layer type is set to visible but the contact type itself is not. For example, "see no *; see m1" shows the metal1 layer where poly and diffusion contacts and vias are present, instead of displaying blank space in those areas.- December 22, 2007 at 2:40am
Corrected #1 of two errors-from-hell. The database was corrupted by the failure to merge part of a tile after a 4-way split of a non-manhattan tile, leaving a violation of the "maximum horizontal stripes" rule.- December 24, 2007 at 2:40am
Corrected (the right way, this time) an error in which the plane of a region's reference node was being confused with the plane of the tile in the region's record, causing a difference between the searches that create and destroy regions. This resulted in dangling pointers and random behavior.
Also: 2007-12-23 12:26 tim Corrected sidewall capacitance scaling vs. the grid spacing.- December 25, 2007 at 2:40am
Corrected the DRC spacing rule, which was not properly setting up the corner check when the type to check distance to is in another plane than the edge.- January 3, 2008 at 2:40am
Changes to the configure scripts for proper handling of round and roundf functions, and the handling of libXi.
Also: Corrections made to the DRC code where I accidentally made a change to the stable distribution that was supposed to have been made to the development version. . . juggling too many versions, here. . . also removed a comment line that was supposed to have been removed already.
Also: Implemented the "site.def" file for site-specific definitions that will not get overwritten by new installations of magic.
Also: Implemented layer locking feature. Plane names in the layer definition that are prefixed with '-' force the layer type to be locked.
Also: Partial implementation of a GDS euclidean-distance grow operation.- January 17, 2008 at 9:21am
Re-implemented layer locking with only type masks. Also changed the behavior of "select delete" so that it matches the behavior of "erase" with respect to contact residues.
Also: Some changes relative to locked layers, which is still not correct.
Also: 2008-01-04 06:33 tim Minor adjustment between databases.
Also: 2008-01-04 13:42 tim Implemented cell instance lock-down, using the "instance lock/unlock" command. This prevents a cell instance from being changed.
Also: 2008-01-05 11:48 tim Corrections to layer and cell locking mechanisms.
Also: Corrected the behavior of layer locking so that the treatment of contacts is now consistent (except for stacked contacts, probably).
Also: Completed the Euclidean-distance CIF grow/shrink operator.
Also: 2008-01-07 12:42 tim Corrected the paint function and added the toolkit Tcl script.
Also: 2008-01-08 02:40 tim
Also: Corrected the DRC-CIF handling so that changing the cifoutput style to a style not containing the DRC-CIF rules does not cause a crash. It also prints a warning when DRC-CIF rules have been disabled by changing the CIF output style.
Also: Minor correction in the display of stacked contact types.- January 26, 2008 at 2:40am
- January 28, 2008 at 2:40am
Corrected a bad error where I failed to clean up an experiment and therefore left a serious problem in the database paint code.- January 29, 2008 at 2:40am
Corrected an error that causes a crash when attempting to stretch, move, or delete a selection containing non-Manhattan geometry (error introduced by layer locking code).
- September 12, 2003
Original version. The "only" change from version 7.2 is the method of handling contacts.
- September 22, 2003
Changed stacked contact handling such that stacked contacts are only generated in response to the keyword "stackable" in the "contact" section of the tech file. Otherwise, this version is supposed to be backwardly compatible with all technology files designed for versions 7.2 and earlier.- September 26, 2003
Changes to match magic 7.2.51; addition of a LEF file reading routine.- October 27, 2003
Changes to match magic 7.2.54.- November 25, 2003
Changes to match magic 7.2.58. Also, fixed errors in the stacked-contact handling of the DRC section and selection stretching function.- November 28, 2003
Fixed a long-standing error in the techfile DRC section which caused "no overlap" errors on all contacts whenever subcells were present. Also, fixes transferred from 7.2 with "*" notation in the tech file, and a very long- standing error with the select() function in the IRSIM I/O handler, when compiled on systems defining SYSV (such as Linux). Thanks to Mike Marcel for pointing out this problem.- December 1, 2003
Minor changes to match magic 7.2.60---colormap and style files expanded to include metal9 and metal10 definitions and corresponding vias; LEF read routine enhanced to speed up reading files with complicated port geometries, which result in a long list of labels in the cell definition.- December 3, 2003
Fixes to DRC routines for subcell interaction, including a new algorithm for determining exact overlap which does not require rectangular areas. Also, updated style files to format 7, removing all octal notation and replacing with "%i" notation (normally decimal, with 0x for hex and leading 0 for octal). Stipple patterns changed from 3-digit octal to 2-digit hex (for obvious reasons).- December 5, 2003
Fixes to the extract and extresis sections for compatibility with the stacked contact method. Extraction and IRSIM simulation confirmed for the tutorial cell.- December 11, 2003
LEF/DEF reader expanded to encompass LAYER, VIA, and VIARULE statements, and separately handle port and obstruction layers inside cells. Tech file scmos9m.tech modified to include obstruction layers on active, m1, and m2 planes.
Also: Took care of several things in the TODO file, including removing references to Void and removing the deprecated keyword register. Void references have not been entirely resolved, as some of them need to be void and others int or bool and files need to be worked through individually.
Also: Some fixes to resistor and capacitor extraction, esp. to add the SPICE semiconductor resistor and semiconductor capacitor types. Better extraction models are needed, however.
Also: Some fixes to configuration and Makefile, in particular, to add in the switch -fPIC which was defined but unused.- December 30, 2003
Fixes to match version 7.2 revision 62, including the fixed Tcl line input method (for functions such as label entry in the "netlist" window). The input method is called by the Tcl function "magic::dialog [prompt] [prefix]", but is handled slightly differently depending on whether it is called from the command line or from a button function such as the netlist menu label input.- March 11, 2004
Changes to the colormap reader to handle 1) color names, 2) comment lines, and 3) more than 256 entries. Colormap files have been updated to take advantage of this change. Style files can potentially use color names in place of numbers, but these have not been updated.
Also: The restriction that the tcl version must be compiled with "make tcl" and installed with "make install-tcl" has been eliminated. Now, "make" and "make-install" suffice for both the tcl and non-tcl versions.- March 19, 2004
Changes to match magic version 7.2 revision 64, including modified SimTreeSrTiles function, enhanced command-line functions goto, getnode, findlabel, and update, and added the new command (TCL only) search. Modified the autoconf configure to compile Tcl and OpenGL by default, and rearranged directories to put the TCL scripts in subdirectory "tcltk".- March 31, 2004
Changes to match magic version 7.2, revision 65, including handling of DOS-style Carriage-return/linefeed in technology files, and correction/extension of the "squares-grid" command in the tech file "cifoutput" section.
Also: Corrected an error in reading the "edge" rules in the technology file DRC section.
Also: Changed the behavior of coordinate parsing so that all commands can handle grid-based coordinates. The command "snap user" will cause all coordinates to be based on the grid specified by the "grid" command, by default. This includes handling the grid offset and different X and Y grid spacings.
Also: Fixed the "paint" command in the technology "compose" section so that it operates on contact types without missing planes.- April 9, 2004
Changes to match magic version 7.2, revision 66, namely Cygwin compatibility in the make process.- April 12, 2004
Changes to match magic version 7.2, revision 67, namely the modification of exttospice (ext2spice) to add ".subckt ... .ends" around top-level circuits that define ports, and the ability to revert to the original behavior using "exttospice subcircuits top off".
Also: Added the command "cellsearch" to the TCL-based version, that registers a TCL procedure as the callback function to a search over cells. This is similar to the "search" command for tiles. The two variants are "cellsearch" for searching once for every cell definition, and "cellsearch instances " for searching over all cell uses. The TCL procedure in the first case takes one argument, which is the cell name. The procedure for uses takes 3 arguments, the first a list of four integer values representing the bounding box of the instance in root coordinates, followed by two string values representing the instance name and cell name, respectively. - April 13, 2004
Fixed an error in the configure script that caused a run-time error in revision 15.
Also: Added the capability to give alias names for stacking types in the technology file. Changed the behavior of "paint" and "erase" commands to handle stacking contact type names by painting or erasing the residues (contacts) of the stacking type rather than the stacking type itself. Changed the behavior of the layout (.mag file) reader in DBio.c to handle stacked contact names in the input file, which finally provides some compatibility with layouts generated using technology files with explicitly-defined stacking types.- (never posted)
Corrections to capacitance calculations for areas shielded from the substrate by intervening types.- May 7, 2004
Corrections to line drawing of non-Manhattan selection areas at the screen boundary, and a very important correction to region and network selection of areas containing non-Manhattan geometry, which otherwise may hang the process (although it is interruptable).- May 11, 2004
Makes a correction to the tech file read-in of stacked contacts that allows one layer (such as "pad") to be defined that has the same residues as one stacking type (such as "m123c") without magic's confusing their respective paint/erase tables. This avoids the necessity of having to define an extra plane (usually "oxide") just so type "pad" can have different residues than the stacked contacts. Note that this is only a problem for 3-metal-layer technologies, as four or more layers in a pad would never match any of the automatically-generated stacked contact types.- May 13, 2004
More corrections similar to Revision 18 to complete the correct behavior on searches containing non-Manhattan tiles for the sim ("getnode") and resis ("extresis") modules. A few corrections to Revision 19, which failed to compile do to some typos in the source.- May 24, 2004
Added an arrowhead extension to the "line" element type. Also, cleaned up the error message text for the "element" command such that it gives helpful feedback about correct syntax and available options. Element reads from a .mag file now correctly set the "persistent" flag for "line" and "rect" elements (in addition to "text", which was previously handled correctly).- June 2, 2004
Fixed the "device capacitor" and "device resistor" extraction to operate correctly on devices with model names (other than "None") for which a device length and width is extracted instead of a value. Thanks to Mark Martin for pointing out this error.
Also: Fixed "getnode" and "extresis" (again!), this time to properly handle stacked contact types. Otherwise, these functions can hang when encountering a region containing a stacked contact.- June 3, 2004
Removed all of the error-generating statements at the top of many the header files, and instead implemented a standard method by which each include file defines a variable indicating that it has been parsed, and makes sure that it is not read more than once. Then, each header includes any other headers that it depends on. Further, redundant declarations of TRUE and FALSE have been removed, and "bool" has been typedef'd to "unsigned char". bool variables set to negative values have been recast as "int". Thanks to Jason Schonberg for the patch file which implemented most of the above changes.- June 15, 2004
Added a preliminary version of the DEF file writer. Documentation to be provided, eventually.- June 18, 2004
Improvements on all the LEF/DEF methods. The current version handles VIA definitions correctly, although at the moment it reads contact CUTS and does no extra processing (i.e., CIF-to-magic boolean rules) to produce the magic contact areas. Unlike previous versions, it preserves route and via coordinates in half-internal-unit values. Still to do: 1) Handle routes with non-standard widths as "SPECIALNETS" instead of "NETS" in the "def write" function, 2) implement CIF-to-magic rules on contact cuts, 3) convert PINS section in DEF files to ports in the top-level layout for the "def read" function.
Also: Removed the restriction that no two contacts can share residues. It is now perfectly legal to define types, say, "via" and "viacut" which are treated differently by DRC and CIF I/O, but which contact the same two layers (e.g., metal1 and metal2).- June 22, 2004
A few more improvements on LEF/DEF methods. Implements SPECIALNETS vs. NETS in the DEF output file. All named nets, and especially nets with global names or matching the TCL variables $GND and $VDD, will be treated as "special nets".- July 2, 2004
A couple of critical fixes. The "stretch" function problems have been eliminated (thanks to Nishit at SynappsCorp).- July 7, 2004
Expanded the "tech" command to query the DRC database. Includes command options "tech drc width <layer>" and "tech drc spacing <layer> [<layer2>]".- July 8, 2004
Critical fixes to the stacked contact painting functions, which now appear (fingers crossed!) to be correct. There is one important caveat: Layouts created under magic-7.2 or earlier which attempt to make contact stacks by painting types that are officially not supposed to overlap (like m456c on top of m3c, in the SCN6M_DEEP.09 process) will not load correctly in magic-7.3. However, if the techfile conversion program (see download table) is applied to the original technology file, and the resulting techfile is used to view the layout, it will work correctly.
Also: Revision 23 was found to break exttospice, in that nodes would always be interpreted as floating due to the critical bit being lost in the conversion to boolean. This has also been fixed.- July 9, 2004
Yet again, another fix to the connectivity selection mechanism for non-Manhattan geometry. This one involves coping with "(M)INFINITY" values in border tiles. "Infinite" values are handled by enforcing the special arithmetic (INFINITY + x = INFINITY) and so forth, and so all such equations must be computed separately.- July 13, 2004
New network selection "undo" record by Nishit at SynappsCorp. This code separates network selection from other types of selections when creating the undo/redo records. The premise is that network selection 1) is virtually always for informational purposes only, 2) involves a lot of tiles, and 3) rarely ever gets undone/redone. The original selection undo mechanism remembers every single tile paint operation. This makes sense for area selections. However, for net selections, it is very easy to regenerate the network selection on the fly by knowing only a single starting position. So the new method does not gobble up huge chunks of memory for every network selection, and by avoiding all of the memory allocation overhead, actually speeds up network selection significantly.
Also: Minor but critical fixes to non-Manhattan geometry handling for extraction.
Also: "Corrected" subcircuit extraction for ports which belong to the same network. I put "corrected" in quoted because the situation is somewhat undefined. However, the newer version will write the expected number of arguments to the "X" record when writing the SPICE deck. Done this way, the method supports "thrus" in standard cells.
Also: New command option "wire segment" will draw wire segments by supplying a centerline and width. Will draw non-Manhattan segments (finally, a command to draw non-Manhattan wires!).
Also: Support added for the read-in of non-Manhattan wires in CIF and GDS input. This is specifically for the "wire" record, which is different from rectangle and polygon records, and tends to be rarely used.- July 14, 2004
Corrects a couple more errors in non-Manhattan geometry painting/erasing.
Also: Corrects the macro rebinding of "o" and "O" for "openwrapper" and "closewrapper" by allowing macro definitions to call Tcl procedures as well as magic commands. This is a "real ugly hack" because it requires setting up a "dummy" command name to pass to the macro, with the real command set as a tag callback to the dummy command name.
Also: Used the new macros-call-procedures method to define new procedures "pushstack" and "popstack" and bind them to keys ">" and "<", enabling a more hierarchical feel for the editing.- July 16, 2004
Very important new feature: The command option gds readonly [true|false] allows imported GDS cells to be tagged with 1) "read only" status, 2) the GDS filename, and 3) the start and end file positions for the cell. When this cell is written back into an output file, the cell definition itself will be copied verbatim from the original GDS to the new output file, regardless of what magic shows the contents of the cell to be. This is intended for handling vendor-supplied cells such as padframes and standard cells, where one does not want to risk having magic possibly alter the layout of a pre-characterized circuit through its boolean operators. With this method, one can devise a special "cifinput" section of a techfile for translating GDS into a LEF-like cell structure, wherein the standard cells have most details hidden and only show areas for routing and obstructions.Note that one can query the information retained about the GDS file and positions using the "property" command in magic.
Also: The "hack" mentioned in revision 32 has been made more transparent by defining a new command "gmacro" (for "general-purpose macro") that has exactly the same syntax as "macro" and "imacro" but which allows Tcl procedures and statements to be called by the macro expansion.- July 19, 2004
Non-Manhattan paint routine correction.
Also: Updated the technology file format to "30" with the addition of CIF istyle and ostyle "variants" (see the Technology web page for details).- July 20, 2004
Non-Manhattan painting tile cleanup attempt. This prevents excessive splitting of the tile plane during non-Manhattan paint operations. It does not yet allow general merges of sub-split non-Manhattan tiles into larger, simpler tiles, so it does not completely correct the problem.- July 21, 2004
"Wire segment" command extended to multiple segments and handles corner mitres between segments.
Also: "closewindow" command extended to include a window name, so the command can be run from the command line, with predictable results.
Also: Window-manager initiated window close commands (WM_DELETE_WINDOW message) forced to use the magic "closewindow" command (using the Tcl "wm protocol" command).
Also: Non-console startup redesigned to use a standalone executable "magicexec" which is a replacement for "wish" and works around the problem of reading the "magic.tcl" script in place of the ".wishrc" script. This allows "magic -noc" to be called from a remote machine, which is important for being able to run Tcl-based magic in batch mode.- July 26, 2004
Removed the "DoubleInt" code (thanks to Nishit Patel for the code changes) on the assumption that most compilers will recognize "long long" as a 64-bit integer type, and handle it correctly. Also, this release defines an option "euclidean" to the "drc" command that turns on/off the Euclidean distance metric for DRC checking. Previously, this option had to be compiled in and could not be changed.- July 28, 2004
Added the new GDS command option "gds array" which is actually the old GDS command option "gds flatten". Now, "gds flatten" indicates that "small" cells in the GDS input stream should be flattened. With "small" set to mean "10 rectangles or fewer", this method catches most instances in which contact cuts are arrayed prior to writing GDS output. By flattening these instances on read-in, magic is forced to do more processing up front, but subsequent processing, such as displaying, DRC, extract, connectivity searching, etc., will be much faster. This method will also tend to stop the generation of "generic" contact and diffusion forms, which are usually the result of the arrayed cell form for contact cuts.- July 29, 2004
Added PROPATTR and PROPVALUE records to GDS (thanks to Nishit Patel) that allows magic to record instance names and array information that is not otherwise possible to write and read back, such as cell use IDs and array indices that do not start at zero. Some more code cleanup thanks to Jason Schonberg, including removing a copy of the whole magic tarball that managed to get into the top directory, making the whole tarball twice as big. A few corrections for compilation on FreeBSD thanks to Chris Lafrieda at Cornell, and finally, the debugging definition for file locks has been removed and changed to a configuration option (normally disabled).- August 3, 2004
Added a "variants" extention to the cifinput, cifoutput, and extract sections of the techfile (see the Technology Files web page for details).
Also: Corrected a DRC error that causes certain rules (especially the "surround" rule) to effectively shadow other non-related rules.
Also: Corrected a small memory leak in the implementation of PROPATTR in the GDS output from revision 39.- August 4, 2004
Fixed another DRC problem which shows false DRC errors on stacked contact types because the checker routine fails to skip "false edges". Also: All MALLOC, CALLOC, and FREE macros replaced by their respective routines mallocMagic, callocMagic, and freeMagic. Thanks to Jason Schonberg for this patch.- August 5, 2004
Added capability to read non-Manhattan paths in the GDS input. This also corrects a problem with the original GDS path parser which would round off paths with a centerline on a half-integer boundary relative to the base GDS scale. This routine handles endcap specifications in the GDS (except for round endcaps). The endcap handling has been copied to the "wire segment" command, which may now take the switch "-noendcap" as its last argument.- August 6, 2004
Corrected revision 42, including a complete and correct implementation of input scaling in the GDS file. Also corrected the "gds flatten" function such that if the GDS file instances cells before they are defined, these cells will not be flattened. Thanks to Johannes Grad for help with the GDS read-in problems. The result is that magic-7.3.43 is compatible with GDS produced by various commercial place-and-route tools. Example layouts were produced using the IIT standard cell library.- August 10, 2004
Made an additional correction to revision 43 to avoid changing the GDS input multiplier scale while GDS is being read; otherwise, after a scale change, the remainder of the GDS file gets read at the wrong scale. Again, thanks to Johannes Grad for providing place-and-route examples demonstrating the error.- August 12, 2004
A critical fix to the GDS and CIF rescaling; the plane rescaling function was using the database paint table, not the CIF paint table, causing loss of data under certain conditions when reading GDS or CIF files. Also, fixed layout (.mag file) read-ins for labels attached to stacking types, which was not covered by the handling introduced in Revision 16 (see above).- August 17, 2004
Minor fixes and enhancements, especially for scripting procedures. "-origin" option added to the "rotate" command to rotate about the layout origin. Procedures "suspendall" and "resumeall" changed to allow nesting. "instance list self" now returns all selected instances, and that and "cellname list self" don't merge the output strings together into one glob. Procedure "pushstack" will attempt to select a cell if one is not already selected.- August 18, 2004
Important fix to cifinput/cifoutput rule handling: This was operating on ALL planes for each rule, so rules with contacts would apply the bloat procedure to both planes containing the contact, usually giving improper results. This almost always causes select layers (n-select, p-select) to come out wrong.- August 24, 2004
Fixes a simple but rather bad error in revision 47 which causes incorrect output for the "squares" function in CIF/GDS output.- August 28, 2004
Another fix to extraction of contacts which was failing on occasion to connect together nodes on either side of a contact, due to the new way that magic 7.3 handles contact images.- September 2, 2004
Revised the extraction mechanism for resistor devices to split the capacitance under the resistor, distribute it between the resistor end terminals, and then ignore the node in subsequent extract file output.Note that the feature has the consequence of reporting missing nodes when extracting a hierarchical circuit with resistors. This approach will be abandoned soon in favor of reporting the isolated node in the "devres" line in the extract file, and handling the capacitance distribution in "ext2spice" instead of in the extractor, with appropriate flags given to the "ext2spice" command.
- September 6, 2004
A large number of changes in this revision. Corrected a number of annoyances/errors, including:
- Strict file permissions given to ".mag" files arise from changes in the GNU database for function "mkstemp". This has been corrected by changing the file permissions to match the user's umask after renaming the file.
- Characters left-bracket, backslash, and double-quote can once again be typed to the command-line (console) from inside the layout window.
- "select net" may once again be followed by a move/copy/stretch command with the expected results. This fix also prevents the loss of the net selection after "undoing" these commands.
- "select net" now properly detects a connection through a stack of four or more contacts.
- Selection of non-manhattan geometry retains the geometry through move/copy/stretch functions. Previously, if the command caused the non-manhattan regions to be blended back into manhattan geometry, the manhattan geometry would get added to the selection, an unexpected result.
- Non-manhattan "splitpaint" and "spliterase" commands translate the orientation correctly when the target edit cell is rotated or flipped.
- DRC properly handles non-manhattan geometry checks between subcells. HOWEVER, I did replace a large chunk of magic's paint code because I could not find any justification for it. A possible consequence of this change might be spurious DRC errors. I should be notified immediately if anyone discovers quirky behavior in the DRC mechanism (but I have done basic sanity checks on this).
- September 7, 2004
A correction to the extraction code that fixes errors in resistor device extraction when the contact type is defined in the tech file such that the contact abuts to the resistor type.- September 8, 2004
As promised, replaced the Pi-network method for "device resistor" extraction with a Tee-network method that preserves all of the computed capacitance. Becauase this involves splitting the resistor into two parts, it plays havoc with LVS. Therefore, it is enabled or disabled with the command-line "ext2spice resistor tee on|off". This method is disabled by default.- September 17, 2004
A number of minor changes, most too trivial to mention. A change to nonmanhattan DRC checking made one or two revisions ago was deemed much too lenient, and changed back to the original (which was a bit too conservative, but better that way than the other).- October 19, 2004
A number of major changes. HTML documentation for the command reference added to the "doc/html" subdirectory (and also copied on this website). Command "findlabel" corrected (previously caused a program crash). Command option "gds contacts" added to allow contacts to be written to the output as arrayed subcells (as most EDA software does, these days) to greatly reduce the size of the resulting stream file. Command option "gds order" added to force post-order reading of data from a GDS file. This option is forced when using "gds flatten" because the contents of subcells must be known at the time of flattening. Corrected the use of the middle mouse button to pick and fill paint, and the "what" command, when multiple stacked contacts are involved.- October 25, 2004
Overhauled the "plot pnm" function so that it is almost foolproof; the new version configures default rendering styles without requiring a section in the technology file, so it is compatible with all existing technology files. Also, it can now work on very large chip layouts without running out of memory. Finally, it does true 24-bit color blends and a number of optimizations for speed.
Also: Added a script to pull the version and revision information from the directory name, and the startup code and the "version" command now print the revision information.
Also: Removed old and unused directories, and cleaned up the directory structure such that modules with only one source file to compile are merged into the "utils" directory.- October 29, 2004
Extended the method used for extracting annular transistors to cope with "device resistor" and "device capacitor". Also, fixed a bug in the method which was previously giving incorrect output for certain geometries of annular transistor.
Also: Added keyword "alias" to the "types" section of the technology file. This allows the declaration of macros representing multiple device types. These macros will be expanded when reading the technology file. With this addition, the magic technology file syntax is now able to handle everything that the preprocessors were used for, so there is no longer any need to write technology files requiring preprocessing. Fixed a bug in the handling of the "variant" keyword in the techfile extract, cifoutput, and cifinput sections.- November 1, 2004
Corrected the device merging code in ext2spice and ext2sim. This had been incorrectly merging (or not merging) devices due to not re-zeroing a counter in the command version (as opposed to the standalone version, which runs from the beginning every time). A few test cases suggests that the merging works properly now both for "conservative" and "aggressive" merging.- November 3, 2004
Fixed a couple of errors in the resistor extraction code from revision 58, and altered the algorithm so that the result is orientation-independent. Grieved over presidential election results.
Also: Added the capability to add include statements in the technology file to break up the technology file into pieces (some of which may be used by multiple technologies; this is done by the scmos techfiles but is a preprocessor option and does not make it to the final version).
Also: More code cleanup thanks to Jason Schonberg.- November 9, 2004
Overhauled the macro handler, to use hash tables instead of a linked list, and to operate separately on different window types. Removed the "gmacro" scripted command, as the overhaul removes the problem with calling multiple commands or Tcl procedures from inside macro definitions.
Also: Overhauled the event mechanism so that buttons are treated like keys and may be bound to commands like keys. Revised several commands (notably "box") to have the command options that can mimic the button operations. Currently, the "netlist tool" is nonfunctional because there is no command-line equivalent of the button actions. This will be corrected shortly. If you need the netlist tool, use revision 59.- November 10, 2004
Finished the overhaul of the event mechanism to include the "netlist tool" functions and also the 3D window functions. Fixed and enhanced the "render" procedure for the 3D window with a GUI wrapper. Fixed a bug in the 3D window background clearing, and another bug in the MacroRetrieve procedure call. Thanks to Nishit Patel for most of the command, procedure, and macro enhancements and rewriting for the new button event mechanism.
Also: The title bar of the GUI layout window now reports the tool in use.- November 15, 2004
Went back and attempted a non-Tcl compile, and corrected all the errors that cropped up. It is now possible to compile and run without the Tcl interpreter.- November 16, 2004
Corrected the .dstyle file format loading backward compatibility to versions earlier than 7. Also, lifted the limit on the number of stipples that can be in the style file.
Also: Fixed the non-GUI scrollbar in the Tcl version; fixed the system .magic file creation for the SCHEME interpreter version.- December 3, 2004
Added the ability to handle Button4 and Button5 button bindings, which correspond (in Linux, at least) to mouse scroll wheel events.- December 7, 2004
Corrected two segfaulting errors, one related to non-Manhattan geometry, and the other related to confusion of the "join" command between Tcl and the netlist window, since the command handling for non-layout windows was changed.- Februrary 1, 2005
Return-value declaration fixes by Jason Schonberg. Fix to the GUI scrollbar for cases in which lambda units are larger than internal units. Fix to the new "include" statement in techfiles that checks the directory where the parent tech file is located. Added (preliminary) handling of contact cuts inside triangular areas (this feature does not extend to the "contact subcells" option for GDS output).
Also: Changed the "alias" name handling so that names declared as aliases in the technology file can be both loaded from .mag files or painted and erased on the layout (see the Technology Files web page).- Februrary 23, 2005
Corrected an error in the CIF/GDS generation, in which contacts could not be placed on a 1/2 centimicron grid if the lambda value is odd (e.g., scalefactor 9 for a 0.18 process), resulting in off-center contacts and illegal layout where contacts in neighboring cells overlap.
Also: Added a few styles to the pattern style files.- March 7, 2005
Rewrote the "maxwidth" rule algorithm from scratch, such that it actually now works correctly under all conditions. By integrating the new maxwidth algorithm into the "widespacing" rule, that one now works correctly, as well. This is bigger news than can be expressed in a release note.
Also: Corrected the "version" and "revision" scripts so that they work correctly when the magic directory is symbolically linked (which it is in the CVS version on opencircuitdesign.com).- March 8, 2005
Added so-called "wizard" commands "drc *halo" and "drc *stepsize". These allow control over the DRC halo and stepsize distances. The latter can be specified in the technology file, but having on the command line lets one easily optimize the value to keep the DRC computations to a minimum. The halo is normally set to the largest dimension in a DRC rule, to ensure that all rules are checked when processing arrays and subcells. Unfortunately, pad rules, maxwidth, and widespacing rules are so large that they can slow the DRC computations down to a crawl. With the new command option, the halo distance can be forced down to a value that keeps magic running at a reasonable clip, while missing some of the rule checks (naturally, at some point, one would want to set the halo back to the original value and run a full DRC check on a design). This is a stop-gap measure; I intend to investigate what can be done to properly deal with the problem.
Also: Revised the algorithm from revision 68 (see above) for greater speed.- March 14, 2005
Final modifications to the routine implemented above; removes cryptic and unsettling messages about "out of memory for maxwidth rule" or somesuch.- March 16, 2005
Added two new commands:
(1) polygon type x1 y1 x2 y2...
Generates a polygon from the indicated point pairs.
(2) *bypass command...
Bypasses any redirection to the terminal that is currently in effect. Revision 60 broke the behavior that button commands can be executed while a command is halfway typed in on the command line (via the ":" macro). By mapping button commands to the *bypass command, this behavior has been reinstated. I often make use of this feature.- March 22, 2005
Added new CIF boolean operator "bloat-all <types1> <types2>". This operator includes all material of types types1, then finds all bordering material of types types2, to the extent of connectivity (simple connectivity, on one plane only).- March 31, 2005
Fixed a bad error with triggered (e.g., "widespacing") rules. A triggered rule followed by a rule for the same layers with a larger distance value can cause a segmentation fault.
Also: Reinstated the "Makefile.in" for the readline-4.3 directory, which was inadvertently deleted by CVS.- April 2, 2005
Fixed an error with the new maxwidth rule, which would cause spurious error reports where no errors existed.
Also: Added a new CIF boolean operator "bbox [top]" that generates a rectangle encompassing the bounding box of the cell. If the optional keyword "top" is present, the bounding box is created in only the topmost cell.
Also: Patches from Jason Schonberg. Mostly prototypes and include statements, and one correction of a potential string boundary underrun.- April 4, 2005
Major revisions to the graphics. Backing store implemented for caching the graphics image between the layout drawing and the highlight drawing, restoring the quick response previously enjoyed by the 8-bit graphics implementation. Extended this method to handle automatic refresh of layout areas during screen scrolling. The result is blazingly fast graphics for anything other than a full screen redraw (will have to work on that later).
Also: Fixed a few other graphics anomalies in the process, including the problem of hacked-up contact crosses, and an unnecessary redraw that was being done in the areas that would be scrollbars in the non-wrapper version.
Also: Modified tkcon.tcl to accept the environment variable MAGIC_WISH preferentially to the default value of "wish". This can be used to prevent the situation where magic is compiled for one version of wish but tkcon is starting up with another one, preventing magic from running.
Caveat: The present revision has a few quirks, the main one being that I have not dealt with border areas in the backing store implementation, so the redrawing is incorrect when magic is run without the "-w" option (which would be always, for the non-Tcl compiled version).- April 5, 2005
Updates to revision 75: The backing store mechanism now correctly handles border areas, and operates in both the Tcl and non-Tcl based versions of magic (both for OpenGL and standard X11 graphics).
Also: Extended the backing store mechanism to handle expose events from the graphics, so the layout does not need to be redrawn when the window is moved or raised from behind another window. This is particularly noticeable when multiple expose events are generated, such as when another window is dragged across the top of the layout window.
Also: Corrected two errors with the non-Tcl compile: One of them prevents successful compilation the first time around because a symbolic link to the readline package is not created until after it is needed by commands/CmdFI.c. The other error is the sudden dysfunction of the pthread_join() routine in the threaded graphics code, which used to work but now causes magic to hang upon exit. The behavior is most likely dependent on the version of the pthreads library used, and may be system-dependent.- April 6, 2005
A few more updates to the graphics speedups: The backing-store refresh for highlight erases was moved to the proper place, and some attempt was made to synchronize the X11 and OpenGL calls before/after backing-store operations.
Also: Added text clipping to the cell bounding box for the OpenGL graphics using glScissors(), something that was previously unimplemented.
Most of the peculiarities of the backing-store system have been eliminated except for two: 1) Scrolling needs to be adjusted to match the 8-bit stipple pitch, and 2) Areas obscured by other windows need to be tracked so that the backing store mechanism does not attempt to write into, and then recover from, an invalid window area. As it is now, placing the magic layout window halfway off the screen and then scrolling the layout view causes the window to get all screwed up. Requires catching and handling Expose and NoExpose events, and keeping an extra plane per window mapping these areas.- April 7, 2005
And, as predicted and promised, yet more updates to the graphics: Fixed the scrolling to match stipple alignment, and fixed the area saved to backing store, which was too large and sometimes saved slivers of highlights into backing store.- April 11, 2005
Added the capability to track VisibilityChange events in X11, so the backing store mechanism won't allow a copy from an obscured window into backing store.
Also: Major additions to the selection mechanism. Added command options select pick, select move, and select keep. These commands manipulate the selection without clearing the selection at the end of the opration, allowing "drag and drop" operations. To this end, the Tcl version adds the "pick tool" to the list of available tools.
Also: Other minor bug fixes, including replacing Makefiles in the readline subdirectories, such that readline actually compiles again.- April 12, 2005
Corrected an error introduced into the selection highlight redraw code in the previous revision. Corrected a few errors in the interactive selection code. Removed the "tool" command from the Tcl version and switched the "changetool" script to "tool" to replace it. Created command option "cursor" to set the tool cursor (previously done by the "tool" command). Added a new cursor for the "pick" tool, and worked out more of the button and motion bindings for "pick". - April 14, 2005
Added a slots operator into the cifoutput code, similar to squares but allowing different sizes in tile long and short dimensions. This is somewhat experimental at the moment, but gets around certain problems in generating specific vendor geometries.- April 15, 2005
Added a crosshair cursor, and interactive wiring. The crosshair cursor uses the new command crosshair, and the interactive wiring uses the new command option wire show, which does the same thing as wire leg but puts the result in the selection cell, so that it can be displayed prior to committing to the wire route. The two new features together make precision wiring much easier and faster than before. In the Tcl/Tk GUI wrapper, the crosshair can be turned on and off from the "Options" menu, and the interactive wiring and selection have been added to the "wire" and "pick" tools, respectively.
Also: The use of GL_LINE_SMOOTH in OpenGl has been reworked to operate only on lines that are not orthogonal to the axes (mostly contact X's). Otherwise, the operator tends to draw lines double-wide (at least in certain video driver implementations).- April 16, 2005
Repaired a few errors in the interactive selection and wiring mechanims. Interactive selection now tracks the coordinates relative to the starting position and properly translates from edit cell to root cell coordinates. The interactive wiring does not register uncommitted routes with the "undo" mechanism.
Also: Added new command options wire incr|decr width|type for automatically bouncing up and down routing layers. In the Tcl/Tk version of the "wire" tool, the bindings are as follows:The wire incr|decr type command takes the further step of picking the wire width for the next routing type from the DRC minimum width rules. To be done: Add a mechanism for enforcing design rules based on DRC spacing and width (need to ensure that DRCGetDefaultSpacing() works properly. . .).
- Button4 (scroll wheel): wire incr width
- Button5 (scroll wheel): wire decr width
- Shift-Button1 wire incr type
- Shift-Button3 wire decr type
- May 11, 2005
Fixed an error in the GDS read-in routine which causes it to ignore most boundary records. Thanks to Erwin Prinz for pointing out this error.
Also: Patches from Jason to fix a crash situation when an attempt is made to open the 3D window without starting magic in OpenGL graphics mode, and addition of missing include files.
Also: Fixed a problem with handling cell names containing a dollar sign character, allowing magic to import/export Cadence pcells verbatim using the "gds readonly" option.
Also: Fixed some problems arising from using the "tool" command (now script procedure) when not also using the GUI wrapper. Thanks to Mark Martin for pointing out this error.- May 11, 2005
Fixed an error causing a crash when "gds rescale false" is used and snapping causes triangular areas to become degenerate. Also added "cellname lock|unlock" command option and "cellname flags" command option. Disabled DRC checks on read-only GDS cells.- May 16, 2005
Corrected a problem with inter-cell CIF/GDS generation on vendor (read-only) GDS cells. Unfortunately, the root of the problem seems to be the plane fracturing algorithm, so this fix only bypasses the error. However, it is certainly true that magic should not generate any output based on the "fake" geometry in the .mag file corresponding to the vendor GDS file.- May 31, 2005
Some minor script-level corrections. Added "*bypass" to interactive commands to prevent them from resetting the keyboard redirection to the console. Changed the name of the options file from ".magic" to ".magicrc", with the ".magicrc" file being searched first, followed by ".magic" if not found. The system-level options file was changed to ".magicrc". Also: processing the system-level ".magicrc" file in the Tcl version is now wrapped in "suspendout" and "resumeout", preventing Tcl commands in the file from being echoed to the console. Commands "set VDD vdd!" and "set GND gnd!" have been put into the system-level file to prevent the extractor from complaining that they are not set.- June 1, 2005
Corrected an error that prevented the "alias" techfile keyword from working correctly.- June 3, 2005
Corrected an error, discovered and reported by Wei Zhang at Princeton, in which the "extract length" function fails. There were two errors here, one of which was the failure of DBTreeCopyConnect to generate all images of a contact, and must impact some of the other connectivity search routines as well.- June 28, 2005
Corrected one error, added one extension, and adjusted one "feature". The error, reported by Mark Martin, was that the backing-store mechanism fails on non-layout windows, causing magic to crash if any non-layout window is opened. The extension is the addition of handling non-unity magnification in GDS input files (it only handles integer magnifications, but clearly this is a huge improvement over treating all magnifications as equal to one). The feature was the behavior that closing the console window exits the application abrubtly. I modified the behavior so that closing the console window calls magic's quit routine, prompting the user to acknowledge that modified files have not been saved.- July 17, 2005
Reworked some of the DRC code. The "drc find" command now searches the hierarchy, not just the current cell, so it does not miss errors that are in descendents of the current cell. To "drc count" I have added an option "drc count total" that reports total number of errors in the layout. This is used by a new GUI function in the wrapper that reports DRC clean/not clean/busy.- July 19, 2005
Corrected an overflow condition that causes non-Manhattan geometry to disappear at far-out scales on large layouts. Because the problem was in the primary search routines, this fix probably applies to more than just the layout rendering. Thanks to Mike Godfrey for the bug report. Also: Corrected another overflow problem at close-in scales, reported by Mark Martin. This problem only affected layout rendering, not the internal database.- July 24, 2005
Quick fix to a segmentation fault error discovered by Jason Schonberg; when a netlist window is closed from the window manager, the next call to "setpoint" is passed a NULL magWindow pointer.- August 12, 2005
Added options to the "flatten" command: "-nolabels" to avoid copying labels, "-nosubcircuit", and "-novendor" to avoid flattening certain types of subcells. Modified the "def write" command to correct several errors, including a few fatal ones.- August 14, 2005
One more serious correction to the "def write" command, an error in the algorithm that generates the wrong coordinate at the beginning of a line (overshoots the position by one endcap length). Also corrected several integer overflow problems with GDS read-in of non-Manhattan geometry. Thanks to Mike Godfrey for providing examples.- August 15, 2005
Corrected a problem with display refreshes when an obscuring window is present, also reported by Mike Godfrey. Also corrected a problem with input redirection (":" command) being ignored while DRC is running, and a serious error caused by revision 94 changes in which all sorts of things get screwed up due to a change in the interpretation of the expansion mask (i.e., revisions 94 and 95 are essentially unusable).- August 15, 2005
Additions and corrections to the LEF and DEF reading and writing code. The tech file format has been extended from the simple "layer" and "obs" keywords to include the class-defining keywords "masterslice", "routing", "cut", and "overlap", defining the LEF types of the same names. The syntax is the same, and "layer" is retained for backwards compatibility ("layer" indicates either "routing" or "cut", depending on the magic type). LEF-format output now includes layer information, and macro pins define port geometry (which was a potentially fatal bug as previously coded).- August 16, 2005
Some minor code corrections. Corrected a problem where coordinate position updates could produce a Tcl error due to some race condition with the Tk window becoming valid. Also corrected the problem with the crosshair failing to erase itself after loading a new cell.- August 20, 2005
Important corrections to the LEF/DEF reading and writing. Doing "def write" more than once now produces the same output each time. Extensions on special nets now zero by default. Via cut arrays now written out with "def write". Other changes and corrections.- September 16, 2005
Addition of GDS techfile extentions: 1) Use of the word "angstroms" in addition to "nanometers" in the scalefactor line, and 2) The phrase "units angstroms", which sets the fundamental GDS database unit to 1 angstrom rather than 1 nanometer. This becomes increasingly necessary for processes like 90 or 65 nanometers where a quarter or half lambda is, e.g., 2.5 nanometers, where the 0.5 part requires dimensions in angstroms.- September 16, 2005
Changed the "gds readonly" method so that it ignores the structure header and structure name for the specified input cell. Then, if the magic cell is renamed, the GDS cell gets renamed accordingly. This is necessary for the intended use of the method to handle Cadence pcells, since Cadence will write the same structure name in different GDS files.
Also: Changed the "writeall" command to take the syntax "writeall force cell1 cell2 ...". This forces only the named cells to be written to disk, and skips all other cells.- September 20, 2005
Fixed an error that prevented execution of the command option "select top cell".- September 27, 2005
Corrected an error with an uninitialized tiletype mask that would produce garbage output for "def write" on some machines. Also, made "-w" (GUI wrapper) the default on startup, with "-nowrapper" ("-now" for short) required to get the non-GUI version.- September 28, 2005
Added a useful new command "contact type" that generates a contact at the intersection of the two residue types of the contact.
Also: Modified some code to avoid calculating DRC for cases like "erase label" where paint is not modified, and an incorrect case where clearing the selection cell would trigger a DRC check.
Also: Corrected DEF file input to compute subcell bounding boxes before attempting to place components. Otherwise, components not located at the origin get offset in position.- September 30, 2005
Bug fixes: Commands "move", "stretch", and "copy" now use lambda, rather than internal, units by default when a direction is specified but not a distance (e.g., "move left", which implies "move left 1").
Also: Correction to DEF file reads to avoid segmentation faults when a cell is not defined, and correction to DEF file writes to avoid writing route layer as "space" when the first tile encountered is a contact type.- October 2, 2005
Finally got around to ensuring correct extraction of non-Manhattan devices (transistors, capacitors, resistors). However, there remain two problems: 1) Any device made of all split tiles can result in a completely screwed up .ext file (which seems unlikely but could happen in the case of a device drawn at a 45 degree angle), and 2) capacitors that are not modeled will have an incorrect parasitic capacitance from the node to ground. Modeled devices will (presumably) model the capacitance from the bottom plate to the substrate node, but unmodeled devices need to have the device type (top plate) area added to the area of the bottom plate type when computing parasitic (or coupling) capacitance.- October 14, 2005
Changed behavior of the DEF writing routine to handle overlapping stacked via types more-or-less correctly. The algorithm now works properly but assumes retangular areas for the vias. The whole thing needs to be rewritten to make use of the GDS output routines.- October 26, 2005
Corrected an error in the extraction routine from revision 106 that results in incorrect plane numbers and can cause magic to crash on the "getnode" command. Also added non-Manhattan geometry handling to the "getnode" routines (the lack of which can also cause a crash on the "getnode" command).- November 21, 2005
Corrected "extresis" to work with the stacked contact method. Thanks to Vijaya Kirti for pointing out this problem and providing an example layout.- November 22, 2005
Added an extension to "feedback add". If the command is followed by any number of points (X Y pairs), the feedback entry will be a polygon formed by the point pairs. Argument "style" must be given in this case. As special cases, a point or a line will always use style "outline" regardless of the style argument. Both non-manhattan geometry and non-integer internal units (such as nanometer units) are handled properly.
Also: extended "feedback clear" to include "feedback clear", which will clear all feedback entries containing a specific text substring. This allows, for example, the use of "feed clear CCA" to implement, in effect, the opposite of "cif see CCA".
Also: corrected "wire segment" so that centerline point pairs given in non-lambda units are parsed correctly.- November 23, 2005
Revised "feedback add" to accept argument "style" as always optional, and to accept all styles from the ".dstyle" file as valid feedback styles. Also tweaked some constants (INFINITY and FEEDMAGNIFY) to keep feedback entries in nanometers (e.g., DRC errors parsed from Calibre output) from overflowing integer bounds. Also modified the feedback code to optimize both memory and computation time, especially for long lists of feedback entries.
Also: extended the "gds polygon subcells" option to include GDS wire path structures.- November 25, 2005
Upon the revelation of Malvin Wong that magic starts behaving badly when more than 32 planes are defined, I changed the use of "int" for plane masks to a typedef'd "PlaneMask" type, which is set to "dlong" (double long, 64 bits) when MAXPLANES is > 32.
Also: fixed an error from revision 111, and changed "cif see" behavior to use styles from "render" lines in the tech "cifoutput" section, if defined (otherwise, behavior is as it has always been). Allows one to see mutiple cif layers with "cif see".- November 30, 2005
Corrected the inevitable errors with the changes of revision 112; thanks once again to Malvin Wong for bug reporting and providing test cases.- November 30, 2005
Added a very important fix to the CIF/GDS output routine. Previously, magic would report a warning when arrayed subcells were small and closely spaced to the effect that output might be incorrect. The array interaction routine has been modified so that this cannot happen. Array interactions are made faster than simple subcell interactions by computing the interactions only between the first two cells in the array, then copying the paint to the end of the array. An error in CIF/GDS output occurs when the area of expansion needed to check for all interactions between the first two cells is larger than the cell width or height itself, so that paint can be generated for interactions between the 2nd and 3rd (or higher) cells in the array. When this is copied up to the end, some of the paint can end up well above the array. The solution is to reduce the array to at most 2x2, compute the interaction, restore the array size, and then copy the interaction area.- December 1, 2005
Added separate executable "magicdnull", similar to "magicexec" except that it does not invoke the Tk package (links to Tcl_Main() instead of Tk_Main()). This allows magic to run faster/more efficiently in batch mode when called with "magic -noc -dnull". Also: Changed behavior of command "windownames" so that 1) it is available in the non-Tcl version, and 2) it returns a list of window IDs when the graphics package does not define a routine to provide a window name. This ID can be used by the "setpoint" command to access a specific window (i.e., internal window structure) when using NULL graphics.
Also: Included a fix for a problem reported by Eric Wong (thanks for the test case) in which magic hangs when searching for connectivity on a network passing through a stacked contact that is split between overlapping cells.- December 7, 2005
Revised the method magic uses for crash backups. Previously, magic would write ".save.mag" files for modified, unsaved cells upon the limited condition of receiving a SIGTERM signal. I have modified this so that magic 1) saves all cells into a single file in the /tmp directory, 2) saves and recovers such files in response to a (new) command "crash save" or "crash recover", and 3) automatically recovers the most recent crash file found when invoked on the command line as "magic -r". It also retains the behavior of writing a backup file upon receiving SIGTERM. The Tcl/Tk version contains a script which uses the sytem timer to generate a backup file every 10 minutes by default, or every $Ops(backupinterval) milliseconds. Backup files are removed upon normal execution of "quit" but are retained under all other exit conditions. Backup files are also removed after successful recovery. The implementation is very similar to what I implemented for xcircuit.
Also: Made one minor change to fix the non-Tcl compile, and checked the non-Tcl compilation for correctness.- December 13, 2005
Corrected a bad error with the CIF array generation function in 114 due to a typo in the code. The array generation code still needs to be checked rigorously for correct operation.- January 8, 2006
Corrected an error in drawing non-Manhattan feedback areas, which clipped the tile area incorrectly, causing the diagonal to be drawn at the wrong angle.- January 20, 2006
Re-implemented file locking for about the fifth or sixth time. Uses Stefan Jones' implementation with fcntl() calls to generate advisory locks (works with NFS-mounted files). Because this version of file locking doesn't create extra files and directories, I have set the file-locking behavior to be compiled in by default.
Also: Corrected the crash backup mechanism so that "magic -r" ignores any backup files belonging to an active process.
Also: Corrected the configure script, which since revision 113 may refuse to compile in X11 on systems which have a linker that automatically links X11 with no special compiler flags. Thanks to Alan Davis for bringing this bug to my attention.- January 24, 2006
A few changes to the CIF file read routines to allow magic to read the "CIF torture test" without crashing (it does not pass with flying colors, but most of it is correct).- January 25, 2006
Finished basic changes needed to make magic pass the "CIF torture test" except for certain current impossibilities such as non-90-degree rotated cells. I won't reveal what horrible hack I did to make the "famous DD bug" go away---fortunately no program ever writes a "DD" record, so I'll probably get away with it (after all, nobody complained that magic didn't handle the DD record for 20 years, so who's going to complain that it is not handled precisely according to spec now?).
Also: For Fedora Core 4 compliance (mostly to work around problems with gcc), I have changed the "make depend" process to list only local header file dependencies. Also I have modified the top-level configure script (which calls the real configure script) to set the CFLAGS variable without the optimization flag. Thanks to Michael Godfrey for help with the FC4 compilation issues. No thanks to the developers of gcc, who haven't produced a decent version of the compiler since 2.95.- January 29, 2006
Corrected an error with the CIF/GDS array interaction generation code changed in revision 117. If there are no interactions, the routine can exit before restoring the array bounds, causing arrays to be reduced to two elements in the layout. . . an unexpected and unwanted change! Thanks to Eric Liu Wong for reporting this error and sending a test case.- February 9, 2006
Tracked down a subtle bug in which non-Manhattan tiles caused the paint routine to violate the "maximum horizontal stripes" rule, leading to a possible infinite loop when writing CIF/GDS output (corrupting the tile plane database and potentially producing hangs and/or crashes on any number of tile manipulation functions.
Also: Changes from Philippe Pouliquen to prevent problems with the graphics backing store mechanism in conjunction with 8-bit mode, and other changes to ensure proper compilation under NetBSD.
Note: This revision was originally posted on February 8, but one typo was found in the code, fixed, and the distribution re-posted.
- Original (prior to adding revision information); last updated August 29, 2002. Changed the "make" method from "make wrapper" and "make install-wrapper" to "make tcl" and "make install-tcl" both to reflect the fact that SWIG is no longer used, and to make it more syntactically compatible with "tclspice".
- Fixed conflicting routines in "exttospice" and "exttosim"; "exttosim" can be run without crashing the program. Extraction output now redirects to the console output, not the terminal output.
- More "exttospice" and "exttosim" fixes: Both programs now free memory like they're supposed to. In addition, both commands can be run from inside a window and automatically operate on the root cell of the layout in that window.
- Extensions to the "magic wrapper" GUI ("magic -w"):
There is now a toolbar on the right-hand side of the layout window, showing all of the layers known to the tech file. Each one is a button. Clicking mouse button 1 paints that layer into the box in the layout. Clicking mouse button 3 hides the layer, and clicking mouse button 2 restores visibility of the layer. The name of the layer appears in the title bar of the layout. Also, the box coordinates are shown in the title bar. For people who use magic in 8-bit PseudoColor mode, the console window is repainted in magic colormap colors, so there is no more color switching between the layout and the console.- Important repairs to the CIF reading/writing and internal grid rescaling code---affects the ability of magic to read CIF/GDS in a different lambda scale from the scale at which it was written. Also, non-Manhattan geometry has finally been incorporated into the extresis code.
- Minor revisions thanks to Conrad Ziesler implementing the grid scaling code in the wiring and router sections, and a fix to some segmentation-faulting behavior, also in the router section. Fixed up behavior of the wrapper in all modes, including OpenGL and overlay planes. Unfortunately, it's my X server that fails on some of these mode combinations, not the magic code. The XFree86 server operates as intended, although it does not implement overlay planes.
- Added a menubar to the wrapper GUI. This includes file read/write functions, and a "cell hierarchy manager" that provides a tree-based view of cell definitions. New code changes allow magic to operate in a slave interpreter (specifically, as a slave interpreter in the TkCon console version). Changed magic command names to avoid conflicts with Tcl/Tk commands. Replaced the "list", "listall", "listtop", "parent", and "children" commands with an extended and more general method using two (new) commands "cellname" and "instance" (these are required by the cell hierarchy manager widget).
- Finished the basic GUI, including a working "cell manager" and "tech manager". Added general method for callbacks "magic::tag
" which replaces the previous method for handling captions and scrollbars, and allows syncronizing the GUI with command-line commands. Added new magic command "techinfo" to return several variables related to the loaded tech file. Added option "childinst" to the "cellname" command, which enables reporting the child instances of top-level cells, which are otherwise unavailable due to the fact that top-level instances are always named "Topmost cell in the window" and cannot be selected or searched by name. Added options "list" and "listall" to the three commands "cif istyle", "cif ostyle", and "extract style", so that the current style and available styles can be queried from the command line and returned as a Tcl result. Added "label", "subcell", and "error" layers to the toolbar. Added keystroke commands to the toolbar: "p" for "paint" and "e" for "erase". Switched mouse button functions so that button 1 = "see", button 2 = "paint", and button 3 = "see no" (hide layer). This matches the button 2 function in the tool bar to the function in the layout window, and works better for 2-button mice. - Added command "element" for annotations on the magic layout window. Presently, this is somewhat primitive. Commands are:
The name is a unique name given to each element so it can be registered and searched in a hash table. The style is the name of a magic style which must match the name from the .dstyle5 file (it can also be the number of the style, 0 through 255).
- element add rect name style llx lly urx ury
- element add line name style x1 y1 x2 y2
- element add text name style x y text
- element delete name
Also: Extended keystroke commands on the toolbar with: "s" for "select more area layer" and "S" for "select less area layer".
Also: Changed the "make" process so "make clean" descends into all modules, not just the ones selected by "make config".- November 18, 2002
Quick fixes on the tag mechanism (magic commands called from a command tag should not increment the sequence of command numbers, or else the "select" mechanism doesn't work right), and corrected the #ifdef statements in the proto.magic file so that interactive macros "p" and "l" (paint and label, respectively) are defined under the Tcl version.- November 19, 2002
Quick patch to revision 10, which crashes on any call to "select" with more than two arguments.- November 25, 2002
Completed the (initial version of the) tag mechanism, mainly with the option "element configure" which allows element positions to be changed, text to be altered, and styles to be added or removed.
Also: Added line antialiasing to the OpenGL version.
Also: Changed the outline rendering to do true outlines of layers rather than outline each tile. This allows, for example, nonmanhattan pads to be drawn without highlighting the entire internal tile structure.
Also: Changed the "techinfo" command (see above) to "tech info" and added a "tech load" command for real-time loading of the technology. This can be used to develop and reload debugged/extended versions of the same tech file, or to load an entirely new technology. This is still under development, is inherently dangerous, and can crash the whole program.- December 2, 2002
Completed the "tech load" command so that it does not complain or crash the program, although existing layout may be invalidated if the number of planes changes.
Also: Extended the "image create layer" method under Tk with the ability to drop entire layouts into Tk images. The syntax is "image create layer-name -width -height ", where "window_name" is the Tk path of an existing layout window. The existing window will be deleted when the image is instantiated. - December 9, 2002
Completed a reasonable first draft of the interactive IRSIM simulator under magic. This corresponds to IRSIM 9.6 Revision 1. Both programs must be compiled and installed for this method to work properly.- December 11, 2002
Added Mac OS X support (thanks to Michael Doster). Changed the "layers" command to "tech layers", with "tech layers *" vs. "tech layers" differentiating between the version which returns a Tcl list of all canonical names and the one that prints all names and aliases, respectively. Started a skeleton program for the techfile builder wizard, added a minimal-size techfile ("minimum.tech27"), and debugged the operation of magic under the minimum techfile.- December 12, 2002
Correction to scmos/Makefile which deletes "minimum.tech27" in rev. 15 and thus halts the make install process.- December 16, 2002
Minor corrections for OS X support when not compiling with Tcl/Tk support (again, thanks to Michael Doster).- December 17, 2002
Changed the tech initialization routine to use memcpy() and memset(). This takes a couple seconds off of startup when magic is compiled without optimization (which is the default for magic 7.2, as long as it remains in alpha status).- December 23, 2002
Finally changed the way tech styles are handled so that magic can take more than 64 layout styles, and is not dependent on the ordinal numbering in the styles file. Styles may be called out by name as well as number in the "styles" section of the technology file. Modified the OpenGL dstyle file to take advantage of the new system.
Also: Removed a lot of old cruft from the distribution, including AED and X10 graphics packages, the "mpack" command, magic's built-in malloc() routine, and the VAX-only executable image "freeze" and "thaw".
Also: Did a test with the "plow" section in which the feature is modularized under Tcl, is not loaded on startup, but auto-loads the first time the feature is requested (by executing the "plow" or "straighten" command). The plan is to extend the modularization to the "plot" and "route" sections.- January 6, 2003
Fixes to the extresis geometry extraction and subcircuit boundary handling. Fixed modularization for the "plow" option and extended modularization to the "plot" and "route" options.- January 7, 2003
Due to an error, revision 21 was exactly the same as revision 20.- January 8, 2003
Quick fix to the install process, which was missing the glyph files in the graphics subdirectory. Thanks to Tim Chuang for reporting this error.- January 20, 2003
Added a window console option, although the implementation is only partial.- Feburary 10, 2003
Rewrote the graphics routines to find display depth during display initialization. This corrects an error left around since the display style file format was changed. As a result, it is no longer necessary to declare the display depth in the display style file. This is fortunate, since which style file is read depends on the display depth! I have tested Tcl and non-Tcl versions in X11 and OpenGL at display depths of 8, 16, and 24, and everything appears to work correctly. Also, fixed the colormap repainting of the Tk console in 8-bit pseudocolor mode, which was broken since I switched to a master/slave interpreter configuration with the console.- February 19, 2003
Reincorporated the 3D graphics from the 3D version into the main distribution as a "specialopen" type window. The interface remains somewhat crude, but the command "specialopen wind3d" will bring up an OpenGL 3D window, and various keys manipulate the view: the top keyboard row (numeric keys '1' through '0', minus ('-'), and equal('=')) manipulate the viewing' angle. Keys 'Z' and 'z' zoom out and in, respectively. Keys '>' and '<' change the relative z-axis (height) scaling. Arrow keys reposition the view (albeit relative to the original, top-down view).- February 24, 2003
Extraction changes: Tech file now takes keywords "device" which takes the place of the "fet" keyword (although that is kept for backward compatibility). Device names are: "mosfet", "bjt", "capacitor", "resistor", and "subcircuit". In particular, the non-FET devices output relevant information to the .ext file, including total capacitance for type "capacitor" and total resistance for type "resistor". "device mosfet" differs from "fet" in that values for gate length and width are written to the .ext file instead of area and perimeter. While the current code keeps the simplistic relationship between area and perimeter and length and width, technically this change allows a more sophisticated extraction implementation which would correctly handle non-standard devices such as annular FETs.
Enhancements to 3D graphics: Key "C" will toggle between magic layout and CIF layout views.
Layout window client command "cursor" added which returns the instantaneous value of the pointer in magic coordinates.- February 26, 2003
Minor bug fixes to non-Tcl compilation; "config" script changes for Solaris support, and "config" script support for Tcl/Tk in non-standard directories, especially for Mac OS X support.
- March 4, 2003
Repaired all the problems with Mac OS X support for the Tcl/Tk-based version, and a couple of other glitches associated with "make config" in Revision 27.
Also: Removed all format version numbers from magic's system files: .dstyle6 becomes .dstyle, .cmap1 becomes .cmap, and .tech27 becomes .tech. Each of these files except cmap (which has only ever had one format) takes a keyword "version" with the version number, internally. Future versions of magic should read the format version inside the file and adjust the read routine to match the format. Current format ".tech27" is tried as alternative name if a ".tech" file cannot be found, because there are so many ".tech27" files in existance which do not belong to the magic distribution.- March 10, 2003
Major changes to the "make config" file for support of Tcl/Tk in non-standard directories; hopefully this version is compatible with Cygwin, Solaris, and Mac OS X, although a lot of configurations are untested and it may take some feedback before everything is working reasonably well. Part of the make process changes includes having the linker export only required symbols (procedure names and global variables) to avoid conflicts with other dynamically-loaded object files.
Also: Commands "exttospice" and "exttosim" have been changed so that they are recognized by magic as built-in commands (that is, they have an entry in the command table and show up in the "help" list).- March 12, 2003
Removed "plow" from the list of module choices (or any choices) because the plow section of the tech file is used by the "stretch" command. Lack of the plow module changes magic's behavior, so it should always be installed.
Also: Reinstated the "-namespace-flat" and "-suppress undefined" switches for Mac OS X, because the use of the version script apparently makes it necessary.- March 23, 2003
Finally implemented an apparently-correct procedure for handling overloaded commands. Commands "array", "load", "flush", and "label" have been reverted back to their original forms. "clockwise" can be used as "clock" without generating an error. "grid" remains renamed to "gridspace".
Also: Attempted a fix to user-input function TxGetLinePfix(), but so far this is still broken (it works from the command line, but not internally).
Also: Fixed the "goto" command so that it works on internally-named nodes (it was never updated when the way internal node names are generated was changed).- March 26, 2003
Fixed some errors in the new "device *" extraction method (old "fet" record was not backwardly compatible as it was supposed to be, and the "device bjt" order of arguments was incorrect).
Also: Added a method to subcircuit extraction in which labels can be suffixed with "#n", where "n" is the order in which the port should be written to the subcircuit record in the SPICE output. This allows ports to be specified to match a pre-existing SPICE subcircuit, rather than forcing the user to make the subcircuit match the SPICE output from Magic.
Also: Fixed a string allocation error in the Tk/TOGL graphics routines which would cause occasional fatal crashes.
Also: Fixed some errors in the CIF/GDS read routine to prevent arithmetic overflow. This repairs some, but not all, cases.
Also: Fixed the previous fix for the Mac OS X compile. Thanks to John Geisz for helping with the Mac OS X compile and install problems.- March 31, 2003
Extensions to the "box" and "array" commands. Both commands now take numerous options. Do "box help" and "array help" for a complete list of options.
Also: Reinstated the original "grid" command (instead of the rewritten "gridspace" command). Also: Wrote in a lot of application interoperability code (scripted). Other applications are invoked on the Tcl command line as they would from the shell command-line. For instance, invoking IRSIM is now done by typing "irsim" at the Tcl prompt, not "startirsim". All applications accept their usual command-line arguments.
Also: More changes for Mac OS X compile and compatibility. Possible problems have been seen with recent OS X revisions which have apparently enabled 8-bit overlays, but may have different values for reserved portions of the colormap. A temporary fix is to set the shell environment variable "MAGIC_COLOR" to "24bit" to force 24-bit mode, or to set "X_COLORMAP_BASE" and "X_COLORMAP_RESERVED" appropriately, probably to 0 and 2, respectively (this is a guess).- April 7, 2003
Extension to transistor extraction to include support for annular transistors.
Also: Important fix to the non-Manhattan paint function. The bug apparently only affected CIF/GDS file reads (layers with non-Manhattan geometry would occasionally get painted with the wrong magic layer type). Also for CIF/GDS reads, added an internal grid subdivision limit so that the internal grid doesn't get subdivided so much that integer overflows occur on large coordinates.
Also: Added backslash-r and backslash-b (linefeed and backspace) handling to TkCon for compatibility with tclspice output.- April 15, 2003
Important fix to two outstanding problems: 1) The CIF "bloat-or" function for writing CIF output now handles non-Manhattan geometry, enabling output for non-Manhattan transistor geometries (such as annular devices in submicron technologies); 2) The "widespacing" DRC rule has been implemented in a robust way (the previous version was a bit of a kludge and didn't catch all errors). It remains to be determined how this implementation differs from Dracula or other DRC checker implementations. The DRC rule syntax iswidespacing layers1 width layers2 spacing adjacency whyfollowing the syntax of the "spacing" rule except for the addition of "width", specifying the width of material in layers1 which triggers the additional spacing rule.
Also: Added cell deletion and cell renaming in the form of "cellname" subcommands in the following syntax:cellname delete cellnameThese functions currently do not support the file locking feature; that is, it is possible to screw up a shared layout database by using them. File locking support will be patched in in the near future.
cellname rename cellname newname
Also: Fixed a bug preventing compilation of the non-Tcl version in revision 34.
Also: Partially implemented autoconf by attaching the OS and hardware auto-detect script "config.guess", and removing the user selection thereof from magic's config script.- April 16, 2003
Fixes a bad mistake in revision 35 which effectively disables "exttospice" and "exttosim", if they're compiled as modules (the default), and causes Magic to hang. Also fixes a bug found by James Adkins in which loading cells created by the "flatten" command will crash the program.- April 28, 2003
Introduced a real working autoconf, though probably will take some time to debug operating systems other than Linux.
Also: Revamped the "subcircuit" method, which deprecates the "subcircuit" boundary layer in favor of using the new port command to turn labels into ports. port help returns information on the correct syntax.- May 5, 2003
Incorporates a LEF output module for defining characteristics of a circuit relevant to standard-cell place-and-route. The port command has been extended to include use and class designations. A new command property has been added to assign key-value string pairs to a cell, which can be saved and reloaded along with the layout. A new command lef has been added to generate LEF-format output for a cell. Each of these commands implements a help option for more information.- May 19, 2003
Enhanced, corrected, and expanded three-dimensional viewing under Tcl/Tk + OpenGL with the "specialopen wind3d" command. Fixes to the LEF module after testing on 3rd-party tools. GNU "autoconf" compilation tested on Linux and Solaris. Fix to extract section for a long-standing error (exists in v.7.1) which miscalculates perimeters of ndiffusion.- June 11, 2003
Fix to annular and nonstandard transistor extraction. Fix to Solaris autoconf make script.- June 20, 2003
Fixed the scrollbars in the Tk GUI. Extended the syntax of command "scroll" to include scrolling by layout units. Added capability of the wind3d "specialopen" window to be generated as a Tk path, and added the "magic::render" command to the Tk GUI with a (trivial) GUI wrapper as a proof-of-concept. Added "target window" option to the cell manager. Changed GUI so that the toolbar is not shown by default, but is chosed from the (new) "Options" menu. Removed "Cell" and "Tech" menu buttons and moved them under the "Options" menu as checkbuttons. Fixed an error in which the scrollbars in the non-Tcl version did not recognize mouse input. The fix substantially cleans up the "WindSend" routine.- July 10, 2003
Changed some CPP processing to M4. Changed extract extension for "device resistor" to include the SPICE type "semiconductor resistor". The semiconductor resistor syntax is used unless the name argument is "None", in which case the simple resistor is used. Changed the keyboard behavior so that shift-keypad keys are not interpreted as ASCII numbers.- July 16, 2003
Fixed "magic/symbol.map" so that exttospice and exttosim work again; other bug fixes related to the modularization of the command tables. Added a preliminary "cif warn" option; esp. with "cif warn align", the layout can be checked for contacts on half-lambda spacing. Fixed feedback rendering so that it does not attempt to draw out-of-bounds entries. Fixes and updates to the gnu autoconf interface.- July 24, 2003
Changes to the Tk graphics to replace X11 calls by Tk calls whereever possible. Added automatic grid scaling for GDS file reads, and added some useful options to CIF and GDS reads, including limiting and redirecting error and warning messages.- August 4, 2003
More fixes stemming from the modularization of the command tables. Also: Added configuration changes necessary for compiling an RPM package from the Magic source (enhancements courtesy of Erwin Prin).- August 8, 2003
Reformed the electrical connectivity search function to be a one-pass, recursive function, avoiding redundant tile checks and speeding up the process. Added the ability to search connectivity across ports, for ports having the same index. This search function modification has not yet been copied to the "extresis" and "sim" functions.- August 14, 2003
Fixed a bug in the new electrical connectivity search function, and extended the improved search function to "extresis" and "sim" (e.g., "getnode") functions. Also: Added files pertaining to the creation of an RPM package for Magic, courtesy of Erwin Prinz. These have been placed in a new subdirectory scripts/rpm.- September 5, 2003
Fixes/enhancements to the file locking code, courtesy of Mike Godfrey.- September 12, 2003
Switched from the "varargs" method for variable argument subroutine calls to "stdarg", in response to GNU gcc no longer supporting the former.- September 22, 2003
Changes to handling of standard cells during extract and exttospice. Also: Fix to capacitance value output from the "device capacitor" extraction method.- September 26, 2003
Added a LEF file reader to Magic ("lef read file"). Fixed the connectivity algorithm which searches across ports with the same index (which is critical for handling pins with multiple, unconnected ports read from a LEF file).- September 30, 2003
Corrected a serious CIF/GDS output problem: Contacts may not be centered if the contact size or spacing is an odd number of centimicrons, because half-centimicron values get rounded, and may cause the output geometry to be off-grid. It may also cause overlapping contacts in subcells to produce contact cuts at different positions.- October 3, 2003
Added a DEF file reader to Magic ("def read file"). Changed the behavior of the "cellmanager" widget in the Tcl wrapper so that it remains nonexistant until called from the Options menu. This prevents magic from hanging while the cell manager processes thousands of cells if a large design is loaded in.
Note that the LEF and DEF syntaxes have been only partially implemented. In particular, wire widths on routing layers are ignored and a default wire width of 3 is used. Layer names in the LEF and DEF files must have entries in the technology file; that is, they must be included as aliases for magic layer names. Eventually, this should migrate to a new section for the technology file.- October 27, 2003
A number of fixes, including the graphics handling of layer perimeter outlines, a fix to the "cif limit" syntax parsing, an important fix to CIF read-in for files that define the geometry in sub-centimicron units, and an error reported by Wai Yung in which compilation fails if nonmanhattan extensions are disabled. The LEF and DEF readers have been substantially fixed and enhanced.- November 2, 2003
Changes made for compilation on an AMD Opteron (using RedHat GinGin64). Operation appears to be correct. Compilation produces numerous warnings, but no errors.- November 12, 2003
Minor fixes to LEF and DEF read-in routines; cap on wiring contact types removed.- November 16, 2003
Major changes to LEF and DEF input method for better handling of large (greater than 1GB) files.- November 25, 2003
Major changes to the techfile format. Format number incremented to 29. Format 29 adds the asterisk (*) notation for any layer to indicate the union of that layer and all contact layers which have that layer as a residue. Use of this notation SIGNIFICANTLY decreases the size and complexity of the technology file, as well as increasing readability. Also, added several extra types for DRC checking. These are all essentially duplicating the functionality of the "edge4way" rule, but make the DRC section of the technology file easier to read. New DRC checking types are "surround", "overhang", and "rect_only".- November 28, 2003
Includes a fix to the IRSIM handling routine, which was doing I/O incorrectly for SYSV-style select() calls. Thanks to Mike Marcel for pointing out this error. Also, the CIF parsing of the "*" notation (see above) required restricting to the plane of the layer.- December 1, 2003
Colormap and style file changes to add colors and styles for metal layers 9 and 10 and corresponding vias. Also, changed label handling in the LEF file reader for speedup reading files with many labels (i.e., complicated port geometries).- December 23, 2003
Additions to the LEF/DEF reading for handling LAYER, VIA, and VIARULE statements. Also, changed the DRC parsing for the "edge4way" rule to determine the plane of "OKtypes", so that the optional 9th argument is not necessary.- December 30, 2003
Fixed a problem with DRC rule edge4way rule parsing stemming from revision 58. Also, corrected the non-autoconf compile (thanks to Jake Hill for reporting this problem). Finally, fixed the text input method for Tcl-based magic when used under the "tkcon" console. Now text entry works correctly with functions such as the netlist window's label input method.- March 11, 2004
Lifted the requirement that the Tcl version be compiled with "make tcl" and installed with "make install-tcl". "make" and "make install" now suffice for both the Tcl and non-Tcl versions.- March 19, 2004
Major changes!
Make changes: Autoconf compile now assumes options "with-tcl" and "with-opengl" are YES by default, checks for the header and library files for each, and disables them with a warning if something goes wrong.
Also: Corrections and extensions to the follwoing command-line functions: goto, findlabel, getnode, and the window command update. getnode now allows global nodename (labels ending with "!") to be disabled. The node alias reporting is fixed, and confusion over labels completely surrounded by a layer is fixed. The search routine SimTreeSrTiles has been overhauled for efficiency, with poor code excised. findlabel now has a "-glob" option to return a list of nodes matching a csh-style pattern with wildcard characters (this was already in Magic but only available under the Scheme interpreter). goto now has a "-nocomplain" option to prevent printing an error message if the node cannot be found (e.g., if it's a global node name). update command now has options "suspend" and "resume" to prevent and resume graphics refresh. This is useful when generating scripts to execute multiple commands.
Also: Added a new command search with syntax "search layers proc" which executes a low-level tile search for all tiles matching the layer list layers. For each tile found, it executes the TCL procedure proc, passing it a list of the tile lower-left and upper-right coordinates, and the tile type.
Also: Created a "pin list" GUI tool. This tool searches out all the pads in a design and generates a pinout list. The tool can be used to aid in renaming all the pads.
Also: Rearranged the source directory structure so that all TCL scripts go into the subdirectory "tcltk".- March 31, 2004
Modified the tech file parser to handle DOS-style carriage-return/linefeeds.
Also: Modified the "squares-grid" cifoutput function to avoid writing contact cuts with less than the specified border. Added an optional y-grid value to the "squares-grid" function. This allows the generation of interleaved rows or columns of contacts, such as required for pad generation in some processes.
Also: Fixed an error in the DBResidueMask(), which caused the new "*" notation for the technology file format to produce incorrect lists of layer types. Also: Extended the cmdParseCoord() routine to handle coordinates on the user grid (specified by the "grid" command). Previously, "snap grid" only worked for mouse motion. It now works correctly for all commands (and, consequently, all key macros), e.g., move, stretch, etc.- April 9, 2004
Modified the makefile process for compatibility with Cygwin, and moved tclmagic.c to the tcltk directory as the easy way to avoid an error in trying to compile a library file for the module.- April 12, 2004
Modified the exttospice (ext2spice) routine to output a .subckt ... .ends record around the netlist output of top-level circuits containing ports. This action can be subverted in the TCL version with the command "exttospice subcircuit top off". Values are "off", "on", and "auto", with the default being "auto".- April 29, 2004
Extraction of overlap and sidewall capacitance was modified to force it to subtract the substrate capacitance computed for overlapping types belonging to the same electrical node. Also, as magic does not appear to compute overlap between plane images of a contact, only one contact image can declare an area capacitance to substrate. This is NOT all worked out properly.- May 7, 2004
Corrected a number of errors in the search functions when the database contains non-Manhattan tiles. In particular, some searches would go into an infinite loop (interruptable, but still annoying).- May 13, 2004
Corrected search routines over non-Manhattan geometry in the routines used by "getnode" and "extresis". These instances were missed in the Revision 69 fix.
email: |
Last updated: December 17, 2024 at 2:00am