Is there any reason why generic resistors are not ...
# sky130
c
Is there any reason why generic resistors are not recommended for analog applications? https://antmicro-skywater-pdk-docs.readthedocs.io/en/latest/rules/device-details.html#id48
m
Looks like the high precision resistors have more precise models.
h
@Chris this is a very specific thing of the
SKY130
PDK that there are poly resistors with pre-defined width. In all other PDKs I encountered the poly resistor
W
and
L
could be freely chosen, and the performance was reasonably well modelled. I am not saying that having resistors (and corresponding layout templates and simulation models) with a discrete
W
stepping is necessarily a bad thing, as it allows precise modeling, and the capturing of layout effects; It is just a bit unusual.
c
Yes that's exactly what I was wondering. I have not encountered this kind of design rule for resistor in the past so just want to double check.
Also, I noticed that the screenshots of those resistor symbols are from virtuoso where the pcell does provide the information of the resistance for a given geometry, but not the case for xschem. For a given ohm/sq (300 for P+poly) it is totally possible to calculate the resistance of a given shape of resistor, but is there any way for xschem to show this value to the designer in the schematic entry? Or do you figure out the actual resistance from the layout extraction? Thanks @Stefan Schippers
s
@Chris it is possible to show the resistance value, i can add the expression. This is what is done for example for mimcaps. The displayed value will be however an approximate value based on L/W*Rho (Rho= sheet resistance/sq). The actual resistance is computed in the model and is a complex function of various geometrical and physical effects, and include for example effective width and length calculations (Weff, Leff), additional contact resistances, temperature corrections and more. Symbols will need to be updated if process resistivity changes significantly.
h
@Stefan Schippers I guess showing this approximate value is fine, and done in quite a few PDKs. Designers have to be aware that the absolute R value should not be taken at face value, and work with proper ratios for matching R.
s
For res_high_po (P+ poly) although the sheet resistance is 317 Ohm/sq the effective resistance for a small 1um / 1um resistore is more than twice this value due to various small geometry effects:
Copy code
.subckt  sky130_fd_pr__res_high_po r0 r1 b
+ w=1 l=1
.param  mult = 1.0
+ rsheet = 317.3885
+ rbody_dw = -0.001
...
At bigger geometries resistance value gets closer to the rsheet value. see for example the simulated resistance of a W=1/L=10 resistor.
... and for a 3/30 resistor:
@Chris ( @Harald Pretl) all resistors now show the nominal value. The only ones i should not trust at all for displayed value and for designs that require precise resistors are the
res_high_po*
. Use
res_xhigh_po*
.
@Harald Pretl (Cc @Tim Edwards) About your post about resistors with fixed widths, the
res_xhigh_*
are all wrappers using a common
res_xhigh_po__base
subckt:
Copy code
.subckt  sky130_fd_pr__res_xhigh_po_1p41 r0 r1 b
.param  w = 1.41 l = 5 mult = 1.0
Xsky130_fd_pr__res_xhigh_po_1p41 r0 r1 b sky130_fd_pr__res_xhigh_po__base w = {w} l = {l} mult = {mult}
.ends sky130_fd_pr__res_xhigh_po_1p41
if the
res_xhigh_po__base
subckt fits well 0.35, 0.69, 1.41, 2.85, 5.73 widths i think it should fit all intermediate values. The discrete widths are probably the ones that have been characterized on silicon. The xschem
res_xhigh_po_xxxx
resistor symbols do not set the width when generating a netlist, since the W is fixed and defined in the subckt wrapper. For arbitrary W/L combinations
res_xhigh_po
should be used. That said, the generic
res_xhigh_po
(that allows any W/L combinations) does not use the
res_xhigh_po__base
subckt:
Copy code
.subckt  sky130_fd_pr__res_xhigh_po r0 r1 sub
+ w=1 l=1
.param  mult = 1.0
+ rsheet = 2000.0
...
...
.ends sky130_fd_pr__res_xhigh_po
t
@Stefan Schippers: That reflects the fact that the
res_xhigh_po
device was added new to the s130 process and did not previously exist in s8 except as an experimental device right before SkyWater made the switch from s8 to s130. The state of the open PDK is a bit sketchy around some of the newly-introduced devices like the extra-high resistance poly resistor and the MiM caps.
h
@Stefan Schippers @Tim Edwards If this is the case (and thanks for finding out) that the fixed-W poly resistors all call the same model, then a clean solution would be (not sure if we really want to do this, but would simplify things quite a bit): • Get rid of the fixed-W symbols in
xschem
and the p-cells in
magic
(but this causes issues with existing designs, but could be solved with a conversion script) • Only support the generic poly res symbol going forward • Make the generic poly res model use the base model that the fixed-W poly res have used • Only have a generic poly res p-cell in
magic
that supports W=0.35um … 6um
👍 1
c
Thanks for the update @Stefan Schippers. Were those changes you apply to the resistors up in the repository already?
s
@Chris the changes are in the xschem_sky130 github repository. If you reinstall open_pdks it will fetch the updated symbols. Or you can copy all the
res_*
symbols in your pdk directory: .../share/pdk/sky130A/libs.tech/xschem/sky130_fd_pr/ I suggest to do the update via
open_pdks
. While editing the resistors i found a couple of issues, the local interconnect resistor was incorrectly called res_generic_li, while the correct name is
res_generic_l1
, and also added
res_generic_m5
that was missing.
c
@Stefan Schippers Sounds good I will do the update now. Thanks!
s
@Chris I have done some basic validation and it seems that the value shown for the resistance values is a reasonable approximation of the simulated resistance. The only exceptions are the
res_high_po_*
resistors, where total resistance is heavily influenced by many parameters and can not be easily calculated from L/W and sheet resistance only. If you see significant discrepancies or other issues please report. Thank you.
c
@Stefan Schippers Sure, I will keep my eyes on it. I will let you know if I found anything on this. Thanks!