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
language:langs:sizing [2021/03/07 07:30]
rajit [P/N ratios]
language:langs:sizing [2022/05/13 08:53] (current)
rajit
Line 2: Line 2:
  
 The sizing sub-language is used to simplify gate sizing specifications. The [[prs|prs]] sub-language already provides a mechanism to specify sizing, but this can become very verbose. For example, consider an inverter The sizing sub-language is used to simplify gate sizing specifications. The [[prs|prs]] sub-language already provides a mechanism to specify sizing, but this can become very verbose. For example, consider an inverter
-<code>+<code act>
 prs { prs {
   in => out-   in => out-
Line 9: Line 9:
 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: 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:
  
-<code>+<code act>
 prs { prs {
   in<10> -> out-   in<10> -> out-
Line 20: Line 20:
  
 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: 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:
-<code>+<code act>
 prs { prs {
   in => out-   in => out-
Line 32: Line 32:
  
 This has the same effect as: This has the same effect as:
-<code>+<code act>
 prs { prs {
   in <10> -> out-   in <10> -> out-
Line 40: Line 40:
 The p-to-n ratio is automatically used to size the pull-up network differently from the pull-down network.  The p-to-n ratio is automatically used to size the pull-up network differently from the pull-down network. 
  
-<code>+<code act>
 prs { prs {
   a & b => c-   a & b => c-
Line 51: Line 51:
  
 The example above results in the following sizing: The example above results in the following sizing:
-<code>+<code act>
 prs { prs {
   a<20> & b<20> -> c-   a<20> & b<20> -> c-
Line 66: Line 66:
  
 An example of the general form of the sizing directive is: An example of the general form of the sizing directive is:
-<code>+<code act>
  sizing {  sizing {
    out {-5,lvt,2 ; +4,lvt,2 }    out {-5,lvt,2 ; +4,lvt,2 }
Line 72: Line 72:
 </code> </code>
 This says that the pull-down network should be sized with 5 times  the drive strength, and all gates should use two fingers and ''lvt'' flavor transistors. The pull-up network should be sized with 4 times the unit drive strength, use ''lvt'' transistors, and two fingers. The order of the two drive strengths can be interchanged; i.e. this is the same as writing  This says that the pull-down network should be sized with 5 times  the drive strength, and all gates should use two fingers and ''lvt'' flavor transistors. The pull-up network should be sized with 4 times the unit drive strength, use ''lvt'' transistors, and two fingers. The order of the two drive strengths can be interchanged; i.e. this is the same as writing 
-<code>+<code act>
 sizing { sizing {
   out {+4,lvt,2 ; -5,lvt,2 }   out {+4,lvt,2 ; -5,lvt,2 }
Line 80: Line 80:
 If a circuit wants to use a different unit width, that can also be specified as follows: If a circuit wants to use a different unit width, that can also be specified as follows:
  
-<code>+<code act>
 sizing { sizing {
   unit_n <- 20;   unit_n <- 20;
Line 92: Line 92:
 The benefits of a sizing body are best illustrated when combined with the implementation relation. Consider the following example: The benefits of a sizing body are best illustrated when combined with the implementation relation. Consider the following example:
  
-<code>+<code act>
 defproc inv (bool? i; bool! o) defproc inv (bool? i; bool! o)
 { {
Line 118: Line 118:
 The default sizing equalizes drive strengths for the pull-up and pull-down network. For gates used in cyclic control logic in asynchronous design, the optimal drive strengths are different. To use the optimal ratio, you can add: The default sizing equalizes drive strengths for the pull-up and pull-down network. For gates used in cyclic control logic in asynchronous design, the optimal drive strengths are different. To use the optimal ratio, you can add:
  
-<code>+<code act>
  
 prs { prs {
Line 132: Line 132:
  
  
-===== low leak addition on channel length =====+===== Low leak addition on channel length =====
  
-in some technologies you want to additionally have low leakage gatesso gates with longer channel length.+In some technologies, the minimum length devices have extremely high leakage. To avoid using theseyou can specify an adjustment that will be added to the length to avoid this case. This adjustment is only applied to minimum length devices.
  
-for adding a specified additional length to the minimum length of your transistors, activate leak_adjust.+For adding a specified additional length to the minimum length of your transistors, activate ''leak_adjust''.
  
-<code>+<code act>
 prs { prs {
   in => out-   in => out-
Line 148: Line 148:
 </code> </code>
  
-that translates to: +To configure how much is added add this line to the configuration 
- +
-<code> +
-  prs * { +
-       in <10> -> out- +
-      ~in <20> -> out+ +
-  } +
-</code> +
- +
-to configure how much is added add this line to the configuration+
  
 <code> <code>
Line 164: Line 155:
 </code> </code>
  
 +The length unit here is absolute (i.e. not scaled), so the amount specified above is 15nm.