Symbol Editor

This guide targets designers already familiar with symbol editing in custom IC design tools such as Cadence Virtuoso. The Symbol Editor is where you create the graphical representation of a device or cell for later use in the schematic editor.

The Revolution EDA Symbol Editor is designed for representing integrated circuit components with geometry, pins, labels, and netlisting attributes. It provides basic drawing tools for creating:

  1. Lines
  2. Circles
  3. Arcs
  4. Rectangles
  5. Polygons

Edits can be undone or redone using toolbar buttons or the U / Shift+U keys.

Symbol editor window

Quick Orientation (for Virtuoso Users)

Virtuoso ActionRevolution EDA EquivalentNotes
Add wire/lineCreate -> Create Line... or WDraws horizontal/vertical line segments
Add rectangleCreate -> Create Rectangle... or RClick two diagonal corners
Add circleCreate -> Create Circle...Click centre, drag to set radius
Add arcCreate -> Create Arc...Two-corner bounding box; direction set by diagonal angle
Add polygonCreate -> Create Polygon...Left-click to add points; double-click to finish
Add pinCreate -> Create Pin... or PSet name, direction, and type in the dialog
Add labelCreate -> Create Label... or LNormal, NLPLabel, or PyLabel types
Edit propertiesSelect item, press QShape, pin, or label properties
Edit cellview attributesEdit -> Cellview Properties...Symbol-level netlist attributes
Stretch shapeSelect item, press SAdjust endpoints/radius of lines, arcs, circles
UndoUUp to 99-level undo stack
RedoShift+UReapply the last undone operation
Fit to windowFScales the view to show all items

Typical Symbol Flow

  1. Open or create a symbol view from the Library Browser.
  2. Draw the basic outline using lines, rectangles, circles, arcs, or polygons.
  3. Add symbol pins.
  4. Add labels for instance-visible parameters or metadata.
  5. Open Edit -> Cellview Properties... to review labels and symbol attributes.
  6. Use the symbol in the schematic editor.

Symbol Shortcuts at a Glance

KeyAction
WCreate Line
RCreate Rectangle
PCreate Pin
LCreate Label
SStretch selected item
CCopy selected items
UUndo
Shift+URedo
QObject Properties
FFit to Window
DeleteDelete selected items
Ctrl+RRotate 90° CW
Ctrl+ASelect All
Shift+AAlign Items

File Menu

Symbol editor file menu

The File menu handles saving, printing, and exporting the symbol cellview.

ActionShortcutNotes
File -> Check-SaveNoneValidates and saves the symbol to disk.
File -> SaveNoneSaves without running checks.
File -> Update DesignNoneReloads all referenced cell data from disk.
File -> Print...NoneSends the symbol view to a printer.
File -> Print Preview...NonePreview print output before printing.
File -> Export...NoneExports the symbol as a PNG/JPEG/BMP image file.
File -> Close WindowCtrl+QCloses the window; symbol is auto-saved on close.

View Menu

Symbol editor view menu
ActionShortcutNotes
View -> Fit to WindowFScales the view to show all symbol items.
View -> Zoom InNoneIncreases magnification; mouse wheel also zooms.
View -> Zoom OutNoneDecreases magnification.
View -> Pan ViewNoneClick to re-centre the view at the clicked point.
View -> RedrawNoneForces a full repaint of the scene.

Edit Menu

Symbol editor edit menu

The Edit menu provides shape manipulation, transformation, and undo/redo commands.

ActionShortcutNotes
Edit -> UndoUReverts the most recent change (up to 99 levels).
Edit -> RedoShift+UReapplies the last undone change.
Edit -> PasteNonePastes copied items at the cursor location.
Edit -> DeleteDeleteRemoves selected items from the symbol.
Edit -> CopyCCopies the current selection for pasting.
Edit -> MoveNoneMoves selected items interactively on the canvas.
Edit -> Move By...NoneMoves the selection by a precise X/Y offset via dialog.
Edit -> Move OriginNoneRepositions the scene origin; click to set the new point.
Edit -> StretchSAdjusts endpoints of lines, arcs, and radius of circles.
Edit -> Rotate...Ctrl+RRotates selected items 90° clockwise around a pivot point.
Edit -> Horizontal FlipNoneMirrors selected items across the vertical axis.
Edit -> Vertical FlipNoneMirrors selected items across the horizontal axis.
Edit -> Align Items...Shift+AOpens the alignment dialog for edge or guide-line alignment.
Edit -> Selection -> Select AllCtrl+ASelects every item in the symbol view.
Edit -> Selection -> Unselect AllNoneClears the current selection.
Edit -> Cellview Properties...NoneOpens the symbol attributes and label summary dialog.

