%!PS-Adobe-3.0 %%BoundingBox: (atend) %%Pages: (atend) %%PageOrder: (atend) %%DocumentFonts: (atend) %%Creator: Frame 5.1 %%DocumentData: Clean7Bit %%EndComments %%BeginProlog %- %- Frame ps_prolog 5.0, for use with Frame 5.0 products %- This ps_prolog file is Copyright (c) 1986-1996 Adobe Systems, Incoporated. %- All rights reserved. This ps_prolog file may be freely copied and %- distributed in conjunction with documents created using FrameMaker, %- FrameMaker/SGML FrameReader and FrameViewer as long as this %- copyright notice is preserved. %- %- FrameMaker users specify the proper paper size for each print job in the %- "Print" dialog's "Printer Paper Size" "Width" and "Height~ fields. If the %- printer that the PS file is sent to does not support the requested paper %- size, or if there is no paper tray of the proper size currently installed, %- then the job will not be printed. The following flag, if set to true, will %- cause the job to print on the default paper in such cases. /FMAllowPaperSizeMismatch false def %- %- Frame products normally print colors as their true color on a color printer %- or as shades of gray, based on luminance, on a black-and white printer. The %- following flag, if set to true, forces all non-white colors to print as pure %- black. This has no effect on bitmap images. /FMPrintAllColorsAsBlack false def %- %- Frame products can either set their own line screens or use a printer's %- default settings. Three flags below control this separately for no %- separations, spot separations and process separations. If a flag %- is true, then the default printer settings will not be changed. If it is %- false, Frame products will use their own settings from a table based on %- the printer's resolution. /FMUseDefaultNoSeparationScreen true def /FMUseDefaultSpotSeparationScreen true def /FMUseDefaultProcessSeparationScreen false def %- %- For any given PostScript printer resolution, Frame products have two sets of %- screen angles and frequencies for printing process separations, which are %- recomended by Adobe. The following variable chooses the higher frequencies %- when set to true or the lower frequencies when set to false. This is only %- effective if the appropriate FMUseDefault...SeparationScreen flag is false. /FMUseHighFrequencyScreens true def %- %- The following is a set of predefined optimal frequencies and angles for various %- common dpi settings. This is taken from "Advances in Color Separation Using %- PostScript Software Technology," from Adobe Systems (3/13/89 P.N. LPS 0043) %- and corrolated with information which is in various PPD (4.0) files. %- %- The "dpiranges" figure is the minimum dots per inch device resolution which %- can support this setting. The "low" and "high" values are controlled by the %- setting of the FMUseHighFrequencyScreens flag above. The "TDot" flags control %- the use of the "Yellow Triple Dot" feature whereby the frequency id divided by %- three, but the dot function is "trippled" giving a block of 3x3 dots per cell. %- %- PatFreq is a compromise pattern frequency for ps Level 2 printers which is close %- to the ideal WYSIWYG pattern frequency of 9 repetitions/inch but does not beat %- (too badly) against the screen frequencies of any separations for that DPI. % This is computed by taking dpi/9 as the ideal pixels per repetition, and then % computing a tiling size in printer pixels for each of the four separations as % (dpi/screenFreq)*(cos(screenAngle)+sin(screenAngle)) Actually, this is the same % for Cyan and Magenta). Then, we take a "nice" LCM of the tile sizes close to % the desired pattern tile where the beat factor is not more than 2 or 3. % /dpiranges [ 2540 2400 1693 1270 1200 635 600 0 ] def /CMLowFreqs [ 100.402 94.8683 89.2289 100.402 94.8683 66.9349 63.2456 47.4342 ] def /YLowFreqs [ 95.25 90.0 84.65 95.25 90.0 70.5556 66.6667 50.0 ] def /KLowFreqs [ 89.8026 84.8528 79.8088 89.8026 84.8528 74.8355 70.7107 53.033 ] def /CLowAngles [ 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 ] def /MLowAngles [ 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 ] def /YLowTDot [ true true false true true false false false ] def /CMHighFreqs [ 133.87 126.491 133.843 108.503 102.523 100.402 94.8683 63.2456 ] def /YHighFreqs [ 127.0 120.0 126.975 115.455 109.091 95.25 90.0 60.0 ] def /KHighFreqs [ 119.737 113.137 119.713 128.289 121.218 89.8026 84.8528 63.6395 ] def /CHighAngles [ 71.5651 71.5651 71.5651 70.0169 70.0169 71.5651 71.5651 71.5651 ] def /MHighAngles [ 18.4349 18.4349 18.4349 19.9831 19.9831 18.4349 18.4349 18.4349 ] def /YHighTDot [ false false true false false true true false ] def /PatFreq [ 10.5833 10.0 9.4055 10.5833 10.0 10.5833 10.0 9.375 ] def %- %- PostScript Level 2 printers contain an "Accurate Screens" feature which can %- improve process separation rendering at the expense of compute time. This %- flag is ignored by PostScript Level 1 printers. /FMUseAcccurateScreens true def %- %- The following PostScript procedure defines the spot function that Frame %- products will use for process separations. You may un-comment-out one of %- the alternative functions below, or use your own. %- %- Dot function /FMSpotFunction {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1 sub } {dup mul exch dup mul add 1 exch sub }ifelse } def %- %- Line function %- /FMSpotFunction { pop } def %- %- Elipse function %- /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add %- sqrt 1 exch sub } def %- %- /FMversion (5.0) def % matches PS_VERSION in fmprintdriver % PostScript Level 1 = true, 2 = false /fMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def % Set up Color vs. Black-and-White /FMPColor fMLevel1 { false /colorimage where {pop pop true} if } { % statusdict /processcolors known { % statusdict /processcolors get exec % } {1} ifelse % 1 gt true } ifelse def /FrameDict 400 dict def % should check this value each time changes made % % For NeWS we add a fake errordict, so we can psh files % systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if %- The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put % save old rangecheck errordict /rangecheck {FrameDict /bug true put} put % will flag bug found FrameDict /bug false put % flag bug not found mark % since we're not sure what will happen next %- Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark % junk from readline and rangecheck errordict /rangecheck FrameDict /tmprangecheck get put % restore rangecheck FrameDict /bug get { % redefine readline if last one got a rangecheck /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop % get a char dup 10 eq {exit} if % exit if LF dup 13 eq {exit} if % exit if CR gstring exch gindex exch put % store it away /gindex gindex 1 add def % bump index } loop pop % eol character gstring 0 gindex getinterval true % simulate real readline } bind def } if % outer-world defs /FMshowpage /showpage load def /FMquit /quit load def /FMFAILURE { % enter with two error strings on the stack dup = flush % send a copy of the message to the console FMshowpage % msg on a page by itself, so it can't be, say, black on black /Helvetica findfont 12 scalefont setfont 72 200 moveto show 72 220 moveto show FMshowpage % we might be in the middle of some EPS, where "showpage" FMquit % and "quit" are redefined } def % only used once at most, so no bind /FMVERSION { FMversion ne { (Adobe Frame product version does not match ps_prolog! Check installation;) (also check ~/fminit and ./fminit for old versions) FMFAILURE } if } def % only used at startup, so no bind /FMBADEPSF { % Call with bad operator name on stack (as a string) (Adobe's PostScript Language Reference Manual, 2nd Edition, section H.2.4) (says your EPS file is not valid, as it calls X ) dup dup (X) search pop exch pop exch pop length % parmstr errstr errstr indx 5 -1 roll % errstr errstr index parmstr putinterval % errstr FMFAILURE } def % standard concatprocs routine /fmConcatProcs { /proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }def % Put all local variables here in alphabetical order. FrameDict begin [ /ALDsave /FMdicttop /FMoptop /FMpointsize /FMsaveobject /b /bitmapsave /blut /bpside /bs /bstring /bwidth /c /cf /cs /cynu /depth /edown /fh /fillvals /fw /fx /fy /g /gfile /gindex /grnt /gryt /gstring /height /hh /i /im /indx /is /k /kk /landscape /lb /len /llx /lly /m /magu /manualfeed /n /offbits /onbits /organgle /orgbangle /orgbfreq /orgbproc /orgbxfer /orgfreq /orggangle /orggfreq /orggproc /orggxfer /orgmatrix /orgproc /orgrangle /orgrfreq /orgrproc /orgrxfer /orgxfer /pagesave /paperheight /papersizedict /paperwidth /pos /pwid /r /rad /redt /sl /str /tran /u /urx /ury /val /width /width /ws /ww /x /x1 /x2 /xindex /xpoint /xscale /xx /y /y1 /y2 /yelu /yindex /ypoint /yscale /yy ] { 0 def } forall % Start of PDF/Acrobat support % Bind def /FmBD {bind def} bind def systemdict /pdfmark known { /fMAcrobat true def % FmPD is a conditional PDFMark /FmPD /pdfmark load def % FmPT is a show text operator which only show up when distiller is active /FmPT /show load def % FmPD2 and FmPA are Acrobat 2.0-specific currentdistillerparams /CoreDistVersion get 2000 ge { % FmPD2 is like FmPD but for Acrobat 2.0-specific PDF /FmPD2 /pdfmark load def % x y/name FmPA % is equivalent to % [/Dest/name/View[/FitH x y FmDC exch pop]/DEST FmPD % It is a shortcut for pagragraph Uinique ID designators whic occurr commonly. /FmPA { mark exch /Dest exch 5 3 roll /View [ /XYZ null 6 -2 roll FmDC exch pop null] /DEST FmPD }FmBD } { % These are No-Ops for Distiller 1.0 /FmPD2 /cleartomark load def /FmPA {pop pop pop}FmBD } ifelse } { % these are the No-Ops for regular PostScript /fMAcrobat false def /FmPD /cleartomark load def /FmPD2 /cleartomark load def /FmPT /pop load def /FmPA {pop pop pop}FmBD } ifelse % This convert a set of X Y coordinates from the current user space to the default % PostScript coordinates needed by some pdfmark variants. We also convert to % integer because the distiller doesn't always like floats! /FmDC { transform fMDefaultMatrix itransform cvi exch cvi exch }FmBD % This converts four numbers into a bounding box making sure the first two are maller than the last two /FmBx { dup 3 index lt {3 1 roll exch} if 1 index 4 index lt {4 -1 roll 3 1 roll exch 4 1 roll} if }FmBD % End of PDF/Acrobat support % % Color separation code % % Constants. /FMnone 0 def /FMcyan 1 def /FMmagenta 2 def /FMyellow 3 def /FMblack 4 def /FMcustom 5 def /fMNegative false def % we are inverting the page % Variables. /FrameSepIs FMnone def % separation we are printing % If FrameSepIs is FMcustom, this is the custom color /FrameSepBlack 0 def /FrameSepYellow 0 def /FrameSepMagenta 0 def /FrameSepCyan 0 def /FrameSepRed 1 def /FrameSepGreen 1 def /FrameSepBlue 1 def /FrameCurGray 1 def /FrameCurPat null def /FrameCurColors [ 0 0 0 1 0 0 0 ] def % c m y k r g b % Utility routines /FrameColorEpsilon .001 def % epsilon by which values can differ and sill be equal /eqepsilon { % v1 v2 eqeps bool sub dup 0 lt {neg} if FrameColorEpsilon le } bind def % are the cmyk and cmykrgb arrays on the stack the same color? /FrameCmpColorsCMYK { % [ c1 m1 y1 k1 ] [ c2 m2 y2 k2 r2 g2 b2] -> bool 2 copy 0 get exch 0 get eqepsilon { 2 copy 1 get exch 1 get eqepsilon { 2 copy 2 get exch 2 get eqepsilon { 3 get exch 3 get eqepsilon } {pop pop false} ifelse }{pop pop false} ifelse } {pop pop false} ifelse } bind def % are the rgb and cmykrgb arrays on the stack the same color? /FrameCmpColorsRGB { % [ r1 g1 b1 ] [ c2 m2 y2 k2 r2 g2 b2] -> bool 2 copy 4 get exch 0 get eqepsilon { 2 copy 5 get exch 1 get eqepsilon { 6 get exch 2 get eqepsilon }{pop pop false} ifelse } {pop pop false} ifelse } bind def % convert r g b to c m y k /RGBtoCMYK { % r g b 1 exch sub % r g y 3 1 roll % y r g 1 exch sub % y r m 3 1 roll % m y r 1 exch sub % m y c 3 1 roll % c m y 3 copy % c m y c m y 2 copy % c m y c m y m y le { pop } { exch pop } ifelse % c m y c min(m,y) 2 copy % c m y c min(m,y) c min(m,y) le { pop } { exch pop } ifelse % c m y min(c, min(m,y)) dup dup dup % c m y k k k k 6 1 roll % c k m y k k k 4 1 roll % c k m k y k k 7 1 roll % k c k m k y k sub % k c k m k y 6 1 roll % y k c k m k sub % y k c k m 5 1 roll % m y k c k sub % m y k c 4 1 roll % c m y k } bind def /CMYKtoRGB { % c m y k CMYKtoRGB r g b dup dup 4 -1 roll add % c m k k y+k 5 1 roll 3 -1 roll add % y+k c k m+k 4 1 roll add % m+k y+k c+k 1 exch sub dup 0 lt {pop 0} if 3 1 roll % r m+k y+k 1 exch sub dup 0 lt {pop 0} if exch % r b m+k 1 exch sub dup 0 lt {pop 0} if exch % r g b } bind def % Public routines % Happens at the top of each page that is a separation /FrameSepInit { 1.0 RealSetgray } bind def % Tell the separation code that this separation is for a custom color /FrameSetSepColor { % c m y k r g b /FrameSepBlue exch def /FrameSepGreen exch def /FrameSepRed exch def /FrameSepBlack exch def /FrameSepYellow exch def /FrameSepMagenta exch def /FrameSepCyan exch def /FrameSepIs FMcustom def setCurrentScreen } bind def % Tell the separation code that this separation is Cyan /FrameSetCyan { /FrameSepBlue 1.0 def /FrameSepGreen 1.0 def /FrameSepRed 0.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 1.0 def /FrameSepIs FMcyan def setCurrentScreen } bind def % Tell the separation code that this separation is Magenta /FrameSetMagenta { /FrameSepBlue 1.0 def /FrameSepGreen 0.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 1.0 def /FrameSepCyan 0.0 def /FrameSepIs FMmagenta def setCurrentScreen } bind def % Tell the separation code that this separation is Yellow /FrameSetYellow { /FrameSepBlue 0.0 def /FrameSepGreen 1.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 1.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMyellow def setCurrentScreen } bind def % Tell the separation code that this separation is Black /FrameSetBlack { /FrameSepBlue 0.0 def /FrameSepGreen 0.0 def /FrameSepRed 0.0 def /FrameSepBlack 1.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMblack def setCurrentScreen } bind def % Tell the separation code we are not doing a separation /FrameNoSep { % /FrameSepIs FMnone def setCurrentScreen } bind def % Initialize the separation code with all the custom colors we are % separating (not process colors) /FrameSetSepColors { % list of arrays of [c m y k r g b] count FrameDict begin [ exch 1 add 1 roll ] /FrameSepColors % array of arrays of colors we are separating exch def end } bind def % is this color array in the array of custom color separations? /FrameColorInSepListCMYK { % [ c m y k ] -> bool FrameSepColors { % color elem-of-array exch dup 3 -1 roll % color color elem FrameCmpColorsCMYK % color bool { pop true exit } if } forall % exits with either [color] or true dup true ne {pop false} if } bind def /FrameColorInSepListRGB { % [ r g b ] -> bool FrameSepColors { % color elem-of-array exch dup 3 -1 roll % color color elem FrameCmpColorsRGB % color bool { pop true exit } if } forall % exits with either [color] or true dup true ne {pop false} if } bind def % Level 1 color operators saved and redefined /RealSetgray /setgray load def /RealSetrgbcolor /setrgbcolor load def /RealSethsbcolor /sethsbcolor load def end % Setgray patch /setgray { % num FrameDict begin FrameSepIs FMnone eq { RealSetgray } { % go to white unless the current sep color is black FrameSepIs FMblack eq { RealSetgray } { FrameSepIs FMcustom eq FrameSepRed 0 eq and FrameSepGreen 0 eq and FrameSepBlue 0 eq and { RealSetgray } { 1 RealSetgray pop } ifelse } ifelse } ifelse end } bind def /setrgbcolor { % r g b FrameDict begin FrameSepIs FMnone eq { RealSetrgbcolor } { 3 copy [ 4 1 roll ] % r g b [ r g b ] FrameColorInSepListRGB { FrameSepBlue eq exch FrameSepGreen eq and exch FrameSepRed eq and { 0 } { 1 } ifelse } { FMPColor { RealSetrgbcolor currentcmykcolor } { RGBtoCMYK } ifelse FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind def /sethsbcolor { FrameDict begin FrameSepIs FMnone eq { RealSethsbcolor } { RealSethsbcolor % safe since we will overwrite the color state currentrgbcolor % r g b - Let PostsCript to the conversion. setrgbcolor % call our version } ifelse end } bind def FrameDict begin /setcmykcolor where { pop /RealSetcmykcolor /setcmykcolor load def } { /RealSetcmykcolor { 4 1 roll 3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat RealSetrgbcolor pop } bind def } ifelse userdict /setcmykcolor { % c m y k FrameDict begin FrameSepIs FMnone eq { RealSetcmykcolor } { 4 copy [ 5 1 roll ] FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and { 0 } { 1 } ifelse } { FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind put % Set up a prototype pattern for PostScript Level 2 fMLevel1 { % set up screen functions for the patterns in PS level 1 % each entry contains an angle, spot function, flipped spot function, % gray level and frequency multiplier. /patScreenDict 7 dict dup begin <0f1e3c78f0e1c387> [ 45 { pop } {exch pop} .5 2 sqrt] FmBD <0f87c3e1f0783c1e> [ 135 { pop } {exch pop} .5 2 sqrt] FmBD [ 0 { pop } dup .5 2 ] FmBD [ 90 { pop } dup .5 2 ] FmBD <8142241818244281> [ 45 { 2 copy lt {exch} if pop} dup .75 2 sqrt] FmBD <03060c183060c081> [ 45 { pop } {exch pop} .875 2 sqrt] FmBD <8040201008040201> [ 135 { pop } {exch pop} .875 2 sqrt] FmBD end def } { % prototype level 2 pattern dictionary % define some PostScript procedures for known jaggy patterns. /patProcDict 5 dict dup begin <0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def <8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -1 -1 moveto 9 9 lineto stroke } bind def <03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def end def /patDict 15 dict dup begin /PatternType 1 def % Always 1 for PS Level 2 /PaintType 2 def % Uncolored pattern /TilingType 3 def % constant spacing and faster tiling /BBox [ 0 0 8 8 ] def % bounding box /XStep 8 def % X offset /YStep 8 def % Y offset /PaintProc { begin patProcDict bstring known { patProcDict bstring get exec } { 8 8 true [1 0 0 -1 0 8] bstring imagemask } ifelse end } bind def end def } ifelse %combineColor puts together the current gray value (which could also be %a fraction of on bits for a fill pattern and the current color and calls %the appropriate function % /combineColor { FrameSepIs FMnone eq { graymode fMLevel1 or not { % Level 2 pattern [/Pattern [/DeviceCMYK]] setcolorspace FrameCurColors 0 4 getinterval aload pop FrameCurPat setcolor } { FrameCurColors 3 get 1.0 ge { FrameCurGray RealSetgray } { fMAcrobat not FMPColor graymode and and { 0 1 3 { FrameCurColors exch get 1 FrameCurGray sub mul } for RealSetcmykcolor } { 4 1 6 { FrameCurColors exch get graymode { 1 exch sub 1 FrameCurGray sub mul 1 exch sub } { 1.0 lt {FrameCurGray} {1} ifelse } ifelse } for RealSetrgbcolor } ifelse } ifelse } ifelse } { % separation case FrameCurColors 0 4 getinterval aload FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and FrameSepIs FMcustom eq and { FrameCurGray } { 1 } ifelse } { FrameSepIs FMblack eq {FrameCurGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop FrameCurGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse graymode fMLevel1 or not { % Level 2 pattern [/Pattern [/DeviceGray]] setcolorspace FrameCurPat setcolor } { graymode not fMLevel1 and { % Level 1 patterns are either all there or not there at all dup 1 lt {pop FrameCurGray} if } if RealSetgray } ifelse } ifelse } bind def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /fMDefaultMatrix matrix defaultmatrix def /fMatrix2 matrix def /dpi 72 0 fMDefaultMatrix dtransform dup mul exch dup mul add sqrt def % freq and sangle are used for ps Level 1 pattern building. /freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def /sangle 1 0 fMDefaultMatrix dtransform exch atan def sangle fMatrix2 rotate fMDefaultMatrix fMatrix2 concatmatrix dup 0 get /sflipx exch def 3 get /sflipy exch def % % screen index depending on dpi % - screenIndex smallint /screenIndex { 0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for } bind def % % These routines get the standard Adobe frequencies, angles, and spot functions % depending on the DPI % % - getCyanScreen freq angle spotfunction /getCyanScreen { FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def % % - getMagentaScreen freq angle spotFunction /getMagentaScreen { FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def % % - getYellowScreen freq angle spotFunction % note that some of these use a "tripple dot" function at 1/3 the frequency /getYellowScreen { FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse screenIndex dup 3 1 roll get 3 1 roll get { 3 div {2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat FMSpotFunction } } {/FMSpotFunction load } ifelse 0.0 exch } bind def % % - getBlackScreen freq angle spotFunction /getBlackScreen { FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse screenIndex get 45.0 /FMSpotFunction load } bind def % % - getSpotScreen freq angle spotFunction /getSpotScreen { getBlackScreen } bind def % % - getCompositeScreen freq angle spotFunction /getCompositeScreen { getBlackScreen } bind def % FmSetScreen sets the screen for either PostScript Level 1 or Level 2 and optionally % sets the accuratescreens flag in the latter case % freq angle spotfunction FMSetScreen - /FMSetScreen fMLevel1 { /setscreen load }{ { 8 dict begin /HalftoneType 1 def /SpotFunction exch def /Angle exch def /Frequency exch def /AccurateScreens FMUseAcccurateScreens def currentdict end sethalftone } bind } ifelse def % This sets the default screen as was set at the beginning of the job % - setDefaultScreen - /setDefaultScreen { FMPColor { orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer } { orgxfer cvx settransfer } ifelse orgfreq organgle orgproc cvx setscreen } bind def % This sets the current screen depending on FrameSepIs % - setCurrentScreen - /setCurrentScreen { FrameSepIs FMnone eq { FMUseDefaultNoSeparationScreen { setDefaultScreen } { getCompositeScreen FMSetScreen } ifelse } { FrameSepIs FMcustom eq { FMUseDefaultSpotSeparationScreen { setDefaultScreen } { getSpotScreen FMSetScreen } ifelse } { FMUseDefaultProcessSeparationScreen { setDefaultScreen } { FrameSepIs FMcyan eq { getCyanScreen FMSetScreen } { FrameSepIs FMmagenta eq { getMagentaScreen FMSetScreen } { FrameSepIs FMyellow eq { getYellowScreen FMSetScreen } { getBlackScreen FMSetScreen } ifelse } ifelse } ifelse } ifelse } ifelse } ifelse } bind def end % End of Color separation code % /FMDOCUMENT { % xscale yscale edown negative paperwidth paperheight manfeed numcopies numfonts array /FMfonts exch def % Why isn't this in FrameDict??? /#copies exch def FrameDict begin 0 ne /manualfeed exch def /paperheight exch def /paperwidth exch def 0 ne /fMNegative exch def % invert page 0 ne /edown exch def % flip page along y axis /yscale exch def /xscale exch def fMLevel1 { manualfeed {setmanualfeed} if /FMdicttop countdictstack 1 add def % some PS's leave junk on dict ... /FMoptop count def % ...or on operand stack... setpapername % This stuff may alter the transfer/screen/angle manualfeed {true} {papersize} ifelse % true->more work to do {manualpapersize} {false} ifelse % true->more work to do {desperatepapersize} {false} ifelse % true->failed completely {papersizefailure} if count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for %...if tray not installed } {2 dict dup /PageSize [paperwidth paperheight] put manualfeed {dup /ManualFeed manualfeed put} if {setpagedevice} stopped {papersizefailure} if } ifelse % fMLevel1 FMPColor { currentcolorscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def cvlit /orgbproc exch def /orgbangle exch def /orgbfreq exch def cvlit /orggproc exch def /orggangle exch def /orggfreq exch def cvlit /orgrproc exch def /orgrangle exch def /orgrfreq exch def currentcolortransfer fMNegative { 1 1 4 { pop { 1 exch sub } fmConcatProcs 4 1 roll } for 4 copy setcolortransfer } if cvlit /orgxfer exch def cvlit /orgbxfer exch def cvlit /orggxfer exch def cvlit /orgrxfer exch def } { currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def currenttransfer fMNegative { { 1 exch sub } fmConcatProcs dup settransfer } if cvlit /orgxfer exch def } ifelse end % FrameDict } def % only used at startup, so no bind /FMBEGINPAGE { % pagewidth pageheight landscape color-arrays count FrameDict begin % for the whole page... /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { % check for landscape 90 rotate 0 exch dup /pwid exch def neg translate pop }{ pop /pwid exch def } ifelse edown { [-1 0 0 1 pwid 0] concat } if % paint the whole page in "white". If the page is inverted, then % this will actually paint our black background 0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 0 paperheight lineto 0 0 lineto 1 setgray fill xscale yscale scale /orgmatrix matrix def gsave % for CLIP } def % only used infrequently, so no bind /FMENDPAGE { grestore % for CLIP pagesave restore end % FrameDict showpage } def % only used infrequently, so no bind /FMFONTDEFINE { % fontindex nonstd_encoding fontname -- FrameDict begin findfont % fontindex nonstd_encoding font ReEncode % fontindex font' 1 index exch % fontindex fontindex font' definefont % fontindex font" FMfonts 3 1 roll % FMfonts fontindex font" put end % FrameDict } def % only used infrequently, so no bind /FMFILLS { FrameDict begin dup array /fillvals exch def dict /patCache exch def end % framedict } def % Only called once, so no bind /FMFILL { FrameDict begin fillvals 3 1 roll put end % FrameDict } def % only used infrequently, so no bind % Set things to a known, quiescent state, for when we switch to another writer /FMNORMALIZEGRAPHICS { newpath 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray % Not FMsetgray; only called outside of our environment! } bind def /FMBEGINEPSF { % llx lly urx ury fw fh fx fy end % FrameDict /FMEPSF save def % in userdict /showpage {} def % this def is in userdict %- See Adobe's "PostScript Language Reference Manual, 2nd Edition", page 714. %- "...the following operators MUST NOT be used in an EPS file:" (emphasis ours) /banddevice {(banddevice) FMBADEPSF} def /clear {(clear) FMBADEPSF} def /cleardictstack {(cleardictstack) FMBADEPSF} def % FMBADEPSF knows this is the longest! /copypage {(copypage) FMBADEPSF} def /erasepage {(erasepage) FMBADEPSF} def /exitserver {(exitserver) FMBADEPSF} def /framedevice {(framedevice) FMBADEPSF} def /grestoreall {(grestoreall) FMBADEPSF} def /initclip {(initclip) FMBADEPSF} def /initgraphics {(initgraphics) FMBADEPSF} def % /initmatrix {(initmatrix) FMBADEPSF} def % Aldus Freehand 4.0 epsf uses this harmlessly /quit {(quit) FMBADEPSF} def /renderbands {(renderbands) FMBADEPSF} def /setglobal {(setglobal) FMBADEPSF} def /setpagedevice {(setpagedevice) FMBADEPSF} def /setshared {(setshared) FMBADEPSF} def /startjob {(startjob) FMBADEPSF} def /lettertray {(lettertray) FMBADEPSF} def /letter {(letter) FMBADEPSF} def /lettersmall {(lettersmall) FMBADEPSF} def /11x17tray {(11x17tray) FMBADEPSF} def /11x17 {(11x17) FMBADEPSF} def /ledgertray {(ledgertray) FMBADEPSF} def /ledger {(ledger) FMBADEPSF} def /legaltray {(legaltray) FMBADEPSF} def /legal {(legal) FMBADEPSF} def /statementtray {(statementtray) FMBADEPSF} def /statement {(statement) FMBADEPSF} def /executivetray {(executivetray) FMBADEPSF} def /executive {(executive) FMBADEPSF} def /a3tray {(a3tray) FMBADEPSF} def /a3 {(a3) FMBADEPSF} def /a4tray {(a4tray) FMBADEPSF} def /a4 {(a4) FMBADEPSF} def /a4small {(a4small) FMBADEPSF} def /b4tray {(b4tray) FMBADEPSF} def /b4 {(b4) FMBADEPSF} def /b5tray {(b5tray) FMBADEPSF} def /b5 {(b5) FMBADEPSF} def FMNORMALIZEGRAPHICS % in case we're in a strange state [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall % neat trick fx fw 2 div add fy fh 2 div add translate rotate fw 2 div neg fh 2 div neg translate fw urx llx sub div fh ury lly sub div scale % then scale llx neg lly neg translate % then compensate for LL offset /FMdicttop countdictstack 1 add def % high-water mark of dict stack /FMoptop count def % tricky! "/FMoptop" on stack } bind def /FMENDEPSF { count -1 FMoptop {pop pop} for % clear EPS junk from operand stack countdictstack -1 FMdicttop {pop end} for % ditto for dict stack FMEPSF restore FrameDict begin % for the whole page... } bind def FrameDict begin % put most defs here /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } bind def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { % name width height paperheight sub abs 16 lt exch % 16pt is an arbitrary slop amount paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } bind def /setpapername { % Already set up: paperwidth paperheight and manualfeed /papersizedict 14 dict def % one for /papername, one for /unknown papersizedict begin /papername /unknown def % in case no match /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } bind def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end statusdict begin stopped end % return true if more work to do } bind def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped % return true if more work to do } bind def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped % return true iff failed end } {true} ifelse % return true iff failed } bind def /papersizefailure { FMAllowPaperSizeMismatch not { (The requested paper size is not available in any currently-installed tray) (Edit the PS file to "FMAllowPaperSizeMismatch true" to use default tray) FMFAILURE } if } def % % Font re-encoding to include diacritics % /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { % nonstd_encoding font -- reencodedfont dup % nonstd_encoding font font length % nonstd_encoding font dictlength dict begin % nonstd_encoding font % currentdict = newdict {% forall % forall is over font to be copied 1 index /FID ne % skip FID {def} % defs go into newfontdict which is currentdict {pop pop} ifelse % copy all keys including /Encoding } forall % nonstd_encoding 0 eq {/Encoding DiacriticEncoding def} if % -- currentdict % push a copy of the copied font dict onto operand stack end % font' % before popping it off dictionary stack } bind def FMPColor % setup procs for color printing { /BEGINBITMAPCOLOR { % iw, ih, width, height, theta, x y BITMAPCOLOR} def /BEGINBITMAPCOLORc { % iw, ih, width, height, theta, x y BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def /BEGINBITMAPCMYK { BITMAPCMYK } def /BEGINBITMAPCMYKc { BITMAPCMYKc } def } % setup procs for B&W printing { /BEGINBITMAPCOLOR { % iw, ih, width, height, theta, x y BITMAPGRAY} def /BEGINBITMAPCOLORc { % iw, ih, width, height, theta, x y BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def /BEGINBITMAPCMYK { BITMAPCMYKGRAY } def /BEGINBITMAPCMYKc { BITMAPCMYKGRAYc } def } ifelse /K { % c m y k r g b SEPARATION FMPrintAllColorsAsBlack { dup 1 eq 2 index 1 eq and 3 index 1 eq and not {7 {pop} repeat 0 0 0 1 0 0 0} if } if FrameCurColors astore pop combineColor } bind def % % graymode is true if we are just doing gray fills, this way do not keep calling % setscreen. I don't know what the cost is on calling setscreen with defaults, but % this is easy to keep track of, and we know for sure we aren't wasting cycles. % if graymode is false and fMLevel1 is false, then we are using Level 2 patterns. % /graymode true def % used by level 1 patterns % defaultflip matrixentry fmGetFlit -> eith -1 or 1 fMLevel1 { /fmGetFlip { fMatrix2 exch get mul 0 lt { -1 } { 1 } ifelse } FmBD } if /setPatternMode { fMLevel1 { 2 index patScreenDict exch known { pop pop patScreenDict exch get aload pop % angle spot fspot gray mult freq % freq mul % times multiplier 5 2 roll % angle spot fspot gray mult freq -> gray freq angle spot fspot fMatrix2 currentmatrix 1 get 0 ne { 3 -1 roll 90 add 3 1 roll % landscape sflipx 1 fmGetFlip sflipy 2 fmGetFlip neg mul } { % portrait sflipx 0 fmGetFlip sflipy 3 fmGetFlip mul } ifelse 0 lt {exch pop} {pop} ifelse % take regular or flipped spot function fMNegative { {neg} fmConcatProcs % invert spot function } if bind % we need to bypass any screen filter and go directly to systemdict % to avoid problems with Kodak Precision calibration software % systemdict /setscreen get exec % leave graylevel on stack /FrameCurGray exch def } { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/ypoint exch def /xpoint exch def /xindex xpoint 1 add 2 div bpside mul cvi def /yindex ypoint 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne fMNegative {not} if {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen offbits offbits onbits add div fMNegative {1.0 exch sub} if /FrameCurGray exch def } ifelse } { % Level 2 version pop pop dup patCache exch known { patCache exch get } { % not in cache dup patDict /bstring 3 -1 roll put patDict 9 PatFreq screenIndex get div dup matrix scale % 9 orgfreq % organgle sin abs organgle cos abs add div % dup 16 div round dup 0 le {pop 1} if % Unix pattern size % dup 9 div round dup 0 le {pop 1} if % Mac larger (WYSIWYG) size % div div dup matrix scale % This gives Unix pattern size. makepattern dup patCache 4 -1 roll 3 -1 roll put } ifelse /FrameCurGray 0 def /FrameCurPat exch def } ifelse /graymode false def combineColor } bind def /setGrayScaleMode { graymode not { /graymode true def fMLevel1 { setCurrentScreen } if } if /FrameCurGray exch def combineColor } bind def /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { % line widths are always odd so that arrow heads work 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { % THICK lnormalize setlinewidth } bind def /Z { setlinecap } bind def % This is used to fill or stroke white behind a Level 2 pattern /PFill { graymode fMLevel1 or not { gsave 1 setgray eofill grestore } if } bind def /PStroke { graymode fMLevel1 or not { gsave 1 setgray stroke grestore } if stroke } bind def /X { % TEXTURE fillvals exch get dup type /stringtype eq {8 1 setPatternMode} % Silly to pass parameters here {setGrayScaleMode} ifelse } bind def /V { % FILL PFill gsave eofill grestore } bind def /Vclip { clip } bind def /Vstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /N { % PEN PStroke } bind def /Nclip { strokepath clip newpath } bind def /Nstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /L { % POLYLINE /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { % POLYGON !!! L % POLYLINE closepath } bind def /R { % RECT x1 y1 x2 y2 /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y % POLYGON } bind def /rarc % Leaves all sorts of junk on the operand stack for caller to clear off {rad % arcto might fail if we're scaled way down arcto } bind def /RR { % ROUNDRECT x1 y1 x2 y2 r /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def mark newpath { x1 y1 rad add moveto x1 y2 x2 y2 rarc x2 y2 x2 y1 rarc x2 y1 x1 y1 rarc x1 y1 x1 y2 rarc closepath } stopped {x1 y1 x2 y2 R} if % in case rarc failed for degenerate arcs cleartomark } bind def /RRR { % ROUNDRECT ROTATED xs ys x1 y1 x2 y2 x3 y3 x4 y4 r /rad exch def normalize /y4 exch def /x4 exch def normalize /y3 exch def /x3 exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath normalize moveto % eats xs ys mark { x2 y2 x3 y3 rarc x3 y3 x4 y4 rarc x4 y4 x1 y1 rarc x1 y1 x2 y2 rarc closepath } stopped {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if cleartomark } bind def /C { % CLIP grestore gsave R % RECT clip setCurrentScreen } bind def /CP { % CLIPPOLY p1x p1y p2x p2y ... n grestore gsave Y % POLYGON clip setCurrentScreen } bind def /F { % FONT FMfonts exch get FMpointsize scalefont setfont } bind def /Q { % POINTSIZE (& font) /FMpointsize exch def F % could be slightly optimized here } bind def /T { % TEXT moveto show } bind def % Callers of RF (rotate/flip) must gsave (or save) first; (g)restore when done /RF { % rotate 0 ne {-1 1 scale} if } bind def /TF { % TEXTFLIPROTATE gsave moveto RF show grestore } bind def /P { % PADTEXT moveto 0 32 3 2 roll widthshow } bind def /PF { % PADTEXTFLIPROTATE gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { % SPREADTEXT moveto 0 exch ashow } bind def /SF { % SPREADTEXTFLIPROTATE gsave moveto RF 0 exch ashow grestore } bind def /B { % PADSPREADTEXT moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { % PADSPREADTEXTFLIPROTATE gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { % ARCFILL theta1 theta2 width height x y gsave newpath normalize translate 0.0 0.0 moveto % eats x y dnormalize scale % eats width height 0.0 0.0 1.0 5 3 roll arc % eats theta1 theta2 closepath PFill fill grestore } bind def /Gstrk { savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch % theta1 theta2 width height x y normalize 2 index 2 div sub exch 3 index 2 div add exch % theta1 theta2 width height x y translate scale % eats width height 0.0 0.0 1.0 5 3 roll arc % eats theta1 theta2 restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /Gclip { % ARCFILL theta1 theta2 width height x y swid newpath savematrix normalize translate 0.0 0.0 moveto % eats x y dnormalize scale % eats width height 0.0 0.0 1.0 5 3 roll arc % eats theta1 theta2 closepath clip newpath restorematrix } bind def /GG { % ARCFILL ROTATED theta1 theta2 width height angle x y gsave newpath normalize translate 0.0 0.0 moveto % eats x y rotate % eats angle dnormalize scale % eats width height 0.0 0.0 1.0 5 3 roll arc % eats theta1 theta2 closepath PFill fill grestore } bind def /GGclip { % ARCFILL ROTATED theta1 theta2 width height angle x y savematrix newpath normalize translate 0.0 0.0 moveto % eats x y rotate % eats angle dnormalize scale % eats width height 0.0 0.0 1.0 5 3 roll arc % eats theta1 theta2 closepath clip newpath restorematrix } bind def /GGstrk { % ARCFILL ROTATED swid theta1 theta2 width height angle x y savematrix newpath normalize translate 0.0 0.0 moveto % eats x y rotate % eats angle dnormalize scale % eats width height 0.0 0.0 1.0 5 3 roll arc % eats theta1 theta2 closepath restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /A { % ARCPEN theta1 theta2 width height x y gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch % theta1 theta2 width height x y normalize 2 index 2 div sub exch 3 index 2 div add exch % theta1 theta2 width height x y translate scale % eats width height 0.0 0.0 1.0 5 3 roll arc % eats theta1 theta2 restorematrix PStroke grestore } bind def /Aclip { newpath savematrix normalize translate 0.0 0.0 moveto % eats x y dnormalize scale % eats width height 0.0 0.0 1.0 5 3 roll arc % eats theta1 theta2 closepath strokepath clip newpath restorematrix } bind def /Astrk { Gstrk } bind def /AA { % ARCPEN ROTATED theta1 theta2 width height angle x y gsave savematrix newpath % theta1 theta2 width height angle x y 3 index 2 div add exch 4 index 2 div sub exch % theta1 theta2 width height angle x y normalize 3 index 2 div sub exch 4 index 2 div add exch translate % eats x y rotate % eats angle scale % eats width height 0.0 0.0 1.0 5 3 roll arc % eats theta1 theta2 restorematrix PStroke grestore } bind def /AAclip { savematrix newpath normalize translate 0.0 0.0 moveto % eats x y rotate % eats angle dnormalize scale % eats width height 0.0 0.0 1.0 5 3 roll arc % eats theta1 theta2 closepath strokepath clip newpath restorematrix } bind def /AAstrk { GGstrk } bind def /BEGINPRINTCODE { % -x -y width height /FMdicttop countdictstack 1 add def % high-water mark of dict stack /FMoptop count 7 sub def % tricky! 7 params on stack, plus "/FMoptop" /FMsaveobject save def userdict begin % insulate user from FrameDict; not in /FMdicttop count /showpage {} def % this def is in userdict FMNORMALIZEGRAPHICS % in case we're in a strange state 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for % clear user junk from operand stack countdictstack -1 FMdicttop {pop end} for % ditto for dict stack FMsaveobject restore % this is now safe, unless user very malicious } bind def /gn { % get a number in a funny encoding scheme 0 % result on stack { 46 mul % shift old digits cf read pop % get next character 32 sub % zero is the space character dup 46 lt {exit} if % quit if we're the last digit 46 sub add % add in this digit and loop around for next } loop add % result on stack } bind def /cfs { % create a string of length "sl" filled with "val"s /str sl string def % create string as "str" 0 1 sl 1 sub {str exch val put} for % fill array str def % define real array name, too; name is on stack from caller } bind def /ic [ % "case" stmt list of procedures that the image commands should call 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /ms { % make all the strings /sl exch def % remember length of currently existing strings /val 255 def % that's white /ws cfs % make "ws" a string filled with white /im cfs % and "im" is a complete image scanline /val 0 def % that's black /bs cfs % make "bs" a string filled with black /cs cfs % here's where we'll put complete command lines } bind def 400 ms % make strings that will be plenty long for most applications /ip { % image procedure; reads and executes commands to make scanlines is % leave image string and... 0 % ...image position on stack all through this procedure cf cs readline pop % get a string of commands { ic exch get exec % execute next command add % all commands leave a length on the stack; update pos } forall % step through all commands pop % get rid of image position pointer % image string left on stack, so it's returned to image primitive } bind def /rip { % this is similar to ip above, except for 24 bit images % this takes an extra argument, the width of the image % do red bis ris copy pop % copy blue to red is 0 cf cs readline pop { ic exch get exec add } forall pop pop % remove is and position from stack ris gis copy pop % copy red to green dup is exch % position of green is width bytes into is % do green cf cs readline pop { ic exch get exec add } forall pop pop gis bis copy pop % copy green to blue dup add is exch % position of blue is 2*width bytes into is % do blue cf cs readline pop { ic exch get exec add } forall pop } bind def /rip4 { % this is similar to ip above, except for 32 bit images % this takes an extra argument, the width of the image % do cyan kis cis copy pop % copy black to cyan is 0 cf cs readline pop { ic exch get exec add } forall pop pop % remove is and position from stack cis mis copy pop % copy cyan to magenta dup is exch % position of magenta is width bytes into is % do magenta cf cs readline pop { ic exch get exec add } forall pop pop mis yis copy pop % copy magenta to yellow dup dup add is exch % position of yellow is 2*width bytes into is % do yellow cf cs readline pop { ic exch get exec add } forall pop pop yis kis copy pop % copy yellow to black 3 mul is exch % position of black is 3*width bytes into is % do black cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { % fill a number of bytes with "white" /len exch def % number of bytes to fill /pos exch def % position to put them at ws 0 len getinterval im pos len getinterval copy pop pos len % remember where we got to } bind def /bl { % fill a number of bytes with "black" /len exch def % number of bytes to fill /pos exch def % position to put them at bs 0 len getinterval im pos len getinterval copy pop pos len % remember where we got to } bind def /s1 1 string def /fl { % fill a number of bytes with a specific hex value /len exch def % number of bytes to fill /pos exch def % position to put them at /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len % remember where we got to } bind def /hx { % read hex bytes directly; on entry, stack has 3 copy getinterval % stack has cf exch readhexstring pop pop % stack back to } bind def /wbytes { % width depth -> wb find width in bytes given 1, 2, 8 or 24 or 32 dup dup 8 gt { pop 8 idiv mul } { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse } bind def /BEGINBITMAPBWc { % iw, ih, width, height, theta, x y 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { % iw, ih, width, height, theta, x y 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { % iw, ih, width, height, theta, x y 2 {} COMMONBITMAPc } bind def % % Common routine for imaging compressed images % /COMMONBITMAPc { % iw, ih, width, height, theta, x y depth proc % (x,y) is the lower left corner of the image /cvtProc exch def /depth exch def gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /lb width depth wbytes def % so "lb" has width in bytes sl lb lt {lb ms} if % maybe make bigger strings /bitmapsave save def % LW+ has a buggy memory leak! cvtProc % run the desired proc after save has occurred /is im 0 lb getinterval def % image substring ws 0 lb getinterval is copy pop % whiten it /cf currentfile def % evaluate "currentfile" only once width height depth [width 0 0 height neg 0 height] % top to bottom {ip} image % zap! bitmapsave restore % avoid occasional disaster on the LW+ grestore } bind def /BEGINBITMAPBW { % iw, ih, width, height, theta, x y 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { % iw, ih, width, height, theta, x y 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { % iw, ih, width, height, theta, x y 2 {} COMMONBITMAP } bind def % % Common routine for uncompressed images % /COMMONBITMAP { % iw, ih, width, height, theta, x y depth proc /cvtProc exch def /depth exch def gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /bitmapsave save def % LW+ has a buggy memory leak! cvtProc % run the desired proc after save has occurred /is width depth wbytes string def /cf currentfile def % evaluate "currentfile" only once width height depth [width 0 0 height neg 0 height] % top to bottom {cf is readhexstring pop} image bitmapsave restore % avoid occasional disaster on the LW+ grestore } bind def % % All this hairy color setup stuff gus wrote on the mac, I just copied and % changed the variable names to be humanly readable. /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def fMLevel1 { /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /kk cynu magu min yelu min def % The HP PaintJet XL300 ignores the gray transfer curve but still sets its % default black generation and undercolor removal functions as if it is % used. This causes black colors not to work. Bug#56844 % - We go back to the old (correct?) way of doing this since this code % is now bypassed for PS Level 2 printers in favor of colorSetup2 which % uses PS Level 2 indexed color, which is much cleaner. /u kk currentundercolorremoval exec def %- /u 0 def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 kk currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def } { % Here, we set up indexed color for imaging on PS Level 2 without mucking around % with the transfer functions. /colorSetup2 { [ /Indexed /DeviceRGB 255 {dup red exch get 255 div exch dup green exch get 255 div exch blue exch get 255 div} ] setcolorspace } bind def } ifelse % % Setup a transfer function to convert psuedo color values into grayscale % values based on the color lookup tables. % /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch fmConcatProcs settransfer } bind def % % image a color image % /BITMAPCOLOR { % iw, ih, width, height, theta, x y /depth 8 def gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /bitmapsave save def fMLevel1 { colorsetup /is width depth wbytes string def /cf currentfile def % evaluate "currentfile" only once width height depth [width 0 0 height neg 0 height] % top to bottom {cf is readhexstring pop} {is} {is} true 3 colorimage } { colorSetup2 /is width depth wbytes string def /cf currentfile def % evaluate "currentfile" only once 7 dict dup begin /ImageType 1 def /Width width def /Height height def /ImageMatrix [width 0 0 height neg 0 height] def /DataSource {cf is readhexstring pop} bind def /BitsPerComponent depth def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def % % Compressed color image rendering % /BITMAPCOLORc { % iw, ih, width, height, theta, x y /depth 8 def gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /lb width depth wbytes def % so "lb" has width in bytes sl lb lt {lb ms} if % maybe make bigger strings /bitmapsave save def fMLevel1 { colorsetup /is im 0 lb getinterval def % image substring ws 0 lb getinterval is copy pop % whiten it /cf currentfile def % evaluate "currentfile" only once width height depth [width 0 0 height neg 0 height] % top to bottom {ip} {is} {is} true 3 colorimage } { colorSetup2 /is im 0 lb getinterval def % image substring ws 0 lb getinterval is copy pop % whiten it /cf currentfile def % evaluate "currentfile" only once 7 dict dup begin /ImageType 1 def /Width width def /Height height def /ImageMatrix [width 0 0 height neg 0 height] def /DataSource {ip} bind def /BitsPerComponent depth def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { /depth 24 def gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /lb width depth wbytes def % so "lb" has width in bytes sl lb lt {lb ms} if % maybe make bigger strings /bitmapsave save def /is im 0 lb getinterval def % Whole scanline /ris im 0 width getinterval def % red part of im /gis im width width getinterval def % green part of im /bis im width 2 mul width getinterval def % blue part of im ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop ris} {gis} {bis} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCMYKc { /depth 32 def gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /lb width depth wbytes def % so "lb" has width in bytes sl lb lt {lb ms} if % maybe make bigger strings /bitmapsave save def /is im 0 lb getinterval def % Whole scanline /cis im 0 width getinterval def % cyan part of im /mis im width width getinterval def % magenta part of im /yis im width 2 mul width getinterval def % yellow part of im /kis im width 3 mul width getinterval def % black part of im ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip4 pop cis} {mis} {yis} {kis} true 4 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /bitmapsave save def /is width string def /gis width string def /bis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCMYK { gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /bitmapsave save def /is width string def /mis width string def /yis width string def /kis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop } { cf mis readhexstring pop } { cf yis readhexstring pop } { cf kis readhexstring pop } true 4 colorimage bitmapsave restore grestore } bind def % % image a color image to a b&width device % /BITMAPTRUEGRAYc { /depth 24 def gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /lb width depth wbytes def % so "lb" has width in bytes sl lb lt {lb ms} if % maybe make bigger strings /bitmapsave save def /is im 0 lb getinterval def % Whole scanline /ris im 0 width getinterval def % red part of im /gis im width width getinterval def % green part of im /bis im width 2 mul width getinterval def % blue part of im ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop ris gis bis width gray} image bitmapsave restore grestore } bind def /BITMAPCMYKGRAYc { /depth 32 def gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /lb width depth wbytes def % so "lb" has width in bytes sl lb lt {lb ms} if % maybe make bigger strings /bitmapsave save def /is im 0 lb getinterval def % Whole scanline /cis im 0 width getinterval def % cyan part of im /mis im width width getinterval def % magenta part of im /yis im width 2 mul width getinterval def % yellow part of im /kis im width 3 mul width getinterval def % black part of im ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop cis mis yis kis width cgray} image bitmapsave restore grestore } bind def /cgray { % c m y k width /ww exch def /k exch def /y exch def /m exch def /c exch def 0 1 ww 1 sub { /i exch def c i get m i get y i get k i get CMYKtoRGB .144 mul 3 1 roll .587 mul 3 1 roll .299 mul add add c i 3 -1 roll floor cvi put } for c } bind def /gray { % r g b width /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /bitmapsave save def /is width string def /gis width string def /bis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop width gray} image bitmapsave restore grestore } bind def /BITMAPCMYKGRAY { gsave % rotate about center of image 3 index 2 div add exch % iw ih width height theta y+(height/2) x 4 index 2 div add exch % iw ih width height theta x+(width/2) y+(height/2) translate % iw ih width height theta rotate % iw ih width height 1 index 2 div neg % iw ih width height -(width/2) 1 index 2 div neg % iw ih width height -(width/2) -(height/2) translate % iw ih width height scale % iw ih /height exch def /width exch def /bitmapsave save def /is width string def /yis width string def /mis width string def /kis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop cf mis readhexstring pop cf yis readhexstring pop cf kis readhexstring pop width cgray} image bitmapsave restore grestore } bind def /BITMAPGRAY { % iw, ih, width, height, theta, x y 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { % iw, ih, width, height, theta, x y 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end % of FrameDict definitions % OPI stuff /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def % Dashed lines stuff /I { setdash } bind def /J { [] 0 setdash } bind def %%EndProlog %%BeginSetup (5.0) FMVERSION 1 1 0 0 612 792 0 1 13 FMDOCUMENT 0 0 /Times-Bold FMFONTDEFINE 1 0 /Times-Roman FMFONTDEFINE 2 0 /Times-Italic FMFONTDEFINE 3 1 /Symbol FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 0.1 FMFILL 2 0.3 FMFILL 3 0.5 FMFILL 4 0.7 FMFILL 5 0.9 FMFILL 6 0.97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 0.9 FMFILL 18 0.7 FMFILL 19 0.5 FMFILL 20 0.3 FMFILL 21 0.1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "1" 1 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K J 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 54 72 558 576 R 7 X 0 0 0 1 0 0 0 K V 54 125.17 298.8 651.33 R V 0 10 Q 0 X (Abstract) 157.79 644.67 T 1 9.7 Q 1.12 (This paper examines the electrical design of FPGA inter-) 68.4 630.87 P 3.83 (connect circuitry. We explore the circuit design of pass) 54 620.17 P -0.28 (transistor and tri-state buffer routing switches, determine which) 54 609.47 P 1.52 (transistor sizing, metal width and metal spacing are best for) 54 598.77 P 0.72 (FPGA interconnect, and show that FPGA interconnect should) 54 588.07 P 1.46 (be) 54 577.37 P 2 F 1.46 (electrically heterogeneous) 67.04 577.37 P 1 F 1.46 ( -- some \050~20%\051 of the routing) 171.13 577.37 P 3.32 (tracks should be designed for maximum speed while the) 54 566.67 P (remainder should be more area-efficient.) 54 555.97 T 0 10 Q (1. Intr) 144.26 539.07 T (oduction) 171.3 539.07 T 1 9.7 Q 0.33 (While considerable research has investigated the optimiza-) 68.4 525.27 P 1.13 (tion of FPGA routing architecture \050the lengths of the routing) 54 514.57 P -0.14 (wire segments and the pattern of routing switches used to inter-) 54 503.87 P 5.41 (connect them [1]\051, relatively little has been published) 54 493.17 P 1.06 (concerning the) 54 482.47 P 2 F 1.06 (electrical) 115.93 482.47 P 1 F 1.06 ( optimization of FPGA interconnect.) 152.56 482.47 P -0.58 (Little is known about the best circuit design and transistor sizing) 54 471.77 P 0.76 (for the routing switches themselves. Similarly, there has been) 54 461.07 P 0.05 (no published work examining the layout of FPGA routing wire) 54 450.37 P -0.22 (segments, despite the fact that using the proper metal width and) 54 439.67 P 1.5 (spacing in deep-submicron processes is crucial to obtain the) 54 428.97 P 0.53 (best circuit speed [2]. The programmable routing accounts for) 54 418.27 P -0.31 (most of the area and most of the delay in FPGAs [1], so fast and) 54 407.57 P (area-efficient circuitry is essential.) 54 396.87 T 2.16 (In this paper we explore four related issues: the circuit) 68.4 386.17 P 1 (design of pass transistor and tri-state buffer routing switches,) 54 375.47 P -0.32 (the best transistor sizes to use in both types of switch, how rout-) 54 364.77 P 0.63 (ing wires should be laid out \050what metal width and spacing is) 54 354.07 P 0.75 (best?\051, and) 54 343.37 P 2 F 0.75 (electrically-heterogeneous) 99.94 343.37 P 1 F 0.75 ( FPGAs, in which some) 203.38 343.37 P (routing wires are tuned for density and some for speed.) 54 332.67 T 1.25 (Considering the importance of the electrical design of its) 68.4 321.97 P -0.28 (routing to an FPGA\325s speed and density, there is relatively little) 54 311.27 P -0.13 (published prior work. In [3, 4], Chow et al discussed the imple-) 54 300.57 P 2.75 (mentation of an SRAM-based FPGA in a 1.2) 54 289.87 P 3 F 2.75 (m) 253 289.87 P 1 F 2.75 (m CMOS) 258.59 289.87 P 2.08 (process, and highlighted many circuit design issues. In [5],) 54 279.17 P -0.19 (Khellah, Brown and Vranesic performed some transistor-sizing) 54 268.47 P -0.41 (experiments on pass transistor routing switches in a 0.8) 54 257.77 P 3 F -0.41 (m) 267.49 257.77 P 1 F -0.41 (m pro-) 273.08 257.77 P 0.62 (cess. In [6], Dobbelaere, Horowitz and El Gamal proposed an) 54 247.07 P 3.54 (innovative regenerative feedback circuit element to speed) 54 236.37 P (FPGA routing.) 54 225.67 T 3.58 (This paper is organized as follows. The next section) 68.4 214.97 P 1.7 (describes the class of FPGAs we are investigating, and dis-) 54 204.27 P 2.26 (cusses two important circuit issues in the design of FPGA) 54 193.57 P 1.2 (routing switches. In Section 3 we determine which transistor) 54 182.87 P 0.17 (sizes lead to FPGA interconnect with the best area-delay prod-) 54 172.17 P 2.2 (uct, and in Section 4 we investigate the effect of different) 54 161.47 P 1.54 (routing wire metal widths and spacings. Section 5 examines) 54 150.77 P 4.08 (\322electrically-heterogeneous\323 FPGAs in which the spacing) 54 140.07 P (between some routing wires is wider than others.) 54 129.37 T 313.2 72 558 651.33 R 7 X V 0 10 Q 0 X (2. FPGA Ar) 347.27 644.67 T (chitectur) 398.47 644.67 T (e and Cir) 436.61 644.67 T (cuit Design) 476.43 644.67 T 1 9.7 Q 0.82 (We investigate SRAM-based, island-style FPGA architec-) 327.6 630.87 P -0.04 (tures [1]; this is the style of FPGA employed by Xilinx, Lucent) 313.2 620.17 P -0.58 (Technologies and the Vantis VF1. Fig. 1 shows the key circuitry) 313.2 609.47 P 1.27 (in such an FPGA\325s interconnect. Routing switches are either) 313.2 598.77 P 0.67 (pass transistors or pairs of tri-state buffers \050one in each direc-) 313.2 588.07 P 1.55 (tion\051, and allow routing wire segments to be joined to form) 313.2 577.37 P -0.28 (longer connections. Multiplexers allow routing wires to be con-) 313.2 566.67 P -0.23 (nected to the input pins of logic blocks, while demultiplexers \050a) 313.2 555.97 P -0.16 (set of pass transistors\051 allow routing wires to be driven by logic) 313.2 545.27 P (block output pins.) 313.2 534.57 T -0.56 (In order to investigate routing transistor sizing, we must first) 327.6 523.87 P -0.55 (choose values for several topological aspects of the FPGA inter-) 313.2 513.17 P 1.94 (connect. We set these topological parameters to values that) 313.2 502.47 P -0.01 (were shown to be good choices in [7, 8]. As Fig. 1 shows, each) 313.2 491.77 P 0.13 (routing wire can connect to three other wires \050via three routing) 313.2 481.07 P 0.26 (switches\051 at each of its endpoints, and can connect to one wire) 313.2 470.37 P 0.86 (at each internal point where it crosses an orthogonal channel.) 313.2 459.67 P -0.12 (Each routing wire can be driven by one output pin at each logic) 313.2 448.97 P 0.08 (block it spans. A key topological parameter of FPGA intercon-) 313.2 438.27 P -0.4 (nect is the) 313.2 427.57 P 2 F -0.4 (logical length) 353.76 427.57 P 1 F -0.4 (, or number of logic blocks spanned, by) 406.98 427.57 P -0.21 (a routing wire. In Fig. 1, for example, the routing wire shown is) 313.2 416.87 P -0.22 (of length 4. In this work we will investigate appropriate transis-) 313.2 406.17 P (tor sizings for wires of many different logical lengths.) 313.2 395.47 T 1.03 (In order to evaluate the speed of FPGA routing, we must) 327.6 384.77 P 0.82 (know the) 313.2 374.07 P 2 F 0.82 (physical length) 353.1 374.07 P 1 F 0.82 ( of a routing wire that spans L logic) 412.93 374.07 P -0.39 (blocks. Throughout this work we assume each basic tile \050a logic) 313.2 363.37 P -0.34 (block plus it\325s associated routing\051 is 300) 313.2 352.67 P 3 F -0.34 (m) 470.05 352.67 P 1 F -0.34 (m long, so a wire that) 475.64 352.67 P 1.12 (spans L logic blocks is L) 313.2 341.97 P 3 F 1.12 (\327) 415.53 341.97 P 1 F 1.12 (300) 417.95 341.97 P 3 F 1.12 (m) 436.05 341.97 P 1 F 1.12 (m long. The basic tile for an) 441.63 341.97 P -0.55 (FPGA architecture with good performance was shown to be 300) 313.2 331.27 P 3 F -0.41 (m) 313.2 320.57 P 1 F -0.41 (m long \050in a 0.35) 318.79 320.57 P 3 F -0.41 (m) 385.71 320.57 P 1 F -0.41 (m process\051 in [7, 8], and the length of a Xil-) 391.3 320.57 P -0.04 (inx 4000X layout tile is 340) 313.2 309.87 P 3 F -0.04 (m) 423.98 309.87 P 1 F -0.04 (m \050also in a 0.35) 429.57 309.87 P 3 F -0.04 (m) 496.73 309.87 P 1 F -0.04 (m process\051, so) 502.31 309.87 P (this value is reasonable.) 313.2 299.17 T 2 10 Q (2.1. Leaka) 313.2 284.27 T (g) 355.04 284.27 T (e Curr) 359.94 284.27 T (ent and Gate Boosting) 385.96 284.27 T 1 9.7 Q -0.07 (Fig. 2a shows a potential problem with the use of pass tran-) 327.6 271.47 P -0.28 (sistors in FPGA interconnect. A pass transistor\325s output voltage) 313.2 260.77 P 0.24 (only rises to V) 313.2 250.07 P 1 7.76 Q 0.19 (dd) 370.78 247.64 P 1 9.7 Q 0.24 (- V) 380.67 250.07 P 1 7.76 Q 0.19 (t) 393.57 247.64 P 1 9.7 Q 0.24 (, where V) 395.73 250.07 P 1 7.76 Q 0.19 (t) 434.19 247.64 P 1 9.7 Q 0.24 (is the transistor threshold volt-) 438.48 250.07 P 0.73 (age \050including the increase in the nominal V) 313.2 239.37 P 1 7.76 Q 0.58 (t) 490.43 236.94 P 1 9.7 Q 0.73 ( due to the body) 492.59 239.37 P 2.27 (effect [9]\051. In TSMC\325s 3.3V, 0.35) 313.2 228.67 P 3 F 2.27 (m) 460.46 228.67 P 1 F 2.27 (m CMOS process, for) 466.04 228.67 P 313.2 72 558 651.33 C 0 0 0 1 0 0 0 K 313.2 72 558 219.33 C 0 0 0 1 0 0 0 K 1 8 Q 0 X 0 0 0 1 0 0 0 K (Fig. 1. FPGA routing circuitry) 385.19 76.13 T (.) 484.01 76.13 T 361.81 182.83 380.56 201.58 R 7 X V 0.5 H 2 Z 0 X N 362.42 169.17 503.56 169.17 2 L 2 H N 345.64 169 331.89 169 2 L N 365.64 180.17 367.31 181.83 R V N 361.81 141.08 380.56 159.83 R 7 X V 0.5 H 0 X N 399.28 182.83 418.03 201.58 R 7 X V 0 X N 403.61 180.42 405.28 182.08 R V 2 H N 399.28 141.08 418.03 159.83 R 7 X V 0.5 H 0 X N 436.75 182.83 455.5 201.58 R 7 X V 0 X N 441.09 180.42 442.75 182.08 R V 2 H N 436.75 141.08 455.5 159.83 R 7 X V 0.5 H 0 X N 474.23 182.83 492.98 201.58 R 7 X V 0 X N 478.56 180.42 480.23 182.08 R V 2 H N 474.23 141.08 492.98 159.83 R 7 X V 0.5 H 0 X N 519.08 169.17 532.05 169.17 2 L 2 H N 373.39 179.42 377.31 182.83 R 4 X V 0.5 H 0 X N 411.89 179.17 415.81 182.58 R 4 X V 0 X N 449.89 179.42 453.81 182.83 R 4 X V 0 X N 487.14 179.17 491.06 182.58 R 4 X V 0 X N 354.64 180.08 354.64 200.25 2 L 2 H N 354.23 157.25 354.23 143.25 2 L N 392.14 199.92 392.14 143.67 2 L N 429.61 199.92 429.61 143.67 2 L N 467.09 199.92 467.09 143.67 2 L N 512.05 180.08 512.05 200.42 2 L N 512.47 158.58 512.47 141.92 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K J 361.5 169.33 354.75 179.58 2 L J 361.5 169.33 360.54 170.79 2 L 0.5 H N [2.456 3.158] 2.456 I 360.54 170.79 355.71 178.12 2 L N J 355.71 178.12 354.75 179.58 2 L N J 361.5 168.58 354.75 158.08 2 L J 361.5 168.58 360.55 167.11 2 L N [2.515 3.234] 2.515 I 360.55 167.11 355.7 159.56 2 L N J 355.7 159.56 354.75 158.08 2 L N J 360.75 169.08 346.75 169.08 2 L J 360.75 169.08 359 169.08 2 L N [2.94 3.78] 2.94 I 359 169.08 348.5 169.08 2 L N J 348.5 169.08 346.75 169.08 2 L N J 382 170.08 391.5 177.08 2 L J 382 170.08 383.41 171.12 2 L N [2.324 2.988] 2.324 I 383.41 171.12 390.09 176.04 2 L N J 390.09 176.04 391.5 177.08 2 L N J 419.25 169.58 429 177.58 2 L J 419.25 169.58 420.6 170.69 2 L N [2.551 3.28] 2.551 I 420.6 170.69 427.65 176.47 2 L N J 427.65 176.47 429 177.58 2 L N J 458 170.33 466.25 177.33 2 L J 458 170.33 459.33 171.47 2 L N [5.693 7.32] 5.693 I 459.33 171.47 464.92 176.2 2 L N J 464.92 176.2 466.25 177.33 2 L N J 504 169.58 511.75 179.58 2 L J 504 169.58 505.07 170.97 2 L N [2.562 3.295] 2.562 I 505.07 170.97 510.68 178.2 2 L N J 510.68 178.2 511.75 179.58 2 L N J 504.25 169.08 512.25 159.58 2 L J 504.25 169.08 505.38 167.74 2 L N [2.498 3.211] 2.498 I 505.38 167.74 511.12 160.92 2 L N J 511.12 160.92 512.25 159.58 2 L N J 504.25 169.33 518.25 169.33 2 L J 504.25 169.33 506 169.33 2 L N [2.94 3.78] 2.94 I 506 169.33 516.5 169.33 2 L N J 516.5 169.33 518.25 169.33 2 L N [3.721 4.784] 0 I 396 172.33 M 396 176.94 392.27 180.67 387.67 180.67 D 383.06 180.67 379.33 176.94 379.33 172.33 D 379.33 167.73 383.06 164 387.67 164 D 392.27 164 396 167.73 396 172.33 D O N J 375.85 154.8 373.25 156.25 380.89 163.87 378.45 153.36 4 Y 0 Z N 375.85 154.8 373.25 156.25 380.89 163.87 378.45 153.36 4 Y V 370.15 144.53 372.75 143.09 365.11 135.46 367.55 145.98 4 Y N 370.15 144.53 372.75 143.09 365.11 135.46 367.55 145.98 4 Y V 375.73 154.58 370.27 144.75 2 L N [3.5 4.5] 0 I 386.33 116.67 M 386.33 126.98 373.16 135.33 356.92 135.33 D 340.67 135.33 327.5 126.98 327.5 116.67 D 327.5 106.36 340.67 98 356.92 98 D 373.16 98 386.33 106.36 386.33 116.67 D O 2 Z N J 364.81 117.23 368.71 113.32 370.4 118.78 3 Y 0 Z N 366.75 115.2 365.27 113.72 2 L N 370.3 118.65 372.51 120.86 2 L 2 Z N 337.59 108.73 339.61 110.76 337.59 112.78 340.62 115.81 342.64 113.79 344.67 115.81 6 L N 336.45 114.02 339.49 117.06 2 L N 345.41 133.33 345.41 111.42 2 L 2 H N 340.54 107.92 332.25 107.92 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 373.08 117.72 376.98 113.81 371.52 112.12 3 Y 0.5 H 0 Z N 375.11 115.77 376.58 117.25 2 L N 371.65 112.22 369.44 110.01 2 L 2 Z N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 367.48 117.98 365.87 119.59 2 L N 374.69 112.95 376.79 110.85 2 L N 378.53 112.58 381.87 109.24 378.03 105.41 374.69 108.75 4 Y 3 X V 0 X N 364.26 125.16 367.6 121.82 363.77 117.98 360.43 121.32 4 Y 3 X V 0 X N 372.71 120.88 376.39 117.21 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 365.19 113.71 369.04 109.86 2 L N 378.49 128.75 378.49 115.98 2 L 2 H N 374.64 119.13 378.49 122.98 2 L 0.5 H N 370.79 107.76 358.5 107.76 2 L 2 H N 366.94 111.78 363.09 107.93 2 L 0.5 H N 334.45 123.19 337.8 119.85 333.96 116.01 330.62 119.35 4 Y 3 X V 0 X N 337.83 115.94 335.91 117.87 2 L N (or) 350.67 115.5 T 404.25 179.33 404.25 169.58 2 L N 402.25 167.58 405.75 171.08 2 L N 405.75 167.58 402.25 171.08 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 414 178.83 414 169.08 2 L N 412 167.08 415.5 170.58 2 L N 415.5 167.08 412 170.58 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 442.25 179.33 442.25 169.58 2 L N 440.25 167.58 443.75 171.08 2 L N 443.75 167.58 440.25 171.08 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 452 178.83 452 169.08 2 L N 450 167.08 453.5 170.58 2 L N 453.5 167.08 450 170.58 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 366.25 179.08 366.25 169.33 2 L N 364.25 167.33 367.75 170.83 2 L N 367.75 167.33 364.25 170.83 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 376 178.58 376 168.83 2 L N 374 166.83 377.5 170.33 2 L N 377.5 166.83 374 170.33 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 479.75 179.33 479.75 169.58 2 L N 477.75 167.58 481.25 171.08 2 L N 481.25 167.58 477.75 171.08 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 489.5 178.83 489.5 169.08 2 L N 487.5 167.08 491 170.58 2 L N 491 167.08 487.5 170.58 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Routing switch) 332.92 91.17 T [3.666 4.713] 0 I 456.5 174.21 M 456.5 180.63 451.91 185.83 446.25 185.83 D 440.59 185.83 436 180.63 436 174.21 D 436 167.79 440.59 162.58 446.25 162.58 D 451.91 162.58 456.5 167.79 456.5 174.21 D O N J 455.71 154.68 452.9 153.7 452.3 164.48 458.52 155.66 4 Y 0 Z N 455.71 154.68 452.9 153.7 452.3 164.48 458.52 155.66 4 Y V 460.29 141.57 463.1 142.55 463.7 131.77 457.48 140.59 4 Y N 460.29 141.57 463.1 142.55 463.7 131.77 457.48 140.59 4 Y V 455.8 154.44 460.2 141.81 2 L N 454 93.75 495.75 93.75 2 L 2 H N 473.51 96.29 478.41 96.29 476.04 100.78 3 Y 0.5 H N 476 96.24 476 94.39 2 L N 474.33 105.5 483.55 105.5 481.88 110.25 476.29 110.25 4 Y N 457.38 135.08 457.38 138.33 2 L 4 X V 0 X N 464.17 115.83 465.84 117.5 R V 2 H 2 Z N 476.97 114.83 480.89 118.25 R 4 X V 0.5 H 0 X N 476.08 100.75 476.08 105.5 2 L N 478.58 105.25 478.58 101.75 2 L 0 Z N 481.33 105.25 481.33 101.75 2 L N 478.83 110.5 478.83 114.92 2 L N 461.51 126.54 467.91 126.54 464.82 120.68 3 Y N 464.76 126.61 464.76 129.03 2 L N 464.83 120.5 464.83 118.25 2 L N 465.07 94 465.07 106.58 462.21 106.58 462.21 110.87 465.07 110.87 465.07 115.5 6 L 2 Z N 460.4 106.59 460.4 110.88 2 L N 452.51 106.23 457.24 111.66 R 3 X V 0 X N 460.02 108.92 457.3 108.92 2 L N 456.83 128.75 456.83 118.25 485.58 118.25 485.58 131.75 4 L 0 Z N 485.49 117.09 486.05 114.58 481.15 116.11 484.93 119.59 4 Y N 485.49 117.09 486.05 114.58 481.15 116.11 484.93 119.59 4 Y V 485.74 117.14 507.33 122 2 L N (Logic block) 508.42 125.67 T ( input pin) 511.08 117.67 T [4.093 4.093] 0 I 506.67 110.67 M 506.67 123.18 492.34 133.33 474.67 133.33 D 456.99 133.33 442.67 123.18 442.67 110.67 D 442.67 98.15 456.99 88 474.67 88 D 492.34 88 506.67 98.15 506.67 110.67 D O N J 457.95 117.48 458.72 119.93 462.19 116.15 457.18 115.03 4 Y N 457.95 117.48 458.72 119.93 462.19 116.15 457.18 115.03 4 Y V 457.71 117.56 439.33 123.33 2 L N (Logic block) 398.67 125.33 T (output pin) 402.67 117.33 T 447.23 107.21 446.56 109.69 451.52 108.37 447.89 104.73 4 Y N 447.23 107.21 446.56 109.69 451.52 108.37 447.89 104.73 4 Y V 446.98 107.15 435.33 104 2 L N (SRAM) 410.67 100.67 T (cell) 417.33 92.67 T 489.01 107.23 493.74 112.66 R 3 X V 2 Z 0 X N 489.01 101.48 493.74 106.91 R 3 X V 0 X N 482.25 108.92 486.03 108.92 486.03 110.17 489 110.17 4 L 0 Z N 483 106.92 486 106.92 486 103.92 489 103.92 4 L N 518.28 191.81 519.57 189.59 514.43 189.58 516.99 194.03 4 Y N 518.28 191.81 519.57 189.59 514.43 189.58 516.99 194.03 4 Y V 518.5 191.94 526.67 196.67 2 L N (Routing) 530 196.67 T (wire) 532.67 188.67 T 484.28 98.18 484.37 95.61 479.83 98.02 484.18 100.74 4 Y N 484.28 98.18 484.37 95.61 479.83 98.02 484.18 100.74 4 Y V 484.53 98.18 516.67 99.33 2 L N (T) 518.67 99.33 T (rack) 523.28 99.33 T (b) 518.67 91.33 T (uf) 522.51 91.33 T (fer) 528.97 91.33 T 1 16 Q ({) 0 -90 425.34 208.13 TF 1 8 Q (Channel) 416.67 210 T 0 0 0 1 0 0 0 K 313.2 72 558 651.33 C 0 0 612 792 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 54 661.67 558 720 R 7 X 0 0 0 1 0 0 0 K V 0 14 Q 0 X (Cir) 87.48 710.67 T (cuit Design, T) 107.44 710.67 T (ransistor Sizing and W) 189.25 710.67 T (ir) 326.29 710.67 T (e Lay) 336.15 710.67 T (out of FPGA Inter) 368.85 710.67 T (connect) 478.64 710.67 T 1 12 Q (Vaughn Betz and Jonathan Rose) 228.01 693 T 1 10 Q (Department of Electrical and Computer Engineering, University of Toronto, 10 King\325s College Road,) 102.55 678.33 T (Toronto, Ontario, CANADA M5S 3G4 {vaughn, jayar}@eecg.utoronto.ca) 148.98 666.33 T 53.4 72 299.4 119.43 R 7 X V 1 8 Q 0 X 0.34 (This w) 53.4 114.1 P 0.34 (ork w) 75.66 114.1 P 0.34 (as supported by the Information T) 94.36 114.1 P 0.34 (echnology Centre of Ontario,) 204.61 114.1 P -0.48 (the W) 53.4 104.1 P -0.48 (alter C. Sumner F) 71.61 104.1 P -0.48 (oundation, an NSERC 1967 Scholarship, a V) 126.94 104.1 P -0.48 (. L. Hend-) 267.48 104.1 P 0.64 (erson Fello) 53.4 94.1 P 0.64 (wship and the Canadian Microelectronics Corp. The authors are) 89.62 94.1 P 1.32 (indebted to Ste) 53.4 84.1 P 1.32 (v) 103.84 84.1 P 1.32 (e T) 107.72 84.1 P 1.32 (rimber) 119.2 84.1 P 1.32 (ger) 140.38 84.1 P 1.32 (, Ste) 150.28 84.1 P 1.32 (v) 165.62 84.1 P 1.32 (e Y) 169.5 84.1 P 1.32 (oung and Bill Carter of Xilinx and) 181.27 84.1 P (Frank Heile of Altera for helpful discussions and to TSMC for process data.) 53.4 74.1 T 53.5 122.5 298.5 122.5 2 L 0.5 H 2 Z N FMENDPAGE %%EndPage: "1" 1 %%Page: "2" 2 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 746 540 756 R 7 X 0 0 0 1 0 0 0 K V 1 10 Q 0 X (IEEE Custom Integrated Circuits Conference, 1999) 72 749.33 T (2 of 4) 516.67 749.33 T 72 33.32 540 43.32 R 7 X V 54 72 558 720 R V 1 9.7 Q 0 X 0.1 (example, the output voltage of the pass transistor will rise only) 54 644.85 P 0.66 (to 2.2 V. This voltage is low enough that downstream buffers) 54 634.15 P -0.36 (\050such as the \322track buffer\323 in Fig. 1\051 which sense the state of the) 54 623.45 P -0.13 (routing wire will have both their pull-down and pull-up transis-) 54 612.75 P 1.66 (tors partially on. This results in a large leakage current and) 54 602.05 P 1.61 (unacceptable dc power dissipation -- a typical 100 000 gate) 54 591.35 P 0.71 (\0508000 4-input look-up tables\051 FPGA would dissipate 21 W of) 54 580.65 P (static power due to this buffer leakage current.) 54 569.95 T 0.03 (Fig. 2b shows one solution. By boosting the gate of routing) 68.4 559.25 P 0.66 (pass transistors to 3.9V \050one nominal threshold voltage above) 54 548.55 P 0.83 (V) 54 537.85 P 1 7.76 Q 0.67 (dd) 61 535.43 P 1 9.7 Q 0.83 (\051, we increase the pass transistor output voltage to 2.73V,) 68.76 537.85 P 0.14 (which is enough to turn off the pMOS pull-up transistor in any) 54 527.15 P -0.21 (downstream buffer. This reduces the static power dissipation of) 54 516.45 P -0.34 (a 100 000 gate FPGA to a much more reasonable 0.041 W. This) 54 505.75 P 2.18 (\322gate-boosting\323 technique has been used by Xilinx in their) 54 495.05 P (FPGAs, and we use it throughout this paper.) 54 484.35 T 2 10 Q (2.2. T) 54 469.45 T (ri-state Buf) 76.51 469.45 T (fer) 121.61 469.45 T (s) 132.62 469.45 T 1 9.7 Q -0.57 (Fig. 3 illustrates two possible tri-state buffer circuits. Circuit) 68.4 456.65 P 0.89 (\050a\051 has one disadvantage: the buffer drive strength is reduced) 54 445.95 P 0.02 (\050for a given transistor size\051 by the pass transistor on the output.) 54 435.25 P 0.23 (Tri-state buffers built using method \050b\051, however, have several) 54 424.55 P 0.76 (disadvantages. They have higher intrinsic delay, require more) 54 413.85 P -0.21 (area for moderate size buffers, and add more capacitive loading) 54 403.15 P -0.03 (\050both from their input and their output\051 to the routing wires. As) 54 392.45 P 0.09 (well, at each end of an FPGA routing wire there are three rout-) 54 381.75 P -0.43 (ing switches which all have the same routing wire as their input.) 54 371.05 P -0.36 (As Fig. 3c shows, if we implement these switches using method) 54 360.35 P 0.61 (\050a\051, we can build just one inverter chain, rather than 3, saving) 54 349.65 P -0.61 (considerable area. For these reasons, we have found that method) 54 338.95 P -0.49 (\050a\051 is generally the superior technique for building tri-state buff-) 54 328.25 P -0.01 (ers in FPGA routing, and we use this technique throughout this) 54 317.55 P (work.) 54 306.85 T 0 10 Q (3. T) 91.21 289.95 T (ransistor Sizing of Routing Switches) 107.14 289.95 T 1 9.7 Q 1.05 (The metal capacitance of FPGA routing wire segments is) 68.4 276.15 P 1.52 (quite large in deep submicron processes, so one can signifi-) 54 265.45 P 0.47 (cantly increase FPGA speed by increasing the size \050and hence) 54 254.75 P -0.43 (the drive strength\051 of the routing switches. However, since most) 54 244.05 P -0.35 (of the area in an FPGA is due to routing switches [1], the cost in) 54 233.35 P 0.53 (area-efficiency of increasing routing transistor sizes cannot be) 54 222.66 P 1.6 (ignored. We believe the best transistor sizing minimizes the) 54 211.96 P (area-delay product of the resulting FPGA, because:) 54 201.26 T (1.) 61.2 189.55 T 0.5 (Intuitively, we want to increase the routing transistor size) 72 189.55 P -0.34 (until the incremental speed gained by further size increases) 72 178.85 P 1.11 (is not worth the area penalty. Minimizing the area-delay) 72 168.16 P (product makes this intuitive goal quantitative.) 72 157.46 T (2.) 320.4 713.53 T 0.16 (For parallel computations, an FPGA\325s throughput is: \050# of) 331.2 713.53 P -0.24 (functional units\051 x \050functional unit speed\051. Phrased another) 331.2 702.83 P 1.58 (way, the throughput is proportional to \0501/area per func-) 331.2 692.13 P 0.77 (tional unit\051 x \0501/delay\051. Hence minimizing the area-delay) 331.2 681.43 P 0.4 (product of an FPGA maximizes its throughput on parallel) 331.2 670.73 P (algorithms.) 331.2 660.03 T 1.39 (To find the FPGA with the minimum area-delay product) 327.6 648.33 P -0.46 (achievable with a given logic block and routing architecture, we) 313.2 637.63 P 0.47 (would have to simultaneously vary the size of every transistor) 313.2 626.93 P 0.71 (in a basic tile of the FPGA, and determine the area and delay) 313.2 616.23 P -0.22 (achieved by the FPGA under each transistor sizing. Clearly this) 313.2 605.53 P 0.34 (is a dauntingly large and complex search space. We can, how-) 313.2 594.83 P 2.42 (ever,) 313.2 584.13 P 2 F 2.42 (approximately) 337.16 584.13 P 1 F 2.42 ( minimize the area-delay product of an) 393.2 584.13 P -0.25 (FPGA by minimizing the routing switch area - wire delay prod-) 313.2 573.43 P 1.88 (uct for each type of routing wire in the FPGA. This is the) 313.2 562.73 P (approach we take to routing transistor sizing.) 313.2 552.03 T 1.12 (In the following sections, all delay values are taken from) 327.6 541.33 P -0.07 (simulations of TSMC\325s 0.35) 313.2 530.63 P 3 F -0.07 (m) 425.82 530.63 P 1 F -0.07 (m, three-layer metal CMOS pro-) 431.4 530.63 P 2.17 (cess. We assume all wiring is laid out in minimum width,) 313.2 519.93 P -0.07 (minimum spacing metal 3 in this section \050we examine different) 313.2 509.23 P -0.33 (metal widths and spacings in Section 4\051. We estimate the layout) 313.2 498.53 P 0.14 (area required by the routing switches as a function of the num-) 313.2 487.83 P 1.17 (ber and sizes of the transistors required to build them [7, 8],) 313.2 477.13 P -0.04 (including the area of any controlling SRAM bits. Note that it is) 313.2 466.43 P -0.36 (the transistor area, not metal area, which determines the die size) 313.2 455.73 P 0.8 (of current commercial FPGAs, so our area model is based on) 313.2 445.03 P (transistor area.) 313.2 434.33 T 1 7.76 Q (1) 370.3 438.21 T 1 9.7 Q 0.67 (Recent research [10, 7, 8] has shown that FPGA intercon-) 327.6 423.63 P 1.9 (nect should contain a mix of wires which connect via pass) 313.2 412.93 P 1.47 (transistors and wires which connect via tri-state buffers. We) 313.2 402.23 P (investigate sizing issues for both types of routing switch.) 313.2 391.53 T 2 10 Q (3.1. Sizing P) 313.2 376.63 T (ass T) 362.96 376.63 T (r) 383.25 376.63 T (ansistor Routing Switc) 386.99 376.63 T (hes) 477.41 376.63 T 1 9.7 Q 0.14 (The delay through a chain of N routing wires connected by) 327.6 363.83 P 0.93 (pass transistors grows essentially quadratically with N [9]. In) 313.2 353.13 P 0.5 (other words, T) 313.2 342.43 P 1 7.76 Q 0.4 (d) 371.05 340.01 P 3 9.7 Q 0.5 (@) 377.86 342.43 P 1 F 0.5 ( D) 383.18 342.43 P 1 7.76 Q 0.4 (dom) 393.12 340.01 P 3 9.7 Q 0.5 (\327) 406.91 342.43 P 1 F 0.5 (N) 409.34 342.43 P 1 7.76 Q 0.4 (2) 416.34 346.31 P 1 9.7 Q 0.5 (. We call D) 420.22 342.43 P 1 7.76 Q 0.4 (dom) 465.91 340.01 P 1 9.7 Q 0.5 ( the dominant delay) 479.7 342.43 P -0.26 (constant, and we wish to minimize D) 313.2 331.73 P 1 7.76 Q -0.21 (dom) 455.79 329.31 P 1 9.7 Q -0.26 ( to maximize the speed) 469.59 331.73 P (of pass-transistor-based routing.) 313.2 321.04 T 1.35 (Fig. 4 plots this dominant delay constant versus the pass) 327.6 310.33 P 1.07 (transistor width for routing wires of different logical lengths.) 313.2 299.64 P 0.42 (The delay constant has been divided by the wire length, L) 313.2 288.93 P 1 7.76 Q 0.33 (wire) 541.78 286.51 P 1 9.7 Q 0.42 (,) 555.58 288.93 P 0.06 (to allow all the curves to be shown on the same scale. The hor-) 313.2 278.23 P 1.75 (izontal axis in Fig. 4 is the width, relative to the minimum) 313.2 267.53 P 313.2 90 558 95.67 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 313.87 93.67 466.2 93.67 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 0 612 792 C 1 8 Q 0 X 0 0 0 1 0 0 0 K 0.15 (1. FPGA architects at both Xilinx and Altera ha) 313.2 84.67 P 0.15 (v) 466.92 84.67 P 0.15 (e con\336rmed to us that tran-) 470.8 84.67 P (sistor area determines the die size of their FPGAs.) 320.4 75.67 T 54 72 298.8 720 C 0 0 0 1 0 0 0 K 54 651.32 298.8 720 C 0 0 0 1 0 0 0 K 83.93 710.15 83.93 705.17 2 L 0.5 H 2 Z 0 X 0 0 0 1 0 0 0 K N 78.96 705.17 88.59 705.17 2 L N 74.05 699.52 79.08 699.52 79.08 702.87 88.78 702.87 88.78 699.52 93.63 699.52 6 L N 1 8 Q (3.3 V) 77.42 711.98 T (3.3 V) 55.01 697.23 T 92.92 699.39 128.83 699.39 2 L 2 H 0 Z N 130.08 692.47 135.55 692.47 2 L 0.5 H 2 Z N 135.55 688.61 135.55 695.61 2 L N 139.6 685.1 139.6 688.67 137.53 688.67 137.53 695.55 139.6 695.55 139.6 698.98 6 L N 130.08 706.63 133.02 706.63 2 L N 135.36 702.98 135.36 709.98 2 L N 139.43 714.15 136.87 714.15 139.43 718.6 142 714.15 4 Y 0 Z N 139.43 714.15 136.87 714.15 139.43 718.6 142 714.15 4 Y V 139.43 699.36 139.43 703 137.36 703 137.36 710 139.43 710 139.43 713.9 6 L N 2 Z 90 450 1.08 1.27 134.08 706.67 A 129.95 706.6 129.95 692.41 2 L 0 Z N 137.55 682.1 141 682.1 2 L 1 Z N 135.83 683.45 142.72 683.45 2 L N 134.11 685.06 144.44 685.06 2 L N 90 450 1.05 1.25 129.7 699.57 G 0 Z 90 450 1.05 1.25 129.7 699.57 A (2.2 V) 101.59 701.98 T (Routing) 95.84 691.39 T (wire) 102.59 684.39 T 234.6 710.81 234.6 705.84 2 L 2 Z N 229.62 705.84 239.26 705.84 2 L N 224.71 700.18 229.75 700.18 229.75 703.54 239.45 703.54 239.45 700.18 244.3 700.18 6 L N (3.9 V) 228.09 712.64 T (3.3 V) 205.67 697.89 T 243.59 700.06 279.5 700.06 2 L 2 H 0 Z N 280.5 693.14 285.96 693.14 2 L 0.5 H 2 Z N 285.96 689.28 285.96 696.27 2 L N 290.02 685.77 290.02 689.34 287.95 689.34 287.95 696.21 290.02 696.21 290.02 699.65 6 L N 280.75 707.3 283.68 707.3 2 L N 286.02 703.65 286.02 710.65 2 L N 290.1 714.82 287.54 714.82 290.1 719.27 292.67 714.82 4 Y 0 Z N 290.1 714.82 287.54 714.82 290.1 719.27 292.67 714.82 4 Y V 290.1 700.03 290.1 703.67 288.03 703.67 288.03 710.66 290.1 710.66 290.1 714.57 6 L N 2 Z 90 450 1.08 1.27 284.75 707.34 A 280.62 707.27 280.62 693.07 2 L 0 Z N 288.22 682.77 291.66 682.77 2 L 1 Z N 286.5 684.12 293.39 684.12 2 L N 284.78 685.72 295.11 685.72 2 L N 90 450 1.05 1.25 280.36 700.23 G 0 Z 90 450 1.05 1.25 280.36 700.23 A (2.73 V) 252.25 702.64 T (Routing) 246.5 692.06 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (wire) 253.25 685.06 T (\050a\051 Leakage current in b) 59.33 674 T (uf) 136.03 674 T (fer) 142.49 674 T (\050b\051 Boosted g) 203.33 674.67 T (ate cuts leakage) 246.85 674.67 T (Fig. 2. Gate boosting to solv) 86.63 662 T (e leakage current problem.) 179.4 662 T 146.48 703.24 145.4 700.92 142.45 705.12 147.57 705.57 4 Y N 146.48 703.24 145.4 700.92 142.45 705.12 147.57 705.57 4 Y V 146.71 703.14 152 700.67 2 L N (Both) 154.67 706 T (transistors) 154 698 T (\322on\323) 154.67 690 T 144.04 694.85 145.52 692.76 140.41 692.29 142.56 696.95 4 Y N 144.04 694.85 145.52 692.76 140.41 692.29 142.56 696.95 4 Y V 144.24 695 151.33 700 2 L N 0 0 0 1 0 0 0 K 54 72 298.8 720 C 0 0 612 792 C 54 72 298.8 720 C 54 72 298.8 150.67 C 0 0 0 1 0 0 0 K 65.83 109.08 73.99 113.36 65.83 117.64 3 Y 0.5 H 2 Z 0 X 0 0 0 1 0 0 0 K N 80 106.97 92.16 113.35 80 119.72 3 Y N 65.58 113.33 62.75 113.33 2 L 0 Z N 74.25 113.33 79.75 113.33 2 L N 1 8 Q (In) 54.5 111.33 T 100.24 121.58 100.24 117.82 2 L 2 Z N 96.47 117.82 103.77 117.82 2 L N 92.75 113.28 96.56 113.28 96.56 115.83 103.91 115.83 103.91 113.28 107.58 113.28 6 L N 95.25 121.91 105.06 130.58 R 3 X V 0 X N (SRAM) 74.42 133.17 T (cell) 80.42 126.17 T (Out) 109.25 111.33 T 7 X 90 450 1.25 1.25 93.25 113.33 G 0 Z 0 X 90 450 1.25 1.25 93.25 113.33 A 7 X 90 450 1.25 1.25 74.5 113.33 G 0 X 90 450 1.25 1.25 74.5 113.33 A 7 X 271 449 4.6 4.86 180.93 133.8 G 0 X 271 449 4.6 4.86 180.93 133.8 A 180.98 138.66 173.26 138.66 173.26 128.94 180.98 128.94 4 L 7 X V 2 Z 0 X N 7 X 270 448 2.93 4.85 173.13 110.79 G 1 Z 0 X 270 448 2.93 4.85 173.13 110.79 A 173.24 115.63 181.85 115.63 2 L 7 X V 2 Z 0 X N 173.24 105.94 181.85 105.94 2 L 7 X V 0 X N 181.91 115.63 M 184.25 115.15 186.3 113.1 187.17 110.78 D 185.68 107.06 183.54 106.54 181.91 105.93 D 7 X V 1 Z 0 X N 7 X 90 450 1.04 1.12 186.25 133.79 G 0 Z 0 X 90 450 1.04 1.12 186.25 133.79 A 7 X 90 450 1.16 1.25 187.76 110.92 G 0 X 90 450 1.16 1.25 187.76 110.92 A 152.23 117.99 161.34 126.67 R 3 X V 2 Z 0 X N 156.64 126.92 156.64 131.92 173.03 131.92 3 L 0 Z N 156.93 117.92 156.93 113.42 175.25 113.42 3 L N (en) 164.77 126.67 T 172.55 120.71 165 120.71 2 L V 0.4 H N (en) 165 114.42 T 173.26 136.42 146.89 136.42 146.89 108.67 175.75 108.67 4 L 0.5 H N 145.96 122.42 142.25 122.42 2 L N 90 450 1.28 1.38 146.54 122.54 G 90 450 1.28 1.38 146.54 122.54 A (In) 134.58 120.67 T 187.42 133.96 190.92 133.96 2 L 2 Z N 192.54 129.14 192.54 138.28 2 L N 196.77 142.8 194.21 142.8 196.77 147.25 199.34 142.8 4 Y 0 Z N 196.77 142.8 194.21 142.8 196.77 147.25 199.34 142.8 4 Y V 196.77 124.56 196.77 129.28 194.41 129.28 194.41 138.39 196.77 138.39 196.77 142.55 6 L N 7 X 90 450 1.04 1.12 191.34 133.79 G 0 X 90 450 1.04 1.12 191.34 133.79 A 192.54 106.64 192.54 114.81 2 L 2 Z N 196.77 102.47 196.77 106.74 194.41 106.74 194.41 114.96 196.77 114.96 196.77 125.42 6 L 0 Z N 195.04 99.46 198.24 99.46 2 L 1 Z N 193.44 100.81 199.84 100.81 2 L N 191.84 102.42 201.44 102.42 2 L N 188.68 110.92 192.63 110.92 2 L 0 Z N 196.83 121.92 200.78 121.92 2 L N 90 450 1.28 1.38 196.71 122.04 G 90 450 1.28 1.38 196.71 122.04 A (Out) 201.94 119.67 T 268.42 148.17 268.42 136.83 2 L 2 H N 226.75 120.92 240.5 120.92 2 L N 285.33 120.75 298 120.75 2 L N 242.38 117.76 248.18 120.86 242.38 123.97 3 Y 0.5 H 2 Z N 252.44 116.22 261.09 120.85 252.44 125.48 3 Y N 242.21 120.84 240.19 120.84 2 L 0 Z N 248.36 120.84 252.27 120.84 2 L N 276.82 126.9 276.82 124.17 2 L 2 Z N 274.15 124.17 279.33 124.17 2 L N 271.51 120.55 274.21 120.55 274.21 122.4 279.43 122.4 279.43 120.55 282.04 120.55 6 L N 273.28 127.32 280.25 133.62 R 3 X V 0 X N 7 X 90 450 1.08 1.11 261.73 120.96 G 0 Z 0 X 90 450 1.08 1.11 261.73 120.96 A 7 X 90 450 1.09 1.11 248.67 120.71 G 0 X 90 450 1.09 1.11 248.67 120.71 A 262.75 120.58 271.5 120.58 2 L N 281.75 120.58 285.75 120.58 2 L N 262.46 132.14 265.19 132.14 2 L 2 Z N 265.19 129.46 265.19 134.65 2 L N 268.8 126.82 268.8 129.53 266.96 129.53 266.96 134.75 268.8 134.75 268.8 137.36 6 L N 255.74 128.6 262.04 135.56 R 3 X V 0 X N 268.75 126.83 268.75 120.83 2 L 0 Z N 90 450 1.38 1.38 268.62 120.71 G 90 450 1.38 1.38 268.62 120.71 A 268.92 97.42 268.92 105.42 2 L 2 H N 262.46 109.36 265.19 109.36 2 L 0.5 H 2 Z N 265.19 112.04 265.19 106.85 2 L N 268.8 114.68 268.8 111.97 266.96 111.97 266.96 106.75 268.8 106.75 268.8 104.14 6 L N 255.74 105.94 262.04 112.91 R 3 X V 0 X N 268.75 114.67 268.75 120.67 2 L 0 Z N (Routing) 220 141 T (wires) 222.5 133.58 T (Fig. 3. Methods of b) 104.71 75.33 T (uilding tri-state b) 171.88 75.33 T (uf) 226.84 75.33 T (fers.) 233.3 75.33 T (\050a\051 T) 60.67 92.67 T (ri-state b) 76.15 92.67 T (uf) 104.21 92.67 T (fer) 110.68 92.67 T (\050b\051 T) 142 89.33 T (ri-state b) 157.94 89.33 T (uf) 185.99 89.33 T (fer) 192.46 89.33 T (\050c\051 In) 216.67 89.33 T (v) 233.89 89.33 T (erter chain sharing) 237.77 89.33 T 261.87 144.02 261.45 146.55 266.26 144.75 262.29 141.49 4 Y N 261.87 144.02 261.45 146.55 266.26 144.75 262.29 141.49 4 Y V 248.75 141.83 261.62 143.98 2 L N 231.88 127.2 234.4 127.66 232.66 122.83 229.35 126.75 4 Y N 231.88 127.2 234.4 127.66 232.66 122.83 229.35 126.75 4 Y V 231 132.08 231.83 127.45 2 L N 0 0 0 1 0 0 0 K 54 72 298.8 720 C 0 0 612 792 C 313.2 72 558 720 C 313.2 95.67 558 254.32 C 0 83 592 384 768 240.8 140.8 312.94 110.41 FMBEGINEPSF %%BeginDocument: /jayar/d0/vaughn/thesis/place/cicc99/grap/pass_T.eps %!PS-Adobe-2.0 EPSF-1.2 %%Title: stdin (ditroff) %%Creator: gractus.eecg:vaughn (Vaughn Betz,EECG,LP 392,1653,7662197,G,G ) %%CreationDate: Mon Nov 30 17:51:33 1998 %%For:vaughn vaughn %%Pages: 1 %%DocumentFonts: Times-Italic Times-BoldItalic Helvetica DIThacks Symbol Courier Helvetica-Bold Times-Roman Times-Bold Courier-Bold %%BoundingBox: 83 592 384 768 %%EndProlog %%Page 1 1 %! % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /nfs/relay/cs/src/transcript/lib/RCS/psdit.pro,v 1.1 93/09/07 16:24:02 ken Exp $ /$DITroff 140 dict def $DITroff begin %% Psfig additions /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end Psfig additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {0 72 11 mul translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 400 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop ditstart (psc)xT 576 1 1 xr 1(Times-Roman)xf 1 f 2(Times-Italic)xf 2 f 3(Times-Bold)xf 3 f 4(Times-BoldItalic)xf 4 f 5(Helvetica)xf 5 f 6(Helvetica-Bold)xf 6 f 7(Courier)xf 7 f 8(Courier-Bold)xf 8 f 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f xi 10 s 0 xH 0 xS 1 f 1228 1391 MXY 0 -1152 Dl 1843 0 Dl 0 1152 Dl -1843 0 Dl 2 f 1541 1573(W)N 7 s 1608 1591(pass)N 1 f 10 s 1741 1573(\(x)N 1828(Minimum)X 2167(Width\);)X 2436(Log)X 2585(Scale)X 684 591(Dominant)N 748 687(Delay)N 702 783(Constant)N 745 879(/)N 2 f 787(L)X 7 s 831 897(wire)N 1 f 10 s 671 975(\(ps)N 789(/)X 831(Logic)X 735 1071(Block\))N 1320 1391 MXY 0 -57 Dl 1300 1479(1)N 1606 1391 MXY 0 -57 Dl 1586 1479(2)N 1892 1391 MXY 0 -57 Dl 1872 1479(4)N 1984 1391 MXY 0 -57 Dl 1964 1479(5)N 2270 1391 MXY 0 -57 Dl 2230 1479(10)N 2463 1391 MXY 0 -57 Dl 2423 1479(16)N 2749 1391 MXY 0 -57 Dl 2709 1479(32)N 3034 1391 MXY 0 -57 Dl 2994 1479(64)N 1228 1391 MXY 57 0 Dl 1168 1407(0)N 1228 1247 MXY 57 0 Dl 1128 1263(50)N 1228 1103 MXY 57 0 Dl 1088 1119(100)N 1228 959 MXY 57 0 Dl 1088 975(150)N 1228 815 MXY 57 0 Dl 1088 831(200)N 1228 671 MXY 57 0 Dl 1088 687(250)N 1228 527 MXY 57 0 Dl 1088 543(300)N 1228 383 MXY 57 0 Dl 1088 399(350)N 1228 239 MXY 57 0 Dl 1088 255(400)N 2 f 2085 313(L)N 7 s 2129 331(wire)N 1 f 10 s 2262 313(=)N 2327(16)X 2427(logic)X 2607(blocks)X 1892 297 MXY 167 0 Dl 5 s 10 f 1977 313(g)N 2 f 10 s 2085 414(L)N 7 s 2129 432(wire)N 1 f 10 s 2262 414(=)N 2327(8)X 2387(logic)X 2567(blocks)X 1892 398 MXY 28 0 Dl 1961 MX 28 0 Dl 2030 MX 28 0 Dl 7 s 9 f 1969 414(+)N 2 f 10 s 2085 515(L)N 7 s 2129 533(wire)N 1 f 10 s 2262 515(=)N 2327(4)X 2387(logic)X 2567(blocks)X 1892 499 MXY 167 0 Dl 7 s 9 f 1967 515(D)N 2 f 10 s 2085 615(L)N 7 s 2129 633(wire)N 1 f 10 s 2262 615(=)N 2327(1)X 2387(logic)X 2567(block)X 1892 599 MXY 28 0 Dl 1961 MX 28 0 Dl 2030 MX 28 0 Dl 7 s 10 f 1974 615(f)N 5 s 1313 339(g)N 7 s 9 f 1305 368(+)N 1303 374(D)N 10 f 1310 354(f)N 10 s 1320 323 MXY 285 485 Dl 1320 352 MXY 14 24 Dl 1350 403 MXY 14 24 Dl 1381 454 MXY 14 24 Dl 1411 506 MXY 14 24 Dl 1441 557 MXY 14 24 Dl 1471 609 MXY 14 24 Dl 1501 660 MXY 14 24 Dl 1531 711 MXY 14 24 Dl 1561 763 MXY 14 24 Dl 1592 814 MXY 14 24 Dl 1320 358 MXY 285 489 Dl 1320 338 MXY 14 24 Dl 1350 387 MXY 14 24 Dl 1380 437 MXY 14 24 Dl 1411 486 MXY 14 24 Dl 1441 536 MXY 14 24 Dl 1471 585 MXY 14 24 Dl 1501 635 MXY 14 24 Dl 1531 685 MXY 14 24 Dl 1561 734 MXY 14 24 Dl 1591 784 MXY 14 24 Dl 5 s 1599 825(g)N 7 s 9 f 1591 855(+)N 1589 864(D)N 10 f 1596 824(f)N 10 s 1606 809 MXY 285 240 Dl 1606 839 MXY 21 18 Dl 1650 876 MXY 21 18 Dl 1694 913 MXY 21 18 Dl 1738 951 MXY 21 18 Dl 1782 988 MXY 21 18 Dl 1826 1025 MXY 21 18 Dl 1870 1062 MXY 21 18 Dl 1606 848 MXY 285 243 Dl 1606 808 MXY 21 19 Dl 1650 847 MXY 21 19 Dl 1694 886 MXY 21 19 Dl 1738 924 MXY 21 19 Dl 1782 962 MXY 21 19 Dl 1826 1001 MXY 21 19 Dl 1870 1039 MXY 21 19 Dl 5 s 1885 1065(g)N 7 s 9 f 1877 1097(+)N 1875 1107(D)N 10 f 1882 1074(f)N 10 s 1892 1049 MXY 92 47 Dl 1892 1081 MXY 25 13 Dl 1958 1115 MXY 25 13 Dl 1892 1091 MXY 92 48 Dl 1892 1058 MXY 25 13 Dl 1958 1094 MXY 25 13 Dl 5 s 1977 1112(g)N 7 s 9 f 1969 1145(+)N 1967 1156(D)N 10 f 1974 1123(f)N 10 s 1984 1096 MXY 285 88 Dl 1984 1129 MXY 27 8 Dl 2035 1146 MXY 27 8 Dl 2087 1163 MXY 27 8 Dl 2139 1179 MXY 27 8 Dl 2191 1196 MXY 27 8 Dl 2242 1213 MXY 27 8 Dl 1984 1140 MXY 285 95 Dl 1984 1107 MXY 27 9 Dl 2036 1125 MXY 27 9 Dl 2087 1143 MXY 27 9 Dl 2139 1161 MXY 27 9 Dl 2191 1179 MXY 27 9 Dl 2242 1197 MXY 27 9 Dl 5 s 2263 1201(g)N 7 s 9 f 2255 1237(+)N 2253 1251(D)N 10 f 2260 1222(f)N 10 s 2270 1185 MXY 193 25 Dl 2270 1221 MXY 28 4 Dl 2324 1231 MXY 28 4 Dl 2380 1239 MXY 28 4 Dl 2435 1248 MXY 28 4 Dl 2270 1235 MXY 193 32 Dl 2270 1206 MXY 28 5 Dl 2325 1216 MXY 28 5 Dl 2380 1226 MXY 28 5 Dl 2435 1236 MXY 28 5 Dl 5 s 2456 1227(g)N 7 s 9 f 2448 1268(+)N 2446 1283(D)N 10 f 2453 1258(f)N 10 s 2463 1211 MXY 285 2 Dl 2463 1252 MXY 28 1 Dl 2528 1256 MXY 28 1 Dl 2592 1259 MXY 28 1 Dl 2656 1262 MXY 28 1 Dl 2720 1266 MXY 28 1 Dl 2463 MX 285 20 Dl 2463 1242 MXY 28 2 Dl 2528 1247 MXY 28 2 Dl 2592 1253 MXY 28 2 Dl 2656 1259 MXY 28 2 Dl 2720 1265 MXY 28 2 Dl 5 s 2742 1229(g)N 7 s 9 f 2734 1283(+)N 2732 1305(D)N 10 f 2739 1283(f)N 10 s 2749 1213 MXY 285 -40 Dl 2749 1267 MXY 28 -1 Dl 2813 1263 MXY 28 -1 Dl 2877 1259 MXY 28 -1 Dl 2942 1256 MXY 28 -1 Dl 3006 1252 MXY 28 -1 Dl 2749 1289 MXY 285 -4 Dl 2749 1267 MXY 28 0 Dl 2813 1269 MXY 28 0 Dl 2877 1270 MXY 28 0 Dl 2942 1271 MXY 28 0 Dl 3006 1272 MXY 28 0 Dl 5 s 3027 1189(g)N 7 s 9 f 3019 1267(+)N 3017 1300(D)N 10 f 3024 1289(f)N 1 p xt xs %%Trailer %%EOF %%EndDocument FMENDEPSF 0 0 0 1 0 0 0 K 1 8 Q 0 X 0 0 0 1 0 0 0 K (Fig. 4. Dominant delay constant vs. routing pass transistor width.) 329.54 98.99 T 0 0 0 1 0 0 0 K 313.2 72 558 720 C 0 0 612 792 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "2" 2 %%Page: "3" 3 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 746 540 756 R 7 X 0 0 0 1 0 0 0 K V 1 10 Q 0 X (IEEE Custom Integrated Circuits Conference, 1999) 72 749.33 T (3 of 4) 516.67 749.33 T 72 33.32 540 43.32 R 7 X V 54 72 558 720 R V 1 9.7 Q 0 X -0.38 (contacted transistor width of 0.7) 54 554.83 P 3 F -0.38 (m) 179.8 554.83 P 1 F -0.38 (m, of the routing pass transis-) 185.39 554.83 P 0.72 (tors. As the width of the pass transistors increases, the wiring) 54 544.13 P -0.14 (delay clearly drops significantly. For very large pass transistors) 54 533.43 P 1.54 (the delay stops improving, since the switch capacitances \050as) 54 522.73 P 1.67 (Fig. 1 shows, there are many routing switches loading each) 54 512.03 P 1.25 (wire\051 become larger than the metal capacitance and the wire) 54 501.33 P -0.18 (becomes self-loaded. For the longer wires, delay degrades once) 54 490.63 P -0.5 (the transistor width is more than about 30 times minimum, since) 54 479.93 P 1.71 (the metal resistance becomes more significant than the pass) 54 469.23 P (transistor equivalent resistance.) 54 458.53 T 0.86 (Fig. 5 plots the area of a routing switch multiplied by the) 68.4 447.83 P 1.13 (dominant wire delay constant as a function of pass transistor) 54 437.13 P -0.36 (width. Again, the curves are normalized by dividing by the wire) 54 426.43 P 1.07 (length so they can all be plotted on the same scale. For wire) 54 415.73 P -0.07 (lengths of 1, 4, or 8 logic blocks, transistor widths of 10 and 16) 54 405.03 P 0.09 (times the minimum are essentially tied for the best area - delay) 54 394.33 P 0.32 (product. The higher end-to-end metal resistance of a length 16) 54 383.63 P -0.36 (wire, however, makes a pass transistor width of 10 preferable to) 54 372.93 P (a width of 16.) 54 362.23 T 2 10 Q (3.2. Sizing T) 54 347.33 T (ri-state Buf) 103.46 347.33 T (fer Routing Switc) 148.56 347.33 T (hes) 217.86 347.33 T 1 9.7 Q 3.28 (To determine the best size for tri-state buffer routing) 68.4 334.53 P 2.05 (switches, we simulated the delay to pass through a routing) 54 323.83 P -0.25 (buffer and the wire it drives. As in the previous section, we per-) 54 313.13 P 0.26 (form this analysis for various routing wire lengths, and we use) 54 302.43 P 0.31 (our area model to assess the area cost of different size buffers.) 54 291.73 P 0.17 (We build a buffer of minimum size with minimum contactable) 54 281.03 P 0.8 (width \0500.7) 54 270.33 P 3 F 0.8 (m) 97.91 270.33 P 1 F 0.8 (m\051 nMOS transistors, while the pMOS pull-up is) 103.49 270.33 P 1.02 (1.9 times this width to achieve equal rise and fall times. The) 54 259.63 P -0.17 (larger buffers are multi-stage buffers, and the stage ratio is kept) 54 248.93 P 0.45 (as close to 4 as possible to yield good speed with a small area) 54 238.23 P 0.09 ([9]. We define the size of a buffer as the ratio of the size of the) 54 227.53 P -0.01 (transistors in its final stage to those in the minimum size buffer) 54 216.83 P (defined above.) 54 206.13 T 0.18 (Fig. 6 shows the wire delay divided by the wire length \050i.e.) 68.4 195.43 P -0.07 (the delay to pass one logic block\051 versus the size of the tri-state) 54 184.73 P 1.74 (routing buffers. As buffer size increases from the minimum) 54 174.03 P 1.37 (size, speeds improve for all wire lengths. Once the buffer is) 54 163.33 P 1.85 (larger than four times the minimum, however, the speed of) 54 152.63 P 2.95 (length 1 wires starts to degrade. This occurs because the) 54 141.93 P 0.83 (increase in buffer intrinsic delay as the buffer grows is larger) 54 131.23 P 0.96 (than the decrease in the time it takes the larger buffer to dis-) 54 120.53 P 2.73 (charge the routing wire \050and attached switch\051 capacitance.) 54 109.83 P -0.37 (Longer wires continue to see some speed improvement until the) 54 99.13 P 0.45 (buffer size reaches 16 times the minimum \050for length 4 wires\051) 54 88.43 P (or 32 times the minimum \050for length 8 and 16 wires\051.) 54 77.73 T 0.92 (Fig. 7 shows the wire delay - routing switch area product) 327.6 555.5 P 0.83 (curve for four different wire lengths. For wires of length 4, 8) 313.2 544.8 P 0.42 (and 16 the best switch area - wire delay product occurs with a) 313.2 534.1 P 0.04 (buffer that is five times the minimum size. For a wire of length) 313.2 523.4 P 0.22 (1, the best area-delay product occurs with a buffer size of only) 313.2 512.7 P (twice the minimum.) 313.2 502 T 1.2 (Notice that the best routing pass transistor width was ten) 327.6 491.3 P 0.64 (times the minimum, while the best tri-state buffer size is only) 313.2 480.6 P 0.26 (five times the minimum. There are two reasons for this behav-) 313.2 469.9 P 1.24 (iour. First, as the size of a tri-state buffer is increased, more) 313.2 459.2 P 1 (stages are added to the buffer chain. Thus some of the speed) 313.2 448.5 P 0.72 (gained by the buffer\325s increased drive strength is offset by its) 313.2 437.8 P 0.97 (increased intrinsic delay. Second, since a tri-state buffer con-) 313.2 427.1 P 0.48 (tains several transistors, it consumes more area at a given size) 313.2 416.4 P -0.36 (than a pass transistor. Consequently, as a tri-state buffer is sized) 313.2 405.7 P 0.36 (up, it more rapidly swamps the fixed area overhead of its con-) 313.2 395 P 0.57 (trolling SRAM bit, so its area growth is closer to linear in the) 313.2 384.3 P (buffer size than that of a pass transistor.) 313.2 373.6 T 0.37 (Although we assumed minimum spacing metal 3 wiring in) 327.6 362.9 P 0.05 (Sections 3.1 and 3.2, laying out wires in metal 2 or using a dif-) 313.2 352.2 P 0.11 (ferent metal spacing or width does not significantly change the) 313.2 341.5 P -0.03 (point at which the best switch area - wire delay product occurs.) 313.2 330.8 P 0 10 Q (4. Routing W) 385.07 313.9 T (ir) 441.84 313.9 T (e Lay) 448.88 313.9 T (out) 472.24 313.9 T 1 9.7 Q 1.59 (Section 3 assumed that routing wires used the minimum) 327.6 300.1 P -0.01 (metal width and spacing. Increasing the spacing between metal) 313.2 289.4 P -0.14 (wires reduces the metal capacitance, while increasing the metal) 313.2 278.7 P -0.01 (width reduces the metal resistance, at the cost of some increase) 313.2 268 P 0.11 (in the metal capacitance. Of course, increasing either the metal) 313.2 257.3 P 0.56 (width or the metal spacing increases the metal pitch; this may) 313.2 246.6 P 2.64 (cause in an increase in the FPGA area \050if the metal area) 313.2 235.9 P 54 72 298.8 720 C 0 0 0 1 0 0 0 K 54 561.3 298.8 720 C 0 78 597 377 768 239.2 136.8 56.14 583.06 FMBEGINEPSF %%BeginDocument: /jayar/d0/vaughn/thesis/place/cicc99/grap/pass_T_area.eps %!PS-Adobe-2.0 EPSF-1.2 %%Title: stdin (ditroff) %%Creator: gractus.eecg:vaughn (Vaughn Betz,EECG,LP 392,1653,7662197,G,G ) %%CreationDate: Mon Nov 30 17:52:20 1998 %%For:vaughn vaughn %%Pages: 1 %%DocumentFonts: Times-Italic Times-BoldItalic Helvetica DIThacks Symbol Courier Helvetica-Bold Times-Roman Times-Bold Courier-Bold %%BoundingBox: 78 597 377 768 %%EndProlog %%Page 1 1 %! % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /nfs/relay/cs/src/transcript/lib/RCS/psdit.pro,v 1.1 93/09/07 16:24:02 ken Exp $ /$DITroff 140 dict def $DITroff begin %% Psfig additions /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end Psfig additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {0 72 11 mul translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 400 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop ditstart (psc)xT 576 1 1 xr 1(Times-Roman)xf 1 f 2(Times-Italic)xf 2 f 3(Times-Bold)xf 3 f 4(Times-BoldItalic)xf 4 f 5(Helvetica)xf 5 f 6(Helvetica-Bold)xf 6 f 7(Courier)xf 7 f 8(Courier-Bold)xf 8 f 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f xi 10 s 0 xH 0 xS 1 f 1284 1354 MXY 0 -1152 Dl 1728 0 Dl 0 1152 Dl -1728 0 Dl 2 f 1539 1535(W)N 7 s 1606 1553(pass)N 1 f 10 s 1739 1535(\(x)N 1826(Minimum)X 2165(Width\);)X 2434(Log)X 2583(Scale)X 631 458(Switch)N 873(Area)X 1050(-)X 678 554(Wire)N 859(Delay)X 740 650(Product)N 691 746(\(Dominant)N 768 842(Delay)N 722 938(Constant)N 635 1034(*)N 695(Switch)X 937(Area)X 751 1130(/)N 2 f 793(L)X 7 s 837 1148(wire)N 1 f 10 s 950 1130(\))N 1418 1354 MXY 0 -57 Dl 1398 1442(1)N 1678 1354 MXY 0 -57 Dl 1658 1442(2)N 1938 1354 MXY 0 -57 Dl 1918 1442(4)N 2022 1354 MXY 0 -57 Dl 2002 1442(5)N 2282 1354 MXY 0 -57 Dl 2242 1442(10)N 2458 1354 MXY 0 -57 Dl 2418 1442(16)N 2718 1354 MXY 0 -57 Dl 2678 1442(32)N 2979 1354 MXY 0 -57 Dl 2939 1442(64)N 1284 1354 MXY 57 0 Dl 1224 1370(0)N 1284 1168 MXY 57 0 Dl 1164 1184(0.5)N 1284 983 MXY 57 0 Dl 1224 999(1)N 1284 797 MXY 57 0 Dl 1164 813(1.5)N 1284 611 MXY 57 0 Dl 1224 627(2)N 1284 425 MXY 57 0 Dl 1164 441(2.5)N 1284 239 MXY 57 0 Dl 1224 255(3)N 2 f 1877 330(L)N 7 s 1921 348(wire)N 1 f 10 s 2054 330(=)N 2119(16)X 2219(logic)X 2399(blocks)X 1714 314 MXY 140 0 Dl 5 s 10 f 1783 330(g)N 2 f 10 s 1877 426(L)N 7 s 1921 444(wire)N 1 f 10 s 2054 426(=)N 2119(8)X 2179(logic)X 2359(blocks)X 1714 410 MXY 28 0 Dl 1770 MX 28 0 Dl 1825 MX 28 0 Dl 7 s 9 f 1775 426(+)N 2 f 10 s 1877 523(L)N 7 s 1921 541(wire)N 1 f 10 s 2054 523(=)N 2119(4)X 2179(logic)X 2359(blocks)X 1714 507 MXY 140 0 Dl 7 s 9 f 1773 523(D)N 2 f 10 s 1877 620(L)N 7 s 1921 638(wire)N 1 f 10 s 2054 620(=)N 2119(1)X 2179(logic)X 2359(block)X 1714 604 MXY 28 0 Dl 1770 MX 28 0 Dl 1825 MX 28 0 Dl 7 s 10 f 1780 620(f)N 5 s 1411 404(g)N 7 s 9 f 1403 430(+)N 1401 437(D)N 10 f 1408 393(f)N 10 s 1418 388 MXY 260 401 Dl 1418 414 MXY 15 24 Dl 1448 462 MXY 15 24 Dl 1479 509 MXY 15 24 Dl 1510 557 MXY 15 24 Dl 1540 604 MXY 15 24 Dl 1571 652 MXY 15 24 Dl 1601 700 MXY 15 24 Dl 1632 747 MXY 15 24 Dl 1662 795 MXY 15 24 Dl 1418 421 MXY 260 404 Dl 1418 377 MXY 15 24 Dl 1448 425 MXY 15 24 Dl 1479 474 MXY 15 24 Dl 1510 523 MXY 15 24 Dl 1540 571 MXY 15 24 Dl 1571 619 MXY 15 24 Dl 1601 668 MXY 15 24 Dl 1632 717 MXY 15 24 Dl 1662 765 MXY 15 24 Dl 5 s 1671 805(g)N 7 s 9 f 1663 835(+)N 1661 843(D)N 10 f 1668 805(f)N 10 s 1678 789 MXY 260 189 Dl 1678 819 MXY 23 17 Dl 1725 854 MXY 23 17 Dl 1772 890 MXY 23 17 Dl 1820 925 MXY 23 17 Dl 1867 960 MXY 23 17 Dl 1915 995 MXY 23 17 Dl 1678 827 MXY 260 196 Dl 1678 789 MXY 23 17 Dl 1725 826 MXY 23 17 Dl 1773 863 MXY 23 17 Dl 1820 899 MXY 23 17 Dl 1867 936 MXY 23 17 Dl 1915 973 MXY 23 17 Dl 5 s 1931 995(g)N 7 s 9 f 1923 1028(+)N 1921 1040(D)N 10 f 1928 1006(f)N 10 s 1938 979 MXY 83 33 Dl 1938 MX 26 11 Dl 1995 1038 MXY 26 11 Dl 1938 1024 MXY 83 37 Dl 1938 990 MXY 26 10 Dl 1995 1013 MXY 26 10 Dl 5 s 2015 1028(g)N 7 s 9 f 2007 1066(+)N 2005 1077(D)N 10 f 2012 1040(f)N 10 s 2022 1012 MXY 260 33 Dl 2022 1050 MXY 28 5 Dl 2079 1061 MXY 28 5 Dl 2138 1073 MXY 28 5 Dl 2196 1084 MXY 28 5 Dl 2253 1096 MXY 28 5 Dl 2022 1061 MXY 260 59 Dl 2022 1024 MXY 28 5 Dl 2079 1036 MXY 28 5 Dl 2138 1049 MXY 28 5 Dl 2196 1061 MXY 28 5 Dl 2253 1073 MXY 28 5 Dl 5 s 2275 1062(g)N 7 s 9 f 2267 1118(+)N 2265 1136(D)N 10 f 2272 1095(f)N 10 s 2282 1046 MXY 176 -29 Dl 2282 1102 MXY 28 -1 Dl 2331 1100 MXY 28 -1 Dl 2380 1098 MXY 28 -1 Dl 2430 1095 MXY 28 -1 Dl 2282 1120 MXY 176 3 Dl 2282 1079 MXY 28 -1 Dl 2331 1077 MXY 28 -1 Dl 2380 1075 MXY 28 -1 Dl 2430 1073 MXY 28 -1 Dl 5 s 2451 1032(g)N 7 s 9 f 2443 1110(+)N 2441 1140(D)N 10 f 2448 1088(f)N 10 s 2458 1016 MXY 260 -178 Dl 2458 1094 MXY 27 -10 Dl 2517 1072 MXY 27 -10 Dl 2575 1049 MXY 27 -10 Dl 2633 1027 MXY 27 -10 Dl 2691 1004 MXY 27 -10 Dl 2458 1124 MXY 260 -66 Dl 2458 1072 MXY 27 -8 Dl 2516 1054 MXY 27 -8 Dl 2574 1037 MXY 27 -8 Dl 2632 1020 MXY 27 -8 Dl 2691 1002 MXY 27 -8 Dl 5 s 2711 854(g)N 7 s 9 f 2703 1010(+)N 2701 1073(D)N 10 f 2708 1010(f)N 10 s 2718 838 MXY 260 -568 Dl 2718 994 MXY 17 -23 Dl 2753 949 MXY 17 -23 Dl 2787 904 MXY 17 -23 Dl 2822 859 MXY 17 -23 Dl 2857 814 MXY 17 -23 Dl 2892 769 MXY 17 -23 Dl 2926 724 MXY 17 -23 Dl 2961 679 MXY 17 -23 Dl 2718 1057 MXY 260 -233 Dl 2718 994 MXY 21 -19 Dl 2758 959 MXY 21 -19 Dl 2798 924 MXY 21 -19 Dl 2837 888 MXY 21 -19 Dl 2877 853 MXY 21 -19 Dl 2917 818 MXY 21 -19 Dl 2957 782 MXY 21 -19 Dl 5 s 2972 285(g)N 7 s 9 f 2964 672(+)N 2962 839(D)N 10 f 2969 779(f)N 1 p xt xs %%Trailer %%EOF %%EndDocument FMENDEPSF 0 0 0 1 0 0 0 K 1 8 Q 0 X 0 0 0 1 0 0 0 K (Fig. 5. Switch area - wire delay product vs. routing pass transistor width.) 58.57 571.32 T 0 0 0 1 0 0 0 K 54 72 298.8 720 C 0 0 612 792 C 313.2 72 558 720 C 313.2 561.97 558 720 C 0 93 597 399 768 244.8 136.8 313.37 583.36 FMBEGINEPSF %%BeginDocument: /jayar/d0/vaughn/thesis/place/cicc99/grap/buf_T.eps %!PS-Adobe-2.0 EPSF-1.2 %%Title: stdin (ditroff) %%Creator: gractus.eecg:vaughn (Vaughn Betz,EECG,LP 392,1653,7662197,G,G ) %%CreationDate: Mon Nov 30 17:50:12 1998 %%For:vaughn vaughn %%Pages: 1 %%DocumentFonts: Times-Italic Times-BoldItalic Helvetica DIThacks Symbol Courier Helvetica-Bold Times-Roman Times-Bold Courier-Bold %%BoundingBox: 93 597 399 768 %%EndProlog %%Page 1 1 %! % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /nfs/relay/cs/src/transcript/lib/RCS/psdit.pro,v 1.1 93/09/07 16:24:02 ken Exp $ /$DITroff 140 dict def $DITroff begin %% Psfig additions /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end Psfig additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {0 72 11 mul translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 400 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop ditstart (psc)xT 576 1 1 xr 1(Times-Roman)xf 1 f 2(Times-Italic)xf 2 f 3(Times-Bold)xf 3 f 4(Times-BoldItalic)xf 4 f 5(Helvetica)xf 5 f 6(Helvetica-Bold)xf 6 f 7(Courier)xf 7 f 8(Courier-Bold)xf 8 f 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f xi 10 s 0 xH 0 xS 1 f 1401 1360 MXY 0 -1152 Dl 1785 0 Dl 3187 MX 0 1152 Dl -1785 0 Dl 1622 1542(Buffer)N 1852(Size)X 2010(\(x)X 2097(Minimum)X 2436(Size\);)X 2643(Log)X 2792(Scale)X 755 560(Delay)N 967(/)X 2 f 1009(L)X 7 s 1053 578(wire)N 1 f 10 s 789 656(\(Delay)N 1028(per)X 761 752(Logic)N 968(Block)X 809 848(Spanned\))N 850 944(\(ps)N 968(per)X 748 1040(Logic)N 955(Block\))X 1490 1360 MXY 0 -57 Dl 1470 1448(1)N 1767 1360 MXY 0 -57 Dl 1747 1448(2)N 2044 1360 MXY 0 -57 Dl 2024 1448(4)N 2133 1360 MXY 0 -57 Dl 2113 1448(5)N 2409 1360 MXY 0 -57 Dl 2369 1448(10)N 2597 1360 MXY 0 -57 Dl 2557 1448(16)N 2874 1360 MXY 0 -57 Dl 2834 1448(32)N 3151 1360 MXY 0 -57 Dl 3111 1448(64)N 1401 1360 MXY 57 0 Dl 1341 1376(0)N 1401 1200 MXY 57 0 Dl 1261 1216(100)N 1401 1041 MXY 57 0 Dl 1261 1057(200)N 1401 880 MXY 57 0 Dl 1261 896(300)N 1401 720 MXY 57 0 Dl 1261 736(400)N 1401 560 MXY 57 0 Dl 1261 576(500)N 1401 401 MXY 57 0 Dl 1261 417(600)N 1401 240 MXY 57 0 Dl 1261 256(700)N 2 f 2005 296(L)N 7 s 2049 314(wire)N 1 f 10 s 2182 296(=)N 2247(16)X 2347(logic)X 2527(blocks)X 1864 280 MXY 120 0 Dl 5 s 10 f 1922 296(g)N 2 f 10 s 2005 376(L)N 7 s 2049 394(wire)N 1 f 10 s 2182 376(=)N 2247(8)X 2307(logic)X 2487(blocks)X 1864 360 MXY 28 0 Dl 1910 MX 28 0 Dl 1956 MX 28 0 Dl 7 s 9 f 1914 376(+)N 2 f 10 s 2005 456(L)N 7 s 2049 474(wire)N 1 f 10 s 2182 456(=)N 2247(4)X 2307(logic)X 2487(blocks)X 1864 440 MXY 120 0 Dl 7 s 9 f 1912 456(D)N 2 f 10 s 2005 536(L)N 7 s 2049 554(wire)N 1 f 10 s 2182 536(=)N 2247(1)X 2307(logic)X 2487(block)X 1864 520 MXY 28 0 Dl 1910 MX 28 0 Dl 1956 MX 28 0 Dl 7 s 10 f 1919 536(f)N 5 s 1483 543(g)N 7 s 9 f 1475 530(+)N 1473 493(D)N 10 f 1480 255(f)N 10 s 1490 527 MXY 277 384 Dl 1490 514 MXY 17 23 Dl 1522 558 MXY 17 23 Dl 1555 603 MXY 17 23 Dl 1588 647 MXY 17 23 Dl 1620 691 MXY 17 23 Dl 1653 735 MXY 17 23 Dl 1685 780 MXY 17 23 Dl 1718 824 MXY 17 23 Dl 1750 868 MXY 17 23 Dl 1490 477 MXY 277 363 Dl 1490 239 MXY 20 20 Dl 1533 283 MXY 20 20 Dl 1576 327 MXY 20 20 Dl 1619 370 MXY 20 20 Dl 1661 414 MXY 20 20 Dl 1704 457 MXY 20 20 Dl 1747 501 MXY 20 20 Dl 5 s 1760 928(g)N 7 s 9 f 1752 907(+)N 1750 857(D)N 10 f 1757 538(f)N 10 s 1767 912 MXY 277 190 Dl 1767 891 MXY 24 16 Dl 1817 925 MXY 24 16 Dl 1868 959 MXY 24 16 Dl 1919 993 MXY 24 16 Dl 1969 1027 MXY 24 16 Dl 2020 1061 MXY 24 16 Dl 1767 841 MXY 277 176 Dl 1767 522 MXY 26 11 Dl 1817 543 MXY 26 11 Dl 1867 565 MXY 26 11 Dl 1917 587 MXY 26 11 Dl 1967 609 MXY 26 11 Dl 2017 630 MXY 26 11 Dl 5 s 2037 1118(g)N 7 s 9 f 2029 1093(+)N 2027 1033(D)N 10 f 2034 658(f)N 10 s 2044 1102 MXY 89 36 Dl 2044 1077 MXY 27 10 Dl 2106 1101 MXY 27 10 Dl 2044 1017 MXY 89 29 Dl 2044 642 MXY 28 0 Dl 2104 643 MXY 28 0 Dl 5 s 2126 1154(g)N 7 s 9 f 2118 1127(+)N 2116 1063(D)N 10 f 2123 659(f)N 10 s 2133 1138 MXY 277 70 Dl 2133 1111 MXY 28 6 Dl 2195 1126 MXY 28 6 Dl 2257 1140 MXY 28 6 Dl 2320 1155 MXY 28 6 Dl 2382 1169 MXY 28 6 Dl 2133 1047 MXY 277 51 Dl 2133 643 MXY 28 -2 Dl 2195 637 MXY 28 -2 Dl 2257 631 MXY 28 -2 Dl 2319 625 MXY 28 -2 Dl 2381 619 MXY 28 -2 Dl 5 s 2402 1224(g)N 7 s 9 f 2394 1191(+)N 2392 1115(D)N 10 f 2399 633(f)N 10 s 2409 1208 MXY 187 23 Dl 2409 1175 MXY 28 2 Dl 2462 1181 MXY 28 2 Dl 2515 1186 MXY 28 2 Dl 2568 1192 MXY 28 2 Dl 2409 1099 MXY 187 10 Dl 2409 617 MXY 28 -6 Dl 2463 604 MXY 28 -6 Dl 2516 592 MXY 28 -6 Dl 2569 580 MXY 28 -6 Dl 5 s 2590 1247(g)N 7 s 9 f 2582 1211(+)N 2580 1126(D)N 10 f 2587 590(f)N 10 s 2597 1231 MXY 277 12 Dl 2597 1195 MXY 28 0 Dl 2659 1197 MXY 28 0 Dl 2721 1198 MXY 28 0 Dl 2783 1200 MXY 28 0 Dl 2846 1201 MXY 28 0 Dl 2597 1110 MXY 277 -5 Dl 2597 574 MXY 27 -8 Dl 2647 558 MXY 27 -8 Dl 2697 542 MXY 27 -8 Dl 2747 526 MXY 27 -8 Dl 2797 509 MXY 27 -8 Dl 2847 493 MXY 27 -8 Dl 5 s 2867 1259(g)N 7 s 9 f 2859 1218(+)N 2857 1120(D)N 10 f 2864 500(f)N 10 s 2874 1243 MXY 277 -5 Dl 2874 1202 MXY 28 0 Dl 2936 1201 MXY 28 0 Dl 2998 1199 MXY 28 0 Dl 3060 1197 MXY 28 0 Dl 3122 1195 MXY 28 0 Dl 2874 1104 MXY 277 -18 Dl 2874 484 MXY 27 -9 Dl 2924 466 MXY 27 -9 Dl 2974 449 MXY 27 -9 Dl 3024 431 MXY 27 -9 Dl 3074 413 MXY 27 -9 Dl 3124 396 MXY 27 -9 Dl 5 s 3144 1254(g)N 7 s 9 f 3136 1211(+)N 3134 1101(D)N 10 f 3141 402(f)N 1 p xt xs %%Trailer %%EOF %%EndDocument FMENDEPSF 0 0 0 1 0 0 0 K 1 8 Q 0 X 0 0 0 1 0 0 0 K (Fig. 6. Delay per logic block spanned vs. routing tri-state b) 323.53 571.99 T (uf) 514.02 571.99 T (fer size.) 520.48 571.99 T 0 0 0 1 0 0 0 K 313.2 72 558 720 C 0 0 612 792 C 313.2 72 558 720 C 313.2 72 558 232.03 C 0 90 593 389 768 239.2 140 316.37 86.49 FMBEGINEPSF %%BeginDocument: /jayar/d0/vaughn/thesis/place/cicc99/grap/buf_T_area.eps %!PS-Adobe-2.0 EPSF-1.2 %%Title: stdin (ditroff) %%Creator: gractus.eecg:vaughn (Vaughn Betz,EECG,LP 392,1653,7662197,G,G ) %%CreationDate: Mon Nov 30 17:58:51 1998 %%For:vaughn vaughn %%Pages: 1 %%DocumentFonts: Times-Italic Times-BoldItalic Helvetica DIThacks Symbol Courier Helvetica-Bold Times-Roman Times-Bold Courier-Bold %%BoundingBox: 90 593 389 768 %%EndProlog %%Page 1 1 %! % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /nfs/relay/cs/src/transcript/lib/RCS/psdit.pro,v 1.1 93/09/07 16:24:02 ken Exp $ /$DITroff 140 dict def $DITroff begin %% Psfig additions /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end Psfig additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {0 72 11 mul translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 400 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop ditstart (psc)xT 576 1 1 xr 1(Times-Roman)xf 1 f 2(Times-Italic)xf 2 f 3(Times-Bold)xf 3 f 4(Times-BoldItalic)xf 4 f 5(Helvetica)xf 5 f 6(Helvetica-Bold)xf 6 f 7(Courier)xf 7 f 8(Courier-Bold)xf 8 f 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f xi 10 s 0 xH 0 xS 1 f 1378 1391 MXY 0 -1152 Dl 1728 0 Dl 0 1152 Dl -1728 0 Dl 1570 1573(Buffer)N 1800(Size)X 1958(\(x)X 2045(Minimum)X 2384(Size\);)X 2591(Log)X 2740(Scale)X 755 591(Delay)N 967(/)X 2 f 1009(L)X 7 s 1053 609(wire)N 1 f 10 s 731 687(*)N 791(Switch)X 1033(Area)X 789 783(\(Delay)N 1028(per)X 761 879(Logic)N 968(Block)X 822 975(Spanned)N 717 1071(*)N 777(Switch)X 1019(Area\))X 1512 1391 MXY 0 -57 Dl 1492 1479(1)N 1772 1391 MXY 0 -57 Dl 1752 1479(2)N 2032 1391 MXY 0 -57 Dl 2012 1479(4)N 2116 1391 MXY 0 -57 Dl 2096 1479(5)N 2376 1391 MXY 0 -57 Dl 2336 1479(10)N 2552 1391 MXY 0 -57 Dl 2512 1479(16)N 2812 1391 MXY 0 -57 Dl 2772 1479(32)N 3072 1391 MXY 0 -57 Dl 3032 1479(64)N 1378 1391 MXY 57 0 Dl 1318 1407(0)N 1378 1200 MXY 57 0 Dl 1318 1216(2)N 1378 1008 MXY 57 0 Dl 1318 1024(4)N 1378 815 MXY 57 0 Dl 1318 831(6)N 1378 624 MXY 57 0 Dl 1318 640(8)N 1378 432 MXY 57 0 Dl 1278 448(10)N 1378 239 MXY 57 0 Dl 1278 255(12)N 2 f 1811 352(L)N 7 s 1855 370(wire)N 1 f 10 s 1988 352(=)N 2053(16)X 1664 336 MXY 126 0 Dl 5 s 10 f 1726 352(g)N 2 f 10 s 1811 457(L)N 7 s 1855 475(wire)N 1 f 10 s 1988 457(=)N 2053(8)X 1664 441 MXY 28 0 Dl 1713 MX 28 0 Dl 1761 MX 28 0 Dl 7 s 9 f 1718 457(+)N 2 f 10 s 1811 563(L)N 7 s 1855 581(wire)N 1 f 10 s 1988 563(=)N 2053(4)X 1664 547 MXY 126 0 Dl 7 s 9 f 1716 563(D)N 2 f 10 s 1811 668(L)N 7 s 1855 686(wire)N 1 f 10 s 1988 668(=)N 2053(1)X 1664 652 MXY 28 0 Dl 1713 MX 28 0 Dl 1761 MX 28 0 Dl 7 s 10 f 1723 668(f)N 5 s 1505 958(g)N 10 s 1512 942 MXY 260 108 Dl 5 s 1765 1067(g)N 10 s 1772 1051 MXY 260 92 Dl 5 s 2025 1159(g)N 10 s 2032 1143 MXY 83 12 Dl 5 s 2109 1171(g)N 10 s 2116 1155 MXY 260 -43 Dl 5 s 2369 1128(g)N 10 s 2376 1112 MXY 176 -44 Dl 5 s 2545 1084(g)N 10 s 2552 1068 MXY 260 -240 Dl 5 s 2805 843(g)N 10 s 2812 827 MXY 260 -479 Dl 5 s 3065 364(g)N 7 s 9 f 1497 966(+)N 10 s 1512 950 MXY 26 10 Dl 1570 974 MXY 26 10 Dl 1628 998 MXY 26 10 Dl 1687 1022 MXY 26 10 Dl 1745 1046 MXY 26 10 Dl 7 s 1757 1073(+)N 10 s 1772 1057 MXY 27 8 Dl 1830 1075 MXY 27 8 Dl 1888 1093 MXY 27 8 Dl 1946 1111 MXY 27 8 Dl 2005 1129 MXY 27 8 Dl 7 s 2017 1154(+)N 10 s 2032 1138 MXY 28 2 Dl 2087 1144 MXY 28 2 Dl 7 s 2101 1163(+)N 10 s 2116 1147 MXY 28 -6 Dl 2174 1133 MXY 28 -6 Dl 2232 1118 MXY 28 -6 Dl 2290 1104 MXY 28 -6 Dl 2348 1090 MXY 28 -6 Dl 7 s 2361 1099(+)N 10 s 2376 1083 MXY 27 -10 Dl 2426 1065 MXY 27 -10 Dl 2476 1046 MXY 27 -10 Dl 2525 1027 MXY 27 -10 Dl 7 s 2537 1033(+)N 10 s 2552 1017 MXY 18 -21 Dl 2593 970 MXY 18 -21 Dl 2633 922 MXY 18 -21 Dl 2673 875 MXY 18 -21 Dl 2713 827 MXY 18 -21 Dl 2753 780 MXY 18 -21 Dl 2794 732 MXY 18 -21 Dl 7 s 2797 726(+)N 10 s 2812 710 MXY 12 -25 Dl 2836 660 MXY 12 -25 Dl 2859 611 MXY 12 -25 Dl 2883 562 MXY 12 -25 Dl 2906 512 MXY 12 -25 Dl 2930 463 MXY 12 -25 Dl 2953 414 MXY 12 -25 Dl 2977 364 MXY 12 -25 Dl 3000 315 MXY 12 -25 Dl 3024 265 MXY 12 -25 Dl 7 s 1495 965(D)N 10 s 1512 949 MXY 260 99 Dl 7 s 1755 1064(D)N 10 s 1772 1048 MXY 260 63 Dl 7 s 2015 1127(D)N 10 s 2032 1111 MXY 83 -1 Dl 7 s 2099 1126(D)N 10 s 2116 1110 MXY 260 -104 Dl 7 s 2359 1021(D)N 10 s 2376 1005 MXY 176 -112 Dl 7 s 2535 909(D)N 10 s 2552 893 MXY 260 -456 Dl 7 s 2795 452(D)N 10 s 2812 436 MXY 78 -196 Dl 7 s 10 f 1502 881(f)N 10 s 1512 865 MXY 28 4 Dl 1570 875 MXY 28 4 Dl 1628 884 MXY 28 4 Dl 1685 894 MXY 28 4 Dl 1744 903 MXY 28 4 Dl 7 s 1762 923(f)N 10 s 1772 907 MXY 28 -1 Dl 1830 904 MXY 28 -1 Dl 1888 901 MXY 28 -1 Dl 1945 898 MXY 28 -1 Dl 2003 894 MXY 28 -1 Dl 7 s 2022 908(f)N 10 s 2032 892 MXY 25 -13 Dl 2090 863 MXY 25 -13 Dl 7 s 2106 866(f)N 10 s 2116 850 MXY 17 -22 Dl 2150 807 MXY 17 -22 Dl 2185 765 MXY 17 -22 Dl 2219 722 MXY 17 -22 Dl 2254 679 MXY 17 -22 Dl 2289 636 MXY 17 -22 Dl 2323 594 MXY 17 -22 Dl 2358 551 MXY 17 -22 Dl 7 s 2366 544(f)N 10 s 2376 528 MXY 13 -25 Dl 2404 476 MXY 13 -25 Dl 2431 423 MXY 13 -25 Dl 2459 371 MXY 13 -25 Dl 2487 318 MXY 13 -25 Dl 2515 265 MXY 13 -25 Dl 1 p xt xs %%Trailer %%EOF %%EndDocument FMENDEPSF 0 0 0 1 0 0 0 K 1 8 Q 0 X 0 0 0 1 0 0 0 K (Fig. 7. Switch area - wire delay product vs. routing tri-state b) 320.29 74.7 T (uf) 517.66 74.7 T (fer size.) 524.12 74.7 T 0 0 0 1 0 0 0 K 313.2 72 558 720 C 0 0 612 792 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "3" 3 %%Page: "4" 4 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 746 540 756 R 7 X 0 0 0 1 0 0 0 K V 1 10 Q 0 X (IEEE Custom Integrated Circuits Conference, 1999) 72 749.33 T (4 of 4) 516.67 749.33 T 72 33.32 540 43.32 R 7 X V 54 72 558 720 R V 1 9.7 Q 0 X -0.03 (becomes too large to fit over the transistor area\051. In this section) 54 713.53 P 0.41 (we determine if FPGA routing wires benefit from greater than) 54 702.83 P -0.46 (minimum metal width or spacing. We again assume that routing) 54 692.13 P (wires are laid out in metal 3.) 54 681.43 T 0.01 (Table 1 lists the speed benefit from either widening routing) 68.4 670.73 P 0.29 (wires or increasing the spacing between wires to the point that) 54 660.03 P -0.14 (the metal pitch \050width + spacing\051 becomes 1.55x the minimum.) 54 649.33 P -0.3 (The upper half of the table lists data when the switches between) 54 638.63 P -0.43 (wires are pass transistors, while the bottom half lists data for the) 54 627.93 P -0.21 (tri-state buffer case. We have intentionally presented results for) 54 617.23 P 1.34 (a relatively long \050length 16\051 wire, since such wires have the) 54 606.53 P -0.55 (greatest potential for speed improvements through metal widen-) 54 595.83 P 1.58 (ing. The routing transistors are sized for the best area-delay) 54 585.13 P (product in each case.) 54 574.43 T 0.51 (Table 1 shows that increasing metal spacing yields greater) 68.4 459.73 P 0.71 (speed gains than widening metal. In fact, for buffered routing) 54 449.03 P 0.13 (switches, widening the wire leads to a 3% delay increase, even) 54 438.33 P 0.85 (for this fairly long, length 16, wire. Since buffers prevent the) 54 427.63 P 0.56 (\322build-up\323 of metal resistance when several routing wires and) 54 416.93 P 0.33 (switches are connected in series, widening wires connected by) 54 406.23 P 0.29 (buffers is not very effective -- the increase in wire capacitance) 54 395.53 P 0.41 (outweighs the benefits of decreased wire resistance. Widening) 54 384.83 P (wires performs even more poorly for shorter routing wires.) 54 374.13 T -0.19 (It may seem surprising that widening the routing wires is so) 68.4 363.43 P 1.74 (ineffective, since standard cell designs often use wider than) 54 352.73 P 3.39 (minimum metal traces. In standard cell designs, one can) 54 342.03 P 0.14 (increase the size of the buffer driving a wire to compensate for) 54 331.33 P 0.64 (the increase in wire capacitance due to wider metal. In FPGA) 54 320.64 P -0.52 (routing, however, we have not one buffer or pass transistor driv-) 54 309.93 P -0.38 (ing a wire, but many possible drivers hanging off the wire along) 54 299.23 P 0.13 (its length. The area cost of sizing up all these switches to com-) 54 288.54 P 3.19 (pensate for the increased metal capacitance is significant.) 54 277.84 P 0.16 (Normally, therefore, these switches are small enough that their) 54 267.14 P -0.19 (equivalent resistance is higher than the metal resistance of even) 54 256.43 P (a fairly long, minimum width wire.) 54 245.73 T 0 10 Q (5. Electrically Heter) 95.67 228.84 T (ogeneous Routing) 181.29 228.84 T 1 9.7 Q -0.51 (We have found that it is best to optimize some of an FPGA\325s) 68.4 215.03 P -0.07 (routing for speed, while the remainder is optimized for density.) 54 204.34 P 0.14 (For example, Fig. 8 shows the average speed achieved by a set) 54 193.64 P 2.72 (of 20 benchmark circuits when implemented in a realistic) 54 182.93 P 0.93 (FPGA architecture by the VPR timing-driven routing tool [7,) 54 172.23 P -0.13 (8]. The vertical axis is the critical path delay while the horizon-) 54 161.53 P 1.41 (tal axis is the fraction of routing tracks per channel laid out) 54 150.84 P 1.11 (width a wide \0502.5) 54 140.14 P 3 F 1.11 (m) 128.74 140.14 P 1 F 1.11 (m\051 metal spacing. The remaining routing) 134.32 140.14 P 0.64 (tracks are laid out with the minimum \0500.5) 54 129.43 P 3 F 0.64 (m) 222.69 129.43 P 1 F 0.64 (m\051 metal spacing.) 228.27 129.43 P 0.48 (Notice that an FPGA in which all the wires are widely spaced) 54 118.73 P -0.05 (out is 15% faster than an FPGA in which all wires use the min-) 54 108.03 P -0.17 (imum spacing. Even more interesting is the fact that by spacing) 54 97.34 P 1 (out only 20% of the tracks we obtain a 13% circuit speedup.) 54 86.64 P 0.34 (Increasing the spacing of only 20% of the routing tracks mini-) 54 75.93 P -0.17 (mizes the increase in metal area required, but still yields almost) 313.2 557.54 P 0.8 (all of the achievable speedup. Note that a good timing-driven) 313.2 546.84 P 0.38 (router [7] is key to realize these speed gains -- the router must) 313.2 536.14 P -0.19 (correctly identify the critical connections and route them on the) 313.2 525.44 P (extra-fast wires.) 313.2 514.74 T 2.28 (Instead of \050or in addition to\051 spacing out some routing) 327.6 504.04 P -0.42 (tracks, one could make the switches attached to the wires in cer-) 313.2 493.34 P 0.38 (tain tracks extra large. From the results of this section, we can) 313.2 482.64 P -0.57 (predict that sizing up the switches on only 20% of the tracks will) 313.2 471.94 P (produce almost as much speed gain as sizing up every switch.) 313.2 461.24 T 0 10 Q (6. Conclusions) 404.76 444.34 T 1 9.7 Q 0.99 (This paper demonstrated a solution to the leakage current) 327.6 430.54 P 0.14 (problem caused by pass transistors, and showed which form of) 313.2 419.84 P 0.62 (tri-state buffer is best suited to FPGA interconnect. We found) 313.2 409.14 P -0.25 (that in a 0.35) 313.2 398.44 P 3 F -0.25 (m) 365.27 398.44 P 1 F -0.25 (m process it is best for routing pass transistors to) 370.86 398.44 P 1.64 (be approximately ten times the minimum contactable width,) 313.2 387.74 P 0.21 (and for tri-state buffers to be five times the minimum size. We) 313.2 377.04 P -0.25 (also found that widening FPGA routing wires does not improve) 313.2 366.34 P 1.61 (their speed as much as increasing their spacing. Finally, we) 313.2 355.64 P 0.77 (showed that it is best to make FPGA interconnect electrically) 313.2 344.94 P 0.49 (heterogeneous -- some \050~20%\051 of the routing tracks should be) 313.2 334.24 P -0.51 (designed for speed, with the others designed for area-efficiency.) 313.2 323.54 P 0 10 Q ( Refer) 411.12 306.64 T (ences) 437.31 306.64 T 1 8 Q ([1]) 313.2 293.97 T 0.86 (S. Brown, R. Francis, J. Rose and Z. Vranesic,) 331.2 293.97 P 2 F 0.86 (Field-Programmable) 490.01 293.97 P (Gate Arrays) 331.2 284.97 T 1 F (, Kluwer Academic Publishers, 1992.) 370.53 284.97 T ([2]) 313.2 274.97 T 0.77 (J. Cong, L. He, C. Koh and Z. Pan, \322Global Interconnect Sizing and) 331.2 274.97 P 0.4 (Spacing with Consideration of Coupling Capacitance,\323) 331.2 265.97 P 2 F 0.4 (ICCAD) 511.6 265.97 P 1 F 0.4 (, 1997,) 535.6 265.97 P (pp. 628 - 633.) 331.2 256.97 T ([3]) 313.2 246.97 T 0.97 (P. Chow, S. Seo, J. Rose, K. Chung, G. Paez and I. Rahardja, \322The) 331.2 246.97 P 0.83 (Design of an SRAM-Based Field-Programmable Gate Array, Part II:) 331.2 237.97 P (Circuit Design and Layout,\323) 331.2 228.97 T 2 F (To appear in IEEE Trans. on VLSI) 423.86 228.97 T 1 F (.) 535.19 228.97 T ([4]) 313.2 218.97 T -0.45 (P. Chow, S. Seo, K. Chung, G. Paez, and J. Rose, \322A High-Speed FPGA) 331.2 218.97 P 3.8 (Using Programmable Mini-Tiles,\323) 331.2 209.97 P 2 F 3.8 (Symp. on Integrated Systems) 454.6 209.97 P (\050formerly Conf. on Advanced Research in VLSI\051) 331.2 200.97 T 1 F (, 1993, pp. 104-122.) 485.18 200.97 T ([5]) 313.2 190.97 T 0.22 (M. Khellah, S. Brown and Z. Vranesic, \322Modelling Routing Delays in) 331.2 190.97 P (SRAM-Based FPGAs,\323) 331.2 181.97 T 2 F (Cdn. Con. on VLSI) 409.2 181.97 T 1 F (, 1993, pp. 6.B.13 - 6.B.18.) 469.87 181.97 T ([6]) 313.2 171.97 T -0.03 (I. Dobbelaere, M. Horowitz and A. El Gamal, \322Regenerative Feedback) 331.2 171.97 P -0.26 (Repeaters for Programmable Interconnections,\323) 331.2 162.97 P 2 F -0.26 (ISSCC) 485.02 162.97 P 1 F -0.26 (, 1995, pp. 116 -) 506.36 162.97 P (117.) 331.2 153.97 T ([7]) 313.2 143.97 T 0.55 (V. Betz, \322Architecture and CAD for Speed and Area Optimization of) 331.2 143.97 P (FPGAs,\323) 331.2 134.97 T 2 F (Ph.D. Thesis) 362.31 134.97 T 1 F (, University of Toronto, 1998.) 403.42 134.97 T ([8]) 313.2 124.97 T 0.66 (V. Betz, J. Rose and A. Marquardt,) 331.2 124.97 P 2 F 0.66 (Architecture and CAD for Deep-) 450.48 124.97 P (Submicron FPGAs) 331.2 115.97 T 1 F (, Kluwer Academic Publishers,) 391.42 115.97 T 2 F (To appear in 1999.) 493.18 115.97 T 1 F ([9]) 313.2 105.97 T -0.29 (N. Weste and K. Eshraghian,) 331.2 105.97 P 2 F -0.29 (Principles of CMOS VLSI Design, Second) 424.82 105.97 P (Edition) 331.2 96.97 T 1 F (, Addison-Wesley, 1993.) 354.76 96.97 T ([10]) 313.2 86.97 T 0.46 (V. Betz and J. Rose, \322FPGA Routing Architecture: Segmentation and) 331.2 86.97 P (Buffering to Optimize Speed and Density,\323) 331.2 77.97 T 2 F (To appear in FPGA 1999.) 471.85 77.97 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 F (T) 61.18 559.87 T (able 1: Ef) 65.42 559.87 T (fect of metal width and spacing on speed of a length 16 wire.) 96.33 559.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Switch T) 63.39 546.87 T (ype) 91.86 546.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Metal W) 109.98 546.87 T (idth \050) 137.88 546.87 T 3 F (m) 154.99 546.87 T 1 F (m\051) 159.6 546.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Metal Space \050) 174.6 546.87 T 3 F (m) 219.04 546.87 T 1 F (m\051) 223.64 546.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Relati) 240.68 546.87 T (v) 259.59 546.87 T (e Delay) 263.47 546.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (P) 76.35 525.87 T (ass) 80.68 525.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (T) 67.32 516.87 T (ransistor) 71.93 516.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (0.6 \050min\051) 124.35 534.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (0.5 \050min\051) 188.68 534.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (1) 262.4 534.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (1.2 \0502x min\051) 119.35 522.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (0.5 \050min\051) 188.68 522.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (0.86) 257.4 522.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (0.6 \050min\051) 124.35 510.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (1.1 \0502.2x min\051) 180.68 510.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (0.75) 257.4 510.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (T) 69.99 489.87 T (ri-state) 74.6 489.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (Buf) 73.06 480.87 T (fer) 84.86 480.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (0.6 \050min\051) 124.35 498.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (0.5 \050min\051) 188.68 498.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (1) 262.4 498.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (1.2 \0502x min\051) 119.35 486.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (0.5 \050min\051) 188.68 486.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (1.03) 257.4 486.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (0.6 \050min\051) 124.35 474.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (1.1 \0502.2x min\051) 180.68 474.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K (0.76) 257.4 474.87 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 59.73 553.95 59.73 470.45 2 L V 0.5 H 0 Z N 107.07 554.45 107.07 469.95 2 L V N 171.4 554.45 171.4 469.95 2 L V N 235.73 554.45 235.73 469.95 2 L V N 293.07 553.95 293.07 470.45 2 L V N 59.48 554.2 293.32 554.2 2 L V N 59.48 542.2 293.32 542.2 2 L V 2 H N 106.82 530.2 293.32 530.2 2 L V 0.5 H N 106.82 518.2 293.32 518.2 2 L V N 59.48 506.2 293.32 506.2 2 L V 2 H N 106.82 494.2 293.32 494.2 2 L V 0.5 H N 106.82 482.2 293.32 482.2 2 L V N 59.48 470.2 293.32 470.2 2 L V N 313.2 72 558 720 C 0 0 0 1 0 0 0 K 313.2 564 558 720 C 0 76 598 378 769 241.6 136.8 315 583.29 FMBEGINEPSF %%BeginDocument: /jayar/d0/vaughn/thesis/place/cicc99/grap/Tcrit_l4.eps %!PS-Adobe-2.0 EPSF-1.2 %%Title: stdin (ditroff) %%Creator: gractus.eecg:vaughn (Vaughn Betz,EECG,LP 392,1653,7662197,G,G ) %%CreationDate: Mon Nov 30 17:54:07 1998 %%For:vaughn vaughn %%Pages: 1 %%DocumentFonts: Times-Italic Times-BoldItalic Helvetica DIThacks Symbol Courier Helvetica-Bold Times-Roman Times-Bold Courier-Bold %%BoundingBox: 76 598 378 769 %%EndProlog %%Page 1 1 %! % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /nfs/relay/cs/src/transcript/lib/RCS/psdit.pro,v 1.1 93/09/07 16:24:02 ken Exp $ /$DITroff 140 dict def $DITroff begin %% Psfig additions /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end Psfig additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {0 72 11 mul translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 400 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop ditstart (psc)xT 576 1 1 xr 1(Times-Roman)xf 1 f 2(Times-Italic)xf 2 f 3(Times-Bold)xf 3 f 4(Times-BoldItalic)xf 4 f 5(Helvetica)xf 5 f 6(Helvetica-Bold)xf 6 f 7(Courier)xf 7 f 8(Courier-Bold)xf 8 f 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f xi 10 s 0 xH 0 xS 1 f 1113 1344 MXY 0 -1152 Dl 1843 0 Dl 0 1152 Dl -1843 0 Dl 1043 1525(Fraction)N 1330(of)X 1417(Tracks)X 1656(Widely)X 1912(Spaced)X 2164(\(Others)X 2425(Use)X 2570(Min.)X 2743(Spacing\))X 667 544(Critical)N 716 640(Path)N 725 736(\(ns\))N 613 832(\(20)N 740(Circuit)X 618 928(Geometric)N 637 1024(Average\))N 1226 1344 MXY 0 -57 Dl 1206 1432(0)N 1388 1344 MXY 0 -57 Dl 1338 1432(0.1)N 1550 1344 MXY 0 -57 Dl 1500 1432(0.2)N 1711 1344 MXY 0 -57 Dl 1661 1432(0.3)N 1873 1344 MXY 0 -57 Dl 1823 1432(0.4)N 2035 1344 MXY 0 -57 Dl 1985 1432(0.5)N 2196 1344 MXY 0 -57 Dl 2146 1432(0.6)N 2358 1344 MXY 0 -57 Dl 2308 1432(0.7)N 2520 1344 MXY 0 -57 Dl 2470 1432(0.8)N 2681 1344 MXY 0 -57 Dl 2631 1432(0.9)N 2843 1344 MXY 0 -57 Dl 2823 1432(1)N 1113 1273 MXY 57 0 Dl 1013 1289(39)N 1113 1129 MXY 57 0 Dl 1013 1145(40)N 1113 984 MXY 57 0 Dl 1013 1000(41)N 1113 840 MXY 57 0 Dl 1013 856(42)N 1113 696 MXY 57 0 Dl 1013 712(43)N 1113 551 MXY 57 0 Dl 1013 567(44)N 1113 406 MXY 57 0 Dl 1013 422(45)N 1113 262 MXY 57 0 Dl 1013 278(46)N 5 s 10 f 1219 333(g)N 10 s 1226 317 MXY 161 589 Dl 5 s 1381 922(g)N 10 s 1388 906 MXY 161 164 Dl 5 s 1543 1086(g)N 10 s 1550 1070 MXY 242 36 Dl 5 s 1785 1123(g)N 10 s 1792 1107 MXY 242 28 Dl 5 s 2028 1152(g)N 10 s 2035 1136 MXY 404 53 Dl 5 s 2432 1205(g)N 10 s 2439 1189 MXY 404 -33 Dl 5 s 2836 1172(g)N 1 p xt xs %%Trailer %%EOF %%EndDocument FMENDEPSF 0 0 0 1 0 0 0 K 1 8 Q 0 X 0 0 0 1 0 0 0 K (Fig. 8. Speed of a realistic FPGA vs. routing wire spacing.) 341.12 572.65 T 0 0 0 1 0 0 0 K 313.2 72 558 720 C 0 0 612 792 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "4" 4 %%Trailer %%BoundingBox: 0 0 612 792 %%PageOrder: Ascend %%Pages: 4 %%DocumentFonts: Times-Bold %%+ Times-Roman %%+ Times-Italic %%+ Symbol %%EOF