![]() |
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
|
|
![]() |