Thus far we have described the basic methodology for producing a schematic. Armed with this information, users can quickly produce schematics of simple circuits. However, a lot has been skipped over, including the use of multi-conductor nets and vectorized instances. This section will review the basic connectivity concepts, and introduce these new topics.
Devices and subcircuits generally have ``pins'' which are hot-spots in the drawing where connection can occur. These hot spots may or may not be marked in the device or subcircuit symbol or schematic. In any case, pressing the terms button in the electrical side menu will cause the display of terminal symbols at these locations.
The current cell will have its own terminal locations, if any have been defined with the subct command in the side menu. These will be the connections points to instances of the current cell.
Establishing connectivity in the schematic involves logically grouping the device, subcircuit, and cell terminals that should be connected. Each such group is termed a ``net''. There are a number of ways to define this grouping.
These two methods illustrate connection by location. It is also possible to use connection by name. For this, one must use named nets. Looking ahead just a bit, it is possible for a net to be scalar (single conductor) or multi-conductor. The type of net is described by the name, which is interpreted as a ``net expression'', which is a syntax which allows detailed definition of the conductors in the net.
There are several ways by which a net can acquire a name.
A scalar net may have multiple ``candidate names'', and each can be used to establish connections by name. However, the single name chosen to represent the net in netlist output will be the name that comes first in alphabetical order.
Nets that otherwise appear disjoint but have a common name are actually connected. This illustrates connect by name. In fact, it is possible to draw perfectly good schematics without using wires, by using terminal devices only. The schematics produced by Xic from SPICE files or physical extraction use this approach.
Xic supports multi-conductor wire nets in schematics, using a syntax and methodology that should be familiar to users of Cadence Virtuoso. The net name uses a syntax which describes the net. Unnamed nets will assume the characteristics of connected terminals.
There are three types of net.
A scalar net name consists of a simple name, or an indexed vector name, in a format to be described.
basename[start:end]
The start and end are non-negative integers. The two colon-separated numbers provides a range of subscripts which identify the individual conductors, or ``bits'', of the net.
For example, the vector net ``foo[3:0]'' consists of four conductors, in order ``foo[3]'', ``foo[2]'', ``foo[1]'', and ``foo[0]''. Note that the range values can be ascending or descending.
In Xic, the square brackets can be replaced by <...> or {...}. That is, for subscripting in Xic, square brackets, curly brackets, and angle brackets are equivalent. This documentation will use square brackets.
Vector nets differ fundamentally from scalar nets in Xic in that they simply reference scalar nets. The scalar nets actually provide the electrical connections, and the correspondence between layout and schematic. The vector and multi conductor nets in general simply provide an organizational framework for the scalar nets.
In particular, this requires that each ``bit'' of a vector net have an existing scalar net of the same name. In the example above, for the vector net foo[3:0] to be valid, the individual scalar nets foo[3] etc. must exist.
a,data[0:7],addr[2]
b0,b1,b2
These are simple cases of a net expression which describes the conductor sequence of a general net. Net expressions and vector expressions may be familiar from Cadence Virtuoso, and in fact the same operations and syntax are supported.