FreeCalypso > hg > ueda-linux
diff ueda/doc/netlisting.txt @ 0:cd92449fdb51
initial import of ueda and ifctf-part-lib from ifctfvax CVS
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 20 Jul 2015 00:24:37 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ueda/doc/netlisting.txt Mon Jul 20 00:24:37 2015 +0000 @@ -0,0 +1,256 @@ +How uEDA tracks electrical interconnect (netlist) information + +Whereas the MCL (see mcldoc.txt) is the authoritative source of information +about all components making up a board design, information about the way they +are interconnected is stored in the schematic sheets (.usch files) in the +language described in uschemlang.txt. Electrical connections are declared by +way of assigning component pins to named or unnamed nets and may or may not be +represented graphically. The following two constructs in the uschem language +connect component pins to nets: + +* Net and GraphNet objects +* PinToNet decorations on component instance objects + +Whichever method is used (see uschemlang.txt for the syntax details), the +declaration of an electrical connection effectively consists of the following +3 parts: + +* Identification of the component involved; +* Identification of which pin to connect; +* The name of the net. (Net and GraphNet objects can create unnamed nets - + those connect together everything listed in the respective object, but + nothing else can connect to such nets.) + +While it's possible for the component identification to be equal to the refdes +as given in the MCL and for the pin identification to be the "raw" pin number, +uEDA provides two mechanisms that allow the interconnect information to be +entered in a slightly more high-level form: component instances and pinout +mapping. + +Component instances + +In uEDA a component instance is essentially a reference from a schematic sheet +to a component in the MCL. In a graphical schematic each component instance +would normally be represented by a graphical symbol, and all net connections +made in schematic sheets actually refer to component instances rather than to +MCL components directly. + +For trivial components like resistors and capacitors as well as some simple +ICs there is normally only one instance per component, hence the component in +the MCL and the instance in a .usch sheet are one and the same for all practical +purposes. However, for many of the more complex components it is generally +desirable to break the component up into multiple sections (which may be +identical or heterogeneous) represented separately in the schematic source code +for the design. That's what the component instances in uEDA are for. + +In the case when there are multiple component instances referring to the same +component, these instances may appear either in the same schematic sheet or in +different sheets. If a given schematic sheet contains only one instance of a +given MCL component, regardless of whether or not there are other instances for +the same component in other sheets, the instance name may be equal to the refdes +of the component - that's what happens when the user doesn't make use of the +component instance mechanism. However, if a single schematic sheet contains +more than one instance for a given component, there needs to be a way to +distinguish between them. + +When uEDA tools process a uschem sheet and match it to the MCL, the following +algorithm is used to match component instances to components: + +1. All component instance names appearing in a given schematic sheet are + required to be unique. +2. Each component instance name is stripped of any trailing lowercase letters to + obtain the corresponding refdes. +3. Each refdes is looked up in the MCL - if not found, that is an error. + +Thus if you need to put multiple instances for a given component in a single +schematic sheet, give each a unique name consisting of the refdes with a unique +all-lowercase suffix appended to it. + +Pinout mapping + +uEDA allows one to use two different alphanumeric strings to identify the +individual pins of a component: pin name and pin number. Both are arbitrary +alphanumeric strings (actually strings of any printable ASCII characters subject +only to common sense limitations); the pin number string doesn't have to be +purely numeric. (For example, PGA and BGA packages normally use alphanumeric +pin numbers.) + +Pin numbers are what appears in the final netlist output from uschem-netlist(1), +and they may also be used in the schematic source code. If the source only uses +pin numbers for a given component, then there is no need for uEDA to know the +pinout of that component. However, uEDA also allows one to specify the pinout +mapping for a component and to use pin names instead of pin numbers. + +Pinouts are specified in dedicated pinout mapping files and brought into the +design via pinout= attributes in the MCL. Pinout mapping files use a very +straightforward format: each pin mapping is given on a separate line; each such +line consists of two fields separated by tabs or spaces: the left field is the +pin name and the right field is the pin number. Comments are marked by '#'; +all blank lines and comment lines are ignored. Any additional fields past the +pin number are currently ignored as well, but this behavior should not be relied +upon; any such line-appended comments should begin with a '#' character. + +The name of the pinout mapping file specified in the pinout= attribute is only +the base filename, not a pathname. uschem-netlist and uschem-print (the only +two programs in the uEDA suite that need pinout mappings) locate pinout mapping +files using the same mechanism that is used to locate graphical symbol files - +see uschem-netlist(1) and uschem-print(1). + +In addition to making the schematic source code more readable, pinout mappings +make it easy to support components that come in several different packages with +different physical pin numbers for the same logical functions. It is no longer +necessary to create multiple versions of the same graphical symbols with +different pin numbers embedded inside or to edit pin references in Net objects; +instead all those references can now be made by the logical pin name. If a +decision is made to change to a different package with a different pinout, only +the pinout= attribute in the MCL entry for the respective component needs to be +changed - at the same time when you change the manufacturer_part_number= and +footprint= attributes. + +By the same token it is no longer necessary to create special PCB footprints +with logical pin names embedded in them where pin number strings normally go: +instead one can take the natural approach of having footprints identify pins or +pads by their physical position, having schematics and symbols refer to pins by +their logical function only and using pinout mapping files to bridge the gap. +The pinout mapping feature is one of uEDA's main advantages over gEDA. + +Slotting + +The concept of slotting (and the term) originates in gEDA, but uEDA implements +it in a very different manner. uEDA's approach to slotting combines component +instances with pinout mapping in a special way. But first, what is slotting? + +Suppose that you have a physical component (typically an IC) that consists of +multiple identical logical blocks such that each of those blocks should be +treated as a separate device in the schematic source code. 74xx logic ICs are +a classic example. When one needs to describe the use of such a component in a +design, it is normally desirable to represent each slot as its own component +instance and furthermore to do it in such a way that one doesn't have to decide +upfront which slot will be used for what, allowing slots to be reassigned with +ease. + +In uEDA this feat is accomplished by combining component instances with pinout +mapping. When each slot is declared as a component instance, all connections +to it are made by logical names only: for example, a NAND gate that is 1/4th of +a 7400 would have connections made to A, B and Y rather than to specific pin +numbers. So far, so good. But how would the tools know whether A for example +should be mapped to pin 1, 4, 9 or 12? That is where the slot= attribute comes +in. It is one of the few attributes defined in the component instance +declaration (Component object) in a schematic sheet rather than in the MCL. +When uEDA tools map a pin name to a pin number for a component instance that has +the slot= attribute defined, the value of this attribute is appended to the pin +name after a colon, e.g., if the pin name is A and slot=1, the pin name looked +up in the pinout mapping table will be A:1. The pinout for a 7400 quad NAND +gate looks like this: + +#pin name pin number +A:1 1 +B:1 2 +Y:1 3 +A:2 4 +B:2 5 +Y:2 6 +GND 7 +Y:3 8 +A:3 9 +B:3 10 +Y:4 11 +A:4 12 +B:4 13 +Vcc 14 + +Note the GND and Vcc pins which are not slotted. It is perfectly legitimate to +have some component instances which have the slot= attribute selecting one of +the logic slots, yet have other component instances referring to the same +component (e.g., for the power pins) without slotting. + +The following pinout for an SN75LBC784 EIA-423 transceiver is a more complicated +example of heterogeneous slotting: + +#pin name pin number +Drvr_In:3 1 +Rcvr_Out:3 2 +BIAS1 3 +Drvr_In:4 4 +Rcvr_Out:4 5 +BIAS2 6 +Vss 7 +GND 8 +Rcvr_In_N:4 9 +Drvr_Out:4 10 +Rcvr_In_N:3 11 +Drvr_Out:3 12 +Rcvr_In_P:3 13 +Rcvr_In_P:4 14 +Rcvr_In_P:1 15 +Rcvr_In_P:2 16 +Rcvr_In_N:2 17 +Drvr_Out:2 18 +Rcvr_In_N:1 19 +Drvr_Out:1 20 +Vdd 21 +Rws 22 +Drvr_In:1 23 +Rcvr_Out:1 24 +BIAS3 25 +Drvr_In:2 26 +Rcvr_Out:2 27 +BIAS4 28 + +This IC has 4 driver sections, 4 receiver sections and a set of common pins. +The pinout file given above allows it to be represented schematically using a +separate component instance for each driver section (with slotting), a separate +set of component instances for the receiver sections (an independent set of +slots) and one or more non-slotted component instances for the common pins. + +It is also worth noting that slot names (the value of the slot= attribute) are +not restricted to numbers only and may in fact be arbitrary ASCII strings. For +example, it would be sensible to define the pinout for a bicolor LED with slots +named "red" and "green", having complete pin names such as A:green and C:red +with connections being made to just A and C on the proper instances. + +Netlist generation + +When uschem-netlist processes a set of schematic sheets and an MCL to compile a +complete netlist, it first resolves all pin names (with or without slots) to +physical pin numbers and tracks the connection information at the component +level, i.e., the information is effectively moved up from the instance level at +which it is specified in the schematic source code to the component level. The +netlist data structures constructed by uschem-netlist maintain a hard +requirement that every physical pin of every component listed in the MCL be +either connected to exactly one net or left unconnected; thus any attempt to +connect the same physical pin to more than one net will be detected and flagged +as an error regardless of how each connection was specified in the source code. + +One may use the NoConnect decoration on a component instance object to declare +explicitly that a given pin shall be left unconnected. uschem-netlist will note +such declarations and flag an error if an attempt is made anywhere else in the +source code to connect the same physical pin to some net. + +Differences from gEDA + +The main difference between gEDA and uEDA with regard to netlisting is that in +uEDA graphical elements such as symbols and net lines do not create electrical +connections, they merely illustrate them. The uschem language (documented fully +in uschemlang.txt) is designed so that the graphical information and the +electrical interconnect information are mostly orthogonal. The electrical +interconnect information must be fully specified in the .usch files, not +inferred from symbol files, to the point that the latter files are not needed +for netlist generation and are not read by uschem-netlist at all. Thus gEDA +constructs such as auto-connected hidden power pins have no place in uEDA; the +closest one can get to that would be to insert a non-graphical component +instance with the necessary net connections into an otherwise graphical +schematic sheet. + +By a similar token the graphical symbols for power rails and such do not cause +a net to be connected to a rail, instead that connection is made by having the +proper netname set on the GraphNet object in the .usch file; the symbols merely +illustrate it graphically for those looking at the printout rather than the +source code. + +The downside with uEDA's approach is of course the very real possibility that +the netlist and the graphics will get out of sync, i.e., that the set of +electrical interconnections mentally inferred by someone looking at the +graphical schematic printout will differ from the set of interconnections +embodied in the source code processed by uEDA tools. See drc.txt for the +discussion of how uEDA addresses this problem.