Download

 

We are happy to announce that NAZCA 0.5.12 is available for download!

Nazca is available for Linux, Mac and Windows, for Python 3.6 up.

DOWNLOAD Nazca 0.5.12 installer

This Nazca Installer does not include the pyclipper module.
The pyclipper module can be installed separately (
see the installation guide).

Click here for the step by step installation guide.

Acknowledgements

We encourage you to put the Nazca logo in your mask layout and share a picture with us if you can.

Show your appreciation for Nazca Design by acknowledging it in your work, publications or materials with the following sentence:

Nazca Design was used to generate the mask layout in this work.

What’s new in NAZCA 0.5.12

2020-08-16: nazca.0.5.12

(including information on 0.5.11.post releases)

2020-05-11: 0.5.11.post1

  •  – Interconnects:
    • – Interconnects initialization now works without any radius and/or width setting. It then uses internal defaults.
    • – Added PCB type bends to interconnects.
    • – Added length_geo to euler(), sbend() and bend_p2l().
  • – Layer handling:
    • – Update get_layer() with the “aslist” keyword to return all valid IDs in a list.
    • – Updated layermap (for gds import, export and cell_iter) for layers that have more than one layer ID.
    • – Move unknown layers in gds load to dump layer rather than creating them.
  • – DRC
    • – Updated symmetry DRC message to include the (x, y) location in case of an error.
    • – Switch DRC off when placing stubs annotations
  • – Miscellaneous
    • – Renamed polyline2polygon_asym() to polyline2edge(). It now also handles single line center via keyword “line”.
    • – Extended clear_all method to also delete xsections object better.
    • – Make fxya() pin location formatting parameterized
    • – Extended bbox_layers_ignore to allow for a reset or append.
    • – Updated range checking to handle None values.
    • – Added option to overrule all stub and pin settings and store pin attributes for a PDK testing.
    • – Added function raise_all() to activate all Nazca related error loggers.
  • – Fixes:
    • – Fix setting of uPDK default in Export_layout class
    • – Fix to export the polylines drawn by interconnects to GDS.

 

2020-05-26: 0.5.11.post2

  • – When loading gds with ambiguous layers (multiple nazca layer definitions for same layer number in gds) show the file and layer in the message.
  • – Added “revisit” option to cell_iter to lookup every individual path in the nazca tree.
  • – Updates cell parameter annotation to accept yaml formatting.
  • – Added rot2ref() method to pins to give a pin a new absolute angle value based on a number or another pin.
  • – Catch missing accuracy in a xsection when creating an arc. It now creates a log message, no longer an exception.
  • – More rigorous xsection data structure clearing in clear_all().

2020-06-21: 0.5.11.post3

  • – Added the ubend() function based on an offset for the bend.
  • – Improve handling/messaging of recreating layers with already existing names.
  • – Added Plotly as layout export option.

2020-07-23: 0.5.11.post4

  • – Fix string issue in message in add_pinstyle()

2020-07-23: 0.5.11.post5

  • – Added path2lyp to visualize paths in Klayout via the .lyp file.
  • – Use default pin_style for stubs without properties, not the last used pin_style.

2020-08-16: 0.5.12

  • – Updated ubend_p2p() to work with zero lateral offset.
  • – Improved mask_layer initialization to a DataFrame in xsections

Previous releases

Release date: 2020-04-25

Changes:

  • – Added warning when referring to a pin outside the cell scope in Pin(pin=…)
  • – loading gds:
    • – added layermapmode option to load_gds()
    • – added layermapmode option to load_gdsBB()
  • – Added minimum angle check on mask element arc to not draw polygons for very short bends
  • – Added missing cell flip condition in polygon/line flip in polygon/line iterator.
  • – Feed any drc setting in put() call also into group connections.
  • – Removed old topcell when calling clear_layout(). Was sticking around in cfg.cells otherwise.
  • – Improved pinstyle handling

Release date: 2020-04-06