Create Menu

Symbol editor create menu
ActionShortcutNotes
Create -> Create Line...WDraw a line segment: click to start, release to end.
Create -> Create Rectangle...RClick two diagonal corners to define the rectangle.
Create -> Create Polygon...NoneLeft-click to add points; double-click to finish.
Create -> Create Circle...NoneClick the centre point, then drag to set the radius.
Create -> Create Arc...NoneClick two diagonal corners; arc direction follows the diagonal angle.
Create -> Create Label...LOpens the label dialog; choose Normal, NLPLabel, or PyLabel type.
Create -> Create Pin...POpens the pin dialog to set pin name, type, and direction.

Options Menu

Symbol editor options menu

The symbol editor inherits the Options menu from the base editor window.

  • Options -> Display Config...: configure the grid display (dot or line grid) and the major/snap grid spacing.
  • Options -> Selection Config...: choose between partial (intersects items) and full (contains items entirely) selection mode.
Display options dialog Selection options dialog
ActionNotes
Options -> Display Config...Major grid, snap grid, dot vs. line grid background.
Options -> Selection Config...Partial selection allows rubber-band to intersect shapes; full selection requires full containment.

Tools Menu

The symbol editor currently adds a simple tools section focused on edit safety.

ActionNotes
Tools -> Read OnlyToggle; when checked, no edits are permitted in the current view.

Drawing Actions

Lines

Lines are drawn by pressing the left mouse button at the start point and releasing it at the end point. Lines can be horizontal or vertical. A drawn line can be edited by selecting it and pressing q.

Symbol line properties dialog

Alternatively, enter Stretch mode by pressing s or selecting Stretch from the right-click context menu. The line will turn red, and its endpoints will be indicated by circles. Click the endpoint to move, drag it to the new location, and release the mouse button.

Stretching a symbol line

Circles

Circles are drawn by pressing the left mouse button at the desired centre point and dragging to set the radius, then releasing. A circle can also be edited by opening the Properties dialog (select the circle and press q, or select Properties from the right-click context menu),

Creating a symbol circle Symbol circle properties dialog

Circles can be resized by selecting a circle and pressing s, or by selecting Stretch from the right-click context menu. The circle will turn red, and a hand cursor will indicate that stretching is active. Drag the cursor to resize the circle to the desired radius.

Stretching a symbol circle

Rectangles

Rectangles are created by pressing the left mouse button at one corner and then releasing it at the opposite diagonal corner.

Creating a symbol rectangle

Rectangles can be similarly edited using the properties dialog, or by stretching any side: select the side and press s, or choose Stretch from the right-click context menu.

Symbol rectangle properties dialog

Arcs

Arc drawing is performed similarly to rectangle drawing. Depending on the diagonal angle for the rectangle drawn, the arc will point in one of the four directions:

Creating a symbol arc
Diagonal AngleArc Direction
90 > $\theta$ > 0Up
180 > $\theta$ > 90Left
270 > $\theta$ > 180Down
360 > $\theta$ > 270Right

Arcs can also be edited using the property dialog or by stretching. To stretch an arc, select the arc and press s, or select Stretch from the right-click context menu. The arc will turn red Click on the desired side to be stretched and move that side while holding the mouse button pressed to stretch the arc. Release the mouse button when arc is stretched to the desired shape.

Stretching a symbol arc Symbol arc properties dialog

Polygons

Polygons are created by selecting Create → Create Polygon… from the menu or clicking the Create Polygon toolbar button. To place the first point, left-click on the canvas. A guide line will be shown between that point and the current cursor location. Left-click again to place the second point; a line will be drawn between the first and second points, and the guide line will advance to follow the cursor from the second point. Each subsequent left-click adds a new vertex and extends the polygon. Once three or more points have been placed, the enclosed area is highlighted. Double-click to finish the polygon, or press Esc to cancel. Each additional point yields a polygon with one more side (quadrilateral, pentagon, and so on).

Creating a symbol polygon first step Creating a symbol polygon second step

A polygon can be edited in several ways. The simplest is to select the polygon and press S to enter Stretch mode. Click one of the corners to select it; a red circle will appear at that corner. Drag the cursor to the desired position and release the mouse button to set the new corner location.

Polygons can be also be edited using a dialogue. Select the polygon and bring up the Symbol Polygon Properties dialogue. All the points will be listed with their x and y coordinates. The designer can delete any point selecting the checkbox on the first column or edit that point. Alternatively, a new point can be edited using the last empty row. When that row is edited, a new row is created for further point entry. There can be up to 999 points in a polygon.

Stretching a symbol polygon Symbol polygon properties dialog

Pins

