Development Directions
- Rendering---
- Implement rendered fonts. Font text should scale with
the window zoom factor, allow different font styles, read
from a standard font vector format; allow rotation, scale,
and offset. Ideally, text should rotate to any angle, but
at 90 degree increments is considerably easier to implement.
Font text should make use of GDS text extensions, although
specifying font vectors in the GDS itself is not a common
usage, and probably is not necessary.
TIME: about 1 month
SKILLS: OpenGL, X11
STATUS: Done (magic version 8.0)
- Is there a way to speed up the OpenGL rendering by
handling arrays such that all operations on one
array component can be copied to each array position
rather than tediously redoing the calculations for
each array position?
- If there are functions in OpenGL that can handle
this, they should be used. e.g., bit block transfers.
- Alternately, magic could put all drawing operations
for an array into a single list, then execute that
list at different matrix translations.
TIME: 1-2 weeks
SKILLS: OpenGL
STATUS: Open
- For most video cards and their hardware-accelerated drivers,
it may be true that texture mapping renders faster and looks
better (probably a lot better) than stipple patterns. Texture
mapping capability should be added to the style file for
OpenGL, and the rendering speed should be compared against
the stipple patterns (note that one would normally make
the texture map the single paint style for a layer, so rendering
it would be a single-pass painting operation, as opposed to the
multi-pass operation used for layers declaring multiple styles
to get the right color/effect. And the texture map would scale
with the layout view scale, so one would expect a better-looking
result on full views of complete chip designs.
TIME: 1 month
SKILLS: OpenGL
STATUS: Open
- Develop the Windows API graphics modules (esp. for OpenGL/WGL).
TIME: 3 months
SKILLS: OpenGL, WinAPI, X11, magic internals
STATUS: Mostly done, but unfinished and not updated for
a long time.
- Identify rendering speed bottlenecks for large designs
and generate a plan for getting rid of them.
TIME: ongoing
SKILLS: various
STATUS: Open
- Database---
- Complete the "images" section "device" type as separate
from a contact type. Prove that a consistent technology
file can be generated with separate planes for poly,
poly2, and active.
TIME: At least 3-4 months
SKILLS: various
STATUS: Partially complete
- Implement what I call the "pseudo-flat" database. This
may or may not be practicable. The idea is to extend the
bits in the tile type record to include bits that indicate
that a tile belongs to a subcell, not the cell def itself.
This way, portions of the database can be flattened in a
reversible manner. DRC will then be run on the pseudo-flat
database. This method should resolve problems with DRC
speed bottlenecks as well as all issues arising from
incompatible layers overlapping between cells. The
drawback is that it can potentially eat up vast amounts
of memory, so some attention will need to be made to
implement a system to remove flattened areas that have
been inactive, or to "page out" areas when memory usage
gets large.
TIME: At least 6 months
SKILLS: various
STATUS: Open
- DRC---
- DRC Halo is a bad bottleneck. This is due almost entirely to
the problem that DRC rules are, as binned by rule distance,
bimodal or trimodal. Most rules are over short distances.
However, a handful of rules are over longer distances:
Wide metal rules, and Pad rules. The larger the halo, the
slower everything goes. It is likely that DRC could be
significantly improved by splitting the rules into two or
three sets based on distance. We run the complete DRC
cycle for each of the three sets. If the difference in
halo is significant enough, it will actually save time.
- Need to investigate how DRC completion time changes as a
function of halo size for large designs.
TIME: 2-3 weeks
SKILLS: EDA, magic internals, algorithms
STATUS: Open
- Need electrical rule checks such as the antenna rule.
This would probably be part of a set of rules (including
the existing coverage rules) to be performed off-line, not
as part of the interactive DRC code. Need to identify all
the rule types that magic cannot check and come up with some
plan on how to include them.
TIME: 2-3 months
SKILLS: EDA, magic internals, TCL programming
STATUS: Antenna rules done (early 2020) More planned
for mid-2020.
- Need correct DRC checks on non-Manhattan geometry (see below)
- OpenAccess---
- Implement the viewer. First for cells, then for all
geometry.
TIME: 2-3 months
SKILLS: OpenAccess, OpenGL, X11, magic internals, EDA
STATUS: Open
- MilkyWay---
- Implement once the OpenAccess database and methods are
generally well-understood, if it seems like a good idea.
TIME: 2-3 months
SKILLS: OpenAccess, MilkyWay, OpenGL, X11, magic internals,
EDA
STATUS: Open
- Non-Manhattan Geometry---
- DRC checks (see above). The "advertised" rules should work
but some don't. In addition, it is necessary to write a
routine to check corner-to-diagonal rules. Cases where
corners may be closer to the diagonal somewhere other than
the tile corners is a pretty restricted case. Possibly
this could be done, like the antenna rules (see above),
as a non-interactive check.
TIME: 2 months
SKILLS: EDA, magic internals, algorithms
STATUS: Open
- There should be a tile-merging function for split tiles,
as currently the more a tile is split, the more fractured
the tile plane becomes. Possibly this is easier to do as
a background function that occasionally cleans up the
plane, and ensures a clean plane before writing output.
TIME: 2 months
SKILLS: magic internals, geometry, algorithms
STATUS: Partly done. At least, magic now un-splits
fractures on an "undo" command, which
definitely helps alleviate the plane
fracturing problem.
- Place & Route---
- TimberWolf needs to read/write LEF/DEF.
TIME: 1-2 months
SKILLS: EDA, C programming, maybe lex/yacc
STATUS: Done (November 2006), using Tcl scripts.
Some of this is posted under the Open
Circuit Design "Digital Flow" page.
- Simulation---
- Need to get tclspice/magic/xcircuit all working together.
See below for tclspice and xcircuit.
TIME: variable; at least 2-3 months
SKILLS: EDA, Tcl/Tk programming
STATUS: Open
- Would be nice to have a SPICE method which handles the
IRSIM interface, such that IRSIM and SPICE can be run
at the same time. Would need a clever interface to
partition circuits into standard-cell digital vs. analog
parts and submit each part to the proper simulator.
TIME: 3 months
SKILLS: EDA, Tcl/Tk, C programming
STATUS: Open
- Extraction---
- The "extresist" RC extraction needs to be updated to
handle new device types, and a number of other aspects
of the newer code changes (such as recognizing output of
the "resistor tee" option).
TIME: 1 month
SKILLS: EDA, magic internals
STATUS: Partly done (early 2020). Extresist now
handles all device types, but there is a very strong
need to remove the dependence on reading the ".sim"
format and just work all calculations from the values
in the ".ext" file. For example, extresist cannot
now handle the substrate node because the ".sim"
format has no concept of a substrate.
- There needs to be a general-purpose way of describing
devices such that they do not need to always be hard-wired
into the code. One possible way would be to use a method
similar to the CIF-DRC method, in which "cifoutput" temp
layers are used to perform boolean operations. There would
be a temp layer for each port of each device, and these
temp layers would be used during normal extraction as marker
layers to identify each device.
TIME: 2 months
SKILLS: EDA, magic internals
STATUS: Open
- All device types should accept a marker layer type that
uniquely identifies the device. In many cases it is simpler
to mark devices with an identifier rather than create new
layer types for every single different possible device.
Layers like "thickox" and "sdblock" can also be used to
distinguish between different device types.
TIME: 1 week
SKILLS: EDA, magic internals
STATUS: Done (early 2020)
- Magic should be able to generate a hierarchical SPICE
deck. The "ext2spice" routine always flattens the input, and
so the "ext2spice" and "extflat" code is not really appropriate
for this task. It should be part of the "extract" code, and use
a 2-pass algorithm: The first pass generates the .ext files,
and determines what are the ports of each subcircuit, based on
connections into the subcircuit. The second pass would read
information from each .ext file, and use the information about
ports to write each subcircuit record into a single SPICE deck.
TIME: 1 month
SKILLS: EDA, magic internals
STATUS: Done (started 2010, mainly finished in 2014)
- CIF/GDS---
- GDS should be able to read/write contacts as cell arrays.
That is, it should be able to generate subcells from
contacts on the fly when writing, and to flatten them
into magic contact regions when reading.
TIME: 3 weeks
SKILLS: EDA, GDS/CIF format, C programming
STATUS: Done, but not well tested. Some bugs were
found in early 2008 in the read routine, which now
has been pretty thoroughly tested.
- XCircuit---
- Need to work out how to get "multimeter"-like symbols
into xcircuit that can pick up values from a simulation
and print them. Speed concerns require that in addition
to the simple "refresh", XCircuit should be able to handle
erase and redraw of small areas of interest. This may mean
simply having a secondary redraw function that looks for
expression parameters and updates them.
TIME: 2-3 weeks
SKILLS: EDA, Tcl/Tk, xcircuit internals
STATUS: Partially done
- Parameterization of color really should supercede the
handling of color as done currently in XCircuit, as well
as the kludgy way it's handled in the output.
TIME: 2 weeks
SKILLS: xcircuit internals
STATUS: Open
- Get around to implementing all the ASG stuff.
TIME: variable, at least 3-4 months for the essentials.
SKILLS: EDA, xcircuit internals, SPAR internals,
SPICE, EDIF, Verilog formats
STATUS: In progress, but slooooooow. Rebooting summer
2020.
- Netgen---
- Implement hierarchical LVS. Netgen can compare an
arbitrary subcircuit call in circuit1 to another in circuit2.
However, it needs the capability to understand that pin ordering
in circuit1 may be permuted with respect to circuit2, but that
unlike MOSFET source/drain permutations, the ordering must be
the same for all subcircuit calls. Magic needs to be able to
output an LVS-ready hierarchical SPICE deck (no flattening, one
subcircuit call per cell definition; see above. This is not
just a trivial extension of "ext2spice"). Every subcircuit should
be compared from the bottom up. When subcircuits do not compare
properly, they should be subsumed (flattened) into the parent
circuit. There should be some method to insist that a subcircuit
is the same as its counterpart and should not be flattened if it
cannot be compared; this should be a command-line command.
TIME: 1 month
SKILLS: EDA, Netgen internals, Magic internals
STATUS: Done.
- Ng-SPICE---
- Since SPICE is still based on the same batch-job code, the
interactive features of SPICE-3 are implemented by
interrupts. This works best with other programs by
using piped I/O. There is then no inherent advantage
to having a Tcl interpreter wrapping Ng-SPICE, which
has its own interpreter anyway. XCircuit demonstrates
interactive simulation with Ng-SPICE; this should be
demonstrated in Magic as well, with a tutorial and
supporting Tcl procedures. XCircuit needs a dedicated
library for SPICE testbench circuits. Finish the
XCircuit tutorial 3 with a simulation example!
TIME: 3 weeks
SKILLS: EDA
STATUS: Partially done.
- Bottlenecks---
- For all the tools, it is necessary to identify performance
bottlenecks (both memory and speed) and determine what to
do about them.
TIME: variable
SKILLS: EDA
STATUS: Open
- Technology Files---
- Develop a good set of technology files for all the major
modern processes.
TIME: ongoing
SKILLS: EDA
STATUS: Partly done
- Develop some distribution method for proprietary technology
files; either get permission to post the magic technology
files from the vendor or have some method in place with the
vendors to verify who has NDAs, or give the technology files
to the vendors to distribute with their kits.
TIME: ongoing
SKILLS: EDA
STATUS: Working with foundries on this one.
- Documentation---
- Updates of existing documentation for magic, xcircuit, IRSIM,
Timberwolf, Tclspice
- Transfer of text documentation to LaTeX (and thence to HTML and PDF).
TIME: 1-2 months
SKILLS: EDA, tech writing
STATUS: Partly done
- New documentation covering new topics and extensions.
- Tutorials
TIME: 2-3 months
SKILLS: EDA, tech writing
STATUS: Partly done
- Maintenance
TIME: ongoing
SKILLS: EDA, tech writing
STATUS: Open
- Distribution---
- Expand mailing lists, forums, download sites
- Ongoing maintenance and packaging of binary versions
- Technical support
TIME: ongoing
SKILLS: HTML, website construction and maintentance,
software packaging, EDA
STATUS: Open
This link points to a primer on the magic source code, its
files, data structures, and methods, and other helpful tidbits
gleaned from years of delving into the code.
Helping with Magic Development
Current development has been modernized by the advent of web-based
repositories like github and gitlab. The best way to report bugs is to
file an issue on the github mirror site at
https://github.com/RTimothyEdwards/magic. The best way to join
development is to fork the repository, work on a branch, and submit
a pull request. Pull requests are generally honored if they appear
reasonable and don't break anything.
For general discussion, the discussion email group's mailing address
is
magic-dev@opencircuitdesign.com
See the Magic home page for mailing list archives and instructions on
how to subscribe to the mailing list.
The Magic Development Teams
Here is the original Magic Development team that kept Magic alive and
kicking through the late 1990s and the first decade of the 2000s
(in alphabetical order):
- Tim Edwards (Johns Hopkins APL)
- Mike Godfrey (Stanford, Pixeldevices)
- Wes Hansford (MOSIS)
- Rajit Manohar (Cornell)
- Mika Nyström (Caltech)
- Philippe Pouliquen (Johns Hopkins University)
- Stefanos Sidiropolous (Aeluros)
- Jeff Solomon (Stanford)
- Jeff Sondeen (USC)
- Holger Vogt (Fraunhofer-Institut IMS, Duisburg, Germany)
Some people deserve to be mentioned for critical help with certain aspects
of the code development. From the same period as above (1990s and 2000s),
they are (in addition to the ones mentioned above):
John Wood (MultiGiG)
For generously funding the open-source magic development,
testing, discussion, and feedback.
Stefan Jones (MultiGiG)
For help with Tcl and development of Tcl-SPICE.
Charles Krinke
For extensive testing, support, discussion, suggestions, and feedback
Mark Martin (JHU/APL)
For using the bleeding-edge develpment versions, testing, discussion,
and instantaneous feedback
Stefan Robert (U. Sherbrooke, Montreal)
Michael Doster
For help with the Mac OS X port
"Spaceborne" Calin
Erik Peterson (Yanntek)
For helping to answer questions on the magic-dev mailing list
Erwin Prinz
For extensive help with RedHat and RPM archives.
Cecil Aswell
For help with Octtools and Timberwolf.
James Stine (IIT)
For work on standard-cell libraries
Richard Lethin (Reservoir Labs)
Tim Chuang (SITI, Taiwan)
For heavy use of the latest distribution and/or development versions
and a lot of feedback.
Jason Schonberg
For a lot of help with cleaning up the source code in Magic-7.3.
Development from 2005 to 2012 was largely underwritten by my employer at the
time, MultiGiG (since bought by Analog Devices). Development from 2015 to
2020 was largely underwritten by my employer at the time, efabless.
For more recent development, acknowledgements can be found in the code history.
email:
|
|
Last updated: January 9, 2024 at 9:00am