Changes:

  • – pins and pinstyles:
    • – Updated default pinstyle handling. It is now also possible to supply a custom layer when creating a new Pin(). The layer entry will be converted into a new pinstyle. Without layer the pinstyle of the pin’s xs will be used, as before and if any, otherwise the default pinstyle.
    • – Added a message to stdout if a log file is created in the form of its filename.
    • – Fixes in asymmetric interconnect handling and drc
    • – Added a “pinflip” to interconnects and asymmetric pin to track and visualize asymmetric pin connections.
    • – Do not draw stubs of length=0 anymore

  • – Hierarchy:
    • – updated default hierarchy in png and svg output to hierarchy=’flat’ to suppress a related warning message.
    • – fix in putting right parent reference in instance iterator, needed in specific nazca cell-tree structures.

  • – Bounding Box:
    • – Added bbox “ignore layers” to make those mask layers not participate in the bbox calculation, for example the pin visualization layer.
    • – Added a protectbox bool attribute to Cell. This feature inititates (if True) the copying the bbox shape into the userbbox. The userbbox can be considered a stay-out or protected area and is an arbitrary polygon. The bbox is a rectangle and useful for placement and/or visualization. In the case that the bbox is considered a stay-out box a protectbox=True should be set.
    • – Added bbox length and width as Cell attributes for easier icon generation.
    • – Fix stub rotation in bbox calculation that in some cases created a larger than needed bbox after introducing the “hierarchy” keyword in export in 0.5.9.

  • – load_gdsBB():
    • – Updated load_gdsBB() to have an option for toplevel instantiate=False
    • – Added flat keyword to load_gdsBB() to load a gds as a flat (single level) structure

  • – Fixes:
    • – Fix in exception handling in Cell __exit__() to also show right trace back in rare cases that an error in cell close would occur.
    • – Fix in interconnect ubend() solving floating point rounding issues.
    • – Fix i n angle calculation in geometries.transform().

  • – Miscellaneous
    • – Added “clear” keyword to rebuild() method.
    • – Extended the rangecheck() method to accept more attributes to describe the function parameters.
    • – Clean up parametric edges in mask element strt() for easier usage.

Release date: 2020-03-14

Changes:

  • – Hierarchy:
    • – Improved export and cell rebuilding mechanism (via cell_iter()); Nazca introduced the hierarchy keyword with settings: “flat”, “apply”, “self”, and “full”, e.g. nd.export_gds(hierarchy=’flat’). Note that not all output formats can handle all types of hierarchy, e.g. png images will be ‘flat’ and only nazca tree hierarchy can handle ‘self’.

  • – Connectivity:
    • – Implemented “group connect” code for automatic circuit level connectivity when placing cells based on pin proximity and pin attributes. It underpins path tracing and layout versus schematic extraction.
    • – Added option to switch pin2pin drc off during a cell.put with .put(drc=False)

  • – Improved handling and fixes in the convex hull bounding box:
    • – Do not draw the standard bbox just because hull = True
    • – Automatically use a hull based bbox when hull = True

  • – polygons and polylines:
    • – Added option to export a polylines as a polygons via config setting cfg.export_polyline_as_polygon = True
    • – Added polygon clipping method to nazca.clipper.py

  • – Interconnects:
    • – Added Tp_viper() method to the Interconnect class to define parametric curves of x, y, w in (t) as an interconnect.
    • – Improved bend_strt_bend() warning messages.
    • – Pass width 1 and 2 to pcurve to to vary the waveguide with (use cobra_p2p)
    • – Fix the interconnect error counter, which is used to locate interconnection errors in the code.
    • – Remove inner radius warning for very small negative values.
    • – Improved bend_strt_bend() warning messages.

  • – Miscellaneous:
    • – Improved the setting and messaging of pinstyles.
    • – Renamed cell attribute bbox_poly to bbox_polygon.
    • – Do no longer use the first defined xsection as default.
    • – Removed the automatic “_lib” suffix from export_gds(bb=True) building block exports
    • – A number of small fixes and docstring updates.

Release date: 2019-12-08

Changes:

  • – Added Euler bend to Interconnect module.
  • – Added free form curve in x(t), y(t), w(t): viper() updated to a mask_element.
  • – Added option to set begin end end angle in polyline2polygon.
  • – Added function get_layer_tuple() as alternative to get_layer() where relevant
  • – Updated handling of empty mask_layers in a xsection.
  • – Further simplified user-level syntax for the cell_iter().
  • – Added dependency for IPython in setup.

Release date: 2019-11-11

Changes:

  • – Change default (undefined) layer resolution from 0.005 to 0.001 um.
  • – Added “overwrite=True” option for add_layer() to force a redefinition for an existing layer name.
  • – Added an option to overrule in a bend() call the straight-to-bend offset with a function F(width, radius) reference. Note that best practice is to assign the offset function (or float) to the xsection ‘os’ attribute.
  • – Added log message for layer=None if redirect_unknown_layers is True.
  • – Redirect the messages for missing layers in a xsection to the logger.
  • – Fixes:
    • – Fix in auto @hashme detection (from 0.5.6). In case of a normal cell call following a reused cell call under a @hashme decorator, the normal cell used the last hashme cell_name (and renamed it where needed to maintain cell name integrity)
    • – Fix in mask_element bend() to always take the outer bend side wall radius for mask discretization, because some trenching settings (0.5.4) may swap the inner and outer side walls. This could lead to an exception in case of a swapped and now negative radius or a lower discretization in case of swapping and a large difference between the inner and outer radius. Method bend() now takes (again) always the largest radius for discretization and always resets a negative inner radius to 0.0 um.
    • – Fix in interconnect logger levels in (from 0.5.6) and improve message handling.

