Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
language:langs:sizing [2020/05/03 08:40] rajit |
language:langs:sizing [2021/03/07 07:33] rajit [Low leak addition on channel length] |
||
---|---|---|---|
Line 62: | Line 62: | ||
Specifying sizing for a production rule that has manual sizing specified is a warning; in this case, the sizing directive is ignored. | Specifying sizing for a production rule that has manual sizing specified is a warning; in this case, the sizing directive is ignored. | ||
+ | |||
+ | ===== Specifying flavors and multi-fingered devices ===== | ||
An example of the general form of the sizing directive is: | An example of the general form of the sizing directive is: | ||
Line 80: | Line 82: | ||
< | < | ||
sizing { | sizing { | ||
- | unit_n 20; | + | unit_n |
out {-1}; | out {-1}; | ||
} | } | ||
Line 86: | Line 88: | ||
This says that the unit n-transistor is 20 lambda wide. | This says that the unit n-transistor is 20 lambda wide. | ||
+ | ===== Example using implementation relation ===== | ||
+ | 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) | ||
+ | { | ||
+ | prs { | ||
+ | i => o- | ||
+ | } | ||
+ | } | ||
+ | |||
+ | template< | ||
+ | defproc szinv <: inv() | ||
+ | { | ||
+ | sizing { | ||
+ | o {-drive} | ||
+ | } | ||
+ | } | ||
+ | |||
+ | defproc INVX1 <: szinv< | ||
+ | defproc INVX2 <: szinv< | ||
+ | </ | ||
+ | |||
+ | This is an example of defining two standard inverters, that correspond to the same logical production rules but having different sizing. | ||
+ | |||
+ | ===== P/N ratios ===== | ||
+ | |||
+ | 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: | ||
+ | |||
+ | < | ||
+ | |||
+ | prs { | ||
+ | in[1] & in[0] #> out- | ||
+ | } | ||
+ | sizing { | ||
+ | p_n_mode <- 1; /* this modifies the sizing */ | ||
+ | out {-1} | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | The ratio will be computed using parameters in the netlist section of the ACT [[config: | ||
+ | |||
+ | |||
+ | ===== Low leak addition on channel length ===== | ||
+ | |||
+ | In some technologies, | ||
+ | |||
+ | For adding a specified additional length to the minimum length of your transistors, | ||
+ | |||
+ | < | ||
+ | prs { | ||
+ | in => out- | ||
+ | } | ||
+ | sizing { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | To configure how much is added add this line to the configuration | ||
+ | |||
+ | < | ||
+ | # add to length for leakage management [used if l=min length] | ||
+ | real leakage_adjust 15e-9 | ||
+ | </ | ||
+ | The length unit here is absolute (i.e. not scaled), so the amount specified above is 15nm. |