Pins denote the connections of the element or circuit defined by the symbol to external circuits. Pins can be created by clicking the toolbar icon or by selecting Create → Create Pin… from the menu. Once the dialogue is closed, the newly created symbol pin can be placed on the symbol.

Creating a symbol pin Placing a symbol pin

Note: Pin direction and pin type information is currently not used or saved for symbol cell views.

Labels and Symbol Metadata

Labels carry all the relevant information for an instance of a cellview. Thus labels may have different values (texts) for each instance.

There are three types of labels:

  1. Normal: These labels add static text annotations to the schematic. They are not used in netlisting.

  2. NLPLabel: These types of labels are evaluated using simple rules. Their format is:

    [@propertyName:propertyName=%:propertyName=defaultValue]

    The parts of the NLPLabel is separated by columns(:). Note that only @propertyName part is mandatory. The second and third parts do not need to exist in all NLPLabels.

    If only first part exists, there are a limited number of predefined labels that can be used. These are:

    Label NameLabel DefinitionExplanation
    cell name[@cellName]Cell Name, e.g. nand2, nmos, etc
    instance name[@instName]Instance name for netlisting, e.g. I1, I15, etc.
    library Name[@libName]Library Name for the symbol
    view Name[@viewName]View Name, normally includes symbol in the name
    element Number[@elementNum]Element Number, forms a part of Instance Name
    model Name[@modelName]Model name for the element in the netlist

    Model name label [@modelName] defaults to modelName entry in symbol attributes. If the third part exists, the label text is determined by whether a label value is entered for the instance. If the label value is entered, then the second part is used to display the label, if not the third part is shown and used.

    NLP labels are referenced by the first part of their label definition. For example, if the label definition is [@w:w=%:w=1u], then the label can be referenced in the symbol attributes as @w.

    Symbol labels dialog
  3. Python Label: Python labels allow the label values to be determined dynamically based on the values of other labels or any other values defined in the process design kit (PDK). The relevant functions that can be used in Python labels are defined in the PDK/callbacks.py file. Each symbol should have a corresponding class defined in callbacks.py. The code below is extracted from IHP SG13G2 PDK. Quantity is a method from quantiphy package to recognize the scientific numbers and units.

    from quantiphy import Quantity
    
    class baseInst:
        def __init__(self, labels_dict: dict):
            self._labelsDict = labels_dict
    
        def __repr__(self):
            return f"{self.__class__.__name__}({self._labelsDict})"
    
    class rsil(baseInst):
        def __init__(self, labels_dict: dict):
            super().__init__(labels_dict)
            self.w = Quantity(self._labelsDict["@w"].labelValue)
            self.l = Quantity(self._labelsDict["@l"].labelValue)
            self.b = Quantity(self._labelsDict["@b"].labelValue)
            self.m = Quantity(self._labelsDict["@m"].labelValue)
    
        def R_parm(self):
            return (
                9.0e-6 / self.w
                + 7.0
                * ((self.b + 1) * self.l + (1.081 * (self.w + 1.0e-8) + 0.18e-6) * self.b)
                / (self.w + 1.0e-8)
            ) / self.m

For example, an rsil symbol has an R_parm() method defined. We can use it to define the value of a label for the rsil symbol. When this symbol is instantiated in a schematic, the value of the R label will be determined by the R_parm() function defined in the callbacks.py file of IHP PDK. This means that instance callbacks can use all the facilities of Python, including advanced libraries, to calculate parameters dynamically. Note that R value can depend on the evaluate value of other NLPLabels.

Python label dialog in symbol editor

Labels can also be hidden to reduce clutter in the schematic view of a symbol. Hidden labels are as valid as visible labels. The Label Properties dialog also has labelAlignment, labelOrientation, and labelUse fields, which are currently not implemented. However, labels can be rotated using the Rotate option in the context menu.

Symbol Attributes

Attributes are properties that are common to all instances of a symbol. They could denote for example, how a particular symbol would be netlisted in Xyce circuit simulator netlist using SpiceNetlistLine attribute. NLPDeviceFormat expressions was originally created for Glade by Peardrop Design Systems. It consists of string constants and NLP Expressions.

Some of the important attributes for a symbol are summarized below:

Attribute NameAttribute UseExample
SpiceNetlistLineNetlist template used for symbol/spice/veriloga viewsM@instName %pinOrder %modelName w=@w l=@l nf=@nf as=@as m=@m
SpiceNetlistLineVeriloga-style template exampleYres @instName %pinOrder resModel @R
SpiceNetlistLineSpice subckt template exampleX@instName %pinOrder newckt
vaModelLineUsed as a model line for Veriloga netlisting.MODEL resModel res R = 1
vaHDLLineUsed to by Revolution EDA to create linkable modules*.HDL /home/user/exampleLibraries/analogLib/resVa/res.va
pinOrderTo sync pin order between netlists of various cellviewsPLUS, MINUS
incLineTo include imported Spice subcircuit.INC /home/user/exampleLibraries/anotherLibrary/example1/newckt.sp