Release date: 2019-11-04

Changes:

  • – Added the polyline property for layers in a xsection. If polyline=True it will export the guide as a polyline rather than a polygon.
  • – Cell.init checks if @hashme is active and automatically uses it if so: No hashme=True required in nd.Cell call, but still allowed
  • – Fixed pin2pin DRC on asymmetric xsection connections to handle flip states and hierarchy better.
  • – Store “cp” during DRC visualization to make sure it is decoupled.
  • – Added the connect() method to class Interconnect to connect interconnects build on two different xsections.
  • – Added show_pins=False option to export_plt() to avoid pin visualization.
  • – Logging and messages:
    • – Updated logging and exception options on interconnect messages.
    • – Handle util.py output with logger rather than print statements.
    • – Updated an demofab PDK usage of sbend to remove an interconnect fallback message.

Release date: 2019-10-20

Changes:

  • – Added option to switch off pin2pin drc when using a translation method on a Node (move, offset, rotate, skip) via drc=False
  • – Fixed path generation for building block export via export_gds(bb=True)
  • – Updated stubs to handle new asymmetric trenches features released in 0.5.4
  • – For layers in xsection fixed “growy”, which was negative at the waveguide start after asymmetric trenches where introduced. (default value of 0 had no issues)

Release date: 2019-10-09

Changes:

  • – text:
    • – added OCR-B font
    • – added option to override cell name of text

  • – annotations:
    • – updated text type to allow for non-zero text types

  • – mask export:
    • – when using keyword layermap in export_gds() remove the layers mapped to None. They where moved to the Nazca “dump-layer” instead.

  • – netlist:
    • – added the ‘pathfinder’ function to check for circuit integrity: nd.pathfinder(start=<pin>)
    • – added option to raise an exception upon netlist errors (see function netlist_raise())

  •  – bounding box: updated bounding box concepts, available are the following:
    • – bbox: a square bounding box enclosing all internal components and bboxes
    • – userbbox: free bbox polygon (may be non-rectangular: has no bbox pins)
    • – hull: convex hull (may be non-rectangular: has no bbox pins)

  • – Interconnects:
    • – added functionality for asymmetrical trench layers and multiple waveguides in a single interconnect
    • – implemented initial array connectivity with circuit integrity. To be integrated with the Interconnect class.
    • – removed an obsolete raise for bend radii < 0
    • – added Rmin attribute to cobra_p2p
    • – added option to raise an exception upon interconnect errors (see function interconnect_raise())
    • – fixed strt_p2p() interconnect (tip: use bend_strt_bend_p2p() for waveguide connections)

  • – pin2pin DRC:
    • – added functionality to check for directional connections (xsection attribute symmetry = False)
    • – moved settings to pin2pin drc settings to cfg.py
    • – no longer by default DRC check xs and width on discontinues jumps e.g. via move(dx, dy)

  • – throw an exception when forgetting an @hashme decorator when expected after using it in Cell().
  • – allow for setting a custom layer in show_cp() and show_pin()
  • – added formatted pin coordinate methods pin.fxya() and pin.fxy() with default 3 digits
  • – updated __repr__ to clearly indentify Cells vs. Instances
  • – refactored cell_iteration from recursive to iterative
  • – number of smaller updates and fixes.

Release date: 2019-07-16

Changes:

  • – Added a function for easier setting and accessing angle DRC on instances.
  • – Fixed issue in 0.5.2 for tapers and ptapers of length = 0
  • – Improved docstrings.

Release date: 2019-06-26

