Introduction
This document describes the "Primitive Functions" of the DataBase API;
The primitives in the design hierarchy are usually primitive objects with a known function (e.g. AND, NOR, etc.).
However, some algorithms, e.g. Cone Extraction will not traverse the design hierarchy tree down to the primitives but may "stop" at bus-level (sometimes called "operator-level") where the function of a module is known (these modules are treated as "primitives" for that algorithm).
Overview
Here is an overview of the various module and primitive types.
The function is returned by primFuncOf.
The flags are returned or set by the flag command.
| OID Type | Function | Has Sub-Netlist | Flags | Description | Index | 
|---|---|---|---|---|---|
  | 
  | 
Yes  | 
Any hierarchy module that is defined by the lower-level netlist only.  | 
#1  | 
|
No  | 
Empty module.  | 
#2  | 
|||
  | 
Undefined module (= blackbox module); ports may have unknown directions.  | 
#3  | 
|||
Yes/No  | 
  | 
Any library cell, normally with lower-level netlist (eventually with attached symbol shape).  | 
#4  | 
||
some function  | 
Yes/No  | 
Module with a known (bus-level) function (sometimes called "operator"), may have an implementing lower-level netlist (redundant data).  | 
#5  | 
||
  | 
some function  | 
No  | 
Primitive with a known function (similar to #5).  | 
#6  | 
|
No  | 
Unknown primitive from a source like EDIF that does not know anything about library cells (similar to #2).  | 
#7  | 
Note that some GUI features, like the Tree window, traverse the design hierarchy down to the real primitive objects; that means, it distinguishes modules (#1 to #5) from primitives (#6 to #7). However some algorithms may stop as soon as a function is known, and therefore consider #5 to #7 as "primitives"; other algorithms may stop at library cells and consider #4 to #7 as "primitives".
For a better understanding, here is what the various parsers create:
| Parser | Module/Primitive Objects Created | 
|---|---|
  | 
Creates library cells (#4) with symbol shape definition and with optional content lower-level netlist consisting of operators (#5) and primitives (#6).  | 
  | 
Creates hierarchy modules (#1) with netlists consisting of operators (#5) and primitives (#6);
if a module is defined inside   | 
  | 
Creates hierarchy modules (#1) and unknown primitives (#7).  | 
  | 
Creates hierarchy modules (#1) and Spice primitives (#6).  | 
  | 
Creates library cells (#4) with symbol shape definition.  | 
  | 
Creates empty library cells (#4).  | 
  | 
Creates hierarchy modules (#1) with netlists of cells (e.g. from   | 
Port Function
This database applies the same port-order rules to Primitives as well as to Modules with defined function. That means, if a function is defined, then the number of ports and their directions and their function is ruled by the database built-in specification, as defined in this document. The database enforces that those rules are not violated.
Ordinary modules (with function = NONE) as well as primitives with UNKNOWN function have no port-restrictions at all (any number of ports and portBuses in arbitrary order). All ports can be bubbled/negated.
Primitives (as well as modules) with a known function define the direction and function of their ports by the port-order. For each function, only a certain number and order of the ports is possible. Also depending on the function, some ports may be bubbled/negated (details below).
All port names are arbitrary (the names in this document are chosen only for better understanding). Of course, all port names within a primitive or module are unique.
Load and Retrieve the Port Direction
For UNKNOWN primitives and modules without a function (function = NONE), loading a port must specify a port direction.
However, for a primitive or module with a known function, loading a port can (and should) use a * for the port direction (to apply the built-in direction) — or if a direction is specified, then it must match the built-in specification or an error is returned.
Independent from the function, the command directionOf returns the correct direction.
Bubbled Ports
Some ports or portBuses can be bubbled to define negated port functions (and to display them bubbled).
If so, then the command directionOf will append .neg to the returned port direction, e.g. input.neg (instead of input).
The .neg extension can also be used for API-loading, including *.neg for known functions, as described in the tables below.
Definition of Primitive Functions
Special Primitives
UNKNOWN
Description
An unknown function with an arbitrary number and order of input/output/inout ports (no restrictions).
A mix of single-bit ports and portbuses with arbitrary widths is supported.
All ports and portbuses can be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
…  | 
…  | 
…  | 
Gate-Level Functions
Description
The primitive functions below describe gate-level functions.
The function names and port orders partly follow the Verilog gate definitions.
All ports are single-bit (except for UNKNOWN).
On the API-level, a cell’s function is specified in the corresponding
load command call ($db load primitive $name $function … for
primitives,
$db load module $name ?-primfunc $function? … for modules),
while the primitive function of a cell can be queried using the
primFuncOf command ($db primFuncOf $cell).
Combinational Gates
AND
Description
Boolean "AND" function.
The first port is the output, followed by one or more input ports.
The input ports can be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
…  | 
…  | 
input  | 
NAND
Description
Boolean "NAND" function.
The first port is the output, followed by one or more input ports.
The input ports can be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
…  | 
…  | 
input  | 
OR
Description
Boolean "OR" function.
The first port is the output, followed by one or more input ports.
The input ports can be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
…  | 
…  | 
input  | 
NOR
Description
Boolean "NOR" function.
The first port is the output, followed by one or more input ports.
The input ports can be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
…  | 
…  | 
input  | 
XOR
Description
Boolean "XOR" function.
The first port is the output, followed by one or more input ports.
The input ports can be bubbled.
Example
$db load primitive xor4 XOR
$db load port Y output
$db load port A input
$db load port B input.neg
$db load port C input.neg
$db load port D input
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
…  | 
…  | 
input  | 
XNOR
Description
Boolean "XNOR" function.
The first port is the output, followed by one or more input ports.
The input ports can be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
…  | 
…  | 
input  | 
BUF
Description
(Multi-output) buffer.
All ports but the last port are outputs, the last port is the input (as Verilog defines 'buf').
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
…  | 
…  | 
output (optional)  | 
last  | 
I  | 
input  | 
FORCE
Description
(Multi-output) "forced" buffer, typically generated from a "force"-type assignment in Verilog/VHDL.
All ports but the last port are outputs, the last port is the input.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
…  | 
…  | 
output (optional)  | 
last  | 
I  | 
input  | 
INV
Description
(Multi-output) Boolean "Inverter" function.
All ports but the last port are outputs, the last port is the input (as Verilog defines 'inv').
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
…  | 
…  | 
output (optional)  | 
last  | 
I  | 
input  | 
MUX
Description
2-input multiplexer.
The first port is the output,
the second and third ports are the inputs A and B,
the fourth port is the select port Sel;
if Sel is 0, A is switched to the output,
if Sel is 1, B is switched to the output.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
3  | 
Sel  | 
input  | 
ADD
Description
1-bit full adder with carry-in and carry-out.
The first port is the sum output, the second port is carry-out, the third and fourth ports are the adder inputs, and the fifth port is the carry-in.
Example
$db load primitive adder ADD
$db load port Y  output
$db load port Co output
$db load port A  input
$db load port B  input
$db load port Ci input
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
Co  | 
output  | 
2  | 
A  | 
input  | 
3  | 
B  | 
input  | 
4  | 
Ci  | 
input  | 
State Elements
DFF
Description
Simple flip-flop.
The first port is the output, the second port is the data input, the third port is the clock (active on positive edge), the optional fourth and fifth ports are reset and set inputs. The clock, set and reset inputs may be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
D  | 
input  | 
2  | 
Clk  | 
input  | 
3  | 
Reset  | 
input (optional)  | 
4  | 
Set  | 
input (optional)  | 
DFFN
Description
Simple flip-flop with a non-inverting output and an inverting output.
The first port is the non-inverting output, The second port is the inverting output, the third port is the data input, the fourth port is the clock (active on positive edge), the optional fifth and sixth ports are reset and set inputs. The clock, set and reset inputs may be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
YN  | 
output  | 
2  | 
D  | 
input  | 
3  | 
Clk  | 
input  | 
4  | 
Reset  | 
input (optional)  | 
5  | 
Set  | 
input (optional)  | 
DLATCH
Description
Simple latch.
The first port is the output, the second port is the data input, the third port is the enable input, the optional fourth and fifth ports are reset and set inputs. The enable, set and reset inputs may be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
D  | 
input  | 
2  | 
En  | 
input  | 
3  | 
Reset  | 
input (optional)  | 
4  | 
Set  | 
input (optional)  | 
DLATCHN
Description
Simple latch with a non-inverting output and an inverting output.
The first port is the non-inverting output, The second port is the inverting output, the third port is the data input, the fourth port is the enable input, the optional fifth and sixth ports are reset and set inputs. The enable, set and reset inputs may be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
YN  | 
output  | 
2  | 
D  | 
input  | 
3  | 
En  | 
input  | 
4  | 
Reset  | 
input (optional)  | 
5  | 
Set  | 
input (optional)  | 
DFFCV
Description
Condition/value flip-flop.
The first port is the output, the second port is the data input, the third port is the clock (active on positive edge), the fourth and fifth ports are condition and value inputs. The clock may be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
D  | 
input  | 
2  | 
Clk  | 
input  | 
3  | 
Condition  | 
input  | 
4  | 
Value  | 
input  | 
DLATCHCV
Description
Condition/value latch.
The first port is the output, the second port is the data input, the third port is the enable input, the fourth and fifth ports are condition and value inputs. The enable input may be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
D  | 
input  | 
2  | 
En  | 
input  | 
3  | 
Condition  | 
input (optional)  | 
4  | 
Value  | 
input (optional)  | 
Other Functions
BUFIF0
Description
A tri-state buffer.
The first port is the output, the second port is the input, the third port is the control input.
If the control input is 1,
the buffer is set to high-impedance state
(as Verilog defines bufif0).
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
I  | 
input  | 
2  | 
Ctrl  | 
input  | 
BUFIF1
Description
A tri-state buffer.
The first port is the output, the second port is the input, the third port is the control input.
If the control input is 0,
the buffer is set to high-impedance state
(as Verilog defines bufif1).
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
I  | 
input  | 
2  | 
Ctrl  | 
input  | 
INVIF0
Description
A tri-state inverting buffer.
The first port is the output, the second port is the input, the third port is the control input.
If the control input is 1,
the buffer is set to high-impedance state
(as Verilog defines notif0).
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
I  | 
input  | 
2  | 
Ctrl  | 
input  | 
INVIF1
Description
A tri-state inverting buffer.
The first port is the output, the second port is the input, the third port is the control input.
If the control input is 0,
the buffer is set to high-impedance state
(as Verilog defines notif1).
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
I  | 
input  | 
2  | 
Ctrl  | 
input  | 
TRAN
Description
A transfer gate.
This primitive has exactly two inout (bidirectional) ports
(as Verilog defines tran).
Ports
| No | Name | Type | 
|---|---|---|
0  | 
P1  | 
inout  | 
1  | 
P2  | 
inout  | 
TRANIF0
Description
A bi-directional transistor (low).
This primitive has two inout (bidirectional) ports,
and a control input
(as Verilog defines tranif0).
Ports
| No | Name | Type | 
|---|---|---|
0  | 
P1  | 
inout  | 
1  | 
P2  | 
inout  | 
2  | 
Ctrl  | 
input  | 
TRANIF1
Description
A bi-directional transistor (high).
This primitive has two inout (bidirectional) ports,
and a control input
(as Verilog defines tranif1).
Ports
| No | Name | Type | 
|---|---|---|
0  | 
P1  | 
inout  | 
1  | 
P2  | 
inout  | 
2  | 
Ctrl  | 
input  | 
RTRANIF1
Description
A resistive transistor (high).
This primitive has two inout (bidirectional) ports,
and a control input
(as Verilog defines rtranif1).
Ports
| No | Name | Type | 
|---|---|---|
0  | 
P1  | 
inout  | 
1  | 
P2  | 
inout  | 
2  | 
Ctrl  | 
input  | 
GNMOS
Description
A gate-level NMOS transistor.
(as Verilog defines nmos)
Example
$db load primitive gnmos GNMOS
$db load port Y *
$db load port A *
$db load port C *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
I  | 
input  | 
2  | 
Ctrl  | 
input  | 
GPMOS
Description
A gate-level PMOS transistor.
(as Verilog defines pmos)
Example
$db load primitive gpmos GPMOS
$db load port Y *
$db load port A *
$db load port C *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
I  | 
input  | 
2  | 
Ctrl  | 
input  | 
GRNMOS
Description
A gate-level resistive NMOS transistor.
(as Verilog defines rnmos)
Example
$db load primitive grnmos GRNMOS
$db load port Y *
$db load port A *
$db load port C *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
I  | 
input  | 
2  | 
Ctrl  | 
input  | 
GRPMOS
Description
A gate-level resistive PMOS transistor.
(as Verilog defines rpmos)
Example
$db load primitive grpmos GRPMOS
$db load port Y *
$db load port A *
$db load port C *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
I  | 
input  | 
2  | 
Ctrl  | 
input  | 
GCMOS
Description
A combination of gate-level NMOS and PMOS transistors with common data input and output ports.
(as Verilog defines cmos)
Example
$db load primitive gcmos GCMOS
$db load port Y *
$db load port A *
$db load port nC *
$db load port C *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
nCtrl  | 
input  | 
3  | 
Ctrl  | 
input  | 
GRCMOS
Description
A combination of gate-level resistive NMOS and PMOS transistors with common data input and output ports.
(as Verilog defines rcmos)
Example
$db load primitive grcmos GRCMOS
$db load port Y *
$db load port A *
$db load port nC *
$db load port C *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
nCtrl  | 
input  | 
3  | 
Ctrl  | 
input  | 
PULLUP
Description
A "pull-up" resistor.
Example
$db load primitive pu PULLUP
$db load port a *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
pt1  | 
output  | 
PULLDOWN
Description
A "pull-down" resistor.
Example
$db load primitive pd PULLDOWN
$db load port a *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
pt1  | 
output  | 
Bus-Level Functions
Description
The primitive functions below describe bused functions (word-level).
The function is defined e.g. by the load API and returned by primFuncOf.
All ports are usually a mix of multi-bit buses and single-bits.
In the table below, the column "Ports/Type" uses a square-bracket
notation to identify buses (portBus instead of port);
Buses which are required to have the same width use the same index
denominator, while buses with potentially different widths use
different index denominators (e.g. [n] and [m]).
Reducing Functions (n to 1)
REDUCE_AND
Description
Bus-input reducing Boolean "AND" function.
The first port is the output, followed by one input portbus of arbitrary width.
Y = AND(A[0], …, A[n-1])
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
{input[n]}  | 
REDUCE_NAND
Description
Bus-input reducing Boolean "NAND" function.
The first port is the output, followed by one input portbus of arbitrary width.
Y = NAND(A[0], …, A[n-1])
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
{input[n]}  | 
REDUCE_OR
Description
Bus-input reducing Boolean "OR" function.
The first port is the output, followed by one input portbus of arbitrary width.
Y = OR(A[0], …, A[n-1])
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
{input[n]}  | 
REDUCE_NOR
Description
Bus-input reducing Boolean "NOR" function.
The first port is the output, followed by one input portbus of arbitrary width.
Y = NOR(A[0], …, A[n-1])
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
{input[n]}  | 
REDUCE_XOR
Description
Bus-input reducing Boolean "XOR" function.
The first port is the output, followed by one input portbus of arbitrary width.
Y = XOR(A[0], …, A[n-1])
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
{input[n]}  | 
REDUCE_XNOR
Description
Bus-input reducing Boolean "XNOR" function.
The first port is the output, followed by one input portbus of arbitrary width.
Y = XNOR(A[0], …, A[n-1])
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
{input[n]}  | 
Wide Functions (n to n)
WIDE_AND
Description
Wide Boolean "AND" function.
The first portbus is the output bus, it is followed by an arbitrary number of input portbuses.
All buses must have the same width.
The input buses may be bubbled, indicating a negation of the complete input bus.
Y[0] = AND(A[0], B[0], ...) Y[1] = AND(A[1], B[1], ...) ... Y[n-1] = AND(A[n-1], B[n-1], ...)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
2  | 
B  | 
{input[n]}  | 
…  | 
…  | 
{input[n]}  | 
WIDE_NAND
Description
Wide Boolean "NAND" function.
The first portbus is the output bus, it is followed by an arbitrary number of input portbuses.
All buses must have the same width.
The input buses may be bubbled, indicating a negation of the complete input bus.
Y[0] = NAND(A[0], B[0], ...) Y[1] = NAND(A[1], B[1], ...) ... Y[n-1] = NAND(A[n-1], B[n-1], ...)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
2  | 
B  | 
{input[n]}  | 
…  | 
…  | 
{input[n]}  | 
WIDE_OR
Description
Wide Boolean "OR" function.
The first portbus is the output bus, it is followed by an arbitrary number of input portbuses.
All buses must have the same width.
The input buses may be bubbled, indicating a negation of the complete input bus.
Y[0] = OR(A[0], B[0], ...) Y[1] = OR(A[1], B[1], ...) ... Y[n-1] = OR(A[n-1], B[n-1], ...)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
2  | 
B  | 
{input[n]}  | 
…  | 
…  | 
{input[n]}  | 
WIDE_NOR
Description
Wide Boolean "NOR" function.
The first portbus is the output bus, it is followed by an arbitrary number of input portbuses.
All buses must have the same width.
The input buses may be bubbled, indicating a negation of the complete input bus.
Y[0] = NOR(A[0], B[0], ...) Y[1] = NOR(A[1], B[1], ...) ... Y[n-1] = NOR(A[n-1], B[n-1], ...)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
2  | 
B  | 
{input[n]}  | 
…  | 
…  | 
{input[n]}  | 
WIDE_XOR
Description
Wide Boolean "XOR" function.
The first portbus is the output bus, it is followed by an arbitrary number of input portbuses.
All buses must have the same width.
The input buses may be bubbled, indicating a negation of the complete input bus.
Y[0] = XOR(A[0], B[0], ...) Y[1] = XOR(A[1], B[1], ...) ... Y[n-1] = XOR(A[n-1], B[n-1], ...)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
2  | 
B  | 
{input[n]}  | 
…  | 
…  | 
{input[n]}  | 
WIDE_XNOR
Description
Wide Boolean "XNOR" function.
The first portbus is the output bus, it is followed by an arbitrary number of input portbuses.
All buses must have the same width.
The input buses may be bubbled, indicating a negation of the complete input bus.
Y[0] = XNOR(A[0], B[0], ...) Y[1] = XNOR(A[1], B[1], ...) ... Y[n-1] = XNOR(A[n-1], B[n-1], ...)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
2  | 
B  | 
{input[n]}  | 
…  | 
…  | 
{input[n]}  | 
WIDE_BUF
Description
Wide buffer.
The first portbus is the output bus, it is followed by an input portbus.
The buses must have the same width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
WIDE_INV
Description
Wide Boolean inverter.
The first portbus is the output bus, it is followed by an input portbus.
The buses must have the same width.
Y[0] = INV(A[0]) Y[1] = INV(A[1]) ... Y[n-1] = INV(A[n-1])
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
WIDE_TRI
Description
Wide tri-state buffer.
The first portbus is the output bus, it is followed by an input portbus and a single control port.
The buses must have the same width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
2  | 
Ctrl  | 
input  | 
Mixed Functions
WIDE_NTO1MUX
Description
Multi-input multiplexer.
The first portbus is the output bus,
it is followed by an arbitrary number of input portbuses D0 …
Dx, and a select input bus Sel.
All buses except Sel must have the same width.
Sel selects which input bus is switched to the output:
- 
If
Selis0,D0is switched to the output, - 
if
Selis1,D1is switched to the output, - 
…
 - 
if
Selisx,Dxis switched to the output. 
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
D0  | 
{input[n]}  | 
2  | 
D1  | 
{input[n]}  | 
…  | 
…  | 
…  | 
(x+1)  | 
Dx  | 
{input[n]}  | 
(x+2)  | 
Sel  | 
{input[m]}  | 
WIDE_MUX
Description
2-input bus multiplexer.
The first portbus is the output bus,
it is followed by two input buses A and B, and
a select input Sel.
All buses must have the same width.
Sel selects which input is switched to the output:
- 
If
Selis0,Ais switched to the output, - 
if
Selis1,Bis switched to the output. 
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
2  | 
B  | 
{input[n]}  | 
3  | 
Sel  | 
input  | 
ADDER
Description
Multi-bit full adder with carry-in and carry-out.
The first portbus is the output bus, it is followed by the carry-out port; next are the two adder input buses, followed by the carry-in port.
The buses can have pairwise different widths.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[o]}  | 
1  | 
Co  | 
output  | 
2  | 
A  | 
{input[m]}  | 
3  | 
B  | 
{input[n]}  | 
4  | 
Ci  | 
input  | 
MULTIPLIER
Description
Arithmetic "MULTIPLIER" function.
The first portbus is the output bus, next are the two operand input buses.
The buses can have pairwise different widths.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[o]}  | 
1  | 
A  | 
{input[m]}  | 
2  | 
B  | 
{input[n]}  | 
POW
Description
Arithmetic "POW" function.
The first portbus is the output bus, next are the two operand input buses.
The buses can have pairwise different widths.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[o]}  | 
1  | 
A  | 
{input[m]}  | 
2  | 
B  | 
{input[n]}  | 
DIVIDER
Description
Arithmetic "DIVIDER" function.
The first portbus is the output bus, next are the two operand input buses.
The buses can have pairwise different widths.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[o]}  | 
1  | 
A  | 
{input[m]}  | 
2  | 
B  | 
{input[n]}  | 
MODULO
Description
Arithmetic "MODULO" function.
The first portbus is the output bus, next are the two operand input buses.
The buses can have pairwise different widths.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[o]}  | 
1  | 
A  | 
{input[m]}  | 
2  | 
B  | 
{input[n]}  | 
REMAINDER
Description
Arithmetic "REMAINDER" function.
The first portbus is the output bus, next are the two operand input buses.
The buses can have pairwise different widths.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[o]}  | 
1  | 
A  | 
{input[m]}  | 
2  | 
B  | 
{input[n]}  | 
SHIFT_LEFT
Description
Bitwise left shift.
The first portbus is the output bus,
it is followed by the input bus, the shift amount input bus S,
and a carry-in port.
All portbuses except S must have the same width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
I  | 
{input[n]}  | 
2  | 
S  | 
{input[m]}  | 
3  | 
Ci  | 
input  | 
SHIFT_RIGHT
Description
Bitwise right shift.
The first portbus is the output bus,
it is followed by the input bus, the shift amount input bus S,
and a carry-in port.
All portbuses except S must have the same width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
I  | 
{input[n]}  | 
2  | 
S  | 
{input[m]}  | 
3  | 
Ci  | 
input  | 
ROTATE_LEFT
Description
Bitwise left rotation.
The first portbus is the output bus,
it is followed by the input bus,
and the rotate amount input bus S.
All portbuses except S must have the same width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
I  | 
{input[n]}  | 
2  | 
S  | 
{input[m]}  | 
ROTATE_RIGHT
Description
Bitwise right rotation.
The first portbus is the output bus,
it is followed by the input bus,
and the rotate amount input bus S.
All portbuses except S must have the same width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
I  | 
{input[n]}  | 
2  | 
S  | 
{input[m]}  | 
LESSTHAN
Description
The arithmetic "less than" or "less or equal" operation.
The first port is the result output, followed by two input portbuses, and a carry-in.
Both portbuses may have different widths.
The carry-in selects the actual operation:
- 
carry-in = 0 ⇒ "less than"
 - 
carry-in = 1 ⇒ "less or equal"
 
The result output can be bubbled.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
O  | 
output  | 
1  | 
A  | 
{input[n]}  | 
2  | 
B  | 
{input[m]}  | 
3  | 
Cin  | 
input  | 
NTO1MUX
Description
A portbus-input multiplexer with single bit output.
The first port is the output,
the following two portbuses are the input portbus D,
and the selection input Sel.
Sel selects which bit of D is switched to the output:
- 
if
Selis 0,D[0]is switched to the output, - 
if
Selis 1,D[1]is switched to the output, - 
…
 - 
if
Selis n-1,D[n-1]is switched to the output. 
The portbuses may have different widths.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
D  | 
{input[n]}  | 
2  | 
Sel  | 
{input[m]}  | 
SELECTOR
Description
A "selector" with single bit output, a portbus input A,
and a selection input portbus Sel.
Both portbuses must have the same width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
{input[n]}  | 
2  | 
Sel  | 
{input[n]}  | 
DECODER
Description
A "decoder".
The first portbus is the output, followed by an input portbus, and an optional control port.
The portbuses may have different widths.
If the control port is given, the decoder is actually an "enabled decoder", i.e. its output signals are "AND-ed" with the control signal.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[m]}  | 
2  | 
Ctrl  | 
input (optional)  | 
PRIO_SELECTOR
Description
A "priority selector".
The first port is the a single bit output,
followed by an input portbus,
a selection input portbus Sel,
and a carry-in port.
The carry-in port is used as the "else value".
The portbuses must have the same width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
{input[n]}  | 
2  | 
Sel  | 
{input[n]}  | 
3  | 
Cin  | 
input  | 
WIDE_PRIO_SELECTOR
Description
A "wide priority selector".
The carry-in portbus is used as the "else value".
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[m]}  | 
1  | 
A0  | 
{input[m]}  | 
2  | 
A1  | 
{input[m]}  | 
…  | 
…  | 
…  | 
n  | 
AN  | 
{input[m]}  | 
2+n  | 
Sel  | 
{input[n]}  | 
3+n  | 
Cin  | 
{input[m]}  | 
PRIO_ENCODER
Description
A "priority encoder".
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n+1]}  | 
1  | 
A  | 
{input[n]}  | 
WIDE_CASE_SELECT_BOX
Description
This primitive represents a "case statement".
Ports
| No | Name | Type | 
|---|---|---|
0  | 
out  | 
{output[m]}  | 
1  | 
sel  | 
{input[s]}  | 
2  | 
sel_val  | 
{input[n*s]}  | 
3  | 
data  | 
{input[n*m]}  | 
4  | 
default  | 
{input[m]}  | 
LUT
Description
A lookup table.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
D  | 
{input[n]}  | 
ABS
Description
The arithmetic "ABS" operation.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
MINUS
Description
The arithmetic "subtraction" operation.
The first portbus is the result output, followed by two input portbuses (the "minuend" and the "subtrahend").
All portbuses must have same width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
2  | 
B  | 
{input[n]}  | 
UMINUS
Description
The "unary minus" operation.
The first portbus is the result output, followed by one input portbus.
Both portbuses must have same width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
A  | 
{input[n]}  | 
EQUAL
Description
The "equal" operation.
The first port is the result output, followed by two input portbuses of equal width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
{input[n]}  | 
2  | 
B  | 
{input[n]}  | 
NEQUAL
Description
The "not equal" operation.
The first port is the result output, followed by two input portbuses of equal width.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
{input[n]}  | 
2  | 
B  | 
{input[n]}  | 
WIDE_SELECTOR
Description
A bus selector.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
D0  | 
{input[n]}  | 
…  | 
…  | 
…  | 
1+x  | 
Dx  | 
{input[n]}  | 
2+x  | 
Sel  | 
{input[m]}  | 
RAM Elements
RAM
Description
A generic RAM with unrestricted ports.
Ports
| No | Name | Type | 
|---|---|---|
…  | 
…  | 
…  | 
DUAL_PORT_RAM
Description
A "dual port RAM";
The data ports (Y and D) must have equal widths, and the
address ports (Wadr and Radr) must have equal widths.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
D  | 
{input[n]}  | 
2  | 
Wadr  | 
{input[m]}  | 
3  | 
Radr  | 
{input[m]}  | 
4  | 
Wen  | 
input  | 
READ_PORT
Description
A "read port" of a multi-port RamNet.
The RamNet port is normally connected to a net which
interconnects all read/write-ports of the same RAM.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
D  | 
{output[m]}  | 
1  | 
Adr  | 
{input[n]}  | 
2  | 
RamNet  | 
input  | 
3  | 
Ren  | 
input  | 
WRITE_PORT
Description
A "write port" of a multi-port RamNet.
The RamNet port is normally connected to a net which
interconnects all read/write-ports of the same RAM.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
RamNet  | 
output  | 
1  | 
Adr  | 
{input[m]}  | 
2  | 
D  | 
{input[n]}  | 
3  | 
Wen  | 
input  | 
CLOCKED_WRITE_PORT
Description
A "clocked write port" of a multi-port RamNet.
The RamNet port is normally connected to a net which
interconnects all read/write-ports of the same RAM.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
RamNet  | 
output  | 
1  | 
Adr  | 
{input[m]}  | 
2  | 
D  | 
{input[n]}  | 
3  | 
Clk  | 
input  | 
4  | 
Wen  | 
input  | 
Wide State Elements
WIDE_DFF
Description
A wide flip-flop.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
D  | 
{input[n]}  | 
2  | 
Clk  | 
input  | 
3  | 
Reset  | 
{input[n]} (optional)  | 
4  | 
Set  | 
{input[n]} (optional)  | 
WIDE_DLATCH
Description
A wide dlatch.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
D  | 
{input[n]}  | 
2  | 
En  | 
input  | 
3  | 
Reset  | 
{input[n]} (optional)  | 
4  | 
Set  | 
{input[n]} (optional)  | 
WIDE_DFFCV
Description
A wide condition/value flip-flop.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
D  | 
{input[n]}  | 
2  | 
Clk  | 
input  | 
3  | 
Condition  | 
{input[n]}  | 
4  | 
Value  | 
{input[n]}  | 
WIDE_DLATCHCV
Description
A wide condition/value dlatch.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[n]}  | 
1  | 
D  | 
{input[n]}  | 
2  | 
En  | 
input  | 
3  | 
Condition  | 
{input[n]}  | 
4  | 
Value  | 
{input[n]}  | 
Assertions
Description
The following primitive functions represent SystemVerilog Assertions (SVA), as created by our SystemVerilog front-end. All ports are single-bit.
Assertion Primitives (1 Input)
HDL_ASSERTION
Description
Generic HDL assertion.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
A  | 
input  | 
SVA_IMMEDIATE_ASSERT
Description
assert <expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
A  | 
input  | 
SVA_ASSERT
Description
assert property <expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
A  | 
input  | 
SVA_COVER
Description
cover property <expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
A  | 
input  | 
SVA_IMMEDIATE_COVER
Description
cover #0 <expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
A  | 
input  | 
SVA_ASSUME
Description
assume property <expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
A  | 
input  | 
SVA_IMMEDIATE_ASSUME
Description
assume #0 <expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
A  | 
input  | 
SVA_EXPECT
Description
expect property <expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
A  | 
input  | 
Unary SVA Operators (1 Output, 1 Input)
SVA_POSEDGE
Description
posedge <expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_NOT
Description
not <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_FIRST_MATCH
Description
first_match <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_ENDED
Description
<seq_expr>.ended
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_MATCHED
Description
<seq_expr>.matched
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_CONSECUTIVE_REPEAT
Description
<seq_expr> [* <const_or_range_expr>]
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_NON_CONSECUTIVE_REPEAT
Description
<seq_expr> [*= <const_or_range_expr>]
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_GOTO_REPEAT
Description
<seq_expr> [*-> <const_or_range_expr>]
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_MATCH_ITEM_TRIGGER
Description
(<sequence_expr>,<local_var>=<expr>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_WITHIN_RANGE
Description
##[range] <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_STRONG
Description
strong (<seq_expr>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_WEAK
Description
weak (<seq_expr>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_RESTRICT
Description
restrict (<property_expr>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_TRIGGERED
Description
<sequence_expr>.triggered
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_NEXTTIME
Description
nexttime <property_expr>
or
nexttime [<constant_expr>] <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_S_NEXTTIME
Description
s_nexttime <property_expr>
or
s_nexttime [<constant_expr>] <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_ALWAYS
Description
always <property_expr>
or
always [<cycle_delay_constant_range_expr>] <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_S_ALWAYS
Description
s_always [<constant_range>] <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_S_EVENTUALLY
Description
s_eventually <property_expr>
or
s_eventually [<cycle_delay_constant_range_expr>] <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
SVA_EVENTUALLY
Description
eventually [<constant_range>] <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
Binary SVA Operators (1 Output, 2 Inputs)
SVA_AND
Description
<property_expr> and <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_OR
Description
<property_expr> or <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_SEQ_AND
Description
<seq_expr> and <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_SEQ_OR
Description
<seq_expr> or <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_EVENT_OR
Description
Event 'or' in the argument of a sequence or property, e.g.
@(posedge clk) seq1(in1 or in2);
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_OVERLAPPED_IMPLICATION
Description
<seq_expr> \|-> <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_NON_OVERLAPPED_IMPLICATION
Description
<seq_expr> \|=> <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_OVERLAPPED_FOLLOWED_BY
Description
<seq_expr> #-# <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_NON_OVERLAPPED_FOLLOWED_BY
Description
<seq_expr> #=# <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_INTERSECT
Description
<seq_expr> intersect <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_THROUGHOUT
Description
<expr> throughout <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_WITHIN
Description
<seq_expr> within <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_AT
Description
@(<clock_expr) <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_DISABLE_IFF
Description
disable iff (<expr>) <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_SAMPLED
Description
$sampled(<expr>,<clock_expr>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_ROSE
Description
$rose(<expr>,<clock_expr>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_FELL
Description
$fell(<expr>,<clock_expr>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_STABLE
Description
$stable(<expr>,<clock_expr>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_PAST
Description
$past(<expr>,<no_of_ticks>,<clock_expr>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_MATCH_ITEM_ASSIGN
Description
(<sequence_expr>, <local_var> = <expression>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_SEQ_CONCAT
Description
<seq_expr> ##(cycle_delay_range) <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_UNTIL
Description
<property_expr> until <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_S_UNTIL
Description
<property_expr> s_until <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_UNTIL_WITH
Description
<property_expr> until_with <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_S_UNTIL_WITH
Description
<property_expr> s_until_with <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_IMPLIES
Description
<property_expr> implies <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_IFF
Description
<property_expr> iff <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_ACCEPT_ON
Description
accept_on (<expr_or_dist>) <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_REJECT_ON
Description
reject_on (<expr_or_dist>) <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_SYNC_ACCEPT_ON
Description
sync_accept_on (<expr_or_dist>) <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
SVA_SYNC_REJECT_ON
Description
sync_reject_on (<expr_or_dist>) <property_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
Ternary SVA Operators (1 Output, 3 Inputs)
SVA_IF
Description
if (expr) <seq_expr> else <seq_expr>
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
1  | 
A  | 
input  | 
2  | 
B  | 
input  | 
3  | 
C  | 
input  | 
Global Clocking
SVA_GLOBAL_CLOCKING_DEF
Description
SVA Global Clocking Definition.
global clocking <clk_expr>; endclocking
Ports
| No | Name | Type | 
|---|---|---|
0  | 
A  | 
input  | 
SVA_GLOBAL_CLOCKING_REF
Description
Global clocking reference.
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
output  | 
SVA_WIDE_SAMPLED
Description
$sampled(<expr>,<clock_expr>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[m]}  | 
1  | 
A0  | 
{input[m]}  | 
2  | 
A1  | 
{input[n]}  | 
SVA_WIDE_STABLE
Description
$stable(<expr>,<clock_expr>)
Ports
| No | Name | Type | 
|---|---|---|
0  | 
Y  | 
{output[m]}  | 
1  | 
A0  | 
{input[m]}  | 
2  | 
A1  | 
{input[n]}  | 
Spice-Level Functions
Description
The primitive functions below describe transistor devices. The function names are borrowed from Spice devices (with the same meaning). Of course, all ports are single-bit.
On the API-level, a cell’s function can be queried using the
primFuncOf command ($db primFuncOf $cell).
NMOS
Description
NMOS transistor.
The first three ports are drain, gate, and source respectively, the fourth port (bulk) is optional;
Additional ports may be added (e.g. for substrate).
Example
$db load primitive nmos NMOS
$db load port D *
$db load port G *
$db load port S *
$db load port B *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
drain  | 
inout  | 
1  | 
gate  | 
input  | 
2  | 
source  | 
inout  | 
3  | 
bulk  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
PMOS
Description
A PMOS transistor.
The first three ports are drain, gate, and source respectively, the fourth port (bulk) is optional;
Additional ports may be added (e.g. for substrate).
Ports
| No | Name | Type | 
|---|---|---|
0  | 
drain  | 
inout  | 
1  | 
gate  | 
input  | 
2  | 
source  | 
inout  | 
3  | 
bulk  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
NPN
Description
A bipolar NPN transistor.
The first three ports are collector, base, and emitter respectively, the fourth port (substrate) is optional;
Additional ports may be added.
Example
$db load primitive npn NPN
$db load port C *
$db load port B *
$db load port E *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
collector  | 
inout  | 
1  | 
base  | 
input  | 
2  | 
emitter  | 
inout  | 
3  | 
substrate  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
PNP
Description
A bipolar PNP transistor.
The first three ports are collector, base, and emitter respectively, the fourth port (substrate) is optional;
Additional ports may be added.
Example
$db load primitive pnp PNP
$db load port C *
$db load port B *
$db load port E *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
collector  | 
inout  | 
1  | 
base  | 
input  | 
2  | 
emitter  | 
inout  | 
3  | 
substrate  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
NMOSM
Description
NMOS transistor with multiple gates.
The first three ports are drain, gate, and source respectively, the other optional ports are gates or bulk;
Additional ports may be added (e.g. for substrate).
Example
$db load primitive nmos NMOSM
$db load port D *
$db load port G *
$db load port S *
$db load port G2 * -flag multigate
$db load port B *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
drain  | 
inout  | 
1  | 
gate  | 
input  | 
2  | 
source  | 
inout  | 
3  | 
gate2  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
PMOSM
Description
A PMOS transistor with multiple gates.
The first three ports are drain, gate, and source respectively, the other optional ports are gates or bulk; the fourth port (bulk) is optional;
Additional ports may be added (e.g. for substrate).
Ports
| No | Name | Type | 
|---|---|---|
0  | 
drain  | 
inout  | 
1  | 
gate  | 
input  | 
2  | 
source  | 
inout  | 
3  | 
bulk  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
NPNM
Description
A bipolar NPN transistor with optional bases.
The first three ports are collector, base, and emitter respectively, the other optional ports are bases or bulk;
Additional ports may be added.
Example
$db load primitive npn NPNM
$db load port C *
$db load port B *
$db load port E *
$db load port B2 * -flag multigate
Ports
| No | Name | Type | 
|---|---|---|
0  | 
collector  | 
inout  | 
1  | 
base  | 
input  | 
2  | 
emitter  | 
inout  | 
3  | 
base2  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
PNPM
Description
A bipolar PNP transistor with multiple bases.
The first three ports are collector, base, and emitter respectively, the other optional ports are bases or bulk;
Additional ports may be added.
Example
$db load primitive pnp PNPM
$db load port C *
$db load port B *
$db load port E *
$db load port B2 * -flag multigate
Ports
| No | Name | Type | 
|---|---|---|
0  | 
collector  | 
inout  | 
1  | 
base  | 
input  | 
2  | 
emitter  | 
inout  | 
3  | 
base2  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
RES
Description
A resistor.
Two inout (bidirectional) ports, the third port (bulk) is optional;
Additional ports may be added (e.g. for substrate).
Example
$db load primitive res RES
$db load port a *
$db load port b *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
p1  | 
inout  | 
1  | 
p2  | 
inout  | 
2  | 
bulk  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
CAP
Description
A capacitor.
Two inout (bidirectional) ports, the third port (bulk) is optional;
Additional ports may be added (e.g. for substrate).
Example
$db load primitive cap CAP
$db load port a *
$db load port b *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
p1  | 
inout  | 
1  | 
p2  | 
inout  | 
2  | 
bulk  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
INDUCTOR
Description
An inductor.
Two inout (bidirectional) ports, the third port (bulk) is optional;
Additional ports may be added (e.g. for substrate).
Example
$db load primitive ind INDUCTOR
$db load port a *
$db load port b *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
p1  | 
inout  | 
1  | 
p2  | 
inout  | 
2  | 
bulk  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
DIODE
Description
A diode.
The first port is the anode, the second port is the cathode, the optional third port is bulk;
Additional ports may be added (e.g. for substrate).
Example
$db load primitive diode DIODE
$db load port anode *
$db load port catho *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
anode  | 
inout  | 
1  | 
cathode  | 
inout  | 
2  | 
bulk  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
ZDIODE
Description
A Zener diode.
The first port is the anode, the second port is the cathode, the optional third port is bulk;
Additional ports may be added (e.g. for substrate).
Example
$db load primitive zdiode ZDIODE
$db load port anode *
$db load port catho *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
anode  | 
inout  | 
1  | 
cathode  | 
inout  | 
2  | 
bulk  | 
input (optional)  | 
…  | 
…  | 
input (optional)  | 
SWITCH
Description
A (controlled) switch.
Two inout (bidirectional) ports, the optional third and fourth ports are used as control inputs.
Example
$db load primitive switch SWITCH
$db load port a *
$db load port b *
$db load port c1 *
$db load port c2 *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
p1  | 
inout  | 
1  | 
p2  | 
inout  | 
2  | 
Ctrl+  | 
input (optional)  | 
3  | 
Ctrl-  | 
input (optional)  | 
VSOURCE
Description
A voltage source.
The primitive has either two ports (+, -) or
four (+, -, ctrl+, ctrl-).
If there are only two ports it is a "normal" voltage source,
if there are four ports it’s a "voltage controlled" voltage source — in this case the additional two ports are the control inputs.
Example
$db load primitive vsrc VSOURCE
$db load port + *
$db load port - *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
+  | 
inout  | 
1  | 
-  | 
inout  | 
2  | 
Ctrl+  | 
input (optional)  | 
3  | 
Ctrl-  | 
input (optional)  | 
ISOURCE
Description
A current source.
The primitive has either two ports (+, -) or
four (+, -, ctrl+, ctrl-).
If there are only two ports it is a "normal" current source,
if there are four ports it’s a "voltage controlled" current source — in this case the additional two ports are the control inputs.
Example
$db load primitive isrc ISOURCE
$db load port + *
$db load port - *
$db load port c+ *
$db load port c- *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
+  | 
inout  | 
1  | 
-  | 
inout  | 
2  | 
Ctrl+  | 
input (optional)  | 
3  | 
Ctrl-  | 
input (optional)  | 
TRANSLINE
Description
A transmission line.
The primitive has 2*n ports;
the first n ports are on the one side of the transmission line,
the second n ports are on the other side.
Example
$db load primitive transline TRANSLINE
$db load port a0 *
$db load port a1 *
$db load port a2 *
$db load port b0 *
$db load port b1 *
$db load port b2 *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
in0  | 
inout  | 
1  | 
in1  | 
inout  | 
…  | 
…  | 
…  | 
(n-1)  | 
in(n-1)  | 
inout  | 
n  | 
out0  | 
inout  | 
n+1  | 
out1  | 
inout  | 
…  | 
…  | 
…  | 
2*n-1  | 
out(n-1)  | 
inout  | 
UDRCLINE
Description
An UDRC line.
The first two ports are the actual line, the third port is ground.
Example
$db load primitive udrcline UDRCLINE
$db load port a *
$db load port b *
$db load port g *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
in  | 
inout  | 
1  | 
out  | 
inout  | 
2  | 
ground  | 
inout  | 
AMP
Description
An operational amplifier.
This primitive comes with 3, 5, or 7 ports.
In the 3-port version, only the positive input (+),
negative input (-), and output (out) are present.
In the 5-port version, only the positive input (+),
negative input (-), output (out), vcc, and vee are present.
In the 7-port version, all ports are present — including the two compensation ports comp1 and comp2.
Example
$db load primitive amp AMP
$db load port - *
$db load port + *
$db load port out *
$db load port vcc *
$db load port vee *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
-  | 
input  | 
1  | 
+  | 
input  | 
2  | 
out  | 
output  | 
3  | 
comp1  | 
inout (only in the 7-port version)  | 
4  | 
comp2  | 
inout (only in the 7-port version)  | 
5  | 
vcc  | 
input (only in the 5- and 7-port versions)  | 
6  | 
vee  | 
input (only in the 5- and 7-port versions)  | 
JOSEPHSON_JUNCTION
Description
A Josephson Junction.
This primitive requires 2 ports.
Example
$db load primitive jj JOSEPHSON_JUNCTION
$db load port n1 *
$db load port n2 *
Ports
| No | Name | Type | 
|---|---|---|
0  | 
n1  | 
inout  | 
1  | 
n2  | 
inout  | 
UNKNOWNDEV
Description
An unknown device.
This primitive is expected to have at least two inout (bidirectional) ports.
Additional input ports may be added (e.g. for substrate).
Ports
| No | Name | Type | 
|---|---|---|
0  | 
p1  | 
inout  | 
1  | 
p2  | 
inout  | 
…  | 
…  | 
input (optional)  |