The Schematic Editor
Where a circuit is drawn: placing components from the Library Palette, wiring them, editing their values, and setting up the analysis that simulates the result.
The schematic is the electrical view of a cell — what the circuit is, as opposed to what it looks like on a symbol or what gets manufactured in a layout. It is the view you spend most of your time in, and it is the only one an analysis runs on.
Orientation
A schematic is a view of a cell, exactly as its symbol and its
layout are; the cell folder holds schematic/, symbol/ and layout/ side
by side and a cell need not have all three. Opening one opens a document tab.
You do not need a cell library to start. File ▸ New Schematic opens a standalone scratch sheet you can wire up and simulate immediately, with no workspace around it, and save into a workspace later if it turns out to be worth keeping.
Two things about the canvas are worth knowing before you draw on it:
- Connection is exact, not proximity. Every pin, wire vertex and junction lands on the coarse connection grid, and two things are joined only when they occupy the same grid point. A second, finer authoring grid positions labels and annotations. That rule, and what happens when you paste between designs with different grids, is Grid & Connectivity.
- Standard-library parts are drawn vertically. R, L, C, the sources, Term and Ground all put port 1 at the top and port 2 at the bottom, so a horizontal signal path means rotating them as you place them. That is the normal workflow, not a workaround — see Orientation convention.
The Library Palette
The palette is where every placeable part lives. It has two controls above the tiles and they do different jobs:
The category picker. All is the default and shows the whole built-in library in the palette's own pinned order — the parts you reach for most, first. All - Alphabetical is the same set sorted by name, Common is a short curated set, and Recently Used is what you have placed lately. Below those come the built-in categories — Lumped, Devices, System, Nonlinear, Sources, Terminals, Transmission Line, Microstrip, Matching, Data Files — and then one entry per imported kit, with the kit's own groupings indented beneath it. See PDK integration for where kit entries come from.
System sits directly after Devices, because a system block is a signal-path part and a user who has found Devices is one row away from the blocks they want. It holds the ideal blocks a system block diagram is drawn out of — circulator, coupler, hybrid, balun, switch, amplifier, attenuator, filter, duplexer — plus the two mixer tiles, which keep Devices as their primary category and appear under both. See System Components.
The search box. Matches a part's display name and its search terms, and a kit part's kit name as well. Searching inside a built-in category narrows within it; searching from All searches everything, built-ins and kits together.
The tile grid is a reflow grid: the number of columns follows the panel's width, so widening the palette gets you more tiles per row rather than bigger tiles.
Placing a component
There are two gestures, and they place the identical thing — a kit part in particular resolves through the same path either way, so a drag and a click can never disagree about what you get.
- Click a tile to arm it. The tile highlights, and a ghost of the symbol follows the cursor over the canvas. Click on the canvas to drop one. The tool stays armed, so click again to place another — this is the fast way to lay down five capacitors. Click the tile a second time, or press Esc, to disarm.
- Or drag the tile onto the canvas. The ghost follows the drag, snapped to the connection grid, and the component lands where you release. A drag places exactly one part and leaves nothing armed, which is what you want when you are placing one part in the middle of doing something else.
While a placement is armed, R rotates the ghost 90° counter-clockwise and Shift+R clockwise — the same two keys that rotate a selection when nothing is armed, so there is one pair of rotate keys to remember rather than two.
For a part from an imported kit the ghost is built by resolving the cell's own primary symbol, not
from its generic SymbolKind. Kit parts share one kind, so a ghost drawn from the kind
alone would show a plain box during the drag and then place the kit's real artwork — the drag showing
one thing and the result another.
Wiring, values and labels
Wire is W (or the toolbar button). Click from one pin to another; Enter finishes the wire in progress and returns you to Select, Esc cancels it. Select is S, and Esc from any tool comes back to it.
Double-click does three different things depending on what is under the cursor, and the distinction is worth learning because it is the fastest edit in the application:
| Double-click on | What opens |
|---|---|
A component's value label (C = 1 pF) |
An inline edit box over the value itself. Type 1.2 nH, 50 Ω, 2 GHz and press Enter. |
| A component's body | The full parameter editor for that instance — every parameter, not just the displayed ones. |
| A wire | A net label on that wire, so you can name the net and refer to it in a measurement. |
Arrow keys nudge the selection by one connection-grid step, or five with Shift held. F5 begins Move Labels, for pushing a crowded label block clear of the artwork without moving the component it belongs to.
Values are expressions, not just numbers: a VAR block on the sheet declares variables that any
component value can refer to, and the same expression language drives sweeps and measurements. See
Expressions and Measurements.
The context menu
Right-clicking a component gives you the operations that apply to it: Edit Parameters, rotate and mirror, the two label commands, Labels ▸ for choosing which parameters show on the sheet, Disconnect, Copy and Delete. Items are disabled rather than hidden, so their positions stay put and you learn the menu by muscle memory.
Two more items appear only on a cell instance — Push In and Open Cell in New Tab. Those two are genuinely absent on a resistor rather than greyed, because they are not operations a resistor has; Hierarchy below is what they are for.
Right-clicking empty canvas gives a different, one-item menu: Pop Out. Nothing on the component menu applies when the click hit nothing, so the canvas menu carries only the one thing that always does — going back up a level. It is greyed out, with the reason on its tooltip, when you are already at the top of the schematic.
Hierarchy: putting one schematic inside another
Hierarchy is drawing a circuit once and using it in many places. A bias network, a matching section, a whole amplifier stage — draw it as its own cell, then drop that cell into a bigger schematic as a single component. The big schematic stays readable, and one edit to the cell reaches every place it is used.
Two things have to be true before any of it works, and they are the two that trip people up:
- Hierarchy needs a cell. A schematic on its own is not reusable — only a cell can be placed into another schematic. Making the cell is step 1 below, and it is not optional.
- The cell goes into a different schematic. A cell cannot contain itself, so the schematic you place it in must be another one. Pushing in is then how you get back down to the first.
Step by step: a cell inside another schematic
Create the cell. File ▸ New ▸ New Cell… (⇧⌘N / Ctrl+Shift+N), give it a name, and circuitRF makes the cell folder and opens its schematic. The command needs an open workspace — a cell is a folder inside one — so if it is greyed out, open or create a workspace first (The Workspace).
Draw the sub-circuit, and give it pins. Wire it up as you would any schematic, then place a Pin at every point the outside world needs to connect to. The pins are the cell's ports — the pin numbered 1 becomes port 1 — and a cell with no pins places as a component nothing can be wired to. Pin, Port and Term is worth reading once if that distinction is new. Save with ⌘S.
Open the schematic that will use it — a different one, and a saved one. A cell instance records where the cell is relative to the schematic holding it, so a scratch sheet from File ▸ New Schematic has nowhere to record it from; placing into one is refused with "Save the schematic before placing a cell" in Messages. Save it into the workspace first, or start it as a cell of its own.
Drag the cell out of the Project Tree and onto the canvas. That is the placement gesture. Cells you author are not in the Library Palette — the palette carries the built-in library and any imported kits, and your own cells live in the Project Tree instead. It lands as one component with your cell's pins on it.
If the cell has no symbol yet, you are offered an auto-generated one, built from the pin count from step 2. Accept it to keep moving; draw a proper one later in the Symbol Editor.
Wire it in and set its parameters like any other component. Double-clicking its body opens the parameter editor for that instance.
Push in to edit the cell from here. Click the instance once to select it, then use any of:
- Right-click ▸ Push In — the item appears only on a cell instance. Right-clicking empty canvas offers Pop Out to come back up.
- Toolbar button 18, and 19 to come back out (the toolbar below numbers them).
- ⌘] / Ctrl+] in, ⌘[ / Ctrl+[ out — also on the View menu as Push Into Cell and Pop Out.
You are now editing the cell's own schematic, in the same tab. A breadcrumb bar appears above the canvas showing how deep you are (
X1, the instance you came through); every step in it is clickable, so you can jump straight back to any level rather than popping out one at a time. Push in again from there to go deeper.
Once that round trip works, everything else about hierarchy follows from it:
- An edit to a cell reaches every instance of it, live. That is the whole point — and it is also
the thing to be careful about, because pushing in through
X1and changing a value changesX2too. They are the same cell. - Push In is not the only way in. Right-click ▸ Open Cell in New Tab opens the cell as its own document instead, which is what you want when you are going back and forth and would rather have both on screen than one behind the other.
- Depth is not limited to one level. A cell can instance other cells, and the breadcrumb grows a step each time you push in. Elaboration flattens the whole tree into one netlist before an analysis ever runs, so depth costs you nothing at simulation time.
- Parameters pass downward. A cell can publish parameters that the parent sets per instance, so two instances of one cell can carry different values. See Expressions for how a cell evaluates them in its own scope.
- Only the top schematic is simulated. An analysis attaches to the test bench — the schematic you press Run on — and the hierarchy below it is flattened into that run. A cell in the middle of a tree has no analyses of its own.
The other two views
The schematic is one of a cell's three views, and each is edited in its own editor:
| View | Editor | What it owns |
|---|---|---|
| Schematic | this page | the electrical contents — instances, nets, values |
| Symbol | Symbol Editor | the glyph an instance draws, and where its pins sit |
| Layout | Layout Editor | the physical artwork, for fab handoff and EM |
The symbol is what step 4 above places; the layout is what gets manufactured. A cell need not have
all three — the cell folder holds schematic/, symbol/ and layout/ side by side and any of them
may be absent.
Two commands under the Design menu move work between the schematic and the layout — Update Layout from Schematic (⌘U) and Update Schematic from Layout (⇧⌘U). Neither ever runs by itself; both are described in Schematic ⇄ layout.
A part that has no layout view of its own still reaches the board: its Footprint parameter — the
last row of its parameter editor — names an SMT case size, an imported part or a .clay you drew,
and that is what Update Layout places. See Footprints.
Simulating: an Analysis
A simulation in circuitRF is called an Analysis, and it is configured before it is run. An analysis is not a property of the circuit — it attaches to the test bench, the top schematic you actually simulate — so drawing a circuit does not by itself give you anything to run.
Open Simulate ▸ Setup Analyses… (the same list is also available as a dock panel), add the analyses you want, then press Run — ⌘R / Ctrl+R, or the ▶ button at the top of the list.
The example above is an ordinary two-analysis test bench: a DC operating point, and a
Harmonic Balance run wrapped in a parametric sweep of the drive level Pin. Reading the panel:
- The checkbox enables or disables a row. A disabled analysis stays in the design and is not run — the way to park an analysis without deleting it.
- The badge is the analysis type:
DC,SP,HB,LP,LPP, andSWfor a parametric sweep. - A sweep is indented under the analysis it wraps, which is how the panel shows that
Pinis sweepingHB1rather than standing on its own. Analyses run in the order listed. - Results file names the one file this run writes into the workspace's shared
results/folder. Leave it blank to use the schematic's own name; name it to keep a baseline instead of overwriting the current results.
Adding or editing a row opens the analysis editor, where the analysis is actually configured:
The Type picker at the top decides everything below it — the body changes to the settings that
type has. Here it is the harmonic-balance body: the fundamental tone (given as the expression
RFfreq, resolved and previewed underneath), the unit, how many harmonics to retain, the
single-versus-multi-tone choice, an Advanced block for the convergence controls, and the
Parametric Sweeps section that wraps this analysis in one or more swept variables. The dialog
grows to fit whatever the chosen type needs and scrolls beyond that, which is why the sweep's own
Start / Stop / Step row runs off the bottom of the figure above.
Every analysis type, its full settings, and what it computes are in Simulations — DC, S-Parameters, Harmonic Balance, Parametric Sweep, Loadpull and Loadpull Pursuit.
Every analysis returns a DataSet — a named bundle of labelled, unit-bearing
arrays — and the whole run goes into one .npy file. Open a
Data Display to plot it, or read it straight into Python or MATLAB
(Getting results out). Post-processing a run into named quantities is
what Measurements are for.
An analysis set up here runs identically from the command line — circuitrf sparam,
dc, hb, lp or lpp against an elaborated
netlist, with Simulate ▸ Generate Netlist producing the
.cnl. See The Command Line.
Finding a component
Design ▸ Find Instance… — ⌘F / Ctrl+F — opens the Instances
panel for the schematic you are working in and puts the cursor in its search box, so you can type a
name straight away. The panel lists every component on the sheet by Name, Type and, where it
adds something, the Cell/Part it comes from, sorted so that R2 comes before R10.
- Type to filter by name — any part of the name, upper or lower case. The type picker beside the box narrows the list to one kind of component; the two combine.
- Double-click a row (or press Enter) to zoom to that component and select it. A single click only highlights the row, so you can arrow down the list without the view jumping about. Enter in the search box goes to the highlighted row, or the first match.
- Esc in the search box puts you back on the canvas.
The panel always shows the schematic that has focus, and says which one in its header. Grounds, VAR
and MEAS blocks are left out — they are rarely what you are looking for, and a sheet's grounds would
bury its parts. The command is greyed out unless a schematic or a layout has focus; the panel itself is
also under View ▸ Panels ▸ Instances.
Searching inside placed cells. By default only the level you are looking at is listed. Tick
Include sub-cells and the panel also lists every component inside every placed cell, all the way
down, named by its path — X1.X3.R5 is R5 inside X3 inside X1, so typing x1. lists everything
under X1. The top level appears at once; the rest arrives a moment later (the panel shows
Searching… meanwhile), and the window stays responsive while it does. With the box ticked the panel
lists the whole tab from its top level, wherever you have pushed in to, so
double-clicking X1.X3.R5 pushes down into X1, then X3, and zooms to R5 — and the list stays put
for the next result. Unsaved edits in a cell you have open are included. A search that finds more than
100,000 components stops there and shows a + after the count. The box is remembered between sessions.
The toolbar
| # | Button | What it does |
|---|---|---|
| 1 | Zoom to Fit (F) | |
| 2 | Zoom Box (Z) | |
| 3 | Zoom Out | |
| 4 | Select (S) | |
| 5 | Wire (W) | |
| 6 | Place Ground (Shift+G) | |
| 7 | Place Term (T) | |
| 8 | Place Pin (P) | |
| 9 | Rotate 90° CCW (R) | |
| 10 | Rotate 90° CW (Shift+R) | |
| 11 | Mirror Horizontal (M) | |
| 12 | Mirror Vertical (Shift+M) | |
| 13 | Delete (Del) | |
| 14 | Snap: Fine Grid (G) | |
| 15 | Disable → Open circuit (Q) — toggles if all selected are already disabled | |
| 16 | Disable → Short circuit (toggles if all selected are already disabled) | |
| 17 | Save schematic (Ctrl+S) | |
| 18 | Push Into Cell (Ctrl+]) | |
| 19 | Pop Out (Ctrl+[) |
Grouped by what you are doing, left to right:
- View — Zoom to Fit, a zoom box, and Zoom Out. F is the one to learn; a schematic is usually bigger than the window.
- Draw — Select, the Wire tool, and the three things you place constantly: Ground, Term (a numbered port with a reference impedance, for an S-parameter run) and Pin (a connection point of the cell you are drawing). Which is which is worth reading once.
- Orient — rotate 90° either way and mirror in either axis, applied to the selection.
- Delete — on the selection.
- Snap — cycles the snap mode. Electrical points always land on the connection grid whatever this says; the snap mode governs the authoring grid.
- Disable — mark selected components open or short. This takes an element out of the circuit without deleting it, which is what you want when you are bracketing a problem.
- Save.
- Hierarchy — push into the selected cell, or pop back out.
See also: Symbol Editor ·
Layout Editor · Grid & Connectivity ·
Components · Pins, Ports &
Terms · Simulations ·
File formats (.csch).