Changes:

  • – replace f-string for .format() strings to remain Python 3.5 compatible for now.
  • – added easier access to the Cell object of an Instance object. Previous syntax instance.cnode.cell can now also be written as instance.cell
  • – updated mask_element warnings with cellname information.
  • – fixed midpoint() and midpointer() to give a well defined angle lying between the smallest angle opening between two pins angles in orientation, and between 0 and 360 degrees in value.
  • – added layer keyword in show_pin(). It was always using layer=1 before.
  • – correction in load_gdsBB() to add a bbox when stubs=True
  • – added a default mask layer ‘bb_flag’ to identify IP-blocks.

  • – pin-2-pin DRC:
    • – switched on pin-2-pin DRC including logging and gds visualisation. DRC checks on width, angle and xsection. Rules are xsection dependent.
    • – added pin2pin DRC examples to the demofab PDK.

  • – GDS export:
    • – when exporting GDS, first write to a tmp file. This provided a smoother interaction with KLayout auto-reload to only pop-up when the export is complete.
    • – force utf-8 coding in ascii-based gds output for Windows systems
    • – updated gds export to always have an STRANS record and MAG record for higher cross-tool compatibility
    • – fixed reading of magnification record MAG in gds array’s.
    • – added submit to export to set a boolean flag that export files about the design
    • – pass texttype to gds annotations. Was always 0 before.

  • – Interconnects:
    • – added method cobra_p2p(), which was previously called pcurve(). It now also comes with input width1 to output width2 options.
    • – added the option to an Interconnect object to override the straight-to-bend offset function stored in the xsection.
    • – fixed width override in method rot2ref(). It always used the default width before.

  • – Netlisting:
    • – improve Interconnect cellnames with ‘ic_’ prefix for more meaningful names in a netlist expansion.
    • – fixed internal pin name of ‘org’ pin from an id number to ‘org’.
    • – keep original pins in p2p connection parsing where possible. This provides a more direct connectivity for netlists.

Release date: 2019-05-14

