%!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 14 FMDOCUMENT 0 0 /Times-Roman FMFONTDEFINE 1 0 /Times-Bold 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 0 10 Q 0 X 0 0 0 1 0 0 0 K (1 of 12) 291.83 36.66 T 0 16 Q (Ho) 127.32 709.33 T (w Much Logic Should Go in an FPGA Logic Block?) 146.47 709.33 T 0 12 Q (V) 228.68 672 T (aughn Betz and Jonathan Rose) 236.01 672 T (Department of Electrical and Computer Engineering, Uni) 125.25 658 T (v) 400.57 658 T (ersity of T) 406.39 658 T (oronto) 455.42 658 T (T) 215.32 644 T (oronto, Ontario, Canada) 221.69 644 T (M5S 3G4) 349.67 644 T ({v) 222.55 630 T (aughn, jayar}@eecg.utoronto.ca) 234.01 630 T (\050416\051 978-1653) 268.51 616 T 1 14 Q (Abstract) 279.95 574.67 T 0 12 Q 0.27 (The logic blocks of most modern FPGAs contain clusters of look-up tables and \337ip \337ops, yet) 90 550 P 0.7 (little is kno) 72 529 P 0.7 (wn about good choices for se) 127.12 529 P 0.7 (v) 270.64 529 P 0.7 (eral k) 276.46 529 P 0.7 (e) 304.03 529 P 0.7 (y architectural parameters related to these clus-) 309.18 529 P 1.82 (ters. There are three basic questions: ho) 72 508 P 1.82 (w man) 272.92 508 P 1.82 (y look-up tables should a cluster contain, ho) 306.89 508 P 1.82 (w) 531.34 508 P 0.67 (should the \337e) 72 487 P 0.67 (xibility of FPGA routing change as the cluster size changes, and ho) 137.83 487 P 0.67 (w man) 468.17 487 P 0.67 (y inputs) 500.99 487 P -0.18 (should the programmable routing pro) 72 466 P -0.18 (vide to each cluster? W) 250.43 466 P -0.18 (e \336rst sho) 361.39 466 P -0.18 (w that logic clusters require) 407.4 466 P 0.77 (fe) 72 445 P 0.77 (wer inputs from the routing than current commercial FPGAs pro) 81.02 445 P 0.77 (vide. Secondly) 397.36 445 P 0.77 (, we sho) 468.68 445 P 0.77 (w that) 509.57 445 P -0.23 (for best area-ef) 72 424 P -0.23 (\336cienc) 143.86 424 P -0.23 (y the \337e) 175.67 424 P -0.23 (xibility of FPGA routing should be signi\336cantly reduced as the clus-) 213.68 424 P 0.72 (ter size is increased. Finally) 72 403 P 0.72 (, we \336nd that clusters containing between 1 and 8 look-up tables all) 207.74 403 P 0.28 (pro) 72 382 P 0.28 (vide reasonable area-ef) 87.82 382 P 0.28 (\336cienc) 199.34 382 P 0.28 (y) 231.16 382 P 0.28 (, as long as the number of cluster inputs and the FPGA routing) 236.38 382 P (\337e) 72 361 T (xibility are chosen appropriately) 83.82 361 T (.) 238.68 361 T 1 15 Q (1) 72 327 T (Intr) 90 327 T (oduction) 115.56 327 T 0 12 Q 0.74 (All Field-Programmable Gate Arrays \050FPGAs\051 contain both programmable logic blocks and) 90 303 P 0.38 (programmable routing. The logic block emplo) 72 282 P 0.38 (yed strongly in\337uences both the speed and density) 295.73 282 P 1.27 (of an FPGA. Since FPGAs are approximately 10 times less dense and three times slo) 72 261 P 1.27 (wer than) 497.08 261 P 1.17 (mask-programmed g) 72 240 P 1.17 (ate arrays, we are moti) 172.76 240 P 1.17 (v) 286.11 240 P 1.17 (ated to e) 291.81 240 P 1.17 (xplore ne) 334.63 240 P 1.17 (w logic blocks which help close) 380.49 240 P 0.42 (this density and speed g) 72 219 P 0.42 (ap. This paper in) 188.27 219 P 0.42 (v) 269.69 219 P 0.42 (estig) 275.51 219 P 0.42 (ates logic blocks composed of groups, or clusters,) 298.12 219 P (of look-up tables and \337ip \337ops.) 72 198 T 0.1 (Most SRAM-based FPGAs use logic blocks based on look-up tables \050LUTs\051. A look-up table) 90 177 P -0.01 (is a logic block that can implement) 72 156 P 2 F -0.01 (any) 242.91 156 P 0 F -0.01 (function of its inputs; accordingly) 263.23 156 P -0.01 (, look-up tables are nor-) 425.07 156 P -0.04 (mally described by their number of inputs. A look-up table with more inputs can implement more) 72 135 P 0.41 (logic, and hence one needs fe) 72 114 P 0.41 (wer logic blocks to implement a circuit. This sa) 215.01 114 P 0.41 (v) 446.32 114 P 0.41 (es routing area, as) 452.14 114 P 1.38 (there are fe) 72 93 P 1.38 (wer connections to route between logic blocks. Ho) 128.42 93 P 1.38 (we) 381.04 93 P 1.38 (v) 394.73 93 P 1.38 (er) 400.55 93 P 1.38 (, look-up table comple) 409.39 93 P 1.38 (xity) 521.33 93 P 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 0 10 Q 0 X 0 0 0 1 0 0 0 K (2 of 12) 291.83 36.66 T 0 12 Q -0.24 (gro) 72 712 P -0.24 (ws e) 87.7 712 P -0.24 (xponentially with the number of inputs, so it is impractical to use a LUT with a lar) 108.94 712 P -0.24 (ge num-) 500.58 712 P (ber of inputs as a logic block.) 72 691 T 0.54 (Instead of creating a lar) 90 670 P 0.54 (ger logic block by increasing the number of inputs to a LUT) 205.24 670 P 0.54 (, we can) 499.27 670 P 0.67 (simply group se) 72 649 P 0.67 (v) 149.71 649 P 0.67 (eral LUTs together and pro) 155.52 649 P 0.67 (vide local routing to interconnect them. W) 288.65 649 P 0.67 (e call the) 495.34 649 P 1.38 (resulting logic block a) 72 628 P 2 F 1.38 (lo) 187.52 628 P 1.38 (gic cluster) 196.74 628 P 0 F 1.38 ([1]. Figure 1 sho) 252.83 628 P 1.38 (ws a circuit implemented in an FPGA in) 336.67 628 P -0.26 (which each logic cluster contains tw) 72 607 P -0.26 (o four) 244.88 607 P -0.26 (-input look-up tables. Notice that man) 273.37 607 P -0.26 (y connections can) 454.54 607 P 0.41 (be made via the local interconnect within a cluster) 72 586 P 0.41 (. As this local interconnect can be made f) 315.9 586 P 0.41 (aster) 517.34 586 P 1.34 (than the general-purpose routing between logic blocks, cluster) 72 565 P 1.34 (-based logic blocks can impro) 379.71 565 P 1.34 (v) 528.85 565 P 1.34 (e) 534.67 565 P 1.33 (FPGA speeds. As well, an FPGA in which e) 72 544 P 1.33 (v) 295.03 544 P 1.33 (ery logic block contains se) 300.85 544 P 1.33 (v) 433.86 544 P 1.33 (eral LUTs will need) 439.68 544 P 1.29 (fe) 72 523 P 1.29 (wer logic blocks to implement a circuit than an FPGA in which each logic block is a single) 81.02 523 P 0.52 (LUT) 72 502 P 0.52 (. This reduces the size of the placement and routing problem considerably) 94.44 502 P 0.52 (. Since placement) 453.98 502 P 0.99 (and routing is usually the most time-consuming step in mapping a design to an FPGA, cluster) 72 481 P 0.99 (-) 536 481 P 1.65 (based logic blocks can signi\336cantly reduce design compile time. As FPGAs gro) 72 460 P 1.65 (w lar) 472.43 460 P 1.65 (ger) 498.19 460 P 1.65 (, it is) 513.03 460 P 1.87 (important to k) 72 439 P 1.87 (eep this compile time from gro) 143.63 439 P 1.87 (wing too lar) 301.01 439 P 1.87 (ge or one of the k) 362.54 439 P 1.87 (e) 456.09 439 P 1.87 (y adv) 461.24 439 P 1.87 (antages of) 489.14 439 P 72 72 540 720 C 0 0 0 1 0 0 0 K 72 72 540 421.87 C 0 0 0 1 0 0 0 K 1 12 Q 0 X 0 0 0 1 0 0 0 K (Figur) 129.8 80.7 T (e 1:) 158.25 80.7 T 0 F (Implementation of a circuit in an FPGA with a cluster size of 2.) 179.57 80.7 T 161.67 305.09 239.17 388.2 R 7 X V 0.5 H 2 Z 0 X N 179.04 354.45 221.54 382.56 R 7 X V 0 X N 178.6 311.1 221.09 339.21 R 7 X V 0 X N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 185.47 357.24 204.99 378.6 R 4 X V 0 X N 4 X 90 450 7.63 10.37 206.22 368.23 G 0 X 90 450 7.63 10.37 206.22 368.23 A 196.45 357.85 206.21 377.99 R 4 X V 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 185.47 314.53 204.99 335.88 R V 0 X N 4 X 90 450 7.63 10.37 206.22 325.51 G 0 X 90 450 7.63 10.37 206.22 325.51 A 196.45 315.14 206.21 335.27 R 4 X V 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 161.67 376.16 184.86 376.16 2 L 0 X N 161.67 370.52 184.86 370.52 2 L N 161.67 364.88 184.86 364.88 2 L N 161.67 360.29 184.86 360.29 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 162.28 327.8 185.47 327.8 2 L N 162.28 322.16 185.47 322.16 2 L N 162.28 317.58 185.47 317.58 2 L N 214.76 368.84 228.79 368.84 228.79 346.87 172.04 346.87 172.04 332.22 185.47 332.22 6 L N 214.15 324.9 239.17 324.9 2 L N 325.33 140.25 402.83 223.37 R 7 X V 0 X N 342.71 189.62 385.21 217.73 R 7 X V 0 X N 342.26 146.27 384.76 174.38 R 7 X V 0 X N 325 211.33 348.52 211.33 2 L N 325 205.68 348.52 205.68 2 L N 335.33 200.04 348.52 200.04 2 L N 335.33 195.46 348.52 195.46 2 L N 348.8 192.24 368.33 213.6 R 4 X V 0 X N 4 X 90 450 7.63 10.37 369.55 203.22 G 0 X 90 450 7.63 10.37 369.55 203.22 A 359.78 192.85 369.55 212.99 R 4 X V 377.5 203.33 403.5 203.33 2 L 0 X N 4 X 0 90 24.5 10.75 354 160.58 G 0 X 0 90 24.5 10.75 354 160.58 A 4 X 270 360 24.5 10.75 354 160.58 G 0 X 270 360 24.5 10.75 354 160.58 A 354 171.33 M 361.5 167.33 360.65 156.82 354.74 150.33 D 4 X V 0 X N 353 171.08 M 361.2 167.08 360.27 156.57 353.81 150.08 D 7 X V 357 168.83 336 168.83 2 L 0 X N 359 163.83 336 163.83 2 L N 359 158.83 325.25 158.83 2 L N 357 153.83 325 153.83 2 L N 335.5 195.33 335.5 168.83 2 L N 335.75 200.08 331.5 200.08 331.5 163.83 337 163.83 4 L N 335.5 187.83 325.25 187.83 2 L N 331.25 181.58 325.5 181.58 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 160.67 376.33 151.67 376.33 2 L 3 H N 160.67 370.83 151.67 370.83 2 L N 160.67 365.33 151.67 365.33 2 L N 160.67 359.83 151.67 359.83 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 160.67 327.83 151.67 327.83 2 L N 160.67 322.33 151.67 322.33 2 L N 160.67 316.83 151.67 316.83 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 326 305.09 403.5 388.2 R 7 X V 0.5 H 0 X N 343.38 354.45 385.88 382.56 R 7 X V 0 X N 342.93 311.1 385.43 339.21 R 7 X V 0 X N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 239.17 323.67 273.67 323.67 273.67 182 325 182 4 L 3 H 0 Z N 325 211.16 315.83 211.16 315.83 248.66 412.5 248.66 4 L N 325 204.5 304.17 204.5 304.17 275.33 411.67 275.33 4 L N 325 187.83 290 187.83 290 394.5 3 L N 161.5 140.25 239 223.37 R 7 X V 0.5 H 2 Z 0 X N 178.88 189.62 221.38 217.73 R 7 X V 0 X N 178.43 146.27 220.93 174.38 R 7 X V 0 X N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 150 274.5 258.33 274.5 258.33 158.66 325 158.66 4 L 3 H 0 Z N 325.83 153.66 248.44 153.66 248.44 244.5 149.17 244.5 4 L N 402.5 203.66 414.17 203.66 2 L N 378.33 160.33 402.5 160.33 2 L 0.5 H N 403 160.66 414.67 160.66 2 L 3 H N 410.18 329.52 409.52 326.61 400.05 331.8 410.83 332.42 4 Y 0.5 H N 410.18 329.52 409.52 326.61 400.05 331.8 410.83 332.42 4 Y V 410.42 329.46 458.33 318.67 2 L N 0 11 Q (Logic) 467.5 325.33 T (Block) 466.67 311.83 T (\050Unused\051) 460.83 299.17 T 384.06 368.01 384.98 365.18 374.2 364.78 383.13 370.84 4 Y N 384.06 368.01 384.98 365.18 374.2 364.78 383.13 370.84 4 Y V 384.3 368.09 421.67 380.33 2 L N 379.26 332.85 381.46 330.85 372.28 325.17 377.06 334.85 4 Y N 379.26 332.85 381.46 330.85 372.28 325.17 377.06 334.85 4 Y V 379.43 333.03 421.67 379.5 2 L N (4-Input) 427.5 385.33 T (Look-up) 426.67 373.5 T (T) 430.83 360.83 T (ables) 436.68 360.83 T 391.53 258.39 390.58 255.57 381.69 261.71 392.48 261.21 4 Y N 391.53 258.39 390.58 255.57 381.69 261.71 392.48 261.21 4 Y V 391.76 258.31 447.5 239.5 2 L N (Main) 455 235.33 T (\050Inter) 440 222.66 T (-Block\051) 464.21 222.66 T (Routing) 452.5 210 T 236.59 362.54 239.15 361.02 231.3 353.61 234.03 364.06 4 Y N 236.59 362.54 239.15 361.02 231.3 353.61 234.03 364.06 4 Y V 236.71 362.76 257.5 397.83 2 L N 322.02 166.52 319.92 168.62 329.36 173.86 324.13 164.41 4 Y N 322.02 166.52 319.92 168.62 329.36 173.86 324.13 164.41 4 Y V 321.85 166.34 289.17 133.66 2 L N 0 12 Q (Local) 271.67 122.83 T (Routing) 266.67 109.16 T (Local Routing) 232.5 402.83 T 0 0 0 1 0 0 0 K 72 72 540 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 0 10 Q 0 X 0 0 0 1 0 0 0 K (3 of 12) 291.83 36.66 T 0 12 Q (FPGAs, rapid prototyping and design spins, will be lost.) 72 712 T 0.79 (The area impact of grouping multiple LUTs into a logic cluster is more comple) 90 691 P 0.79 (x, and is the) 479.65 691 P 1.13 (focus of this paper) 72 670 P 1.13 (. On the one hand, grouping related LUTs together into a single logic block) 163.71 670 P 0.61 (reduces the number of connections to be routed between logic blocks, which sa) 72 649 P 0.61 (v) 459.32 649 P 0.61 (es routing area.) 465.14 649 P 0.92 (Since the general-purpose interconnect consumes most of the die area in SRAM-based FPGAs,) 72 628 P -0.28 (this is a signi\336cant area sa) 72 607 P -0.28 (vings. On the other hand, in the logic clusters we study the area required) 196.02 607 P 0.91 (by the local routing within a cluster gro) 72 586 P 0.91 (ws quadratically with cluster size. F) 267.71 586 P 0.91 (or suf) 444.71 586 P 0.91 (\336ciently lar) 472.98 586 P 0.91 (ge) 528.67 586 P 0.96 (clusters, then, the area used by this local interconnect will e) 72 565 P 0.96 (xceed the area sa) 367.38 565 P 0.96 (v) 451.65 565 P 0.96 (ed in the general) 457.47 565 P (interconnect.) 72 544 T 1.42 (W) 90 523 P 1.42 (e e) 100.37 523 P 1.42 (xplore three questions concerning the design of cluster) 115.27 523 P 1.42 (-based logic blocks. First, ho) 387.28 523 P 1.42 (w) 531.34 523 P -0.26 (man) 72 502 P -0.26 (y distinct inputs should the FPGA routing pro) 92.48 502 P -0.26 (vide to a cluster of LUTs? Reducing the number) 310.14 502 P 0.38 (of inputs to a logic block sa) 72 481 P 0.38 (v) 206.69 481 P 0.38 (es routing area, b) 212.51 481 P 0.38 (ut if the number of inputs is too lo) 296.04 481 P 0.38 (w man) 462.77 481 P 0.38 (y circuits) 495.29 481 P 0.08 (will be unable to use all the LUTs in a logic cluster) 72 460 P 0.08 (, w) 318.02 460 P 0.08 (asting area. Secondly) 332.64 460 P 0.08 (, ho) 434.33 460 P 0.08 (w should the rout-) 452.11 460 P -0.07 (ing architecture of an FPGA be altered as the number of LUTs in a logic cluster changes? Finally) 72 439 P -0.07 (,) 537 439 P 1.46 (ho) 72 418 P 1.46 (w man) 83.7 418 P 1.46 (y LUTs should be included in a cluster to create the most area-ef) 117.31 418 P 1.46 (\336cient logic block?) 445.09 418 P 2.15 (Recent FPGAs from Xilinx, Altera, Lucent T) 72 397 P 2.15 (echnologies and Actel ha) 301.38 397 P 2.15 (v) 428.57 397 P 2.15 (e all grouped se) 434.39 397 P 2.15 (v) 516.19 397 P 2.15 (eral) 522.01 397 P 1.21 (LUTs together into logic clusters, b) 72 376 P 1.21 (ut there has been little published w) 248.47 376 P 1.21 (ork in) 422.94 376 P 1.21 (v) 452 376 P 1.21 (estig) 457.82 376 P 1.21 (ating an) 480.43 376 P 1.21 (y of) 519.79 376 P (these three questions.) 72 355 T 1 15 Q (2) 72 321 T (Cluster) 90 321 T (-Based Logic Blocks) 136.93 321 T 0 12 Q -0.08 (The logic blocks of most SRAM-based FPGAs are based on look-up tables. Pre) 90 297 P -0.08 (vious research) 471.1 297 P -0.05 ([2] has sho) 72 276 P -0.05 (wn that a 4-input look-up table \0504-LUT\051 is the most area-ef) 124.26 276 P -0.05 (\336cient LUT) 407.42 276 P -0.05 (, and most com-) 462.82 276 P (mercial FPGAs use LUTs of this size, so all the logic clusters we study are groups of 4-LUTs.) 72 255 T 1.46 (While a 4-LUT enables FPGAs to perform combinational functions, we cannot implement) 90 234 P 0.35 (sequential circuits unless our logic blocks also contain \337ip \337ops. Figure 2 sho) 72 213 P 0.35 (ws ho) 448.25 213 P 0.35 (w most com-) 476.63 213 P 0.12 (mercial FPGAs combine a LUT and a \337ip \337op to create a logic block that can perform both com-) 72 192 P 1.34 (binational and sequential functions. W) 72 171 P 1.34 (e call the structure in Figure 2 a) 261.39 171 P 2 F 1.34 (basic lo) 427.44 171 P 1.34 (gic element) 466.33 171 P 0 F 1.34 (, or) 522.66 171 P (BLE.) 72 150 T 0.54 (A complete logic block consists of se) 90 129 P 0.54 (v) 272.25 129 P 0.54 (eral BLEs, plus the local routing required to intercon-) 278.07 129 P -0.08 (nect them, as sho) 72 108 P -0.08 (wn in Figure 3. W) 154.11 108 P -0.08 (e call the entire logic block a) 240.47 108 P 2 F -0.08 (lo) 381.52 108 P -0.08 (gic cluster) 390.74 108 P 0 F -0.08 (. W) 440.33 108 P -0.08 (e describe a logic) 456.61 108 P 0.32 (cluster with tw) 72 87 P 0.32 (o parameters, N and I. N is the number of BLEs per cluster) 143.84 87 P 0.32 (, while I is the number) 430.43 87 P 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 0 10 Q 0 X 0 0 0 1 0 0 0 K (4 of 12) 291.83 36.66 T 0 12 Q -0.23 (of inputs to the cluster) 72 613.86 P -0.23 (. As Figure 3 sho) 177.76 613.86 P -0.23 (ws, not all of the LUT inputs \050of which there are 4 x N\051 are) 258.89 613.86 P 0.5 (accessible from outside the logic cluster) 72 592.86 P 0.5 (. Instead, only I e) 266.12 592.86 P 0.5 (xternal inputs are pro) 351.23 592.86 P 0.5 (vided to the logic) 454.85 592.86 P 0 (cluster -- multiple) 72 571.86 P 0 (x) 157.82 571.86 P 0 (ers within the logic block allo) 163.64 571.86 P 0 (w arbitrary connections of these cluster inputs to) 306.35 571.86 P -0.12 (the BLE inputs. The same multiple) 72 550.86 P -0.12 (x) 239.21 550.86 P -0.12 (ers also connect to each of the BLE outputs, allo) 245.02 550.86 P -0.12 (wing the out-) 476.25 550.86 P 0.3 (put of an) 72 529.86 P 0.3 (y BLE within the cluster to be connected to an) 115.09 529.86 P 0.3 (y of the BLE inputs. All N outputs of the) 340.61 529.86 P (logic cluster can also be connected to the main FPGA routing for use by other logic clusters.) 72 508.86 T 0.18 (Notice that each of the BLE inputs can be connected to an) 90 487.86 P 0.18 (y of the cluster inputs or an) 370.75 487.86 P 0.18 (y of the) 502.98 487.86 P 1.11 (BLE outputs. W) 72 466.86 P 1.11 (e therefore call these logic clusters) 151.6 466.86 P 2 F 1.11 (fully connected) 327.56 466.86 P 0 F 1.11 (. It is simpler to write CAD) 401.66 466.86 P 0.31 (tools for fully-connected logic clusters than it is to write tools for clusters with less \337e) 72 445.86 P 0.31 (xible local) 489.37 445.86 P -0.08 (interconnect. F) 72 424.86 P -0.08 (or e) 143.73 424.86 P -0.08 (xample, determining if a group of BLEs can be implemented in a single cluster) 161.79 424.86 P 0.77 (is simple -- if the BLEs need no more distinct inputs than the number of cluster inputs \050I\051, the) 72 403.86 P 0.77 (y) 534 403.86 P -0.29 (can all go in one cluster) 72 382.86 P -0.29 (. As well, in a fully-connected logic cluster all the cluster inputs and all the) 184.18 382.86 P -0.01 (cluster outputs are) 72 361.86 P 2 F -0.01 (lo) 162.95 361.86 P -0.01 (gically-equivalent) 172.17 361.86 P 0 F -0.01 (. That is, all of the inputs are functionally identical, and all) 258.82 361.86 P 72 72 540 720 C 0 0 0 1 0 0 0 K 72 621.86 540 720 C 0 0 0 1 0 0 0 K 205.4 667.93 250.4 712.93 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 0 Z 0 X N 198.04 706.5 198.04 708.63 204.59 706.5 198.04 704.38 4 Y N 198.04 706.5 198.04 708.63 204.59 706.5 198.04 704.38 4 Y V 186.11 706.5 197.79 706.5 2 L 2 Z N 198.04 695.79 198.04 697.92 204.59 695.79 198.04 693.66 4 Y 0 Z N 198.04 695.79 198.04 697.92 204.59 695.79 198.04 693.66 4 Y V 186.11 695.79 197.79 695.79 2 L 2 Z N 198.04 685.07 198.04 687.2 204.59 685.07 198.04 682.95 4 Y 0 Z N 198.04 685.07 198.04 687.2 204.59 685.07 198.04 682.95 4 Y V 186.11 685.07 197.79 685.07 2 L 2 Z N 198.04 674.36 198.04 676.49 204.59 674.36 198.04 672.23 4 Y 0 Z N 198.04 674.36 198.04 676.49 204.59 674.36 198.04 672.23 4 Y V 186.11 674.36 197.79 674.36 2 L 2 Z N 250.55 693.65 314.43 693.65 2 L N 279.9 693.65 279.9 714 376.33 714 376.33 699.81 389.18 699.81 5 L N 315.25 671.48 347.47 702.79 R 0 Z N 315.25 681.84 321.68 677.55 315.25 673.27 3 L 2 Z N 308.07 677.55 308.07 679.68 314.62 677.55 308.07 675.42 4 Y 0 Z N 308.07 677.55 308.07 679.68 314.62 677.55 308.07 675.42 4 Y V 307.82 677.55 297.57 677.55 2 L 2 Z N 348.12 687.93 389.36 687.93 2 L N 389.96 712.34 389.96 676.03 402.46 683.76 402.46 703.41 4 Y 0 Z N 411.17 692.69 411.17 694.82 417.72 692.69 411.17 690.56 4 Y N 411.17 692.69 411.17 694.82 417.72 692.69 411.17 690.56 4 Y V 402.46 692.69 410.92 692.69 2 L 2 Z N 0 11 Q (Inputs) 154.79 689.77 T (4-input) 213.75 695.21 T (LUT) 219.19 681.6 T (Clock) 269.08 675.25 T (D FF) 320.79 687.95 T (Out) 422.38 689.77 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 12 Q (Figur) 215.46 643.17 T (e 2:) 243.91 643.17 T 0 F (Basic Logic Element \050BLE\051) 265.23 643.17 T 0 0 0 1 0 0 0 K 72 72 540 720 C 0 0 612 792 C 72 72 540 720 C 72.25 72 539.75 344.83 C 0 0 0 1 0 0 0 K 242.31 314.3 242.31 296.5 250.31 300.3 250.31 309.92 4 Y 7 X 0 0 0 1 0 0 0 K V 0.5 H 0 Z 0 X N 213.75 310.58 213.75 152.74 2 L 1.5 H N 213.5 310.12 242.77 310.12 2 L N 299.69 252.98 347.77 301.96 R 0.5 H N 0 11 Q (BLE) 313.3 281.94 T 229.85 320.2 229.85 144.13 2 L 1.5 H N 229.17 301.96 242.77 301.96 2 L N 242.31 294.64 242.31 276.85 250.31 280.64 250.31 290.27 4 Y 7 X V 0.5 H 0 X N 214.65 290.47 242.77 290.47 2 L 1.5 H N 229.17 282.31 242.77 282.31 2 L N 242.31 274.99 242.31 257.2 250.31 260.99 250.31 270.61 4 Y 7 X V 0.5 H 0 X N 214.65 270.82 242.77 270.82 2 L 1.5 H N 229.17 262.65 242.77 262.65 2 L N 242.31 255.34 242.31 237.54 250.31 241.33 250.31 250.96 4 Y 7 X V 0.5 H 0 X N 214.65 251.16 242.77 251.16 2 L 1.5 H N 229.17 243 242.77 243 2 L N 308.51 253.81 312.79 260.24 317.08 253.81 3 L 0.5 H 2 Z N 251.62 305.59 275.2 305.59 275.2 294.7 299.69 294.7 4 L 0 Z N 250.71 285.63 269.08 285.63 269.08 282 299.69 282 4 L N 250.71 265.68 268.85 265.68 268.85 270.21 299.69 270.21 4 L N 250.71 246.63 275.2 246.63 275.2 260.23 299.69 260.23 4 L N 300.6 152.29 348.68 201.27 R N (BLE) 314.21 180.34 T 309.42 153.12 313.7 159.55 317.99 153.12 3 L 2 Z N 1 F (. . .) 0 -270 312.39 222.08 TF (. . .) 0 -270 247.99 219.36 TF 347.77 277.47 397.66 277.47 2 L 0 Z N 348.68 175.88 397.66 175.88 2 L N 397.66 320.25 397.66 175.75 2 L 1.5 H N 397.66 320.1 229.75 320.1 2 L N 403.1 261.14 390.4 252.07 2 L 0.5 H N (N) 406.73 256.55 T 242.31 216.33 242.31 198.54 250.31 202.33 250.31 211.96 4 Y 7 X V 0 X N 214.65 212.16 242.77 212.16 2 L 1.5 H N 229.17 203.99 242.77 203.99 2 L N 242.31 196.68 242.31 178.88 250.31 182.67 250.31 192.3 4 Y 7 X V 0.5 H 0 X N 214.65 192.5 242.77 192.5 2 L 1.5 H N 229.17 184.34 242.77 184.34 2 L N 242.31 177.02 242.31 159.23 250.31 163.02 250.31 172.65 4 Y 7 X V 0.5 H 0 X N 214.65 172.85 242.77 172.85 2 L 1.5 H N 229.17 164.69 242.77 164.69 2 L N 242.31 157.37 242.31 139.58 250.31 143.37 250.31 152.99 4 Y 7 X V 0.5 H 0 X N 214.65 153.2 242.77 153.2 2 L 1.5 H N 229.17 145.03 242.77 145.03 2 L N 251.62 207.62 275.2 207.62 275.2 196.74 299.69 196.74 4 L 0.5 H N 250.71 187.67 269.08 187.67 269.08 184.04 299.69 184.04 4 L N 250.71 167.71 268.85 167.71 268.85 172.25 299.69 172.25 4 L N 250.71 148.66 275.2 148.66 275.2 162.27 299.69 162.27 4 L N (N) 327.81 230.24 T (BLEs) 321.46 215.73 T 312.39 252.98 312.39 247.53 289.72 247.53 289.72 127.8 181.65 127.8 5 L N 314.21 151.38 314.21 137.78 289.72 137.78 3 L N 90 450 0.75 0.75 427.01 229.39 G 427.76 229.39 427.76 232.22 432.65 229.39 427.76 226.57 4 Y 1.5 H N 427.76 229.39 427.76 232.22 432.65 229.39 427.76 226.57 4 Y V 397.66 229.39 427.01 229.39 2 L N (N) 445.44 229.34 T 0 F (Outputs) 433.65 217.53 T (Clock) 150.74 125.01 T 216.47 153.2 180.82 153.2 2 L N 1 F (I) 161.56 156.01 T 0 F (Inputs) 149.77 144.21 T 220.1 233.02 207.4 224.86 2 L 0.5 H N 1 F (I) 200.14 222.08 T 0 F (Logic cluster) 277.95 104.72 T 88.47 76.27 515.66 85.6 R 7 X V 1 12 Q 0 X (Figur) 221.69 77.6 T (e 3:) 250.14 77.6 T 0 F (Logic cluster structure.) 271.46 77.6 T 0 11 Q (#1) 316.02 270.15 T (#N) 316.93 167.64 T J 192.49 327.87 419.15 327.87 419.15 122.87 192.49 122.87 4 Y J 192.49 323.87 192.49 327.87 196.49 327.87 3 L N [8.099 6.074] 8.099 I 196.49 327.87 415.15 327.87 2 L N J 415.15 327.87 419.15 327.87 419.15 323.87 3 L N [7.802 5.852] 7.802 I 419.15 323.87 419.15 126.87 2 L N J 419.15 126.87 419.15 122.87 415.15 122.87 3 L N [8.099 6.074] 8.099 I 415.15 122.87 196.49 122.87 2 L N J 196.49 122.87 192.49 122.87 192.49 126.87 3 L N [7.802 5.852] 7.802 I 192.49 126.87 192.49 323.86 2 L N J 470.49 155.7 487.15 172.37 R N 510.15 155.7 526.82 172.37 R N 470.49 114.37 487.15 131.03 R N 510.15 114.37 526.82 131.03 R N 492.49 171.87 492.49 112.7 2 L N 498.4 171.87 498.4 112.7 2 L N 504.32 171.87 504.32 112.7 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 470.15 137.53 529.32 137.53 2 L N 470.15 143.45 529.32 143.45 2 L N 470.15 149.37 529.32 149.37 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K J 432.07 152.9 431.86 149.93 421.73 153.64 432.28 155.86 4 Y N 432.07 152.9 431.86 149.93 421.73 153.64 432.28 155.86 4 Y V [8.458 6.344] 4.229 I 479.99 122.87 M 470.1 144.33 450.99 151.54 432.32 152.88 D N 0 0 0 1 0 0 0 K J 0 0 0 1 0 0 0 K (FPGA) 485.08 99.34 T 0 0 0 1 0 0 0 K 72 72 540 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 %%Page: "5" 5 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 10 Q 0 X 0 0 0 1 0 0 0 K (5 of 12) 291.83 36.66 T 0 12 Q -0.21 (of the outputs are functionally identical. This means that a net which is an input to a cluster can be) 72 712 P 0.66 (connected to) 72 691 P 2 F 0.66 (any) 137.31 691 P 0 F 0.66 ( of the cluster inputs, and a net which is dri) 154.63 691 P 0.66 (v) 367.92 691 P 0.66 (en by a cluster output can be con-) 373.74 691 P 0.68 (nected to) 72 670 P 2 F 0.68 (any) 120.01 670 P 0 F 0.68 ( of the cluster outputs. Therefore the router has a great deal of \337e) 137.34 670 P 0.68 (xibility in ho) 457.91 670 P 0.68 (w it) 520.98 670 P 0.91 (routes inter) 72 649 P 0.91 (-cluster nets. The logic block cluster used in the Altera 8K and 10K FPGAs is fully) 127 649 P (connected, and the logic block cluster used in the Xilinx 5200 FPGA is nearly fully connected.) 72 628 T 0.75 (While a strictly hierarchical FPGA w) 90 607 P 0.75 (as in) 272.58 607 P 0.75 (v) 295.17 607 P 0.75 (estig) 300.99 607 P 0.75 (ated in [3], to our kno) 323.6 607 P 0.75 (wledge this is the \336rst) 431.68 607 P 1.41 (w) 72 586 P 1.41 (ork to in) 80.54 586 P 1.41 (v) 123.56 586 P 1.41 (estig) 129.38 586 P 1.41 (ate the use of logic blocks with a tw) 151.99 586 P 1.41 (o-le) 335.84 586 P 1.41 (v) 354.2 586 P 1.41 (el hierarch) 360.02 586 P 1.41 (y within an otherwise \337at) 412.35 586 P (FPGA architecture.) 72 565 T 1 15 Q (3) 72 531 T (Experimental Methodology) 90 531 T 0 12 Q 1.79 (Our goal is to determine the cluster parameters that lead to the most area-ef) 90 507 P 1.79 (\336cient FPGA) 474.54 507 P 1.33 (architecture. There are no detailed analytic models of FPGA architectures and circuitry) 72 486 P 1.33 (, so we) 503.69 486 P (must e) 72 465 T (v) 103.37 465 T (aluate architectures e) 109.07 465 T (xperimentally) 210.18 465 T (.) 276.06 465 T -0.19 (W) 90 444 P -0.19 (e implement a set of twenty benchmark circuits into each FPGA architecture of interest, and) 100.37 444 P -0.12 (measure ho) 72 423 P -0.12 (w much area the circuits require in each architecture. W) 126.57 423 P -0.12 (e implement each circuit using) 393.15 423 P 0.49 (an automatic CAD \337o) 72 402 P 0.49 (w similar to that used by typical FPGA users: technology-mapping, place-) 178.82 402 P 0.84 (ment and routing. W) 72 381 P 0.84 (e took considerable care to ensure that the CAD tools were of high quality) 172.87 381 P 0.61 (and fully e) 72 360 P 0.61 (xploited each FPGA architecture, as lo) 124.36 360 P 0.61 (w-quality tools, or tools that f) 313.05 360 P 0.61 (a) 458.63 360 P 0.61 (v) 463.72 360 P 0.61 (or some archi-) 469.48 360 P 1.31 (tectures, can lead to inaccurate conclusions. The benchmark circuits used are 20 of the lar) 72 339 P 1.31 (gest) 520.67 339 P 0.52 (MCNC circuits [4]; the) 72 318 P 0.52 (y range in size from 500 to 3690 BLEs. These circuit sizes are typical of) 185.05 318 P (the designs being implemented in current commercial FPGAs.) 72 297 T 1 F (3.1) 72 266 T (FPGA Ar) 90 266 T (chitectur) 139.44 266 T (e Assumptions) 185.21 266 T 0 F 0.1 (The area-ef) 90 244 P 0.1 (\336cienc) 144.76 244 P 0.1 (y of a logic block depends not only on the number of transistors required to) 176.58 244 P 1.16 (implement the logic block itself, b) 72 223 P 1.16 (ut also on the number of transistors required to route all the) 242.24 223 P 1.65 (connections between blocks. Consequently) 72 202 P 1.65 (, we must choose an FPGA routing architecture, as) 282.82 202 P 0.7 (well as a logic block architecture, in order to determine the area-ef) 72 181 P 0.7 (\336cienc) 398.67 181 P 0.7 (y of an FPGA. All the) 430.49 181 P 1.65 (e) 72 160 P 1.65 (xperiments in this w) 77.15 160 P 1.65 (ork assume an island-style FPGA; both Xilinx and Lucent T) 179.65 160 P 1.65 (echnologies) 482.68 160 P 0.32 (FPGAs emplo) 72 139 P 0.32 (y this type of architecture. As sho) 140.54 139 P 0.32 (wn in Figure 4, an island-style FPGA consists of) 303.79 139 P 0.66 (an array of logic blocks surrounded by channels of wire se) 72 118 P 0.66 (gments. The input and output pins of) 359.03 118 P -0.11 (each logic block are distrib) 72 97 P -0.11 (uted around its perimeter) 201.3 97 P -0.11 (, and programmable switches are used to con-) 320.81 97 P 0.05 (nect these pins to wire se) 72 76 P 0.05 (gments in the adjacent routing channels. At e) 192.38 76 P 0.05 (v) 409.05 76 P 0.05 (ery intersection of routing) 414.87 76 P 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "5" 5 %%Page: "6" 6 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 10 Q 0 X 0 0 0 1 0 0 0 K (6 of 12) 291.83 36.66 T 0 12 Q 0.31 (channels, there is a switch block [5], which is a set of programmable switches that allo) 72 451.22 P 0.31 (ws wiring) 492.02 451.22 P (se) 72 430.22 T (gments to be connected together in order to form longer connections.) 81.82 430.22 T 0.82 (T) 90 409.22 P 0.82 (o be as realistic as possible, we set the number of wiring se) 96.37 409.22 P 0.82 (gments to which each se) 389.6 409.22 P 0.82 (gment) 510 409.22 P 1.4 (can be connected at a switch block, F) 72 388.22 P 0 9.6 Q 1.12 (s) 261.1 385.22 P 0 12 Q 1.4 ( [5], to 3, as this is the v) 264.84 388.22 P 1.4 (alue used in most commercial) 391.08 388.22 P 0.33 (FPGAs. There are tw) 72 367.22 P 0.33 (o other important architectural parameters to which we will refer in the fol-) 174.84 367.22 P 0.64 (lo) 72 346.22 P 0.64 (wing sections. W) 81.04 346.22 P 0.64 (e de\336ne W to be the number of wiring se) 164.34 346.22 P 0.64 (gments in each routing channel, i.e.) 366.18 346.22 P -0.14 (the channel capacity) 72 325.22 P -0.14 (. W) 168.9 325.22 P -0.14 (e de\336ne F) 185.12 325.22 P 0 9.6 Q -0.12 (c) 232.16 322.22 P 0 12 Q -0.14 ( [5] to be the number of wiring se) 236.43 325.22 P -0.14 (gments to which a logic block) 396.4 325.22 P (input or output pin can connect in an adjacent channel. In Figure 4, for e) 72 304.22 T (xample, W is four and F) 419.09 304.22 T 0 9.6 Q (c) 535.74 301.22 T 0 12 Q (is tw) 72 283.22 T (o.) 94.88 283.22 T 1 13 Q (3.2) 72 250.55 T (CAD Flo) 90 250.55 T (w) 139.34 250.55 T 0 12 Q 0.06 (Figure 5 illustrates the CAD \337o) 90 226.22 P 0.06 (w used in these e) 241.65 226.22 P 0.06 (xperiments. First, the SIS [6] synthesis pack-) 323.68 226.22 P 1.36 (age is used to perform technology-independent logic optimization of each circuit. That is, SIS) 72 205.22 P 0.95 (attempts to simplify the logic and remo) 72 184.22 P 0.95 (v) 266.2 184.22 P 0.95 (e redundant circuitry) 272.02 184.22 P 0.95 (. Ne) 373.12 184.22 P 0.95 (xt, each circuit is technology-) 393.88 184.22 P -0.01 (mapped into 4-LUTs and \337ip \337ops by Flo) 72 163.22 P -0.01 (wMap [7]. In other w) 271.98 163.22 P -0.01 (ords, Flo) 374.8 163.22 P -0.01 (wMap tak) 417.17 163.22 P -0.01 (es a description) 465.36 163.22 P -0.24 (of a circuit in terms of basic g) 72 142.22 P -0.24 (ates and implements it using only 4-LUTs and \337ip \337ops, as these are) 213.9 142.22 P 1 (the only logic resources a) 72 121.22 P 1 (v) 198.39 121.22 P 1 (ailable in the FPGAs we study) 204.09 121.22 P 1 (. Our VP) 354.63 121.22 P 1 (A) 398.51 121.22 P 1 (CK program [1] then maps) 406.7 121.22 P -0.05 (this netlist of 4-LUTs and \337ip \337ops into logic clusters with the speci\336ed v) 72 100.22 P -0.05 (alues of N and I. At this) 425.34 100.22 P 0.78 (point, then, the circuit is described as a set of interconnected logic blocks of the e) 72 79.22 P 0.78 (xact type that) 473.78 79.22 P 72 72 540 720 C 0 0 0 1 0 0 0 K 72 459.22 540 720 C 0 0 0 1 0 0 0 K 207.86 655.35 251.43 698.93 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N 202.86 668.21 207.86 673.21 R V N 233.71 650.21 238.71 655.21 R V N 251.57 680.21 256.57 685.21 R V N 219.57 699.35 224.57 704.35 R V N 268.57 710.93 268.57 644.97 2 L 1.5 H N 277.76 710.93 277.76 644.97 2 L N 286.95 710.93 286.95 644.97 2 L N 296.14 710.93 296.14 644.97 2 L N 198.21 612 262.5 612 2 L N 198.21 621.19 262.5 621.19 2 L N 198.21 630.38 262.5 630.38 2 L N 198.21 639.57 262.5 639.57 2 L N 262.86 606.35 302.14 645.64 R 5 X V 0.5 H 0 X N 256.43 682.07 287.14 682.07 2 L N 265.5 684.71 271.21 679 2 L N 265.5 679 271.21 684.71 2 L N 284.5 684.71 290.21 679 2 L N 284.5 679 290.21 684.71 2 L N 239.21 623.71 233.5 618 2 L N 233.5 623.71 239.21 618 2 L N 239.21 642.71 233.5 637 2 L N 233.5 642.71 239.21 637 2 L N 236.07 651 236.07 620.5 2 L N 312.86 655.35 356.43 698.93 R 7 X V 0 X N 307.86 668.21 312.86 673.21 R V N 338.71 650.21 343.71 655.21 R V N 356.57 680.21 361.57 685.21 R V N 324.57 699.35 329.57 704.35 R V N 303.21 612 367.5 612 2 L 1.5 H N 303.21 621.19 367.5 621.19 2 L N 303.21 630.38 367.5 630.38 2 L N 303.21 639.57 367.5 639.57 2 L N 367.86 606.35 407.14 645.64 R 5 X V 0.5 H 0 X N 361.43 682.07 392.14 682.07 2 L N 370.5 684.71 376.21 679 2 L N 370.5 679 376.21 684.71 2 L N 389.5 684.71 395.21 679 2 L N 389.5 679 395.21 684.71 2 L N 344.21 623.71 338.5 618 2 L N 338.5 623.71 344.21 618 2 L N 344.21 642.71 338.5 637 2 L N 338.5 642.71 344.21 637 2 L N 341.07 651 341.07 620.5 2 L N 274.5 673.71 280.21 668 2 L N 274.5 668 280.21 673.71 2 L N 293.5 673.71 299.21 668 2 L N 293.5 668 299.21 673.71 2 L N 308.57 670.5 277.07 670.5 2 L N 207.86 550.21 251.43 593.78 R 7 X V 0 X N 202.86 563.07 207.86 568.07 R V N 233.71 545.07 238.71 550.07 R V N 251.57 575.07 256.57 580.07 R V N 219.57 594.21 224.57 599.21 R V N 268.57 604.95 268.57 541.5 2 L 1.5 H N 277.76 604.95 277.76 541.5 2 L N 286.95 604.95 286.95 541.5 2 L N 296.14 604.95 296.14 541.5 2 L N 198.21 506.85 262.5 506.85 2 L N 198.21 516.05 262.5 516.05 2 L N 198.21 525.23 262.5 525.23 2 L N 198.21 534.43 262.5 534.43 2 L N 262.86 501.21 302.14 540.5 R 5 X V 0.5 H 0 X N 256.43 576.93 287.14 576.93 2 L N 265.5 579.57 271.21 573.86 2 L N 265.5 573.86 271.21 579.57 2 L N 284.5 579.57 290.21 573.86 2 L N 284.5 573.86 290.21 579.57 2 L N 239.21 518.57 233.5 512.86 2 L N 233.5 518.57 239.21 512.86 2 L N 239.21 537.57 233.5 531.86 2 L N 233.5 537.57 239.21 531.86 2 L N 236.07 545.86 236.07 515.36 2 L N 312.86 550.21 356.43 593.78 R 7 X V 0 X N 307.86 563.07 312.86 568.07 R V N 338.71 545.07 343.71 550.07 R V N 356.57 575.07 361.57 580.07 R V N 324.57 594.21 329.57 599.21 R V N 303.21 506.85 367.5 506.85 2 L 1.5 H N 303.21 516.05 367.5 516.05 2 L N 303.21 525.23 367.5 525.23 2 L N 303.21 534.43 367.5 534.43 2 L N 367.86 501.21 407.14 540.5 R 5 X V 0.5 H 0 X N 361.43 576.93 392.14 576.93 2 L N 370.5 579.57 376.21 573.86 2 L N 370.5 573.86 376.21 579.57 2 L N 389.5 579.57 395.21 573.86 2 L N 389.5 573.86 395.21 579.57 2 L N 344.21 518.57 338.5 512.86 2 L N 338.5 518.57 344.21 512.86 2 L N 344.21 537.57 338.5 531.86 2 L N 338.5 537.57 344.21 531.86 2 L N 341.07 545.86 341.07 515.36 2 L N 274.5 568.57 280.21 562.86 2 L N 274.5 562.86 280.21 568.57 2 L N 293.5 568.57 299.21 562.86 2 L N 293.5 562.86 299.21 568.57 2 L N 308.57 565.36 277.07 565.36 2 L N 224.71 627.64 219 633.36 2 L N 219 627.64 224.71 633.36 2 L N 224.71 609.14 219 614.86 2 L N 219 609.14 224.71 614.86 2 L N 221.82 596.57 221.82 630.86 2 L N 329.71 627.64 324 633.36 2 L N 324 627.64 329.71 633.36 2 L N 329.71 609.14 324 614.86 2 L N 324 609.14 329.71 614.86 2 L N 326.82 596.57 326.82 630.86 2 L N 399.73 622.85 398.81 620.02 389.86 626.05 400.65 625.68 4 Y 0 Z N 399.73 622.85 398.81 620.02 389.86 626.05 400.65 625.68 4 Y V 399.97 622.77 444 608.48 2 L 2 Z N 0 11 Q (Switch) 449 607.05 T (Block) 451.14 595.5 T 394.44 556.89 393.36 554.12 384.77 560.67 395.52 559.67 4 Y 0 Z N 394.44 556.89 393.36 554.12 384.77 560.67 395.52 559.67 4 Y V 394.68 556.8 428.33 543.67 2 L 2 Z N (W) 434.17 542.19 T (ire) 444.11 542.19 T (Se) 425.95 531.47 T (gments) 436.79 531.47 T (Logic) 137.14 691 T (Block) 137.02 677.9 T 214.56 680.22 215.02 683.16 224.82 678.64 214.11 677.28 4 Y 0 Z N 214.56 680.22 215.02 683.16 224.82 678.64 214.11 677.28 4 Y V 214.32 680.26 165.71 687.78 2 L 2 Z N 208.61 624.62 207.21 627.25 217.77 629.5 210.01 622 4 Y 0 Z N 208.61 624.62 207.21 627.25 217.77 629.5 210.01 622 4 Y V 208.39 624.51 174.29 606.35 2 L 2 Z N (Potential) 133.57 597.78 T (Connection) 128.57 586.78 T (Point) 139.29 574.95 T 1 12 Q (Figur) 226.35 477.64 T (e 4:) 254.8 477.64 T 0 F (An island-style FPGA.) 276.13 477.64 T 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 374.41 711.26 374.41 645.31 2 L 1.5 H N 383.6 711.26 383.6 645.31 2 L N 392.79 711.26 392.79 645.31 2 L N 401.98 711.26 401.98 645.31 2 L N 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 373.24 604.93 373.24 540.64 2 L N 382.43 604.93 382.43 540.64 2 L N 391.62 604.93 391.62 540.64 2 L N 400.81 604.93 400.81 540.64 2 L N 0 0 0 1 0 0 0 K 72 72 540 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: "6" 6 %%Page: "7" 7 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 10 Q 0 X 0 0 0 1 0 0 0 K (7 of 12) 291.83 36.66 T 0 12 Q 1.45 (e) 72 438.35 P 1.45 (xist in the FPGA we\325) 77.15 438.35 P 1.45 (re tar) 184.33 438.35 P 1.45 (geting. Finally) 210.55 438.35 P 1.45 (, the VPR placement and routing tool [8] is used to) 281.22 438.35 P 0.31 (place and route the circuit. Placement consists of choosing a position for each logic block within) 72 417.35 P 0.23 (the FPGA so that the length of the wires needed to interconnect the circuitry is minimized, while) 72 396.35 P (routing consists of choosing which wires within the FPGA will be used to mak) 72 375.35 T (e each connection.) 450.2 375.35 T -0.12 (As Figure 5 sho) 90 354.35 P -0.12 (ws, the circuit is repeatedly routed with dif) 165.67 354.35 P -0.12 (ferent channel capacities until VPR) 370.51 354.35 P 0.88 (\336nds the minimum number of wire se) 72 333.35 P 0.88 (gments per channel required to successfully route the cir-) 257.73 333.35 P -0.16 (cuit. At this point we ha) 72 312.35 P -0.16 (v) 186.29 312.35 P -0.16 (e enough information to use our area model to e) 192.11 312.35 P -0.16 (v) 420.66 312.35 P -0.16 (aluate the architecture\325) 426.36 312.35 P -0.16 (s) 535.33 312.35 P (area-ef) 72 291.35 T (\336cienc) 105 291.35 T (y) 136.81 291.35 T (.) 142.03 291.35 T 1 13 Q (3.3) 72 258.68 T (Ar) 90 258.68 T (ea Model) 104.92 258.68 T 0 12 Q 1.16 (The area model is based on counting the number of minimum-width transistors required to) 90 234.35 P 0.49 (implement a benchmark circuit in each FPGA architecture \050lar) 72 213.35 P 0.49 (ger transistors are counted as se) 375.59 213.35 P 0.49 (v-) 530 213.35 P 0.05 (eral minimum width transistors\051. T) 72 192.35 P 0.05 (o allo) 238.91 192.35 P 0.05 (w a) 265.66 192.35 P 0.05 (v) 282.46 192.35 P 0.05 (eraging of results from circuits of dif) 288.29 192.35 P 0.05 (ferent sizes, we) 465.59 192.35 P -0.02 (use a normalized area metric: number of transistors used per BLE in a circuit. W) 72 171.35 P -0.02 (e ha) 457.64 171.35 P -0.02 (v) 477.03 171.35 P -0.02 (e de) 482.85 171.35 P -0.02 (v) 502.19 171.35 P -0.02 (eloped) 508.01 171.35 P -0.11 (a detailed model of the number of transistors required to implement both logic clusters and FPGA) 72 150.35 P 0.05 (routing in an SRAM-based FPGA [9]. This model tries to b) 72 129.35 P 0.05 (uild an FPGA using as fe) 357.98 129.35 P 0.05 (w transistors) 478.95 129.35 P (as possible without unduly compromising speed.) 72 108.35 T 72 72 540 720 C 0 0 0 1 0 0 0 K 119.02 446.35 492.98 720 C 0 0 0 1 0 0 0 K 223.74 666.78 413.84 694.35 R 0.5 H 0 Z 0 X 0 0 0 1 0 0 0 K N 267.77 610.41 370.41 623.48 R N 269.33 579.78 371.24 594.27 R N 318.12 564 288.69 540.19 317.49 516.88 346.86 540.65 4 Y N 316.83 601.85 318.95 601.85 316.83 595.3 314.7 601.85 4 Y N 316.83 601.85 318.95 601.85 316.83 595.3 314.7 601.85 4 Y V 316.83 610.13 316.83 602.1 2 L 2 Z N 317.7 570.54 319.83 570.54 317.7 563.99 315.57 570.54 4 Y 0 Z N 317.7 570.54 319.83 570.54 317.7 563.99 315.57 570.54 4 Y V 317.7 579.79 317.7 570.79 2 L 2 Z N 317.64 508.12 319.76 508.12 317.64 501.57 315.51 508.12 4 Y 0 Z N 317.64 508.12 319.76 508.12 317.64 501.57 315.51 508.12 4 Y V 317.64 516.28 317.64 508.37 2 L 2 Z N 208.18 637.88 437.32 653.34 R 0 Z N 402.31 552.31 479.55 579.11 R N 439.09 544.91 436.97 544.91 439.09 551.46 441.22 544.91 4 Y N 439.09 544.91 436.97 544.91 439.09 551.46 441.22 544.91 4 Y V 346.77 539.7 439.09 539.7 439.09 544.66 3 L 2 Z N 194 466.52 426.52 475.89 R 7 X V 1 12 Q 0 X (Figur) 213.24 467.89 T (e 5:) 241.69 467.89 T 0 F (Architecture Ev) 263.02 467.89 T (aluation Flo) 339.02 467.89 T (w) 396.4 467.89 T (.) 404.28 467.89 T 316.78 659.59 318.9 659.59 316.78 653.04 314.65 659.59 4 Y 0 Z N 316.78 659.59 318.9 659.59 316.78 653.04 314.65 659.59 4 Y V 316.78 666.26 316.78 659.84 2 L 7 X V 2 Z 0 X N 0 11 Q (Record Area) 293.15 491.74 T (Min #) 305.63 544.59 T (T) 301.31 532.36 T (racks?) 307.64 532.36 T 378.25 587.26 378.25 585.13 371.7 587.26 378.25 589.38 4 Y 0 Z N 378.25 587.26 378.25 585.13 371.7 587.26 378.25 589.38 4 Y V 440.76 578.76 440.76 587.26 378.5 587.26 3 L 2 Z N 316.83 631.13 318.95 631.13 316.83 624.58 314.7 631.13 4 Y 0 Z N 316.83 631.13 318.95 631.13 316.83 624.58 314.7 631.13 4 Y V 316.83 636.84 316.83 631.38 2 L 2 Z N (Circuit) 300.48 712.33 T 316.45 700.83 318.57 700.83 316.45 694.28 314.32 700.83 4 Y 0 Z N 316.45 700.83 318.57 700.83 316.45 694.28 314.32 700.83 4 Y V 316.45 708.56 316.45 701.08 2 L 2 Z N (Adjust Channel) 405.12 568.54 T (Capacities \050W\051) 409.94 556.59 T (Logic Optimization \050SIS\051) 265.36 683.88 T (T) 230.02 671.01 T (echnology Map to 4-LUTS \050Flo) 235.98 671.01 T (wMap\051) 376.25 671.01 T (P) 213.4 643.01 T (ack FFs and LUTs into Logic Clusters \050VP) 219.35 643.01 T (A) 407.47 643.01 T (CK\051) 414.97 643.01 T (Placement \050VPR\051) 282.22 613.8 T (Routing \050VPR\051) 287.21 584.38 T (No) 349.95 544.63 T (Y) 322.37 506.93 T (es) 329.21 506.93 T 196.6 645.07 196.6 648.04 206.97 645.07 196.6 642.09 4 Y 0 Z N 196.6 645.07 196.6 648.04 206.97 645.07 196.6 642.09 4 Y V 196.35 645.07 192.25 645.07 2 L 2 Z N (\050N, I\051) 152.71 629.22 T (Cluster) 149.04 653.13 T (P) 140.76 641.17 T (arameters) 146.71 641.17 T 257.99 586.22 257.99 589.2 268.37 586.22 257.99 583.25 4 Y 0 Z N 257.99 586.22 257.99 589.2 268.37 586.22 257.99 583.25 4 Y V 257.74 586.22 227.85 586.22 2 L 2 Z N (Routing) 177.61 599.79 T (Architecture) 169.39 588.08 T (P) 171.54 577.08 T (arameters) 177.49 577.08 T (\050F) 177.37 566.08 T 0 8.8 Q (c) 187.15 563.33 T 0 11 Q (, F) 191.05 566.08 T 0 8 Q (s) 202.67 563.58 T 0 11 Q (\051) 205.78 566.08 T 0 0 0 1 0 0 0 K 72 72 540 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: "7" 7 %%Page: "8" 8 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 10 Q 0 X 0 0 0 1 0 0 0 K (8 of 12) 291.83 36.66 T 1 15 Q (4) 72 710 T (Experimental Results: Cluster Inputs Requir) 90 710 T (ed vs. Cluster Size) 378.06 710 T 0 12 Q 1.05 (As discussed in the introduction, the \336rst question we wish to answer is ho) 90 686 P 1.05 (w man) 461.4 686 P 1.05 (y distinct) 494.6 686 P 1.07 (inputs, I, should be pro) 72 665 P 1.07 (vided to a cluster of size N. Since the number of transistors required to) 186.78 665 P 1.68 (implement each of the multiple) 72 644 P 1.68 (x) 228.54 644 P 1.68 (ers sho) 234.36 644 P 1.68 (wn in Figure 3 gro) 269.4 644 P 1.68 (ws linearly with I \050for lar) 365.16 644 P 1.68 (ge I\051, we) 494.32 644 P 0.41 (w) 72 623 P 0.41 (ould lik) 80.54 623 P 0.41 (e to mak) 117.84 623 P 0.41 (e I as small as possible. On the other hand, if I is made too small, man) 159.87 623 P 0.41 (y of the) 502.52 623 P 0.58 (BLEs in a logic cluster may become essentially unusable, reducing logic utilization and w) 72 602 P 0.58 (asting) 511.33 602 P 0.55 (area. W) 72 581 P 0.55 (e \336nd the minimum v) 108.9 581 P 0.55 (alue of I that allo) 214.15 581 P 0.55 (ws good cluster utilization by running benchmark) 298.04 581 P 0.83 (circuits through the \336rst tw) 72 560 P 0.83 (o steps sho) 205.2 560 P 0.83 (wn in Figure 5, technology-mapping and cluster packing,) 259.22 560 P -0.2 (and measuring the resulting logic utilization for dif) 72 539 P -0.2 (ferent v) 315.26 539 P -0.2 (alues of I. W) 351.74 539 P -0.2 (e de\336ne logic utilization to) 412.15 539 P -0.05 (be the a) 72 518 P -0.05 (v) 108.99 518 P -0.05 (erage number of BLEs per cluster that a circuit is able to use di) 114.81 518 P -0.05 (vided by the total number) 416.86 518 P (of BLEs per cluster) 72 497 T (, N.) 165.17 497 T 0.17 (Figure 6 sho) 90 476 P 0.17 (ws ho) 150.04 476 P 0.17 (w the a) 178.24 476 P 0.17 (v) 213 476 P 0.17 (erage logic utilization of our 20 benchmarks v) 218.82 476 P 0.17 (aries with I for three) 441.35 476 P -0.12 (dif) 72 455 P -0.12 (ferent logic cluster sizes. The horizontal axis is the number of distinct inputs to the cluster rela-) 85.03 455 P 0.41 (ti) 72 434 P 0.41 (v) 78.37 434 P 0.41 (e to the total number of BLE inputs in a cluster) 84.19 434 P 0.41 (, i.e. I/\0504N\051. F) 313.85 434 P 0.41 (or v) 381.24 434 P 0.41 (ery lo) 400.47 434 P 0.41 (w v) 428.24 434 P 0.41 (alues of I, the logic) 446.02 434 P 0.79 (utilization is v) 72 413 P 0.79 (ery lo) 142.07 413 P 0.79 (w) 170.22 413 P 0.79 (, as one w) 178.11 413 P 0.79 (ould e) 228.34 413 P 0.79 (xpect. It is interesting, ho) 258.61 413 P 0.79 (we) 383.46 413 P 0.79 (v) 397.15 413 P 0.79 (er) 402.97 413 P 0.79 (, that when I is only 50 to) 411.82 413 P -0.02 (60% of the total number of BLE inputs, the logic utilization is essentially 100%. Clearly it is pos-) 72 392 P 0.43 (sible to pack BLEs together so that the) 72 371 P 0.43 (y ha) 260.47 371 P 0.43 (v) 280.99 371 P 0.43 (e man) 286.81 371 P 0.43 (y common inputs and can reuse locally gener-) 316.05 371 P 72 72 540 720 C 0 0 0 1 0 0 0 K 83.7 72 528.3 346.5 C 0 70 568 374 768 364.8 240 123.6 97.24 FMBEGINEPSF %%BeginDocument: /jayar/d0/vaughn/thesis/place/design97/camera_ready/grap/all_logic_util.eps %!PS-Adobe-2.0 EPSF-1.2 %%BoundingBox: 70 568 374 768 %! %%Creator: gractus.eecg:vaughn (Vaughn Betz,EECG,LP 392,1653,7662197,G,G ) %%Title: stdin (ditroff) %%CreationDate: Fri Sep 19 13:52:28 1997 %%EndComments % 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 %%EndProlog %%Page: 1 1 10 s 0 xH 0 xS 1 f 1094 1574 MXY 0 -1382 Dl 1900 0 Dl 2995 MX 0 1382 Dl -1900 0 Dl 1453 1772(Fraction)N 1740(of)X 1827(Inputs)X 2047(Accessible,)X 2435(I/\(4N\))X 615 659(Fraction)N 614 755(of)N 701(BLEs)X 666 851(Used)N 695 947(\(20)N 563 1043(Benchmark)N 598 1139(Average\))N 1094 1489 MXY 57 0 Dl 1034 1505(0)N 1094 1247 MXY 57 0 Dl 974 1263(0.2)N 1094 1004 MXY 57 0 Dl 974 1020(0.4)N 1094 761 MXY 57 0 Dl 974 777(0.6)N 1094 519 MXY 57 0 Dl 974 535(0.8)N 1094 276 MXY 57 0 Dl 1034 292(1)N 1211 1574 MXY 0 -57 Dl 1191 1662(0)N 1544 1574 MXY 0 -57 Dl 1494 1662(0.2)N 1878 1574 MXY 0 -57 Dl 1828 1662(0.4)N 2211 1574 MXY 0 -57 Dl 2161 1662(0.6)N 2544 1574 MXY 0 -57 Dl 2494 1662(0.8)N 2878 1574 MXY 0 -57 Dl 2858 1662(1)N 1305 777(N)N 1383(=)X 1448(16)X 1494 1226(N)N 1572(=)X 1637(8)X 1878 656(N)N 1956(=)X 2021(4)X 5 s 10 f 2871 292(g)N 10 s 2878 276 MXY -25 0 Dl 5 s 2845 292(g)N 10 s 2852 276 MXY -25 0 Dl 5 s 2819 292(g)N 10 s 2826 276 MXY -25 0 Dl 5 s 2793 292(g)N 10 s 2800 276 MXY -25 0 Dl 5 s 2767 292(g)N 10 s 2774 276 MXY -25 0 Dl 5 s 2741 292(g)N 10 s 2748 276 MXY -25 0 Dl 5 s 2715 292(g)N 10 s 2722 276 MXY -25 0 Dl 5 s 2689 292(g)N 10 s 2696 276 MXY -25 0 Dl 5 s 2663 292(g)N 10 s 2670 276 MXY -25 0 Dl 5 s 2636 292(g)N 10 s 2643 276 MXY -25 0 Dl 5 s 2610 292(g)N 10 s 2617 276 MXY -25 0 Dl 5 s 2585 292(g)N 10 s 2592 276 MXY -25 0 Dl 5 s 2559 292(g)N 10 s 2566 276 MXY -25 0 Dl 5 s 2532 292(g)N 10 s 2539 276 MXY -25 0 Dl 5 s 2506 292(g)N 10 s 2513 276 MXY -25 0 Dl 5 s 2480 292(g)N 10 s 2487 276 MXY -25 0 Dl 5 s 2454 292(g)N 10 s 2461 276 MXY -25 0 Dl 5 s 2428 292(g)N 10 s 2435 276 MXY -25 0 Dl 5 s 2402 292(g)N 10 s 2409 276 MXY -25 0 Dl 5 s 2376 292(g)N 10 s 2383 276 MXY -25 0 Dl 5 s 2350 292(g)N 10 s 2357 276 MXY -25 0 Dl 5 s 2324 292(g)N 10 s 2331 276 MXY -25 1 Dl 5 s 2298 293(g)N 10 s 2305 277 MXY -25 0 Dl 5 s 2272 293(g)N 10 s 2279 277 MXY -25 1 Dl 5 s 2246 295(g)N 10 s 2253 279 MXY -25 0 Dl 5 s 2220 295(g)N 10 s 2227 279 MXY -25 1 Dl 5 s 2193 296(g)N 10 s 2200 280 MXY -25 2 Dl 5 s 2167 299(g)N 10 s 2174 283 MXY -25 2 Dl 5 s 2142 301(g)N 10 s 2149 285 MXY -25 1 Dl 5 s 2116 302(g)N 10 s 2123 286 MXY -25 3 Dl 5 s 2089 306(g)N 10 s 2096 290 MXY -25 6 Dl 5 s 2063 312(g)N 10 s 2070 296 MXY -25 3 Dl 5 s 2037 315(g)N 10 s 2044 299 MXY -25 3 Dl 5 s 2011 319(g)N 10 s 2018 303 MXY -25 8 Dl 5 s 1985 327(g)N 10 s 1992 311 MXY -25 6 Dl 5 s 1959 334(g)N 10 s 1966 318 MXY -25 9 Dl 5 s 1933 343(g)N 10 s 1940 327 MXY -25 13 Dl 5 s 1907 357(g)N 10 s 1914 341 MXY -25 10 Dl 5 s 1881 368(g)N 10 s 1888 352 MXY -25 16 Dl 5 s 1855 384(g)N 10 s 1862 368 MXY -25 13 Dl 5 s 1829 398(g)N 10 s 1836 382 MXY -25 18 Dl 5 s 1803 416(g)N 10 s 1810 400 MXY -25 19 Dl 5 s 1777 436(g)N 10 s 1784 420 MXY -25 23 Dl 5 s 1750 459(g)N 10 s 1757 443 MXY -25 29 Dl 5 s 1725 487(g)N 10 s 1732 471 MXY -25 37 Dl 5 s 1699 525(g)N 10 s 1706 509 MXY -25 29 Dl 5 s 1673 554(g)N 10 s 1680 538 MXY -25 41 Dl 5 s 1647 596(g)N 10 s 1654 580 MXY -25 33 Dl 5 s 1620 630(g)N 10 s 1627 614 MXY -25 52 Dl 5 s 1594 682(g)N 10 s 1601 666 MXY -25 54 Dl 5 s 1568 736(g)N 10 s 1575 720 MXY -25 54 Dl 5 s 1543 791(g)N 10 s 1550 775 MXY -25 54 Dl 5 s 1516 845(g)N 10 s 1523 829 MXY -25 73 Dl 5 s 1490 919(g)N 10 s 1497 903 MXY -25 61 Dl 5 s 1464 981(g)N 10 s 1471 965 MXY -25 70 Dl 5 s 1438 1051(g)N 10 s 1445 1035 MXY -25 71 Dl 5 s 1412 1123(g)N 10 s 1419 1107 MXY -25 67 Dl 5 s 1386 1191(g)N 10 s 1393 1175 MXY -25 69 Dl 5 s 1360 1260(g)N 10 s 1367 1244 MXY -25 75 Dl 5 s 1334 1335(g)N 10 s 1341 1319 MXY -25 48 Dl 5 s 1308 1384(g)N 2871 292(g)N 10 s 2878 276 MXY -51 0 Dl 5 s 2819 292(g)N 10 s 2826 276 MXY -51 0 Dl 5 s 2767 292(g)N 10 s 2774 276 MXY -51 0 Dl 5 s 2715 292(g)N 10 s 2722 276 MXY -51 0 Dl 5 s 2663 292(g)N 10 s 2670 276 MXY -51 0 Dl 5 s 2610 292(g)N 10 s 2617 276 MXY -51 0 Dl 5 s 2559 292(g)N 10 s 2566 276 MXY -51 0 Dl 5 s 2506 292(g)N 10 s 2513 276 MXY -51 0 Dl 5 s 2454 292(g)N 10 s 2461 276 MXY -51 0 Dl 5 s 2402 292(g)N 10 s 2409 276 MXY -51 2 Dl 5 s 2350 295(g)N 10 s 2357 279 MXY -51 1 Dl 5 s 2298 296(g)N 10 s 2305 280 MXY -51 1 Dl 5 s 2246 297(g)N 10 s 2253 281 MXY -51 4 Dl 5 s 2193 302(g)N 10 s 2200 286 MXY -51 6 Dl 5 s 2142 308(g)N 10 s 2149 292 MXY -51 9 Dl 5 s 2089 318(g)N 10 s 2096 302 MXY -51 14 Dl 5 s 2037 332(g)N 10 s 2044 316 MXY -51 20 Dl 5 s 1985 353(g)N 10 s 1992 337 MXY -25 13 Dl 1966 MX -25 13 Dl 5 s 1933 380(g)N 10 s 1940 364 MXY -23 16 Dl 1912 383 MXY -23 16 Dl 5 s 1881 415(g)N 10 s 1888 399 MXY -22 17 Dl 1858 422 MXY -22 17 Dl 5 s 1829 456(g)N 10 s 1836 440 MXY -19 21 Dl 1803 478 MXY -19 21 Dl 5 s 1777 516(g)N 10 s 1784 500 MXY -16 23 Dl 1748 551 MXY -16 23 Dl 5 s 1725 591(g)N 10 s 1732 575 MXY -13 25 Dl 1694 644 MXY -13 25 Dl 5 s 1673 685(g)N 10 s 1680 669 MXY -12 25 Dl 1660 711 MXY -12 25 Dl 1640 753 MXY -12 25 Dl 5 s 1620 794(g)N 10 s 1627 778 MXY -12 25 Dl 1607 822 MXY -12 25 Dl 1588 866 MXY -12 25 Dl 5 s 1568 908(g)N 10 s 1575 892 MXY -11 26 Dl 1555 940 MXY -11 26 Dl 1535 988 MXY -11 26 Dl 5 s 1516 1031(g)N 10 s 1523 1015 MXY -10 27 Dl 1502 1071 MXY -10 27 Dl 1481 1128 MXY -10 27 Dl 5 s 1464 1171(g)N 10 s 1471 1155 MXY -13 25 Dl 1433 1224 MXY -13 25 Dl 5 s 1412 1265(g)N 2871 292(g)N 7 s 1 f 2870 278(.)N 2844(.)X 2818(.)X 2792(.)X 2766(.)X 5 s 10 f 2767 292(g)N 7 s 1 f 2766 278(.)N 2740(.)X 2714(.)X 2688(.)X 2662(.)X 5 s 10 f 2663 292(g)N 7 s 1 f 2662 278(.)N 2635(.)X 2609(.)X 2584(.)X 2558(.)X 5 s 10 f 2559 292(g)N 7 s 1 f 2558 278(.)N 2531(.)X 2505(.)X 2479(.)X 2453(.)X 5 s 10 f 2454 292(g)N 7 s 1 f 2453 278(.)N 2427 279(.)N 2401 281(.)N 2375 282(.)N 2349 283(.)N 5 s 10 f 2350 297(g)N 7 s 1 f 2349 283(.)N 2323 286(.)N 2297 289(.)N 2271 293(.)N 2245 295(.)N 5 s 10 f 2246 309(g)N 7 s 1 f 2245 295(.)N 2219 302(.)N 2192 309(.)N 2166 316(.)N 2141 323(.)N 5 s 10 f 2142 337(g)N 7 s 1 f 2141 323(.)N 2115 338(.)N 2088 352(.)N 2062 367(.)N 2036 381(.)N 5 s 10 f 2037 395(g)N 7 s 1 f 2036 381(.)N 2016 400(.)N 1995 418(.)N 1974 436(.)N 1953 454(.)N 1932 472(.)N 5 s 10 f 1933 486(g)N 7 s 1 f 1932 472(.)N 1915 497(.)N 1897 522(.)N 1880 547(.)N 1862 572(.)N 1845 597(.)N 1828 621(.)N 5 s 10 f 1829 635(g)N 7 s 1 f 1828 621(.)N 1816 647(.)N 1805 673(.)N 1793 698(.)N 1782 723(.)N 1770 749(.)N 1759 774(.)N 1747 800(.)N 1735 825(.)N 1724 851(.)N 5 s 10 f 1725 865(g)N 7 s 1 f 1724 851(.)N 1709 875(.)N 1694 900(.)N 1679 924(.)N 1664 949(.)N 1649 973(.)N 1634 997(.)N 1619 1022(.)N 5 s 10 f 1620 1036(g)N 1 p %%Trailer xt xs %%EndDocument FMENDEPSF 0 0 0 1 0 0 0 K 142.02 74.87 463.68 85.01 R 7 X 0 0 0 1 0 0 0 K V 1 12 Q 0 X (Figur) 154.8 77.01 T (e 6:) 183.25 77.01 T 0 F (Logic utilization vs. number of logic cluster inputs.) 204.58 77.01 T 0 0 0 1 0 0 0 K 72 72 540 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: "8" 8 %%Page: "9" 9 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 10 Q 0 X 0 0 0 1 0 0 0 K (9 of 12) 291.83 36.66 T 0 12 Q 0.63 (ated outputs. The relati) 72 712 P 0.63 (v) 184.25 712 P 0.63 (e amount of input sharing and output reuse increases slightly with logic) 190.07 712 P (cluster size, causing the curv) 72 691 T (es in Figure 6 to shift to the left as cluster size increases.) 210.12 691 T 0.03 (The solid line in Figure 7 sho) 90 670 P 0.03 (ws the v) 231.19 670 P 0.03 (alue of I required to achie) 270.94 670 P 0.03 (v) 394.39 670 P 0.03 (e 98% logic utilization as the) 400.21 670 P 1.07 (cluster size, N, is v) 72 649 P 1.07 (aried, while the dashed line sho) 167.29 649 P 1.07 (ws ho) 323.63 649 P 1.07 (w the a) 352.73 649 P 1.07 (v) 389.28 649 P 1.07 (erage number of logic cluster) 395.1 649 P 0.14 (inputs that are actually used v) 72 628 P 0.14 (aries with cluster size. Although there are 4N BLE inputs in a logic) 215.38 628 P 0.19 (cluster of size N, the number of inputs required to achie) 72 607 P 0.19 (v) 341.2 607 P 0.19 (e 98% logic utilization is only about 2N) 347.02 607 P 1.12 (+ 2. Furthermore, the a) 72 586 P 1.12 (v) 187 586 P 1.12 (erage number of logic cluster inputs that are actually used gro) 192.82 586 P 1.12 (ws e) 500.37 586 P 1.12 (v) 522.85 586 P 1.12 (en) 528.67 586 P 0.11 (more slo) 72 565 P 0.11 (wly) 113.48 565 P 0.11 (. On a) 130.7 565 P 0.11 (v) 159.67 565 P 0.11 (erage, a cluster of size 1 uses 3.5 of its inputs, while an cluster of size 16 uses) 165.49 565 P 0.21 (only 19.7 of its inputs. In other w) 72 544 P 0.21 (ords, while the logic per cluster has increased by a f) 233.68 544 P 0.21 (actor of 16,) 484.6 544 P -0.1 (the a) 72 523 P -0.1 (v) 94.65 523 P -0.1 (erage number of connections that must be routed to each cluster has increased by a f) 100.47 523 P -0.1 (actor of) 503.11 523 P (only 5.6.) 72 502 T -0.3 (Our results indicate that commercial FPGAs can be more aggressi) 90 481 P -0.3 (v) 403.96 481 P -0.3 (e in reducing the v) 409.79 481 P -0.3 (alue of I.) 497.61 481 P -0.21 (F) 72 460 P -0.21 (or e) 78.49 460 P -0.21 (xample, the Altera Fle) 96.42 460 P -0.21 (x 8K FPGAs use logic clusters with N = 8 and I = 24, while our results) 202.91 460 P -0.07 (indicate that I = 18 suf) 72 439 P -0.07 (\336ces for a cluster of this size. Similarly) 179.77 439 P -0.07 (, the Xilinx 5200 FPGA uses a logic) 366.49 439 P 0.69 (cluster with N = 4, and mak) 72 418 P 0.69 (es all 16 LUT inputs accessible, while our results suggest 10 inputs) 209.77 418 P 0.36 (are suf) 72 397 P 0.36 (\336cient. Reducing I in this manner simpli\336es the cluster input multiple) 104.38 397 P 0.36 (x) 441.47 397 P 0.36 (ers and reduces the) 447.29 397 P 0 (number of logic block pins that must be connected to the FPGA routing, resulting in considerable) 72 376 P (area sa) 72 355 T (vings.) 104.74 355 T 72 72 540 720 C 0 0 0 1 0 0 0 K 79.45 72 532.55 351 C 0 0 0 1 0 0 0 K 109.26 75.57 492.62 85.24 R 7 X 0 0 0 1 0 0 0 K V 1 12 Q 0 X (Figur) 129.4 77.24 T (e 7:) 157.85 77.24 T 0 F (V) 179.18 77.24 T (ariation in inputs required and inputs used with cluster size.) 186.51 77.24 T 0 0 0 1 0 0 0 K 0 70 570 374 768 364.8 237.6 114 100.92 FMBEGINEPSF %%BeginDocument: /jayar/d0/vaughn/thesis/place/design97/camera_ready/grap/inputs_needed.eps %!PS-Adobe-2.0 EPSF-1.2 %%BoundingBox: 70 570 374 768 %! %%Creator: gractus.eecg:vaughn (Vaughn Betz,EECG,LP 392,1653,7662197,G,G ) %%Title: stdin (ditroff) %%CreationDate: Fri Sep 19 14:02:20 1997 %%EndComments % 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 %%EndProlog %%Page: 1 1 10 s 0 xH 0 xS 1 f 1094 1574 MXY 0 -1382 Dl 1900 0 Dl 2995 MX 0 1382 Dl -1900 0 Dl 1784 1772(Cluster)N 2035(Size)X 2193(\(N\))X 617 611(Number)N 715 707(of)N 633 803(Cluster)N 648 899(Inputs)N 695 995(\(20)N 563 1091(Benchmark)N 598 1187(Average\))N 1211 1574 MXY 0 -57 Dl 1191 1662(1)N 1322 1574 MXY 0 -57 Dl 1302 1662(2)N 1544 1574 MXY 0 -57 Dl 1524 1662(4)N 1767 1574 MXY 0 -57 Dl 1747 1662(6)N 1989 1574 MXY 0 -57 Dl 1969 1662(8)N 2211 1574 MXY 0 -57 Dl 2171 1662(10)N 2433 1574 MXY 0 -57 Dl 2393 1662(12)N 2655 1574 MXY 0 -57 Dl 2615 1662(14)N 2878 1574 MXY 0 -57 Dl 2838 1662(16)N 1094 1489 MXY 57 0 Dl 1034 1505(0)N 1094 1337 MXY 57 0 Dl 1034 1353(4)N 1094 1186 MXY 57 0 Dl 1034 1202(8)N 1094 1034 MXY 57 0 Dl 994 1050(12)N 1094 883 MXY 57 0 Dl 994 899(16)N 1094 731 MXY 57 0 Dl 994 747(20)N 1094 580 MXY 57 0 Dl 994 596(24)N 1094 428 MXY 57 0 Dl 994 444(28)N 1094 276 MXY 57 0 Dl 994 292(32)N 1609 539(Inputs)N 1829(required)X 2117(for)X 2231(98%)X 1752 618(logic)N 1932(utilization)X 2100 1088(Average)N 2393(inputs)X 2608(used)X 5 s 10 f 1204 1353(g)N 10 s 1211 1337 MXY 111 -76 Dl 5 s 1315 1278(g)N 10 s 1322 1262 MXY 111 -76 Dl 5 s 1426 1202(g)N 10 s 1433 1186 MXY 111 -76 Dl 5 s 1537 1126(g)N 10 s 1544 1110 MXY 111 -76 Dl 5 s 1649 1050(g)N 10 s 1656 1034 MXY 111 -76 Dl 5 s 1760 975(g)N 10 s 1767 959 MXY 111 -76 Dl 5 s 1871 899(g)N 10 s 1878 883 MXY 111 -76 Dl 5 s 1982 823(g)N 10 s 1989 807 MXY 111 -38 Dl 5 s 2093 785(g)N 10 s 2100 769 MXY 111 -76 Dl 5 s 2204 709(g)N 10 s 2211 693 MXY 111 -76 Dl 5 s 2315 633(g)N 10 s 2322 617 MXY 111 -76 Dl 5 s 2426 558(g)N 10 s 2433 542 MXY 111 -76 Dl 5 s 2537 482(g)N 10 s 2544 466 MXY 111 -76 Dl 5 s 2648 406(g)N 10 s 2655 390 MXY 111 -38 Dl 5 s 2760 368(g)N 10 s 2767 352 MXY 111 -76 Dl 5 s 2871 292(g)N 1204 1372(g)N 10 s 1211 1356 MXY 26 -11 Dl 1253 1337 MXY 26 -11 Dl 1296 1318 MXY 26 -11 Dl 5 s 1315 1323(g)N 10 s 1322 1307 MXY 26 -11 Dl 1364 1287 MXY 26 -11 Dl 1407 1268 MXY 26 -11 Dl 5 s 1426 1273(g)N 10 s 1433 1257 MXY 26 -10 Dl 1475 1240 MXY 26 -10 Dl 1517 1223 MXY 26 -10 Dl 5 s 1537 1228(g)N 10 s 1544 1212 MXY 26 -10 Dl 1586 1194 MXY 26 -10 Dl 1628 1177 MXY 26 -10 Dl 5 s 1649 1182(g)N 10 s 1656 1166 MXY 27 -9 Dl 1698 1150 MXY 27 -9 Dl 1740 1134 MXY 27 -9 Dl 5 s 1760 1140(g)N 10 s 1767 1124 MXY 26 -10 Dl 1809 1107 MXY 26 -10 Dl 1851 1091 MXY 26 -10 Dl 5 s 1871 1096(g)N 10 s 1878 1080 MXY 27 -9 Dl 1919 1066 MXY 27 -9 Dl 1961 1051 MXY 27 -9 Dl 5 s 1982 1058(g)N 10 s 1989 1042 MXY 27 -9 Dl 2031 1026 MXY 27 -9 Dl 2073 1011 MXY 27 -9 Dl 5 s 2093 1017(g)N 10 s 2100 1001 MXY 27 -8 Dl 2142 988 MXY 27 -8 Dl 2184 974 MXY 27 -8 Dl 5 s 2204 981(g)N 10 s 2211 965 MXY 27 -10 Dl 2253 950 MXY 27 -10 Dl 2295 933 MXY 27 -10 Dl 5 s 2315 939(g)N 10 s 2322 923 MXY 27 -9 Dl 2364 909 MXY 27 -9 Dl 2406 895 MXY 27 -9 Dl 5 s 2426 902(g)N 10 s 2433 886 MXY 27 -9 Dl 2475 872 MXY 27 -9 Dl 2517 857 MXY 27 -9 Dl 5 s 2537 864(g)N 10 s 2544 848 MXY 27 -9 Dl 2586 834 MXY 27 -9 Dl 2628 820 MXY 27 -9 Dl 5 s 2648 827(g)N 10 s 2655 811 MXY 27 -8 Dl 2697 798 MXY 27 -8 Dl 2740 785 MXY 27 -8 Dl 5 s 2760 793(g)N 10 s 2767 777 MXY 27 -8 Dl 2809 764 MXY 27 -8 Dl 2851 751 MXY 27 -8 Dl 5 s 2871 759(g)N 1 p %%Trailer xt xs %%EndDocument FMENDEPSF 72 72 540 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: "9" 9 %%Page: "10" 10 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 10 Q 0 X 0 0 0 1 0 0 0 K (10 of 12) 289.33 36.66 T 1 15 Q (5) 72 710 T (Experimental Results: Routing Flexibility vs. Cluster Size) 90 710 T 0 12 Q -0.04 (Before we can apply the e) 90 686 P -0.04 (xperimental \337o) 214.56 686 P -0.04 (w of Section 3 to see ho) 287.21 686 P -0.04 (w area-ef) 401.96 686 P -0.04 (\336cienc) 446.58 686 P -0.04 (y v) 478.4 686 P -0.04 (aries with) 493.05 686 P 0.64 (cluster size, we must choose F) 72 665 P 0 9.6 Q 0.51 (c) 221.16 662 P 0 12 Q 0.64 (, the number of routing tracks to which each logic block pin can) 225.42 665 P 1.9 (connect. On the one hand, using a smaller v) 72 644 P 1.9 (alue of F) 296.84 644 P 0 9.6 Q 1.52 (c) 343.3 641 P 0 12 Q 1.9 ( reduces the number of programmable) 347.56 644 P 0.2 (switches in the FPGA routing, which impro) 72 623 P 0.2 (v) 282.71 623 P 0.2 (es area-ef) 288.53 623 P 0.2 (\336cienc) 334.73 623 P 0.2 (y) 366.55 623 P 0.2 (. On the other hand, smaller v) 371.77 623 P 0.2 (alues) 515.34 623 P 0.84 (of F) 72 602 P 0 9.6 Q 0.67 (c) 92.51 599 P 0 12 Q 0.84 ( mak) 96.77 602 P 0.84 (e an FPGA less routable so that lar) 121.15 602 P 0.84 (ger channel capacities, W) 293.79 602 P 0.84 (, will be required to suc-) 418.49 602 P 0.09 (cessfully route circuits. This reduces area-ef) 72 581 P 0.09 (\336cienc) 284.08 581 P 0.09 (y by increasing the routing area. The goal is to) 315.89 581 P 1.01 (choose a v) 72 560 P 1.01 (alue of F) 124.38 560 P 0 9.6 Q 0.81 (c) 169.07 557 P 0 12 Q 1.01 ( that balances these tw) 173.33 560 P 1.01 (o competing objecti) 285.24 560 P 1.01 (v) 382.3 560 P 1.01 (es and achie) 388.12 560 P 1.01 (v) 448.49 560 P 1.01 (es good area-ef) 454.31 560 P 1.01 (\336-) 529.33 560 P (cienc) 72 539 T (y) 97.14 539 T (.) 102.36 539 T 0.42 (F) 90 518 P 0.42 (or a cluster of size 1, a good v) 96.49 518 P 0.42 (alue of F) 243.82 518 P 0 9.6 Q 0.33 (c) 287.32 515 P 0 12 Q 0.42 ( is W) 291.58 518 P 0.42 (; i.e. each logic block pin can be connected to) 317.3 518 P -0.11 (an) 72 497 P -0.11 (y routing track in an adjacent channel. F) 83.15 497 P -0.11 (or lar) 275.52 497 P -0.11 (ger clusters, ho) 300.86 497 P -0.11 (we) 373.33 497 P -0.11 (v) 387.02 497 P -0.11 (er) 392.84 497 P -0.11 (, setting F) 401.68 497 P 0 9.6 Q -0.09 (c) 449.15 494 P 0 12 Q -0.11 ( to W pro) 453.41 497 P -0.11 (vides f) 498.57 497 P -0.11 (ar) 530.68 497 P 0.47 (more routing \337e) 72 476 P 0.47 (xibility than is required, w) 150.08 476 P 0.47 (asting area. Recall that the full connecti) 278.82 476 P 0.47 (vity of a logic) 471.61 476 P 0.13 (cluster means that a net which must connect to a logic block input can be connected to) 72 455 P 2 F 0.13 (any) 491.76 455 P 0 F 0.13 ( of the) 509.09 455 P -0.16 (I inputs. Similarly) 72 434 P -0.16 (, a net that must connect to a logic block output can connect to) 157.91 434 P 2 F -0.16 (any) 458.65 434 P 0 F -0.16 (of the N out-) 478.82 434 P -0.23 (puts. As N increases then, k) 72 413 P -0.23 (eeping F) 204.37 413 P 0 9.6 Q -0.18 (c) 245.81 410 P 0 12 Q -0.23 ( \336x) 250.07 413 P -0.23 (ed at W pro) 265.33 413 P -0.23 (vides an e) 320.78 413 P -0.23 (xcessi) 368.12 413 P -0.23 (v) 397.15 413 P -0.23 (e number of w) 402.97 413 P -0.23 (ays to connect) 471.81 413 P -0.24 (to each logic block. F) 72 392 P -0.24 (or e) 174.53 392 P -0.24 (xample, a cluster of size one has 4 inputs and one output. If F) 192.44 392 P 0 9.6 Q -0.19 (c) 484.34 389 P 0 12 Q -0.24 (= W) 490.81 392 P -0.24 (, then,) 510.57 392 P 0.75 (there are 4W w) 72 371 P 0.75 (ays to connect to a cluster input and W w) 147.77 371 P 0.75 (ays to connect to the cluster output. A) 352.74 371 P 0.09 (cluster of size 16, on the other hand, has 32 inputs and 16 outputs, so there are 32W w) 72 350 P 0.09 (ays to con-) 487.16 350 P (nect to a cluster input and 16W w) 72 329 T (ays to connect to a cluster output if F) 233.52 329 T 0 9.6 Q (c) 411.5 326 T 0 12 Q ( = W) 415.77 329 T (.) 438.76 329 T -0.05 (W) 90 308 P -0.05 (e ha) 100.37 308 P -0.05 (v) 119.73 308 P -0.05 (e e) 125.55 308 P -0.05 (xperimentally found that a more appropriate le) 138.97 308 P -0.05 (v) 362.3 308 P -0.05 (el of routing \337e) 368.12 308 P -0.05 (xibility results when) 442.11 308 P 1.39 (F) 72 287 P 0 9.6 Q 1.12 (c) 78.67 284 P 0 12 Q 1.39 ( is set to W/N, and all the e) 82.93 287 P 1.39 (xperiments in the ne) 224.23 287 P 1.39 (xt section use this v) 325.89 287 P 1.39 (alue. This choice of F) 425.84 287 P 0 9.6 Q 1.12 (c) 535.74 284 P 0 12 Q 1.27 (means that each of the W routing tracks can be dri) 72 266 P 1.27 (v) 325.69 266 P 1.27 (en by one output pin on each logic block,) 331.51 266 P (ensuring that all the routing tracks in a channel can be readily used to interconnect blocks.) 72 245 T 1 15 Q (6) 72 211 T (Experimental Results: Ar) 90 211 T (ea-Ef\336ciency vs. Cluster Size) 253.88 211 T 0 12 Q -0.03 (W) 90 187 P -0.03 (e are no) 100.37 187 P -0.03 (w in a position to e) 137.98 187 P -0.03 (xamine which cluster size leads to the most area-ef) 229.31 187 P -0.03 (\336cient FPGA.) 473.36 187 P 0.67 (Throughout this section, the number of inputs, I, to a cluster of size N is chosen to be the mini-) 72 166 P 0.39 (mum v) 72 145 P 0.39 (alue that allo) 105.77 145 P 0.39 (ws VP) 168.24 145 P 0.39 (A) 199.2 145 P 0.39 (CK to achie) 207.39 145 P 0.39 (v) 265.2 145 P 0.39 (e 98% logic utilization. This v) 271.02 145 P 0.39 (alue of I allo) 418.02 145 P 0.39 (ws our logic) 479.88 145 P 0.13 (clusters to be essentially fully utilized, while minimizing the comple) 72 124 P 0.13 (xity of the cluster input mul-) 401.67 124 P -0.28 (tiple) 72 103 P -0.28 (x) 93.16 103 P -0.28 (ers and the number of logic block pins to be connected to the main FPGA routing. W) 98.98 103 P -0.28 (e ran 20) 501.9 103 P -0.11 (benchmark circuits through the e) 72 82 P -0.11 (xperimental \337o) 229.35 82 P -0.11 (w described in Section 3, and determined the area) 301.93 82 P 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "10" 10 %%Page: "11" 11 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 10 Q 0 X 0 0 0 1 0 0 0 K (11 of 12) 289.33 36.66 T 0 12 Q (the) 72 430.5 T (y required after placement and routing in each architecture.) 86.48 430.5 T 0.22 (Figure 8 sho) 90 409.5 P 0.22 (ws ho) 150.15 409.5 P 0.22 (w area-ef) 178.4 409.5 P 0.22 (\336cienc) 223.29 409.5 P 0.22 (y v) 255.1 409.5 P 0.22 (aries with cluster size. Notice that all clusters with sizes) 270.03 409.5 P -0.09 (between 1 and 8 ha) 72 388.5 P -0.09 (v) 164.06 388.5 P -0.09 (e area-ef) 169.88 388.5 P -0.09 (\336cienc) 211.12 388.5 P -0.09 (y within a 10% range. Clearly) 242.93 388.5 P -0.09 (, with proper choices of I and F) 385.7 388.5 P 0 9.6 Q -0.07 (c) 535.74 385.5 P 0 12 Q (an) 72 367.5 T (y cluster in this range, e) 83.15 367.5 T (xcept perhaps a cluster of size 2, pro) 197.62 367.5 T (vides reasonable area-ef) 372.72 367.5 T (\336cienc) 488.36 367.5 T (y) 520.18 367.5 T (.) 525.4 367.5 T 0.03 (As one increases the cluster size from 1 to 2, area-ef) 90 346.5 P 0.03 (\336cienc) 340.88 346.5 P 0.03 (y w) 372.69 346.5 P 0.03 (orsens because a cluster of size) 390.26 346.5 P 0.51 (1 requires no local routing \050it is a single BLE\051, whereas a cluster of size 2 does. The addition of) 72 325.5 P 0.28 (this local routing to the FPGA requires a considerable number of transistors, and at a cluster size) 72 304.5 P 0.69 (of 2 it has not yet reduced the number of connections to route between clusters enough to com-) 72 283.5 P 1.39 (pensate. Further increases of cluster size, to N = 3 and 4, impro) 72 262.5 P 1.39 (v) 392.22 262.5 P 1.39 (e area-ef) 398.04 262.5 P 1.39 (\336cienc) 440.76 262.5 P 1.39 (y because the) 472.57 262.5 P 1.1 (local routing is able to more signi\336cantly reduce the amount of routing required between logic) 72 241.5 P 0.37 (blocks. As the cluster size rises past N = 10, area-ef) 72 220.5 P 0.37 (\336cienc) 323.41 220.5 P 0.37 (y rapidly de) 355.22 220.5 P 0.37 (grades. The comple) 413.1 220.5 P 0.37 (xity of) 507.96 220.5 P 0.33 (the input multiple) 72 199.5 P 0.33 (x) 157.83 199.5 P 0.33 (ers in a logic cluster gro) 163.65 199.5 P 0.33 (ws quadratically with cluster size, and for suf) 280.67 199.5 P 0.33 (\336ciently) 500.66 199.5 P 3.12 (lar) 72 178.5 P 3.12 (ge clusters this sw) 84.44 178.5 P 3.12 (amps the area impro) 181.36 178.5 P 3.12 (v) 288.2 178.5 P 3.12 (ements g) 294.02 178.5 P 3.12 (ained by reducing the routing required) 340.08 178.5 P (between logic blocks.) 72 157.5 T 1 15 Q (7) 72 123.5 T (Conclusions) 90 123.5 T 0 12 Q 1.16 (There are three main conclusions to be dra) 90 99.5 P 1.16 (wn from this w) 302.2 99.5 P 1.16 (ork. First, the number of distinct) 378.55 99.5 P 1.36 (inputs required by a logic cluster gro) 72 78.5 P 1.36 (ws f) 256.5 78.5 P 1.36 (airly slo) 278.07 78.5 P 1.36 (wly with cluster size, N. A cluster of size N) 318.13 78.5 P 72 72 540 720 C 0 0 0 1 0 0 0 K 89.35 438.5 522.65 720 C 0 75 570 387 768 374.8 237.85 124.05 479.27 FMBEGINEPSF %%BeginDocument: /jayar/d0/vaughn/thesis/place/design97/camera_ready/grap/area.eps %!PS-Adobe-2.0 EPSF-1.2 %%BoundingBox: 75 570 387 768 %! %%Creator: gractus.eecg:vaughn (Vaughn Betz,EECG,LP 392,1653,7662197,G,G ) %%Title: stdin (ditroff) %%CreationDate: Thu Oct 2 13:29:12 1997 %%EndComments % 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 %%EndProlog %%Page: 1 1 10 s 0 xH 0 xS 1 f 1199 1574 MXY 0 -1382 Dl 1900 0 Dl 3100 MX 0 1382 Dl -1900 0 Dl 1890 1772(Cluster)N 2141(Size)X 2299(\(N\))X 609 611(Transistors)N 640 707(Required)N 736 803(per)N 712 899(BLE)N 734 995(\(20)N 602 1091(Benchmark)N 637 1187(Average\))N 1316 1574 MXY 0 -57 Dl 1296 1662(1)N 1427 1574 MXY 0 -57 Dl 1407 1662(2)N 1650 1574 MXY 0 -57 Dl 1630 1662(4)N 1872 1574 MXY 0 -57 Dl 1852 1662(6)N 2094 1574 MXY 0 -57 Dl 2074 1662(8)N 2317 1574 MXY 0 -57 Dl 2277 1662(10)N 2539 1574 MXY 0 -57 Dl 2499 1662(12)N 2761 1574 MXY 0 -57 Dl 2721 1662(14)N 2984 1574 MXY 0 -57 Dl 2944 1662(16)N 1199 1489 MXY 57 0 Dl 1019 1505(1100)N 1199 1338 MXY 57 0 Dl 1019 1354(1150)N 1199 1186 MXY 57 0 Dl 1019 1202(1200)N 1199 1035 MXY 57 0 Dl 1019 1051(1250)N 1199 883 MXY 57 0 Dl 1019 899(1300)N 1199 732 MXY 57 0 Dl 1019 748(1350)N 1199 581 MXY 57 0 Dl 1019 597(1400)N 1199 429 MXY 57 0 Dl 1019 445(1450)N 1199 278 MXY 57 0 Dl 1019 294(1500)N 5 s 10 f 1309 1442(g)N 10 s 1316 1426 MXY 111 -335 Dl 5 s 1420 1105(g)N 10 s 1427 1089 MXY 111 217 Dl 5 s 1532 1323(g)N 10 s 1539 1307 MXY 111 42 Dl 5 s 1643 1366(g)N 10 s 1650 1350 MXY 111 -61 Dl 5 s 1754 1305(g)N 10 s 1761 1289 MXY 111 -35 Dl 5 s 1865 1270(g)N 10 s 1872 1254 MXY 111 -106 Dl 5 s 1976 1163(g)N 10 s 1983 1147 MXY 111 -39 Dl 5 s 2087 1124(g)N 10 s 2094 1108 MXY 111 -73 Dl 5 s 2199 1050(g)N 10 s 2206 1034 MXY 111 -71 Dl 5 s 2310 979(g)N 10 s 2317 963 MXY 111 -161 Dl 5 s 2421 817(g)N 10 s 2428 801 MXY 111 -103 Dl 5 s 2532 714(g)N 10 s 2539 698 MXY 111 -84 Dl 5 s 2643 629(g)N 10 s 2650 613 MXY 111 -83 Dl 5 s 2754 546(g)N 10 s 2761 530 MXY 111 -104 Dl 5 s 2866 441(g)N 10 s 2873 425 MXY 111 -149 Dl 5 s 2977 292(g)N 1 p %%Trailer xt xs %%EndDocument FMENDEPSF 0 0 0 1 0 0 0 K 214.05 456.57 454.72 465.9 R 7 X 0 0 0 1 0 0 0 K V 1 12 Q 0 X (Figur) 225.85 457.9 T (e 8:) 254.31 457.9 T 0 F (Area-ef) 275.63 457.9 T (\336cienc) 311.97 457.9 T (y v) 343.78 457.9 T (ersus cluster size.) 358.6 457.9 T 0 0 0 1 0 0 0 K 72 72 540 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: "11" 11 %%Page: "12" 12 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 10 Q 0 X 0 0 0 1 0 0 0 K (12 of 12) 289.33 36.66 T 0 12 Q 0.82 (requires approximately 2N + 2 distinct inputs \050for N) 72 712 P 3 14 Q 0.95 (\243) 333.08 712 P 0 12 Q 0.82 ( 16\051. Secondly) 340.77 712 P 0.82 (, because all the input and) 411.28 712 P 0.4 (output pins of a cluster are logically equi) 72 691 P 0.4 (v) 270.81 691 P 0.4 (alent, one can signi\336cantly reduce the number of rout-) 276.51 691 P 2.09 (ing tracks to which each logic cluster pin can connect, F) 72 670 P 0 9.6 Q 1.67 (c) 362.55 667 P 0 12 Q 2.09 (, as one increases the cluster size.) 366.82 670 P 1.51 (Finally) 72 649 P 1.51 (, the area-ef) 105.23 649 P 1.51 (\336cienc) 164.91 649 P 1.51 (y of logic blocks containing between 1 and 8 BLEs is within a 10%) 196.73 649 P (range, so an) 72 628 T (y logic block in this range is a reasonable choice.) 129.47 628 T 1.98 (Cluster) 90 607 P 1.98 (-based logic blocks ha) 124.43 607 P 1.98 (v) 237.12 607 P 1.98 (e tw) 242.94 607 P 1.98 (o signi\336cant adv) 265.13 607 P 1.98 (antages o) 348.13 607 P 1.98 (v) 394.92 607 P 1.98 (er single BLE logic blocks:) 400.74 607 P 1.13 (lar) 72 586 P 1.13 (ger clusters reduce the size of the placement problem and tend to increase the FPGA speed.) 84.44 586 P 0.17 (Since a cluster) 72 565 P 0.17 (-based logic block with appropriate v) 142.08 565 P 0.17 (alues of N, I, and F) 321.6 565 P 0 9.6 Q 0.14 (c) 414.76 562 P 0 12 Q 0.17 ( has area-ef) 419.02 565 P 0.17 (\336cienc) 474.36 565 P 0.17 (y com-) 506.17 565 P 0.19 (parable to that of a single BLE logic block, an FPGA can g) 72 544 P 0.19 (ain these adv) 357.89 544 P 0.19 (antages without an) 420.63 544 P 0.19 (y area) 510.83 544 P (penalty) 72 523 T (.) 106.55 523 T 1 15 Q ( Refer) 269.28 488 T (ences) 308.57 488 T 0 12 Q ([1]) 72 464 T -0.27 (V) 92.16 464 P -0.27 (. Betz and J. Rose, \322Cluster) 99.28 464 P -0.27 (-Based Logic Blocks for FPGAs: Area-Ef) 229.68 464 P -0.27 (\336cienc) 429 464 P -0.27 (y vs. Input Shar-) 460.81 464 P (ing and Size,) 92.16 444 T (\323) 153.65 444 T 2 F (IEEE Custom Inte) 161.98 444 T (gr) 248.82 444 T (ated Cir) 259.31 444 T (cuits Conf) 298.54 444 T (.) 347.36 444 T 0 F (, 1997, pp. 551 - 554.) 350.36 444 T ([2]) 72 424 T 0.97 (J. Rose, R. J. Francis, D. Le) 92.16 424 P 0.97 (wis and P) 231.67 424 P 0.97 (. Cho) 278.95 424 P 0.97 (w) 305.62 424 P 0.97 (, \322) 313.51 424 P 0.97 (Architecture of Programmable Gate Arrays:) 324.85 424 P 1.43 (The Ef) 92.16 404 P 1.43 (fect of Logic Block Functionality on Area Ef) 126.28 404 P 1.43 (\336cienc) 352.29 404 P 1.43 (y) 384.11 404 P 1.43 (,) 389.33 404 P 1.43 (\323) 391.49 404 P 2 F 1.43 (IEEE J) 401.24 404 P 1.43 (ournal of Solid State) 436.7 404 P (Cir) 92.16 384 T (cuits) 107.72 384 T 0 F (, Oct. 1990, pp. 1217 - 1225.) 130.39 384 T ([3]) 72 364 T 2.08 (A. Agg) 92.16 364 P 2.08 (arw) 129.5 364 P 2.08 (al and D. Le) 147.37 364 P 2.08 (wis, \322Routing Architectures for Hierarchical Field Programmable) 212.61 364 P (Gate Arrays,) 92.16 344 T (\323) 152.63 344 T 2 F (Int. Conf) 160.96 344 T (. on Computer Design) 203.45 344 T 0 F (, 1994, pp. 475 - 478.) 309.44 344 T ([4]) 72 324 T 0.11 (S. Y) 92.16 324 P 0.11 (ang, \322Logic Synthesis and Optimization Benchmarks, V) 112.41 324 P 0.11 (ersion 3.0,) 381.71 324 P 0.11 (\323) 431.31 324 P 2 F 0.11 (T) 439.75 324 P 0.11 (ec) 445.32 324 P 0.11 (h. Report) 455.79 324 P 0 F 0.11 (, Micro-) 500.57 324 P (electronics Center of North Carolina, 1991.) 92.16 304 T ([5]) 72 284 T 1.42 (S. Bro) 92.16 284 P 1.42 (wn, R. Francis, J. Rose and Z. Vranesic,) 123.96 284 P 2 F 1.42 (F) 331.32 284 P 1.42 (ield-Pr) 338.11 284 P 1.42 (o) 371.57 284 P 1.42 (gr) 377.45 284 P 1.42 (ammable Gate Arr) 387.94 284 P 1.42 (ays) 480.59 284 P 0 F 1.42 (, Kluwer) 496.59 284 P (Academic Publishers, 1992.) 92.16 264 T ([6]) 72 244 T 1.53 (E. M. Sento) 92.16 244 P 1.53 (vich et al, \322SIS: A System for Sequential Circuit Analysis,) 152.39 244 P 1.53 (\323) 446.35 244 P 2 F 1.53 (T) 456.22 244 P 1.53 (ec) 461.79 244 P 1.53 (h. Report No.) 472.26 244 P (UCB/ERL M92/41) 92.16 224 T 0 F (, Uni) 181.16 224 T (v) 204.86 224 T (ersity of California, Berk) 210.68 224 T (ele) 331.21 224 T (y) 345.02 224 T (, 1992.) 350.24 224 T ([7]) 72 204 T 1.85 (J. Cong and Y) 92.16 204 P 1.85 (. Ding, \322Flo) 164.83 204 P 1.85 (wMap: An Optimal T) 225.57 204 P 1.85 (echnology Mapping Algorithm for Delay) 334.62 204 P 0.63 (Optimization in Lookup-T) 92.16 184 P 0.63 (able Based FPGA Designs,) 219.79 184 P 0.63 (\323) 351.49 184 P 2 F 0.63 (IEEE T) 360.45 184 P 0.63 (r) 396.08 184 P 0.63 (ans. CAD) 400.57 184 P 0 F 0.63 (, Jan. 1994, pp. 1 -) 447.86 184 P (12.) 92.16 164 T ([8]) 72 144 T 3.2 (V) 92.16 144 P 3.2 (. Betz and J. Rose, \322VPR: A Ne) 99.28 144 P 3.2 (w P) 274.06 144 P 3.2 (acking, Placement and Routing T) 295.42 144 P 3.2 (ool for FPGA) 467.59 144 P 1.25 (Research,) 92.16 124 P 1.25 (\323) 138.3 124 P 2 F 1.25 (Int. W) 147.88 124 P 1.25 (orkshop on F) 177.35 124 P 1.25 (ield Pr) 243.3 124 P 1.25 (o) 277.01 124 P 1.25 (gr) 282.89 124 P 1.25 (ammable Lo) 293.38 124 P 1.25 (gic and Applications,) 354.17 124 P 0 F 1.25 (1997, pp. 213 -) 463.26 124 P (222.) 92.16 104 T ([9]) 72 84 T (V) 92.16 84 T (. Betz,) 99.28 84 T 2 F (Ph.D. Dissertation) 133.27 84 T 0 F (, in preparation, Uni) 223.61 84 T (v) 320.29 84 T (ersity of T) 326.11 84 T (oronto.) 375.14 84 T 0 0 0 1 0 0 0 K FMENDPAGE %%EndPage: "12" 12 %%Trailer %%BoundingBox: 0 0 612 792 %%PageOrder: Ascend %%Pages: 12 %%DocumentFonts: Times-Roman %%+ Times-Bold %%+ Times-Italic %%+ Symbol %%EOF