|
Magic Mailing List |
|
From: Jeff W. Sondeen (sondeen AT rcf-fs DOT usc.edu) Date: Wed Oct 24 2001 - 14:41:36 EDT
excellent discussion, all i would add is that you can use subcircuits
to reduce the spice file editting you need to do (so change the m1005 to
xm1005, i think)
there is a ".r" file for tech tech file: eg:
% more 2001a/SCN3ME_SUBM.30.r
.subckt nwellResistor d g s b W=1 L=1 Rsquare = 816
R d s 'L*Rsquare/W'
Rg d g 0
Rb b 0 0
.ends
.subckt polyResistor d g s b W=1 L=1 Rsquare = 22.3
R d s 'L*Rsquare/W'
Rg d g 0
Rb b 0 0
.ends
...
/jeff
R. Timothy Edwards writes:
> Dear John,
>
> This may be an end-run around your problem, but this is how I have
> dealt with resistor extraction in the recent past (also for a DAC
> circuit). For this application, I first tried looking at extres, but
> as I had similar problems getting it to do what I wanted, I took the
> approach outlined here (to any magic-dev people listening in to this
> discussion: Is extres broken, and if so, what can we do about it?
> If extres is not broken, or else once we fix it to our satisfaction,
> is there any reason for it to be separate from the regular "extract"?).
>
> 1) Use the appropriate tech file. I was using the AMI tech file
> SCN3ME_SUBM.30.tech27 from Jeff Sondeen's "2000 beta" set. Most
> if not all of these *.tech27 files contain a layer type "rpoly" which
> represents nothing more than "poly" used as a resistor (sort of like
> using a "resistor ID box" in other layout editors). "rpoly" requires
> another layer called "pseudo_rpoly", which looks sort of like a well
> or implant, to overlap the "rpoly" layer by at least one unit on all
> sides ("rpoly" acts like "poly" + "pseudo_rpoly").
>
> 2) Draw "pseudo_rpoly" on top of poly wherever you want to define a
> resistor. A typical resistor looks like:
>
> ppp
> ppp
> rRRRr p = polysilicon
> rRRRr r = pseudo_rpoly
> rRRRr R = rpoly (poly + pseudo_rpoly)
> rRRRr
> rRRRr
> ppp
> ppp
>
> 3) Extract. The "extract" section of the 2000b tech files contains the
> line:
>
> fet rpoly poly,pc 2 polyResistor Gnd! nwell,pwell 0 0
>
> which after ext2spice gives you something like this:
>
> m1005 rtap a_536_60 rout Gnd zpolyResistor w=21 l=20
> + ad=0 pd=0 as=0 ps=0
>
> This means that resistors get extracted as FETS. However, it is not
> too much trouble to look for the lines in the resulting SPICE netlist
> containing the model name "polyResistor" and run a "sed" script or
> somesuch to replace the transistor with a resistor. Here is where
> the use of "pseudo_rpoly" comes into effect: Due to the overlap,
> the "pseudo_rpoly" acts like a transistor gate for the purposes of
> transistor extraction. Therefore, the gate node in the SPICE deck
> can be ignored, and the w=(value) and l=(value) terms give the
> proper width and length of the transistor, which in turn can be
> used to compute squares, and in conjunction with the polysilicon
> resistivity for the technology, the resistance. If the pseudo_rpoly
> layer runs as close to contacts as possible, then the computed
> resistance will be reasonably accurate. In the above example from
> my DAC, the SPICE line defines a 0.95-square resistor between nodes
> "rtap" and "rout". Node "a_536_60" (the pseudo_rpoly "gate") is
> ignored, and the "substrate" connection Gnd is meaningless.
>
> I hope this explanation helps!
> Regards,
> Tim
|
|
|
|