Changes:

  • – implemented a logging module in Nazca based on standard Python logging. Usage example: after ‘import nazca as nd’ add nd.logfile(name=__file__, stdout=False) to save logging output to file and no longer to stdout.
  • – updates in interconnects:
    • – added the ‘viper()’ method to define parameterized guides as function of parameter t according to x(t), y(t), w(t) for position (x, y) and width w.
      – updated method ‘polyline2polygon()’ to handle a variable line widths along the polyline.
      – updated the ‘sbend()’ method in Interconnect for more options in the straight sections.
      – added ‘varname’ and ‘doc’ attributes to help document Interconnect objects.
      – added ‘tube()’ interconnect concept and method.
      – fixed the ‘ubend()’ interconnect method in case of using ‘end-angle’ in a call.
  • – updates in method ‘load_gds()’:
    • – added option to load all cells when asdict=True by setting topcellsonly=False.
      – allow for an instantiate=False option to dissolve a gds in a parent cell (under setting native=True. This can be useful to apply patches or updates to the gds without extending the hierarchy of it in the layout.
      – added the ‘reuse’ option to waive cellname conflicts.
      – set gds path-type to 0 if the loaded gds does not define any (under setting native=True).
  • – added the ‘properties’ dictionary to Cell objects for easy centralized setting and retrieval of cell attributes.
  • – added the ‘md5’ parameter option to method ‘export_gds()’ to generate the md5sum of the gds.
  • – added a module for angle DRC of cells to check their place with respect to the topcell.
  • – updates related to method ‘cell_iter()’:
    • – in method ‘cell_iter()’, extended named_tuples for ‘open’ and ‘close’ cell conditions. If names are defined in both cases it allows for more flexible flow control across ‘open’ and ‘close’ cases.
    • – renamed in the yielded named-tuple the parameter ‘cell_name’ to ‘new_cell_name’.
    • – added gds scaling to class ‘clsNazca’ for replacing instances during cell iteration.
  • – added the hull-based bbox as option to Cell parameters and applied fixes to the hull.
  • – extended in-gds cell replacement to be able to use multiple libraries at once.
  • – updated Pin creation to automatically use the xsection width setting if only the xsection is provided to Pin.
  • – provided handles in the cfg module for setting maximum instantiation of the Nazca hierarchy: instantiate_pin, instantiate_stub, instantiate_mask_element (defaults all False). Boolean flags to ‘mask_elements’, ‘Interconnect’ and stubs have been added for this.
  • – layer colors:
    • – updated color handling by adding colorIDs based on (layer, datatype)
    • – added function colors2csv to export Nazca color table to csv.
    • – added nazca colors to lyp export
  • – improved ‘pinstyle’ handling. It is possible to predefine any number of pin-styles for visualization individual xsection and interconnect connectivity.
  • – updated the ‘version’ attribute in cell from a string content to a Python dictionary format.
  • – updated add-layer() method to handle str type layers.
  • – added ‘top-down’ option in method ‘cell_iter()’ (default is bottom-up)
  • – fixed show_cp() to properly reference current pointer cp.
  • – added ‘layermapping’ option for layout export. This is in addition to existing mapping during loading.
  • – added the ‘description’ attribute to the layer table
  • – added the ‘description’ attribute to the xsection table.
  • – improved ‘origin’ tracking of new xsection generation.
  • – removed default width and radius setting for Xsections (change setting to None). Not all xections are waveguides.
  • – fixed and improved handling of unknown layers.
  • – many other small improvements and docstring updates.

 

Release date: 2019-02-20

Changes:

  • – changed name of pdk_template_core.py to bb_util.py
  • – use layer_name as layer ID instead of (layer, datatype). Note that get_layer() will now return the layer_name string.
  • – in PDKs the xsection to layer maps now use layer_name as reference key.
  • – added properties dictionary in cells to store information on a cell in one place (length, width, parameter values, owner, etc.).
  • – updated @hashme decorator to keep unique cellnames now also for functions without default values.
  • – added raised_sine interconnect.
  • – provide access to change all default Pin attribute settings when creating a new pin.
  • – changed keywords in pcurve function to nazca convention, i.e. ‘radius’, ‘width’, ‘offset’.
  • – added technology attribute to internal nazca layers to handle multiple technologies in a single design.
  • – load_gds() can now load all gds cells at once in a dictionary of cells with asdict=True avoiding multiple loads.
  • – load_gds() can now read bytestrings besides files.
  • – fixed box around text with a \n linefeed in the text. It now follows the text.
  • – added switch in cfg to temporarily by-pass type-checking raised exceptions in BB-generating function calls.
  • – updated show_cp() to show a specific pin, not only the cp.
  • – fixed bug in generic_bend for downward starting curves
  • – fixed scaling option in nazca-design logo.
  • – removed duplicate placements in whitebox cell replacements.
  • – added check on overlapping polyline points.
  • – updated BB export files generated by export_gds.
  • – cleaned up parsing of put() statements.
  • – lots of small improvements (docstrings, checks and small fixes).

 

 

Release date: 2018-07-31

Changes:

  • -Implemented decomposing and rebuilding of cells at user level; Map layers and cellnames and/or change, add, delete, replace, scale and/or translate polygons, polylines, cells, annotations and/or gds array settings.
  • -Added flip, flop and scale to polygon and polyline placement (put).
  • -Added more methods to the polygon and polylines for simpler usage and more flexibility.
  • -Improved scaling behaviour for gds loading.
  • -Introduced convex hulls as basis of rotation-proof bounding box calculations.
  • -Implemented option to store building block connectivity inside the GDS.
  • -Improved default layer and xsection handling in Interconnects for tutorial mode.
  • -Added strt_p2l interconnect.
  • -Lots of small improvements (docstrings, checks and small fixes).

 

Release date: 2018-06-06

Features:

  • -Implemented a clear separation between cell-tree iteration and layout generation, which will enable many new features (to be extended).
  • -Based on the above, implemented a cell method to rebuild a cell inside Nazca before export to any available format, e.g. split a cell in a subcell per gds layer.
  • -Updated range_check method with +/-inf settings.
  • -Lots of small improvements (docstrings, checks, small fixes).

Release date: 2018-04-15

Features:

  • -Added bb=True option to export_gds() to facilitate building block creation, sharing and loading.
  • -Extended mirroring options in cell placement:
    flip=True: mirror by “rotation” in the connecting pin axis
    flop=True: mirror by “reversing the direction” of the connecting pin.
  • -Provided more “predictable” ‘org’ behavior by filtering ‘org’ from raise-pins().
  • -In load_gds the native=True setting can not change cell placement anymore:
    It now sets ‘org’ as default in/out pins (as it does for native=False), rather than adding ‘a0’ and ‘b0’ as default in/out.
  • -A number of small fixes.

Release date: 2018-03-06

Features:

  • – Implemented loading of gds files into fully native Nazca cell(s).
  • – Added parametric curves.
  • – Implemented direct pointer solving (at time of placement, rather than cell closure).
    It gives immediate access to pin coordinates (x, y, a).
  • – Implemented automated bounding box for cells (including array’s and native loaded gds).
  • – Added bounding box info to polygons and polylines.
  • – Export full gds to matplotlib/png (including array’s and native loaded gds).
  • – Export full gds to svg (including array’s and native loaded gds).
  • – Added module for tracing path-lengths.
  • – Pin, Polygon, Polyline and Annotation now all have a (mandatory) capital first letter to indicate they are classes.
  • – Interconnects that can not be drawn correctly are shown in a dedicated error layer.
  • – Improved stub handling, customize scaling, shapes or use cells as a stub.
  • – Improved ubend to connect guides < 2*radius apart.
  • – Improved doc-strings.
  • – Improved messages.
  • – Improved checking for cell name conflicts.
  • – Added cell name filter to make cellnames comply with specific foundry restrictions.
  • – Improved handling of missing xsections and layers.

Release date: 2017-11-22

The first public release.