Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| language:langs:sizing [2021/03/05 19:38] – [P/N ratios] ole | language:langs:sizing [2025/08/31 16:04] (current) – [Specifying flavors and multi-fingered devices] 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 | ||
| - | < | + | < |
| 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: | ||
| - | < | + | < |
| prs { | prs { | ||
| in< | in< | ||
| 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/ | Often all one is interested in is sizing the gates so that they have some unit drive strength, where the unit selected is technology/ | ||
| - | < | + | < |
| prs { | prs { | ||
| in => out- | in => out- | ||
| Line 32: | Line 32: | ||
| This has the same effect as: | This has the same effect as: | ||
| - | < | + | < |
| 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. | ||
| - | < | + | < |
| 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: | ||
| - | < | + | < |
| 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: | ||
| - | < | + | < |
| | | ||
| out {-5,lvt,2 ; +4,lvt,2 } | out {-5,lvt,2 ; +4,lvt,2 } | ||
| Line 72: | Line 72: | ||
| </ | </ | ||
| This says that the pull-down network should be sized with 5 times the drive strength, and all gates should use two fingers and '' | This says that the pull-down network should be sized with 5 times the drive strength, and all gates should use two fingers and '' | ||
| - | < | + | < |
| 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: | ||
| - | < | + | < |
| sizing { | sizing { | ||
| unit_n <- 20; | unit_n <- 20; | ||
| Line 87: | Line 87: | ||
| </ | </ | ||
| This says that the unit n-transistor is 20 lambda wide. | This says that the unit n-transistor is 20 lambda wide. | ||
| + | |||
| + | ===== Syntactic replication ===== | ||
| + | |||
| + | Syntactic replication can be used within the sizing body to, for example, specify drive strengths for an array of signals. | ||
| + | <code act> | ||
| + | sizing { | ||
| + | unit_n <- 5; | ||
| + | (; i : 10 : out[i]{-1}) | ||
| + | } | ||
| + | </ | ||
| + | |||
| ===== Example using implementation relation ===== | ===== Example using implementation relation ===== | ||
| Line 92: | Line 103: | ||
| 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: | ||
| - | < | + | < |
| defproc inv (bool? i; bool! o) | defproc inv (bool? i; bool! o) | ||
| { | { | ||
| Line 116: | Line 127: | ||
| ===== P/N ratios ===== | ===== P/N ratios ===== | ||
| - | for state holding gates you want to have a different ratio between P and N compared to normal logic gates, | + | The default sizing equalizes drive strengths |
| - | for this you can add: | + | < |
| - | + | ||
| - | < | + | |
| prs { | prs { | ||
| Line 126: | Line 135: | ||
| } | } | ||
| sizing { | sizing { | ||
| - | p_n_mode <- 1; | + | p_n_mode <- 1; /* this modifies the sizing */ |
| out {-1} | out {-1} | ||
| } | } | ||
| </ | </ | ||
| - | that produces a different | + | The ratio will be computed using parameters |
| - | < | + | |
| - | prs { | + | |
| - | ~in[0]< | + | |
| - | ~in[0]< | + | |
| - | } | + | |
| - | </ | + | |
| + | ===== Low leak addition on channel length ===== | ||
| - | ===== low leak addition on channel | + | In some technologies, |
| - | in some technologies you want to additionally have low leakage gates, so gates with longer channel | + | For adding a specified additional length |
| - | for adding a specified additional length to the minimum length of your transistors, | + | < |
| - | + | ||
| - | < | + | |
| prs { | prs { | ||
| in => out- | in => out- | ||
| Line 157: | Line 159: | ||
| </ | </ | ||
| - | that translates to: | + | To configure how much is added add this line to the configuration |
| - | + | ||
| - | < | + | |
| - | prs * { | + | |
| - | in <10> -> out- | + | |
| - | ~in <20> -> out+ | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | to configure how much is added add this line to the configuration | + | |
| < | < | ||
| Line 173: | Line 166: | ||
| </ | </ | ||
| + | The length unit here is absolute (i.e. not scaled), so the amount specified above is 15nm. | ||