Note that labels are referenced in symbol attributes by their names prefixed with @. If a symbol attribute is referenced within another symbol attribute, it must be prefixed with %; see the example for SpiceNetlistLine in the table above, where the modelName attribute is referenced as %modelName. The pinOrder attribute is important for synchronising the various netlisting formats. It should list all symbol pins separated by commas in the order required for netlisting. This string replaces the %pinOrder token in the attributes.

Attributes are defined in the Cellview Properties dialog, accessible from the Edit menu:

This dialog has two parts. The first part lists the labels already defined for the symbol; label properties can be modified, added, or deleted here. The second part is the Symbol Attributes section, where any number of symbol attributes can be defined. These attributes are not displayed on the canvas, but they can be inspected (though not edited) in the schematic view.

Depending on how a symbol is created, not all attributes required for netlisting with the available cell views may be present on that symbol. For example, if a symbol is created from a schematic but a Verilog-A cell view also exists, the symbol will contain the SpiceNetlistLine attribute for netlisting the symbol view, but it will not include the attributes needed to netlist the Verilog-A cell view. In that case, those attributes must be added manually in the Symbol Editor.

Required attributes for netlisting

The current netlister implementation in schematicEditor.xyceNetlist uses SpiceNetlistLine as the netlist template key for symbol, spice, and veriloga views. In templates, use %pinOrder to emit the expanded connection list.

Symbol

If a symbol cellview is to be used in the netlisting, these are the minimum attributes that should be defined for that symbol.

Attribute NameExample
SpiceNetlistLineM@instName %pinOrder %modelName w=@w l=@l nf=@nf as=@as m=@m
pinOrderD, G, B, S

Note that another attribute modelName needs to be defined for the example in the table. pinOrder controls the net order used by %pinOrder during netlisting.

Veriloga

If the veriloga cell view is to be used in the circuit netlisting, these attributes should be added to the symbol. If the Verilog-A file was imported and used to create the symbol, they will be added automatically.

Attribute NameExample
SpiceNetlistLineYres @instName %pinOrder resModel @R
vaModelLine.MODEL resModel res R = 1
vaHDLLine*.HDL /home/user/exampleLibraries/analogLib/resVa/res.va
pinOrdera, b, c

vaModelLine and vaHDLLine are collected and written to the netlist output.

Spice

Spice subcircuits can be used in the netlists when the symbol has the proper attributes. The required attributes for the netlist inclusion of a SPICE subcircuit are summarised in the table below:

Attribute NameExample
SpiceNetlistLineX@instName %pinOrder newckt
incLine.INC /home/user/exampleLibraries/anotherLibrary/example1/newckt.sp
pinOrderPLUS, MINUS

incLine is collected and emitted as an include directive in the generated netlist.

Other Editing Functions

Any item in the Symbol Editor can be rotated, moved, or copied by selecting the corresponding menu item, clicking the relevant toolbar button, or using the right-click context menu.

The cursor position is displayed at the bottom-left corner of the editor. To reposition the symbol editor’s origin point, select Edit → Move Origin and click at the desired new origin location. All subsequent editing operations will use the new origin as the reference point.

Context Menu (Right-click on Item)

Right-clicking on a selected item opens a context menu with the most frequently needed operations without navigating the menu bar.

ActionShortcutNotes
CopyCCopies the selected item; paste with Edit -> Paste.
MoveNoneStarts interactive move mode for the selected item.
Move By…NoneOpens a dialog for a precise X/Y offset move.
Vertical FlipNoneMirrors the item across the horizontal axis.
Horizontal FlipNoneMirrors the item across the vertical axis.
RotateCtrl+RRotates the item 90° clockwise.
DeleteDeleteRemoves the item from the symbol.
Object Properties…QOpens the property dialog for the item (shape, pin, or label).
Select AllCtrl+ASelects every item in the symbol view.
Unselect AllNoneClears the current selection.
StretchSEnters stretch mode for the selected item.

Final Notes

  • Use the Symbol Editor for both graphics and netlisting metadata; a good symbol needs both.
  • Q and Edit -> Cellview Properties... are the two most important follow-up tools after drawing the symbol outline.
  • Keep pin naming and pinOrder consistent with the cellviews you intend to netlist.
  • If a symbol is created automatically from another flow, review its labels and attributes before using it widely in schematics.