This is an old revision of the document!


Sizing sub-language

The sizing sub-language is used to simplify gate sizing specifications. The prs sub-language already provides a mechanism to specify sizing, but this can become very verbose. For example, consider an inverter

prs {
  in => out-
}

Now, if we want the pull-up network to have width 20 units and the pull-down to have width 10 units, this gets turned into:

prs {
  in<10> -> out-
 ~in<20> -> out+
}

Note that the convenience of specifying combinational logic is lost, as two production rules have to be specified to control the sizes of all the gates.

Often all one is interested in is sizing the gates so that they have some unit drive strength, where the unit selected is technology/project specific. The sizing body is the way this can be specified. Suppose the net section of the configuration file specifies that the unit drive strength is 10 lambda, and that the p-to-n ratio is 2. In this case, one can write the following instead:

prs {
  in => out-
}
sizing {
  out {-1}
}

The sizing body is a semi-colon separated list of directives. In the example above, the directive out {-1} specifies that the pull-down network (indicated by -) is to be sized with the drive strength of a unit n-transistor (assumed to be 10 lambda, in our example).

This has the same effect as:

prs {
  in <10> -> out-
 ~in <20> -> out+
}

The p-to-n ratio is automatically used to size the pull-up network differently from the pull-down network.