This page summarizes changes, fixes and enhancements to the SFGEN64 program.
This new Windows version has all the updates done on the SFGEN Linux 3.18 version.
This version has a few improvements over the previous version.
This version has an improved threading/partitioning model to process repeating cells that contain paint and scratch layers (ODB++ input). Where before a particular file took 2 hours to process, it now completes in 4 minutes. In general, this change is faster than the previous version/model but in some cases it can be marginally slower, usually for simple cases. The SFGEN/ODB++ benchmark which has run in 6 hours is now 7 minutes faster. In view of this, the problematic customer file clearly presented a different class of data than seen before.
The ODB font compiler is no longer sensitive to non-conforming ODB font file in the following manner. Previously LINE records that had 0.0 or no value for the text stroke weight and/or were missing or did not have an "R" (round) endtype field caused the font compiler to crash. Now LINE records that have 0.0 or no value for the text stroke weight are assigned 0.012 inches for the text stroke weight and LINE records that have missing or do not an "R" (round) endtype field are assigned a round endtype.
The default ODB++ text stroke weight is 0.012 inches.
This version supports table driven arc smoothness control via a text file with the following format:
# rmin rmax polarity degrees chord_error units um 1150 1250 - 45 0 900 1000 - 15 0File Syntax:
This version represents improved path recovery in terms of fidelity over the initial v3.14 release. Additionally, path recovery now supports pad recovery when standard symbols are used. The new functionalities are highlighted in the image of the Advanced dialog here: The associated new command line options are:
-participating - Includes only those pads that touch a path vertex. -pads - Includes pad data in the output as SREFs.The pad data can be mapped to a particular layer by way of the -layer command line option
This version of SFGEN supports Path Recovery which can be driven from the Path Recovery tab in the Advanced dialog. Or via command line options as show below...
../bin/sfgen "-job:`pwd`/array.tgz" "-outdir:`pwd`" "-workdir:`pwd`" -step:array -thrnum:4 -path_recovery_args -percent_area:25 -layer:1,2 The current list of command line options that flavor the path recovery engine's behavior are -keep debris data are not removed (default is to remove debris files) -layer:B[,P] where B and P are layer designators (either layer or layer:datatype) for BOUNDARY and PATH data in the output - (default 0:0) -percent_area:A where A is a number in percent (e.g. 25) which indicates that candidate PATH data whose percent area of relative to it's extent box is greater than this value will be not be output as PATHs (default is 25) -aspect_ratio:R where candidate PATH data whose length to width ratio is less than this value will be not be output as PATHs (default is 5) -singlets indicates that candidate PATH data having only two vertices not to be excluded from consideration to be output as PATHS (default is to not consider "singlets") -arcres:R where R is the arc resolution to be used when converting candidate PATH data to polygon data for analysis (default 45 degrees) -chord_error_um:E where E is the chord error in microns to be used when converting candidate PATH data to polygon data for analysis (default 0.1um) -sliver:S where S is the sliver value associated with boolean operations (default: 10 times chord error) -min_line_width_um:W ignore candidate PATH data with path width less than W (default 0) -max_line_width_um:W ignore candidate PATH data with path width greater than W (default - no restriction on maximum path width) -tolerance:T where T in microns is the precision associated with general computations, vertex matching (default: 1um)
This version fixes an issue when arc recovery is turned on and the input set contained circular-like holes that just grazed the outer edge of a
polygon. After arc recovery the edges of these holes could jump outside the bounds of the original polygon resulting in an illegal
self-intersecting polygon. Further processing of this data downstream in
the gdscompact flow caused this data to be dropped from the output.
This issue was handled by checking if arc-recovered figures intersected with the container of the leonov representation of this figure. If they did, these were removed from the leonov polygon and then subtracted from the modified polygon.
This version fixes an issue in the initial unionization of data to be processed in a cell definition. The problematic file was a gridded design where data was dropped as a result of problems in this initial unionization.TTF Library Update
This version fixes several issues in the TTF library that is embedded in the annotation engine.
SFGEN now supports a new annotation model that supports SHX and TTF fonts for TEXT annotations as well as support for bitmap insertions.Updated ODB++ reader and Misc updates
Several issues which were fixed in our ODB2GBR, are now part of SFGEN. You can read more about each one in the ODB2GBR Revision History page.
All quads are passed through a quad extent checker before being output. Consider the case when the quad length (in user units, nominally in um) divided by the user grid (nominally 0.01 or 0.001) is squared as is done when computing the cross product and is performed in the quad extent checker it is possible that this results in a number greater than 2^31 resulting in an integer overflow. Presented with this result the quad checker would subdivide a legal sized quad into smaller pieces and in turn resulting in an excessive number of quads. The rational for using integer arithmetic was to make use of the best precision in the determination of quad conformance. The fix was to simply to make use of 64 bit integers for these operations. This bug only showed up now because of the use of a larger quad length in conjunction with a user grid of 0.001.
This release includes enhancements/speedups for the support of ODB file in the standard product. Additionally it includes an ODB scanning facility.ODB++ Scanner Issue
This version fixes a bug in the odb_scanner binary when opening files with more than one "." in the filename, e.g. odb.r1.tgz would have had a problem where odb_r2.tgz would not. This has been fixed.
Added optimizations to LCD mode in the determination of synthesized cell dependencies and equivalence. In a baseline case of moderate complexity this reduced the throughput time from 13 hours to 3 minutes.
For control of the Equivstructs computations SFGEN added the command line option -ignorecells:<filename> where filename holds a list of regular expressions of cell names to be passed preserved.Bug Fix in Gdscompact Routine
Fixed a bug in the Gdscompact engine where an optimization associated with synthesized fanout structures having very small rotation angles generated were output 180 degrees opposite of the correct value.Bug Fix: Rounding of Pregrid
Fixed a bug associated with rounding for non-unity pregrid.
Updated gscan to return an exit code if it fails to read a GDSII file.
Fixed the issue where the copied input file disappears from the work folder. This is caused by an input file and output file having the same base file name. Since everything is processed in the work folder, having the same input and output name creates a conflict resulting in the input being removed. This is solved by modifying the input file name when copied into the working directory.
Added logging during the initial scan. The software will now report the scan error in the log file.
Added an optional argument "+log:[log file]" that will append to the specified log file if it already exists. We also added a check box in the GUI's advanced dialog to allow appending to the log file. The log file name is defined after every open and is based on the input file or a generic name if append is checked (sfgen_pid.log).
This version fixes an issue in GDSCOMPACT where fan outs were not arrayed even though -fanout_array is specified on the command line. This
bug was introduced with the introduction of overlaps between SREFs that could be constructed as AREFs at 0 and 90 degrees to minimize/remove
gaps between members of AREFs as the result of numerical noise. It was reported that this issue was fixed in v3.01 when in fact it was not.
This confusion, in fact, was the result of not understanding the customer complaint. It is now fixed.
In v3.02 the command line option "-intersection_threshold:N" was introduced where the default value of N if this command line option was not specified is 10000. Now setting N to 0 defeats this new option. This might be desirable for backward compatibility or simply to turn this mode off as it has a computational cost often paid for in improved overall throughput. In the GUI, the user may set this value to 0 or leave the corresponding text field in the Settings dialog empty.
In the standard product under Windows it is now possible to specify remote filesystems for input and output files, e.g.
\\WIN83\benchmark\sfgen\input\gds\c25x20.gds is a candidate input file. The working folder must reside on the platform where execution takes place.
Improved throughput due to improved thread sharing / load balancing in secondary processes (postnh).
Improved throughput for negative sizing as a result of flow changes in boolean library.
Improved partitioning for union operations including when sizing/compensation was active.
Added timing summary for the steps performed in each of the output modes (standard mode, LCD, GDSCOMPACT) at the end of the log file.
Added new product ID (429) for GDSCOMPACT licensing. The keys that have been used for Quad output will also enable GDSCOMPACT.
The Transformation Tab in Advanced Settings for GDSCOMPACT mode has been removed. Settings associated with this tab are not supported for GDSCOMPACT executed from the command line.
Removed the thread number restriction in the GUI. It is now possible to specify more than 16 threads.
This version features more speed improvement by optimizations particularly in the context of large mesh designs. In addition, an improvement was made in the computation of hierarchical reductions when the extents of a child structure defines the extent of its parent. This version also makes
better use of multi-threading in the nonLCD and nonGDSCompact modes for GDSII input..
This version also makes better use of multi-threading in the nonLCD and nonGDSCompact modes for GDSII input.
This version is compiled with VS2015.
Added a control in the GUI and command line for vertex threshold and tiling associated with structures where the vertex count is low but the interactions (intersection of polygons edges) is high. The command line optional arguments are:
This version includes major speed improvements in the NewHierarchy engine (no improvements in LCD or GDSCompact modes). The improvements were made for GDS input files and for nonLCD and nonGDSCompact modes. These included optimizations particularly in the context of large mesh designs. In addition, an improvement was made in the computation of hierarchical reductions when the extents of a child structure defines the extent of its parent.
This version also makes better use of multi-threading in the nonLCD and nonGDSCompact modes for GDSII input.
This version represents the first release of new code base for those flows where gdscompact is used. This version provides more parallelism.
A fidelity issue related to a boolean functions when butting output is used as part of normal program flow was addressed. The problem was discovered in a polar arrayed version of database that is used in regression testing of fanout structures. It manifested itself in the areas when fan-like lines were "shorted" by nearly perpendicular bars which should have resulted in holes but in fact were filled in. This was fixed in the boolean library used by gdscompact64. Additionally, code was added in gdscompact to detect and flag when bad output was created. This condition is output as a warning if corrected in the log file and as an error if not corrected. (Quad Output Only)
An optimization yielded > 5x speedups for "gridded" structures when fanout is turned on. This is achieved by partitioning of polygons sets with high aspect ratios, relatively low vertex counts (< 2M) and high edge intersection counts. In the case of an LCD input file, throughput was reduced from 34 minutes to 5.
Preferred direction output is now more consistent/correct - this is a necessary requirement to be able to deliver quad output which different max quad dimensions in x and y. Some output quads were incorrectly output at 90 degrees to the preferred direction because of an issue related to polygon aspect ratio. This was fixed. (Quad Output Only)
A memory leak at the application level was fixed. (Quad Output Only - gdscompact and fanouts)
Some changes were made to the Quad Dialog in the UI to distinguish between hard and soft limits more easily. (Quad Output Only)
The computation of dominant direction was improved in that non-orthogonal edge groups whose angles were opposite in sign (or nearly opposite in sign) would be disallowed from becoming the dominant angle. (Quad Output Only)
RectArray and FanOut Optimization including cross cut minimization were implemented per customer specification. (Quad Output Only)
Updated the GUI to support Quad preferred direction and allowed DBU error. You can also specify these options as command line arguments using "-quad_direction:x|y" and "-allowed_db:intval" respectively.Updated ODB++ Modules
Updated ODB++ related modules to automatically break step and repeat
of child steps that overlap with scratch data.
Optimized use of boolean functions in the ODB++ feature file interpreter.
This version has a new version of sffcorrections that contains a memory
allocation optimization that becomes important for any input GDS file
where the number of textual structure references for any cell definition
is large ( > 1M). For files that are output from SFGEN which by design
creates semi-flat GDS file, the number of cell references could be in
the millions depending on the nature of input file and user parameters.
In a use case consistent with this scenario, a reduction in the execution of sffcorrections was seen to be reduced from 20 minutes to 40 seconds - the larger the number of cell references, the more the improvement in throughput can be expected.
This problem was manifest more on WIndows platforms are opposed to LINUX.
This version includes a new sffcorrection64.exe with better log report.
Updated the GUI to reflect the input's unit (UM if input is ODB) when specifying optional arguments such as chord error, offset etc.
This version fixed an issue where correction is not applied to the output when the correction is just a shift along the X-axis..
Updated Polyhierarchy module - The new module fixed a problem in the quad-tree code where window queries were failing because of an integer overflow during the quad tree construction for designs with very large extents.
Updated sffcorrection engine to support distortion and non rectangular domain correction.
This version also includes the latest boolean and other modules to fix a problem where data was being dropped during the conversion.
This version includes more optimizations which will result in speed ups when creating large output files. This version also includes a fix to database traversal for large datasets ( > 2GB indexing of database - which is a compressed version of the original).
SFGEN now handles large input file sets as well as file sets that create large intermediate and final output files.
Fixed a bug in the GDSII exploder database which caused application crashes when the span of any structure definition exceeded 2 GB was addressed. Required recompilation of all engines that made use of this (gdsmachine) exploder library.
Added optimizations in sffcorrections and postnh when traversing hierarchy and polygons data is not of consequence. Speed ups of 30x were observed in these modules.
Fixed the issue where a GDSII output does not show distortion when ran with corrections. Corrections now supports arbitrary quadrilaterals as oppose to semi-rectangular.
Fixed floating license issue when there is only one license available.
Fixed issue when output folder is in a different disk than the working folder.
Updated modules and boolean.
Modified quad options in GUI, and added a second parameter to optional argument "-quad_array".
Added a new product number (430) that enables quad. The old SFGEN (GDS) license (428) will no longer work with quad.
This release does not check for or install FLEXID key drivers.
Fixed Advanced Dialog menu since it appeared squeezed in some Linux platforms.
This version is able to catch crashes of intermediate engines and pops up a failure message. Updated the log file with clearer failure message.
Added sample code in the Windows release with a lib and header file.
Removed all the 32bit engines in the Linux release.
Fixed a bug related to span length where data was dropped.
Fixed a bug exposed with the introduction of "-minlen" in SFGEN v2.42 Windows. There were small negative structures that were handled incorrectly.
This version fixed correction issue where it fails when the coordinates are delimited by spaces instead of commas.
Modified the optional argument "-minlen:num" to specify the minimum dimension of a structure. The default value is 100um. This fixes the flat output issue where the structures are very small..
This version removed the restriction when using Manhattan sizing.
This version includes new -manh and -fivept options for sizing. The feature was added in both commmand line mode and in the GUI.
This version fixes the issue where large amounts of data was lost.
This was the result of the presence of "non-conventional" AREFs where the role of the non-achor lattice points was switched.
This version includes optimization for counting structure instantiations.
This version supports GDS files containing structure names up to 1024 characters in length.
This version fixes Edge Placement Errors.
Ignore Cell/Pass Through Mode is disabled when not Preserving Hierarchy.
QISBOOL can now perform multi-threaded sizing.
Updated the main window to resize step or layer list sections of the dialog.Bug Fix - Crash due to License Fail
Fixed a bug that caused a program crash when licensing fails. This was the result of a buffer overflow.Command Line Syntax Check
Invalid command line arguments are now reportedError Status Fixed
A state problem when reporting errors was fixed. Previously, a successful run might be flagged as having had an error in the presence of a previous error.
Added new functionality and a command line argument to implement it. Arc like boundaries can be detected and then can be rebuilt (primarily to use less vertices) in the output GDSII file. This can reduce the number of quads and slivers produced in the output.
The argument to trigger this routine is:
where the first value is the chord error tolerance used to detect arcs and the second value (normally larger than the first value) is to rebuild them.
The GUI has been updated to include this new control.Quad Size Limits
Maximum quad size for GDSCompact flow can now have different values for X and Y.
The compaction routines in GDSCompact flow would replace original cells in the hierarchy with more efficient merged ones. However previous versions were leaving the original cell definitions in the file even through they were no longer referenced. Those cell definitions are now deleted if not referenced.
In the GDSCompact flow, the maximum length/width of a quadrilateral can be set by the user - any quads that would be larger than this value (either in X or in Y) are broken into smaller quads that do not exceed the max.Preserve Hierarchy Tree (GDSCompact)
A new check box, Preserve Tree (command line argument -nhmode3) has been added to the Settings Dialog under the GDSCompact flow. The hierarchy of the input file is preserved; polygons within each structure definition are unionized and can be (optionally) convexed and output as quadrilaterals.
If this check box is not selected, GDSCompact may modify the file hierarchy such that arrays and structure trees may be restructured according to the rules dictated by "Span Length" and "Vertex Count." (-nhmode2 on the command line).Bug Fix in Quadrilateral Output
A bug was fixed in the GDSCompact mode which resulted in "quadrilaterals" with more than 4 sides.Bug Fix in Convex Output
A bug was fixed in the GDSCompact flow in which convex data was misplaced outside the source polygon as a result of an optimization.Selection of Input File Structure
The main dialog box now allows a user to select any input file structure (STEP from the ODB++ terminology) by use of a directory style navigator. Prior to this the GUI only allowed users to select from top level structures. The command line syntax which specified the structure name directly did not have this limitation.
If the top structure is not selected and GDSCompact mode has preserve Tree checked, then GDSFILT is used to extract the data at the front end. (This is pretty much invisible to the user and does not require any new licensing.)
A new data flow for LCDs has been implemented labeled GDSCompact. It does not produce a semi-flat file. It unionizes data on a cell by cell basis and can also convert the resulting boundaries into quads (the breaking of large quads that exceed the user specified maximum size has not been implemented in 2.26.
The command line arguments needed to use the GDSCompact flow are:
-gdscmponly turns on GDSCOMPACT flow -convex output polygons are to be fully convex -quad[:quadlen] output quadrilateral only optionally with maximum dimension quadlen (in um)
Annotation and Distortion correction are not available with the GDSCompact Flow.
The Advanced Dialog Box has been rebuilt to accommodate the new GDSCompact flow:
it does not yet support a check box for deactivation of hierarchical compaction so that must be entered manually.Batch File
a .bat file is created in the working directory as an aid for scripting *if* the "Keep Temp" check box is set in the Advanced Settings Dialog. This is a useful aid for those who wish to run SFGEN from a batch or script file.Hierarchical Compaction De-Activation
Hierarchical compaction can be deactivated (it is on by default) by passing "gdscomp -nhmode3" into the LCD Args text field in the Advanced Settings Dialog as shown above. In this case the hierarchy in the output is identical to that of the input, but all "flat" data in the structure definitions are unionized. If convex or quadrilateral output is requested (Convex and/or Quad check boxes are set) then this "flattened" polygon stream is handled accordingly. In the next revision of the GUI a suitable control for "-nhmode3" will be implemented.GDSCompact License Requirement
GDSCOMPACT can be invoked directly from the command line without the SFGEN front end but will require a license for the GDSCOMPACT product ID 2699; in the normal flow GDSCOMPACT is invoked with Artwork's internal softkey licensing by SFGEN.
Modified progress dialog to better reflect progress. Does not reset for each additional layer processed. Now starts during opening of the file.-silent fix
Fixed "-silent" option which is used to prevent messaging dialogs from popping open. Prior to this version this argument was not being recognized on the command line.Relative Path Fix
When run from a batch/script relative paths were not correctly supported. This has been fixed.Additional Log Information
Modified the log file to include more information about ODB conversion.View Output - Fixed
Fixed view output function. Previously there was an issue in calling the GDSII viewer. Note that if multiple ODB layers were selected for processing, each ODB layer produces its own GDSII file, and only the file generated by the first layer is passed to the viewer.
The user interface which was previously MFC based, is now Qt based.Port to Linux
SFGEN has been ported to Linux (RHEL5 and later).
Fixed the speed issue for a client where structures that are similar have too many different instances.
This can be controlled by specifying a jitter (1 is default) in the GUI or command line with the optional argument -jitter:value
Fixed bug issue where a scratch data is missing.
Added an option to disable step-repeat optimization in the GUI and command line with the optional argument "-nosropt". This should be used if child steps overlap each other.
Fixed bug issue where no data is output if the GDSII input datatype is non-zero.
Fixed bug issue where data is dropped. This is caused by layer polarity bug.
Added the step and layer information when specifying the output file name (for ODB++ input only).
Updated SFGEN to handle ODB++ input files with bad syntax. Customer file contained an empty line with attribute 0 which caused the program to crash.
Fixed an error that occurred when a sized down polygon with scratch becomes completely filled (reference: ATP-13-Single-Cell.GDS). This was caused by a bug when the data is rotated; some vertices overlapped which resulted in the program filling the polygon when sized.
Fixed a bug where a section of data was output mis-aligned. This was caused by a bug in choosing the structures when there is a rotation.
Previous versions could not convert customer file. The cause was an illegally named symbol - the name string had a colon ":" in it which is a forbidden character. This has been addressed by detecting and dropping symbols with the colon and continuing to convert the balance of the data. WARNING - dropping such symbols may result in output not matched to the input data. It is not clear why a file with this type of symbol name would be generated - likely an error by the software that produced the ODB++ file.
Fixed a bug where pads are dropped. This was caused by a bug that occurred when handling insertion of more than 8190 pads of the same symbol. This is fixed by organizing the insertion array into groups when the insertion count exceeds 8190.
Conversion time to GDSII when correction is applied is reduced. reference: Sample_PXL.gds.
Updated Product ID: 427 (ODB++ input), 428 (GDSII input)Bug Fix
Fixed duplicate polygons issue of adjacent cells.
New key routine.
Fixed polarity issues.
Improved frame arc resolution.
Fixed logging issues.
Fixed rotated/mirrored child step issue.
Fixed long path fonts issue.
Updated boolean module.
The latest SFGEN will fixed odbfnt2shx module to handle wide characters.
It also includes an updated sffcorrection and acsbool.
The latest SFGEN will require new key codes corresponding to product IDs 527 for ODB and 528 for GDS (LCD).Speed Improvements
Speed up in new hierarchy calculation.
Program crash on a customer file. The problem was related to the presence of a circular sliver in a surface. This has been corrected.
Improved speed and addresses LGE's throughput issues
Precision issue in the hole detection within a surface caused the program to create the wrong output.
Random sizing for offset both or xyboth is implemented.
Fixed rip library that causes a crash when ripping very narrow data.
Speedup in creation and comparison of instances have been implemented.
Fixed a bug that causes some files with a large number of vertex count to crash during translation.
There are no more crashes during translation of customer file.
Enhancements to Text MergeUpdate Correction Algorithms
Updated the correction algorithms to sync up with the ones implemented in RTCR.
Added support for text merge. (The strings and placements are defined in SFGEN but the actual text is not rendered until the file is processed by the RTCR.Fixed Scale and Rotation Resolution
Fixed a bug in the input argument parser that did not allow for very fine adjustment of scale factor and rotation angle.
This is the initial release of SFGEN64. The annotation (text merge) function is not implemented.