Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
tools:netgen [2020/04/29 14:02]
rajit
tools:netgen [2023/04/15 07:35] (current)
rajit [Output handling]
Line 44: Line 44:
 </code> </code>
  
-Finally, different transistor flavors can also be specified. The currently recognized flavors are:+Finally, different transistor flavors can also be specified. The recognized flavors are specified in the ACT configuration file. Commonly used names are:
    * ''svt'' : standard Vt    * ''svt'' : standard Vt
    * ''lvt'' : low Vt    * ''lvt'' : low Vt
    * ''hvt'' : high Vt    * ''hvt'' : high Vt
-   * ''od18'' : overdrive to 1.8V 
-   * ''od25'' : overdrive to 2.5V 
  
 The following shows how these can be used: The following shows how these can be used:
Line 56: Line 54:
    q<10,5,hvt> & r<10,5> -> d-    q<10,5,hvt> & r<10,5> -> d-
 </code> </code>
-In this example, the transistor gated by ''a'' is low Vt, while the one gated by ''q'' is high Vt. All others are standard Vt.+In this example, the transistor gated by ''a'' is low Vt, while the one gated by ''q'' is high Vt. All others are standard Vt. Additional details are available in the [[language:langs:prs|prs sub-language]] documentation.
  
  
Line 110: Line 108:
 </code> </code>
  
 +===== Output handling  =====
  
-===== Subcircuits ===== +ACT supports name mangling to sanitize the output so that it can be accepted by third-party tools. Since the largest variability in supported names is in different versions of SPICE, the ''prs2net'' tool also accepts another configuration file option called ''net.mangle_chars'' that can be used to change the name mangling that is used only for the output of ''prs2net''(The meaning of this configuration  parameter is the same as [[config:start#generic_configuration_settings|''act.mangle_chars'']].
- +
-Placing parts of a production rule set into a sub-circuit simplifies the job of a layout engineer because it is easier to view the netlist at a slightly higher level of abstraction. To support thiswe allow the automated generation of one level of hierarchy using the ''subckt'' construct.<code> +
-prs { +
-  ... +
-  subckt { +
-    a & b -> c- +
-   ~a & ~b -> c+ +
-  } +
-  ... +
-}</code> +
-places the C-element in a sub-cell that is automatically generated. The sub-circuit is generated in isolation, so this has a few implications: +
-   * State-holding/combinational behavior of an operator is determined in isolation within the sub-circuit. So if you have multiple production rules for a bool, make sure they are either all within the ''subckt'' or all outside it. +
-   * For a state-holding operator, the staticizer is generated within the sub-circuitThis means that if there is an inverter //outside// the sub-circuit, it will not be used by the staticizer within the sub-circuit. +
- +
 ===== Attributes ===== ===== Attributes =====
  
 Attributes can be attached to a production rule or pass transistor/transmission gate Attributes can be attached to a production rule or pass transistor/transmission gate
-using standard ''.act'' syntax. Attributes  currently recognized by ''netgen'' are available +using standard ''.act'' syntax. Some commonly used ones are:
-on the complete [[designtools:act:attributes|attribute list]]. Some commonly used ones are:+
    * ''keeper=0'' : do not generate a keeper for this node, even if it looks like a state-holding gate.    * ''keeper=0'' : do not generate a keeper for this node, even if it looks like a state-holding gate.
    * ''comb=1'' : use combinational feedback rather than a standard staticizer if the node is state-holding.    * ''comb=1'' : use combinational feedback rather than a standard staticizer if the node is state-holding.
-   * ''output=v'' : used for pass transistors to force either the source, drain, or both to be labelled as an output. This is useful for the ''PININFO'' directive emitted by ''netgen''. If the value ''v'' has bit zero set, then the source is marked as an output node. If ''v'' has bit one set, then the drain is marked as an output. By default, a node is considered an input if it does not have a production rule driving it. +   * ''output=v'' : used for pass transistors to force either the source, drain, or both to be labelled as an output. This is useful for the ''PININFO'' directive emitted by ''prs2net''. If the value ''v'' has bit zero set, then the source is marked as an output node. If ''v'' has bit one set, then the drain is marked as an output. By default, a node is considered an input if it does not have a production rule driving it. 
-   * ''loadcap=v'' : sets the load capacitance on the output to be a the specified value in fF. This is used to override the default setting specified in the configuration file. Note that netgen will use the last production rule's loadcap! So if you have a pullup and pulldown rule, and the pulldown rule is 2nd in your ACT file, you MUST put loadcap in the pulldown rule.  Safest bet is to put it in all your PRS.+   * ''loadcap=v'' : sets the load capacitance on the output to be a the specified value in fF. This is used to override the default setting specified in the configuration file.
  
  
Line 147: Line 130:
 </code> </code>
  
 +Attributes  currently recognized by ''prs2net'' are:
 +
 +^ Attribute ^ Meaning ^
 +| keeper | The production rules for a signal are analyzed to determine if the pull-up and pull-down networks are perfect complements of each other. If they aren't, then a keeper is generated. There are two common scenarios when this behavior is undesired: (i) the gate is intended to be dynamic, and so it is state-holding but a staticizer should not be generated. Set ''keeper'' to ''0'' for this behavior. (ii) the gate looks state-holding, but it is actually a combinational gate because certain inputs are supposed to be complements of each other. In this case, set ''keeper'' to ''2''. (iii) the gate is state-holding, is a C-element (uses ''#>''), is a two-input gate, and should use the H-topology C-element keeper structure. For this, set ''keeper'' to 3. |
 +| comb | If set to 1, uses combinational feedback rather than a weak inverter for the staticizer; if 0, uses a weak inverter instead of combinational feedback |
 +| iskeeper | used to let prs2net know that the specified production rule is in fact the manually  specified staticizer/keeper circuit. prs2net labels transistors used for keepers in the spice netlist, and this attribute can be used to ensure that manually specified keepers are also labeled (with ''_keeper''). |
 +| isckeeper | used to let prs2net know that the specified production rule is a combinational feedback style keeper circuit. These will be labeled with ''_ckeeper''. |
 +| loadcap | sets the load capacitance on the output to be a the specified value in pF. This is used to override the default setting specified in the configuration file |
 +| oresis | sets output resistance for node. This resistance is added in series to the output of the gate, and overrides the default from the prs2net configuration file |
 +| output | used for pass transistors to force either the source, drain, or both to be labelled as an output. This is useful for the PININFO directive emitted by prs2net. If the value v has bit zero set, then the source is marked as an output node. If v has bit one set, then the drain is marked as an output. By default, a node is considered an input if it does not have a production rule driving it. |
 +| N_reff | sets the n-stack effective resistance, overriding the default computed by prs2net. This is used to compute strengths of staticizers. The resistance for one transistor is computed as L/W where L and W are the length and width of the transistor respectively. |
 +| P_reff | same as N_reff, except sets strength of p-stack |