From f44588f2b6421f5a6a2eaede996ddaa2a394872e Mon Sep 17 00:00:00 2001 From: Olivier Sirol Date: Thu, 20 Jan 2000 16:12:45 +0000 Subject: [PATCH] latex + ps + pdf --- alliance/share/tutorials/addaccu/addaccu.pdf | Bin 0 -> 155871 bytes alliance/share/tutorials/addaccu/addaccu.ps | 2091 +++++++++++++++ alliance/share/tutorials/addaccu/tex.tgz | Bin 75801 -> 0 bytes alliance/share/tutorials/addaccu/tex/Makefile | 24 + .../share/tutorials/addaccu/tex/addaccu.eps | 197 ++ .../share/tutorials/addaccu/tex/addaccu.fig | 88 + .../share/tutorials/addaccu/tex/addaccu.tex | 1590 ++++++++++++ .../share/tutorials/addaccu/tex/hierarchy.eps | 246 ++ .../share/tutorials/addaccu/tex/hierarchy.fig | 98 + alliance/share/tutorials/addaccu/tutorial.ps | 2025 --------------- alliance/share/tutorials/amd2901/amd2901.pdf | Bin 0 -> 110738 bytes alliance/share/tutorials/amd2901/amd2901.ps | 1622 ++++++++++++ alliance/share/tutorials/amd2901/tex.tgz | Bin 52652 -> 0 bytes alliance/share/tutorials/amd2901/tex/Makefile | 21 + .../share/tutorials/amd2901/tex/amd2901.tex | 647 +++++ alliance/share/tutorials/amd2901/tutorial.ps | 2271 ----------------- 16 files changed, 6624 insertions(+), 4296 deletions(-) create mode 100644 alliance/share/tutorials/addaccu/addaccu.pdf create mode 100644 alliance/share/tutorials/addaccu/addaccu.ps delete mode 100644 alliance/share/tutorials/addaccu/tex.tgz create mode 100644 alliance/share/tutorials/addaccu/tex/Makefile create mode 100644 alliance/share/tutorials/addaccu/tex/addaccu.eps create mode 100644 alliance/share/tutorials/addaccu/tex/addaccu.fig create mode 100644 alliance/share/tutorials/addaccu/tex/addaccu.tex create mode 100644 alliance/share/tutorials/addaccu/tex/hierarchy.eps create mode 100644 alliance/share/tutorials/addaccu/tex/hierarchy.fig delete mode 100644 alliance/share/tutorials/addaccu/tutorial.ps create mode 100644 alliance/share/tutorials/amd2901/amd2901.pdf create mode 100644 alliance/share/tutorials/amd2901/amd2901.ps delete mode 100644 alliance/share/tutorials/amd2901/tex.tgz create mode 100644 alliance/share/tutorials/amd2901/tex/Makefile create mode 100644 alliance/share/tutorials/amd2901/tex/amd2901.tex delete mode 100644 alliance/share/tutorials/amd2901/tutorial.ps diff --git a/alliance/share/tutorials/addaccu/addaccu.pdf b/alliance/share/tutorials/addaccu/addaccu.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e52b939f8f65796baf497523028dd2a396a43a31 GIT binary patch literal 155871 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

_>< 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 l_smPn2Z{poo15 +D E +%EndDVIPSBitmapFont +/Fc 103[35 27[35 1[35 35 35 35 35 35 35 35 35 35 35 35 +35 35 35 35 1[35 35 35 35 35 35 35 35 35 1[35 1[35 1[35 +35 35 35 35 35 35 35 35 35 1[35 35 35 35 35 35 1[35 35 +35 35 35 35 35 35 35 35 1[35 35 35 1[35 35 35 35 35 35 +35 35 35 35 35 35 35 35 35 1[35 35 35 35 1[35 1[35 1[35 +33[{TeXBase1Encoding ReEncodeFont}80 58.1154 /Courier +rf /Fd 103[40 30[40 40 1[40 40 40 40 40 1[40 40 40 40 +40 40 1[40 40 40 40 40 40 40 40 40 1[40 7[40 1[40 40 +40 40 1[40 40 40 40 40 40 1[40 40 2[40 40 40 40 40 6[40 +4[40 2[40 40 40 40 40 40 3[40 3[40 40 36[{TeXBase1Encoding ReEncodeFont} +53 66.4176 /Courier rf /Fe 134[50 50 50 50 50 50 50 50 +1[50 50 50 50 50 50 1[50 50 50 50 50 50 50 50 50 1[50 +1[50 1[50 4[50 1[50 50 50 1[50 50 50 50 50 50 1[50 50 +50 50 50 50 50 50 50 50 5[50 3[50 50 1[50 50 50 50 50 +50 50 50 2[50 3[50 50 50 35[{TeXBase1Encoding ReEncodeFont}61 +83.022 /Courier rf /Ff 145[51 1[28 2[28 1[46 1[42 1[37 +51 42 10[65 9[51 3[69 3[69 60 1[65 1[37 63[{ +TeXBase1Encoding ReEncodeFont}15 83.022 /Palatino-Bold +rf /Fg 133[60 66 60 100 66 73 40 53 47 1[73 66 73 106 +40 2[40 73 66 1[60 73 53 73 60 13[73 4[100 4[47 2[66 +73 100 86 80 8[60 60 60 60 60 60 60 60 60 60 2[40 41[73 +73 2[{TeXBase1Encoding ReEncodeFont}43 119.552 /Palatino-Bold +rf /Fh 138[50 50 50 50 1[50 50 50 1[50 2[50 2[50 50 1[50 +1[50 32[50 9[50 7[50 50 45[{TeXBase1Encoding ReEncodeFont}17 +83.022 /Courier-Oblique rf /Fi 145[46 1[28 2[28 3[37 +1[37 1[46 31[60 65[{TeXBase1Encoding ReEncodeFont}7 83.022 +/Palatino-BoldItalic rf /Fj 134[42 42 60 42 46 28 32 +32 1[42 37 46 65 23 37 1[23 42 42 23 32 42 34 38 37 12[51 +46 13[51 65 55 1[60 18[21 28 21 1[32 38[45 44 2[{ +TeXBase1Encoding ReEncodeFont}35 83.022 /Palatino-Italic +rf /Fk 104[83 2[42 25[42 46 43 69 47 50 27 35 33 46 50 +45 48 73 24 46 19 24 48 46 28 40 51 37 46 42 7[55 1[83 +60 65 51 44 55 1[50 65 69 79 51 1[28 28 69 1[46 51 64 +59 51 65 5[21 21 42 42 42 42 42 42 42 42 42 42 50 21 +28 21 2[28 28 23 5[23 29[50 50 2[{TeXBase1Encoding ReEncodeFont}71 +83.022 /Palatino-Roman rf /Fl 138[124 16[124 124 1[124 +97[{TeXBase1Encoding ReEncodeFont}4 206.559 /Courier-Bold +rf /Fm 138[126 69 1[80 2[115 126 1[69 2[69 126 2[103 +1[92 1[103 31[161 65[{TeXBase1Encoding ReEncodeFont}12 +206.559 /Palatino-Bold rf /Fn 138[125 67 88 82 1[124 +1[120 4[60 1[115 1[99 30[115 70[{TeXBase1Encoding ReEncodeFont}10 +206.559 /Palatino-Roman rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%PaperSize: A4 + +%%EndSetup +%%Page: 1 1 +1 0 bop 667 588 a Fn(First)52 b(steps)f(in)h(using)f +Fm(Alliance)964 887 y(the)h Fl(addaccu)f Fm(tutorial)1793 +1645 y Fk(Abstract)385 1848 y Fj(This)27 b(tutorial)h(intr)o(oduces)g +(the)f(design)h(\003ow)g(to)g(be)g(used)h(in)f(the)f +Fi(Alliance)g Fj(CAD)h(framework)g(for)g(the)385 1967 +y(design)23 b(and)g(veri\002cation)f(of)i(a)f(standard)f(cells)i(cir)o +(cuit,)f(including)g(the)g(pads.)32 b(Each)22 b(step)h(of)g(the)g +(desgin)385 2087 y(\003ow)e(is)g(supported)e(by)i(one)g(or)g(mor)o(e)f +(speci\002c)h(tools,)f(whose)h(use)g(is)g(brie\003y)h(explained.)385 +2240 y(This)32 b(text)g(is)g(meant)h(to)f(be)h(simple)f(and)g(compr)o +(ehensive,)j(and)d(is)h(to)f(be)h(used)g(to)f(get)g Fk(into)h +Fj(the)f(sys-)385 2359 y(tem.)61 b(Should)32 b(something)f(be)j +(unclear)f(or)g(wr)o(ong,)i(please)e(indicate)f(this)g(by)h(sending)f +(an)h(e-mail)f(to)385 2479 y Fh(alliance-support@lip6.fr)p +Fj(.)177 2794 y Fg(1)119 b(Introduction)177 3004 y Fk(In)27 +b(this)h(tutorial,)g(you)f(will)h(learn)e(the)h(practical)e(use)i(of)g +(some)g(basic)g Ff(Alliance)d Fk(tools)j(by)g(building)h(a)e(very)177 +3123 y(simple)f(cir)o(cuit)f(fr)o(om)g(scratch.)37 b(It)24 +b(is)h(r)o(ecommended)f(that)g(you)h(r)o(ead)e(the)i +Fe(overview.ps)d Fk(\002le)j(befor)o(e)e(pr)o(o-)177 +3243 y(ceeding,)d(as)h(it)g(describes)f(the)h(main)g(steps)g(of)g(the)f +(design)i(conceptually)-9 b(.)302 3362 y(Befor)o(e)29 +b(we)i(pr)o(oceed)f(to)h(the)h(tutorial,)h(you)f(must)f(make)g(sur)o(e) +f(that)h(the)h Ff(Alliance)c Fk(tools)k(ar)o(e)e(r)o(eadilly)177 +3482 y(available)20 b(when)h(invoking)h(them)g(at)e(the)h(pr)o(ompt.)k +(The)c(pr)o(ompt)f(in)i(r)o(epr)o(esented)c(in)k(the)f(following)h +(text)e(by)177 3601 y(the)h(symbol)h(:)p 177 3684 3526 +4 v 177 3783 4 100 v 205 3751 a Fd(\230fred/addaccu)38 +b(\045-\))p 3699 3783 V 177 3786 3526 4 v 3701 3803 19 +106 v 194 3803 3526 19 v 201 3922 a Fk(In)25 b(this)g(system,)g +Fe(fred)f Fk(is)h(the)f(user)-6 b(,)24 b Fe(addaccu)f +Fk(is)i(the)f(curr)o(ent)g(dir)o(ectory)-9 b(,)24 b(and)f +Fe(\045-\))h Fk(is)h(supposed)f(to)g(give)177 4042 y(us)d(courage!)302 +4161 y(T)-7 b(ry)20 b(issuing)i(the)f(following)h(command)f(to)g(check) +g(that)g Ff(Alliance)d Fk(is)j(corr)o(ectly)f(installed:)p +177 4244 3526 4 v 177 4346 4 103 v 205 4310 a Fd(\230fred/addaccu)38 +b(\045-\))i(yagle)p 3699 4346 V 177 4349 3526 4 v 3701 +4366 19 109 v 194 4366 3526 19 v 302 4605 a Fk(If)20 +b(everything)h(is)g(working,)h(you)f(get)g(the)g(following)h(r)o +(esult:)1928 6122 y(1)p eop +%%Page: 2 2 +2 1 bop 446 443 2973 4 v 446 1825 4 1382 v 520 550 a +Fc(YAGLE)34 b(2.00)520 630 y(Usage)104 b(:)35 b(yagle)f([options])g +()g([file2])520 709 y(Options)g(:)h(-i)174 b(reads)34 +b(the)g('.inf')h(file)869 789 y(-v)174 b(vectorises)33 +b(the)i(vhdl)f(description)869 869 y(-p=n)104 b(n)35 +b(is)f(the)h(depth)f(for)g(functional)g(analysis)869 +948 y(-nc)139 b(no)34 b(detection)g(of)h(complex)f(gates)869 +1028 y(-nl)139 b(no)34 b(latch)h(detection)869 1108 y(-fcl)104 +b(transistor)33 b(netlist)h(detection)869 1187 y(-elp)104 +b(use)34 b(the)h(technology)e(file)i('.elp')869 1267 +y(-d)174 b(generates)33 b(a)i(.cns)g(file)869 1347 y(-b)174 +b(transistor)33 b(orientation)869 1427 y(-z)174 b(functional)33 +b(analysis)h(through)g(HZ)h(nodes)869 1506 y(-os)139 +b(only)34 b(one)h(vdd)f(and)h(vss)f(in)h(the)f(vhdl)g(description)869 +1586 y(-nh)139 b(generates)33 b(a)i(hierarchical)f(cone)g(netlist)869 +1666 y(file2)69 b(is)34 b(the)h(vhdl)f(file)h(to)f(be)h(generated)e +(\(default)h(is)h(file1\))869 1745 y(-t)174 b(display)34 +b(execution)f(trace)p 3415 1825 V 446 1828 2973 4 v 3417 +1862 35 1389 v 479 1862 2973 35 v 302 2101 a Fk(If)20 +b(it)h(does)g(not)g(work,)g(please)f(abort)h(the)g(tutorial)g(and)f +(\002x)h(the)g(pathnames.)302 2220 y(W)-8 b(e)24 b(will)i(assume)e +(that)h(the)f(user)h(is)g(r)o(unning)h(a)e Fe(c-like)f +Fk(shell,)j(like)f Fe(csh)f Fk(or)h Fe(tcsh)p Fk(.)36 +b(If)24 b(you)h(r)o(un)g(a)f Fe(sh-)177 2340 y(like)c +Fk(shell,)h(please)f(r)o(efer)f(to)j(your)f(documentation.)302 +2460 y(T)-7 b(ypically)20 b(do:)p 177 2542 3526 4 v 177 +2739 4 197 v 205 2611 a Fd(\230fred/addaccu)38 b(\045-\))i(setenv)f +(ALLIANCE_TOP)78 b(/usr/local/cad/alliance)205 2705 y(\230fred/addaccu) +38 b(\045-\))i(setenv)f(PATH)g($ALLIANCE_TOP/bin:$PATH)p +3699 2739 V 177 2742 3526 4 v 3701 2759 19 204 v 194 +2759 3526 19 v 201 2878 a Fk(Wher)o(e)23 b(we)h(assume)g(that)g +Ff(Alliance)d Fk(has)j(been)g(installed)g(under)f Fe +(/usr/local/cad/alliance)d Fk(dir)o(ec-)177 2998 y(tory)-9 +b(.)26 b(In)21 b(the)g(sequel,)g(we)f(will)i(assume)f(that)f(the)h +Fe($ALLIANCE_TOP)e Fk(variable)g(is)i(pr)o(operly)f(set)h(up.)302 +3107 y(All)j(the)h(tools)g(used)g(in)f(this)i(tutorial)e(ar)o(e)f +(documented)i(at)f(least)g(with)h(a)f(manual)h(page.)36 +b(Each)24 b(manual)177 3217 y(can)d(be)f(accessed)g(using)h(the)g +Fe(man)50 b Fj(tool)20 b Fk(command.)26 b(Y)-8 b(ou)21 +b(may)g(have)f(to)i(do)e(a:)p 177 3299 3526 4 v 177 3401 +4 103 v 205 3368 a Fd(\230fred/addaccu)38 b(\045-\))i(setenv)f(MANPATH) +f($ALLIANCE_TOP/man:$MANPATH)p 3699 3401 V 177 3404 3526 +4 v 3701 3421 19 109 v 194 3421 3526 19 v 196 3541 a +Fk(in)21 b(or)o(der)f(to)h(have)f(the)h(manual)g(accessible.)302 +3660 y(The)f(tutorial)h(is)g(or)o(ganized)f(ar)o(ound)g(the)h +(following)h(sections:)302 3840 y Fb(\017)41 b Fk(Chip)21 +b(overview)f(\(page)g Ff(??)p Fk(\);)302 4022 y Fb(\017)41 +b Fk(Design)21 b(\003ow)h(\(page)e Ff(??)p Fk(\);)302 +4205 y Fb(\017)41 b Fk(Execution)21 b(envir)o(onment)g(set-up)f(\(page) +g Ff(??)p Fk(\);)302 4388 y Fb(\017)41 b Fk(Behavioral)20 +b(captur)o(e)f(and)h(simulation)i(\(page)e Ff(??)p Fk(\);)302 +4571 y Fb(\017)41 b Fk(Netlist)21 b(captur)o(e)e(\(page)h +Ff(??)p Fk(\);)302 4753 y Fb(\017)41 b Fk(Cor)o(e)20 +b(layout)h(generation)g(\(page)e Ff(??)p Fk(\);)302 4936 +y Fb(\017)41 b Fk(Cor)o(e)20 b(layout)h(veri\002cation)g(\(page)e +Ff(??)p Fk(\);)302 5119 y Fb(\017)41 b Fk(Cor)o(e)20 +b(to)h(pads)f(r)o(outing)h(\(page)f Ff(??)p Fk(\);)302 +5302 y Fb(\017)41 b Fk(Chip)21 b(visualization)g(\(page)e +Ff(??)p Fk(\);)302 5484 y Fb(\017)41 b Fk(Functional)21 +b(abstraction)g(\(page)f Ff(??)o Fk(\);)302 5667 y Fb(\017)41 +b Fk(Further)20 b(veri\002cations)h(\(page)f Ff(??)p +Fk(\);)302 5850 y Fb(\017)41 b Fk(Symbolic)21 b(to)g(r)o(eal)f +(technology)i(conversion)g(\(page)d Ff(??)p Fk(\).)1928 +6122 y(2)p eop +%%Page: 3 3 +3 2 bop 1004 523 a + 14917438 9397980 0 -12235407 19142492 0 startTexFig + + -90 rotate + 1004 523 a +%%BeginDocument: addaccu.eps +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: addaccu.fig +%%Creator: fig2dev Version 3.1 Patchlevel 1 +%%CreationDate: Wed Oct 18 14:09:38 1995 +%%For: fred@fado (Frederic PETROT) +%%Orientation: Landscape +%%BoundingBox: 0 0 186 291 +%%Pages: 0 +%%BeginSetup +%%IncludeFeature: *PageSize A4 +%%EndSetup +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {} def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-26.0 -14.0 translate + 90 rotate +1 -1 scale + +/clp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/l {lineto} bind def +/m {moveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def +%%EndProlog + +$F2psBegin +10 setmiterlimit + 0.06299 0.06299 sc +7.500 slw +% Polyline +n 2252 1553 m 2252 2273 l 2927 1553 l 2927 1103 l 2252 428 l 2252 1103 l + 2522 1328 l 2252 1553 l gs 0.00 setgray ef gr gs col-1 s gr +/Courier-Bold findfont 180.00 scalefont setfont +2657 1426 m +gs 1 -1 sc (+) col-1 show gr +% Polyline +n 1622 1532 m 1892 1532 l 1892 2252 l 1622 2252 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 1622 1532 m 1892 1892 l 1622 2252 l gs 0.00 setgray ef gr gs col-1 s gr +% Ellipse +n 1578 1308 37 37 0 360 DrawEllipse gs 0.00 setgray ef gr gs col-1 s gr + +% Polyline +n 1534 1309 m 1263 1173 l 1263 1443 l 1534 1309 l gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 2253 2388 m 2523 2388 l 2523 3108 l 2253 3108 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Ellipse +n 1532 1352 37 37 0 360 DrawEllipse gs 1.00 setgray ef gr gs col-1 s gr + +% Polyline +n 1488 1353 m 1217 1217 l 1217 1487 l 1488 1353 l gs 1.00 setgray ef gr gs col-1 s gr +% Polyline +n 1576 1576 m 1846 1576 l 1846 2296 l 1576 2296 l clp gs 1.00 setgray ef gr gs col-1 s gr +% Polyline +n 2206 1597 m 2206 2317 l 2881 1597 l 2881 1147 l 2206 472 l 2206 1147 l + 2476 1372 l 2206 1597 l gs 1.00 setgray ef gr gs col-1 s gr +% Polyline +n 2207 2432 m 2477 2432 l 2477 3152 l 2207 3152 l clp gs 1.00 setgray ef gr gs col-1 s gr +% Polyline +n 2252 2522 m 2342 2522 l 2342 2927 l 2432 2927 l gs 1.00 setgray ef gr gs col-1 s gr +% Polyline +n 2207 3152 m 2342 2972 l 2477 3152 l gs col-1 s gr +30.000 slw +% Polyline +n 1846 1935 m 2115 1935 l gs col7 1.00 shd ef gr gs col7 s gr +% Polyline +n 2565 855 m 2565 586 l gs col7 1.00 shd ef gr gs col7 s gr +% Polyline +n 2476 2790 m 2745 2790 l gs col7 1.00 shd ef gr gs col7 s gr +% Polyline +n 1576 1350 m 1845 1350 l gs col7 1.00 shd ef gr gs col7 s gr +% Polyline +n 2881 1350 m 3150 1350 l gs col7 1.00 shd ef gr gs col7 s gr +/Courier-Bold findfont 270.00 scalefont setfont +2565 1440 m +gs 1 -1 sc (+) col-1 show gr +7.500 slw +% Polyline +n 1576 1576 m 1846 1936 l 1576 2296 l gs col-1 s gr +% Polyline +n 2881 1351 m 2881 1351 l gs col-1 s gr +% Polyline +n 1846 1936 m 2206 1936 l gs col-1 s gr +% Polyline +n 2340 2565 m 2340 2790 l gs col-1 s gr +n 2370.00 2670.00 m 2340.00 2790.00 l 2310.00 2670.00 l 2340.50 2670.50 l 2370.00 2670.00 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 1216 1351 m 901 1351 l gs col-1 s gr +% Polyline +n 1711 1576 m 1711 1351 l 1576 1351 l gs col-1 s gr +% Polyline +n 2566 856 m 2566 541 l 4141 541 l gs col-1 s gr +% Polyline +n 901 3286 m 2341 3286 l 2341 3151 l gs col-1 s gr +% Polyline +n 2476 2790 m 3556 2790 l 3556 1350 l gs col-1 s gr +% Polyline +n 2476 2791 m 3556 2791 l 3556 1351 l gs col-1 s gr +% Polyline +n 1126 2116 m 1126 2791 l 2206 2791 l gs col-1 s gr +% Polyline +n 901 1756 m 1576 1756 l gs col-1 s gr +% Polyline +n 1126 2116 m 1576 2116 l gs col-1 s gr +% Polyline +n 901 811 m 2206 811 l gs col-1 s gr +/Courier-Bold findfont 180.00 scalefont setfont +225 855 m +gs 1 -1 sc (b[3:0]) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +225 3330 m +gs 1 -1 sc (ck) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +4185 1395 m +gs 1 -1 sc (s[3:0]) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +4230 585 m +gs 1 -1 sc (cout) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +225 1800 m +gs 1 -1 sc (a[3:0]) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +225 1395 m +gs 1 -1 sc (sel) col-1 show gr +% Polyline +n 2881 1351 m 4141 1351 l gs col-1 s gr +$F2psEnd +restore + +%%EndDocument + + endTexFig + 1112 1896 a Fk(Figur)o(e)20 b(1:)25 b(Ar)o(chitectur)o(e)19 +b(of)i(the)f Fe(addaccu)g Fk(cir)o(cuit.)177 2172 y Fg(2)119 +b(Chip)31 b(overview)177 2381 y Fk(The)23 b(pictur)o(e)g(in)g(the)h +(Figur)o(e)e Ff(??)h Fk(shows)i(the)e(ar)o(chitectur)o(e)e(of)j(the)f +(small)g(chip)h(that)f(will)h(be)f(our)g(example)g(all)177 +2500 y(along)d(this)g(tutorial.)25 b(As)18 b(you)i(can)f(see,)g(the)g +(cir)o(cuit)f(is)i(pr)o(etty)e(small:)25 b(it)19 b(mostly)i(consists)f +(in)g(a)e(four)h(bit)g(adder)-6 b(,)177 2620 y(a)20 b(four)h(bit)g(r)o +(egister)-6 b(,)19 b(and)i(a)f(2)g(to)h(1)g(four)f(bit)h(multiplexer)-6 +b(.)302 2739 y(Inputs)21 b(ar)o(e)f(located)g(on)h(the)g(left)g(side)g +(of)f(the)h(pictur)o(e,)f(and)h(outputs)g(ar)o(e)f(located)g(on)h(the)g +(right)h(side.)j(W)-8 b(e)177 2859 y(did)19 b(not)h(r)o(epr)o(esent)d +(the)j(power)f(supplies)g(on)h(this)g(schematic,)f(but)h(you'll)g(need) +f(them)g(in)h(or)o(der)e(for)h(the)g(chip)177 2978 y(to)i(work!)302 +3098 y(The)f(cir)o(cuit)g(performs)g(an)h(addition)f(between)g(either)h +(the)f Fe(b[3:0])g Fk(and)g Fe(a[3:0])f Fk(inputs)i(when)g +Fe(sel)f Fk(is)177 3218 y(set)27 b(to)g(0,)g(or)g(between)f +Fe(b[3:0])f Fk(and)h(the)h(contents)h(of)e(the)h(four)f(bit)h(r)o +(egister)f(when)h Fe(sel)f Fk(is)h(set)f(to)h(1.)42 b(The)177 +3337 y(content)25 b(of)g(the)f(r)o(egister)g(is)g(overwriten)h(by)f +(the)h(value)e(of)i(the)f(outputs)h Fe(s[3:0])e Fk(on)i(each)f(falling) +h(edge)e(of)177 3457 y(the)e(clock,)g Fe(ck)p Fk(.)177 +3772 y Fg(3)119 b(Design)30 b(\003ow)177 3981 y Fk(Y)-8 +b(ou)20 b(ar)o(e)e(now)i(r)o(eady)d(to)i(actually)g(design)g(the)g +(chip)g(and)g(use)g(the)g Ff(Alliance)d Fk(tools.)26 +b(The)19 b(design)g(\003ow)h(for)f(this)177 4101 y(little)i(example)f +(is)h(composed)h(of)e(5)h(main)g(steps:)281 4287 y(1.)41 +b(behavioral)20 b(captur)o(e)f(and)h(simulation;)281 +4473 y(2.)41 b(netlist)21 b(captur)o(e)e(and)i(validation;)281 +4659 y(3.)41 b(physical)21 b(layout)g(generation;)281 +4845 y(4.)41 b(design)21 b(validation;)281 5031 y(5.)41 +b(symbolic)22 b(to)f(r)o(eal)e(conversion.)302 5217 y(As)h(you)i(will)f +(see,)g(points)g(2)g(and)f(3)h(must)g(be)g(performed)e(for)i(each)f +(level)h(of)g(hierar)o(chy)-9 b(.)24 b(In)e(this)f(example)177 +5336 y(we)f(distinguish)h(two)g(levels)f(of)g(hierar)o(chy:)k(the)c +(cor)o(e)f(level)h(and)f(the)h(chip)g(level.)25 b(At)20 +b(the)g(cor)o(e)f(level,)g(the)h(leaf)177 5456 y(cells)27 +b(of)g(the)g(design)h(belong)f(to)h(the)f Ff(Alliance)d +Fk(standar)o(d)h(cells)i(library)-9 b(.)44 b(At)26 b(the)h(chip)h +(level,)g(the)f(pr)o(evious)177 5575 y(cor)o(e)20 b(and)g(pads)h +(belonging)h(to)f(the)g Ff(Alliance)d Fk(pad)h(library)i(ar)o(e)e +(used.)302 5695 y(The)h(Figur)o(e)h Ff(??)f Fk(below)h(describes)g(the) +f(cir)o(cuit's)h(hierar)o(chy)-9 b(.)1928 6122 y(3)p +eop +%%Page: 4 4 +4 3 bop 295 523 a + 26105517 13052755 0 0 40587345 20326563 startTexFig + 295 523 a +%%BeginDocument: hierarchy.eps +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: hierarchy.fig +%%Creator: fig2dev Version 3.1 Patchlevel 1 +%%CreationDate: Thu Oct 12 13:34:26 1995 +%%For: fred@fado (Frederic PETROT) +%%Orientation: Portrait +%%BoundingBox: 0 0 617 309 +%%Pages: 0 +%%BeginSetup +%%IncludeFeature: *PageSize A4 +%%EndSetup +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {} def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-60.0 380.0 translate +1 -1 scale + +/clp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/l {lineto} bind def +/m {moveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def +%%EndProlog + +$F2psBegin +10 setmiterlimit + 0.06299 0.06299 sc +7.500 slw +% Ellipse +n 4636 5446 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +% Ellipse +n 1531 5446 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +1321 5468 m +gs 1 -1 sc (ms_y) col0 show gr +% Ellipse +n 2836 3466 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +2626 3511 m +gs 1 -1 sc (core) col0 show gr +/Courier-Bold findfont 180.00 scalefont setfont +5131 3468 m +gs 1 -1 sc (pi_sp ) col0 show gr +% Ellipse +n 5446 3443 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +% Ellipse +n 7112 3444 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +6744 3489 m +gs 1 -1 sc (piot_sp) col0 show gr +% Ellipse +n 8708 3443 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +8393 3488 m +gs 1 -1 sc (pck_sp) col0 show gr +% Ellipse +n 10261 3466 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +10103 3481 m +gs 1 -1 sc (...) col0 show gr +% Ellipse +n 6211 5446 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +6053 5461 m +gs 1 -1 sc (...) col0 show gr +/Courier-Bold findfont 180.00 scalefont setfont +3773 1688 m +gs 1 -1 sc (addaccu) col0 show gr +/Courier-Bold findfont 180.00 scalefont setfont +4426 5491 m +gs 1 -1 sc (n1_y) col0 show gr +% Ellipse +n 3061 5423 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +2798 5468 m +gs 1 -1 sc (na2_y) col0 show gr +% Ellipse +n 4141 1621 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +% Ellipse +n 4544 5534 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 5354 3531 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 1439 5534 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 2969 5511 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 2744 3554 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col-1 s gr + +% Ellipse +n 6119 5534 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 4049 1709 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 7020 3532 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 8616 3531 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 10169 3554 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col-1 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +5039 3556 m +gs 1 -1 sc (pi_sp ) col-1 show gr +% Polyline +n 4320 2205 m 5040 3060 l gs col-1 s gr +n 4985.65 2948.89 m 5040.00 3060.00 l 4939.76 2987.53 l 4963.20 2968.71 l 4985.65 2948.89 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 4365 2160 m 6795 3015 l gs col-1 s gr +n 6691.76 2946.87 m 6795.00 3015.00 l 6671.85 3003.47 l 6682.30 2975.67 l 6691.76 2946.87 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 4410 2115 m 8325 3105 l gs col-1 s gr +n 8216.02 3046.50 m 8325.00 3105.00 l 8201.31 3104.67 l 8209.16 3076.08 l 8216.02 3046.50 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 4455 2070 m 9810 3105 l gs col-1 s gr +n 9697.87 3052.77 m 9810.00 3105.00 l 9686.49 3111.68 l 9692.68 3082.73 l 9697.87 3052.77 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 2565 4050 m 1530 4995 l gs col-1 s gr +n 1638.85 4936.24 m 1530.00 4995.00 l 1598.39 4891.93 l 1619.12 4914.59 l 1638.85 4936.24 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 2745 4095 m 2970 4995 l gs col-1 s gr +n 2970.00 4871.31 m 2970.00 4995.00 l 2911.79 4885.86 l 2941.40 4879.08 l 2970.00 4871.31 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 2970 4095 m 4275 5040 l gs col-1 s gr +n 4195.40 4945.32 m 4275.00 5040.00 l 4160.21 4993.92 l 4178.31 4970.12 l 4195.40 4945.32 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 3105 4050 m 5805 5040 l gs col-1 s gr +n 5702.66 4970.52 m 5805.00 5040.00 l 5682.01 5026.86 l 5692.83 4999.19 l 5702.66 4970.52 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 3735 2160 m 3015 3060 l gs col-1 s gr +n 3113.39 2985.04 m 3015.00 3060.00 l 3066.54 2947.55 l 3090.46 2966.80 l 3113.39 2985.04 l clp gs 0.00 setgray ef gr gs col-1 s gr +/Courier-Bold findfont 180.00 scalefont setfont +1229 5556 m +gs 1 -1 sc (ms_y) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +2706 5556 m +gs 1 -1 sc (na2_y) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +4334 5579 m +gs 1 -1 sc (n1_y) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +3681 1776 m +gs 1 -1 sc (addaccu) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +6652 3577 m +gs 1 -1 sc (piot_sp) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +8301 3576 m +gs 1 -1 sc (pck_sp) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +5961 5549 m +gs 1 -1 sc (...) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +10011 3569 m +gs 1 -1 sc (...) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +2534 3599 m +gs 1 -1 sc (core) col-1 show gr +$F2psEnd +restore + +%%EndDocument + + endTexFig + 1286 2359 a Fk(Figur)o(e)20 b(2:)25 b(Hierar)o(chical)20 +b(partitionning.)177 2632 y Fg(4)119 b(Execution)30 b(environment)g +(set-up)177 2842 y Fk(Befor)o(e)21 b(you)i(start)e(examining)i(the)f +(\002rst)h(phase)f(of)g(the)g(design)g(methodology)-9 +b(,)24 b(you)f(\002rst)f(have)g(to)g(set)h(up)f(an)177 +2961 y(execution)f(envir)o(onment)g(for)g(the)g Ff(Alliance)d +Fk(tools.)302 3081 y(If)j(the)h Ff(Alliance)d Fk(installation)k(is)f +(set)g(up)g(pr)o(operly)-9 b(,)21 b(most)i(of)f(the)g(tools)g(can)g(be) +g(executed)e(without)j(pr)o(ob-)177 3200 y(lem.)i(If)18 +b(the)h(installation)h(is)f(only)h(partial,)e(or)g(if)h(you)g(want)g +(to)g(set)g(a)f(special)g(featur)o(e)f(of)h(a)h(tool,)g(you)h(will)f +(have)177 3320 y(to)i(set)g(some)g(envir)o(onment)h(variables)d(up.)302 +3439 y(The)27 b(envir)o(onment)i(variables)e(upon)h(the)g(which)h(each) +e(tool)i(depends)e(ar)o(e)f(documented)i(in)g(each)g(tool)177 +3559 y(manual)21 b(page.)k(However)-6 b(,)20 b(some)h(variables)f(ar)o +(e)f(r)o(eally)h(useful,)g(and)h(ar)o(e)e(in)i(part)f(documented)h(her) +o(e.)177 3825 y Fa(4.1)99 b(Cell)25 b(libraries)g(path)177 +4003 y Fk(The)17 b(\002rst)g(thing)h(to)f(know)h(for)e(this)h(cir)o +(cuit)g(is)g(the)g(actual)f(location)h(of)g(the)g(standar)o(d-cell)d +(library)-9 b(.)24 b(This)17 b(library)177 4122 y(is)27 +b(located)e(into)j Fe($ALLIANCE)p 1181 4122 25 4 v 28 +w(TOP/cells/sclib)p Fk(.)39 b(But)26 b(indicating)h(only)g(one)f +(library)g(is)h(not)g(enough,)177 4242 y(and)20 b(as)h(you)g(can)g(see) +f(in)h(doing)h(a)e Fe(ls)50 b($ALLIANCE)p 1877 4242 V +28 w(TOP/cells)p Fk(,)19 b(several)g(libraries)i(ar)o(e)e(available.) +302 4361 y(The)f(other)h(library)f(of)h(inter)o(est)f(her)o(e)g(is)h +(the)g(pad)f(library)-9 b(,)18 b(located)g(in)h Fe($ALLIANCE)p +2979 4361 V 28 w(TOP/cells/ring)p Fk(.)302 4471 y(T)-8 +b(o)21 b(set)g(up)g(the)f(cell)h(library)f(path,)h(the)g(following)h +(command)f(is)g(r)o(equir)o(ed:)p 177 4553 3526 4 v 177 +4657 4 105 v 205 4622 a Fd(\230fred/addaccu)38 b(\045-\))i(setenv)f +(MBK_CATA_LIB)f($ALLIANCE_TOP/cells/scr:$ALLIANCE_TOP/cell)o(s/ring)p +3699 4657 V 177 4660 3526 4 v 3701 4677 19 111 v 194 +4677 3526 19 v 302 4916 a Fk(This)23 b Fe(setenv)f Fk(instr)o(ucts)i +Ff(Alliance)c Fk(tools)k(to)f(sear)o(ch)f(its)i(cells)f(in)g +Fe(/alliance/cells/scr)d Fk(and)i(then)177 5036 y(in)f +Fe(/alliance/cells/ring)p Fk(,)c(that)k(r)o(espectively)f(contains)h +(the)g(standar)o(d)e(cells)i(and)f(the)h(pads.)177 5302 +y Fa(4.2)99 b(User)25 b(working)g(directory)177 5480 +y Fk(Y)-8 b(ou)22 b(must)f(specify)g(the)g(dir)o(ectory)f(wher)o(e)g +(the)h(\002les)g(generated)e(by)i(an)g Ff(Alliance)d +Fk(tool)j(ar)o(e)f(to)h(be)f(located.)302 5590 y(Please)g(enter)g(the)h +(following)i(command:)p 177 5672 3526 4 v 177 5772 4 +101 v 205 5739 a Fd(\230fred/addaccu)38 b(\045-\))i(setenv)f +(MBK_WORK_LIB)f(.)p 3699 5772 V 177 5775 3526 4 v 3701 +5792 19 107 v 194 5792 3526 19 v 1928 6122 a Fk(4)p eop +%%Page: 5 5 +5 4 bop 302 643 a Fk(In)24 b(this)h(case,)f(the)g(working)i(dir)o +(ectory)d(is)i(the)f(curr)o(ent)f(dir)o(ectory)-9 b(.)35 +b(This)24 b(library)g(is)h(scanned)e(befor)o(e)g(the)177 +762 y(ones)e(set)g(in)g Fe(MBK)p 737 762 25 4 v 29 w(CATA)p +966 762 V 29 w(LIB)f Fk(when)h(a)f(tool)i(loads)e(a)g(cell,)g(and)g +(the)h(only)g(one)g(used)f(for)h(writing)g(a)f(cell.)25 +b(Note)177 882 y(that)c Fe(.)k Fk(is)d(the)e(default)g(value)g(of)h +(this)h(variable,)d(so)i(it)g(is)g(not)h(r)o(equir)o(ed)d(to)i(set)g +(it)g(up)g(usually)-9 b(.)177 1148 y Fa(4.3)99 b(File)26 +b(formats)177 1326 y Fk(One)20 b(of)f(the)g(inter)o(esting)h(featur)o +(es)d(of)i Ff(Alliance)d Fk(is)k(that)f(dif)o(fer)o(ent)e(\002le)i +(formats)g(can)g(be)g(used)g(for)g(both)h(netlist)177 +1445 y(and)28 b(layout)g(view)-8 b(.)47 b(However)-6 +b(,)30 b(in)e(the)g(design)g(methodology)i(we)e(wish)h(to)f(pr)o +(omote,)i(some)e(formats)g(ar)o(e)177 1565 y(r)o(ecommended.)i(The)22 +b Fe(vst)p Fk(,)g(str)o(uctural)h Ff(VHDL)p Fk(,)e(is)i(dedicated)e(to) +i(netlist)g(speci\002cation.)31 b(The)22 b Fe(al)g Fk(format)g(is)177 +1684 y(dedicated)d(to)i(extracted)f(layout)h(r)o(epr)o(esentation.)j +(The)d Fe(ap)f Fk(format)g(is)h(the)g(usual)g(layout)g(format.)302 +1804 y(So,)f(prior)h(to)g(generate)f(a)g(speci\002cation)h(netlist,)h +(you)f(shall)g(type:)p 177 1886 3526 4 v 177 1986 4 101 +v 205 1953 a Fd(\230fred/addaccu)38 b(\045-\))i(setenv)f(MBK_OUT_LO)f +(vst)p 3699 1986 V 177 1989 3526 4 v 3701 2006 19 107 +v 194 2006 3526 19 v 302 2245 a Fk(But)20 b(if)h(you)g(wish)h(to)f +(extract)f(a)g(netlist)h(fr)o(om)g(the)g(layout)g(then)g(you'll)h(do:)p +177 2328 3526 4 v 177 2428 4 101 v 205 2394 a Fd(\230fred/addaccu)38 +b(\045-\))i(setenv)f(MBK_OUT_LO)f(al)p 3699 2428 V 177 +2431 3526 4 v 3701 2448 19 107 v 194 2448 3526 19 v 177 +2883 a Fg(5)119 b(Behavioral)30 b(capture)e(and)i(simulation)177 +3092 y Fk(When)23 b(designing)h(a)e(chip,)h(the)g(\002rst)g(thing)h(to) +f(do)g(is)g(to)g(write)g(its)g(behavior)-6 b(,)23 b(based)e(on)j(its)f +(functional)g(spec-)177 3212 y(i\002cations.)32 b(In)22 +b(our)h(example)f Fe(addaccu)p Fk(,)f(we)h(have)g(to)h(modelize)f(an)g +(adder)-6 b(,)21 b(a)h(r)o(egister)g(and)g(a)g(multiplexer)-6 +b(.)177 3331 y(W)e(e)18 b(also)h(have)e(to)h(specify)g(in)h(the)f(r)o +(esulting)g(behavior)g(\002le)g(that)g(the)g(adder)e(may)i(take)g(as)f +(an)h(input)h(the)f(r)o(esult)177 3451 y(of)j(a)f(pr)o(evious)h +(calculation)f(or)h(a)f(new)i(input)f(stimuli.)302 3570 +y(Modern)27 b(behavioral)h(descriptions)h(ar)o(e)e(written)h(using)h +(the)g Ff(VHDL)f Fk(language,)h(the)g(most)g(pr)o(omoted)177 +3690 y(and)20 b(supported)h(har)o(dwar)o(e)d(description)j(language.) +302 3809 y(Let)f(us)h(now)h(edit)e(the)h(behavioral)f(description)h(of) +g(addaccu)e(by)i(issuing)h(the)f(following)h(command:)p +177 3892 3526 4 v 177 3993 4 102 v 205 3961 a Fd(\230fred/addaccu)38 +b(\045-\))i(vi)f(addaccu.vbe)p 3699 3993 V 177 3996 3526 +4 v 3701 4013 19 108 v 194 4013 3526 19 v 302 4252 a +Fk(The)c Fe(addaccu.vbe)e Fk(\002le)j(contains)g(the)g(behavioral)e +(description)i(of)f(the)h(cir)o(cuit.)69 b Fe(Vbe)34 +b Fk(stands)i(for)177 4371 y Ff(VHDL)29 b Fk(behavioral)f(description.) +49 b(Although)30 b(this)g(tutorial)f(does)f(no)i(intend)f(to)g(explain) +f(the)h(ar)o(canes)e(of)177 4491 y Ff(VHDL)21 b Fk(pr)o(ogramming,)f +(it's)i(worth)f(noting)h(some)g(inter)o(esting)f(points:)281 +4677 y(1.)41 b(notice)21 b(that)g(the)g(entity)g(name,)f +Fe(addaccu)p Fk(,)f(identi\002es)j(the)f(cir)o(cuit;)281 +4863 y(2.)41 b(examine)22 b(the)h(cir)o(cuit)g(interface.)31 +b(Y)-8 b(ou)24 b(can)e(r)o(ecognize)g(the)h(terminals)g(of)g(the)g(pr)o +(evious)g(pictur)o(e,)f(plus)385 4982 y(4)27 b(special)g(terminals,)i +(known)f(as)g(supply)f(terminals.)46 b(The)27 b(supply)h(terminals)g +(ar)o(e)e(needed)g(for)h(the)385 5102 y(last)18 b(stage)h(of)g(the)g +(design,)g(as)g(the)g(original)g(behavioral)f(description)h(must)h(be)e +(matched)g(with)i(an)f(\224ex-)385 5221 y(tracted\224)j(behavior)-6 +b(.)35 b(If)24 b(this)h(does)f(not)h(make)f(immediate)g(sense)h(to)f +(you,)h(do)g(not)g(panic,)f(everything)385 5341 y(will)d(be)g(clear)e +(in)j(a)e(moment;)281 5527 y(3.)41 b(take)22 b(a)g(look)h(to)g(the)f +(functional)h(ar)o(chitectur)o(e)e(of)h Fe(addaccu)p +Fk(.)29 b(When)23 b(examining)g(it,)g(pay)f(attention)h(to)385 +5647 y(the)28 b Fe(reg)p 683 5647 25 4 v 29 w(bit)49 +b(register)27 b Fk(names)h(of)g(the)g(accumulator)g Fe(reg)p +Fk(,)h(as)e(they)i(will)f(be)g(used)g(later)f(in)h(the)385 +5766 y(validation)20 b(stage;)1928 6122 y(5)p eop +%%Page: 6 6 +6 5 bop 281 523 a Fk(4.)41 b(r)o(ead)20 b(car)o(efully)h(the)h +(functional)g(description.)30 b(W)-5 b(ith)23 b(a)e(little)h(work,)h +(you)f(can)g(r)o(ecognize)f(the)h(descrip-)385 643 y(tion)d(of)g(the)g +(multiplexer)-6 b(,)19 b(the)g(equations)h(of)f(the)g(adder)-6 +b(,)17 b(and)h(the)h(accumulator)-6 b(.)24 b(It)19 b(is)h(very)e +(important)385 762 y(to)27 b(notice)h(that)f(the)h(functional)g +(description)f(of)g(the)h(cir)o(cuit)f(assumes)g(that)g(edge-trigger)o +(ed)f(latches)385 882 y(ar)o(e)19 b(used.)302 1058 y(Once)25 +b(you)g(have)g(car)o(efully)e(examined)h(this)i(\002le,)g(close)f(it)g +(and)f(get)h(back)g(to)g(the)g(shell)g(pr)o(ompt,)h(for)e(the)177 +1178 y Ff(VHDL)d Fk(compilation)g(stage.)177 1441 y Fa(5.1)99 +b(Behavior)26 b(compilation)177 1619 y Fk(Once)21 b(the)g(behavioral)f +(description)h(of)g(the)g(cir)o(cuit)f(is)h(written,)g(it)g(is)g(time)g +(for)g Ff(VHDL)f Fk(compilation.)302 1739 y(Y)-8 b(ou)21 +b(ar)o(e)e(now)i(r)o(eady)e(to)i(compile)g Fe(addaccu.vbe)p +Fk(.)i(As)e(we)f(do)g(not)h(have)f(written)h(simulation)h(patterns)177 +1859 y(yet,)f(the)g(only)g(thing)h(we)f(can)f(do)h(is)g(to)g(test)g +(the)g(syntax)g(of)g(the)g(\002le)g(we)f(have)h(just)g(edited.)302 +1978 y(At)f(the)h(shell)g(pr)o(ompt)g(level,)f(please)g(type:)p +177 2060 3526 4 v 177 2161 4 102 v 205 2130 a Fd(\230fred/addaccu)38 +b(\045-\))i(asimut)f(-b)g(-c)h(addaccu)p 3699 2161 V +177 2164 3526 4 v 3701 2181 19 108 v 194 2181 3526 19 +v 302 2421 a Fk(This)31 b(command)g(instr)o(ucts)h Fe(asimut)d +Fk(to)i(compile)g(the)g(behavioral)f(\002le)h Fe(addaccu.vbe)p +Fk(.)53 b(Option)32 b Fe(-b)177 2540 y Fk(means)21 b(behavioral)f +(description,)h(and)f Fe(-c)h Fk(means)f(compilation)i(only)-9 +b(,)22 b(i.e)e(no)h(simulation.)p 446 2828 2973 4 v 446 +4930 4 2103 v 520 2937 a Fc(\230fred/addaccu)33 b(\045-\))i(asimut)f +(-b)g(-c)h(addaccu)973 3096 y(@)279 b(@@@@)34 b(@)175 +b(@)976 b(@@@@@@@@@@)973 3176 y(@)244 b(@)140 b(@@)f(@@@)941 +b(@)104 b(@@)h(@)938 3256 y(@@@)174 b(@@)g(@)h(@)941 +b(@)139 b(@@)h(@)938 3336 y(@@@)174 b(@@@)488 b(@@@)35 +b(@@)f(@@@)104 b(@@@)70 b(@@@@)243 b(@@)904 3415 y(@)69 +b(@@)174 b(@@@@)g(@@@@)139 b(@@@)35 b(@@)69 b(@@)104 +b(@@)140 b(@@)243 b(@@)904 3495 y(@)69 b(@@)244 b(@@@@)174 +b(@@)139 b(@@)70 b(@@)f(@@)104 b(@@)140 b(@@)243 b(@@)869 +3575 y(@)139 b(@@)279 b(@@@)139 b(@@)g(@@)70 b(@@)f(@@)104 +b(@@)140 b(@@)243 b(@@)869 3654 y(@@@@@@@)103 b(@)209 +b(@@)105 b(@@)139 b(@@)70 b(@@)f(@@)104 b(@@)140 b(@@)243 +b(@@)834 3734 y(@)209 b(@@)69 b(@@)174 b(@@)105 b(@@)139 +b(@@)70 b(@@)f(@@)104 b(@@)140 b(@@)243 b(@@)834 3814 +y(@)209 b(@@)69 b(@@@)139 b(@)h(@@)f(@@)70 b(@@)f(@@)104 +b(@@)h(@@@)243 b(@@)764 3894 y(@@@@)139 b(@@@@)34 b(@)70 +b(@@@@)104 b(@@@@@@)34 b(@@@@)h(@@@)f(@@@)104 b(@@@@)69 +b(@@)140 b(@@@@@@)1636 4053 y(A)35 b(SIMUlation)e(Tool)1113 +4212 y(Alliance)h(CAD)g(System)g(3.2,)313 b(asimut)35 +b(v2.01)1113 4292 y(Copyright)e(\(c\))i(1991-1997,)243 +b(ASIM/LIP6/UPMC)1113 4372 y(E-mail)34 b(support:)g +(alliance-support@asim.lip6.fr)799 4531 y(Paris,)g(France,)g(Europe,)g +(Earth,)g(Solar)g(system,)g(Milky)g(Way,)h(...)520 4611 +y(Initializing)e(...)520 4691 y(Searching)h(addaccu)g(...)520 +4770 y(BEH)g(:)h(Compiling)f(addaccu.vbe)f(\(Behaviour\))h(...)520 +4850 y(Making)g(GEX)h(...)p 3415 4930 V 446 4933 2973 +4 v 3417 4966 35 2109 v 479 4966 2973 35 v 888 5288 a +Fk(Figur)o(e)20 b(3:)25 b Fe(Asimut)20 b Fk(compiling)i(the)f +(behavioral)f(speci\002cations.)177 5576 y Fa(5.2)99 +b(Behavioral)26 b(simulation)f(and)g(validation)177 5754 +y Fk(A)16 b(behavioral)g(description)g(without)i(simulation)f(patterns) +f(is)h(useless.)24 b(In)17 b(or)o(der)e(to)h(see)g(if)h(the)f(behavior) +g(you)177 5873 y(have)21 b(just)h(written)g(is)f(functionally)h(corr)o +(ect,)e(you)i(must)g(write)g(simulation)g(patterns)f(and)g(use)g(the)h +Fe(asimut)1928 6122 y Fk(6)p eop +%%Page: 7 7 +7 6 bop 177 523 a Fk(simulator)22 b(function.)302 643 +y(Simulation)j(patterns)g(ar)o(e)e(contained)i(in)g(a)f(plain)h(text)g +(\002le,)g Fe(addaccu.pat)p Fk(.)36 b(For)25 b(mor)o(e)f(informations) +177 762 y(about)d(the)g Fe(pat)f Fk(format)h(you)g(can)g(r)o(ead)e(the) +i(appr)o(opriate)e(on-line)i(manual)g(\227)g Fe(man)49 +b(5)h(pat)20 b Fk(\227)h(or)g(r)o(ead)e(the)177 882 y(printed)i +(documentation.)302 1001 y(T)-8 b(o)21 b(get)g(acquainted)f(with)i +Fe(addaccu.pat)p Fk(,)c(please)i(issue)h(the)g(following)h(command:)p +177 1084 3526 4 v 177 1188 4 105 v 205 1152 a Fd(\230fred/addaccu)38 +b(\045-\))i(vi)f(addaccu.pat)p 3699 1188 V 177 1191 3526 +4 v 3701 1208 19 111 v 194 1208 3526 19 v 302 1447 a +Fk(Ther)o(e)24 b(ar)o(e)g(several)g(inter)o(esting)h(things)i(her)o(e.) +38 b(First,)26 b(you)g(can)f(r)o(ecognize)f(the)h(cir)o(cuit)g +(interface)f(again.)177 1566 y(Second,)h(you)g(can)f(see)h(that)f +(output)h(terminals)g(ar)o(e)e(now)j(located)e(at)g(the)h(end)f(of)g +(the)h(interface.)36 b(Or)o(dering)177 1686 y(terminals)18 +b(is)f(very)g(important)g(for)g Fe(pat)g Fk(\002les.)25 +b(The)17 b(or)o(der)f(you)h(use)h(to)f(specify)g(terminals)g(gr)o +(eatly)g(in\003uences)177 1805 y(the)33 b(way)f(you)h(will)g(have)f(to) +h(write)g(simulation)g(patterns.)61 b(It)32 b(is)h(important)g(to)g +(notice)g(that)f(simulation)177 1925 y(patterns)19 b(contain)g(both)g +(input)h(and)e(output)h(values.)25 b(The)19 b(behavior)f(must)i(be)e +(checked)g(using)i(these)f(values.)177 2044 y(Comments)j(ar)o(e)d(pr)o +(e\002xed)h(by)h(a)f Fe(#)p Fk(,)g(and)g(ar)o(e)g(of)g(much)i(inter)o +(est)e(her)o(e.)302 2164 y(Once)31 b(you)g(have)g(understood)g(the)g +(str)o(uctur)o(e)g(of)g(this)g(\002le,)j(you)d(ar)o(e)f(able)g(to)i +(simulate)f(the)g(pr)o(evious)177 2283 y(behavioral)20 +b(description.)302 2403 y(In)h(or)o(der)e(to)j(simulate,)e(please)g +(type:)p 177 2485 3526 4 v 177 2589 4 105 v 205 2554 +a Fd(\230fred/addaccu)38 b(\045-\))i(asimut)f(-b)g(addaccu)g(addaccu)g +(specifications)p 3699 2589 V 177 2592 3526 4 v 3701 +2609 19 111 v 194 2609 3526 19 v 198 2719 a Fk(to)21 +b(obtain:)1928 6122 y(7)p eop +%%Page: 8 8 +8 7 bop 446 601 2973 4 v 446 3739 4 3139 v 520 710 a +Fc(\230fred/addaccu)33 b(\045-\))i(asimut)f(-b)g(addaccu)g(addaccu)g +(specifications)973 870 y(@)279 b(@@@@)34 b(@)175 b(@)976 +b(@@@@@@@@@@)973 950 y(@)244 b(@)140 b(@@)f(@@@)941 b(@)104 +b(@@)h(@)938 1029 y(@@@)174 b(@@)g(@)h(@)941 b(@)139 +b(@@)h(@)938 1109 y(@@@)174 b(@@@)488 b(@@@)35 b(@@)f(@@@)104 +b(@@@)70 b(@@@@)243 b(@@)904 1189 y(@)69 b(@@)174 b(@@@@)g(@@@@)139 +b(@@@)35 b(@@)69 b(@@)104 b(@@)140 b(@@)243 b(@@)904 +1268 y(@)69 b(@@)244 b(@@@@)174 b(@@)139 b(@@)70 b(@@)f(@@)104 +b(@@)140 b(@@)243 b(@@)869 1348 y(@)139 b(@@)279 b(@@@)139 +b(@@)g(@@)70 b(@@)f(@@)104 b(@@)140 b(@@)243 b(@@)869 +1428 y(@@@@@@@)103 b(@)209 b(@@)105 b(@@)139 b(@@)70 +b(@@)f(@@)104 b(@@)140 b(@@)243 b(@@)834 1507 y(@)209 +b(@@)69 b(@@)174 b(@@)105 b(@@)139 b(@@)70 b(@@)f(@@)104 +b(@@)140 b(@@)243 b(@@)834 1587 y(@)209 b(@@)69 b(@@@)139 +b(@)h(@@)f(@@)70 b(@@)f(@@)104 b(@@)h(@@@)243 b(@@)764 +1667 y(@@@@)139 b(@@@@)34 b(@)70 b(@@@@)104 b(@@@@@@)34 +b(@@@@)h(@@@)f(@@@)104 b(@@@@)69 b(@@)140 b(@@@@@@)1636 +1826 y(A)35 b(SIMUlation)e(Tool)1113 2065 y(Alliance)h(CAD)g(System)g +(3.2,)313 b(asimut)35 b(v2.01)1113 2145 y(Copyright)e(\(c\))i +(1991-1997,)243 b(ASIM/LIP6/UPMC)1113 2225 y(E-mail)34 +b(support:)g(alliance-support@asim.lip6.fr)799 2384 y(Paris,)g(France,) +g(Europe,)g(Earth,)g(Solar)g(system,)g(Milky)g(Way,)h(...)520 +2464 y(Initializing)e(...)520 2544 y(Searching)h(addaccu)g(...)520 +2623 y(BEH)g(:)h(Compiling)f(addaccu.vbe)f(\(Behaviour\))h(...)520 +2703 y(Making)g(GEX)h(...)520 2862 y(Searching)f(pattern)g(file)g(:)h +(addaccu)f(...)520 2942 y(Restoring)g(...)520 3102 y(Linking)g(...)520 +3181 y(###-----)g(processing)f(pattern)h(0)h(-----###)520 +3261 y(###-----)f(processing)f(pattern)h(1)h(-----###)520 +3341 y(###-----)f(processing)f(pattern)h(2)h(-----###)520 +3420 y(###-----)f(processing)f(pattern)h(3)h(-----###)520 +3500 y(###-----)f(processing)f(pattern)h(4)h(-----###)520 +3580 y(###-----)f(processing)f(pattern)h(5)h(-----###)520 +3659 y(###-----)f(processing)f(pattern)h(6)h(-----###)p +3415 3739 V 446 3742 2973 4 v 3417 3776 35 3145 v 479 +3776 2973 35 v 558 4088 a Fk(Figur)o(e)21 b(4:)k Fe(Asimut)19 +b Fk(checking)j(the)f(behavior)f(with)i(a)e(few)g(functionnal)i(test)f +(vectors.)302 4331 y(Feel)h(fr)o(ee)f(to)i(add)e(new)i(simulation)h +(vectors,)e(as)g(it's)h(a)f(very)g(good)h(practice.)30 +b(Y)-8 b(ou)23 b(can)f(also)h(write)g(obvi-)177 4450 +y(ously)f(wr)o(ong)f(patterns)f(to)h(see)g(how)h Fe(asimut)d +Fk(behaves)h(when)i(it)f(encounters)g(err)o(ors.)177 +4766 y Fg(6)119 b(Netlist)29 b(capture)g(and)h(validation)177 +4975 y Fk(Y)-8 b(ou)31 b(ar)o(e)e(now)h(about)g(to)g(captur)o(e)f(the)h +(logical)g(view)g(of)g Fe(addaccu)p Fk(,)g(commonly)i(known)f(as)f +(netlist.)53 b(The)177 5094 y(design)22 b(methodology)h(pr)o(events)e +(the)g(designer)h(fr)o(om)f(building)h(the)f(entir)o(e)g(netlist)h(in)g +(one)g(shot,)h(including)177 5214 y(pads.)i(VLSI)20 b(design)h(is)g +(based)f(on)h(hierar)o(chy)f(and)h(incr)o(emental)f(appr)o(oaches.)177 +5480 y Fa(6.1)99 b(Netlist)26 b(capture)177 5658 y Fk(The)21 +b(cir)o(cuit)f(netlist)i(you)f(have)f(to)h(write)g(will)h(be)e(captur)o +(ed)f(in)i(two)h(steps:)281 5844 y(1.)41 b(captur)o(e)19 +b(of)i(the)g(cor)o(e)f(netlist;)1928 6122 y(8)p eop +%%Page: 9 9 +9 8 bop 281 523 a Fk(2.)41 b(captur)o(e)19 b(of)i(the)g(chip)g +(netlist,)g(linking)h(the)f(cor)o(e)f(with)h(pads.)302 +709 y(The)j(cor)o(e)g(netlist)h(contains)h(standar)o(d-cells)c +(describing)j(the)g(logical)f(functions)i(needed)e(to)g(design)h(the) +177 829 y(adder)-6 b(,)19 b(the)i(multiplexer)g(and)f(the)h +(accumulator)-6 b(,)20 b(and)g(the)h(internal)g(wir)o(es.)302 +948 y(W)-8 b(e)21 b(do)f(not)i(use)f(a)f(schematic)h(editor)f(for)h +(netlist)g(captur)o(e,)e(but)i(rather)f(a)g(textual)h(appr)o(oach.)p +177 1030 3526 4 v 177 1132 4 102 v 205 1100 a Fd(\230fred/addaccu)38 +b(\045-\))i(vi)f(core.c)p 3699 1132 V 177 1135 3526 4 +v 3701 1151 19 108 v 194 1151 3526 19 v 302 1391 a Fk(The)21 +b(cor)o(e)f(netlist)i(is)f(nothing)h(mor)o(e)f(than)g(a)g +Ff(C)g Fk(\002le)g(containing)h(speci\002c)f(function)h(calls)e(for)h +(the)g(cr)o(eation)177 1510 y(of)f(VLSI)f(objects.)26 +b(Notice)20 b(that)g(the)g(include)g(\002le)h Fe(genlib.h)d +Fk(must)j(systematically)f(be)g(included)f(at)h(the)g(top)177 +1630 y(of)h Ff(genlib)p Fk('s)e(\002les.)302 1749 y(The)g(description)i +(of)e(a)h(netlist)g(in)g Ff(C)g Fk(is)g(mainly)h(based)e(on)h(the)g +Fe(DEF)p 2459 1749 25 4 v 29 w(LOFIG,)49 b(LOCON)19 b +Fk(and)g Fe(LOINS)g Fk(func-)177 1869 y(tions.)27 b Fe(DEF)p +559 1869 V 29 w(LOFIG)20 b Fk(de\002nes)h(the)g(name)g(of)g(the)g(r)o +(esulting)g(netlist)g(view)-8 b(,)21 b Fe(LOCON)f Fk(instanciates)h(a)g +(new)g(termi-)177 1988 y(nal)i(in)h(the)f(curr)o(ently)f(opened)h +(\002gur)o(e,)g(and)f Fe(LOINS)g Fk(instanciates)h(pr)o(e-existing)g +(cells)g(or)g(blocks.)33 b(For)23 b(mor)o(e)177 2108 +y(informations,)f(please)e(r)o(ead)f(the)i(on-line)g(manual)g +(associated)f(with)i(each)e(function.)302 2227 y(T)-8 +b(o)21 b(compile)g(and)g(r)o(un)g(the)g Ff(C)f Fk(\002le,)h(you)g(must) +h(use)f(the)f Fe(genlib)g Fk(pr)o(ogram.)302 2347 y(Y)-8 +b(ou)22 b(must)f(specify)f(the)h(input)h(format)e(of)h(cells)g(that)f +(ar)o(e)g(instanciated)g(in)h(the)g Ff(genlib)p Fk('s)f(code.)302 +2467 y(Ther)o(efor)o(e)f(enter)h(the)h(following)h(command:)p +177 2549 3526 4 v 177 2744 4 195 v 205 2616 a Fd(\230fred/addaccu)38 +b(\045-\))i(setenv)f(MBK_IN_LO)f(vst)205 2710 y(\230fred/addaccu)g +(\045-\))i(setenv)f(MBK_OUT_LO)f(vst)p 3699 2744 V 177 +2747 3526 4 v 3701 2764 19 202 v 194 2764 3526 19 v 302 +3003 a Fk(These)20 b Fe(setenv)g Fk(de\002ne)h(the)f(input)i(and)e +(output)h(formats)g(for)f(the)h(speci\002cation)g(netlist.)302 +3122 y Fe(vst)32 b Fk(stands)h(for)g(str)o(uctural)g +Ff(VHDL)g Fk(description.)62 b(The)33 b(design)h(methodology)g(assumes) +g(that)f(user)177 3242 y(de\002ned)22 b(netlists)i(must)f(use)g +(extension)g Fe(vst)f Fk(as)h(we've)f(alr)o(eady)f(said.)30 +b(The)23 b Fe(al)f Fk(format)h(is)f(mostly)i(used)f(for)177 +3361 y(extracted)c(netlist)j(with)f(speci\002c)g(informations)h(like)f +(capacitances)e(that)i(cannot)g(be)g(coded)f(in)h Ff(VHDL)p +Fk(.)302 3481 y(At)f(last,)h(you)g(can)f(execute)g(the)h(genlib)g(pr)o +(ogram:)p 177 3563 3526 4 v 177 3667 4 105 v 205 3632 +a Fd(\230fred/addaccu)38 b(\045-\))i(genlib)f(-v)g(core)p +3699 3667 V 177 3670 3526 4 v 3701 3687 19 111 v 194 +3687 3526 19 v 198 3797 a Fk(to)21 b(get:)1928 6122 y(9)p +eop +%%Page: 10 10 +10 9 bop 446 601 2973 4 v 446 3498 4 2898 v 520 709 a +Fc(\230fred/addaccu)33 b(\045-\))i(setenv)f(MBK_IN_LO)f(vst)520 +788 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_OUT_LO)f(vst)520 +868 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_CATA_LIB)f +(/alliance/cells/scr)520 948 y(\230fred/addaccu)g(\045-\))i(genlib)f +(-v)g(core)973 1107 y(@@@@)h(@)836 b(@@@@@@)313 b(@)105 +b(@@@)904 1187 y(@@)139 b(@@)906 b(@@)349 b(@@@)104 b(@@)869 +1267 y(@@)209 b(@)906 b(@@)383 b(@)140 b(@@)834 1346 +y(@@)453 b(@@@@@)104 b(@@@)34 b(@@@)209 b(@@)558 b(@@)34 +b(@@)834 1426 y(@@)418 b(@)174 b(@)105 b(@@@)f(@)174 +b(@@)279 b(@@@@)139 b(@@@)69 b(@@)834 1506 y(@@)174 b(@@@@@)34 +b(@@)174 b(@@)70 b(@@)139 b(@@)g(@@)349 b(@@)139 b(@@)g(@@)834 +1585 y(@@)174 b(@)35 b(@@)69 b(@@@@@@@@@)g(@@)139 b(@@)g(@@)349 +b(@@)139 b(@@)g(@@)834 1665 y(@@)g(@)70 b(@@)f(@@)314 +b(@@)139 b(@@)g(@@)349 b(@@)139 b(@@)g(@@)869 1745 y(@@)209 +b(@@)69 b(@@)209 b(@)70 b(@@)139 b(@@)g(@@)209 b(@)105 +b(@@)139 b(@@)g(@@)904 1825 y(@@)g(@@)g(@@)g(@@)70 b(@@)139 +b(@@)g(@@)174 b(@)140 b(@@)f(@@@)69 b(@@)973 1904 y(@@@@)279 +b(@@@@)104 b(@@@@)69 b(@@@@)34 b(@@@@@@@@@@)69 b(@@@@@@)34 +b(@@@)g(@@)1392 2064 y(Procedural)f(Generation)h(Language)1113 +2223 y(Alliance)g(CAD)g(System)g(3.2,)383 b(genlib)34 +b(3.3)1113 2303 y(Copyright)f(\(c\))i(1991-1998,)243 +b(ASIM/LIP6/UPMC)1113 2382 y(E-mail)34 b(support:)g +(alliance-support@asim.lip6.fr)520 2542 y(Generating)g(the)g(Makefile) +520 2622 y(Compiling,)g(...)520 2701 y(Current)g(execution)g +(environment)520 2781 y(MBK_CATA_LIB)103 b(:)35 b +(/users/soft5/newlabo/Solaris/cells/sclib)520 2861 y(MBK_WORK_LIB)103 +b(:)35 b(:)520 2940 y(MBK_IN_LO)208 b(:)35 b(vst)520 +3020 y(MBK_OUT_LO)173 b(:)35 b(vst)520 3100 y(MBK_IN_PH)208 +b(:)35 b(ap)520 3179 y(MBK_OUT_PH)173 b(:)35 b(ap)520 +3259 y(MBK_CATAL_NAME)e(:)i(CATAL)520 3339 y(Executing)f(...)520 +3419 y(Removing)g(tmp)g(files)h(...)p 3415 3498 V 446 +3501 2973 4 v 3417 3535 35 2904 v 479 3535 2973 35 v +1076 3847 a Fk(Figur)o(e)20 b(5:)25 b(Netlist)c(cor)o(e)f(generation)h +(using)h Fe(genlib)p Fk(.)302 4090 y(Y)-8 b(ou)26 b(can)e(now)i(look)f +(in)g(the)g(curr)o(ent)f(dir)o(ectory)g(for)g(a)h(\002le)g(named)f +Fe(core.vst)p Fk(.)36 b(This)25 b(\002le)g(contains)g(the)177 +4209 y(r)o(esulting)c(description)g(of)g(the)g(cor)o(e.)302 +4329 y(The)26 b Fe(addaccu.c)f Fk(\002le)h(contains)i(the)e(actual)g +(chip)g(netlist.)44 b(Y)-8 b(ou)27 b(can)f(edit)h(it)f(to)h(see)f(how)i +(pads)d(ar)o(e)g(in-)177 4448 y(stanciated.)302 4568 +y(Running)d(the)f(following)h(command:)p 177 4650 3526 +4 v 177 4754 4 105 v 205 4719 a Fd(\230fred/addaccu)38 +b(\045-\))i(genlib)f(-v)g(addaccu)p 3699 4754 V 177 4757 +3526 4 v 3701 4774 19 111 v 194 4774 3526 19 v 198 4884 +a Fk(pr)o(oduces:)1907 6122 y(10)p eop +%%Page: 11 11 +11 10 bop 446 601 2973 4 v 446 2462 4 1862 v 520 709 +a Fc(\230fred/addaccu)33 b(\045-\))i(setenv)f(MBK_IN_LO)f(vst)520 +788 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_OUT_LO)f(vst)520 +868 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_CATA_LIB)f +(/alliance/cells/scr:/alliance/cells/ring)520 948 y(\230fred/addaccu)g +(\045-\))i(genlib)f(addaccu)973 1107 y(@@@@)h(@)836 b(@@@@@@)313 +b(@)105 b(@@@)904 1187 y(@@)139 b(@@)906 b(@@)349 b(@@@)104 +b(@@)869 1267 y(@@)209 b(@)906 b(@@)383 b(@)140 b(@@)834 +1346 y(@@)453 b(@@@@@)104 b(@@@)34 b(@@@)209 b(@@)558 +b(@@)34 b(@@)834 1426 y(@@)418 b(@)174 b(@)105 b(@@@)f(@)174 +b(@@)279 b(@@@@)139 b(@@@)69 b(@@)834 1506 y(@@)174 b(@@@@@)34 +b(@@)174 b(@@)70 b(@@)139 b(@@)g(@@)349 b(@@)139 b(@@)g(@@)834 +1585 y(@@)174 b(@)35 b(@@)69 b(@@@@@@@@@)g(@@)139 b(@@)g(@@)349 +b(@@)139 b(@@)g(@@)834 1665 y(@@)g(@)70 b(@@)f(@@)314 +b(@@)139 b(@@)g(@@)349 b(@@)139 b(@@)g(@@)869 1745 y(@@)209 +b(@@)69 b(@@)209 b(@)70 b(@@)139 b(@@)g(@@)209 b(@)105 +b(@@)139 b(@@)g(@@)904 1825 y(@@)g(@@)g(@@)g(@@)70 b(@@)139 +b(@@)g(@@)174 b(@)140 b(@@)f(@@@)69 b(@@)973 1904 y(@@@@)279 +b(@@@@)104 b(@@@@)69 b(@@@@)34 b(@@@@@@@@@@)69 b(@@@@@@)34 +b(@@@)g(@@)1392 2064 y(Procedural)f(Generation)h(Language)1113 +2223 y(Alliance)g(CAD)g(System)g(3.2,)383 b(genlib)34 +b(3.3)1113 2303 y(Copyright)f(\(c\))i(1991-1998,)243 +b(ASIM/LIP6/UPMC)1113 2382 y(E-mail)34 b(support:)g +(alliance-support@asim.lip6.fr)p 3415 2462 V 446 2465 +2973 4 v 3417 2499 35 1868 v 479 2499 2973 35 v 947 2811 +a Fk(Figur)o(e)21 b(6:)k(Cor)o(e)20 b(to)h(pad)f(netlist)h(generation)g +(using)h Fe(genlib)p Fk(.)302 3054 y(This)f(cr)o(eates)e +Fe(addaccu.vst)p Fk(,)g(the)i(r)o(esulting)g(netlist,)g(in)g(the)g +(curr)o(ent)f(dir)o(ectory)-9 b(.)177 3320 y Fa(6.2)99 +b(Simulation)25 b(of)g(the)g(speci\002cation)h(netlist)177 +3498 y Fk(Once)f(the)g(complete)g(netlist)g(has)g(been)f(captur)o(ed,)g +(we)g(can)h(simulate)f(the)h(whole)h(chip)f(with)g(the)g(pr)o(evious) +177 3617 y(simulation)d(patterns.)302 3737 y(Y)-8 b(ou)22 +b(can)e(r)o(un)h(asimut)g(by)g(entering)g(the)g(following)h(command:)p +177 3819 3526 4 v 177 3920 4 102 v 205 3888 a Fd(\230fred/addaccu)38 +b(\045-\))i(asimut)f(addaccu)f(addaccu)h(schema)p 3699 +3920 V 177 3923 3526 4 v 3701 3940 19 108 v 194 3940 +3526 19 v 198 4060 a Fk(It)21 b(pr)o(oduces)f(the)h(output)g(of)f +(Figur)o(e)h Ff(??)p Fk(.)302 4179 y(The)d(\002rst)g +Fe(addaccu)f Fk(stands)i(for)f Fe(addaccu.vst)p Fk(.)k(The)c(second)h +Fe(addaccu)e Fk(stands)h Fe(addaccu.pat)p Fk(,)e(the)177 +4299 y(pattern)22 b(\002le)g(with)h(input)g(and)f(output)h(values.)29 +b Fe(schema)21 b Fk(stands)i(for)f Fe(schema.pat)p Fk(,)e(the)j +(generated)e(list)h(of)177 4418 y(patterns.)302 4538 +y(Because)31 b(option)i Fe(-b)f Fk(is)h(not)g(set)g(and)e(because)h +Fe(MBK)p 2061 4538 25 4 v 29 w(IN)p 2190 4538 V 30 w(LO)g +Fk(contains)h Fe(vst)p Fk(,)h Fe(asimut)e Fk(simulates)g(the)177 +4657 y(speci\002cation)21 b(netlist)h(we)f(have)f(captur)o(ed)f(with)i +Fe(genlib)p Fk(.)302 4777 y(Err)o(ors)e(during)h(this)h(execution)f +(mean)g(that)g(something)i(went)e(wr)o(ong)h(between)e(your)i(curr)o +(ent)e(position)177 4896 y(in)i(the)g(design)g(\003ow)h(and)f(the)f +(behavioral)h(simulation)h(stage.)1910 6122 y(1)-5 b(1)p +eop +%%Page: 12 12 +12 11 bop 446 601 2973 4 v 446 5092 4 4492 v 520 709 +a Fc(\230fred/addaccu)33 b(\045-\))i(setenv)f(MBK_IN_LO)f(vst)520 +788 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_CATA_LIB)f +(/alliance/cells/scr:/alliance/cells/ringxx)520 868 y(\230fred/addaccu) +g(\045-\))i(asimut)f(addaccu)g(addaccu)g(schema)520 948 +y(Warning)g(2)h(:)f(consistency)g(checks)g(will)g(be)h(disabled)973 +1107 y(@)279 b(@@@@)34 b(@)175 b(@)976 b(@@@@@@@@@@)973 +1187 y(@)244 b(@)140 b(@@)f(@@@)941 b(@)104 b(@@)h(@)938 +1267 y(@@@)174 b(@@)g(@)h(@)941 b(@)139 b(@@)h(@)938 +1346 y(@@@)174 b(@@@)488 b(@@@)35 b(@@)f(@@@)104 b(@@@)70 +b(@@@@)243 b(@@)904 1426 y(@)69 b(@@)174 b(@@@@)g(@@@@)139 +b(@@@)35 b(@@)69 b(@@)104 b(@@)140 b(@@)243 b(@@)904 +1506 y(@)69 b(@@)244 b(@@@@)174 b(@@)139 b(@@)70 b(@@)f(@@)104 +b(@@)140 b(@@)243 b(@@)869 1585 y(@)139 b(@@)279 b(@@@)139 +b(@@)g(@@)70 b(@@)f(@@)104 b(@@)140 b(@@)243 b(@@)869 +1665 y(@@@@@@@)103 b(@)209 b(@@)105 b(@@)139 b(@@)70 +b(@@)f(@@)104 b(@@)140 b(@@)243 b(@@)834 1745 y(@)209 +b(@@)69 b(@@)174 b(@@)105 b(@@)139 b(@@)70 b(@@)f(@@)104 +b(@@)140 b(@@)243 b(@@)834 1825 y(@)209 b(@@)69 b(@@@)139 +b(@)h(@@)f(@@)70 b(@@)f(@@)104 b(@@)h(@@@)243 b(@@)764 +1904 y(@@@@)139 b(@@@@)34 b(@)70 b(@@@@)104 b(@@@@@@)34 +b(@@@@)h(@@@)f(@@@)104 b(@@@@)69 b(@@)140 b(@@@@@@)1636 +2064 y(A)35 b(SIMUlation)e(Tool)1113 2223 y(Alliance)h(CAD)g(System)g +(3.2,)313 b(asimut)35 b(v2.01)1113 2303 y(Copyright)e(\(c\))i +(1991-1997,)243 b(ASIM/LIP6/UPMC)1113 2382 y(E-mail)34 +b(support:)g(alliance-support@asim.lip6.fr)799 2542 y(Paris,)g(France,) +g(Europe,)g(Earth,)g(Solar)g(system,)g(Milky)g(Way,)h(...)520 +2622 y(Initializing)e(...)520 2701 y(Searching)h(addaccu)g(...)520 +2781 y(Compiling)g(addaccu)g(\(Structural\))f(...)520 +2940 y(Flattening)h(the)g(root)g(figure)g(...)520 3100 +y(Searching)g(a2_y)g(...)520 3179 y(BEH)g(:)h(Compiling)f(a2_y.vbe)g +(\(Behaviour\))f(...)520 3259 y(Making)h(GEX)h(...)520 +3339 y(.)520 3419 y(.)520 3498 y(.)520 3578 y(Searching)f(pi_sp)g(...) +520 3658 y(BEH)g(:)h(Compiling)f(pi_sp.vbe)g(\(Behaviour\))f(...)520 +3737 y(Making)h(GEX)h(...)520 3897 y(Searching)f(pck_sp)g(...)520 +3976 y(BEH)g(:)h(Compiling)f(pck_sp.vbe)f(\(Behaviour\))h(...)520 +4056 y(Making)g(GEX)h(...)520 4216 y(Searching)f(pattern)g(file)g(:)h +(addaccu)f(...)520 4295 y(Restoring)g(...)520 4455 y(Linking)g(...)520 +4534 y(###-----)g(processing)f(pattern)h(0)h(-----###)520 +4614 y(###-----)f(processing)f(pattern)h(1)h(-----###)520 +4694 y(###-----)f(processing)f(pattern)h(2)h(-----###)520 +4773 y(###-----)f(processing)f(pattern)h(3)h(-----###)520 +4853 y(###-----)f(processing)f(pattern)h(4)h(-----###)520 +4933 y(###-----)f(processing)f(pattern)h(5)h(-----###)520 +5013 y(###-----)f(processing)f(pattern)h(6)h(-----###)p +3415 5092 V 446 5095 2973 4 v 3417 5129 35 4498 v 479 +5129 2973 35 v 1033 5441 a Fk(Figur)o(e)21 b(7:)k Fe(Asimut)19 +b Fk(checking)j(the)f(netlist)g(description.)1907 6122 +y(12)p eop +%%Page: 13 13 +13 12 bop 177 526 a Fg(7)119 b(Core)30 b(layout)h(generation)177 +735 y Fk(Incr)o(emental)21 b(design)h(r)o(elies)e(on)j(hierar)o(chy)-9 +b(.)26 b(Befor)o(e)20 b(you)i(design)g(the)f(cor)o(e)g(to)h(pads)f +(netlist,)h(the)f(cir)o(cuit)g(cor)o(e)177 855 y(must)h(be)e +(successfully)h(built.)26 b(In)21 b(this)g(example,)f(the)h(layout)g +(generation)g(r)o(elies)f(on:)281 1041 y(1.)41 b(standar)o(d-cells)19 +b(placement)h(\(automatic)g(or)h(manual\);)281 1227 y(2.)41 +b(automatic)20 b(r)o(outing)h(of)g(standar)o(d-cells.)302 +1412 y Fe(scr)27 b Fk(is)i(a)e(place)g(and)h(r)o(oute)f(tool)i(that)f +(can)g(pr)o(oduce)f(automatically)h(the)g(layout)g(view)h(fr)o(om)e(a)h +(netlist)177 1532 y(description.)302 1652 y(As)15 b(stated)h(in)g(the)g +(pr)o(evious)g(section,)h(befor)o(e)e(you)i(r)o(un)f +Fe(scr)p Fk(,)g(you)h(must)g(specify)e(envir)o(onment)i(variables.)177 +1771 y(Needless)j(to)i(say)e(that)h(these)g(variables)f(will)h(deal)f +(with)h(physical)g(aspects)g(of)f(the)h(cir)o(cuit.)302 +1891 y(First,)26 b(you)g(must)g(specify)f(the)h(input)f(layout)h +(format)f(you)h(use)f(for)g(the)h(standar)o(d-cells.)37 +b(The)25 b Ff(Alliance)177 2010 y Fk(distribution)d(only)g(contains)f +Fe(ap)f Fk(symbolic)i(layout)f(\002les)g(so)h(you)f(must)g(issue)h(the) +f(following)h(command:)p 177 2093 3526 4 v 177 2195 4 +103 v 205 2159 a Fd(\230fred/addaccu)38 b(\045-\))i(setenv)f(MBK_IN_PH) +f(ap)p 3699 2195 V 177 2198 3526 4 v 3701 2215 19 109 +v 194 2215 3526 19 v 302 2454 a Fk(This)29 b(command)g(instr)o(ucts)h +Fe(scr)e Fk(to)h(use)f(the)h Fe(ap)f Fk(cell)h(layout)g(format)f(as)g +(input.)50 b(Remember)29 b(that)f(the)177 2573 y(variable)20 +b Fe(MBK)p 650 2573 25 4 v 29 w(CATA)p 879 2573 V 29 +w(LIB)g Fk(is)h(still)h(set,)e(so)i Ff(Alliance)c Fk(tools)j(know)h +(wher)o(e)e(to)i(\002nd)f(cells.)302 2693 y(Second,)f(you)h(must)g +(accor)o(dingly)g(specify)f(the)h(output)g(layout)g(format.)26 +b(Again,)20 b(the)h(format)f(is)h Fe(ap)p Fk(,)f(so:)p +177 2775 3526 4 v 177 2877 4 103 v 205 2842 a Fd(\230fred/addaccu)38 +b(\045-\))i(setenv)f(MBK_OUT_PH)f(ap)p 3699 2877 V 177 +2880 3526 4 v 3701 2897 19 109 v 194 2897 3526 19 v 302 +3136 a Fk(This)21 b(command)g(instr)o(ucts)h Fe(scr)e +Fk(to)h(use)g Fe(ap)f Fk(r)o(epr)o(esentation)g(of)h(cells)g(as)f(an)h +(output.)302 3256 y(Everything)g(is)g(now)h(r)o(eady)d(for)h(the)h +(place)f(and)g(r)o(oute)h(phase.)k(The)c(command)g(is:)p +177 3338 3526 4 v 177 3440 4 103 v 205 3405 a Fd(\230fred/addaccu)38 +b(\045-\))i(scr)f(-p)h(-r)f(core)g(core)p 3699 3440 V +177 3443 3526 4 v 3701 3460 19 109 v 194 3460 3526 19 +v 302 3699 a Fk(Option)21 b Fe(-p)g Fk(means)g(automatic)f(placement,)h +(and)f(option)i Fe(-r)e Fk(means)h(automatic)g(r)o(outing.)302 +3809 y(Once)g Fe(scr)f Fk(has)h(been)f(executed,)g(the)g(cor)o(e)g +(layout)h(is)h(completed.)1907 6122 y(13)p eop +%%Page: 14 14 +14 13 bop 446 601 2973 4 v 446 4056 4 3456 v 520 709 +a Fc(\230fred/addaccu)33 b(\045-\))i(setenv)f(MBK_IN_LO)f(vst)520 +788 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_IN_PH)f(ap)520 +868 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_OUT_PH)f(ap)520 +948 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_CATA_LIB)f +(/alliance/cells/scr)520 1028 y(\230fred/addaccu)g(\045-\))i(scr)f(-p)h +(-r)f(core)1427 1187 y(@@@@)g(@)209 b(@@@@)34 b(@)h(@@@@@@@)1392 +1267 y(@)139 b(@@)g(@@)h(@@)104 b(@@)g(@@)1357 1346 y(@@)174 +b(@)104 b(@@)209 b(@)105 b(@@)139 b(@@)1357 1426 y(@@@)244 +b(@@)f(@)105 b(@@)139 b(@@)1392 1506 y(@@@@)174 b(@@)383 +b(@@)104 b(@@)1461 1585 y(@@@@)h(@@)383 b(@@@@@)1531 +1665 y(@@@)70 b(@@)383 b(@@)69 b(@@)1357 1745 y(@)209 +b(@@)35 b(@@)383 b(@@)104 b(@@)1357 1825 y(@@)174 b(@@)69 +b(@@)209 b(@)105 b(@@)f(@@)1357 1904 y(@@@)139 b(@)g(@@)h(@@)104 +b(@@)139 b(@@)1357 1984 y(@)69 b(@@@@)244 b(@@@@)104 +b(@@@@@)g(@@@)1566 2143 y(Standard)34 b(Cell)g(router)1113 +2303 y(Alliance)g(CAD)g(System)g(3.2,)488 b(scr)34 b(5.2)1113 +2382 y(Copyright)f(\(c\))i(1991-1997,)243 b(ASIM/LIP6/UPMC)1113 +2462 y(E-mail)34 b(support:)g(alliance-support@asim.lip6.fr)520 +2622 y(Loading)g(logical)g(view)g(:)h(core)520 2701 y(Placing)f +(logical)g(view)g(:)h(core)520 2781 y(Loading)f(SCP)g(data)h(base)f +(...)520 2861 y(Generating)g(initial)g(placement)f(...)520 +2940 y(25)i(cells)f(37)g(nets)h(in)f(2)h(rows)520 3020 +y(Placement)f(in)g(process)g(of)h(treatment)f(:)104 b(100\045)520 +3100 y(49\045)34 b(saved)h(in)69 b(0.3)35 b(s)520 3179 +y(Saving)f(placement)104 b(100\045)520 3259 y(Checking)34 +b(consistency)f(between)h(logical)g(and)h(physical)e(views)520 +3339 y(Loading)h(SCR)g(data)h(base)f(...)520 3419 y(Deleting)g(MBK)g +(data)h(base)f(...)520 3498 y(Global)g(routing)g(...)520 +3578 y(Channel)g(routing)g(...)520 3658 y(|_____Routing)f(Channel)h(:)h +(scr_p2)520 3737 y(|_____Routing)e(Channel)h(:)h(scr_p4)520 +3817 y(|_____Routing)e(Channel)h(:)h(scr_p6)520 3897 +y(Making)f(vertical)g(power)g(and)h(ground)f(wires)520 +3976 y(Saving)g(layout)g(:)h(core)p 3415 4056 V 446 4059 +2973 4 v 3417 4093 35 3462 v 479 4093 2973 35 v 932 4405 +a Fk(Figur)o(e)21 b(8:)k(Placing)c(and)f(Routing)i(the)f(cor)o(e)f +(netlist)i(with)f Fe(scr)p Fk(.)302 4636 y(Note)g(that)f +Fe(scr)h Fk(knows)h(how)f(to)g(place)f(and)h(r)o(oute)f(only)i(cells)e +(having)i(a)e(standar)o(d)f(cell)i(topology)-9 b(.)177 +4947 y Fg(8)119 b(Core)30 b(layout)h(veri\002cation)177 +5156 y Fk(Routers)22 b(may)f(have)f(bugs,)h(and)g(pr)o(oduce)f(shorts)i +(or)f(open)g(cir)o(cuits.)26 b(So)21 b(serious)g(checks)g(must)h(be)f +(made)f(on)177 5275 y(the)h(pr)o(oduced)e(layout.)26 +b(T)-8 b(o)22 b(check)e(the)h(layout,)g(we)g(use)g(two)g +Ff(Alliance)d Fk(tools,)j Fe(lynx)f Fk(and)h Fe(lvx)p +Fk(.)302 5395 y Fe(lynx)16 b Fk(is)i(the)g Ff(Alliance)d +Fk(netlist)j(extractor)-6 b(.)23 b(Fr)o(om)18 b(a)f(physical)g(layout)h +(it)g(extracts)e(a)h(netlist)i(r)o(epr)o(esentation)177 +5514 y(of)e(the)h(cir)o(cuit,)f(in)g(terms)g(of)g(blocks,)i(gates)d(or) +i(transistors.)25 b(In)17 b(our)g(case,)g(we)g(want)h(to)f(extract)f +(the)h(cor)o(e)g(netlist)177 5634 y(at)j(the)h(gate)g(level.)302 +5754 y Fe(lvx)i Fk(is)i(the)g Ff(Alliance)c Fk(netlist)k(comparator)-6 +b(.)36 b(Its)24 b(main)h(function)g(is)g(to)g(verify)e(that)i(an)f +(extracted)f(netlist)177 5873 y(corr)o(esponds)e(to)g(the)g +(speci\002cation)g(netlist.)1907 6122 y(14)p eop +%%Page: 15 15 +15 14 bop 302 523 a Fk(Hence,)18 b(the)h(design)g(methodology)h(is)e +(quite)h(simple.)26 b(W)-8 b(e)18 b(must)h(extract)f(the)g(cor)o(e)g +Fe(core.ap)f Fk(with)i Fe(lynx)177 643 y Fk(and)h(check)h(the)g(r)o +(esulting)g(netlist)h(with)f(the)g(original)g Fe(addaccu.vst)e +Fk(\002le)i(using)h Fe(lvx)p Fk(.)177 909 y Fa(8.1)99 +b(Extraction)26 b(of)f(the)f(core)h(netlist)177 1087 +y Fk(Now)-8 b(,)22 b(back)e(to)h(practice.)j(Y)-8 b(ou)22 +b(have)e(to)i(extract)d(the)i(layout)g(using)h Fe(lynx)p +Fk(.)j(Remember)20 b(two)i(things:)281 1273 y(1.)41 b +Ff(Alliance)18 b Fk(tools)k(deeply)f(r)o(ely)f(on)i(appr)o(opriate)e +(envir)o(onment)h(variables.)26 b(For)21 b(instance,)h(you)f(have)g(to) +385 1392 y(specify)f(the)h(format)f(the)h(extracted)f(netlist)h(will)g +(be)g(generated)f(with.)281 1578 y(2.)41 b(in)21 b(the)g(usual)g +(design)g(\003ow)-8 b(,)22 b(extracted)d(netlist)i(\002les)g(ar)o(e)f +(written)h(in)g Fe(al)f Fk(format.)302 1764 y(So)g(you)i(must:)p +177 1846 3526 4 v 177 1946 4 101 v 205 1913 a Fd(\230fred/addaccu)38 +b(\045-\))i(setenv)f(MBK_OUT_LO)f(al)p 3699 1946 V 177 +1949 3526 4 v 3701 1966 19 107 v 194 1966 3526 19 v 198 +2086 a Fk(to)21 b(generate)f(a)g(extracted)f(netlist)j(\002le)f(called) +f Fe(core.al)p Fk(.)302 2206 y(The)g(actual)g(execution)h(of)g(lynx)g +(is)g(quite)h(easy)-9 b(.)25 b(Just)20 b(type:)p 177 +2288 3526 4 v 177 2390 4 103 v 205 2354 a Fd(\230fred/addaccu)38 +b(\045-\))i(lynx)f(-v)h(core)p 3699 2390 V 177 2393 3526 +4 v 3701 2410 19 109 v 194 2410 3526 19 v 198 2519 a +Fk(and)20 b(you)i(get)e(your)h(extracted)f(netlist)h(in)g(terms)g(of)g +(inter)o(connected)f(standar)o(d)f(cells.)1907 6122 y(15)p +eop +%%Page: 16 16 +16 15 bop 446 601 2973 4 v 446 4845 4 4244 v 520 709 +a Fc(\230fred/addaccu)33 b(\045-\))i(setenv)f(MBK_IN_PH)f(ap)520 +788 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_OUT_LO)f(al)520 +868 y(\230fred/addaccu)g(\045-\))i(setenv)f(RDS_TECHNO_NAME)f +(/alliance/etc/cmos_5.rds)520 948 y(\230fred/addaccu)g(\045-\))i +(setenv)f(MBK_CATA_LIB)f(/alliance/cells/scr:/alliance/cells/ring)520 +1028 y(\230fred/addaccu)g(\045-\))i(lynx)f(-v)h(core)f(core)1183 +1187 y(@@@@@@)1252 1267 y(@@)1252 1346 y(@@)1252 1426 +y(@@)279 b(@@@@@)34 b(@@@)h(@@@)f(@@@)139 b(@@@@)69 b(@@@)1252 +1506 y(@@)314 b(@@)139 b(@)105 b(@@@)f(@)139 b(@@)g(@)1252 +1585 y(@@)349 b(@@)104 b(@)h(@@)139 b(@@)g(@@)69 b(@)1252 +1665 y(@@)349 b(@@)69 b(@)140 b(@@)f(@@)174 b(@@@)1252 +1745 y(@@)384 b(@@)34 b(@)140 b(@@)f(@@)174 b(@@@)1252 +1825 y(@@)209 b(@)140 b(@@@)174 b(@@)139 b(@@)g(@)70 +b(@@)1252 1904 y(@@)174 b(@)209 b(@@)175 b(@@)139 b(@@)104 +b(@)139 b(@@)1183 1984 y(@@@@@@@@@@)68 b(@@)h(@)175 b(@@@@)69 +b(@@@@)34 b(@@@)70 b(@@@@)1601 2064 y(@@)f(@)1636 2143 +y(@@@)1636 2303 y(Netlist)34 b(extractor)1148 2462 y(Alliance)f(CAD)i +(System)f(3.2,)418 b(lynx)34 b(1.16)1148 2542 y(Copyright)f(\(c\))i +(1993-1997,)243 b(ASIM/LIP6/UPMC)1148 2622 y(E-mail)34 +b(support:)g(alliance-support@asim.lip6.fr)799 2940 y(--->)g(Extracts)g +(symbolic)g(figure)g(core)1078 3100 y(--->)g(Translate)g(Mbk)g(->)h +(Rds)1078 3179 y(--->)f(Build)g(windows)1078 3259 y(<---)g(108)1078 +3419 y(--->)g(Rectangles)138 b(:)35 b(894)1078 3498 y(--->)f(Figure)g +(size)104 b(:)35 b(\()140 b(-50,)104 b(-100)34 b(\))1810 +3578 y(\()70 b(55250,)f(16600)34 b(\))1078 3737 y(--->)g(Cut)h +(transistors)1078 3817 y(<---)f(0)1078 3897 y(--->)g(Build)g(equis)1078 +3976 y(<---)g(37)1078 4056 y(--->)g(Delete)g(windows)1078 +4136 y(--->)g(Build)g(signals)1078 4216 y(<---)g(37)1078 +4295 y(--->)g(Build)g(instances)1078 4375 y(<---)g(29)1078 +4455 y(--->)g(Build)g(transistors)1078 4534 y(<---)g(0)1078 +4614 y(--->)g(Save)h(netlist)799 4773 y(<---)f(done)h(!)p +3415 4845 V 446 4848 2973 4 v 3417 4882 35 4251 v 479 +4882 2973 35 v 520 5194 a Fk(Figur)o(e)21 b(9:)k(Extracting)20 +b(a)g(hierar)o(chical)g(netlist)h(in)g(terms)g(of)g(standar)o(d)e +(cells)i(with)g Fe(lynx)p Fk(.)1907 6122 y(16)p eop +%%Page: 17 17 +17 16 bop 177 523 a Fa(8.2)99 b(Netlist)26 b(cross-checking)177 +701 y Fk(Now)21 b(it's)h(time)f(for)f(netlist)i(veri\002cations.)j +(Since)c Fe(lvx)f Fk(takes)g(two)i(netlist)f(in)g(input,)g(the)g +(formats)g(have)f(to)h(be)177 821 y(speci\002ed)g(on)g(the)g(command)g +(line.)p 177 903 3526 4 v 177 1002 4 100 v 205 970 a +Fd(\230fred/addaccu)38 b(\045-\))i(lvx)f(vst)h(al)f(core)g(core)p +3699 1002 V 177 1005 3526 4 v 3701 1022 19 106 v 194 +1022 3526 19 v 302 1251 a Fe(lvx)23 b Fk(works)h(somewhat)h(dif)o(fer)o +(ently)d(fr)o(om)h(other)h(tools.)36 b(Its)24 b(two)g(former)g(ar)o +(guments)f(ar)o(e)g(the)h(formats)177 1361 y(of)j(the)h(\002rst)g +(netlist,)h(her)o(e)e Fe(vst)f Fk(\(for)h(the)h(original)f(netlist\))h +(and)f Fe(al)g Fk(\(for)g(the)g(extracted)f(netlist\).)46 +b(The)27 b(two)177 1470 y(following)h(ar)o(guments)f(ar)o(e)e(the)i +(names)f(of)h(the)g(netlist.)43 b(W)-8 b(e)27 b(have)f(done)h(our)g +(best)f(to)h(make)g(these)f(names)177 1580 y(identical.)f(Once)20 +b(again,)g(r)o(emember)f(that)g(speci\002cation)i(\002les)f(ar)o(e)e +(post\002xed)i(with)h Fe(vst)e Fk(and)h(extracted)e(\002les)177 +1689 y(with)k Fe(al)p Fk(.)p 446 1953 2973 4 v 446 5169 +4 3216 v 520 2063 a Fc(\230fred/addaccu)33 b(\045-\))i(setenv)f +(MBK_CATA_LIB)f(/alliance/cells/scr:/alliance/cells/ring)520 +2142 y(\230fred/addaccu)g(\045-\))i(lvx)f(vst)h(al)f(core)h(core)f(-f) +1322 2302 y(@@@@@@)208 b(@@@@)139 b(@@@)35 b(@@@@)104 +b(@@@@)1392 2382 y(@@)313 b(@@)209 b(@)105 b(@@)174 b(@)1392 +2461 y(@@)313 b(@@)209 b(@)140 b(@@)104 b(@)1392 2541 +y(@@)348 b(@@)139 b(@)209 b(@@)35 b(@)1392 2621 y(@@)348 +b(@@)139 b(@)244 b(@@)1392 2700 y(@@)383 b(@@)70 b(@)278 +b(@@)1392 2780 y(@@)383 b(@@)70 b(@)278 b(@@@)1392 2860 +y(@@)418 b(@@@)278 b(@)70 b(@@)1392 2939 y(@@)209 b(@)174 +b(@@@)244 b(@)139 b(@@)1392 3019 y(@@)174 b(@)244 b(@)g(@)209 +b(@@)1322 3099 y(@@@@@@@@@@)243 b(@)209 b(@@@)139 b(@@@@)1531 +3258 y(Gate)35 b(Netlist)f(Comparator)1148 3418 y(Alliance)f(CAD)i +(System)f(3.2,)453 b(lvx)34 b(2.23)1148 3497 y(Copyright)f(\(c\))i +(1992-1997,)243 b(ASIM/LIP6/UPMC)1148 3577 y(E-mail)34 +b(support:)g(alliance-support@asim.lip6.fr)520 3736 y(*****)g(Loading)g +(and)h(flattening)e(core)i(\(vst\)...)520 3896 y(*****)f(Loading)g(and) +h(flattening)e(core)i(\(al\)...)520 4055 y(*****)f(Compare)g(Terminals) +g(..............)520 4135 y(*****)g(O.K.)209 b(\(0)35 +b(sec\))520 4294 y(*****)f(Compare)g(Instances)g(..........)520 +4374 y(*****)g(O.K.)209 b(\(0)35 b(sec\))520 4533 y(*****)f(Compare)g +(Connections)g(............)520 4613 y(*****)g(O.K.)209 +b(\(0)35 b(sec\))520 4773 y(=====)f(Terminals)g(..........)f(16)520 +4852 y(=====)h(Instances)g(..........)f(25)520 4932 y(=====)h +(Connectors)g(.........)f(150)520 5091 y(*****)h(Netlists)g(are)h +(Identical.)e(*****)174 b(\(0)34 b(sec\))p 3415 5169 +V 446 5172 2973 4 v 3417 5205 35 3222 v 479 5205 2973 +35 v 376 5517 a Fk(Figur)o(e)20 b(10:)25 b(Doing)d(the)f +(speci\002cation)g(netlist)g(versus)g(extracted)e(netlist)i(compaison)h +(with)g Fe(lvx)p Fk(.)302 5754 y(As)d(a)g(r)o(esult,)g(you)i(now)f +(have)f(a)g(corr)o(ect)g Fe(al)g Fk(\002le)h(for)f(the)h(cir)o(cuit's)g +(cor)o(e.)k(Its)c(name)f(is)h Fe(core.al)p Fk(.)k(This)c(\002le)177 +5873 y(may)h(now)h(be)e(simulated)h(with)g Fe(asimut)p +Fk(,)f(but)g(this)i(is)f(only)h(for)e(cr)o(oss)h(checking.)1907 +6122 y(17)p eop +%%Page: 18 18 +18 17 bop 302 523 a Fk(Execution)21 b(envir)o(onment)g(is)g(set)g(by)g +(issuing:)p 177 605 3526 4 v 177 706 4 101 v 205 672 +a Fd(\230fred/addaccu)38 b(\045-\))i(setenv)f(MBK_IN_LO)f(al)p +3699 706 V 177 709 3526 4 v 3701 725 19 107 v 194 725 +3526 19 v 198 845 a Fk(because)20 b(we)h(want)f(to)i(use)e(the)h +(extracted)e Fe(core.al)h Fk(\002le)h(as)f(input)h(to)h +Fe(asimut)p Fk(.)302 965 y(Then)f(you)g(can)g(r)o(un)g(asimut)g(by)g +(entering)g(the)g(following)h(command:)p 177 1047 3526 +4 v 177 1148 4 102 v 205 1116 a Fd(\230fred/addaccu)38 +b(\045-\))i(asimut)f(core)g(addaccu)g(result)p 3699 1148 +V 177 1151 3526 4 v 3701 1168 19 108 v 194 1168 3526 +19 v 177 1603 a Fg(9)119 b(Core)30 b(to)h(pads)e(routing)177 +1812 y Fk(Having)24 b(built)g(and)f(checked)g(the)h(cor)o(e)f(layout,)i +(you)f(can)f(r)o(un)h(the)g(cor)o(e-to-pads)e(r)o(outer)-6 +b(.)34 b(Its)24 b(function)g(is)g(to)177 1932 y(locate)e(pads)f(appr)o +(opriately)f(ar)o(ound)h(the)h(cor)o(e)g(and)f(to)h(cr)o(eate)e(wiring) +j(segments)g(between)f(pads)f(and)g(chip)177 2051 y(terminals.)302 +2171 y(Befor)o(e)k(we)h(set)h(up)f(the)h(execution)f(envir)o(onment,)i +(take)e(a)g(look)i(at)e(the)g Fe(addaccu.rin)f Fk(\002le.)42 +b(This)27 b(\002le)177 2290 y(instr)o(ucts)33 b Fe(ring)p +Fk(,)i(the)d(cor)o(e)g(to)g(pads)g(r)o(outer)-6 b(,)34 +b(to)e(place)g(pads)f(accor)o(ding)h(to)h(designer)6 +b('s)32 b(wishes.)61 b(It)32 b(also)177 2410 y(instr)o(ucts)22 +b Fe(ring)e Fk(to)h(use)g(segments)g(with)h(r)o(easonable)e(width)h +(for)f(power)h(r)o(outing.)302 2529 y(The)f(syntax)h(of)g(this)h +(\002le)e(is)i(quite)f(simple.)26 b(The)21 b(names)f(mentioned)i(her)o +(e)e(ar)o(e)f(pads')h(instance)h(names.)302 2649 y(Run:)p +177 2709 3526 4 v 177 2813 4 105 v 205 2778 a Fd(\230fred/addaccu)38 +b(\045-\))i(ring)f(addaccu)g(addaccu)p 3699 2813 V 177 +2816 3526 4 v 3701 2833 19 111 v 194 2833 3526 19 v 1907 +6122 a Fk(18)p eop +%%Page: 19 19 +19 18 bop 446 601 2973 4 v 446 3817 4 3217 v 520 709 +a Fc(\230fred/addaccu)33 b(\045-\))i(setenv)f(MBK_IN_LO)f(vst)520 +788 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_IN_PH)f(ap)520 +868 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_OUT_PH)f(ap)520 +948 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_CATA_LIB)f +(/alliance/cells/scr:/alliance/cells/ring)520 1028 y(\230fred/addaccu)g +(\045-\))i(ring)f(addaccu)g(addaccu)1183 1187 y(@@@@@@@)278 +b(@)627 b(@@@@)34 b(@)1252 1267 y(@@)105 b(@@)174 b(@@@)522 +b(@@)140 b(@@)1252 1346 y(@@)f(@@)175 b(@)522 b(@@)209 +b(@)1252 1426 y(@@)139 b(@@)314 b(@@@)35 b(@@@)139 b(@@)1252 +1506 y(@@)105 b(@@)f(@@@@)139 b(@@@)104 b(@)h(@@)1252 +1585 y(@@@@@)244 b(@@)139 b(@@)g(@@)70 b(@@)174 b(@@@@@)1252 +1665 y(@@)70 b(@@)209 b(@@)139 b(@@)g(@@)70 b(@@)174 +b(@)34 b(@@)1252 1745 y(@@)105 b(@@)174 b(@@)139 b(@@)g(@@)70 +b(@@)139 b(@)69 b(@@)1252 1825 y(@@)105 b(@@)174 b(@@)139 +b(@@)g(@@)104 b(@@)209 b(@@)1252 1904 y(@@)139 b(@@)h(@@)f(@@)g(@@)g +(@@)h(@@)1183 1984 y(@@@@@)103 b(@@@)35 b(@@@@@@)f(@@@@)69 +b(@@@@)174 b(@@@@)1671 2143 y(PAD)34 b(ring)h(router)1113 +2303 y(Alliance)f(CAD)g(System)g(3.2,)453 b(ring)34 b(2.9)1113 +2382 y(Copyright)f(\(c\))i(1991-1997,)243 b(ASIM/LIP6/UPMC)1113 +2462 y(E-mail)34 b(support:)g(alliance-support@asim.lip6.fr)799 +2622 y(o)h(reading)f(netlists,)f(layout)h(views)h(of)f(core)h(and)f +(pads.)520 2701 y(Warning)g(2)h(:)f(consistency)g(checks)g(will)g(be)h +(disabled)799 2781 y(o)g(reading)f(file)g(of)h(parameters,)e(including) +h(the)g(placements)g(of)g(pads.)799 2861 y(o)h(making)f(equipotential)f +(list.)799 2940 y(o)i(making)f(the)g(first)g(placement)g(of)h(pads.)799 +3020 y(o)g(filling)f(data)g(internal)g(structures.)799 +3100 y(o)h(reading)f(the)g(connectors)g(positions)f(of)i(the)f(core.) +799 3179 y(o)h(computing)e(the)i(best)f(placement)g(of)h(the)f(pads.) +799 3259 y(o)h(reading)f(the)g(connectors)g(positions)f(of)i(the)f +(pads.)799 3339 y(o)h(routing)f(deportation)f(of)i(connectors.)799 +3419 y(o)g(routing)f(supply)g(tracks.)799 3498 y(o)h(routing)f +(equipotentials.)799 3578 y(o)h(compressing)e(channels.)799 +3658 y(o)i(saving)f(in)g(MBK)h(data)f(structure.)520 +3737 y(lucky,)g(no)h(error.)p 3415 3817 V 446 3820 2973 +4 v 3417 3854 35 3223 v 479 3854 2973 35 v 1116 4166 +a Fk(Figur)o(e)21 b(1)-5 b(1:)25 b Fe(Ring)20 b Fk(r)o(outes)g(the)h +(cor)o(e)f(to)h(pad)f(netlist.)302 4408 y(Like)g(for)h(the)g(cor)o(e,)e +(the)i(cor)o(e)f(to)i(pad)d(r)o(outing)j(must)f(be)f(veri\002ed.)25 +b(Using)c(the)g(same)g(appr)o(oach)e(leads)h(to:)p 177 +4491 3526 4 v 177 4874 4 384 v 205 4558 a Fd(\230fred/addaccu)38 +b(\045-\))i(setenv)f(MBK_OUT_LO)f(al)205 4652 y(\230fred/addaccu)g +(\045-\))i(setenv)f(MBK_IN_PH)f(ap)205 4747 y(\230fred/addaccu)g +(\045-\))i(lynx)f(-v)h(addaccu)205 4842 y(\230fred/addaccu)e(\045-\))i +(lvx)f(vst)h(al)f(addaccu)p 3699 4874 V 177 4877 3526 +4 v 3701 4894 19 390 v 194 4894 3526 19 v 302 5133 a +Fk(It)20 b(is)i(possible)f(to)g(check)g(both)g(cor)o(e)f(a)h(cor)o(e)f +(to)h(pad)f(r)o(outing)h(at)f(once)h(also:)p 177 5215 +3526 4 v 177 5598 4 384 v 205 5282 a Fd(\230fred/addaccu)38 +b(\045-\))i(setenv)f(MBK_OUT_LO)f(al)205 5377 y(\230fred/addaccu)g +(\045-\))i(setenv)f(MBK_IN_PH)f(ap)205 5471 y(\230fred/addaccu)g +(\045-\))i(lynx)f(-v)h(-f)f(addaccu)205 5566 y(\230fred/addaccu)f +(\045-\))i(lvx)f(vst)h(al)f(addaccu)g(-f)p 3699 5598 +V 177 5601 3526 4 v 3701 5618 19 390 v 194 5618 3526 +19 v 302 5857 a Fk(Her)o(e)20 b(the)i Fe(-f)g Fk(option)h(indicate)e +(the)h(tools)h(to)f(expr)o(ess)f(the)h(netlist)h(in)f(terms)g(of)g +(leaf)f(cells)h(\227)f(either)h(pads)1907 6122 y(19)p +eop +%%Page: 20 20 +20 19 bop 177 523 a Fk(or)21 b(standar)o(d)f(cells)h(\227.)26 +b(Obtaining)c(a)f(transistor)g(netlist)h(fr)o(om)f(the)g(layout)g(is)h +(possible)g(using)f(the)h Fe(-t)e Fk(option)177 643 y(of)25 +b Fe(lynx)p Fk(,)h(but)f(this)h(is)g(mor)o(e)f(time)h(and)e(memory)i +(consuming,)i(and)d(fairly)g(useless)h(as)f(we)g(r)o(ely)g(on)g(corr)o +(ect)177 762 y(cells.)177 1078 y Fg(10)119 b(Chip)30 +b(layout)h(visualization)177 1287 y Fk(At)18 b(that)g(point,)i(you)f +(ar)o(e)d(able)i(to)h(see)f(the)g(actual)g(layout)g(by)h(executing)f +(the)h(symbolic)g(layout)g(editor)f Fe(graal)p Fk(.)177 +1406 y(Y)-8 b(ou)22 b(can)e(r)o(un)i(the)f(editor)f(by)h(issuing)h(the) +f(following)h(command:)p 177 1489 3526 4 v 177 1591 4 +103 v 205 1555 a Fd(\230fred/addaccu)38 b(\045-\))i(graal)f(-l)g +(addaccu)p 3699 1591 V 177 1594 3526 4 v 3701 1611 19 +109 v 194 1611 3526 19 v 302 1850 a Fk(Now)-8 b(,)24 +b(the)f(scr)o(een)f(should)i(be)f(\002lled)g(with)h(the)f +Fe(graal)f Fk(window)-8 b(,)25 b(and)e(should)g(contain)h(the)f(whole)h +(lay-)177 1969 y(out.)i(The)21 b(graphical)f(interface)g(of)g +Fe(graal)g Fk(is)h(meant)g(to)g(be)g(self)f(explanatory)-9 +b(.)177 2285 y Fg(1)l(1)119 b(Functional)30 b(abstraction)177 +2494 y Fe(yagle)p Fk(,)h(a)e(functional)h(asbtractor)f(that)g(extracts) +g(a)g(behavior)h(fr)o(om)f(a)g(transistor)h(netlist)h(can)e(r)o(elieve) +f(the)177 2614 y(designer)21 b(fr)o(om)g(many)h(headaches.)j(Fr)o(om)d +(a)e(transistor)i(netlist,)p Fe(yagle)f Fk(\002nally)h(outputs)g(a)e +Ff(VHDL)h Fk(\002le)h(that)177 2733 y(can)f(be)f(simulated.)302 +2853 y(The)g(command)i(is:)p 177 2913 3526 4 v 177 3110 +4 197 v 205 2980 a Fd(\230fred/addaccu)38 b(\045-\))i(setenv)f +(MBK_IN_LO)f(al)205 3074 y(\230fred/addaccu)g(\045-\))i(yagle)f(-i)g +(-v)h(addaccu)p 3699 3110 V 177 3113 3526 4 v 3701 3130 +19 204 v 194 3130 3526 19 v 1907 6122 a Fk(20)p eop +%%Page: 21 21 +21 20 bop 446 601 2973 4 v 446 4216 4 3615 v 520 709 +a Fc(\230fred/addaccu)33 b(\045-\))i(setenv)f(MBK_IN_LO)f(al)520 +788 y(\230fred/addaccu)g(\045-\))i(yagle)f(addaccue)g(-i)g(-v)2159 +948 y(@@@@)2229 1028 y(@@)2229 1107 y(@@)1148 1187 y(@@@@@)g(@@@)104 +b(@@@@)209 b(@@@@@@)104 b(@@)174 b(@@@@@)1183 1267 y(@@)139 +b(@)104 b(@@)h(@)139 b(@@)69 b(@@)140 b(@@)f(@)174 b(@)1217 +1346 y(@@)105 b(@)f(@@)h(@@)f(@)g(@@)140 b(@@)104 b(@@)174 +b(@@)1217 1426 y(@@)70 b(@)209 b(@@@@@)104 b(@)g(@)175 +b(@@)104 b(@@@@@@@@@)1252 1506 y(@@)35 b(@)139 b(@@)105 +b(@@)139 b(@@@)209 b(@@)104 b(@@)1252 1585 y(@@@)139 +b(@@)h(@@)104 b(@@)279 b(@@)104 b(@@)209 b(@)1287 1665 +y(@@)139 b(@@)105 b(@@@)f(@@@@@@)139 b(@@)g(@@)g(@@)1148 +1745 y(@@)69 b(@)209 b(@@@@)69 b(@@)35 b(@@)104 b(@@@)35 +b(@@@@@@)139 b(@@@@)1148 1825 y(@@)69 b(@)558 b(@)174 +b(@)1183 1904 y(@@@)627 b(@@@@@)1357 2064 y(Yet)34 b(Another)g(Gate)h +(Level)f(Extractor)1113 2223 y(Alliance)g(CAD)g(System)g(3.2,)383 +b(yagle)34 b(2.01)1113 2303 y(Copyright)f(\(c\))i(1994-1997,)243 +b(ASIM/LIP6/UPMC)1113 2382 y(E-mail)34 b(support:)g +(alliance-support@asim.lip6.fr)520 2542 y([YAG)g(MES])h(Reading)f(file) +g('addaccue.inf')520 2622 y([YAG)g(MES])h(Loading)f(the)g(figure)g +(addaccue)487 b(00m00s)69 b(u:00m00.0)g(s:00m00.0)520 +2701 y([YAG)34 b(MES])h(Transistor)e(netlist)h(checking)487 +b(00m00s)69 b(u:00m00.0)g(s:00m00.0)520 2781 y([YAG)34 +b(MES])h(Extracting)e(CMOS)i(duals)696 b(00m00s)69 b(u:00m00.0)g +(s:00m00.0)520 2861 y([YAG)34 b(MES])h(Extracting)e(bleeders)766 +b(00m00s)69 b(u:00m00.0)g(s:00m00.0)520 2940 y([YAG)34 +b(MES])h(Making)f(gates)1010 b(00m00s)69 b(u:00m00.0)g(s:00m00.0)520 +3020 y([YAG)34 b(MES])h(Latches)f(detection)835 b(00m00s)69 +b(u:00m00.0)g(s:00m00.0)520 3100 y([YAG)34 b(MES])h(Making)f(cells)1010 +b(00m00s)69 b(u:00m00.0)g(s:00m00.0)520 3179 y([YAG)34 +b(MES])h(External)f(connector)f(verification)347 b(00m00s)69 +b(u:00m00.0)g(s:00m00.0)520 3259 y([YAG)34 b(MES])h(Checking)f(the)g +(yagle)g(figure)557 b(00m00s)69 b(u:00m00.0)g(s:00m00.0)520 +3339 y([YAG)34 b(MES])h(Building)f(the)g(behavioural)f(figure)348 +b(00m00s)69 b(u:00m00.0)g(s:00m00.0)520 3419 y(TOTAL)34 +b(DISASSEMBLY)g(TIME)1010 b(00m00s)69 b(u:00m00.0)g(s:00m00.0)520 +3498 y(--------------------------------------------------)o(--------)o +(--)520 3578 y([YAG)34 b(MES])h(Erasing)f(the)g(transistor)g(netlist) +520 3658 y([YAG)g(MES])h(Generating)e(the)i(VHDL)f(Data)g(Flow)520 +3737 y([YAG)g(MES])h(Execution)e(COMPLETED)520 3817 y +(--------------------------------------------------)o(--------)o(--)520 +3897 y([YAG)h(WAR)h(04])f(80)h(transistors)e(are)i(always)f(off)520 +3976 y([YAG)g(WAR)h(07])f(80)h(transistors)e(are)i(not)f(used)520 +4056 y([YAG)g(WAR)h(09])f(8)h(latches)f(detected)520 +4136 y(See)g(file)h('addaccue.rep')e(for)h(more)h(information)p +3415 4216 V 446 4219 2973 4 v 3417 4252 35 3622 v 479 +4252 2973 35 v 692 4574 a Fk(Figur)o(e)20 b(12:)25 b +Fe(Desb)20 b Fk(abstract)g(the)h(extracted)e(netlist)i(into)h(boolean)f +(equations.)302 4817 y(Then,)g(you)g(can)f(simulate)h(the)g(r)o +(esulting)g(behavior)g(\002le)f(by)h(issuing:)p 177 4899 +3526 4 v 177 5000 4 102 v 205 4968 a Fd(\230fred/addaccu)38 +b(\045-\))i(asimut)f(-b)g(addaccu)g(addaccu)g(result)p +3699 5000 V 177 5003 3526 4 v 3701 5020 19 108 v 194 +5020 3526 19 v 302 5259 a Fk(Simulation)21 b(of)g(extracted)e(behavior) +i(with)h(asimut)f(is)g(not)h(the)f(only)h(mean)f(to)g(see)g(if)f(the)h +(chip)g(is)h(corr)o(ect.)177 5379 y(The)f(extracted)e(behavior)h(can)h +(also)g(be)f(used)h(for)f(formal)h(pr)o(oof.)302 5498 +y(In)g Ff(Alliance)p Fk(,)c(formal)k(pr)o(oof)f(is)h(the)g(ultimate)g +(way)g(to)g(validate)e(your)i(cir)o(cuit.)302 5618 y(Befor)o(e)28 +b(you)i(can)f(use)h Fe(proof)p Fk(,)g(the)g(formal)g(pr)o(over)-6 +b(,)30 b(you)g(must)g(get)g(acquainted)f(with)h(some)g(speci\002c)177 +5738 y(concepts)21 b(of)g(the)g(formal)f(pr)o(oof)h(theory)-9 +b(.)302 5857 y(If)25 b(you)i(look)g(at)f(the)g(extracted)f(behavior)-6 +b(,)26 b Fe(chip.vbe)p Fk(,)g(you)h(can)e(notice)i(that)f +Fe(yagle)f Fk(has)h(found)h(four)1907 6122 y(21)p eop +%%Page: 22 22 +22 21 bop 177 523 a Fk(memorizing)20 b(elements,)f(speci\002ed)g(as)g +Fe(reg)p 1609 523 25 4 v 29 w(bit)49 b(register)p Fk(.)24 +b(In)19 b(the)g(formal)g(pr)o(oof,)f(these)h(four)g(elements)177 +643 y(must)g(match)f(the)g(four)g(edge-trigger)o(ed)e(latches)i(of)g +(the)g(former)f(behavioral)h(speci\002cation,)g(because)f +Fe(proof)177 762 y Fk(can)k(only)g(compar)o(e)f(combinatorial)h(logic)h +(between)e(external)g(connectors)i(and/or)f(sequential)g(elements.)302 +882 y(If)f(you)h(examine)g(the)g(curr)o(ent)f(dir)o(ectory)-9 +b(,)19 b(you)i(will)h(\002nd)f(a)f(\002le)h(called)f +Fe(addaccu.inf)p Fk(.)302 1001 y(This)26 b(\002le)g(contains)g +(speci\002c)g(informations)h(for)f Fe(yagle)p Fk(.)39 +b(It)26 b(instr)o(ucts)h Fe(yagle)e Fk(to)h(r)o(ename)e(the)i(internal) +177 1121 y(node)20 b(name)g(of)f(every)g(latch)h Fj(cor)o(e.l*)g +Fk(by)g(its)g(corr)o(esponding)g(name)g(in)g(the)g(\002rst)g(behavior)f +(\002le.)26 b(In)20 b(the)f Fe(cell-)177 1240 y(s/scr)25 +b Fk(dir)o(ectory)f(you)i(can)g(see)f(that)g(the)h(name)f(of)h(the)f +(internal)h(node)f(of)h(the)g(used)f(latch,)h Fe(ms)p +3340 1240 V 30 w(y.vbe)p Fk(,)f(is)177 1360 y Fj(dff)p +270 1360 V 30 w(s)p Fk(.)302 1479 y(The)20 b(equivalent)h(name)g(in)g +Fe(addaccu.vbe)e Fk(is)i Fj(r)o(eg)p Fk(.)302 1599 y(When)g(you)f(r)o +(un)h Fe(yagle)f Fk(with)h(option)g Fe(-i)p Fk(,)f(the)h(pr)o(ogram)e +(sear)o(ches)h(for)g(the)g(\002le)h Fe(chip.inf)p Fk(,)e(builds)h(the) +177 1719 y(gate)j(netlist)h(and)f(r)o(eplaces)f(the)i(node)g(names)f +(by)h(their)f(equivalent)h(names)g(in)g(the)f(behavior)h(\002le,)g(in)g +(or)o(der)177 1838 y(to)d(make)g Fe(proof)f Fk(work.)302 +1958 y(Then,)h(you)g(can)f(r)o(un)i Fe(proof)p Fk(,)d(the)i(formal)g +(pr)o(over:)p 177 2040 3526 4 v 177 2142 4 103 v 205 +2107 a Fd(\230fred/addaccu)38 b(\045-\))i(proof)f(-d)g(-p)h(addaccu)f +(addaccue)p 3699 2142 V 177 2145 3526 4 v 3701 2162 19 +109 v 194 2162 3526 19 v 1907 6122 a Fk(22)p eop +%%Page: 23 23 +23 22 bop 446 601 2973 4 v 446 5083 4 4483 v 520 709 +a Fc(\230fred/addaccu)33 b(\045-\))i(proof)f(-d)g(addaccue)g(addaccu) +1078 868 y(@@@@@@@)1289 b(@@@)1148 948 y(@@)104 b(@@)1185 +b(@)70 b(@@)1148 1028 y(@@)139 b(@@)1115 b(@@)70 b(@@)1148 +1107 y(@@)139 b(@@)34 b(@@@)h(@@@)174 b(@@@)244 b(@@@)208 +b(@@)1148 1187 y(@@)104 b(@@)g(@@@)70 b(@@)f(@@)105 b(@@)f(@@)g(@@)70 +b(@@@@@@@@)1148 1267 y(@@@@@)173 b(@@)105 b(@@)34 b(@@)174 +b(@@)35 b(@@)174 b(@@)104 b(@@)1148 1346 y(@@)278 b(@@)209 +b(@@)174 b(@@)35 b(@@)174 b(@@)104 b(@@)1148 1426 y(@@)278 +b(@@)209 b(@@)174 b(@@)35 b(@@)174 b(@@)104 b(@@)1148 +1506 y(@@)278 b(@@)209 b(@@)174 b(@@)35 b(@@)174 b(@@)104 +b(@@)1148 1585 y(@@)278 b(@@)244 b(@@)105 b(@@)f(@@)g(@@)139 +b(@@)1078 1665 y(@@@@@@)173 b(@@@@)279 b(@@@)244 b(@@@)139 +b(@@@@@@)1706 1825 y(Formal)34 b(Proof)1113 1984 y(Alliance)g(CAD)g +(System)g(3.2,)348 b(proof)35 b(3.158)1113 2064 y(Copyright)e(\(c\))i +(90-97,)383 b(ASIM/LIP6/UPMC)1113 2143 y(E-mail)34 b(support:)g +(alliance-support@asim.lip6.fr)520 2303 y +(================================)66 b(Environment)i +(================================)520 2382 y(MBK_WORK_LIB)417 +b(=)35 b(.)520 2462 y(MBK_CATA_LIB)417 b(=)35 b(/labo/cells/grog)520 +2542 y(=======================)67 b(Files,)34 b(Options)g(and)g +(Parameters)69 b(=======================)520 2622 y(First)34 +b(VHDL)h(file)313 b(=)35 b(addaccue.vbe)520 2701 y(Second)f(VHDL)g +(file)279 b(=)35 b(addaccu.vbe)520 2781 y(The)f(auxiliary)g(signals)g +(are)h(erased)520 2861 y(Errors)f(are)h(displayed)520 +2940 y(==================================================)o(========)o +(========)o(=======)o(======)520 3100 y(Compiling)f('addaccue')f(...) +520 3179 y(Compiling)h('addaccu')f(...)520 3339 y(Running)h(abl)g +(ordonnancer)g(on)g(addaccue)520 3419 y(........)520 +3578 y(Running)g(Abl2Bdd)g(on)h(addaccue)520 3658 y(--->)f(final)h +(number)f(of)g(nodes)g(=)h(664\(404\))520 3817 y(Running)f(Abl2Bdd)g +(on)h(addaccu)520 3897 y +(--------------------------------------------------)o(--------)o +(--------)o(-------)o(-------)973 3976 y(Formal)f(proof)h(with)f +(Ordered)g(Binary)g(Decision)g(Diagrams)g(between)973 +4136 y('./addaccue')68 b(and)i('./addaccu')520 4216 y +(--------------------------------------------------)o(--------)o +(--------)o(-------)o(-------)520 4295 y +(==============================)c(PRIMARY)34 b(OUTPUT)69 +b(===============================)520 4375 y +(=============================)d(AUXILIARY)34 b(SIGNAL)69 +b(==============================)520 4455 y +(==============================)d(REGISTER)34 b(SIGNAL)69 +b(==============================)520 4534 y +(===============================)d(EXTERNAL)34 b(BUS)g +(=================================)520 4614 y +(================================)d(INTERNAL)j(BUS)g +(=================================)1496 4773 y(Formal)g(Proof)h(:)f(OK) +520 4933 y(pppppppppppppppppppppppprrrrrrrrrrrroooooooooooooo)o +(oooooooo)o(ooooooof)o(fffffff)o(fffffff)520 5013 y +(--------------------------------------------------)o(--------)o +(--------)o(-------)o(-------)p 3415 5083 V 446 5086 +2973 4 v 3417 5120 35 4490 v 479 5120 2973 35 v 177 5432 +a Fk(Figur)o(e)c(13:)43 b(Doing)31 b(a)f(formal)g(pr)o(oof)f(between)h +(the)h(abstracted)d(behavior)i(and)g(the)g(speci\002cations)h(using)177 +5552 y Fe(proof)p Fk(.)302 5784 y(Option)24 b Fe(-d)f +Fk(displays)h(the)f(logical)h(functions)h(that)e(do)g(not)i(match,)f +(and)f(the)g Fe(-p)g Fk(option)i(tells)f Fe(proof)e Fk(to)1907 +6122 y(23)p eop +%%Page: 24 24 +24 23 bop 177 523 a Fk(ignor)o(e)21 b(the)g(internal)g(polarity)g(of)f +(the)h(\003ip-\003ops:)27 b(we)20 b(described)g(our)h(behavioral)f +(with)i(a)e(r)o(egister)177 839 y Fg(12)119 b(Further)29 +b(veri\002cations)177 1048 y Fk(The)21 b(last)g(veri\002cation)g +(concerns)g(design)g(r)o(ules.)26 b(Befor)o(e)19 b(the)i(chip)g(can)g +(actually)f(be)g(tar)o(getted)f(on)j(a)e(pr)o(ocess,)177 +1167 y(a)g(symbolic)i(design)f(r)o(ule)g(check)g(\227)g(DRC)g(\227)g +(must)g(be)g(performed.)302 1287 y(In)g Ff(Alliance)p +Fk(,)c(the)k(design)g(r)o(ule)g(checker)g(is)g Fe(druc)p +Fk(.)302 1406 y(Y)-8 b(ou)22 b(just)f(have)f(to)h(type:)p +177 1489 3526 4 v 177 1777 4 289 v 205 1556 a Fd(\230fred/addaccu)38 +b(\045-\))i(setenv)f(MBK_IN_PH)f(ap)205 1650 y(\230fred/addaccu)g +(\045-\))i(setenv)f(RDS_TECHNO_NAME)e(/alliance/etc/cmos_5.rds)205 +1745 y(\230fred/addaccu)h(\045-\))i(druc)f(addaccu)p +3699 1777 V 177 1780 3526 4 v 3701 1797 19 296 v 194 +1797 3526 19 v 302 2036 a Fk(The)26 b(\002le)h(pointed)h(to)f(by)g(the) +g Fe(RDS)p 1436 2036 25 4 v 29 w(TECHNO)p 1765 2036 V +29 w(NAME)f Fk(envir)o(onement)h(variable)e(contains)j(many)f(techno-) +177 2156 y(logical)21 b(information)h(including)g(the)f(desription)g +(of)f(the)h(design)g(r)o(ules.)1907 6122 y(24)p eop +%%Page: 25 25 +25 24 bop 446 601 2973 4 v 446 3977 4 3376 v 520 709 +a Fc(\230fred/addaccu)33 b(\045-\))i(setenv)f(MBK_IN_PH)f(ap)520 +788 y(\230fred/addaccu)g(\045-\))i(setenv)f(RDS_OUT)g(cif)520 +868 y(\230fred/addaccu)f(\045-\))i(setenv)f(RDS_TECHNO_NAME)f +(/alliance/etc/cmos_5.rds)520 948 y(\230fred/addaccu)g(\045-\))i +(setenv)f(MBK_CATA_LIB)f(/alliance/cells/scr:/alliance/cells/ring)520 +1028 y(\230fred/addaccu)g(\045-\))i(druc)f(addaccu)1148 +1187 y(@@@@@@@)173 b(@@@@@@@)697 b(@@@@)34 b(@)1217 1267 +y(@@)105 b(@@)174 b(@@)104 b(@@)558 b(@@)139 b(@@)1217 +1346 y(@@)h(@@)f(@@)g(@@)488 b(@@)209 b(@)1217 1426 y(@@)174 +b(@@)105 b(@@)139 b(@@)70 b(@@@)f(@@@@)g(@@)244 b(@)1217 +1506 y(@@)174 b(@@)105 b(@@)f(@@)139 b(@@)h(@@)69 b(@@)1217 +1585 y(@@)174 b(@@)105 b(@@@@@)208 b(@@)140 b(@@)69 b(@@)1217 +1665 y(@@)174 b(@@)105 b(@@)69 b(@@)174 b(@@)140 b(@@)69 +b(@@)1217 1745 y(@@)174 b(@@)105 b(@@)f(@@)139 b(@@)h(@@)69 +b(@@)1217 1825 y(@@)140 b(@@)f(@@)104 b(@@)139 b(@@)h(@@)104 +b(@@)209 b(@)1217 1904 y(@@)105 b(@@)174 b(@@)139 b(@@)104 +b(@@)h(@@@)139 b(@@)g(@@)1148 1984 y(@@@@@@@)173 b(@@@@@)104 +b(@@@)g(@@@@)69 b(@@)175 b(@@@@)1601 2143 y(Design)34 +b(Rule)g(Checker)1148 2303 y(Alliance)f(CAD)i(System)f(3.2,)418 +b(druc)34 b(3.00)1148 2382 y(Copyright)f(\(c\))i(1993-1997,)243 +b(ASIM/LIP6/UPMC)1148 2462 y(E-mail)34 b(support:)g +(alliance-support@asim.lip6.fr)520 2622 y(Flatten)g(DRC)g(on:)h +(addaccu)520 2701 y(Delete)f(MBK)h(figure)f(:)g(addaccu)520 +2781 y(Load)g(Flatten)g(Rules)h(:)f +(/usr/local/cad/alliance/etc/cmos_7.rds)520 2940 y(Unify)g(:)h(addaccu) +520 3100 y(Create)f(Ring)g(:)h(addaccu_rng)520 3179 y(Merge)f +(Errorfiles:)520 3339 y(Merge)g(Error)g(Instances:)520 +3419 y(instructionCourante)e(:)j(50)520 3498 y(End)f(DRC)h(on:)f +(addaccu)520 3578 y(Saving)g(the)h(Error)f(file)g(figure)520 +3658 y(Done)590 3737 y(0)520 3897 y(File:)g(addaccu.drc)g(is)g(empty:)g +(no)h(errors)f(detected.)p 3415 3977 V 446 3980 2973 +4 v 3417 4013 35 3383 v 479 4013 2973 35 v 963 4335 a +Fk(Figur)o(e)20 b(14:)25 b(Symbolic)c(design)g(r)o(ule)g(checking)g +(using)h Fe(druc)p Fk(.)302 4578 y(This)e(layout)h(level)f +(veri\002cation)g(has)g(been)g(optimized)g(for)g(speed.)25 +b(So)20 b(it)g(is)h(fast,)e(even)h(on)h(lar)o(ge)e(cir)o(cuits,)177 +4697 y(but)i(r)o(equir)o(es)f(quite)h(a)f(few)h(megs)g(then.)177 +5013 y Fg(13)119 b(Symbolic)31 b(to)f(real)f(technology)i(translation) +177 5222 y Fk(The)i(purpose)f(of)h Ff(Alliance)c Fk(symbolic)34 +b(layout)e(appr)o(oach)g(is)g(to)h(allow)g(the)g(designs)g(to)g(be)f +(tar)o(getted)f(on)177 5342 y(several)20 b(technologies.)27 +b(The)21 b(whole)g(chip)g(is)g(conceived)g(with)g(symbolic)h(cells.)302 +5461 y(In)27 b(or)o(der)f(to)h(send)g(the)g(chip)g(to)g(a)f +(speci\002ed)h(foundry)-9 b(,)28 b(the)f(designer)f(must)i(perform)e +(the)h(symbolic)h(to)177 5581 y(r)o(eal)20 b(conversion.)26 +b(This)21 b(stage)g(is)g(the)g(last)g(stage)f(of)h(the)g(design)g +(methodology)-9 b(.)302 5700 y(The)20 b(only)h(things)g(you)g(have)f +(to)g(specify)g(is)h(the)f(tar)o(get)f(technology)j(and)d(some)i(envir) +o(onment)g(variables.)302 5820 y(The)e(only)i(tar)o(get)d(technology)j +(available)e(in)h(the)f(distribution)i(is)f Fe(prol10)p +Fk(,)e(a)h(fake)g(1.0)f(pr)o(ocess.)25 b(Y)-8 b(ou)21 +b(can)1907 6122 y(25)p eop +%%Page: 26 26 +26 25 bop 177 523 a Fk(choose)22 b(it)f(by)g(setting)g(the)g +Fe(RDS)p 1193 523 25 4 v 29 w(TECHNO)p 1522 523 V 29 +w(NAME)f Fk(envir)o(onment)h(variable.)p 177 605 3526 +4 v 177 709 4 105 v 205 674 a Fd(\230fred/addaccu)38 +b(\045-\)setenv)h(RDS_TECHNO_NAME)e(/alliance/etc/prol10.rds)p +3699 709 V 177 712 3526 4 v 3701 729 19 111 v 194 729 +3526 19 v 302 968 a Fk(Y)-8 b(ou)26 b(also)g(have)f(to)h(specify)f(the) +g(format)g(of)h(the)f(output)h(\002le)g(that)f(will)i(r)o(epr)o(esent)c +(the)j(foundry)f(layout.)177 1088 y Ff(Alliance)18 b +Fk(pr)o(ovides)i(two)h(distinct)h(formats:)j Fe(gds)20 +b Fk(and)h Fe(cif)p Fk(.)p 177 1170 3526 4 v 177 1272 +4 103 v 205 1239 a Fd(\230fred/addaccu)38 b(\045-\))i(setenv)f(RDS_OUT) +f(cif)p 3699 1272 V 177 1275 3526 4 v 3701 1292 19 109 +v 194 1292 3526 19 v 302 1531 a Fk(This)31 b(command)g(instr)o(ucts)h +(the)f(converter)f(to)h(output)g(the)g(chip)g(in)g(the)g(Caltech)f +(Intermediat)g(Form.)177 1651 y(This)e(form)g(is)f(an)h +Fe(ascii)e Fk(format,)j(that)e(can)g(include)h(connectors,)h(wher)o +(eas)e Fe(gds)g Fk(is)h(binary)f(and)g(doesn't)177 1771 +y(include)21 b(connectors.)302 1890 y(A)32 b(tricky)g(thing)i(is)f +(that)f(the)h Fj(pad)e Fk(part)h(of)g(the)h(symbolic)g(IO)g(pads)f +(must)h(be)f(r)o(eplaced)e(by)j(its)g(\224r)o(eal\224)177 +2010 y(equivalent.)55 b(This)31 b(is)g(indeed)f(the)h(only)h +(technology)g(dependant)d(part)h(of)h(a)f(cir)o(cuit)g(designed)g(with) +h(our)177 2129 y(symbolic)22 b(appr)o(oach.)302 2249 +y(So)f(you)h(also)g(have)f(to)h(set)g(the)g Fe(RDS)p +1451 2249 25 4 v 29 w(IN)f Fk(envir)o(onment)h(variable,)f(to)h +(indicate)f(the)h(format)f(of)g(the)h(substi-)177 2368 +y(tution)g(pad.)p 177 2451 3526 4 v 177 2553 4 103 v +205 2519 a Fd(\230fred/addaccu)38 b(\045-\))i(setenv)f(RDS_IN)g(cif)p +3699 2553 V 177 2556 3526 4 v 3701 2573 19 109 v 194 +2573 3526 19 v 302 2812 a Fk(At)20 b(last,)h(you)g(r)o(un)g(the)g +(symbolic)h(to)f(r)o(eal)f(converter)-6 b(,)19 b Fe(s2r)p +Fk(.)p 177 2894 3526 4 v 177 2993 4 100 v 205 2961 a +Fd(\230fred/addaccu)38 b(\045-\))i(s2r)f(-cv)h(addaccu)p +3699 2993 V 177 2996 3526 4 v 3701 3013 19 106 v 194 +3013 3526 19 v 302 3252 a Fk(Y)-8 b(our)21 b(chip)g(is)g(now)h(r)o +(eady)d(for)i(the)g(foundry)g(that)f(pr)o(ovides)g(the)h(pr)o(ol10)f +(technology)-9 b(.)1907 6122 y(26)p eop +%%Page: 27 27 +27 26 bop 446 601 2973 4 v 446 4614 4 4014 v 520 709 +a Fc(\230fred/addaccu)33 b(\045-\))i(setenv)f(MBK_IN_PH)f(ap)520 +788 y(\230fred/addaccu)g(\045-\))i(setenv)f(MBK_CATA_LIB)f +(/alliance/cells/scr:/alliance/cells/ring)520 868 y(\230fred/addaccu)g +(\045-\))i(setenv)f(RDS_TECHNO_NAME)f(/alliance/etc/prol10.rds)520 +948 y(\230fred/addaccu)g(\045-\))i(setenv)f(RDS_OUT)g(cif)520 +1028 y(\230fred/addaccu)f(\045-\))i(setenv)f(RDS_IN)g(cif)520 +1107 y(\230fred/addaccu)f(\045-\))i(s2r)f(-v)h(addaccu)1845 +1267 y(@@@@)1810 1346 y(@)105 b(@@)1775 1426 y(@@)140 +b(@@)1496 1506 y(@@@@@@)69 b(@@@)105 b(@@)34 b(@@@)h(@@@)1461 +1585 y(@@)140 b(@)104 b(@)h(@@)f(@@@)69 b(@@)1461 1665 +y(@@@)384 b(@)139 b(@@)104 b(@@)1496 1745 y(@@@@)279 +b(@)174 b(@@)1566 1825 y(@@@@)g(@)209 b(@@)1461 1904 +y(@)140 b(@@@)104 b(@)139 b(@)70 b(@@)1461 1984 y(@@)140 +b(@@)69 b(@@@@@@)104 b(@@)1461 2064 y(@)35 b(@@@@@)69 +b(@@@@@@@)g(@@@@)1357 2223 y(Symbolic)34 b(to)g(Real)h(layout)f +(converter)1113 2382 y(Alliance)g(CAD)g(System)g(3.2,)488 +b(s2r)34 b(3.6)1113 2462 y(Copyright)f(\(c\))i(1991-1997,)243 +b(ASIM/LIP6/UPMC)1113 2542 y(E-mail)34 b(support:)g +(alliance-support@asim.lip6.fr)799 2781 y(o)h(loading)f(technology)f +(file)i(:)f(/usr/local/cad/alliance/etc/prol10_7.rds)799 +2861 y(o)h(loading)f(all)g(level)g(of)h(symbolic)f(layout)g(:)h +(addaccu)799 2940 y(o)g(removing)f(symbolic)f(data)i(structure)799 +3020 y(o)g(layout)f(post-treating)f(with)h(connectors,)g(with)g +(scotchs.)799 3100 y(-->)g(post-treating)g(model)g(palo_sp)938 +3179 y(rectangle)g(merging)g(:)938 3259 y(.)h(RDS_NWELL)f +(.................................)938 3339 y(.)h(RDS_NIMP)f +(.................................)938 3419 y(.)h(RDS_PIMP)f +(.................................)938 3498 y(.)h(RDS_ACTIV)f +(.................................)938 3578 y(.)h(RDS_POLY)f +(.................................)938 3658 y(.)h(RDS_ALU1)f +(.................................)938 3737 y(.)h(RDS_ALU2)f +(.................................)938 3817 y(.)938 3897 +y(.)938 3976 y(.)799 4056 y(o)h(replacing)e(black)i(boxes)799 +4136 y(-->)f(replace)g(cell)h(padreal)799 4216 y(o)g(saving)f +(addaccu.cif)799 4295 y(o)h(memory)f(allocation)f(informations)799 +4375 y(-->)h(required)g(rectangles)g(=)h(7318)69 b(really)34 +b(allocated)g(=)g(7)799 4455 y(-->)g(required)g(scotchs)g(=)h(3)70 +b(really)34 b(created)g(=)g(3)799 4534 y(-->)g(Number)h(of)f(allocated) +g(bytes:)g(341231)p 3415 4614 V 446 4617 2973 4 v 3417 +4651 35 4020 v 479 4651 2973 35 v 629 4973 a Fk(Figur)o(e)21 +b(15:)j(T)-7 b(ranslating)21 b(the)g(symbolic)g(layout)g(into)h(pr)o +(ocess)e(layout)h(with)h Fe(s2r)p Fk(.)177 5312 y Fg(14)119 +b(Conclusion)177 5521 y Fk(If)21 b(you)g(actually)f(arrived)g(her)o(e)f +(doing)j(all)e(the)h(pr)o(evious)g(steps,)f(congratulation!)302 +5641 y(Y)-8 b(ou)31 b(can)f(see)f(an)h(automatic)g(r)o(eplay)f(of)h +(this)h(tutorial)f(by)g(executing)g(the)g Fe(Makefile)f +Fk(in)h(the)g(curr)o(ent)1907 6122 y(27)p eop +%%Page: 28 28 +28 27 bop 177 523 a Fk(dir)o(ectory)20 b(by)h(issuing)h(the)f(command:) +p 177 605 3526 4 v 177 704 4 100 v 205 673 a Fd(\230fred/addaccu)38 +b(\045-\))i(make)p 3699 704 V 177 707 3526 4 v 3701 724 +19 106 v 194 724 3526 19 v 198 844 a Fk(Note)21 b(that)g(the)f +Fe(Makefile)g Fk(uses)h(Bourne-shell)g(commands.)302 +964 y(If)j(you)i(plan)e(to)i(design)f(a)f(chip)h(with)h +Ff(Alliance)p Fk(,)d(it)i(is)g(a)g(good)g(idea)f(to)h(use)g +Fe(Makefile)p Fk(s)f(to)h(ensur)o(e)f(the)177 1083 y(consistency)f +(between)f(the)g(design)g(and)f(veri\002cations)h(of)g(the)g(dif)o(fer) +o(ents)e(views)i(and)f(hierar)o(chies,)g(but)h(this)177 +1203 y(is)f(another)g(story)-9 b(.)302 1322 y(If)22 b(anything)i(went)f +(wr)o(ong)g(or)g(if)f(you)h(have)g(any)f(question,)j(you)e(can)f +(contact)h(us)g(by)g(sending)g(a)f(mail)h(to)177 1442 +y(the)e(support)g(team)f(of)h Ff(Alliance)p Fk(,)d(located)i(at)g +Fe(alliance-support@lip6.fr)p Fk(.)1907 6122 y(28)p eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/alliance/share/tutorials/addaccu/tex.tgz b/alliance/share/tutorials/addaccu/tex.tgz deleted file mode 100644 index 7b2985875aa8d064685657382e620c39933f4488..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75801 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�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 PU-kJvPsxdP05}8yu8U&Q diff --git a/alliance/share/tutorials/addaccu/tex/Makefile b/alliance/share/tutorials/addaccu/tex/Makefile new file mode 100644 index 00000000..1fa654fd --- /dev/null +++ b/alliance/share/tutorials/addaccu/tex/Makefile @@ -0,0 +1,24 @@ +# Generic Makefile for TeTeX projet +# (C) 1999, Czo +# $Id: Makefile,v 1.1 2000/01/20 16:09:58 czo Exp $ + +MYFILE=addaccu + +%.eps : %.fig + fig2dev -L ps -c -p dummy $*.fig $*.eps + +view : ps + gv $(MYFILE).ps + +ps : $(MYFILE).tex + latex $(MYFILE).tex + dvips $(MYFILE).dvi -o $(MYFILE).ps + +distrib : clean ps + ps2pdf $(MYFILE).ps + cp -f $(MYFILE).ps .. + cp -f $(MYFILE).pdf .. + $(MAKE) clean + +clean : + rm -f $(MYFILE).ps $(MYFILE).pdf *.log *.dvi *.aux diff --git a/alliance/share/tutorials/addaccu/tex/addaccu.eps b/alliance/share/tutorials/addaccu/tex/addaccu.eps new file mode 100644 index 00000000..8b116d1b --- /dev/null +++ b/alliance/share/tutorials/addaccu/tex/addaccu.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: addaccu.fig +%%Creator: fig2dev Version 3.1 Patchlevel 1 +%%CreationDate: Wed Oct 18 14:09:38 1995 +%%For: fred@fado (Frederic PETROT) +%%Orientation: Landscape +%%BoundingBox: 0 0 186 291 +%%Pages: 0 +%%BeginSetup +%%IncludeFeature: *PageSize A4 +%%EndSetup +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {} def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-26.0 -14.0 translate + 90 rotate +1 -1 scale + +/clp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/l {lineto} bind def +/m {moveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def +%%EndProlog + +$F2psBegin +10 setmiterlimit + 0.06299 0.06299 sc +7.500 slw +% Polyline +n 2252 1553 m 2252 2273 l 2927 1553 l 2927 1103 l 2252 428 l 2252 1103 l + 2522 1328 l 2252 1553 l gs 0.00 setgray ef gr gs col-1 s gr +/Courier-Bold findfont 180.00 scalefont setfont +2657 1426 m +gs 1 -1 sc (+) col-1 show gr +% Polyline +n 1622 1532 m 1892 1532 l 1892 2252 l 1622 2252 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 1622 1532 m 1892 1892 l 1622 2252 l gs 0.00 setgray ef gr gs col-1 s gr +% Ellipse +n 1578 1308 37 37 0 360 DrawEllipse gs 0.00 setgray ef gr gs col-1 s gr + +% Polyline +n 1534 1309 m 1263 1173 l 1263 1443 l 1534 1309 l gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 2253 2388 m 2523 2388 l 2523 3108 l 2253 3108 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Ellipse +n 1532 1352 37 37 0 360 DrawEllipse gs 1.00 setgray ef gr gs col-1 s gr + +% Polyline +n 1488 1353 m 1217 1217 l 1217 1487 l 1488 1353 l gs 1.00 setgray ef gr gs col-1 s gr +% Polyline +n 1576 1576 m 1846 1576 l 1846 2296 l 1576 2296 l clp gs 1.00 setgray ef gr gs col-1 s gr +% Polyline +n 2206 1597 m 2206 2317 l 2881 1597 l 2881 1147 l 2206 472 l 2206 1147 l + 2476 1372 l 2206 1597 l gs 1.00 setgray ef gr gs col-1 s gr +% Polyline +n 2207 2432 m 2477 2432 l 2477 3152 l 2207 3152 l clp gs 1.00 setgray ef gr gs col-1 s gr +% Polyline +n 2252 2522 m 2342 2522 l 2342 2927 l 2432 2927 l gs 1.00 setgray ef gr gs col-1 s gr +% Polyline +n 2207 3152 m 2342 2972 l 2477 3152 l gs col-1 s gr +30.000 slw +% Polyline +n 1846 1935 m 2115 1935 l gs col7 1.00 shd ef gr gs col7 s gr +% Polyline +n 2565 855 m 2565 586 l gs col7 1.00 shd ef gr gs col7 s gr +% Polyline +n 2476 2790 m 2745 2790 l gs col7 1.00 shd ef gr gs col7 s gr +% Polyline +n 1576 1350 m 1845 1350 l gs col7 1.00 shd ef gr gs col7 s gr +% Polyline +n 2881 1350 m 3150 1350 l gs col7 1.00 shd ef gr gs col7 s gr +/Courier-Bold findfont 270.00 scalefont setfont +2565 1440 m +gs 1 -1 sc (+) col-1 show gr +7.500 slw +% Polyline +n 1576 1576 m 1846 1936 l 1576 2296 l gs col-1 s gr +% Polyline +n 2881 1351 m 2881 1351 l gs col-1 s gr +% Polyline +n 1846 1936 m 2206 1936 l gs col-1 s gr +% Polyline +n 2340 2565 m 2340 2790 l gs col-1 s gr +n 2370.00 2670.00 m 2340.00 2790.00 l 2310.00 2670.00 l 2340.50 2670.50 l 2370.00 2670.00 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 1216 1351 m 901 1351 l gs col-1 s gr +% Polyline +n 1711 1576 m 1711 1351 l 1576 1351 l gs col-1 s gr +% Polyline +n 2566 856 m 2566 541 l 4141 541 l gs col-1 s gr +% Polyline +n 901 3286 m 2341 3286 l 2341 3151 l gs col-1 s gr +% Polyline +n 2476 2790 m 3556 2790 l 3556 1350 l gs col-1 s gr +% Polyline +n 2476 2791 m 3556 2791 l 3556 1351 l gs col-1 s gr +% Polyline +n 1126 2116 m 1126 2791 l 2206 2791 l gs col-1 s gr +% Polyline +n 901 1756 m 1576 1756 l gs col-1 s gr +% Polyline +n 1126 2116 m 1576 2116 l gs col-1 s gr +% Polyline +n 901 811 m 2206 811 l gs col-1 s gr +/Courier-Bold findfont 180.00 scalefont setfont +225 855 m +gs 1 -1 sc (b[3:0]) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +225 3330 m +gs 1 -1 sc (ck) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +4185 1395 m +gs 1 -1 sc (s[3:0]) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +4230 585 m +gs 1 -1 sc (cout) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +225 1800 m +gs 1 -1 sc (a[3:0]) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +225 1395 m +gs 1 -1 sc (sel) col-1 show gr +% Polyline +n 2881 1351 m 4141 1351 l gs col-1 s gr +$F2psEnd +restore diff --git a/alliance/share/tutorials/addaccu/tex/addaccu.fig b/alliance/share/tutorials/addaccu/tex/addaccu.fig new file mode 100644 index 00000000..279845b1 --- /dev/null +++ b/alliance/share/tutorials/addaccu/tex/addaccu.fig @@ -0,0 +1,88 @@ +#FIG 3.1 +Portrait +Center +Metric +1200 2 +6 1214 1214 1574 1529 +1 3 0 1 -1 -1 5 0 0 0.0000000 1 0.000 1532 1352 37 37 1532 1352 1558 1379 +2 1 0 1 -1 -1 5 0 0 0.000 0 0 7 0 0 4 + 1488 1353 1217 1217 1217 1487 1488 1353 +-6 +6 1619 1529 1934 2294 +2 2 0 1 -1 -1 10 0 20 0.000 0 0 7 0 0 5 + 1622 1532 1892 1532 1892 2252 1622 2252 1622 1532 +2 1 0 1 -1 -1 10 0 20 0.000 0 0 7 0 0 3 + 1622 1532 1892 1892 1622 2252 +-6 +6 2249 404 2969 2294 +2 1 0 1 -1 -1 10 0 20 0.000 0 0 7 0 0 8 + 2252 1553 2252 2273 2927 1553 2927 1103 2252 428 2252 1103 + 2522 1328 2252 1553 +4 0 -1 10 0 14 12 0.0000000 4 75 105 2657 1426 +\001 +-6 +6 1259 1169 1619 1484 +1 3 0 1 -1 -1 10 0 20 0.0000000 1 0.000 1578 1308 37 37 1578 1308 1604 1335 +2 1 0 1 -1 -1 10 0 20 0.000 0 0 7 0 0 4 + 1534 1309 1263 1173 1263 1443 1534 1309 +-6 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1846 1936 2206 1936 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 1 + 2881 1351 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 2881 1351 4141 1351 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 901 811 2206 811 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1126 2116 1576 2116 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 901 1756 1576 1756 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 3 + 1126 2116 1126 2791 2206 2791 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 3 + 2476 2791 3556 2791 3556 1351 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 3 + 901 3286 2341 3286 2341 3151 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 3 + 2566 856 2566 541 4141 541 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 3 + 1711 1576 1711 1351 1576 1351 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1216 1351 901 1351 +2 2 0 1 -1 -1 5 0 0 0.000 0 0 7 0 0 5 + 1576 1576 1846 1576 1846 2296 1576 2296 1576 1576 +2 2 0 1 -1 -1 10 0 20 0.000 0 0 7 0 0 5 + 2253 2388 2523 2388 2523 3108 2253 3108 2253 2388 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 2340 2565 2340 2790 +2 1 0 1 -1 -1 1 0 -1 0.000 0 0 7 0 0 3 + 1576 1576 1846 1936 1576 2296 +2 1 0 1 -1 -1 3 0 0 0.000 0 0 7 0 0 4 + 2252 2522 2342 2522 2342 2927 2432 2927 +2 2 0 1 -1 -1 4 0 0 0.000 0 0 7 0 0 5 + 2207 2432 2477 2432 2477 3152 2207 3152 2207 2432 +2 1 0 1 -1 -1 3 0 -1 0.000 0 0 7 0 0 3 + 2207 3152 2342 2972 2477 3152 +2 1 0 1 -1 -1 5 0 0 0.000 0 0 7 0 0 8 + 2206 1597 2206 2317 2881 1597 2881 1147 2206 472 2206 1147 + 2476 1372 2206 1597 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 3 + 2476 2790 3556 2790 3556 1350 +2 1 0 3 7 7 2 0 20 0.000 0 0 -1 0 0 2 + 2476 2790 2745 2790 +2 1 0 3 7 7 2 0 20 0.000 0 0 -1 0 0 2 + 2881 1350 3150 1350 +2 1 0 3 7 7 2 0 20 0.000 0 0 -1 0 0 2 + 1846 1935 2115 1935 +2 1 0 3 7 7 2 0 20 0.000 0 0 -1 0 0 2 + 2565 855 2565 586 +2 1 0 3 7 7 2 0 20 0.000 0 0 -1 0 0 2 + 1576 1350 1845 1350 +4 0 -1 0 0 14 12 0.0000000 4 165 630 225 855 b[3:0]\001 +4 0 -1 0 0 14 12 0.0000000 4 135 210 225 3330 ck\001 +4 0 -1 0 0 14 12 0.0000000 4 165 630 4185 1395 s[3:0]\001 +4 0 -1 0 0 14 12 0.0000000 4 120 420 4230 585 cout\001 +4 0 -1 0 0 14 12 0.0000000 4 165 630 225 1800 a[3:0]\001 +4 0 -1 0 0 14 12 0.0000000 4 135 315 225 1395 sel\001 +4 0 -1 1 0 14 18 0.0000000 4 150 165 2565 1440 +\001 diff --git a/alliance/share/tutorials/addaccu/tex/addaccu.tex b/alliance/share/tutorials/addaccu/tex/addaccu.tex new file mode 100644 index 00000000..766c48bf --- /dev/null +++ b/alliance/share/tutorials/addaccu/tex/addaccu.tex @@ -0,0 +1,1590 @@ +%%%%%%%%%%%%%%%%%%%% +% +% The addaccu tutorial. +% Original Version 1.0 in text form by Francois Pecheux +% Version for Alliance releases 2.0 and up by Frederic Petrot +% Modified by czo for Alliance release 4.0 (01/2000) +% TODO : no fully working, needs some adjustements +% $Id: addaccu.tex,v 1.1 2000/01/20 16:09:58 czo Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\documentclass{article} +\usepackage{palatino,doublespace,here,psfig,fancybox} +\textwidth 15cm +\textheight 23cm +\oddsidemargin +0.75cm +\evensidemargin -0.75cm +\setstretch{1.2} +%%%%%%%%%%%%%%% +% Setting the width of the verbatim parts according to 80 tt chars +% Since it is tt, any char is fine +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newlength{\verbatimbox} +\settowidth{\verbatimbox}{\scriptsize\tt +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +} +\newenvironment{framedverbatim} + {\VerbatimEnvironment\par\noindent\scriptsize + \begin{Sbox}\begin{minipage}{\verbatimbox}\begin{Verbatim}}% + {\end{Verbatim}\end{minipage}\end{Sbox} + \setlength{\fboxsep}{3mm}\center\shadowbox{\TheSbox}\normalsize\par\noindent} +\newenvironment{phraseverbatim} + {\VerbatimEnvironment\par\vspace*{2mm}\noindent\footnotesize + \begin{Sbox}\begin{minipage}{.979\textwidth}\begin{Verbatim}}% + {\end{Verbatim}\end{minipage}\end{Sbox}\setlength{\shadowsize}{2pt}% + \shadowbox{\TheSbox}\normalsize\par\noindent} + + + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} + +\begin{center} +\Huge First steps in using \bf Alliance\\ +\Huge the \texttt{addaccu} tutorial +\end{center} +\vspace{2cm} +\begin{center} +Abstract + +\begin{quote} +\em +This tutorial introduces the design flow to be used in the +\textbf{Alliance} CAD framework for the design and verification of a +standard cells circuit, including the pads. +Each step of the desgin flow is supported by one or more specific +tools, whose use is briefly explained. + +This text is meant to be simple and comprehensive, and is to be used +to get \emph{into} the system. +Should something be unclear or wrong, please indicate this by sending +an e-mail to \texttt{alliance-support@lip6.fr}. +\rm +\end{quote} +\end{center} + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Introduction} + +In this tutorial, you will learn the practical use of some basic +\textbf{Alliance} tools by building a very simple circuit from scratch. +It is recommended that you read the \texttt{overview.ps} file before +proceeding, as it describes the main steps of the design conceptually. + +Before we proceed to the tutorial, you must make sure that the +\textbf{Alliance} tools are readilly available when invoking them at the +prompt. +The prompt in represented in the following text by the symbol~: +\begin{phraseverbatim} +~fred/addaccu %-) +\end{phraseverbatim} +In this system, \texttt{fred} is the user, \texttt{addaccu} is the current +directory, and \texttt{\%-)} is supposed to give us courage! + +Try issuing the following command to check that \textbf{Alliance} is +correctly installed: + +\begin{phraseverbatim} +~fred/addaccu %-) yagle +\end{phraseverbatim} + +If everything is working, you get the following result: + +\begin{framedverbatim} +YAGLE 2.00 +Usage : yagle [options] [file2] +Options : -i reads the '.inf' file + -v vectorises the vhdl description + -p=n n is the depth for functional analysis + -nc no detection of complex gates + -nl no latch detection + -fcl transistor netlist detection + -elp use the technology file '.elp' + -d generates a .cns file + -b transistor orientation + -z functional analysis through HZ nodes + -os only one vdd and vss in the vhdl description + -nh generates a hierarchical cone netlist + file2 is the vhdl file to be generated (default is file1) + -t display execution trace +\end{framedverbatim} + +If it does not work, please abort the tutorial and fix the pathnames. + +We will assume that the user is running a \texttt{c-like} shell, like +\texttt{csh} or \texttt{tcsh}. +If you run a \texttt{sh-like} shell, please refer to your +documentation. + +Typically do: + +\begin{phraseverbatim} +~fred/addaccu %-) setenv ALLIANCE_TOP /usr/local/cad/alliance +~fred/addaccu %-) setenv PATH $ALLIANCE_TOP/bin:$PATH +\end{phraseverbatim} +Where we assume that \textbf{Alliance} has been installed under +\texttt{/usr/local/cad/alliance} directory. +In the sequel, we will assume that the \verb+$ALLIANCE_TOP+ variable is +properly set up. + +All the tools used in this tutorial are documented at least with a +manual page. +Each manual can be accessed using the \texttt{man \it tool} command. +You may have to do a: +\small +\begin{phraseverbatim} +~fred/addaccu %-) setenv MANPATH $ALLIANCE_TOP/man:$MANPATH +\end{phraseverbatim} +\normalsize +in order to have the manual accessible. + +The tutorial is organized around the following sections: +\begin{itemize} +\item Chip overview (page~\pageref{chip}); +\item Design flow (page~\pageref{desginflow}); +\item Execution environment set-up (page~\pageref{setup}); +\item Behavioral capture and simulation (page~\pageref{beh}); +\item Netlist capture (page~\pageref{netlist}); +\item Core layout generation (page~\pageref{layout}); +\item Core layout verification (page~\pageref{lv}); +\item Core to pads routing (page~\pageref{pads}); +\item Chip visualization (page~\pageref{graal}); +\item Functional abstraction (page~\pageref{fa}); +\item Further verifications (page~\pageref{verif}); +\item Symbolic to real technology conversion (page~\pageref{sr}). +\end{itemize} + + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Chip overview} +\label{chip} +The picture in the Figure~\ref{archi} shows the architecture of the +small chip that will be our example all along this tutorial. +As you can see, the circuit is pretty small: it mostly consists in a +four bit adder, a four bit register, and a 2 to 1 four bit multiplexer. + +\begin{figure}\center +\leavevmode\psfig{figure=addaccu.eps,width=8cm,angle=-90} +\caption{\label{archi}Architecture of the \texttt{addaccu} circuit.} +\end{figure} + +Inputs are located on the left side of the picture, and outputs are +located on the right side. +We did not represent the power supplies on this schematic, but you'll +need them in order for the chip to work! + +The circuit performs an addition between either the \texttt{b[3:0]} and +\texttt{a[3:0]} inputs when \texttt{sel} is set to 0, or between +\texttt{b[3:0]} and the contents of the four bit register when \texttt{sel} +is set to 1. +The content of the register is overwriten by the value of the outputs +\texttt{s[3:0]} on each falling edge of the clock, \texttt{ck}. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Design flow} +\label{desginflow} + +You are now ready to actually design the chip and use the +\textbf{Alliance} tools. +The design flow for this little example is composed of 5 main +steps: +\begin{enumerate} +\item behavioral capture and simulation; +\item netlist capture and validation; +\item physical layout generation; +\item design validation; +\item symbolic to real conversion. +\end{enumerate} + +As you will see, points 2 and 3 must be performed for each level of +hierarchy. +In this example we distinguish two levels of hierarchy: the core +level and the chip level. +At the core level, the leaf cells of the design belong to the +\textbf{Alliance} standard cells library. +At the chip level, the previous core and pads belonging to the +\textbf{Alliance} pad library are used. + +The Figure~\ref{hier} below describes the circuit's hierarchy. + +\begin{figure}\center +\leavevmode\psfig{figure=hierarchy.eps,width=14cm} +\caption{\label{hier}Hierarchical partitionning.} +\end{figure} + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Execution environment set-up} +\label{setup} + +Before you start examining the first phase of the design methodology, +you first have to set up an execution environment for the +\textbf{Alliance} tools. + +If the \textbf{Alliance} installation is set up properly, most of the +tools can be executed without problem. +If the installation is only +partial, or if you want to set a special feature of a tool, you will +have to set some environment variables up. + +The environment variables upon the which each tool depends are +documented in each tool manual page. +However, some variables are really useful, and are in part documented +here. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Cell libraries path} + +The first thing to know for this circuit is the actual location of +the standard-cell library. +This library is located into \texttt{\$ALLIANCE\_TOP/cells/sclib}. +But indicating only one library is not enough, and as you can see in +doing a \texttt{ls \$ALLIANCE\_TOP/cells}, several libraries are available. + +The other library of interest here is the pad library, located in +\texttt{\$ALLIANCE\_TOP/cells/ring}. + +To set up the cell library path, the following command is required: +\small +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_CATA_LIB $ALLIANCE_TOP/cells/scr:$ALLIANCE_TOP/cells/ring +\end{phraseverbatim} +\normalsize + +This \texttt{setenv} instructs \textbf{Alliance} tools to search its cells +in \texttt{/alliance/cells/scr} and then in \texttt{/alliance/cells/ring}, +that respectively contains the standard cells and the pads. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{User working directory} + +You must specify the directory where the files generated by an +\textbf{Alliance} tool are to be located. + +Please enter the following command: +\small +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_WORK_LIB . +\end{phraseverbatim} +\normalsize + +In this case, the working directory is the current directory. +This library is scanned before the ones set in +\texttt{MBK\_CATA\_LIB} when a tool loads a cell, and the only one +used for writing a cell. +Note that \texttt{.} is the default value of this variable, so it is +not required to set it up usually. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{File formats} + +One of the interesting features of \textbf{Alliance} is that different +file formats can be used for both netlist and layout view. +However, +in the design methodology we wish to promote, some formats are +recommended. +The \texttt{vst}, structural \textbf{VHDL}, is dedicated to netlist +specification. +The \texttt{al} format is dedicated to extracted layout representation. +The \texttt{ap} format is the usual layout format. + +So, prior to generate a specification netlist, you shall type: +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_OUT_LO vst +\end{phraseverbatim} + +But if you wish to extract a netlist from the layout then you'll do: +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_OUT_LO al +\end{phraseverbatim} + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Behavioral capture and simulation} +\label{beh} + +When designing a chip, the first thing to do is to write its +behavior, based on its functional specifications. +In our example \texttt{addaccu}, we have to modelize an adder, a +register and a multiplexer. +We also have to specify in the resulting behavior file that the adder +may take as an input the result of a previous calculation or a new +input stimuli. + +Modern behavioral descriptions are written using the \textbf{VHDL} +language, the most promoted and supported hardware description +language. + +Let us now edit the behavioral description of addaccu by issuing the +following command: +\begin{phraseverbatim} +~fred/addaccu %-) vi addaccu.vbe +\end{phraseverbatim} + +The \texttt{addaccu.vbe} file contains the behavioral description of the +circuit. +\texttt{Vbe} stands for \textbf{VHDL} behavioral description. +Although this tutorial does no intend to explain the arcanes of \textbf{VHDL} +programming, it's worth noting some interesting points: +\begin{enumerate} +\item notice that the entity name, \texttt{addaccu}, identifies the circuit; +\item examine the circuit interface. + You can recognize the terminals of the previous picture, plus 4 + special terminals, known as supply terminals. + The supply terminals are needed for the last stage of the + design, as the original behavioral description must be matched + with an "extracted" behavior. + If this does not make immediate sense to you, do not panic, + everything will be clear in a moment; +\item take a look to the functional architecture of \texttt{addaccu}. + When examining it, pay attention to the \texttt{reg\_bit~register} + names of the accumulator \texttt{reg}, as they will be used later + in the validation stage; +\item read carefully the functional description. + With a little work, you can recognize the description of the + multiplexer, the equations of the adder, and the accumulator. + It is very important to notice that the functional description + of the circuit assumes that edge-triggered latches are used. +\end{enumerate} + +Once you have carefully examined this file, close it and get back to +the shell prompt, for the \textbf{VHDL} compilation stage. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Behavior compilation} + +Once the behavioral description of the circuit is written, it is time +for \textbf{VHDL} compilation. + +You are now ready to compile \texttt{addaccu.vbe}. +As we do not have written simulation patterns yet, the only thing we +can do is to test the syntax of the file we have just edited. + +At the shell prompt level, please type: +\begin{phraseverbatim} +~fred/addaccu %-) asimut -b -c addaccu +\end{phraseverbatim} + +This command instructs \texttt{asimut} to compile the behavioral file +\texttt{addaccu.vbe}. +Option \texttt{-b} means behavioral description, and \texttt{-c} means +compilation only, i.e no simulation. +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) asimut -b -c addaccu + + @ @@@@ @ @ @@@@@@@@@@ + @ @ @@ @@@ @ @@ @ + @@@ @@ @ @ @ @@ @ + @@@ @@@ @@@ @@ @@@ @@@ @@@@ @@ + @ @@ @@@@ @@@@ @@@ @@ @@ @@ @@ @@ + @ @@ @@@@ @@ @@ @@ @@ @@ @@ @@ + @ @@ @@@ @@ @@ @@ @@ @@ @@ @@ + @@@@@@@ @ @@ @@ @@ @@ @@ @@ @@ @@ + @ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ + @ @@ @@@ @ @@ @@ @@ @@ @@ @@@ @@ + @@@@ @@@@ @ @@@@ @@@@@@ @@@@ @@@ @@@ @@@@ @@ @@@@@@ + + A SIMUlation Tool + + Alliance CAD System 3.2, asimut v2.01 + Copyright (c) 1991-1997, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + + Paris, France, Europe, Earth, Solar system, Milky Way, ... +Initializing ... +Searching addaccu ... +BEH : Compiling addaccu.vbe (Behaviour) ... +Making GEX ... +\end{framedverbatim} +\caption{\texttt{Asimut} compiling the behavioral specifications.} +\label{compil} +\end{figure} + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Behavioral simulation and validation} + +A behavioral description without simulation patterns is useless. +In order to see if the behavior you have just written is functionally +correct, you must write simulation patterns and use the \texttt{asimut} +simulator function. + +Simulation patterns are contained in a plain text file, +\texttt{addaccu.pat}. +For more informations about the \texttt{pat} format you can read the +appropriate on-line manual --- \texttt{man~5~pat} --- or read the +printed documentation. + + +To get acquainted with \texttt{addaccu.pat}, please issue the following +command: +\begin{phraseverbatim} +~fred/addaccu %-) vi addaccu.pat +\end{phraseverbatim} + +There are several interesting things here. +First, you can recognize the circuit interface again. +Second, you can see that output terminals are now located at the end +of the interface. +Ordering terminals is very important for \texttt{pat} files. +The order you use to specify terminals greatly influences the way you +will have to write simulation patterns. +It is important to notice that simulation patterns contain both input +and output values. +The behavior must be checked using these values. +Comments are prefixed by a \texttt{\#}, and are of much interest here. + +Once you have understood the structure of this file, you are able to +simulate the previous behavioral description. + +In order to simulate, please type: +\begin{phraseverbatim} +~fred/addaccu %-) asimut -b addaccu addaccu specifications +\end{phraseverbatim} +to obtain: +\small +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) asimut -b addaccu addaccu specifications + + @ @@@@ @ @ @@@@@@@@@@ + @ @ @@ @@@ @ @@ @ + @@@ @@ @ @ @ @@ @ + @@@ @@@ @@@ @@ @@@ @@@ @@@@ @@ + @ @@ @@@@ @@@@ @@@ @@ @@ @@ @@ @@ + @ @@ @@@@ @@ @@ @@ @@ @@ @@ @@ + @ @@ @@@ @@ @@ @@ @@ @@ @@ @@ + @@@@@@@ @ @@ @@ @@ @@ @@ @@ @@ @@ + @ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ + @ @@ @@@ @ @@ @@ @@ @@ @@ @@@ @@ + @@@@ @@@@ @ @@@@ @@@@@@ @@@@ @@@ @@@ @@@@ @@ @@@@@@ + + A SIMUlation Tool + + + Alliance CAD System 3.2, asimut v2.01 + Copyright (c) 1991-1997, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + + Paris, France, Europe, Earth, Solar system, Milky Way, ... +Initializing ... +Searching addaccu ... +BEH : Compiling addaccu.vbe (Behaviour) ... +Making GEX ... + +Searching pattern file : addaccu ... +Restoring ... + +Linking ... +###----- processing pattern 0 -----### +###----- processing pattern 1 -----### +###----- processing pattern 2 -----### +###----- processing pattern 3 -----### +###----- processing pattern 4 -----### +###----- processing pattern 5 -----### +###----- processing pattern 6 -----### +\end{framedverbatim} +\caption{\texttt{Asimut} checking the behavior with a few functionnal test vectors.} +\label{specs} +\end{figure} +\normalsize + +Feel free to add new simulation vectors, as it's a very good practice. +You can also write obviously wrong patterns to see how \texttt{asimut} +behaves when it encounters errors. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Netlist capture and validation} +\label{netlist} + +You are now about to capture the logical view of \texttt{addaccu}, +commonly known as netlist. +The design methodology prevents the designer from building the entire +netlist in one shot, including pads. +VLSI design is based on hierarchy and incremental approaches. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Netlist capture} + +The circuit netlist you have to write will be captured in two steps: +\begin{enumerate} +\item capture of the core netlist; +\item capture of the chip netlist, linking the core with pads. +\end{enumerate} + +The core netlist contains standard-cells describing the logical +functions needed to design the adder, the multiplexer and the +accumulator, and the internal wires. + +We do not use a schematic editor for netlist capture, but rather a +textual approach. +\begin{phraseverbatim} +~fred/addaccu %-) vi core.c +\end{phraseverbatim} + +The core netlist is nothing more than a \textbf{C} file containing +specific function calls for the creation of VLSI objects. +Notice that the include file \texttt{genlib.h} must systematically be +included at the top of \textbf{genlib}'s files. + +The description of a netlist in \textbf{C} is mainly based on the +\texttt{DEF\_LOFIG, LOCON} and \texttt{LOINS} functions. +\texttt{DEF\_LOFIG} defines the name of the resulting netlist view, +\texttt{LOCON} instanciates a new terminal in the currently opened +figure, and \texttt{LOINS} instanciates pre-existing cells or blocks. +For more informations, please read the on-line manual associated with +each function. + +To compile and run the \textbf{C} file, you must use the \texttt{genlib} +program. + +You must specify the input format of cells that are instanciated in +the \textbf{genlib}'s code. + +Therefore enter the following command: +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_IN_LO vst +~fred/addaccu %-) setenv MBK_OUT_LO vst +\end{phraseverbatim} + +These \texttt{setenv} define the input and output formats for the +specification netlist. + +\texttt{vst} stands for structural \textbf{VHDL} description. +The design methodology assumes that user defined netlists must use +extension \texttt{vst} as we've already said. +The \texttt{al} format is mostly used for extracted netlist with +specific informations like capacitances that cannot be coded in \textbf{VHDL}. + +At last, you can execute the genlib program: +\begin{phraseverbatim} +~fred/addaccu %-) genlib -v core +\end{phraseverbatim} +to get: +\small +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) setenv MBK_IN_LO vst +~fred/addaccu %-) setenv MBK_OUT_LO vst +~fred/addaccu %-) setenv MBK_CATA_LIB /alliance/cells/scr +~fred/addaccu %-) genlib -v core + + @@@@ @ @@@@@@ @ @@@ + @@ @@ @@ @@@ @@ + @@ @ @@ @ @@ + @@ @@@@@ @@@ @@@ @@ @@ @@ + @@ @ @ @@@ @ @@ @@@@ @@@ @@ + @@ @@@@@ @@ @@ @@ @@ @@ @@ @@ @@ + @@ @ @@ @@@@@@@@@ @@ @@ @@ @@ @@ @@ + @@ @ @@ @@ @@ @@ @@ @@ @@ @@ + @@ @@ @@ @ @@ @@ @@ @ @@ @@ @@ + @@ @@ @@ @@ @@ @@ @@ @ @@ @@@ @@ + @@@@ @@@@ @@@@ @@@@ @@@@@@@@@@ @@@@@@ @@@ @@ + + Procedural Generation Language + + Alliance CAD System 3.2, genlib 3.3 + Copyright (c) 1991-1998, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + +Generating the Makefile +Compiling, ... +Current execution environment +MBK_CATA_LIB : /users/soft5/newlabo/Solaris/cells/sclib +MBK_WORK_LIB : : +MBK_IN_LO : vst +MBK_OUT_LO : vst +MBK_IN_PH : ap +MBK_OUT_PH : ap +MBK_CATAL_NAME : CATAL +Executing ... +Removing tmp files ... +\end{framedverbatim} +\caption{Netlist core generation using \texttt{genlib}.} +\label{core} +\end{figure} +\normalsize + +You can now look in the current directory for a file named +\texttt{core.vst}. +This file contains the resulting description of the core. + +The \texttt{addaccu.c} file contains the actual chip netlist. +You can edit it to see how pads are instanciated. + +Running the following command: +\begin{phraseverbatim} +~fred/addaccu %-) genlib -v addaccu +\end{phraseverbatim} +produces: +\small +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) setenv MBK_IN_LO vst +~fred/addaccu %-) setenv MBK_OUT_LO vst +~fred/addaccu %-) setenv MBK_CATA_LIB /alliance/cells/scr:/alliance/cells/ring +~fred/addaccu %-) genlib addaccu + + @@@@ @ @@@@@@ @ @@@ + @@ @@ @@ @@@ @@ + @@ @ @@ @ @@ + @@ @@@@@ @@@ @@@ @@ @@ @@ + @@ @ @ @@@ @ @@ @@@@ @@@ @@ + @@ @@@@@ @@ @@ @@ @@ @@ @@ @@ @@ + @@ @ @@ @@@@@@@@@ @@ @@ @@ @@ @@ @@ + @@ @ @@ @@ @@ @@ @@ @@ @@ @@ + @@ @@ @@ @ @@ @@ @@ @ @@ @@ @@ + @@ @@ @@ @@ @@ @@ @@ @ @@ @@@ @@ + @@@@ @@@@ @@@@ @@@@ @@@@@@@@@@ @@@@@@ @@@ @@ + + Procedural Generation Language + + Alliance CAD System 3.2, genlib 3.3 + Copyright (c) 1991-1998, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr +\end{framedverbatim} +\caption{Core to pad netlist generation using \texttt{genlib}.} +\label{addaccu} +\end{figure} +\normalsize + +This creates \texttt{addaccu.vst}, the resulting netlist, in the current +directory. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Simulation of the specification netlist} + +Once the complete netlist has been captured, we can simulate the +whole chip with the previous simulation patterns. + +You can run asimut by entering the following command: +\begin{phraseverbatim} +~fred/addaccu %-) asimut addaccu addaccu schema +\end{phraseverbatim} +It produces the output of Figure~\ref{schema}. + +The first \texttt{addaccu} stands for \texttt{addaccu.vst}. +The second \texttt{addaccu} stands \texttt{addaccu.pat}, the pattern +file with input and output values. +\texttt{schema} stands for \texttt{schema.pat}, the generated list of +patterns. + +Because option \texttt{-b} is not set and because \texttt{MBK\_IN\_LO} +contains \texttt{vst}, \texttt{asimut} simulates the specification +netlist we have captured with \texttt{genlib}. + +Errors during this execution mean that something went wrong between +your current position in the design flow and the behavioral +simulation stage. + +\small +\begin{figure}[H]\center +\begin{framedverbatim} +~fred/addaccu %-) setenv MBK_IN_LO vst +~fred/addaccu %-) setenv MBK_CATA_LIB /alliance/cells/scr:/alliance/cells/ringxx +~fred/addaccu %-) asimut addaccu addaccu schema +Warning 2 : consistency checks will be disabled + + @ @@@@ @ @ @@@@@@@@@@ + @ @ @@ @@@ @ @@ @ + @@@ @@ @ @ @ @@ @ + @@@ @@@ @@@ @@ @@@ @@@ @@@@ @@ + @ @@ @@@@ @@@@ @@@ @@ @@ @@ @@ @@ + @ @@ @@@@ @@ @@ @@ @@ @@ @@ @@ + @ @@ @@@ @@ @@ @@ @@ @@ @@ @@ + @@@@@@@ @ @@ @@ @@ @@ @@ @@ @@ @@ + @ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ + @ @@ @@@ @ @@ @@ @@ @@ @@ @@@ @@ + @@@@ @@@@ @ @@@@ @@@@@@ @@@@ @@@ @@@ @@@@ @@ @@@@@@ + + A SIMUlation Tool + + Alliance CAD System 3.2, asimut v2.01 + Copyright (c) 1991-1997, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + + Paris, France, Europe, Earth, Solar system, Milky Way, ... +Initializing ... +Searching addaccu ... +Compiling addaccu (Structural) ... + +Flattening the root figure ... + +Searching a2_y ... +BEH : Compiling a2_y.vbe (Behaviour) ... +Making GEX ... +. +. +. +Searching pi_sp ... +BEH : Compiling pi_sp.vbe (Behaviour) ... +Making GEX ... + +Searching pck_sp ... +BEH : Compiling pck_sp.vbe (Behaviour) ... +Making GEX ... + +Searching pattern file : addaccu ... +Restoring ... + +Linking ... +###----- processing pattern 0 -----### +###----- processing pattern 1 -----### +###----- processing pattern 2 -----### +###----- processing pattern 3 -----### +###----- processing pattern 4 -----### +###----- processing pattern 5 -----### +###----- processing pattern 6 -----### +\end{framedverbatim} +\caption{\texttt{Asimut} checking the netlist description.} +\label{schema} +\end{figure} +\normalsize + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Core layout generation} +\label{layout} + +Incremental design relies on hierarchy. +Before you design the core to pads netlist, the circuit core must be +successfully built. +In this example, the layout generation relies on: +\begin{enumerate} +\item standard-cells placement (automatic or manual); +\item automatic routing of standard-cells. +\end{enumerate} + +\texttt{scr} is a place and route tool that can produce automatically +the layout view from a netlist description. + +As stated in the previous section, before you run \texttt{scr}, you must +specify environment variables. +Needless to say that these variables will deal with physical aspects +of the circuit. + + +First, you must specify the input layout format you use for the +standard-cells. +The \textbf{Alliance} distribution only contains \texttt{ap} symbolic +layout files so you must issue the following command: +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_IN_PH ap +\end{phraseverbatim} + +This command instructs \texttt{scr} to use the \texttt{ap} cell layout +format as input. +Remember that the variable \texttt{MBK\_CATA\_LIB} is still set, so +\textbf{Alliance} tools know where to find cells. + +Second, you must accordingly specify the output layout format. +Again, the format is \texttt{ap}, so: +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_OUT_PH ap +\end{phraseverbatim} + +This command instructs \texttt{scr} to use \texttt{ap} representation of +cells as an output. + +Everything is now ready for the place and route phase. +The command is: +\begin{phraseverbatim} +~fred/addaccu %-) scr -p -r core core +\end{phraseverbatim} + +Option \texttt{-p} means automatic placement, and option \texttt{-r} means +automatic routing. + +Once \texttt{scr} has been executed, the core layout is completed. +\small +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) setenv MBK_IN_LO vst +~fred/addaccu %-) setenv MBK_IN_PH ap +~fred/addaccu %-) setenv MBK_OUT_PH ap +~fred/addaccu %-) setenv MBK_CATA_LIB /alliance/cells/scr +~fred/addaccu %-) scr -p -r core + + @@@@ @ @@@@ @ @@@@@@@ + @ @@ @@ @@ @@ @@ + @@ @ @@ @ @@ @@ + @@@ @@ @ @@ @@ + @@@@ @@ @@ @@ + @@@@ @@ @@@@@ + @@@ @@ @@ @@ + @ @@ @@ @@ @@ + @@ @@ @@ @ @@ @@ + @@@ @ @@ @@ @@ @@ + @ @@@@ @@@@ @@@@@ @@@ + + Standard Cell router + + Alliance CAD System 3.2, scr 5.2 + Copyright (c) 1991-1997, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + +Loading logical view : core +Placing logical view : core +Loading SCP data base ... +Generating initial placement ... +25 cells 37 nets in 2 rows +Placement in process of treatment : 100% +49% saved in 0.3 s +Saving placement 100% +Checking consistency between logical and physical views +Loading SCR data base ... +Deleting MBK data base ... +Global routing ... +Channel routing ... +|_____Routing Channel : scr_p2 +|_____Routing Channel : scr_p4 +|_____Routing Channel : scr_p6 +Making vertical power and ground wires +Saving layout : core +\end{framedverbatim} +\caption{Placing and Routing the core netlist with \texttt{scr}.} +\label{scr} +\end{figure} +\normalsize + +Note that \texttt{scr} knows how to place and route only cells having a +standard cell topology. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Core layout verification} +\label{lv} + +Routers may have bugs, and produce shorts or open circuits. +So serious checks must be made on the produced layout. +To check the layout, we use two \textbf{Alliance} tools, \texttt{lynx} and +\texttt{lvx}. + +\texttt{lynx} is the \textbf{Alliance} netlist extractor. +From a physical layout it extracts a netlist representation of the +circuit, in terms of blocks, gates or transistors. +In our case, we want to extract the core netlist at the gate level. + +\texttt{lvx} is the \textbf{Alliance} netlist comparator. +Its main function is to verify that an extracted netlist corresponds +to the specification netlist. + +Hence, the design methodology is quite simple. +We must extract the core \texttt{core.ap} with \texttt{lynx} and check the +resulting netlist with the original \texttt{addaccu.vst} +file using \texttt{lvx}. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Extraction of the core netlist} + +Now, back to practice. +You have to extract the layout using \texttt{lynx}. +Remember two things: +\begin{enumerate} +\item \textbf{Alliance} tools deeply rely on appropriate environment + variables. + For instance, you have to specify the format the extracted + netlist will be generated with. +\item in the usual design flow, extracted netlist files are written + in \texttt{al} format. +\end{enumerate} + +So you must: +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_OUT_LO al +\end{phraseverbatim} +to generate a extracted netlist file called \texttt{core.al}. + +The actual execution of lynx is quite easy. +Just type: +\begin{phraseverbatim} +~fred/addaccu %-) lynx -v core +\end{phraseverbatim} +and you get your extracted netlist in terms of interconnected +standard cells. +\small +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) setenv MBK_IN_PH ap +~fred/addaccu %-) setenv MBK_OUT_LO al +~fred/addaccu %-) setenv RDS_TECHNO_NAME /alliance/etc/cmos_5.rds +~fred/addaccu %-) setenv MBK_CATA_LIB /alliance/cells/scr:/alliance/cells/ring +~fred/addaccu %-) lynx -v core core + + @@@@@@ + @@ + @@ + @@ @@@@@ @@@ @@@ @@@ @@@@ @@@ + @@ @@ @ @@@ @ @@ @ + @@ @@ @ @@ @@ @@ @ + @@ @@ @ @@ @@ @@@ + @@ @@ @ @@ @@ @@@ + @@ @ @@@ @@ @@ @ @@ + @@ @ @@ @@ @@ @ @@ + @@@@@@@@@@ @@ @ @@@@ @@@@ @@@ @@@@ + @@ @ + @@@ + + Netlist extractor + + Alliance CAD System 3.2, lynx 1.16 + Copyright (c) 1993-1997, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + + + + ---> Extracts symbolic figure core + + ---> Translate Mbk -> Rds + ---> Build windows + <--- 108 + + ---> Rectangles : 894 + ---> Figure size : ( -50, -100 ) + ( 55250, 16600 ) + + ---> Cut transistors + <--- 0 + ---> Build equis + <--- 37 + ---> Delete windows + ---> Build signals + <--- 37 + ---> Build instances + <--- 29 + ---> Build transistors + <--- 0 + ---> Save netlist + + <--- done ! +\end{framedverbatim} +\caption{Extracting a hierarchical netlist in terms of standard cells with \texttt{lynx}.} +\label{lynx} +\end{figure} +\normalsize + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Netlist cross-checking} + +Now it's time for netlist verifications. +Since \texttt{lvx} takes two netlist in input, the formats have to be +specified on the command line. + +\begin{phraseverbatim} +~fred/addaccu %-) lvx vst al core core +\end{phraseverbatim} + +\texttt{lvx} works somewhat differently from other tools. +Its two former arguments are the formats of the first netlist, here +\texttt{vst} (for the original netlist) and \texttt{al} (for the extracted +netlist). +The two following arguments are the names of the netlist. +We have done our best to make these names identical. +Once again, remember that specification files are postfixed with +\texttt{vst} and extracted files with \texttt{al}. +\small +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) setenv MBK_CATA_LIB /alliance/cells/scr:/alliance/cells/ring +~fred/addaccu %-) lvx vst al core core -f + + @@@@@@ @@@@ @@@ @@@@ @@@@ + @@ @@ @ @@ @ + @@ @@ @ @@ @ + @@ @@ @ @@ @ + @@ @@ @ @@ + @@ @@ @ @@ + @@ @@ @ @@@ + @@ @@@ @ @@ + @@ @ @@@ @ @@ + @@ @ @ @ @@ + @@@@@@@@@@ @ @@@ @@@@ + + Gate Netlist Comparator + + Alliance CAD System 3.2, lvx 2.23 + Copyright (c) 1992-1997, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + +***** Loading and flattening core (vst)... + +***** Loading and flattening core (al)... + +***** Compare Terminals .............. +***** O.K. (0 sec) + +***** Compare Instances .......... +***** O.K. (0 sec) + +***** Compare Connections ............ +***** O.K. (0 sec) + +===== Terminals .......... 16 +===== Instances .......... 25 +===== Connectors ......... 150 + +***** Netlists are Identical. ***** (0 sec) +\end{framedverbatim} +\caption{Doing the specification netlist versus extracted netlist + compaison with \texttt{lvx}.} +\label{lvx} +\end{figure} +\normalsize + +As a result, you now have a correct \texttt{al} file for the circuit's +core. +Its name is \texttt{core.al}. +This file may now be simulated with \texttt{asimut}, but this is only +for cross checking. + +Execution environment is set by issuing: +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_IN_LO al +\end{phraseverbatim} +because we want to use the extracted \texttt{core.al} file as input to +\texttt{asimut}. + +Then you can run asimut by entering the following command: +\begin{phraseverbatim} +~fred/addaccu %-) asimut core addaccu result +\end{phraseverbatim} + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Core to pads routing} +\label{pads} + +Having built and checked the core layout, you can run the +core-to-pads router. +Its function is to locate pads appropriately around the core and to +create wiring segments between pads and chip terminals. + +Before we set up the execution environment, take a look at the +\texttt{addaccu.rin} file. +This file instructs \texttt{ring}, the core to pads router, to place pads +according to designer's wishes. +It also instructs \texttt{ring} to use segments with reasonable width +for power routing. + +The syntax of this file is quite simple. +The names mentioned here are pads' instance names. + +Run: +\begin{phraseverbatim} +~fred/addaccu %-) ring addaccu addaccu +\end{phraseverbatim} + +\small +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) setenv MBK_IN_LO vst +~fred/addaccu %-) setenv MBK_IN_PH ap +~fred/addaccu %-) setenv MBK_OUT_PH ap +~fred/addaccu %-) setenv MBK_CATA_LIB /alliance/cells/scr:/alliance/cells/ring +~fred/addaccu %-) ring addaccu addaccu + + @@@@@@@ @ @@@@ @ + @@ @@ @@@ @@ @@ + @@ @@ @ @@ @ + @@ @@ @@@ @@@ @@ + @@ @@ @@@@ @@@ @ @@ + @@@@@ @@ @@ @@ @@ @@@@@ + @@ @@ @@ @@ @@ @@ @ @@ + @@ @@ @@ @@ @@ @@ @ @@ + @@ @@ @@ @@ @@ @@ @@ + @@ @@ @@ @@ @@ @@ @@ + @@@@@ @@@ @@@@@@ @@@@ @@@@ @@@@ + + PAD ring router + + Alliance CAD System 3.2, ring 2.9 + Copyright (c) 1991-1997, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + + o reading netlists, layout views of core and pads. +Warning 2 : consistency checks will be disabled + o reading file of parameters, including the placements of pads. + o making equipotential list. + o making the first placement of pads. + o filling data internal structures. + o reading the connectors positions of the core. + o computing the best placement of the pads. + o reading the connectors positions of the pads. + o routing deportation of connectors. + o routing supply tracks. + o routing equipotentials. + o compressing channels. + o saving in MBK data structure. +lucky, no error. +\end{framedverbatim} +\caption{\texttt{Ring} routes the core to pad netlist.} +\label{ring} +\end{figure} +\normalsize + +Like for the core, the core to pad routing must be verified. +Using the same approach leads to: +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_OUT_LO al +~fred/addaccu %-) setenv MBK_IN_PH ap +~fred/addaccu %-) lynx -v addaccu +~fred/addaccu %-) lvx vst al addaccu +\end{phraseverbatim} + +It is possible to check both core a core to pad routing at once also: +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_OUT_LO al +~fred/addaccu %-) setenv MBK_IN_PH ap +~fred/addaccu %-) lynx -v -f addaccu +~fred/addaccu %-) lvx vst al addaccu -f +\end{phraseverbatim} + +Here the \texttt{-f} option indicate the tools to express the netlist in +terms of leaf cells --- either pads or standard cells ---. +Obtaining a transistor netlist from the layout is possible using the +\texttt{-t} option of \texttt{lynx}, but this is more time and memory +consuming, and fairly useless as we rely on correct cells. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Chip layout visualization} +\label{graal} + +At that point, you are able to see the actual layout by executing the +symbolic layout editor \texttt{graal}. +You can run the editor by issuing the following command: +\begin{phraseverbatim} +~fred/addaccu %-) graal -l addaccu +\end{phraseverbatim} + +Now, the screen should be filled with the \texttt{graal} window, and +should contain the whole layout. +The graphical interface of \texttt{graal} is meant to be self +explanatory. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Functional abstraction} +\label{fa} + +\texttt{yagle}, a functional asbtractor that extracts a behavior from a +transistor netlist can relieve the designer from many headaches. +From a transistor netlist,\texttt{yagle} finally outputs a +\textbf{VHDL} file that can be simulated. + +The command is: +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_IN_LO al +~fred/addaccu %-) yagle -i -v addaccu +\end{phraseverbatim} +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) setenv MBK_IN_LO al +~fred/addaccu %-) yagle addaccue -i -v + + @@@@ + @@ + @@ + @@@@@ @@@ @@@@ @@@@@@ @@ @@@@@ + @@ @ @@ @ @@ @@ @@ @ @ + @@ @ @@ @@ @ @@ @@ @@ @@ + @@ @ @@@@@ @ @ @@ @@@@@@@@@ + @@ @ @@ @@ @@@ @@ @@ + @@@ @@ @@ @@ @@ @@ @ + @@ @@ @@@ @@@@@@ @@ @@ @@ + @@ @ @@@@ @@ @@ @@@ @@@@@@ @@@@ + @@ @ @ @ + @@@ @@@@@ + + Yet Another Gate Level Extractor + + Alliance CAD System 3.2, yagle 2.01 + Copyright (c) 1994-1997, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + +[YAG MES] Reading file 'addaccue.inf' +[YAG MES] Loading the figure addaccue 00m00s u:00m00.0 s:00m00.0 +[YAG MES] Transistor netlist checking 00m00s u:00m00.0 s:00m00.0 +[YAG MES] Extracting CMOS duals 00m00s u:00m00.0 s:00m00.0 +[YAG MES] Extracting bleeders 00m00s u:00m00.0 s:00m00.0 +[YAG MES] Making gates 00m00s u:00m00.0 s:00m00.0 +[YAG MES] Latches detection 00m00s u:00m00.0 s:00m00.0 +[YAG MES] Making cells 00m00s u:00m00.0 s:00m00.0 +[YAG MES] External connector verification 00m00s u:00m00.0 s:00m00.0 +[YAG MES] Checking the yagle figure 00m00s u:00m00.0 s:00m00.0 +[YAG MES] Building the behavioural figure 00m00s u:00m00.0 s:00m00.0 +TOTAL DISASSEMBLY TIME 00m00s u:00m00.0 s:00m00.0 +------------------------------------------------------------ +[YAG MES] Erasing the transistor netlist +[YAG MES] Generating the VHDL Data Flow +[YAG MES] Execution COMPLETED +------------------------------------------------------------ +[YAG WAR 04] 80 transistors are always off +[YAG WAR 07] 80 transistors are not used +[YAG WAR 09] 8 latches detected +See file 'addaccue.rep' for more information +\end{framedverbatim} +\caption{\texttt{Desb} abstract the extracted netlist into boolean + equations.} +\label{yagle} +\end{figure} +\normalsize + +Then, you can simulate the resulting behavior file by issuing: +\begin{phraseverbatim} +~fred/addaccu %-) asimut -b addaccu addaccu result +\end{phraseverbatim} + +Simulation of extracted behavior with asimut is not the only mean to +see if the chip is correct. +The extracted behavior can also be used for formal proof. + +In \textbf{Alliance}, formal proof is the ultimate way to validate your +circuit. + +Before you can use \texttt{proof}, the formal prover, you must get +acquainted with some specific concepts of the formal proof theory. + +If you look at the extracted behavior, \texttt{chip.vbe}, you can notice +that \texttt{yagle} has found four memorizing elements, specified as +\texttt{reg\_bit register}. +In the formal proof, these four elements must match the four +edge-triggered latches of the former behavioral specification, +because \texttt{proof} can only compare combinatorial logic between +external connectors and/or sequential elements. + +If you examine the current directory, you will find a file called +\texttt{addaccu.inf}. + +This file contains specific informations for \texttt{yagle}. +It instructs \texttt{yagle} to rename the internal node name of every +latch \textit{core.l*} by its corresponding name in the first behavior +file. +In the \texttt{cells/scr} directory you can see that the name of the +internal node of the used latch, \texttt{ms\_y.vbe}, is \textit{dff\_s}. + +The equivalent name in \texttt{addaccu.vbe} is \textit{reg}. + +When you run \texttt{yagle} with option \texttt{-i}, the program searches +for the file \texttt{chip.inf}, builds the gate netlist and replaces the +node names by their equivalent names in the behavior file, in order +to make \texttt{proof} work. + +Then, you can run \texttt{proof}, the formal prover: +\begin{phraseverbatim} +~fred/addaccu %-) proof -d -p addaccu addaccue +\end{phraseverbatim} +\small +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) proof -d addaccue addaccu + + @@@@@@@ @@@ + @@ @@ @ @@ + @@ @@ @@ @@ + @@ @@ @@@ @@@ @@@ @@@ @@ + @@ @@ @@@ @@ @@ @@ @@ @@ @@@@@@@@ + @@@@@ @@ @@ @@ @@ @@ @@ @@ + @@ @@ @@ @@ @@ @@ @@ + @@ @@ @@ @@ @@ @@ @@ + @@ @@ @@ @@ @@ @@ @@ + @@ @@ @@ @@ @@ @@ @@ + @@@@@@ @@@@ @@@ @@@ @@@@@@ + + Formal Proof + + Alliance CAD System 3.2, proof 3.158 + Copyright (c) 90-97, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + +================================ Environment ================================ +MBK_WORK_LIB = . +MBK_CATA_LIB = /labo/cells/grog +======================= Files, Options and Parameters ======================= +First VHDL file = addaccue.vbe +Second VHDL file = addaccu.vbe +The auxiliary signals are erased +Errors are displayed +=============================================================================== + +Compiling 'addaccue' ... +Compiling 'addaccu' ... + +Running abl ordonnancer on addaccue +........ + +Running Abl2Bdd on addaccue +---> final number of nodes = 664(404) + +Running Abl2Bdd on addaccu +-------------------------------------------------------------------------------- + Formal proof with Ordered Binary Decision Diagrams between + + './addaccue' and './addaccu' +-------------------------------------------------------------------------------- +============================== PRIMARY OUTPUT =============================== +============================= AUXILIARY SIGNAL ============================== +============================== REGISTER SIGNAL ============================== +=============================== EXTERNAL BUS ================================= +================================ INTERNAL BUS ================================= + + Formal Proof : OK + +pppppppppppppppppppppppprrrrrrrrrrrrooooooooooooooooooooooooooooofffffffffffffff +-------------------------------------------------------------------------------- +\end{framedverbatim} +\caption{Doing a formal proof between the abstracted behavior and the + specifications using \texttt{proof}.} +\label{proof} +\end{figure} +\normalsize + +Option \texttt{-d} displays the logical functions that do not match, and +the \texttt{-p} option tells \texttt{proof} to ignore the internal polarity +of the flip-flops: we described our behavioral with a register +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Further verifications} +\label{verif} + +The last verification concerns design rules. +Before the chip can actually be targetted on a process, a symbolic +design rule check --- DRC --- must be performed. + +In \textbf{Alliance}, the design rule checker is \texttt{druc}. + +You just have to type: +\begin{phraseverbatim} +~fred/addaccu %-) setenv MBK_IN_PH ap +~fred/addaccu %-) setenv RDS_TECHNO_NAME /alliance/etc/cmos_5.rds +~fred/addaccu %-) druc addaccu +\end{phraseverbatim} + +The file pointed to by the \texttt{RDS\_TECHNO\_NAME} environement variable +contains many technological information including the desription of +the design rules. +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) setenv MBK_IN_PH ap +~fred/addaccu %-) setenv RDS_OUT cif +~fred/addaccu %-) setenv RDS_TECHNO_NAME /alliance/etc/cmos_5.rds +~fred/addaccu %-) setenv MBK_CATA_LIB /alliance/cells/scr:/alliance/cells/ring +~fred/addaccu %-) druc addaccu + + @@@@@@@ @@@@@@@ @@@@ @ + @@ @@ @@ @@ @@ @@ + @@ @@ @@ @@ @@ @ + @@ @@ @@ @@ @@@ @@@@ @@ @ + @@ @@ @@ @@ @@ @@ @@ + @@ @@ @@@@@ @@ @@ @@ + @@ @@ @@ @@ @@ @@ @@ + @@ @@ @@ @@ @@ @@ @@ + @@ @@ @@ @@ @@ @@ @@ @ + @@ @@ @@ @@ @@ @@@ @@ @@ + @@@@@@@ @@@@@ @@@ @@@@ @@ @@@@ + + Design Rule Checker + + Alliance CAD System 3.2, druc 3.00 + Copyright (c) 1993-1997, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + +Flatten DRC on: addaccu +Delete MBK figure : addaccu +Load Flatten Rules : /usr/local/cad/alliance/etc/cmos_7.rds + +Unify : addaccu + +Create Ring : addaccu_rng +Merge Errorfiles: + +Merge Error Instances: +instructionCourante : 50 +End DRC on: addaccu +Saving the Error file figure +Done + 0 + +File: addaccu.drc is empty: no errors detected. +\end{framedverbatim} +\caption{Symbolic design rule checking using \texttt{druc}.} +\label{druc} +\end{figure} + +This layout level verification has been optimized for speed. +So it is fast, even on large circuits, but requires quite a few megs +then. + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Symbolic to real technology translation} +\label{sr} + +The purpose of \textbf{Alliance} symbolic layout approach is to allow +the designs to be targetted on several technologies. +The whole chip is conceived with symbolic cells. + +In order to send the chip to a specified foundry, the designer must +perform the symbolic to real conversion. +This stage is the last stage of the design methodology. + +The only things you have to specify is the target technology and some +environment variables. + +The only target technology available in the distribution is +\texttt{prol10}, a fake 1.0 process. +You can choose it by setting the \texttt{RDS\_TECHNO\_NAME} environment +variable. +\begin{phraseverbatim} +~fred/addaccu %-)setenv RDS_TECHNO_NAME /alliance/etc/prol10.rds +\end{phraseverbatim} + +You also have to specify the format of the output file that will +represent the foundry layout. +\textbf{Alliance} provides two distinct formats: \texttt{gds} and \texttt{cif}. +\begin{phraseverbatim} +~fred/addaccu %-) setenv RDS_OUT cif +\end{phraseverbatim} + +This command instructs the converter to output the chip in the +Caltech Intermediat Form. +This form is an \texttt{ascii} format, that can include connectors, +whereas \texttt{gds} is binary and doesn't include connectors. + +A tricky thing is that the \textit{pad} part of the symbolic IO pads must +be replaced by its "real" equivalent. +This is indeed the only technology dependant part of a circuit +designed with our symbolic approach. + +So you also have to set the \texttt{RDS\_IN} environment variable, to +indicate the format of the substitution pad. +\begin{phraseverbatim} +~fred/addaccu %-) setenv RDS_IN cif +\end{phraseverbatim} + +At last, you run the symbolic to real converter, \texttt{s2r}. +\begin{phraseverbatim} +~fred/addaccu %-) s2r -cv addaccu +\end{phraseverbatim} + +Your chip is now ready for the foundry that provides the prol10 +technology. +\begin{figure}[H]\center\leavevmode +\begin{framedverbatim} +~fred/addaccu %-) setenv MBK_IN_PH ap +~fred/addaccu %-) setenv MBK_CATA_LIB /alliance/cells/scr:/alliance/cells/ring +~fred/addaccu %-) setenv RDS_TECHNO_NAME /alliance/etc/prol10.rds +~fred/addaccu %-) setenv RDS_OUT cif +~fred/addaccu %-) setenv RDS_IN cif +~fred/addaccu %-) s2r -v addaccu + + @@@@ + @ @@ + @@ @@ + @@@@@@ @@@ @@ @@@ @@@ + @@ @ @ @@ @@@ @@ + @@@ @ @@ @@ + @@@@ @ @@ + @@@@ @ @@ + @ @@@ @ @ @@ + @@ @@ @@@@@@ @@ + @ @@@@@ @@@@@@@ @@@@ + + Symbolic to Real layout converter + + Alliance CAD System 3.2, s2r 3.6 + Copyright (c) 1991-1997, ASIM/LIP6/UPMC + E-mail support: alliance-support@asim.lip6.fr + + + o loading technology file : /usr/local/cad/alliance/etc/prol10_7.rds + o loading all level of symbolic layout : addaccu + o removing symbolic data structure + o layout post-treating with connectors, with scotchs. + --> post-treating model palo_sp + rectangle merging : + . RDS_NWELL ................................. + . RDS_NIMP ................................. + . RDS_PIMP ................................. + . RDS_ACTIV ................................. + . RDS_POLY ................................. + . RDS_ALU1 ................................. + . RDS_ALU2 ................................. + . + . + . + o replacing black boxes + --> replace cell padreal + o saving addaccu.cif + o memory allocation informations + --> required rectangles = 7318 really allocated = 7 + --> required scotchs = 3 really created = 3 + --> Number of allocated bytes: 341231 +\end{framedverbatim} +\caption{Translating the symbolic layout into process layout with \texttt{s2r}.} +\label{s2r} +\end{figure} +\normalsize + +%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Conclusion} + +If you actually arrived here doing all the previous steps, +congratulation! + +You can see an automatic replay of this tutorial by +executing the \texttt{Makefile} in the current directory by issuing the +command: +\begin{phraseverbatim} +~fred/addaccu %-) make +\end{phraseverbatim} +Note that the \texttt{Makefile} uses Bourne-shell commands. + +If you plan to design a chip with \textbf{Alliance}, it is a good idea to +use \texttt{Makefile}s to ensure the consistency between the design and +verifications of the differents views and hierarchies, but this is +another story. + +If anything went wrong or if you have any question, you can contact +us by sending a mail to the support team of \textbf{Alliance}, located +at \texttt{alliance-support@lip6.fr}. +\end{document} diff --git a/alliance/share/tutorials/addaccu/tex/hierarchy.eps b/alliance/share/tutorials/addaccu/tex/hierarchy.eps new file mode 100644 index 00000000..bfdf62a7 --- /dev/null +++ b/alliance/share/tutorials/addaccu/tex/hierarchy.eps @@ -0,0 +1,246 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: hierarchy.fig +%%Creator: fig2dev Version 3.1 Patchlevel 1 +%%CreationDate: Thu Oct 12 13:34:26 1995 +%%For: fred@fado (Frederic PETROT) +%%Orientation: Portrait +%%BoundingBox: 0 0 617 309 +%%Pages: 0 +%%BeginSetup +%%IncludeFeature: *PageSize A4 +%%EndSetup +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {} def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-60.0 380.0 translate +1 -1 scale + +/clp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/l {lineto} bind def +/m {moveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def +%%EndProlog + +$F2psBegin +10 setmiterlimit + 0.06299 0.06299 sc +7.500 slw +% Ellipse +n 4636 5446 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +% Ellipse +n 1531 5446 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +1321 5468 m +gs 1 -1 sc (ms_y) col0 show gr +% Ellipse +n 2836 3466 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +2626 3511 m +gs 1 -1 sc (core) col0 show gr +/Courier-Bold findfont 180.00 scalefont setfont +5131 3468 m +gs 1 -1 sc (pi_sp ) col0 show gr +% Ellipse +n 5446 3443 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +% Ellipse +n 7112 3444 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +6744 3489 m +gs 1 -1 sc (piot_sp) col0 show gr +% Ellipse +n 8708 3443 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +8393 3488 m +gs 1 -1 sc (pck_sp) col0 show gr +% Ellipse +n 10261 3466 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +10103 3481 m +gs 1 -1 sc (...) col0 show gr +% Ellipse +n 6211 5446 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +6053 5461 m +gs 1 -1 sc (...) col0 show gr +/Courier-Bold findfont 180.00 scalefont setfont +3773 1688 m +gs 1 -1 sc (addaccu) col0 show gr +/Courier-Bold findfont 180.00 scalefont setfont +4426 5491 m +gs 1 -1 sc (n1_y) col0 show gr +% Ellipse +n 3061 5423 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +2798 5468 m +gs 1 -1 sc (na2_y) col0 show gr +% Ellipse +n 4141 1621 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + +% Ellipse +n 4544 5534 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 5354 3531 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 1439 5534 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 2969 5511 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 2744 3554 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col-1 s gr + +% Ellipse +n 6119 5534 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 4049 1709 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 7020 3532 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 8616 3531 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr + +% Ellipse +n 10169 3554 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col-1 s gr + +/Courier-Bold findfont 180.00 scalefont setfont +5039 3556 m +gs 1 -1 sc (pi_sp ) col-1 show gr +% Polyline +n 4320 2205 m 5040 3060 l gs col-1 s gr +n 4985.65 2948.89 m 5040.00 3060.00 l 4939.76 2987.53 l 4963.20 2968.71 l 4985.65 2948.89 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 4365 2160 m 6795 3015 l gs col-1 s gr +n 6691.76 2946.87 m 6795.00 3015.00 l 6671.85 3003.47 l 6682.30 2975.67 l 6691.76 2946.87 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 4410 2115 m 8325 3105 l gs col-1 s gr +n 8216.02 3046.50 m 8325.00 3105.00 l 8201.31 3104.67 l 8209.16 3076.08 l 8216.02 3046.50 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 4455 2070 m 9810 3105 l gs col-1 s gr +n 9697.87 3052.77 m 9810.00 3105.00 l 9686.49 3111.68 l 9692.68 3082.73 l 9697.87 3052.77 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 2565 4050 m 1530 4995 l gs col-1 s gr +n 1638.85 4936.24 m 1530.00 4995.00 l 1598.39 4891.93 l 1619.12 4914.59 l 1638.85 4936.24 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 2745 4095 m 2970 4995 l gs col-1 s gr +n 2970.00 4871.31 m 2970.00 4995.00 l 2911.79 4885.86 l 2941.40 4879.08 l 2970.00 4871.31 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 2970 4095 m 4275 5040 l gs col-1 s gr +n 4195.40 4945.32 m 4275.00 5040.00 l 4160.21 4993.92 l 4178.31 4970.12 l 4195.40 4945.32 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 3105 4050 m 5805 5040 l gs col-1 s gr +n 5702.66 4970.52 m 5805.00 5040.00 l 5682.01 5026.86 l 5692.83 4999.19 l 5702.66 4970.52 l clp gs 0.00 setgray ef gr gs col-1 s gr +% Polyline +n 3735 2160 m 3015 3060 l gs col-1 s gr +n 3113.39 2985.04 m 3015.00 3060.00 l 3066.54 2947.55 l 3090.46 2966.80 l 3113.39 2985.04 l clp gs 0.00 setgray ef gr gs col-1 s gr +/Courier-Bold findfont 180.00 scalefont setfont +1229 5556 m +gs 1 -1 sc (ms_y) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +2706 5556 m +gs 1 -1 sc (na2_y) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +4334 5579 m +gs 1 -1 sc (n1_y) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +3681 1776 m +gs 1 -1 sc (addaccu) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +6652 3577 m +gs 1 -1 sc (piot_sp) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +8301 3576 m +gs 1 -1 sc (pck_sp) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +5961 5549 m +gs 1 -1 sc (...) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +10011 3569 m +gs 1 -1 sc (...) col-1 show gr +/Courier-Bold findfont 180.00 scalefont setfont +2534 3599 m +gs 1 -1 sc (core) col-1 show gr +$F2psEnd +restore diff --git a/alliance/share/tutorials/addaccu/tex/hierarchy.fig b/alliance/share/tutorials/addaccu/tex/hierarchy.fig new file mode 100644 index 00000000..4d114662 --- /dev/null +++ b/alliance/share/tutorials/addaccu/tex/hierarchy.fig @@ -0,0 +1,98 @@ +#FIG 3.1 +Portrait +Center +Metric +1200 2 +6 5039 3419 5669 3644 +4 0 -1 0 0 14 12 0.0000000 4 180 630 5039 3556 pi_sp \001 +-6 +6 1034 1124 10754 5939 +6 1034 4949 2024 5939 +1 3 0 1 0 7 6 0 0 0.0000000 1 0.000 1531 5446 478 478 1531 5446 1891 5761 +4 0 0 6 0 14 12 0.0000000 4 135 420 1321 5468 ms_y\001 +-6 +6 2339 2969 3329 3959 +1 3 0 1 0 7 6 0 0 0.0000000 1 0.000 2836 3466 478 478 2836 3466 3196 3781 +4 0 0 6 0 14 12 0.0000000 4 90 420 2626 3511 core\001 +-6 +6 4949 2924 5939 3959 +6 5129 3329 5804 3554 +4 0 0 6 0 14 12 0.0000000 4 180 630 5131 3468 pi_sp \001 +-6 +1 3 0 1 0 7 6 0 0 0.0000000 1 0.000 5446 3443 478 478 5446 3443 5806 3758 +-6 +6 6614 2924 7604 3959 +1 3 0 1 0 7 6 0 0 0.0000000 1 0.000 7112 3444 478 478 7112 3444 7472 3759 +4 0 0 6 0 14 12 0.0000000 4 180 735 6744 3489 piot_sp\001 +-6 +6 8189 2924 9224 3959 +1 3 0 1 0 7 6 0 0 0.0000000 1 0.000 8708 3443 478 478 8708 3443 9068 3758 +4 0 0 6 0 14 12 0.0000000 4 180 630 8393 3488 pck_sp\001 +-6 +6 9764 2969 10754 3959 +1 3 0 1 0 7 6 0 0 0.0000000 1 0.000 10261 3466 478 478 10261 3466 10621 3781 +4 0 0 6 0 14 12 0.0000000 4 30 315 10103 3481 ...\001 +-6 +6 5714 4949 6704 5939 +1 3 0 1 0 7 6 0 0 0.0000000 1 0.000 6211 5446 478 478 6211 5446 6571 5761 +4 0 0 6 0 14 12 0.0000000 4 30 315 6053 5461 ...\001 +-6 +6 4139 4949 5129 5939 +1 3 0 1 0 7 6 0 0 0.0000000 1 0.000 4636 5446 478 478 4636 5446 4996 5761 +4 0 0 6 0 14 12 0.0000000 4 180 420 4426 5491 n1_y\001 +-6 +6 2564 4904 3554 5939 +1 3 0 1 0 7 6 0 0 0.0000000 1 0.000 3061 5423 478 478 3061 5423 3421 5738 +4 0 0 6 0 14 12 0.0000000 4 180 525 2798 5468 na2_y\001 +-6 +6 3644 1124 4634 2114 +1 3 0 1 0 7 6 0 0 0.0000000 1 0.000 4141 1621 478 478 4141 1621 4501 1936 +4 0 0 6 0 14 12 0.0000000 4 135 735 3773 1688 addaccu\001 +-6 +-6 +1 3 0 1 0 7 5 0 20 0.0000000 1 0.000 5354 3531 478 478 5354 3531 5714 3846 +1 3 0 1 0 7 5 0 20 0.0000000 1 0.000 1439 5534 478 478 1439 5534 1799 5849 +1 3 0 1 0 7 5 0 20 0.0000000 1 0.000 2969 5511 478 478 2969 5511 3329 5826 +1 3 0 1 0 7 5 0 20 0.0000000 1 0.000 4544 5534 478 478 4544 5534 4904 5849 +1 3 0 1 0 7 5 0 20 0.0000000 1 0.000 6119 5534 478 478 6119 5534 6479 5849 +1 3 0 1 0 7 5 0 20 0.0000000 1 0.000 4049 1709 478 478 4049 1709 4409 2024 +1 3 0 1 0 7 5 0 20 0.0000000 1 0.000 7020 3532 478 478 7020 3532 7380 3847 +1 3 0 1 0 7 5 0 20 0.0000000 1 0.000 8616 3531 478 478 8616 3531 8976 3846 +1 3 0 1 -1 7 5 0 20 0.0000000 1 0.000 10169 3554 478 478 10169 3554 10529 3869 +1 3 0 1 -1 7 5 0 20 0.0000000 1 0.000 2744 3554 478 478 2744 3554 3104 3869 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4320 2205 5040 3060 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4365 2160 6795 3015 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4410 2115 8325 3105 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4455 2070 9810 3105 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2565 4050 1530 4995 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2745 4095 2970 4995 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2970 4095 4275 5040 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3105 4050 5805 5040 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3735 2160 3015 3060 +4 0 -1 0 0 14 12 0.0000000 4 135 420 1229 5556 ms_y\001 +4 0 -1 0 0 14 12 0.0000000 4 180 525 2706 5556 na2_y\001 +4 0 -1 0 0 14 12 0.0000000 4 180 420 4334 5579 n1_y\001 +4 0 -1 0 0 14 12 0.0000000 4 135 735 3681 1776 addaccu\001 +4 0 -1 0 0 14 12 0.0000000 4 180 735 6652 3577 piot_sp\001 +4 0 -1 0 0 14 12 0.0000000 4 180 630 8301 3576 pck_sp\001 +4 0 -1 0 0 14 12 0.0000000 4 30 315 5961 5549 ...\001 +4 0 -1 0 0 14 12 0.0000000 4 30 315 10011 3569 ...\001 +4 0 -1 0 0 14 12 0.0000000 4 90 420 2534 3599 core\001 diff --git a/alliance/share/tutorials/addaccu/tutorial.ps b/alliance/share/tutorials/addaccu/tutorial.ps deleted file mode 100644 index be975aef..00000000 --- a/alliance/share/tutorials/addaccu/tutorial.ps +++ /dev/null @@ -1,2025 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software -%%Title: addaccu.dvi -%%Pages: 28 -%%PageOrder: Ascend -%%BoundingBox: 0 0 596 842 -%%DocumentFonts: Palatino-Roman Palatino-Bold Courier-Bold -%%+ Palatino-Italic Palatino-BoldItalic Courier-Oblique Courier -%%DocumentPaperSizes: A4 -%%EndComments -%DVIPSCommandLine: dvips addaccu.dvi -%DVIPSParameters: dpi=400, comments removed -%DVIPSSource: TeX output 1997.12.10:1601 -%%BeginProcSet: tex.pro -/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N -/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 -mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} -ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale -isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div -hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul -TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} -forall round exch round exch]setmatrix}N /@landscape{/isls true N}B -/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B -/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ -/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N -string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N -end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ -/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] -N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup -length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ -128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub -get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data -dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N -/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup -/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx -0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff -setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff -.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]} -if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup -length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ -cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin -0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul -add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict -/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook -known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X -/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for -65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 -0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V -{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 -getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} -ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false -RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 -false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform -round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg -rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail -{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} -B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ -4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ -p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p -a}B /bos{/SS save N}B /eos{SS restore}B end -%%EndProcSet -%%BeginFont: Palatino-Roman -% @@psencodingfile@{ -% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry", -% version = "0.6", -% date = "22 June 1996", -% filename = "8r.enc", -% email = "kb@@mail.tug.org", -% address = "135 Center Hill Rd. // Plymouth, MA 02360", -% codetable = "ISO/ASCII", -% checksum = "119 662 4424", -% docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX." -% @} -% -% Idea is to have all the characters normally included in Type 1 fonts -% available for typesetting. This is effectively the characters in Adobe -% Standard Encoding + ISO Latin 1 + extra characters from Lucida. -% -% Character code assignments were made as follows: -% -% (1) the Windows ANSI characters are almost all in their Windows ANSI -% positions, because some Windows users cannot easily reencode the -% fonts, and it makes no difference on other systems. The only Windows -% ANSI characters not available are those that make no sense for -% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen -% (173). quotesingle and grave are moved just because it's such an -% irritation not having them in TeX positions. -% -% (2) Remaining characters are assigned arbitrarily to the lower part -% of the range, avoiding 0, 10 and 13 in case we meet dumb software. -% -% (3) Y&Y Lucida Bright includes some extra text characters; in the -% hopes that other PostScript fonts, perhaps created for public -% consumption, will include them, they are included starting at 0x12. -% -% (4) Remaining positions left undefined are for use in (hopefully) -% upward-compatible revisions, if someday more characters are generally -% available. -% -% (5) hyphen appears twice for compatibility with both ASCII and Windows. -% -/TeXBase1Encoding [ -% 0x00 (encoded characters from Adobe Standard not in Windows 3.1) - /.notdef /dotaccent /fi /fl - /fraction /hungarumlaut /Lslash /lslash - /ogonek /ring /.notdef - /breve /minus /.notdef -% These are the only two remaining unencoded characters, so may as -% well include them. - /Zcaron /zcaron -% 0x10 - /caron /dotlessi -% (unusual TeX characters available in, e.g., Lucida Bright) - /dotlessj /ff /ffi /ffl - /.notdef /.notdef /.notdef /.notdef - /.notdef /.notdef /.notdef /.notdef - % very contentious; it's so painful not having quoteleft and quoteright - % at 96 and 145 that we move the things normally found there down to here. - /grave /quotesingle -% 0x20 (ASCII begins) - /space /exclam /quotedbl /numbersign - /dollar /percent /ampersand /quoteright - /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash -% 0x30 - /zero /one /two /three /four /five /six /seven - /eight /nine /colon /semicolon /less /equal /greater /question -% 0x40 - /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O -% 0x50 - /P /Q /R /S /T /U /V /W - /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore -% 0x60 - /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o -% 0x70 - /p /q /r /s /t /u /v /w - /x /y /z /braceleft /bar /braceright /asciitilde - /.notdef % rubout; ASCII ends -% 0x80 - /.notdef /.notdef /quotesinglbase /florin - /quotedblbase /ellipsis /dagger /daggerdbl - /circumflex /perthousand /Scaron /guilsinglleft - /OE /.notdef /.notdef /.notdef -% 0x90 - /.notdef /.notdef /.notdef /quotedblleft - /quotedblright /bullet /endash /emdash - /tilde /trademark /scaron /guilsinglright - /oe /.notdef /.notdef /Ydieresis -% 0xA0 - /.notdef % nobreakspace - /exclamdown /cent /sterling - /currency /yen /brokenbar /section - /dieresis /copyright /ordfeminine /guillemotleft - /logicalnot - /hyphen % Y&Y (also at 45); Windows' softhyphen - /registered - /macron -% 0xD0 - /degree /plusminus /twosuperior /threesuperior - /acute /mu /paragraph /periodcentered - /cedilla /onesuperior /ordmasculine /guillemotright - /onequarter /onehalf /threequarters /questiondown -% 0xC0 - /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla - /Egrave /Eacute /Ecircumflex /Edieresis - /Igrave /Iacute /Icircumflex /Idieresis -% 0xD0 - /Eth /Ntilde /Ograve /Oacute - /Ocircumflex /Otilde /Odieresis /multiply - /Oslash /Ugrave /Uacute /Ucircumflex - /Udieresis /Yacute /Thorn /germandbls -% 0xE0 - /agrave /aacute /acircumflex /atilde - /adieresis /aring /ae /ccedilla - /egrave /eacute /ecircumflex /edieresis - /igrave /iacute /icircumflex /idieresis -% 0xF0 - /eth /ntilde /ograve /oacute - /ocircumflex /otilde /odieresis /divide - /oslash /ugrave /uacute /ucircumflex - /udieresis /yacute /thorn /ydieresis -] def -%%EndFont -%%BeginProcSet: texps.pro -TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2 -index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll -exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics -exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub -dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} -ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict -end definefont 3 -1 roll makefont /setfont load]cvx def}def -/ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def -/ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def -end -%%EndProcSet -%%BeginProcSet: special.pro -TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N -/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen -false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B -/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit -div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{ -/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{ -10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B -/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale -true def end /@MacSetUp{userdict /md known{userdict /md get type -/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup -length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{} -N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath -clippath mark{transform{itransform moveto}}{transform{itransform lineto} -}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ -itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ -closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 -0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N -/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 -scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get -ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip -not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 -TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR -pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 --1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg -TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg -sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr -0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add -2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp -{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72 -div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray} -N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict -maxlength dict begin /magscale true def normalscale currentpoint TR -/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts -/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx -psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy -scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR -/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{ -psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 -roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath -moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict -begin /SpecialSave save N gsave normalscale currentpoint TR -@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial -{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto -closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx -sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR -}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse -CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury -lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath -}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{ -end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin} -N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{ -/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX -SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X -/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad -yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end -%%EndProcSet -TeXDict begin 39158280 55380996 1000 400 400 (addaccu.dvi) -@start /Fa 134[37 33 55 37 41 22 29 26 1[41 37 41 59 -22 41 1[22 41 37 26 33 41 29 41 33 11[52 1[41 4[55 7[37 -41 1[48 44 9[33 1[33 33 33 33 33 33 2[17 22 42[41 2[{ - TeXBase1Encoding ReEncodeFont }40 66.666669 /Palatino-Bold -rf /Fb 1 16 df<00F80003FE000FFF801FFFC03FFFE03FFFE07FFFF07FFFF0FFFFF8FF -FFF8FFFFF8FFFFF8FFFFF8FFFFF8FFFFF87FFFF07FFFF03FFFE03FFFE01FFFC00FFF8003 -FE0000F80015177D981C>15 D E /Fc 103[23 27[23 1[23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 1[23 23 23 -23 23 23 23 23 23 1[23 1[23 1[23 23 23 23 23 23 23 23 -23 23 1[23 23 23 23 23 23 1[23 23 23 23 23 23 23 23 23 -23 1[23 23 23 1[23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 1[23 23 23 23 1[23 1[23 1[23 33[{ TeXBase1Encoding ReEncodeFont } -80 38.888890 /Courier rf /Fd 103[27 30[27 27 1[27 27 -27 27 27 1[27 27 27 27 27 27 1[27 27 27 27 27 27 27 27 -27 1[27 7[27 1[27 27 27 27 1[27 27 27 27 27 27 1[27 27 -2[27 27 27 27 27 6[27 4[27 2[27 27 27 27 27 27 3[27 3[27 -27 36[{ TeXBase1Encoding ReEncodeFont }53 44.444445 /Courier -rf /Fe 134[33 33 33 33 33 33 33 33 1[33 33 33 33 33 33 -1[33 33 33 33 33 33 33 33 33 3[33 1[33 4[33 1[33 33 33 -1[33 33 33 33 33 33 1[33 33 33 33 33 33 33 33 33 33 5[33 -3[33 33 1[33 33 33 33 33 33 33 33 2[33 3[33 33 33 35[{ - TeXBase1Encoding ReEncodeFont }60 55.555558 /Courier -rf /Ff 145[34 1[18 2[18 1[31 1[28 1[25 34 28 10[43 9[34 -3[46 3[46 40 1[43 65[{ TeXBase1Encoding ReEncodeFont }14 -55.555558 /Palatino-Bold rf /Fg 133[40 44 40 66 44 49 -27 35 31 1[49 44 49 71 27 2[27 49 44 1[40 49 35 49 40 -13[49 4[66 4[31 2[44 49 66 58 53 8[40 40 40 40 40 40 -40 40 40 40 2[27 41[49 49 2[{ TeXBase1Encoding ReEncodeFont }43 -79.999965 /Palatino-Bold rf /Fh 138[33 33 33 33 1[33 -33 33 1[33 2[33 2[33 33 1[33 1[33 32[33 9[33 7[33 33 -45[{ TeXBase1Encoding ReEncodeFont }17 55.555558 /Courier-Oblique -rf /Fi 145[31 1[18 2[18 3[25 1[25 1[31 31[40 65[{ - TeXBase1Encoding ReEncodeFont }7 55.555558 /Palatino-BoldItalic -rf /Fj 134[28 28 40 28 31 18 22 22 1[28 25 31 43 15 25 -1[15 28 28 15 22 28 23 26 25 12[34 31 13[34 43 37 1[40 -18[14 18 14 1[22 38[30 29 2[{ TeXBase1Encoding ReEncodeFont }35 -55.555558 /Palatino-Italic rf /Fk 104[55 2[28 25[28 31 -29 46 31 33 18 23 22 31 33 30 32 49 16 31 13 16 32 31 -18 27 34 25 31 28 7[37 1[55 40 43 34 29 37 1[33 44 46 -52 34 1[18 19 46 1[31 34 43 39 34 43 5[14 14 28 28 28 -28 28 28 28 28 28 28 34 14 18 14 2[18 18 15 5[15 29[34 -33 2[{ TeXBase1Encoding ReEncodeFont }71 55.555558 /Palatino-Roman -rf /Fl 138[83 16[83 83 1[83 97[{ TeXBase1Encoding ReEncodeFont }4 -138.222241 /Courier-Bold rf /Fm 138[84 46 1[54 2[77 84 -1[46 2[46 84 2[69 1[61 1[69 31[107 65[{ TeXBase1Encoding ReEncodeFont } -12 138.222241 /Palatino-Bold rf /Fn 138[83 45 58 54 1[83 -1[80 4[40 1[77 1[66 30[77 70[{ TeXBase1Encoding ReEncodeFont }10 -138.222241 /Palatino-Roman rf end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 400dpi -TeXDict begin -%%PaperSize: A4 - -%%EndSetup -%%Page: 1 1 -1 0 bop 445 392 a Fn(First)35 b(steps)g(in)f(using)h -Fm(Alliance)643 592 y(the)f Fl(addaccu)e Fm(tutorial)1196 -1097 y Fk(Abstract)256 1232 y Fj(This)19 b(tutorial)f(intr)o(oduces)f -(the)h(design)f(\003ow)i(to)f(be)g(used)f(in)i(the)g -Fi(Alliance)f Fj(CAD)h(framework)d(for)i(the)256 1312 -y(design)d(and)f(veri\002cation)g(of)i(a)f(standard)e(cells)i(cir)o -(cuit,)g(including)g(the)g(pads.)21 b(Each)14 b(step)h(of)g(the)g -(desgin)256 1391 y(\003ow)f(is)g(supported)d(by)i(one)g(or)g(mor)o(e)f -(speci\002c)h(tools,)g(whose)f(use)g(is)i(brie\003y)f(explained.)256 -1493 y(This)22 b(text)f(is)h(meant)f(to)h(be)f(simple)g(and)g(compr)o -(ehensive,)e(and)i(is)g(to)h(be)f(used)f(to)i(get)f Fk(into)h -Fj(the)g(sys-)256 1573 y(tem.)41 b(Should)21 b(something)g(be)f -(unclear)g(or)h(wr)o(ong,)h(please)e(indicate)i(this)f(by)g(sending)g -(an)g(e-mail)h(to)256 1653 y Fh(alliance-support@lip)q(6.fr)p -Fj(.)118 1863 y Fg(1)80 b(Introduction)118 2002 y Fk(In)18 -b(this)g(tutorial,)i(you)e(will)g(learn)f(the)h(practical)f(use)h(of)g -(some)g(basic)f Ff(Alliance)h Fk(tools)h(by)e(building)h(a)g(very)118 -2082 y(simple)f(cir)o(cuit)f(fr)o(om)h(scratch.)23 b(It)17 -b(is)f(r)o(ecommended)f(that)h(you)h(r)o(ead)e(the)h -Fe(overview.ps)j Fk(\002le)d(befor)o(e)g(pr)o(o-)118 -2162 y(ceeding,)c(as)i(it)g(describes)f(the)h(main)f(steps)i(of)f(the)g -(design)g(conceptually)-6 b(.)201 2241 y(Befor)o(e)20 -b(we)h(pr)o(oceed)e(to)i(the)f(tutorial,)j(you)e(must)h(make)d(sur)o(e) -i(that)g(the)f Ff(Alliance)h Fk(tools)h(ar)o(e)d(r)o(eadilly)118 -2321 y(available)13 b(when)h(invoking)g(them)g(at)f(the)h(pr)o(ompt.)j -(The)d(pr)o(ompt)g(in)h(r)o(epr)o(esented)d(in)i(the)g(following)h -(text)e(by)118 2401 y(the)h(symbol)g(:)p 118 2456 2351 -3 v 118 2522 3 67 v 137 2501 a Fd(\230fred/addac)o(cu)22 -b(\045-\))p 2466 2522 V 118 2524 2351 3 v 2467 2535 13 -71 v 129 2535 2351 13 v 134 2615 a Fk(In)16 b(this)h(system,)g -Fe(fred)g Fk(is)g(the)f(user)l(,)g Fe(addaccu)i Fk(is)f(the)f(curr)o -(ent)f(dir)o(ectory)-6 b(,)15 b(and)h Fe(\045-\))h Fk(is)g(supposed)g -(to)g(give)118 2695 y(us)e(courage!)201 2774 y(T)-5 b(ry)14 -b(issuing)h(the)e(following)j(command)d(to)h(check)e(that)i -Ff(Alliance)g Fk(is)g(corr)o(ectly)f(installed:)p 118 -2829 2351 3 v 118 2897 3 69 v 137 2874 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(yagle)p 2466 2897 V 118 2899 2351 3 v 2467 -2910 13 73 v 129 2910 2351 13 v 201 3070 a Fk(If)14 b(everything)f(is)i -(working,)e(you)i(get)e(the)g(following)i(r)o(esult:)1285 -4081 y(1)p eop -%%Page: 2 2 -2 1 bop 297 296 1982 3 v 297 1217 3 922 v 347 367 a Fc(YAGLE)24 -b(2.00)347 420 y(Usage)71 b(:)23 b(yagle)i([options])g()g -([file2])347 473 y(Options)g(:)e(-i)117 b(reads)24 b(the)g('.inf')h -(file)579 526 y(-v)117 b(vectorises)26 b(the)e(vhdl)g(description)579 -579 y(-p=n)71 b(n)23 b(is)h(the)g(depth)h(for)f(functional)h(analysis) -579 632 y(-nc)94 b(no)24 b(detection)h(of)f(complex)h(gates)579 -685 y(-nl)94 b(no)24 b(latch)g(detection)579 739 y(-fcl)71 -b(transistor)26 b(netlist)f(detection)579 792 y(-elp)71 -b(use)24 b(the)g(technology)i(file)e('.elp')579 845 y(-d)117 -b(generates)25 b(a)f(.cns)g(file)579 898 y(-b)117 b(transistor)26 -b(orientation)579 951 y(-z)117 b(functional)26 b(analysis)f(through)g -(HZ)e(nodes)579 1004 y(-os)94 b(only)24 b(one)g(vdd)g(and)g(vss)g(in)g -(the)g(vhdl)g(description)579 1057 y(-nh)94 b(generates)25 -b(a)f(hierarchical)i(cone)e(netlist)579 1110 y(file2)48 -b(is)24 b(the)g(vhdl)g(file)g(to)g(be)g(generated)h(\(default)g(is)f -(file1\))579 1164 y(-t)117 b(display)25 b(execution)g(trace)p -2277 1217 V 297 1219 1982 3 v 2278 1241 24 926 v 319 -1241 1982 24 v 201 1401 a Fk(If)14 b(it)g(does)g(not)g(work,)g(please)f -(abort)h(the)f(tutorial)h(and)g(\002x)g(the)f(pathnames.)201 -1480 y(W)-5 b(e)22 b(will)h(assume)f(that)g(the)g(user)g(is)h(running)f -(a)g Fe(c-like)h Fk(shell,)i(like)c Fe(csh)i Fk(or)f -Fe(tcsh)p Fk(.)43 b(If)22 b(you)h(run)f(a)118 1560 y -Fe(sh-like)15 b Fk(shell,)f(please)g(r)o(efer)f(to)h(your)g -(documentation.)201 1640 y(T)-5 b(ypically)13 b(do:)p -118 1695 2351 3 v 118 1826 3 132 v 137 1740 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(setenv)f(ALLIANCE_TOP)52 b(/usr/local/)o(ca)o(d/)o(all)o(ia)o(nc)o -(e)137 1804 y(\230fred/addac)o(cu)22 b(\045-\))j(setenv)f(PATH)h -($ALLIANCE_TOP/bin:$P)o(AT)o(H)p 2466 1826 V 118 1828 2351 3 v -2467 1839 13 136 v 129 1839 2351 13 v 134 1919 a Fk(Wher)o(e)15 -b(we)h(assume)g(that)g Ff(Alliance)g Fk(has)h(been)e(installed)h(under) -f Fe(/usr/local/cad/allian)q(ce)20 b Fk(dir)o(ec-)118 -1998 y(tory)-6 b(.)17 b(In)d(the)f(sequel,)h(we)f(will)i(assume)f(that) -g(the)f Fe($ALLIANCE_TOP)i Fk(variable)e(is)h(pr)o(operly)g(set)g(up.)201 -2071 y(All)j(the)f(tools)h(used)g(in)f(this)h(tutorial)g(ar)o(e)f -(documented)f(at)h(least)g(with)h(a)f(manual)g(page.)24 -b(Each)15 b(manual)118 2145 y(can)e(be)g(accessed)g(using)i(the)e -Fe(man)34 b Fj(tool)14 b Fk(command.)i(Y)-5 b(ou)14 b(may)f(have)h(to)g -(do)g(a:)p 118 2199 2351 3 v 118 2268 3 69 v 137 2246 -a Fd(\230fred/addac)o(cu)22 b(\045-\))j(setenv)f(MANPATH)g($ALLIANCE_TOP/man:$)o -(MA)o(NPA)o(TH)p 2466 2268 V 118 2270 2351 3 v 2467 2281 -13 73 v 129 2281 2351 13 v 131 2361 a Fk(in)14 b(or)o(der)f(to)h(have)f -(the)h(manual)g(accessible.)201 2440 y(The)g(tutorial)g(is)g(or)o -(ganized)f(ar)o(ound)h(the)g(following)h(sections:)201 -2560 y Fb(\017)27 b Fk(Chip)15 b(overview)f(\(page)f(3\);)201 -2682 y Fb(\017)27 b Fk(Design)14 b(\003ow)g(\(page)g(3\);)201 -2803 y Fb(\017)27 b Fk(Execution)14 b(envir)o(onment)g(set-up)h(\(page) -e(4\);)201 2925 y Fb(\017)27 b Fk(Behavioral)14 b(captur)o(e)f(and)g -(simulation)i(\(page)f(5\);)201 3047 y Fb(\017)27 b Fk(Netlist)15 -b(captur)o(e)e(\(page)g(8\);)201 3169 y Fb(\017)27 b -Fk(Cor)o(e)14 b(layout)g(generation)f(\(page)h(13\);)201 -3291 y Fb(\017)27 b Fk(Cor)o(e)14 b(layout)g(veri\002cation)g(\(page)g -(14\);)201 3413 y Fb(\017)27 b Fk(Cor)o(e)14 b(to)g(pads)g(r)o(outing)h -(\(page)e(18\);)201 3534 y Fb(\017)27 b Fk(Chip)15 b(visualization)g -(\(page)e(20\);)201 3656 y Fb(\017)27 b Fk(Functional)15 -b(abstraction)e(\(page)g(20\);)201 3778 y Fb(\017)27 -b Fk(Further)14 b(veri\002cations)g(\(page)g(24\);)201 -3900 y Fb(\017)27 b Fk(Symbolic)14 b(to)g(r)o(eal)f(technology)g -(conversion)i(\(page)e(25\).)1285 4081 y(2)p eop -%%Page: 3 3 -3 2 bop 669 349 a - 14917438 9397980 0 -12235407 19142492 0 startTexFig - - -90 rotate - 669 349 a -%%BeginDocument: addaccu.eps -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {} def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save --26.0 -14.0 translate - 90 rotate -1 -1 scale - -/clp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/l {lineto} bind def -/m {moveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit - 0.06299 0.06299 sc -7.500 slw -% Polyline -n 2252 1553 m 2252 2273 l 2927 1553 l 2927 1103 l 2252 428 l 2252 1103 l - 2522 1328 l 2252 1553 l gs 0.00 setgray ef gr gs col-1 s gr -/Courier-Bold findfont 180.00 scalefont setfont -2657 1426 m -gs 1 -1 sc (+) col-1 show gr -% Polyline -n 1622 1532 m 1892 1532 l 1892 2252 l 1622 2252 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 1622 1532 m 1892 1892 l 1622 2252 l gs 0.00 setgray ef gr gs col-1 s gr -% Ellipse -n 1578 1308 37 37 0 360 DrawEllipse gs 0.00 setgray ef gr gs col-1 s gr - -% Polyline -n 1534 1309 m 1263 1173 l 1263 1443 l 1534 1309 l gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 2253 2388 m 2523 2388 l 2523 3108 l 2253 3108 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Ellipse -n 1532 1352 37 37 0 360 DrawEllipse gs 1.00 setgray ef gr gs col-1 s gr - -% Polyline -n 1488 1353 m 1217 1217 l 1217 1487 l 1488 1353 l gs 1.00 setgray ef gr gs col-1 s gr -% Polyline -n 1576 1576 m 1846 1576 l 1846 2296 l 1576 2296 l clp gs 1.00 setgray ef gr gs col-1 s gr -% Polyline -n 2206 1597 m 2206 2317 l 2881 1597 l 2881 1147 l 2206 472 l 2206 1147 l - 2476 1372 l 2206 1597 l gs 1.00 setgray ef gr gs col-1 s gr -% Polyline -n 2207 2432 m 2477 2432 l 2477 3152 l 2207 3152 l clp gs 1.00 setgray ef gr gs col-1 s gr -% Polyline -n 2252 2522 m 2342 2522 l 2342 2927 l 2432 2927 l gs 1.00 setgray ef gr gs col-1 s gr -% Polyline -n 2207 3152 m 2342 2972 l 2477 3152 l gs col-1 s gr -30.000 slw -% Polyline -n 1846 1935 m 2115 1935 l gs col7 1.00 shd ef gr gs col7 s gr -% Polyline -n 2565 855 m 2565 586 l gs col7 1.00 shd ef gr gs col7 s gr -% Polyline -n 2476 2790 m 2745 2790 l gs col7 1.00 shd ef gr gs col7 s gr -% Polyline -n 1576 1350 m 1845 1350 l gs col7 1.00 shd ef gr gs col7 s gr -% Polyline -n 2881 1350 m 3150 1350 l gs col7 1.00 shd ef gr gs col7 s gr -/Courier-Bold findfont 270.00 scalefont setfont -2565 1440 m -gs 1 -1 sc (+) col-1 show gr -7.500 slw -% Polyline -n 1576 1576 m 1846 1936 l 1576 2296 l gs col-1 s gr -% Polyline -n 2881 1351 m 2881 1351 l gs col-1 s gr -% Polyline -n 1846 1936 m 2206 1936 l gs col-1 s gr -% Polyline -n 2340 2565 m 2340 2790 l gs col-1 s gr -n 2370.00 2670.00 m 2340.00 2790.00 l 2310.00 2670.00 l 2340.50 2670.50 l 2370.00 2670.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 1216 1351 m 901 1351 l gs col-1 s gr -% Polyline -n 1711 1576 m 1711 1351 l 1576 1351 l gs col-1 s gr -% Polyline -n 2566 856 m 2566 541 l 4141 541 l gs col-1 s gr -% Polyline -n 901 3286 m 2341 3286 l 2341 3151 l gs col-1 s gr -% Polyline -n 2476 2790 m 3556 2790 l 3556 1350 l gs col-1 s gr -% Polyline -n 2476 2791 m 3556 2791 l 3556 1351 l gs col-1 s gr -% Polyline -n 1126 2116 m 1126 2791 l 2206 2791 l gs col-1 s gr -% Polyline -n 901 1756 m 1576 1756 l gs col-1 s gr -% Polyline -n 1126 2116 m 1576 2116 l gs col-1 s gr -% Polyline -n 901 811 m 2206 811 l gs col-1 s gr -/Courier-Bold findfont 180.00 scalefont setfont -225 855 m -gs 1 -1 sc (b[3:0]) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -225 3330 m -gs 1 -1 sc (ck) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -4185 1395 m -gs 1 -1 sc (s[3:0]) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -4230 585 m -gs 1 -1 sc (cout) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -225 1800 m -gs 1 -1 sc (a[3:0]) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -225 1395 m -gs 1 -1 sc (sel) col-1 show gr -% Polyline -n 2881 1351 m 4141 1351 l gs col-1 s gr -$F2psEnd -restore -%%EndDocument - - endTexFig - 741 1264 a Fk(Figur)o(e)13 b(1:)k(Ar)o(chitectur)o(e)c(of)h(the)g -Fe(addaccu)h Fk(cir)o(cuit.)118 1448 y Fg(2)80 b(Chip)18 -b(overview)118 1587 y Fk(The)e(pictur)o(e)h(in)g(the)f(Figur)o(e)g(1)h -(shows)h(the)e(ar)o(chitectur)o(e)f(of)j(the)e(small)h(chip)g(that)f -(will)h(be)f(our)h(example)e(all)118 1667 y(along)e(this)g(tutorial.)k -(As)d(you)f(can)f(see,)g(the)h(cir)o(cuit)f(is)h(pr)o(etty)f(small:)17 -b(it)c(mostly)g(consists)h(in)f(a)g(four)g(bit)g(adder)l(,)118 -1747 y(a)h(four)g(bit)g(r)o(egister)l(,)f(and)g(a)h(2)f(to)h(1)g(four)h -(bit)e(multiplexer)l(.)201 1826 y(Inputs)i(ar)o(e)e(located)g(on)h(the) -g(left)g(side)g(of)g(the)g(pictur)o(e,)f(and)h(outputs)i(ar)o(e)d -(located)g(on)h(the)g(right)f(side.)18 b(W)-5 b(e)118 -1906 y(did)13 b(not)g(r)o(epr)o(esent)f(the)g(power)h(supplies)i(on)e -(this)g(schematic,)f(but)h(you'll)h(need)e(them)g(in)h(or)o(der)f(for)i -(the)e(chip)118 1986 y(to)i(work!)201 2065 y(The)f(cir)o(cuit)h -(performs)g(an)f(addition)h(between)e(either)h(the)g -Fe(b[3:0])i Fk(and)f Fe(a[3:0])h Fk(inputs)g(when)e Fe(sel)i -Fk(is)118 2145 y(set)j(to)g(0,)g(or)g(between)e Fe(b[3:0])j -Fk(and)e(the)h(contents)g(of)g(the)g(four)g(bit)g(r)o(egister)e(when)i -Fe(sel)g Fk(is)h(set)e(to)h(1.)29 b(The)118 2225 y(content)16 -b(of)h(the)f(r)o(egister)f(is)i(overwriten)f(by)g(the)g(value)g(of)h -(the)f(outputs)i Fe(s[3:0])f Fk(on)g(each)e(falling)i(edge)e(of)118 -2304 y(the)f(clock,)f Fe(ck)p Fk(.)118 2515 y Fg(3)80 -b(Design)20 b(\003ow)118 2654 y Fk(Y)-5 b(ou)13 b(ar)o(e)f(now)h(r)o -(eady)e(to)i(actually)f(design)h(the)f(chip)h(and)f(use)h(the)g -Ff(Alliance)f Fk(tools.)18 b(The)12 b(design)h(\003ow)f(for)h(this)118 -2734 y(little)h(example)e(is)j(composed)e(of)i(5)e(main)h(steps:)187 -2858 y(1.)27 b(behavioral)14 b(captur)o(e)f(and)g(simulation;)187 -2982 y(2.)27 b(netlist)15 b(captur)o(e)e(and)g(validation;)187 -3106 y(3.)27 b(physical)14 b(layout)h(generation;)187 -3230 y(4.)27 b(design)14 b(validation;)187 3354 y(5.)27 -b(symbolic)14 b(to)g(r)o(eal)f(conversion.)201 3478 y(As)i(you)f(will)g -(see,)f(points)j(2)d(and)h(3)f(must)i(be)e(performed)g(for)i(each)e -(level)g(of)i(hierar)o(chy)-6 b(.)15 b(In)f(this)h(example)118 -3558 y(we)e(distinguish)i(two)f(levels)f(of)h(hierar)o(chy:)h(the)e -(cor)o(e)g(level)f(and)h(the)g(chip)h(level.)i(At)d(the)g(cor)o(e)g -(level,)g(the)g(leaf)118 3637 y(cells)18 b(of)g(the)g(design)g(belong)g -(to)g(the)g Ff(Alliance)g Fk(standar)o(d)f(cells)h(library)-6 -b(.)28 b(At)18 b(the)g(chip)g(level,)g(the)g(pr)o(evious)118 -3717 y(cor)o(e)13 b(and)h(pads)g(belonging)f(to)h(the)g -Ff(Alliance)g Fk(pad)f(library)g(ar)o(e)g(used.)201 3797 -y(The)h(Figur)o(e)f(2)g(below)h(describes)f(the)g(cir)o(cuit's)i -(hierar)o(chy)-6 b(.)1285 4081 y(3)p eop -%%Page: 4 4 -4 3 bop 197 349 a - 26105517 13052755 0 0 40587345 20326563 startTexFig - 197 349 a -%%BeginDocument: hierarchy.eps -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {} def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save --60.0 380.0 translate -1 -1 scale - -/clp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/l {lineto} bind def -/m {moveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit - 0.06299 0.06299 sc -7.500 slw -% Ellipse -n 4636 5446 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr - -% Ellipse -n 1531 5446 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr - -/Courier-Bold findfont 180.00 scalefont setfont -1321 5468 m -gs 1 -1 sc (ms_y) col0 show gr -% Ellipse -n 2836 3466 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr - -/Courier-Bold findfont 180.00 scalefont setfont -2626 3511 m -gs 1 -1 sc (core) col0 show gr -/Courier-Bold findfont 180.00 scalefont setfont -5131 3468 m -gs 1 -1 sc (pi_sp ) col0 show gr -% Ellipse -n 5446 3443 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr - -% Ellipse -n 7112 3444 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr - -/Courier-Bold findfont 180.00 scalefont setfont -6744 3489 m -gs 1 -1 sc (piot_sp) col0 show gr -% Ellipse -n 8708 3443 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr - -/Courier-Bold findfont 180.00 scalefont setfont -8393 3488 m -gs 1 -1 sc (pck_sp) col0 show gr -% Ellipse -n 10261 3466 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr - -/Courier-Bold findfont 180.00 scalefont setfont -10103 3481 m -gs 1 -1 sc (...) col0 show gr -% Ellipse -n 6211 5446 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr - -/Courier-Bold findfont 180.00 scalefont setfont -6053 5461 m -gs 1 -1 sc (...) col0 show gr -/Courier-Bold findfont 180.00 scalefont setfont -3773 1688 m -gs 1 -1 sc (addaccu) col0 show gr -/Courier-Bold findfont 180.00 scalefont setfont -4426 5491 m -gs 1 -1 sc (n1_y) col0 show gr -% Ellipse -n 3061 5423 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr - -/Courier-Bold findfont 180.00 scalefont setfont -2798 5468 m -gs 1 -1 sc (na2_y) col0 show gr -% Ellipse -n 4141 1621 478 478 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr - -% Ellipse -n 4544 5534 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -% Ellipse -n 5354 3531 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -% Ellipse -n 1439 5534 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -% Ellipse -n 2969 5511 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -% Ellipse -n 2744 3554 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col-1 s gr - -% Ellipse -n 6119 5534 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -% Ellipse -n 4049 1709 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -% Ellipse -n 7020 3532 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -% Ellipse -n 8616 3531 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -% Ellipse -n 10169 3554 478 478 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col-1 s gr - -/Courier-Bold findfont 180.00 scalefont setfont -5039 3556 m -gs 1 -1 sc (pi_sp ) col-1 show gr -% Polyline -n 4320 2205 m 5040 3060 l gs col-1 s gr -n 4985.65 2948.89 m 5040.00 3060.00 l 4939.76 2987.53 l 4963.20 2968.71 l 4985.65 2948.89 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 4365 2160 m 6795 3015 l gs col-1 s gr -n 6691.76 2946.87 m 6795.00 3015.00 l 6671.85 3003.47 l 6682.30 2975.67 l 6691.76 2946.87 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 4410 2115 m 8325 3105 l gs col-1 s gr -n 8216.02 3046.50 m 8325.00 3105.00 l 8201.31 3104.67 l 8209.16 3076.08 l 8216.02 3046.50 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 4455 2070 m 9810 3105 l gs col-1 s gr -n 9697.87 3052.77 m 9810.00 3105.00 l 9686.49 3111.68 l 9692.68 3082.73 l 9697.87 3052.77 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 2565 4050 m 1530 4995 l gs col-1 s gr -n 1638.85 4936.24 m 1530.00 4995.00 l 1598.39 4891.93 l 1619.12 4914.59 l 1638.85 4936.24 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 2745 4095 m 2970 4995 l gs col-1 s gr -n 2970.00 4871.31 m 2970.00 4995.00 l 2911.79 4885.86 l 2941.40 4879.08 l 2970.00 4871.31 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 2970 4095 m 4275 5040 l gs col-1 s gr -n 4195.40 4945.32 m 4275.00 5040.00 l 4160.21 4993.92 l 4178.31 4970.12 l 4195.40 4945.32 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 3105 4050 m 5805 5040 l gs col-1 s gr -n 5702.66 4970.52 m 5805.00 5040.00 l 5682.01 5026.86 l 5692.83 4999.19 l 5702.66 4970.52 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 3735 2160 m 3015 3060 l gs col-1 s gr -n 3113.39 2985.04 m 3015.00 3060.00 l 3066.54 2947.55 l 3090.46 2966.80 l 3113.39 2985.04 l clp gs 0.00 setgray ef gr gs col-1 s gr -/Courier-Bold findfont 180.00 scalefont setfont -1229 5556 m -gs 1 -1 sc (ms_y) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -2706 5556 m -gs 1 -1 sc (na2_y) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -4334 5579 m -gs 1 -1 sc (n1_y) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -3681 1776 m -gs 1 -1 sc (addaccu) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -6652 3577 m -gs 1 -1 sc (piot_sp) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -8301 3576 m -gs 1 -1 sc (pck_sp) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -5961 5549 m -gs 1 -1 sc (...) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -10011 3569 m -gs 1 -1 sc (...) col-1 show gr -/Courier-Bold findfont 180.00 scalefont setfont -2534 3599 m -gs 1 -1 sc (core) col-1 show gr -$F2psEnd -restore -%%EndDocument - - endTexFig - 857 1573 a Fk(Figur)o(e)14 b(2:)i(Hierar)o(chical)c(partitionning.)118 -1755 y Fg(4)80 b(Execution)18 b(environment)g(set-up)118 -1894 y Fk(Befor)o(e)c(you)h(start)g(examining)f(the)h(\002rst)g(phase)g -(of)g(the)g(design)g(methodology)-6 b(,)14 b(you)h(\002rst)h(have)e(to) -h(set)g(up)g(an)118 1974 y(execution)e(envir)o(onment)h(for)g(the)g -Ff(Alliance)g Fk(tools.)201 2054 y(If)h(the)f Ff(Alliance)h -Fk(installation)g(is)g(set)g(up)g(pr)o(operly)-6 b(,)15 -b(most)g(of)g(the)f(tools)i(can)e(be)g(executed)e(without)k(pr)o(ob-) -118 2133 y(lem.)g(If)d(the)f(installation)h(is)g(only)g(partial,)f(or)h -(if)g(you)g(want)f(to)h(set)f(a)h(special)f(featur)o(e)g(of)h(a)f -(tool,)h(you)g(will)g(have)118 2213 y(to)h(set)g(some)g(envir)o(onment) -g(variables)f(up.)201 2293 y(The)18 b(envir)o(onment)h(variables)f -(upon)h(the)g(which)f(each)g(tool)h(depends)f(ar)o(e)g(documented)f(in) -i(each)f(tool)118 2373 y(manual)c(page.)i(However)l(,)d(some)h -(variables)f(ar)o(e)g(r)o(eally)g(useful,)i(and)f(ar)o(e)e(in)j(part)e -(documented)g(her)o(e.)118 2550 y Fa(4.1)67 b(Cell)17 -b(libraries)g(path)118 2669 y Fk(The)11 b(\002rst)h(thing)f(to)h(know)f -(for)h(this)g(cir)o(cuit)f(is)h(the)e(actual)h(location)g(of)h(the)f -(standar)o(d-cell)g(library)-6 b(.)14 b(This)e(library)118 -2748 y(is)18 b(located)e(into)h Fe($ALLIANCE_TOP/cells/sclib)p -Fk(.)30 b(But)18 b(indicating)e(only)i(one)f(library)f(is)h(not)h -(enough,)g(and)f(as)g(you)118 2828 y(can)c(see)h(in)g(doing)g(a)f -Fe(ls)34 b($ALLIANCE_TOP/cells)p Fk(,)16 b(several)d(libraries)g(ar)o(e)g -(available.)201 2908 y(The)h(other)f(library)g(of)i(inter)o(est)e(her)o -(e)g(is)i(the)e(pad)h(library)-6 b(,)12 b(located)h(in)h -Fe($ALLIANCE_TOP/cells/ring)p Fk(.)201 2981 y(T)-5 b(o)14 b(set)g(up)g(the)g -(cell)f(library)g(path,)h(the)f(following)j(command)d(is)h(r)o(equir)o -(ed:)p 118 3036 2351 3 v 118 3105 3 70 v 137 3081 a Fd(\230fred/addac)o -(cu)22 b(\045-\))j(setenv)f(MBK_CATA_LI)o(B)e($ALLIANCE_TOP/cells/s)o(cr)o(:$T)o -(OP)o(/c)o(ell)o(s/)o(ri)o(ng)p 2466 3105 V 118 3107 -2351 3 v 2467 3118 13 74 v 129 3118 2351 13 v 201 3278 -a Fk(This)16 b Fe(setenv)h Fk(instructs)f Ff(Alliance)f -Fk(tools)h(to)g(sear)o(ch)f(its)g(cells)g(in)h Fe(/alliance/cells/scr)j -Fk(and)c(then)118 3357 y(in)f Fe(/alliance/cells/ring)p -Fk(,)k(that)c(r)o(espectively)f(contains)h(the)g(standar)o(d)f(cells)h -(and)f(the)h(pads.)118 3535 y Fa(4.2)67 b(User)16 b(working)g -(directory)118 3653 y Fk(Y)-5 b(ou)14 b(must)h(specify)f(the)g(dir)o -(ectory)e(wher)o(e)h(the)h(\002les)g(generated)e(by)h(an)h -Ff(Alliance)g Fk(tool)g(ar)o(e)f(to)h(be)f(located.)201 -3726 y(Please)h(enter)f(the)g(following)i(command:)p -118 3781 2351 3 v 118 3848 3 67 v 137 3826 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(setenv)f(MBK_WORK_LI)o(B)e(.)p 2466 3848 -V 118 3850 2351 3 v 2467 3861 13 72 v 129 3861 2351 13 -v 1285 4081 a Fk(4)p eop -%%Page: 5 5 -5 4 bop 201 428 a Fk(In)16 b(this)h(case,)f(the)g(working)g(dir)o -(ectory)f(is)h(the)g(curr)o(ent)g(dir)o(ectory)-6 b(.)22 -b(This)17 b(library)e(is)i(scanned)e(befor)o(e)h(the)118 -508 y(ones)e(set)g(in)g Fe(MBK)p 490 508 17 3 v 20 w(CATA)p -642 508 V 21 w(LIB)g Fk(when)g(a)f(tool)i(loads)f(a)f(cell,)g(and)g -(the)h(only)g(one)f(used)h(for)g(writing)g(a)f(cell.)k(Note)118 -588 y(that)d Fe(.)j Fk(is)e(the)e(default)h(value)g(of)g(this)h -(variable,)e(so)h(it)g(is)g(not)h(r)o(equir)o(ed)e(to)h(set)g(it)g(up)g -(usually)-6 b(.)118 765 y Fa(4.3)67 b(File)17 b(formats)118 -884 y Fk(One)12 b(of)i(the)e(inter)o(esting)h(featur)o(es)f(of)i -Ff(Alliance)f Fk(is)g(that)g(dif)o(fer)o(ent)f(\002le)h(formats)h(can)e -(be)g(used)h(for)g(both)g(netlist)118 963 y(and)18 b(layout)h(view)-5 -b(.)32 b(However)l(,)19 b(in)g(the)f(design)h(methodology)f(we)g(wish)i -(to)f(pr)o(omote,)g(some)g(formats)g(ar)o(e)118 1043 -y(r)o(ecommended.)f(The)d Fe(vst)p Fk(,)g(structural)g -Ff(VHDL)p Fk(,)g(is)h(dedicated)d(to)i(netlist)g(speci\002cation.)21 -b(The)14 b Fe(al)i Fk(format)f(is)118 1123 y(dedicated)d(to)i -(extracted)d(layout)j(r)o(epr)o(esentation.)j(The)c Fe(ap)i -Fk(format)f(is)g(the)g(usual)g(layout)g(format.)201 1203 -y(So,)g(prior)g(to)g(generate)e(a)i(speci\002cation)g(netlist,)g(you)g -(shall)h(type:)p 118 1257 2351 3 v 118 1324 3 67 v 137 -1302 a Fd(\230fred/addac)o(cu)22 b(\045-\))j(setenv)f(MBK_OUT_LO)e(vst) -p 2466 1324 V 118 1326 2351 3 v 2467 1338 13 72 v 129 -1338 2351 13 v 201 1497 a Fk(But)14 b(if)h(you)f(wish)h(to)f(extract)e -(a)h(netlist)i(fr)o(om)f(the)f(layout)h(then)g(you'll)h(do:)p -118 1552 2351 3 v 118 1619 3 67 v 137 1596 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(setenv)f(MBK_OUT_LO)e(al)p 2466 1619 V 118 -1621 2351 3 v 2467 1632 13 72 v 129 1632 2351 13 v 118 -1922 a Fg(5)80 b(Behavioral)19 b(capture)g(and)g(simulation)118 -2061 y Fk(When)d(designing)f(a)f(chip,)i(the)f(\002rst)h(thing)f(to)h -(do)f(is)h(to)f(write)g(its)h(behavior)l(,)e(based)h(on)g(its)h -(functional)g(spec-)118 2141 y(i\002cations.)21 b(In)15 -b(our)h(example)d Fe(addaccu)p Fk(,)k(we)d(have)h(to)g(modelize)f(an)h -(adder)l(,)e(a)i(r)o(egister)f(and)h(a)f(multiplexer)l(.)118 -2221 y(W)-5 b(e)12 b(also)g(have)g(to)g(specify)g(in)h(the)e(r)o -(esulting)i(behavior)e(\002le)h(that)g(the)g(adder)f(may)g(take)g(as)h -(an)g(input)h(the)f(r)o(esult)118 2300 y(of)j(a)e(pr)o(evious)i -(calculation)f(or)f(a)h(new)g(input)h(stimuli.)201 2380 -y(Modern)k(behavioral)f(descriptions)i(ar)o(e)d(written)i(using)h(the)f -Ff(VHDL)f Fk(language,)h(the)g(most)h(pr)o(omoted)118 -2460 y(and)14 b(supported)g(har)o(dwar)o(e)f(description)h(language.) -201 2540 y(Let)f(us)i(now)f(edit)g(the)f(behavioral)g(description)h(of) -h(addaccu)d(by)i(issuing)h(the)e(following)j(command:)p -118 2594 2351 3 v 118 2662 3 68 v 137 2640 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(vi)h(addaccu.vbe)p 2466 2662 V 118 2664 2351 -3 v 2467 2675 13 72 v 129 2675 2351 13 v 201 2835 a Fk(The)d -Fe(addaccu.vbe)j Fk(\002le)e(contains)g(the)f(behavioral)g(description) -h(of)g(the)f(cir)o(cuit.)46 b Fe(Vbe)25 b Fk(stands)f(for)118 -2914 y Ff(VHDL)19 b Fk(behavioral)g(description.)33 b(Although)20 -b(this)g(tutorial)g(does)f(no)g(intend)h(to)f(explain)g(the)g(ar)o -(canes)f(of)118 2994 y Ff(VHDL)c Fk(pr)o(ogramming,)f(it's)i(worth)f -(noting)h(some)f(inter)o(esting)f(points:)187 3118 y(1.)27 -b(notice)14 b(that)g(the)f(entity)h(name,)f Fe(addaccu)p -Fk(,)i(identi\002es)f(the)g(cir)o(cuit;)187 3242 y(2.)27 -b(examine)14 b(the)h(cir)o(cuit)g(interface.)20 b(Y)-5 -b(ou)16 b(can)f(r)o(ecognize)e(the)i(terminals)h(of)g(the)f(pr)o -(evious)h(pictur)o(e,)f(plus)256 3322 y(4)j(special)g(terminals,)h -(known)g(as)g(supply)g(terminals.)30 b(The)18 b(supply)i(terminals)e -(ar)o(e)f(needed)g(for)i(the)256 3401 y(last)13 b(stage)f(of)i(the)e -(design,)g(as)h(the)f(original)h(behavioral)f(description)g(must)i(be)d -(matched)h(with)h(an)f(\224ex-)256 3481 y(tracted\224)j(behavior)l(.)23 -b(If)16 b(this)h(does)f(not)h(make)e(immediate)f(sense)j(to)f(you,)h -(do)f(not)h(panic,)f(everything)256 3561 y(will)f(be)e(clear)f(in)i(a)g -(moment;)187 3685 y(3.)27 b(take)14 b(a)h(look)g(to)h(the)e(functional) -i(ar)o(chitectur)o(e)e(of)h Fe(addaccu)p Fk(.)22 b(When)15 -b(examining)f(it,)h(pay)g(attention)g(to)256 3764 y(the)k -Fe(reg)p 454 3764 17 3 v 20 w(bit)34 b(register)21 b -Fk(names)d(of)h(the)g(accumulator)f Fe(reg)p Fk(,)i(as)f(they)f(will)h -(be)f(used)h(later)f(in)h(the)256 3844 y(validation)c(stage;)1285 -4081 y(5)p eop -%%Page: 6 6 -6 5 bop 187 349 a Fk(4.)27 b(r)o(ead)14 b(car)o(efully)g(the)g -(functional)i(description.)k(W)m(ith)15 b(a)f(little)h(work,)g(you)g -(can)f(r)o(ecognize)f(the)h(descrip-)256 428 y(tion)g(of)f(the)f -(multiplexer)l(,)g(the)g(equations)h(of)h(the)e(adder)l(,)f(and)i(the)f -(accumulator)l(.)k(It)c(is)h(very)f(important)256 508 -y(to)19 b(notice)f(that)g(the)g(functional)h(description)f(of)h(the)f -(cir)o(cuit)g(assumes)h(that)f(edge-trigger)o(ed)e(latches)256 -588 y(ar)o(e)d(used.)201 705 y(Once)j(you)g(have)h(car)o(efully)f -(examined)f(this)i(\002le,)g(close)g(it)f(and)h(get)e(back)h(to)h(the)f -(shell)h(pr)o(ompt,)g(for)h(the)118 785 y Ff(VHDL)c Fk(compilation)g -(stage.)118 961 y Fa(5.1)67 b(Behavior)16 b(compilation)118 -1080 y Fk(Once)d(the)g(behavioral)g(description)h(of)h(the)f(cir)o -(cuit)f(is)h(written,)g(it)g(is)g(time)g(for)g Ff(VHDL)g -Fk(compilation.)201 1159 y(Y)-5 b(ou)14 b(ar)o(e)f(now)h(r)o(eady)e(to) -i(compile)f Fe(addaccu.vbe)p Fk(.)20 b(As)14 b(we)f(do)h(not)g(have)f -(written)g(simulation)i(patterns)118 1239 y(yet,)e(the)h(only)g(thing)g -(we)g(can)f(do)h(is)g(to)g(test)g(the)g(syntax)f(of)i(the)e(\002le)h -(we)g(have)f(just)i(edited.)201 1319 y(At)f(the)g(shell)g(pr)o(ompt)g -(level,)f(please)h(type:)p 118 1374 2351 3 v 118 1441 -3 68 v 137 1419 a Fd(\230fred/addac)o(cu)22 b(\045-\))j(asimut)f(-b)i -(-c)g(addaccu)p 2466 1441 V 118 1443 2351 3 v 2467 1454 -13 72 v 129 1454 2351 13 v 201 1614 a Fk(This)21 b(command)f(instructs) -h Fe(asimut)h Fk(to)f(compile)f(the)g(behavioral)f(\002le)i -Fe(addaccu.vbe)p Fk(.)39 b(Option)21 b Fe(-b)118 1693 -y Fk(means)14 b(behavioral)f(description,)h(and)f Fe(-c)h -Fk(means)g(compilation)g(only)-6 b(,)14 b(i.e)f(no)i(simulation.)p -297 1885 1982 3 v 297 3286 3 1402 v 347 1958 a Fc(\230fred/addaccu)26 -b(\045-\))e(asimut)h(-b)f(-c)f(addaccu)649 2064 y(@)186 -b(@@@@)24 b(@)117 b(@)651 b(@@@@@@@@@@)649 2117 y(@)163 -b(@)93 b(@@)h(@@@)628 b(@)70 b(@@)g(@)626 2171 y(@@@)117 -b(@@)f(@)h(@)628 b(@)93 b(@@)g(@)626 2224 y(@@@)117 b(@@@)326 -b(@@@)24 b(@@)g(@@@)70 b(@@@)47 b(@@@@)164 b(@@)602 2277 -y(@)47 b(@@)117 b(@@@@)g(@@@@)94 b(@@@)24 b(@@)47 b(@@)70 -b(@@)94 b(@@)163 b(@@)602 2330 y(@)47 b(@@)163 b(@@@@)118 -b(@@)93 b(@@)47 b(@@)g(@@)70 b(@@)94 b(@@)163 b(@@)579 -2383 y(@)93 b(@@)187 b(@@@)94 b(@@)f(@@)47 b(@@)g(@@)70 -b(@@)94 b(@@)163 b(@@)579 2436 y(@@@@@@@)72 b(@)139 b(@@)71 -b(@@)93 b(@@)47 b(@@)g(@@)70 b(@@)94 b(@@)163 b(@@)556 -2489 y(@)140 b(@@)47 b(@@)116 b(@@)71 b(@@)93 b(@@)47 -b(@@)g(@@)70 b(@@)94 b(@@)163 b(@@)556 2543 y(@)140 b(@@)47 -b(@@@)93 b(@)h(@@)f(@@)47 b(@@)g(@@)70 b(@@)g(@@@)164 -b(@@)509 2596 y(@@@@)94 b(@@@@)25 b(@)46 b(@@@@)71 b(@@@@@@)25 -b(@@@@)f(@@@)g(@@@)70 b(@@@@)48 b(@@)93 b(@@@@@@)1091 -2702 y(A)23 b(SIMUlation)j(Tool)742 2808 y(Alliance)f(CAD)f(System)h -(3.2,)210 b(asimut)25 b(v2.01)742 2861 y(Copyright)g(\(c\))f -(1991-1997,)165 b(ASIM/LIP6/UPMC)742 2914 y(E-mail)25 -b(support:)g(alliance-support@asi)q(m.li)q(p6.f)q(r)533 -3021 y(Paris,)f(France,)h(Europe,)g(Earth,)g(Solar)g(system,)f(Milky)h -(Way,)f(...)347 3074 y(Initializing)i(...)347 3127 y(Searching)f -(addaccu)g(...)347 3180 y(BEH)f(:)f(Compiling)j(addaccu.vbe)g -(\(Behaviour\))g(...)347 3233 y(Making)e(GEX)g(...)p -2277 3286 V 297 3288 1982 3 v 2278 3311 24 1406 v 319 -3311 1982 24 v 592 3526 a Fk(Figur)o(e)13 b(3:)k Fe(Asimut)e -Fk(compiling)f(the)g(behavioral)f(speci\002cations.)118 -3717 y Fa(5.2)67 b(Behavioral)17 b(simulation)f(and)g(validation)118 -3836 y Fk(A)11 b(behavioral)f(description)h(without)h(simulation)g -(patterns)f(is)g(useless.)17 b(In)11 b(or)o(der)f(to)h(see)g(if)g(the)g -(behavior)f(you)118 3915 y(have)k(just)h(written)f(is)h(functionally)g -(corr)o(ect,)e(you)h(must)h(write)f(simulation)h(patterns)g(and)f(use)g -(the)g Fe(asimut)1285 4081 y Fk(6)p eop -%%Page: 7 7 -7 6 bop 118 349 a Fk(simulator)15 b(function.)201 428 -y(Simulation)i(patterns)g(ar)o(e)f(contained)f(in)i(a)g(plain)f(text)g -(\002le,)h Fe(addaccu.pat)p Fk(.)28 b(For)16 b(mor)o(e)g(informations) -118 508 y(about)e(the)g Fe(pat)g Fk(format)g(you)g(can)g(r)o(ead)f(the) -g(appr)o(opriate)h(on-line)h(manual)e(\227)i Fe(man)34 -b(5)f(pat)15 b Fk(\227)f(or)g(r)o(ead)f(the)118 588 y(printed)h -(documentation.)201 667 y(T)-5 b(o)14 b(get)f(acquainted)g(with)h -Fe(addaccu.pat)p Fk(,)i(please)e(issue)g(the)g(following)h(command:)p -118 722 2351 3 v 118 792 3 70 v 137 768 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(vi)h(addaccu.pat)p 2466 792 V 118 794 2351 -3 v 2467 805 13 74 v 129 805 2351 13 v 201 964 a Fk(Ther)o(e)16 -b(ar)o(e)g(several)g(inter)o(esting)h(things)g(her)o(e.)25 -b(First,)18 b(you)f(can)f(r)o(ecognize)f(the)i(cir)o(cuit)f(interface)g -(again.)118 1044 y(Second,)g(you)h(can)f(see)g(that)g(output)i -(terminals)e(ar)o(e)g(now)g(located)g(at)g(the)g(end)g(of)h(the)f -(interface.)24 b(Or)o(dering)118 1124 y(terminals)11 -b(is)h(very)f(important)h(for)g Fe(pat)g Fk(\002les.)17 -b(The)11 b(or)o(der)f(you)i(use)g(to)g(specify)f(terminals)h(gr)o -(eatly)e(in\003uences)118 1204 y(the)22 b(way)f(you)h(will)g(have)f(to) -h(write)f(simulation)i(patterns.)41 b(It)21 b(is)h(important)g(to)g -(notice)g(that)f(simulation)118 1283 y(patterns)13 b(contain)f(both)h -(input)h(and)e(output)i(values.)j(The)12 b(behavior)g(must)h(be)f -(checked)e(using)k(these)e(values.)118 1363 y(Comments)i(ar)o(e)f(pr)o -(e\002xed)g(by)g(a)h Fe(#)p Fk(,)g(and)f(ar)o(e)g(of)i(much)f(inter)o -(est)f(her)o(e.)201 1443 y(Once)20 b(you)h(have)f(understood)h(the)g -(structur)o(e)f(of)h(this)h(\002le,)g(you)f(ar)o(e)f(able)f(to)i -(simulate)g(the)f(pr)o(evious)118 1522 y(behavioral)13 -b(description.)201 1602 y(In)h(or)o(der)f(to)h(simulate,)g(please)f -(type:)p 118 1657 2351 3 v 118 1726 3 70 v 137 1703 a -Fd(\230fred/addac)o(cu)22 b(\045-\))j(asimut)f(-b)i(addaccu)d(addaccu)h -(specificati)o(on)o(s)p 2466 1726 V 118 1728 2351 3 v -2467 1740 13 74 v 129 1740 2351 13 v 132 1813 a Fk(to)14 -b(obtain:)1285 4081 y(7)p eop -%%Page: 8 8 -8 7 bop 297 401 1982 3 v 297 2493 3 2093 v 347 474 a -Fc(\230fred/addaccu)26 b(\045-\))e(asimut)h(-b)f(addaccu)h(addaccu)g -(specifications)649 580 y(@)186 b(@@@@)24 b(@)117 b(@)651 -b(@@@@@@@@@@)649 633 y(@)163 b(@)93 b(@@)h(@@@)628 b(@)70 -b(@@)g(@)626 686 y(@@@)117 b(@@)f(@)h(@)628 b(@)93 b(@@)g(@)626 -739 y(@@@)117 b(@@@)326 b(@@@)24 b(@@)g(@@@)70 b(@@@)47 -b(@@@@)164 b(@@)602 792 y(@)47 b(@@)117 b(@@@@)g(@@@@)94 -b(@@@)24 b(@@)47 b(@@)70 b(@@)94 b(@@)163 b(@@)602 846 -y(@)47 b(@@)163 b(@@@@)118 b(@@)93 b(@@)47 b(@@)g(@@)70 -b(@@)94 b(@@)163 b(@@)579 899 y(@)93 b(@@)187 b(@@@)94 -b(@@)f(@@)47 b(@@)g(@@)70 b(@@)94 b(@@)163 b(@@)579 952 -y(@@@@@@@)72 b(@)139 b(@@)71 b(@@)93 b(@@)47 b(@@)g(@@)70 -b(@@)94 b(@@)163 b(@@)556 1005 y(@)140 b(@@)47 b(@@)116 -b(@@)71 b(@@)93 b(@@)47 b(@@)g(@@)70 b(@@)94 b(@@)163 -b(@@)556 1058 y(@)140 b(@@)47 b(@@@)93 b(@)h(@@)f(@@)47 -b(@@)g(@@)70 b(@@)g(@@@)164 b(@@)509 1111 y(@@@@)94 b(@@@@)25 -b(@)46 b(@@@@)71 b(@@@@@@)25 b(@@@@)f(@@@)g(@@@)70 b(@@@@)48 -b(@@)93 b(@@@@@@)1091 1218 y(A)23 b(SIMUlation)j(Tool)742 -1377 y(Alliance)f(CAD)f(System)h(3.2,)210 b(asimut)25 -b(v2.01)742 1430 y(Copyright)g(\(c\))f(1991-1997,)165 -b(ASIM/LIP6/UPMC)742 1483 y(E-mail)25 b(support:)g -(alliance-support@asi)q(m.li)q(p6.f)q(r)533 1589 y(Paris,)f(France,)h -(Europe,)g(Earth,)g(Solar)g(system,)f(Milky)h(Way,)f(...)347 -1643 y(Initializing)i(...)347 1696 y(Searching)f(addaccu)g(...)347 -1749 y(BEH)f(:)f(Compiling)j(addaccu.vbe)g(\(Behaviour\))g(...)347 -1802 y(Making)e(GEX)g(...)347 1908 y(Searching)h(pattern)g(file)f(:)g -(addaccu)h(...)347 1961 y(Restoring)g(...)347 2068 y(Linking)g(...)347 -2121 y(###-----)g(processing)h(pattern)f(0)e(-----###)347 -2174 y(###-----)i(processing)h(pattern)f(1)e(-----###)347 -2227 y(###-----)i(processing)h(pattern)f(2)e(-----###)347 -2280 y(###-----)i(processing)h(pattern)f(3)e(-----###)347 -2333 y(###-----)i(processing)h(pattern)f(4)e(-----###)347 -2386 y(###-----)i(processing)h(pattern)f(5)e(-----###)347 -2440 y(###-----)i(processing)h(pattern)f(6)e(-----###)p -2277 2493 V 297 2495 1982 3 v 2278 2517 24 2097 v 319 -2517 1982 24 v 372 2725 a Fk(Figur)o(e)13 b(4:)k Fe(Asimut)e -Fk(checking)e(the)g(behavior)h(with)g(a)g(few)g(functionnal)h(test)e -(vectors.)201 2887 y(Feel)h(fr)o(ee)g(to)h(add)g(new)g(simulation)h -(vectors,)f(as)g(it's)h(a)e(very)h(good)g(practice.)k(Y)-5 -b(ou)15 b(can)g(also)g(write)g(obvi-)118 2967 y(ously)g(wr)o(ong)f -(patterns)g(to)g(see)f(how)i Fe(asimut)g Fk(behaves)e(when)h(it)g -(encounters)g(err)o(ors.)118 3177 y Fg(6)80 b(Netlist)18 -b(capture)h(and)g(validation)118 3317 y Fk(Y)-5 b(ou)20 -b(ar)o(e)f(now)i(about)f(to)g(captur)o(e)f(the)h(logical)f(view)h(of)h -Fe(addaccu)p Fk(,)i(commonly)c(known)i(as)f(netlist.)36 -b(The)118 3396 y(design)14 b(methodology)g(pr)o(events)h(the)f -(designer)f(fr)o(om)i(building)g(the)f(entir)o(e)f(netlist)i(in)g(one)f -(shot,)h(including)118 3476 y(pads.)i(VLSI)d(design)f(is)i(based)e(on)h -(hierar)o(chy)f(and)g(incr)o(emental)g(appr)o(oaches.)118 -3653 y Fa(6.1)67 b(Netlist)18 b(capture)118 3772 y Fk(The)c(cir)o(cuit) -f(netlist)h(you)h(have)e(to)h(write)g(will)g(be)f(captur)o(ed)g(in)h -(two)g(steps:)187 3896 y(1.)27 b(captur)o(e)14 b(of)g(the)g(cor)o(e)f -(netlist;)1285 4081 y(8)p eop -%%Page: 9 9 -9 8 bop 187 349 a Fk(2.)27 b(captur)o(e)14 b(of)g(the)g(chip)g -(netlist,)g(linking)g(the)g(cor)o(e)f(with)h(pads.)201 -473 y(The)i(cor)o(e)g(netlist)h(contains)f(standar)o(d-cells)h -(describing)e(the)h(logical)g(functions)i(needed)d(to)h(design)h(the) -118 552 y(adder)l(,)12 b(the)i(multiplexer)f(and)h(the)f(accumulator)l -(,)g(and)h(the)f(internal)h(wir)o(es.)201 632 y(W)-5 -b(e)14 b(do)g(not)g(use)g(a)g(schematic)e(editor)i(for)g(netlist)h -(captur)o(e,)e(but)g(rather)g(a)h(textual)f(appr)o(oach.)p -118 687 2351 3 v 118 754 3 68 v 137 733 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(vi)h(core.c)p 2466 754 V 118 756 2351 3 v -2467 768 13 72 v 129 768 2351 13 v 201 927 a Fk(The)14 -b(cor)o(e)f(netlist)h(is)h(nothing)g(mor)o(e)e(than)h(a)g -Ff(C)g Fk(\002le)g(containing)g(speci\002c)g(function)h(calls)f(for)g -(the)g(cr)o(eation)118 1007 y(of)g(VLSI)f(objects.)j(Notice)d(that)g -(the)g(include)g(\002le)h Fe(genlib.h)h Fk(must)f(systematically)e(be)h -(included)g(at)g(the)g(top)118 1086 y(of)i Ff(genlib)p -Fk('s)f(\002les.)201 1166 y(The)f(description)g(of)h(a)f(netlist)h(in)f -Ff(C)g Fk(is)h(mainly)f(based)f(on)i(the)f Fe(DEF)p 1638 -1166 17 3 v 20 w(LOFIG,)35 b(LOCON)14 b Fk(and)f Fe(LOINS)h -Fk(func-)118 1246 y(tions.)k Fe(DEF)p 371 1246 V 21 w(LOFIG)d -Fk(de\002nes)f(the)f(name)h(of)g(the)g(r)o(esulting)g(netlist)h(view)-5 -b(,)13 b Fe(LOCON)i Fk(instanciates)f(a)g(new)f(termi-)118 -1326 y(nal)i(in)h(the)f(curr)o(ently)g(opened)g(\002gur)o(e,)g(and)g -Fe(LOINS)h Fk(instanciates)g(pr)o(e-existing)f(cells)g(or)h(blocks.)21 -b(For)15 b(mor)o(e)118 1405 y(informations,)g(please)f(r)o(ead)e(the)i -(on-line)h(manual)e(associated)h(with)g(each)f(function.)201 -1485 y(T)-5 b(o)14 b(compile)g(and)f(run)h(the)g Ff(C)f -Fk(\002le,)h(you)g(must)h(use)f(the)g Fe(genlib)h Fk(pr)o(ogram.)201 -1565 y(Y)-5 b(ou)14 b(must)h(specify)f(the)g(input)g(format)g(of)h -(cells)e(that)h(ar)o(e)f(instanciated)g(in)i(the)e Ff(genlib)p -Fk('s)i(code.)201 1644 y(Ther)o(efor)o(e)e(enter)g(the)h(following)h -(command:)p 118 1699 2351 3 v 118 1829 3 130 v 137 1744 -a Fd(\230fred/addac)o(cu)22 b(\045-\))j(setenv)f(MBK_IN_LO)f(vst)137 -1807 y(\230fred/addac)o(cu)f(\045-\))j(setenv)f(MBK_OUT_LO)e(vst)p -2466 1829 V 118 1831 2351 3 v 2467 1842 13 135 v 129 -1842 2351 13 v 201 2002 a Fk(These)14 b Fe(setenv)h Fk(de\002ne)e(the)h -(input)h(and)e(output)i(formats)g(for)f(the)g(speci\002cation)g -(netlist.)201 2081 y Fe(vst)23 b Fk(stands)f(for)h(structural)f -Ff(VHDL)g Fk(description.)42 b(The)22 b(design)f(methodology)h(assumes) -h(that)f(user)118 2161 y(de\002ned)15 b(netlists)h(must)f(use)h -(extension)f Fe(vst)g Fk(as)h(we've)f(alr)o(eady)e(said.)21 -b(The)15 b Fe(al)g Fk(format)g(is)h(mostly)g(used)f(for)118 -2241 y(extracted)d(netlist)i(with)g(speci\002c)g(informations)h(like)f -(capacitances)e(that)i(cannot)f(be)g(coded)g(in)h Ff(VHDL)p -Fk(.)201 2321 y(At)g(last,)g(you)g(can)g(execute)d(the)j(genlib)f(pr)o -(ogram:)p 118 2375 2351 3 v 118 2445 3 70 v 137 2421 -a Fd(\230fred/addac)o(cu)22 b(\045-\))j(genlib)f(-v)i(core)p -2466 2445 V 118 2447 2351 3 v 2467 2458 13 74 v 129 2458 -2351 13 v 132 2531 a Fk(to)14 b(get:)1285 4081 y(9)p -eop -%%Page: 10 10 -10 9 bop 297 401 1982 3 v 297 2332 3 1932 v 347 472 a -Fc(\230fred/addaccu)26 b(\045-\))e(setenv)h(MBK_IN_LO)g(vst)347 -526 y(\230fred/addaccu)h(\045-\))e(setenv)h(MBK_OUT_LO)h(vst)347 -579 y(\230fred/addaccu)g(\045-\))e(setenv)h(MBK_CATA_LIB)h -(/alliance/cells/scr)347 632 y(\230fred/addaccu)g(\045-\))e(genlib)h -(-v)f(core)649 738 y(@@@@)g(@)558 b(@@@@@@)211 b(@)70 -b(@@@)602 791 y(@@)94 b(@@)605 b(@@)233 b(@@@)70 b(@@)579 -844 y(@@)140 b(@)605 b(@@)256 b(@)93 b(@@)556 898 y(@@)303 -b(@@@@@)71 b(@@@)24 b(@@@)140 b(@@)372 b(@@)24 b(@@)556 -951 y(@@)279 b(@)117 b(@)70 b(@@@)g(@)117 b(@@)186 b(@@@@)94 -b(@@@)47 b(@@)556 1004 y(@@)117 b(@@@@@)24 b(@@)117 b(@@)47 -b(@@)93 b(@@)h(@@)233 b(@@)93 b(@@)h(@@)556 1057 y(@@)117 -b(@)23 b(@@)47 b(@@@@@@@@@)i(@@)93 b(@@)h(@@)233 b(@@)93 -b(@@)h(@@)556 1110 y(@@)f(@)47 b(@@)g(@@)210 b(@@)93 -b(@@)h(@@)233 b(@@)93 b(@@)h(@@)579 1163 y(@@)140 b(@@)47 -b(@@)140 b(@)47 b(@@)93 b(@@)h(@@)140 b(@)70 b(@@)93 -b(@@)h(@@)602 1216 y(@@)g(@@)f(@@)h(@@)47 b(@@)93 b(@@)h(@@)116 -b(@)94 b(@@)f(@@@)47 b(@@)649 1269 y(@@@@)187 b(@@@@)71 -b(@@@@)47 b(@@@@)24 b(@@@@@@@@@@)49 b(@@@@@@)25 b(@@@)f(@@)928 -1376 y(Procedural)i(Generation)f(Language)742 1482 y(Alliance)g(CAD)f -(System)h(3.2,)256 b(genlib)25 b(3.3)742 1535 y(Copyright)g(\(c\))f -(1991-1998,)165 b(ASIM/LIP6/UPMC)742 1588 y(E-mail)25 -b(support:)g(alliance-support@asi)q(m.li)q(p6.f)q(r)347 -1695 y(Generating)g(the)f(Makefile)347 1748 y(Compiling,)h(...)347 -1801 y(Current)g(execution)g(environment)347 1854 y(MBK_CATA_LIB)72 -b(:)24 b(/users/soft5/newlab)q(o/So)q(lari)q(s/cel)q(ls/s)q(clib)347 -1907 y(MBK_WORK_LIB)72 b(:)24 b(:)347 1960 y(MBK_IN_LO)141 -b(:)24 b(vst)347 2013 y(MBK_OUT_LO)118 b(:)24 b(vst)347 -2067 y(MBK_IN_PH)141 b(:)24 b(ap)347 2120 y(MBK_OUT_PH)118 -b(:)24 b(ap)347 2173 y(MBK_CATAL_NAME)i(:)e(CATAL)347 -2226 y(Executing)h(...)347 2279 y(Removing)g(tmp)f(files)g(...)p -2277 2332 V 297 2334 1982 3 v 2278 2357 24 1936 v 319 -2357 1982 24 v 717 2565 a Fk(Figur)o(e)14 b(5:)i(Netlist)e(cor)o(e)f -(generation)g(using)i Fe(genlib)p Fk(.)201 2726 y(Y)-5 -b(ou)17 b(can)f(now)h(look)g(in)g(the)f(curr)o(ent)g(dir)o(ectory)f -(for)i(a)f(\002le)h(named)e Fe(core.vst)p Fk(.)27 b(This)17 -b(\002le)g(contains)g(the)118 2806 y(r)o(esulting)d(description)g(of)h -(the)f(cor)o(e.)201 2886 y(The)j Fe(addaccu.c)j Fk(\002le)e(contains)g -(the)f(actual)g(chip)h(netlist.)29 b(Y)-5 b(ou)18 b(can)f(edit)g(it)h -(to)g(see)f(how)h(pads)g(ar)o(e)f(in-)118 2966 y(stanciated.)201 -3045 y(Running)e(the)e(following)j(command:)p 118 3100 -2351 3 v 118 3169 3 70 v 137 3146 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(genlib)f(-v)i(addaccu)p 2466 3169 V 118 3171 -2351 3 v 2467 3183 13 74 v 129 3183 2351 13 v 132 3256 -a Fk(pr)o(oduces:)1272 4081 y(10)p eop -%%Page: 11 11 -11 10 bop 297 401 1982 3 v 297 1642 3 1241 v 347 472 -a Fc(\230fred/addaccu)26 b(\045-\))e(setenv)h(MBK_IN_LO)g(vst)347 -526 y(\230fred/addaccu)h(\045-\))e(setenv)h(MBK_OUT_LO)h(vst)347 -579 y(\230fred/addaccu)g(\045-\))e(setenv)h(MBK_CATA_LIB)h -(/alliance/cells/scr)q(:/al)q(lian)q(ce/c)q(ells)q(/rin)q(g)347 -632 y(\230fred/addaccu)g(\045-\))e(genlib)h(addaccu)649 -738 y(@@@@)f(@)558 b(@@@@@@)211 b(@)70 b(@@@)602 791 -y(@@)94 b(@@)605 b(@@)233 b(@@@)70 b(@@)579 844 y(@@)140 -b(@)605 b(@@)256 b(@)93 b(@@)556 898 y(@@)303 b(@@@@@)71 -b(@@@)24 b(@@@)140 b(@@)372 b(@@)24 b(@@)556 951 y(@@)279 -b(@)117 b(@)70 b(@@@)g(@)117 b(@@)186 b(@@@@)94 b(@@@)47 -b(@@)556 1004 y(@@)117 b(@@@@@)24 b(@@)117 b(@@)47 b(@@)93 -b(@@)h(@@)233 b(@@)93 b(@@)h(@@)556 1057 y(@@)117 b(@)23 -b(@@)47 b(@@@@@@@@@)i(@@)93 b(@@)h(@@)233 b(@@)93 b(@@)h(@@)556 -1110 y(@@)f(@)47 b(@@)g(@@)210 b(@@)93 b(@@)h(@@)233 -b(@@)93 b(@@)h(@@)579 1163 y(@@)140 b(@@)47 b(@@)140 -b(@)47 b(@@)93 b(@@)h(@@)140 b(@)70 b(@@)93 b(@@)h(@@)602 -1216 y(@@)g(@@)f(@@)h(@@)47 b(@@)93 b(@@)h(@@)116 b(@)94 -b(@@)f(@@@)47 b(@@)649 1269 y(@@@@)187 b(@@@@)71 b(@@@@)47 -b(@@@@)24 b(@@@@@@@@@@)49 b(@@@@@@)25 b(@@@)f(@@)928 -1376 y(Procedural)i(Generation)f(Language)742 1482 y(Alliance)g(CAD)f -(System)h(3.2,)256 b(genlib)25 b(3.3)742 1535 y(Copyright)g(\(c\))f -(1991-1998,)165 b(ASIM/LIP6/UPMC)742 1588 y(E-mail)25 -b(support:)g(alliance-support@asi)q(m.li)q(p6.f)q(r)p -2277 1642 V 297 1644 1982 3 v 2278 1666 24 1246 v 319 -1666 1982 24 v 632 1874 a Fk(Figur)o(e)13 b(6:)j(Cor)o(e)e(to)g(pad)g -(netlist)g(generation)f(using)i Fe(genlib)p Fk(.)201 -2036 y(This)g(cr)o(eates)d Fe(addaccu.vst)p Fk(,)k(the)e(r)o(esulting)g -(netlist,)g(in)g(the)g(curr)o(ent)f(dir)o(ectory)-6 b(.)118 -2213 y Fa(6.2)67 b(Simulation)16 b(of)g(the)g(speci\002cation)i -(netlist)118 2332 y Fk(Once)d(the)i(complete)e(netlist)i(has)g(been)e -(captur)o(ed,)h(we)g(can)g(simulate)h(the)f(whole)h(chip)f(with)h(the)f -(pr)o(evious)118 2411 y(simulation)f(patterns.)201 2491 -y(Y)-5 b(ou)14 b(can)g(run)g(asimut)g(by)f(entering)g(the)h(following)h -(command:)p 118 2546 2351 3 v 118 2613 3 68 v 137 2592 -a Fd(\230fred/addac)o(cu)22 b(\045-\))j(asimut)f(addaccu)g(addaccu)f -(schema)p 2466 2613 V 118 2615 2351 3 v 2467 2627 13 -72 v 129 2627 2351 13 v 132 2706 a Fk(It)13 b(pr)o(oduces)h(the)g -(output)h(of)g(Figur)o(e)e(7.)201 2786 y(The)f(\002rst)h -Fe(addaccu)h Fk(stands)e(for)h Fe(addaccu.vst)p Fk(.)19 -b(The)12 b(second)f Fe(addaccu)j Fk(stands)f Fe(addaccu.pat)p -Fk(,)i(the)118 2866 y(pattern)g(\002le)f(with)i(input)g(and)e(output)i -(values.)21 b Fe(schema)16 b Fk(stands)f(for)h Fe(schema.pat)p -Fk(,)h(the)d(generated)f(list)j(of)118 2945 y(patterns.)201 -3025 y(Because)21 b(option)h Fe(-b)g Fk(is)g(not)g(set)g(and)f(because) -g Fe(MBK)p 1373 3025 17 3 v 20 w(IN)p 1459 3025 V 21 -w(LO)g Fk(contains)i Fe(vst)p Fk(,)h Fe(asimut)e Fk(simulates)h(the)118 -3105 y(speci\002cation)14 b(netlist)h(we)e(have)h(captur)o(ed)e(with)j -Fe(genlib)p Fk(.)201 3185 y(Err)o(ors)f(during)f(this)h(execution)f -(mean)f(that)i(something)f(went)h(wr)o(ong)f(between)f(your)i(curr)o -(ent)f(position)118 3264 y(in)h(the)g(design)g(\003ow)f(and)h(the)g -(behavioral)f(simulation)i(stage.)1273 4081 y(1)m(1)p -eop -%%Page: 12 12 -12 11 bop 297 401 1982 3 v 297 3395 3 2995 v 347 472 -a Fc(\230fred/addaccu)26 b(\045-\))e(setenv)h(MBK_IN_LO)g(vst)347 -526 y(\230fred/addaccu)h(\045-\))e(setenv)h(MBK_CATA_LIB)h -(/alliance/cells/scr)q(:/al)q(lian)q(ce/c)q(ells)q(/rin)q(gxx)347 -579 y(\230fred/addaccu)g(\045-\))e(asimut)h(addaccu)g(addaccu)g(schema) -347 632 y(Warning)g(2)e(:)h(consistency)i(checks)e(will)h(be)e -(disabled)649 738 y(@)186 b(@@@@)24 b(@)117 b(@)651 b(@@@@@@@@@@)649 -791 y(@)163 b(@)93 b(@@)h(@@@)628 b(@)70 b(@@)g(@)626 -844 y(@@@)117 b(@@)f(@)h(@)628 b(@)93 b(@@)g(@)626 898 -y(@@@)117 b(@@@)326 b(@@@)24 b(@@)g(@@@)70 b(@@@)47 b(@@@@)164 -b(@@)602 951 y(@)47 b(@@)117 b(@@@@)g(@@@@)94 b(@@@)24 -b(@@)47 b(@@)70 b(@@)94 b(@@)163 b(@@)602 1004 y(@)47 -b(@@)163 b(@@@@)118 b(@@)93 b(@@)47 b(@@)g(@@)70 b(@@)94 -b(@@)163 b(@@)579 1057 y(@)93 b(@@)187 b(@@@)94 b(@@)f(@@)47 -b(@@)g(@@)70 b(@@)94 b(@@)163 b(@@)579 1110 y(@@@@@@@)72 -b(@)139 b(@@)71 b(@@)93 b(@@)47 b(@@)g(@@)70 b(@@)94 -b(@@)163 b(@@)556 1163 y(@)140 b(@@)47 b(@@)116 b(@@)71 -b(@@)93 b(@@)47 b(@@)g(@@)70 b(@@)94 b(@@)163 b(@@)556 -1216 y(@)140 b(@@)47 b(@@@)93 b(@)h(@@)f(@@)47 b(@@)g(@@)70 -b(@@)g(@@@)164 b(@@)509 1269 y(@@@@)94 b(@@@@)25 b(@)46 -b(@@@@)71 b(@@@@@@)25 b(@@@@)f(@@@)g(@@@)70 b(@@@@)48 -b(@@)93 b(@@@@@@)1091 1376 y(A)23 b(SIMUlation)j(Tool)742 -1482 y(Alliance)f(CAD)f(System)h(3.2,)210 b(asimut)25 -b(v2.01)742 1535 y(Copyright)g(\(c\))f(1991-1997,)165 -b(ASIM/LIP6/UPMC)742 1588 y(E-mail)25 b(support:)g -(alliance-support@asi)q(m.li)q(p6.f)q(r)533 1695 y(Paris,)f(France,)h -(Europe,)g(Earth,)g(Solar)g(system,)f(Milky)h(Way,)f(...)347 -1748 y(Initializing)i(...)347 1801 y(Searching)f(addaccu)g(...)347 -1854 y(Compiling)g(addaccu)g(\(Structural\))h(...)347 -1960 y(Flattening)f(the)f(root)h(figure)f(...)347 2067 -y(Searching)h(a2_y)f(...)347 2120 y(BEH)g(:)f(Compiling)j(a2_y.vbe)f -(\(Behaviour\))h(...)347 2173 y(Making)e(GEX)g(...)347 -2226 y(.)347 2279 y(.)347 2332 y(.)347 2385 y(Searching)h(pi_sp)g(...) -347 2438 y(BEH)f(:)f(Compiling)j(pi_sp.vbe)f(\(Behaviour\))h(...)347 -2492 y(Making)e(GEX)g(...)347 2598 y(Searching)h(pck_sp)g(...)347 -2651 y(BEH)f(:)f(Compiling)j(pck_sp.vbe)f(\(Behaviour\))h(...)347 -2704 y(Making)e(GEX)g(...)347 2810 y(Searching)h(pattern)g(file)f(:)g -(addaccu)h(...)347 2864 y(Restoring)g(...)347 2970 y(Linking)g(...)347 -3023 y(###-----)g(processing)h(pattern)f(0)e(-----###)347 -3076 y(###-----)i(processing)h(pattern)f(1)e(-----###)347 -3129 y(###-----)i(processing)h(pattern)f(2)e(-----###)347 -3182 y(###-----)i(processing)h(pattern)f(3)e(-----###)347 -3235 y(###-----)i(processing)h(pattern)f(4)e(-----###)347 -3289 y(###-----)i(processing)h(pattern)f(5)e(-----###)347 -3342 y(###-----)i(processing)h(pattern)f(6)e(-----###)p -2277 3395 V 297 3397 1982 3 v 2278 3419 24 2999 v 319 -3419 1982 24 v 689 3627 a Fk(Figur)o(e)13 b(7:)k Fe(Asimut)e -Fk(checking)e(the)g(netlist)h(description.)1272 4081 -y(12)p eop -%%Page: 13 13 -13 12 bop 118 351 a Fg(7)80 b(Core)19 b(layout)g(generation)118 -490 y Fk(Incr)o(emental)13 b(design)h(r)o(elies)g(on)g(hierar)o(chy)-6 -b(.)17 b(Befor)o(e)d(you)h(design)f(the)g(cor)o(e)f(to)i(pads)f -(netlist,)h(the)f(cir)o(cuit)g(cor)o(e)118 570 y(must)h(be)e -(successfully)i(built.)i(In)d(this)g(example,)e(the)i(layout)g -(generation)f(r)o(elies)g(on:)187 694 y(1.)27 b(standar)o(d-cells)14 -b(placement)f(\(automatic)h(or)f(manual\);)187 818 y(2.)27 -b(automatic)14 b(r)o(outing)g(of)h(standar)o(d-cells.)201 -942 y Fe(scr)k Fk(is)h(a)e(place)g(and)g(r)o(oute)h(tool)g(that)g(can)f -(pr)o(oduce)g(automatically)g(the)h(layout)g(view)f(fr)o(om)h(a)g -(netlist)118 1021 y(description.)201 1101 y(As)11 b(stated)g(in)g(the)f -(pr)o(evious)i(section,)f(befor)o(e)f(you)h(run)f Fe(scr)p -Fk(,)i(you)f(must)h(specify)e(envir)o(onment)h(variables.)118 -1181 y(Needless)i(to)h(say)g(that)g(these)g(variables)f(will)h(deal)f -(with)h(physical)g(aspects)g(of)h(the)e(cir)o(cuit.)201 -1260 y(First,)18 b(you)f(must)h(specify)f(the)f(input)i(layout)f -(format)g(you)h(use)f(for)g(the)g(standar)o(d-cells.)26 -b(The)16 b Ff(Alliance)118 1340 y Fk(distribution)f(only)f(contains)g -Fe(ap)h Fk(symbolic)e(layout)h(\002les)h(so)f(you)g(must)h(issue)g(the) -e(following)j(command:)p 118 1395 2351 3 v 118 1463 3 -69 v 137 1440 a Fd(\230fred/addac)o(cu)22 b(\045-\))j(setenv)f -(MBK_IN_PH)f(ap)p 2466 1463 V 118 1465 2351 3 v 2467 -1476 13 73 v 129 1476 2351 13 v 201 1636 a Fk(This)d(command)e -(instructs)i Fe(scr)g Fk(to)f(use)h(the)e Fe(ap)i Fk(cell)e(layout)i -(format)f(as)g(input.)34 b(Remember)16 b(that)k(the)118 -1715 y(variable)13 b Fe(MBK)p 432 1715 17 3 v 20 w(CATA)p -584 1715 V 21 w(LIB)i Fk(is)f(still)h(set,)e(so)i Ff(Alliance)f -Fk(tools)h(know)f(wher)o(e)f(to)h(\002nd)g(cells.)201 -1795 y(Second,)f(you)h(must)h(accor)o(dingly)e(specify)g(the)h(output)h -(layout)f(format.)j(Again,)d(the)f(format)h(is)h Fe(ap)p -Fk(,)f(so:)p 118 1850 2351 3 v 118 1918 3 69 v 137 1895 -a Fd(\230fred/addac)o(cu)22 b(\045-\))j(setenv)f(MBK_OUT_PH)e(ap)p -2466 1918 V 118 1920 2351 3 v 2467 1931 13 73 v 129 1931 -2351 13 v 201 2091 a Fk(This)15 b(command)e(instructs)h -Fe(scr)h Fk(to)f(use)g Fe(ap)g Fk(r)o(epr)o(esentation)g(of)g(cells)g -(as)g(an)f(output.)201 2170 y(Everything)h(is)g(now)g(r)o(eady)f(for)h -(the)g(place)f(and)g(r)o(oute)h(phase.)j(The)d(command)f(is:)p -118 2225 2351 3 v 118 2293 3 69 v 137 2270 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(scr)g(-p)h(-r)g(core)f(core)p 2466 2293 V -118 2295 2351 3 v 2467 2307 13 73 v 129 2307 2351 13 -v 201 2466 a Fk(Option)14 b Fe(-p)h Fk(means)e(automatic)h(placement,)e -(and)i(option)g Fe(-r)h Fk(means)e(automatic)h(r)o(outing.)201 -2539 y(Once)f Fe(scr)h Fk(has)g(been)f(executed,)f(the)h(cor)o(e)g -(layout)h(is)h(completed.)1272 4081 y(13)p eop -%%Page: 14 14 -14 13 bop 297 401 1982 3 v 297 2704 3 2304 v 347 472 -a Fc(\230fred/addaccu)26 b(\045-\))e(setenv)h(MBK_IN_LO)g(vst)347 -526 y(\230fred/addaccu)h(\045-\))e(setenv)h(MBK_IN_PH)g(ap)347 -579 y(\230fred/addaccu)h(\045-\))e(setenv)h(MBK_OUT_PH)h(ap)347 -632 y(\230fred/addaccu)g(\045-\))e(setenv)h(MBK_CATA_LIB)h -(/alliance/cells/scr)347 685 y(\230fred/addaccu)g(\045-\))e(scr)g(-p)g -(-r)g(core)951 791 y(@@@@)g(@)140 b(@@@@)24 b(@)g(@@@@@@@)928 -844 y(@)93 b(@@)h(@@)f(@@)70 b(@@)g(@@)905 898 y(@@)116 -b(@)70 b(@@)140 b(@)70 b(@@)94 b(@@)905 951 y(@@@)163 -b(@@)g(@)70 b(@@)94 b(@@)928 1004 y(@@@@)117 b(@@)256 -b(@@)70 b(@@)974 1057 y(@@@@)h(@@)256 b(@@@@@)1021 1110 -y(@@@)47 b(@@)256 b(@@)47 b(@@)905 1163 y(@)139 b(@@)24 -b(@@)256 b(@@)70 b(@@)905 1216 y(@@)116 b(@@)47 b(@@)140 -b(@)70 b(@@)g(@@)905 1269 y(@@@)93 b(@)h(@@)f(@@)70 b(@@)94 -b(@@)905 1323 y(@)46 b(@@@@)164 b(@@@@)71 b(@@@@@)g(@@@)1044 -1429 y(Standard)25 b(Cell)g(router)742 1535 y(Alliance)g(CAD)f(System)h -(3.2,)326 b(scr)24 b(5.2)742 1588 y(Copyright)h(\(c\))f(1991-1997,)165 -b(ASIM/LIP6/UPMC)742 1641 y(E-mail)25 b(support:)g -(alliance-support@asi)q(m.li)q(p6.f)q(r)347 1748 y(Loading)g(logical)g -(view)f(:)f(core)347 1801 y(Placing)i(logical)g(view)f(:)f(core)347 -1854 y(Loading)i(SCP)f(data)g(base)g(...)347 1907 y(Generating)h -(initial)g(placement)h(...)347 1960 y(25)d(cells)i(37)f(nets)g(in)g(2)f -(rows)347 2013 y(Placement)i(in)f(process)h(of)f(treatment)h(:)70 -b(100\045)347 2067 y(49\045)24 b(saved)g(in)47 b(0.3)24 -b(s)347 2120 y(Saving)g(placement)72 b(100\045)347 2173 -y(Checking)25 b(consistency)h(between)f(logical)g(and)f(physical)h -(views)347 2226 y(Loading)g(SCR)f(data)g(base)g(...)347 -2279 y(Deleting)h(MBK)f(data)g(base)g(...)347 2332 y(Global)g(routing)h -(...)347 2385 y(Channel)g(routing)g(...)347 2438 y(|_____Routing)h -(Channel)f(:)f(scr_p2)347 2492 y(|_____Routing)i(Channel)f(:)f(scr_p4) -347 2545 y(|_____Routing)i(Channel)f(:)f(scr_p6)347 2598 -y(Making)g(vertical)i(power)e(and)g(ground)h(wires)347 -2651 y(Saving)f(layout)h(:)f(core)p 2277 2704 V 297 2706 -1982 3 v 2278 2729 24 2308 v 319 2729 1982 24 v 621 2937 -a Fk(Figur)o(e)14 b(8:)i(Placing)e(and)g(Routing)g(the)g(cor)o(e)f -(netlist)h(with)g Fe(scr)p Fk(.)201 3091 y(Note)g(that)g -Fe(scr)g Fk(knows)h(how)f(to)g(place)f(and)h(r)o(oute)g(only)g(cells)f -(having)h(a)g(standar)o(d)f(cell)g(topology)-6 b(.)118 -3298 y Fg(8)80 b(Core)19 b(layout)g(veri\002cation)118 -3437 y Fk(Routers)c(may)e(have)g(bugs,)i(and)e(pr)o(oduce)h(shorts)h -(or)f(open)g(cir)o(cuits.)k(So)c(serious)h(checks)e(must)i(be)e(made)g -(on)118 3517 y(the)h(pr)o(oduced)f(layout.)k(T)-5 b(o)14 -b(check)f(the)g(layout,)h(we)g(use)g(two)g Ff(Alliance)g -Fk(tools,)h Fe(lynx)f Fk(and)g Fe(lvx)p Fk(.)201 3597 -y Fe(lynx)f Fk(is)f(the)f Ff(Alliance)h Fk(netlist)g(extractor)l(.)j -(Fr)o(om)c(a)g(physical)h(layout)g(it)g(extracts)e(a)i(netlist)g(r)o -(epr)o(esentation)118 3676 y(of)g(the)f(cir)o(cuit,)h(in)f(terms)h(of)g -(blocks,)f(gates)g(or)g(transistors.)18 b(In)11 b(our)h(case,)f(we)g -(want)h(to)f(extract)f(the)h(cor)o(e)g(netlist)118 3756 -y(at)j(the)f(gate)g(level.)201 3836 y Fe(lvx)k Fk(is)g(the)f -Ff(Alliance)g Fk(netlist)h(comparator)l(.)23 b(Its)17 -b(main)f(function)h(is)g(to)f(verify)h(that)f(an)g(extracted)e(netlist) -118 3915 y(corr)o(esponds)g(to)h(the)e(speci\002cation)h(netlist.)1272 -4081 y(14)p eop -%%Page: 15 15 -15 14 bop 201 349 a Fk(Hence,)11 b(the)h(design)h(methodology)f(is)h -(quite)f(simple.)17 b(W)-5 b(e)12 b(must)h(extract)d(the)i(cor)o(e)g -Fe(core.ap)i Fk(with)e Fe(lynx)118 428 y Fk(and)i(check)e(the)i(r)o -(esulting)g(netlist)g(with)h(the)e(original)h Fe(addaccu.vst)i -Fk(\002le)e(using)h Fe(lvx)p Fk(.)118 606 y Fa(8.1)67 -b(Extraction)16 b(of)h(the)f(core)h(netlist)118 724 y -Fk(Now)-5 b(,)14 b(back)f(to)h(practice.)h(Y)-5 b(ou)14 -b(have)g(to)g(extract)e(the)i(layout)g(using)h Fe(lynx)p -Fk(.)i(Remember)12 b(two)i(things:)187 848 y(1.)27 b -Ff(Alliance)15 b Fk(tools)g(deeply)e(r)o(ely)g(on)i(appr)o(opriate)f -(envir)o(onment)g(variables.)j(For)d(instance,)g(you)g(have)g(to)256 -928 y(specify)g(the)g(format)g(the)g(extracted)d(netlist)j(will)h(be)e -(generated)e(with.)187 1052 y(2.)27 b(in)15 b(the)e(usual)i(design)f -(\003ow)-5 b(,)13 b(extracted)f(netlist)i(\002les)h(ar)o(e)d(written)i -(in)g Fe(al)h Fk(format.)201 1176 y(So)f(you)g(must:)p -118 1231 2351 3 v 118 1298 3 67 v 137 1275 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(setenv)f(MBK_OUT_LO)e(al)p 2466 1298 V 118 -1300 2351 3 v 2467 1311 13 72 v 129 1311 2351 13 v 132 -1391 a Fk(to)14 b(generate)e(a)h(extracted)f(netlist)i(\002le)g(called) -f Fe(core.al)p Fk(.)201 1470 y(The)h(actual)f(execution)g(of)h(lynx)g -(is)g(quite)g(easy)-6 b(.)16 b(Just)g(type:)p 118 1525 -2351 3 v 118 1593 3 69 v 137 1570 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(lynx)g(-v)h(core)p 2466 1593 V 118 1595 2351 -3 v 2467 1607 13 73 v 129 1607 2351 13 v 132 1680 a Fk(and)13 -b(you)i(get)e(your)h(extracted)d(netlist)k(in)f(terms)f(of)i(inter)o -(connected)d(standar)o(d)i(cells.)1272 4081 y(15)p eop -%%Page: 16 16 -16 15 bop 297 401 1982 3 v 297 3230 3 2830 v 347 472 -a Fc(\230fred/addaccu)26 b(\045-\))e(setenv)h(MBK_IN_PH)g(ap)347 -526 y(\230fred/addaccu)h(\045-\))e(setenv)h(MBK_OUT_LO)h(al)347 -579 y(\230fred/addaccu)g(\045-\))e(setenv)h(RDS_TECHNO_NAME)i -(/alliance/etc/cmos_5)q(.rds)347 632 y(\230fred/addaccu)f(\045-\))e -(setenv)h(MBK_CATA_LIB)h(/alliance/cells/scr)q(:/al)q(lian)q(ce/c)q -(ells)q(/rin)q(g)347 685 y(\230fred/addaccu)g(\045-\))e(lynx)g(-v)g -(core)g(core)788 791 y(@@@@@@)835 844 y(@@)835 898 y(@@)835 -951 y(@@)186 b(@@@@@)25 b(@@@)f(@@@)g(@@@)93 b(@@@@)48 -b(@@@)835 1004 y(@@)210 b(@@)93 b(@)70 b(@@@)g(@)94 b(@@)f(@)835 -1057 y(@@)233 b(@@)70 b(@)g(@@)93 b(@@)h(@@)47 b(@)835 -1110 y(@@)233 b(@@)47 b(@)93 b(@@)g(@@)117 b(@@@)835 -1163 y(@@)256 b(@@)24 b(@)93 b(@@)g(@@)117 b(@@@)835 -1216 y(@@)140 b(@)93 b(@@@)117 b(@@)93 b(@@)h(@)47 b(@@)835 -1269 y(@@)117 b(@)139 b(@@)117 b(@@)93 b(@@)71 b(@)93 -b(@@)788 1323 y(@@@@@@@@@@)49 b(@@)e(@)117 b(@@@@)47 -b(@@@@)24 b(@@@)48 b(@@@@)1067 1376 y(@@)f(@)1091 1429 -y(@@@)1091 1535 y(Netlist)25 b(extractor)765 1641 y(Alliance)g(CAD)f -(System)h(3.2,)280 b(lynx)24 b(1.16)765 1695 y(Copyright)i(\(c\))e -(1993-1997,)165 b(ASIM/LIP6/UPMC)765 1748 y(E-mail)25 -b(support:)g(alliance-support@as)q(im.l)q(ip6.)q(fr)533 -1960 y(--->)f(Extracts)h(symbolic)g(figure)g(core)719 -2067 y(--->)f(Translate)h(Mbk)f(->)g(Rds)719 2120 y(--->)g(Build)g -(windows)719 2173 y(<---)g(108)719 2279 y(--->)g(Rectangles)95 -b(:)24 b(894)719 2332 y(--->)g(Figure)h(size)70 b(:)24 -b(\()93 b(-50,)71 b(-100)24 b(\))1207 2385 y(\()47 b(55250,)g(16600)25 -b(\))719 2492 y(--->)f(Cut)g(transistors)719 2545 y(<---)g(0)719 -2598 y(--->)g(Build)g(equis)719 2651 y(<---)g(37)719 -2704 y(--->)g(Delete)h(windows)719 2757 y(--->)f(Build)g(signals)719 -2810 y(<---)g(37)719 2864 y(--->)g(Build)g(instances)719 -2917 y(<---)g(29)719 2970 y(--->)g(Build)g(transistors)719 -3023 y(<---)g(0)719 3076 y(--->)g(Save)g(netlist)533 -3182 y(<---)g(done)g(!)p 2277 3230 V 297 3232 1982 3 -v 2278 3254 24 2834 v 319 3254 1982 24 v 347 3463 a Fk(Figur)o(e)13 -b(9:)k(Extracting)12 b(a)i(hierar)o(chical)e(netlist)i(in)h(terms)e(of) -i(standar)o(d)e(cells)h(with)g Fe(lynx)p Fk(.)1272 4081 -y(16)p eop -%%Page: 17 17 -17 16 bop 118 349 a Fa(8.2)67 b(Netlist)18 b(cross-checking)118 -467 y Fk(Now)c(it's)h(time)e(for)i(netlist)f(veri\002cations.)k(Since) -13 b Fe(lvx)h Fk(takes)f(two)i(netlist)f(in)g(input,)h(the)e(formats)i -(have)e(to)h(be)118 547 y(speci\002ed)g(on)g(the)g(command)f(line.)p -118 602 2351 3 v 118 668 3 67 v 137 647 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(lvx)g(vst)h(al)f(core)g(core)p 2466 668 V -118 670 2351 3 v 2467 681 13 71 v 129 681 2351 13 v 201 -834 a Fe(lvx)17 b Fk(works)f(somewhat)g(dif)o(fer)o(ently)g(fr)o(om)g -(other)g(tools.)24 b(Its)16 b(two)g(former)g(ar)o(guments)f(ar)o(e)g -(the)h(formats)118 907 y(of)j(the)f(\002rst)h(netlist,)h(her)o(e)d -Fe(vst)i Fk(\(for)g(the)f(original)g(netlist\))h(and)f -Fe(al)h Fk(\(for)g(the)f(extracted)e(netlist\).)31 b(The)18 -b(two)118 980 y(following)h(ar)o(guments)f(ar)o(e)f(the)g(names)g(of)i -(the)e(netlist.)30 b(W)-5 b(e)17 b(have)g(done)h(our)g(best)g(to)g -(make)e(these)i(names)118 1053 y(identical.)e(Once)c(again,)h(r)o -(emember)e(that)i(speci\002cation)g(\002les)h(ar)o(e)f(post\002xed)g -(with)h Fe(vst)g Fk(and)f(extracted)e(\002les)118 1126 -y(with)j Fe(al)p Fk(.)p 297 1302 1982 3 v 297 3446 3 -2144 v 347 1375 a Fc(\230fred/addaccu)26 b(\045-\))e(setenv)h -(MBK_CATA_LIB)h(/alliance/cells/scr)q(:/al)q(lian)q(ce/c)q(ells)q(/rin) -q(g)347 1428 y(\230fred/addaccu)g(\045-\))e(lvx)g(vst)g(al)g(core)g -(core)g(-f)881 1534 y(@@@@@@)141 b(@@@@)94 b(@@@)24 b(@@@@)71 -b(@@@@)928 1588 y(@@)210 b(@@)140 b(@)69 b(@@)117 b(@)928 -1641 y(@@)210 b(@@)140 b(@)93 b(@@)70 b(@)928 1694 y(@@)233 -b(@@)93 b(@)140 b(@@)24 b(@)928 1747 y(@@)233 b(@@)93 -b(@)163 b(@@)928 1800 y(@@)256 b(@@)47 b(@)186 b(@@)928 -1853 y(@@)256 b(@@)47 b(@)186 b(@@@)928 1906 y(@@)279 -b(@@@)187 b(@)47 b(@@)928 1960 y(@@)140 b(@)116 b(@@@)164 -b(@)93 b(@@)928 2013 y(@@)117 b(@)163 b(@)f(@)140 b(@@)881 -2066 y(@@@@@@@@@@)166 b(@)139 b(@@@)94 b(@@@@)1021 2172 -y(Gate)24 b(Netlist)h(Comparator)765 2278 y(Alliance)g(CAD)f(System)h -(3.2,)303 b(lvx)24 b(2.23)765 2331 y(Copyright)i(\(c\))e(1992-1997,)165 -b(ASIM/LIP6/UPMC)765 2385 y(E-mail)25 b(support:)g(alliance-support@as) -q(im.l)q(ip6.)q(fr)347 2491 y(*****)f(Loading)h(and)f(flattening)i -(core)e(\(vst\)...)347 2597 y(*****)g(Loading)h(and)f(flattening)i -(core)e(\(al\)...)347 2703 y(*****)g(Compare)h(Terminals)h -(..............)347 2757 y(*****)e(O.K.)141 b(\(0)23 -b(sec\))347 2863 y(*****)h(Compare)h(Instances)h(..........)347 -2916 y(*****)e(O.K.)141 b(\(0)23 b(sec\))347 3022 y(*****)h(Compare)h -(Connections)h(............)347 3075 y(*****)e(O.K.)141 -b(\(0)23 b(sec\))347 3182 y(=====)h(Terminals)i(..........)f(16)347 -3235 y(=====)f(Instances)i(..........)f(25)347 3288 y(=====)f -(Connectors)i(.........)f(150)347 3394 y(*****)f(Netlists)h(are)f -(Identical.)i(*****)118 b(\(0)23 b(sec\))p 2277 3446 -V 297 3448 1982 3 v 2278 3470 24 2148 v 319 3470 1982 -24 v 251 3678 a Fk(Figur)o(e)13 b(10:)j(Doing)e(the)g(speci\002cation)g -(netlist)g(versus)h(extracted)c(netlist)k(compaison)f(with)g -Fe(lvx)p Fk(.)201 3836 y(As)g(a)f(r)o(esult,)g(you)g(now)h(have)f(a)g -(corr)o(ect)e Fe(al)j Fk(\002le)f(for)h(the)e(cir)o(cuit's)i(cor)o(e.)i -(Its)d(name)g(is)g Fe(core.al)p Fk(.)18 b(This)c(\002le)118 -3915 y(may)f(now)i(be)e(simulated)g(with)i Fe(asimut)p -Fk(,)g(but)f(this)g(is)h(only)f(for)g(cr)o(oss)h(checking.)1272 -4081 y(17)p eop -%%Page: 18 18 -18 17 bop 201 349 a Fk(Execution)13 b(envir)o(onment)h(is)h(set)f(by)f -(issuing:)p 118 404 2351 3 v 118 470 3 67 v 137 448 a -Fd(\230fred/addac)o(cu)22 b(\045-\))j(setenv)f(MBK_IN_LO)f(al)p -2466 470 V 118 472 2351 3 v 2467 484 13 72 v 129 484 -2351 13 v 132 563 a Fk(because)13 b(we)g(want)h(to)g(use)g(the)g -(extracted)d Fe(core.al)16 b Fk(\002le)e(as)f(input)i(to)f -Fe(asimut)p Fk(.)201 643 y(Then)g(you)g(can)f(run)h(asimut)h(by)e -(entering)g(the)g(following)j(command:)p 118 698 2351 -3 v 118 765 3 68 v 137 744 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(asimut)f(core)h(addaccu)e(result)p 2466 765 -V 118 767 2351 3 v 2467 779 13 72 v 129 779 2351 13 v -118 1069 a Fg(9)80 b(Core)19 b(to)h(pads)g(routing)118 -1208 y Fk(Having)c(built)g(and)g(checked)d(the)j(cor)o(e)f(layout,)h -(you)g(can)f(run)h(the)g(cor)o(e-to-pads)g(r)o(outer)l(.)23 -b(Its)16 b(function)h(is)f(to)118 1288 y(locate)e(pads)h(appr)o -(opriately)f(ar)o(ound)h(the)f(cor)o(e)g(and)g(to)h(cr)o(eate)e(wiring) -h(segments)h(between)e(pads)i(and)f(chip)118 1368 y(terminals.)201 -1447 y(Befor)o(e)j(we)g(set)h(up)g(the)g(execution)e(envir)o(onment,)j -(take)e(a)g(look)h(at)f(the)g Fe(addaccu.rin)j Fk(\002le.)29 -b(This)18 b(\002le)118 1527 y(instructs)k Fe(ring)p Fk(,)i(the)e(cor)o -(e)e(to)i(pads)g(r)o(outer)l(,)h(to)f(place)e(pads)i(accor)o(ding)e(to) -i(designer)t('s)g(wishes.)41 b(It)21 b(also)118 1607 -y(instructs)15 b Fe(ring)f Fk(to)g(use)h(segments)e(with)i(r)o -(easonable)d(width)j(for)f(power)g(r)o(outing.)201 1686 -y(The)g(syntax)f(of)i(this)f(\002le)g(is)h(quite)f(simple.)j(The)c -(names)h(mentioned)f(her)o(e)g(ar)o(e)g(pads')i(instance)e(names.)201 -1766 y(Run:)p 118 1806 2351 3 v 118 1875 3 70 v 137 1852 -a Fd(\230fred/addac)o(cu)22 b(\045-\))j(ring)g(addaccu)f(addaccu)p -2466 1875 V 118 1877 2351 3 v 2467 1888 13 74 v 129 1888 -2351 13 v 1272 4081 a Fk(18)p eop -%%Page: 19 19 -19 18 bop 297 401 1982 3 v 297 2545 3 2145 v 347 472 -a Fc(\230fred/addaccu)26 b(\045-\))e(setenv)h(MBK_IN_LO)g(vst)347 -526 y(\230fred/addaccu)h(\045-\))e(setenv)h(MBK_IN_PH)g(ap)347 -579 y(\230fred/addaccu)h(\045-\))e(setenv)h(MBK_OUT_PH)h(ap)347 -632 y(\230fred/addaccu)g(\045-\))e(setenv)h(MBK_CATA_LIB)h -(/alliance/cells/scr)q(:/al)q(lian)q(ce/c)q(ells)q(/rin)q(g)347 -685 y(\230fred/addaccu)g(\045-\))e(ring)g(addaccu)h(addaccu)788 -791 y(@@@@@@@)188 b(@)419 b(@@@@)24 b(@)835 844 y(@@)70 -b(@@)117 b(@@@)349 b(@@)94 b(@@)835 898 y(@@)f(@@)117 -b(@)349 b(@@)140 b(@)835 951 y(@@)93 b(@@)210 b(@@@)24 -b(@@@)94 b(@@)835 1004 y(@@)70 b(@@)g(@@@@)94 b(@@@)71 -b(@)f(@@)835 1057 y(@@@@@)164 b(@@)93 b(@@)h(@@)47 b(@@)116 -b(@@@@@)835 1110 y(@@)47 b(@@)140 b(@@)93 b(@@)h(@@)47 -b(@@)116 b(@)24 b(@@)835 1163 y(@@)70 b(@@)117 b(@@)93 -b(@@)h(@@)47 b(@@)93 b(@)47 b(@@)835 1216 y(@@)70 b(@@)117 -b(@@)93 b(@@)h(@@)70 b(@@)140 b(@@)835 1269 y(@@)93 b(@@)h(@@)f(@@)h -(@@)f(@@)h(@@)788 1323 y(@@@@@)71 b(@@@)24 b(@@@@@@)h(@@@@)48 -b(@@@@)117 b(@@@@)1114 1429 y(PAD)24 b(ring)g(router)742 -1535 y(Alliance)h(CAD)f(System)h(3.2,)303 b(ring)24 b(2.9)742 -1588 y(Copyright)h(\(c\))f(1991-1997,)165 b(ASIM/LIP6/UPMC)742 -1641 y(E-mail)25 b(support:)g(alliance-support@asi)q(m.li)q(p6.f)q(r) -533 1748 y(o)e(reading)i(netlists,)h(layout)e(views)h(of)f(core)g(and)g -(pads.)347 1801 y(Warning)h(2)e(:)h(consistency)i(checks)e(will)h(be)e -(disabled)533 1854 y(o)g(reading)i(file)f(of)g(parameters,)i(including) -f(the)f(placements)i(of)e(pads.)533 1907 y(o)f(making)i(equipotential)h -(list.)533 1960 y(o)d(making)i(the)f(first)g(placement)i(of)e(pads.)533 -2013 y(o)f(filling)i(data)f(internal)i(structures.)533 -2067 y(o)d(reading)i(the)f(connectors)i(positions)f(of)f(the)g(core.) -533 2120 y(o)f(computing)j(the)e(best)g(placement)h(of)f(the)g(pads.) -533 2173 y(o)f(reading)i(the)f(connectors)i(positions)f(of)f(the)g -(pads.)533 2226 y(o)f(routing)i(deportation)h(of)e(connectors.)533 -2279 y(o)f(routing)i(supply)g(tracks.)533 2332 y(o)e(routing)i -(equipotentials.)533 2385 y(o)e(compressing)j(channels.)533 -2438 y(o)d(saving)i(in)f(MBK)g(data)g(structure.)347 -2492 y(lucky,)g(no)g(error.)p 2277 2545 V 297 2547 1982 -3 v 2278 2569 24 2149 v 319 2569 1982 24 v 744 2777 a -Fk(Figur)o(e)13 b(1)m(1:)k Fe(Ring)d Fk(r)o(outes)h(the)e(cor)o(e)g(to) -h(pad)g(netlist.)201 2939 y(Like)f(for)i(the)e(cor)o(e,)g(the)h(cor)o -(e)f(to)h(pad)f(r)o(outing)i(must)f(be)f(veri\002ed.)k(Using)d(the)g -(same)f(appr)o(oach)h(leads)f(to:)p 118 2994 2351 3 v -118 3249 3 256 v 137 3038 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(setenv)f(MBK_OUT_LO)e(al)137 3102 y(\230fred/addac)o(cu)g -(\045-\))j(setenv)f(MBK_IN_PH)f(ap)137 3165 y(\230fred/addac)o(cu)f -(\045-\))j(lynx)g(-v)h(addaccu)137 3228 y(\230fred/addac)o(cu)c -(\045-\))j(lvx)g(vst)h(al)f(addaccu)p 2466 3249 V 118 -3251 2351 3 v 2467 3263 13 260 v 129 3263 2351 13 v 201 -3422 a Fk(It)14 b(is)g(possible)h(to)f(check)e(both)i(cor)o(e)f(a)h -(cor)o(e)f(to)h(pad)f(r)o(outing)i(at)e(once)h(also:)p -118 3477 2351 3 v 118 3732 3 256 v 137 3521 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(setenv)f(MBK_OUT_LO)e(al)137 3584 y(\230fred/addac)o(cu)g -(\045-\))j(setenv)f(MBK_IN_PH)f(ap)137 3648 y(\230fred/addac)o(cu)f -(\045-\))j(lynx)g(-v)h(-f)f(addaccu)137 3711 y(\230fred/addac)o(cu)d -(\045-\))j(lvx)g(vst)h(al)f(addaccu)f(-f)p 2466 3732 -V 118 3734 2351 3 v 2467 3745 13 260 v 129 3745 2351 -13 v 201 3905 a Fk(Her)o(e)14 b(the)g Fe(-f)h Fk(option)h(indicate)d -(the)h(tools)i(to)f(expr)o(ess)f(the)g(netlist)h(in)g(terms)g(of)g -(leaf)f(cells)g(\227)h(either)f(pads)1272 4081 y(19)p -eop -%%Page: 20 20 -20 19 bop 118 349 a Fk(or)14 b(standar)o(d)g(cells)g(\227.)k(Obtaining) -13 b(a)h(transistor)h(netlist)f(fr)o(om)h(the)e(layout)i(is)f(possible) -h(using)g(the)f Fe(-t)g Fk(option)118 428 y(of)k Fe(lynx)p -Fk(,)g(but)f(this)h(is)f(mor)o(e)f(time)h(and)f(memory)g(consuming,)j -(and)d(fairly)h(useless)h(as)f(we)f(r)o(ely)g(on)i(corr)o(ect)118 -508 y(cells.)118 718 y Fg(10)80 b(Chip)18 b(layout)h(visualization)118 -858 y Fk(At)12 b(that)h(point,)g(you)f(ar)o(e)g(able)f(to)h(see)g(the)g -(actual)g(layout)g(by)g(executing)e(the)i(symbolic)g(layout)h(editor)e -Fe(graal)p Fk(.)118 938 y(Y)-5 b(ou)14 b(can)g(run)g(the)f(editor)h(by) -f(issuing)i(the)f(following)h(command:)p 118 992 2351 -3 v 118 1061 3 69 v 137 1038 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(graal)g(-l)g(addaccu)p 2466 1061 V 118 1063 -2351 3 v 2467 1074 13 73 v 129 1074 2351 13 v 201 1233 -a Fk(Now)-5 b(,)16 b(the)f(scr)o(een)g(should)h(be)f(\002lled)g(with)h -(the)f Fe(graal)h Fk(window)-5 b(,)17 b(and)e(should)h(contain)g(the)f -(whole)g(lay-)118 1313 y(out.)j(The)13 b(graphical)g(interface)g(of)i -Fe(graal)f Fk(is)h(meant)e(to)h(be)f(self)h(explanatory)-6 -b(.)118 1523 y Fg(1)m(1)80 b(Functional)18 b(abstraction)118 -1663 y Fe(yagle)p Fk(,)k(a)e(functional)g(asbtractor)f(that)h(extracts) -e(a)i(behavior)f(fr)o(om)h(a)g(transistor)g(netlist)h(can)e(r)o(elieve) -g(the)118 1742 y(designer)14 b(fr)o(om)g(many)g(headaches.)i(Fr)o(om)e -(a)g(transistor)h(netlist,)p Fe(yagle)h Fk(\002nally)e(outputs)i(a)e -Ff(VHDL)g Fk(\002le)g(that)118 1822 y(can)f(be)g(simulated.)201 -1902 y(The)h(command)f(is:)p 118 1942 2351 3 v 118 2073 -3 132 v 137 1987 a Fd(\230fred/addac)o(cu)22 b(\045-\))j(setenv)f -(MBK_IN_LO)f(al)137 2050 y(\230fred/addac)o(cu)f(\045-\))j(yagle)g(-i)g -(-v)h(addaccu)p 2466 2073 V 118 2075 2351 3 v 2467 2087 -13 136 v 129 2087 2351 13 v 1272 4081 a Fk(20)p eop -%%Page: 21 21 -21 20 bop 297 401 1982 3 v 297 2810 3 2410 v 347 472 -a Fc(\230fred/addaccu)26 b(\045-\))e(setenv)h(MBK_IN_LO)g(al)347 -526 y(\230fred/addaccu)h(\045-\))e(yagle)h(addaccue)g(-i)f(-v)1439 -632 y(@@@@)1486 685 y(@@)1486 738 y(@@)765 791 y(@@@@@)h(@@@)70 -b(@@@@)141 b(@@@@@@)71 b(@@)116 b(@@@@@)788 844 y(@@)94 -b(@)70 b(@@)g(@)93 b(@@)47 b(@@)94 b(@@)f(@)117 b(@)812 -898 y(@@)70 b(@)g(@@)g(@@)g(@)g(@@)94 b(@@)70 b(@@)117 -b(@@)812 951 y(@@)47 b(@)139 b(@@@@@)71 b(@)f(@)117 b(@@)70 -b(@@@@@@@@@)835 1004 y(@@)24 b(@)93 b(@@)70 b(@@)94 b(@@@)140 -b(@@)70 b(@@)835 1057 y(@@@)94 b(@@)f(@@)70 b(@@)187 -b(@@)70 b(@@)140 b(@)858 1110 y(@@)94 b(@@)70 b(@@@)g(@@@@@@)95 -b(@@)e(@@)h(@@)765 1163 y(@@)47 b(@)140 b(@@@@)47 b(@@)24 -b(@@)70 b(@@@)24 b(@@@@@@)95 b(@@@@)765 1216 y(@@)47 -b(@)372 b(@)117 b(@)788 1269 y(@@@)420 b(@@@@@)905 1376 -y(Yet)24 b(Another)h(Gate)f(Level)g(Extractor)742 1482 -y(Alliance)h(CAD)f(System)h(3.2,)256 b(yagle)25 b(2.01)742 -1535 y(Copyright)g(\(c\))f(1994-1997,)165 b(ASIM/LIP6/UPMC)742 -1588 y(E-mail)25 b(support:)g(alliance-support@asi)q(m.li)q(p6.f)q(r) -347 1695 y([YAG)f(MES])g(Reading)h(file)f('addaccue.inf')347 -1748 y([YAG)g(MES])g(Loading)h(the)f(figure)h(addaccue)327 -b(00m00s)48 b(u:00m00.0)h(s:00m00.0)347 1801 y([YAG)24 -b(MES])g(Transistor)i(netlist)f(checking)327 b(00m00s)48 -b(u:00m00.0)h(s:00m00.0)347 1854 y([YAG)24 b(MES])g(Extracting)i(CMOS)e -(duals)466 b(00m00s)48 b(u:00m00.0)h(s:00m00.0)347 1907 -y([YAG)24 b(MES])g(Extracting)i(bleeders)513 b(00m00s)48 -b(u:00m00.0)h(s:00m00.0)347 1960 y([YAG)24 b(MES])g(Making)h(gates)675 -b(00m00s)48 b(u:00m00.0)h(s:00m00.0)347 2013 y([YAG)24 -b(MES])g(Latches)h(detection)560 b(00m00s)48 b(u:00m00.0)h(s:00m00.0) -347 2067 y([YAG)24 b(MES])g(Making)h(cells)675 b(00m00s)48 -b(u:00m00.0)h(s:00m00.0)347 2120 y([YAG)24 b(MES])g(External)h -(connector)h(verification)235 b(00m00s)48 b(u:00m00.0)h(s:00m00.0)347 -2173 y([YAG)24 b(MES])g(Checking)h(the)f(yagle)h(figure)373 -b(00m00s)48 b(u:00m00.0)h(s:00m00.0)347 2226 y([YAG)24 -b(MES])g(Building)h(the)f(behavioural)i(figure)234 b(00m00s)48 -b(u:00m00.0)h(s:00m00.0)347 2279 y(TOTAL)24 b(DISASSEMBLY)i(TIME)675 -b(00m00s)48 b(u:00m00.0)h(s:00m00.0)347 2332 y(--------------------)q -(----)q(----)q(----)q(----)q(----)q(----)q(-----)q(----)q(----)q(---) -347 2385 y([YAG)24 b(MES])g(Erasing)h(the)f(transistor)i(netlist)347 -2438 y([YAG)e(MES])g(Generating)i(the)e(VHDL)g(Data)g(Flow)347 -2492 y([YAG)g(MES])g(Execution)i(COMPLETED)347 2545 y -(--------------------)q(----)q(----)q(----)q(----)q(----)q(----)q -(-----)q(----)q(----)q(---)347 2598 y([YAG)e(WAR)g(04])g(80)g -(transistors)i(are)e(always)g(off)347 2651 y([YAG)g(WAR)g(07])g(80)g -(transistors)i(are)e(not)g(used)347 2704 y([YAG)g(WAR)g(09])g(8)f -(latches)i(detected)347 2757 y(See)f(file)g('addaccue.rep')j(for)d -(more)g(information)p 2277 2810 V 297 2812 1982 3 v 2278 -2835 24 2415 v 319 2835 1982 24 v 461 3050 a Fk(Figur)o(e)14 -b(12:)i Fe(Desb)f Fk(abstract)d(the)i(extracted)d(netlist)k(into)f -(boolean)g(equations.)201 3211 y(Then,)g(you)g(can)f(simulate)h(the)g -(r)o(esulting)g(behavior)f(\002le)h(by)g(issuing:)p 118 -3266 2351 3 v 118 3334 3 68 v 137 3312 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(asimut)f(-b)i(addaccu)d(addaccu)h(result)p -2466 3334 V 118 3336 2351 3 v 2467 3347 13 72 v 129 3347 -2351 13 v 201 3506 a Fk(Simulation)15 b(of)f(extracted)e(behavior)h -(with)i(asimut)f(is)h(not)f(the)g(only)g(mean)f(to)i(see)e(if)i(the)e -(chip)h(is)h(corr)o(ect.)118 3586 y(The)f(extracted)d(behavior)i(can)h -(also)g(be)f(used)h(for)g(formal)g(pr)o(oof.)201 3666 -y(In)g Ff(Alliance)p Fk(,)g(formal)g(pr)o(oof)g(is)h(the)e(ultimate)h -(way)f(to)i(validate)e(your)h(cir)o(cuit.)201 3745 y(Befor)o(e)19 -b(you)h(can)f(use)i Fe(proof)p Fk(,)h(the)d(formal)h(pr)o(over)l(,)h -(you)f(must)h(get)e(acquainted)f(with)j(some)e(speci\002c)118 -3825 y(concepts)14 b(of)g(the)g(formal)g(pr)o(oof)h(theory)-6 -b(.)201 3905 y(If)18 b(you)f(look)h(at)f(the)g(extracted)e(behavior)l -(,)j Fe(chip.vbe)p Fk(,)i(you)d(can)g(notice)g(that)h -Fe(yagle)g Fk(has)g(found)g(four)1272 4081 y(21)p eop -%%Page: 22 22 -22 21 bop 118 349 a Fk(memorizing)12 b(elements,)g(speci\002ed)g(as)h -Fe(reg)p 1071 349 17 3 v 21 w(bit)33 b(register)p Fk(.)19 -b(In)12 b(the)h(formal)f(pr)o(oof,)i(these)f(four)g(elements)118 -428 y(must)g(match)e(the)h(four)h(edge-trigger)o(ed)c(latches)j(of)g -(the)g(former)g(behavioral)f(speci\002cation,)i(because)d -Fe(proof)118 508 y Fk(can)j(only)i(compar)o(e)d(combinatorial)h(logic)h -(between)e(external)h(connectors)h(and/or)f(sequential)h(elements.)201 -588 y(If)g(you)g(examine)f(the)g(curr)o(ent)g(dir)o(ectory)-6 -b(,)13 b(you)h(will)g(\002nd)h(a)e(\002le)h(called)f -Fe(addaccu.inf)p Fk(.)201 667 y(This)22 b(\002le)f(contains)h -(speci\002c)f(informations)h(for)g Fe(yagle)p Fk(.)40 -b(It)20 b(instructs)i Fe(yagle)g Fk(to)g(r)o(ename)d(the)i(inter)o(-) -118 747 y(nal)d(node)g(name)f(of)i(every)e(latch)g Fj(cor)o(e.l*)g -Fk(by)g(its)i(corr)o(esponding)f(name)f(in)h(the)g(\002rst)h(behavior)e -(\002le.)30 b(In)18 b(the)118 827 y Fe(cells/scr)c Fk(dir)o(ectory)d -(you)i(can)f(see)g(that)g(the)g(name)f(of)i(the)f(internal)h(node)f(of) -h(the)f(used)g(latch,)g Fe(ms)p 2283 827 V 20 w(y.vbe)p -Fk(,)118 907 y(is)j Fj(dff)p 233 907 V 20 w(s)p Fk(.)201 -986 y(The)f(equivalent)f(name)g(in)i Fe(addaccu.vbe)h -Fk(is)e Fj(r)o(eg)p Fk(.)201 1066 y(When)g(you)g(run)g -Fe(yagle)g Fk(with)g(option)h Fe(-i)p Fk(,)f(the)f(pr)o(ogram)g(sear)o -(ches)g(for)h(the)g(\002le)f Fe(chip.inf)p Fk(,)i(builds)g(the)118 -1146 y(gate)g(netlist)h(and)f(r)o(eplaces)g(the)g(node)h(names)f(by)g -(their)h(equivalent)f(names)g(in)h(the)g(behavior)f(\002le,)h(in)g(or)o -(der)118 1225 y(to)e(make)f Fe(proof)i Fk(work.)201 1305 -y(Then,)f(you)g(can)f(run)h Fe(proof)p Fk(,)h(the)e(formal)h(pr)o -(over:)p 118 1360 2351 3 v 118 1428 3 69 v 137 1405 a -Fd(\230fred/addac)o(cu)22 b(\045-\))j(proof)g(-d)g(-p)h(addaccu)d -(addaccue)p 2466 1428 V 118 1430 2351 3 v 2467 1441 13 -73 v 129 1441 2351 13 v 1272 4081 a Fk(22)p eop -%%Page: 23 23 -23 22 bop 297 401 1982 3 v 297 3389 3 2989 v 347 472 -a Fc(\230fred/addaccu)26 b(\045-\))e(proof)h(-d)e(addaccue)j(addaccu) -719 579 y(@@@@@@@)861 b(@@@)765 632 y(@@)70 b(@@)791 -b(@)47 b(@@)765 685 y(@@)94 b(@@)744 b(@@)47 b(@@)765 -738 y(@@)94 b(@@)23 b(@@@)h(@@@)117 b(@@@)164 b(@@@)140 -b(@@)765 791 y(@@)70 b(@@)h(@@@)47 b(@@)g(@@)70 b(@@)g(@@)g(@@)47 -b(@@@@@@@@)765 844 y(@@@@@)118 b(@@)70 b(@@)24 b(@@)116 -b(@@)24 b(@@)117 b(@@)70 b(@@)765 898 y(@@)187 b(@@)140 -b(@@)116 b(@@)24 b(@@)117 b(@@)70 b(@@)765 951 y(@@)187 -b(@@)140 b(@@)116 b(@@)24 b(@@)117 b(@@)70 b(@@)765 1004 -y(@@)187 b(@@)140 b(@@)116 b(@@)24 b(@@)117 b(@@)70 b(@@)765 -1057 y(@@)187 b(@@)163 b(@@)70 b(@@)g(@@)g(@@)94 b(@@)719 -1110 y(@@@@@@)117 b(@@@@)187 b(@@@)164 b(@@@)93 b(@@@@@@)1137 -1216 y(Formal)25 b(Proof)742 1323 y(Alliance)g(CAD)f(System)h(3.2,)233 -b(proof)25 b(3.158)742 1376 y(Copyright)g(\(c\))f(90-97,)257 -b(ASIM/LIP6/UPMC)742 1429 y(E-mail)25 b(support:)g -(alliance-support@asi)q(m.li)q(p6.f)q(r)347 1535 y -(====================)q(====)q(====)q(====)51 b(Environment)e -(==================)q(====)q(====)q(====)q(==)347 1588 -y(MBK_WORK_LIB)282 b(=)23 b(.)347 1641 y(MBK_CATA_LIB)282 -b(=)23 b(/labo/cells/grog)347 1695 y(====================)q(===)51 -b(Files,)25 b(Options)g(and)f(Parameters)48 b(=================)q(====) -q(==)347 1748 y(First)24 b(VHDL)g(file)211 b(=)23 b(addaccue.vbe)347 -1801 y(Second)h(VHDL)h(file)187 b(=)23 b(addaccu.vbe)347 -1854 y(The)h(auxiliary)h(signals)g(are)f(erased)347 1907 -y(Errors)g(are)g(displayed)347 1960 y(====================)q(====)q -(====)q(====)q(====)q(====)q(====)q(=====)q(====)q(====)q(====)q(====)q -(====)q(====)q(====)q(==)347 2067 y(Compiling)h('addaccue')h(...)347 -2120 y(Compiling)f('addaccu')h(...)347 2226 y(Running)f(abl)f -(ordonnancer)i(on)d(addaccue)347 2279 y(........)347 -2385 y(Running)i(Abl2Bdd)g(on)e(addaccue)347 2438 y(--->)h(final)g -(number)h(of)f(nodes)g(=)g(664\(404\))347 2545 y(Running)h(Abl2Bdd)g -(on)e(addaccu)347 2598 y(--------------------)q(----)q(----)q(----)q -(----)q(----)q(----)q(-----)q(----)q(----)q(----)q(----)q(----)q(----)q -(----)q(---)649 2651 y(Formal)i(proof)f(with)g(Ordered)h(Binary)g -(Decision)g(Diagrams)g(between)649 2757 y('./addaccue')49 -b(and)f('./addaccu')347 2810 y(--------------------)q(----)q(----)q -(----)q(----)q(----)q(----)q(-----)q(----)q(----)q(----)q(----)q(----)q -(----)q(----)q(---)347 2864 y(====================)q(====)q(====)q(==)j -(PRIMARY)25 b(OUTPUT)47 b(=================)q(====)q(====)q(====)q(==) -347 2917 y(====================)q(====)q(====)q(=)j(AUXILIARY)26 -b(SIGNAL)48 b(====================)q(====)q(====)q(==)347 -2970 y(====================)q(====)q(====)q(==)j(REGISTER)25 -b(SIGNAL)48 b(====================)q(====)q(====)q(==)347 -3023 y(====================)q(====)q(====)q(===)j(EXTERNAL)25 -b(BUS)f(===================)q(====)q(====)q(====)q(==)347 -3076 y(====================)q(====)q(====)q(====)k(INTERNAL)d(BUS)f -(===================)q(====)q(====)q(====)q(==)998 3182 -y(Formal)g(Proof)h(:)e(OK)347 3289 y(pppppppppppppppppppp)q(pppp)q -(rrrr)q(rrrr)q(rrrr)q(oooo)q(oooo)q(ooooo)q(oooo)q(oooo)q(oooo)q(oooo)q -(ffff)q(ffff)q(ffff)q(fff)347 3342 y(--------------------)q(----)q -(----)q(----)q(----)q(----)q(----)q(-----)q(----)q(----)q(----)q(----)q -(----)q(----)q(----)q(---)p 2277 3389 V 297 3391 1982 -3 v 2278 3413 24 2993 v 319 3413 1982 24 v 118 3621 a -Fk(Figur)o(e)d(13:)28 b(Doing)21 b(a)e(formal)i(pr)o(oof)g(between)d -(the)i(abstracted)e(behavior)i(and)g(the)g(speci\002cations)g(using)118 -3701 y Fe(proof)p Fk(.)201 3856 y(Option)c Fe(-d)g Fk(displays)g(the)g -(logical)f(functions)i(that)f(do)g(not)g(match,)f(and)g(the)h -Fe(-p)g Fk(option)h(tells)e Fe(proof)i Fk(to)1272 4081 -y(23)p eop -%%Page: 24 24 -24 23 bop 118 349 a Fk(ignor)o(e)14 b(the)f(internal)h(polarity)g(of)g -(the)g(\003ip-\003ops:)k(we)13 b(described)f(our)j(behavioral)e(with)h -(a)g(r)o(egister)118 559 y Fg(12)80 b(Further)19 b(veri\002cations)118 -699 y Fk(The)14 b(last)g(veri\002cation)g(concerns)f(design)h(rules.)j -(Befor)o(e)c(the)h(chip)g(can)f(actually)g(be)g(tar)o(getted)f(on)j(a)e -(pr)o(ocess,)118 778 y(a)h(symbolic)f(design)h(rule)f(check)g(\227)h -(DRC)g(\227)g(must)g(be)f(performed.)201 858 y(In)h Ff(Alliance)p -Fk(,)g(the)f(design)h(rule)f(checker)f(is)i Fe(druc)p -Fk(.)201 938 y(Y)-5 b(ou)14 b(just)h(have)f(to)g(type:)p -118 992 2351 3 v 118 1185 3 193 v 137 1037 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(setenv)f(MBK_IN_PH)f(ap)137 1100 y(\230fred/addac)o(cu)f -(\045-\))j(setenv)f(RDS_TECHNO_)o(NA)o(ME)e(/alliance/e)o(tc/)o(cm)o -(os)o(_5.)o(rd)o(s)137 1163 y(\230fred/addac)o(cu)g(\045-\))j(druc)g -(addaccu)p 2466 1185 V 118 1187 2351 3 v 2467 1198 13 -197 v 129 1198 2351 13 v 201 1357 a Fk(The)18 b(\002le)g(pointed)g(to)g -(by)f(the)h Fe(RDS)p 956 1357 17 3 v 20 w(TECHNO)p 1174 -1357 V 21 w(NAME)h Fk(envir)o(onement)f(variable)e(contains)j(many)e -(techno-)118 1437 y(logical)d(information)g(including)g(the)g -(desription)g(of)h(the)f(design)f(rules.)1272 4081 y(24)p -eop -%%Page: 25 25 -25 24 bop 297 401 1982 3 v 297 2651 3 2251 v 347 472 -a Fc(\230fred/addaccu)26 b(\045-\))e(setenv)h(MBK_IN_PH)g(ap)347 -526 y(\230fred/addaccu)h(\045-\))e(setenv)h(RDS_OUT)g(cif)347 -579 y(\230fred/addaccu)h(\045-\))e(setenv)h(RDS_TECHNO_NAME)i -(/alliance/etc/cmos_5)q(.rds)347 632 y(\230fred/addaccu)f(\045-\))e -(setenv)h(MBK_CATA_LIB)h(/alliance/cells/scr)q(:/al)q(lian)q(ce/c)q -(ells)q(/rin)q(g)347 685 y(\230fred/addaccu)g(\045-\))e(druc)g(addaccu) -765 791 y(@@@@@@@)118 b(@@@@@@@)467 b(@@@@)24 b(@)812 -844 y(@@)70 b(@@)117 b(@@)70 b(@@)372 b(@@)94 b(@@)812 -898 y(@@)f(@@)h(@@)f(@@)326 b(@@)140 b(@)812 951 y(@@)116 -b(@@)71 b(@@)93 b(@@)47 b(@@@)g(@@@@)h(@@)163 b(@)812 -1004 y(@@)116 b(@@)71 b(@@)f(@@)93 b(@@)h(@@)47 b(@@)812 -1057 y(@@)116 b(@@)71 b(@@@@@)140 b(@@)94 b(@@)47 b(@@)812 -1110 y(@@)116 b(@@)71 b(@@)47 b(@@)116 b(@@)94 b(@@)47 -b(@@)812 1163 y(@@)116 b(@@)71 b(@@)f(@@)93 b(@@)h(@@)47 -b(@@)812 1216 y(@@)93 b(@@)h(@@)70 b(@@)93 b(@@)h(@@)70 -b(@@)140 b(@)812 1269 y(@@)70 b(@@)117 b(@@)93 b(@@)70 -b(@@)g(@@@)94 b(@@)g(@@)765 1323 y(@@@@@@@)118 b(@@@@@)71 -b(@@@)g(@@@@)47 b(@@)117 b(@@@@)1067 1429 y(Design)25 -b(Rule)f(Checker)765 1535 y(Alliance)h(CAD)f(System)h(3.2,)280 -b(druc)24 b(3.00)765 1588 y(Copyright)i(\(c\))e(1993-1997,)165 -b(ASIM/LIP6/UPMC)765 1641 y(E-mail)25 b(support:)g(alliance-support@as) -q(im.l)q(ip6.)q(fr)347 1748 y(Flatten)g(DRC)f(on:)g(addaccu)347 -1801 y(Delete)g(MBK)g(figure)h(:)f(addaccu)347 1854 y(Load)g(Flatten)h -(Rules)f(:)g(/usr/local/cad/alli)q(ance)q(/etc/)q(cmos)q(_7.r)q(ds)347 -1960 y(Unify)g(:)g(addaccu)347 2067 y(Create)g(Ring)h(:)e(addaccu_rng) -347 2120 y(Merge)h(Errorfiles:)347 2226 y(Merge)g(Error)h(Instances:) -347 2279 y(instructionCourante)j(:)23 b(50)347 2332 y(End)h(DRC)g(on:)g -(addaccu)347 2385 y(Saving)g(the)g(Error)h(file)f(figure)347 -2438 y(Done)393 2492 y(0)347 2598 y(File:)g(addaccu.drc)i(is)e(empty:)h -(no)e(errors)i(detected.)p 2277 2651 V 297 2653 1982 -3 v 2278 2675 24 2255 v 319 2675 1982 24 v 642 2890 a -Fk(Figur)o(e)13 b(14:)j(Symbolic)e(design)f(rule)h(checking)e(using)j -Fe(druc)p Fk(.)201 3052 y(This)f(layout)g(level)f(veri\002cation)g(has) -h(been)e(optimized)h(for)h(speed.)j(So)d(it)f(is)h(fast,)g(even)f(on)h -(lar)o(ge)e(cir)o(cuits,)118 3132 y(but)i(r)o(equir)o(es)g(quite)f(a)h -(few)g(megs)f(then.)118 3342 y Fg(13)80 b(Symbolic)19 -b(to)h(real)f(technology)h(translation)118 3481 y Fk(The)h(purpose)i -(of)f Ff(Alliance)g Fk(symbolic)f(layout)h(appr)o(oach)g(is)g(to)g -(allow)g(the)f(designs)h(to)g(be)f(tar)o(getted)f(on)118 -3561 y(several)13 b(technologies.)k(The)d(whole)g(chip)g(is)g -(conceived)f(with)h(symbolic)g(cells.)201 3641 y(In)k(or)o(der)f(to)h -(send)g(the)g(chip)g(to)g(a)g(speci\002ed)f(foundry)-6 -b(,)19 b(the)f(designer)f(must)i(perform)f(the)f(symbolic)h(to)118 -3720 y(r)o(eal)13 b(conversion.)18 b(This)c(stage)g(is)g(the)g(last)g -(stage)f(of)i(the)e(design)h(methodology)-6 b(.)201 3800 -y(The)13 b(only)h(things)g(you)g(have)f(to)h(specify)f(is)h(the)g(tar)o -(get)e(technology)h(and)g(some)h(envir)o(onment)f(variables.)201 -3880 y(The)g(only)g(tar)o(get)f(technology)h(available)f(in)h(the)g -(distribution)h(is)g Fe(prol10)p Fk(,)g(a)f(fake)f(1.0)g(pr)o(ocess.)17 -b(Y)-5 b(ou)14 b(can)1272 4081 y(25)p eop -%%Page: 26 26 -26 25 bop 118 349 a Fk(choose)14 b(it)g(by)f(setting)h(the)g -Fe(RDS)p 794 349 17 3 v 21 w(TECHNO)p 1013 349 V 21 w(NAME)g -Fk(envir)o(onment)g(variable.)p 118 404 2351 3 v 118 -473 3 70 v 137 449 a Fd(\230fred/addac)o(cu)22 b(\045-\)setenv)h -(RDS_TECHNO)o(_N)o(AM)o(E)g(/alliance/)o(et)o(c/p)o(ro)o(l1)o(0.r)o(ds) -p 2466 473 V 118 475 2351 3 v 2467 486 13 74 v 129 486 -2351 13 v 201 646 a Fk(Y)-5 b(ou)18 b(also)f(have)g(to)g(specify)g(the) -g(format)g(of)g(the)g(output)h(\002le)f(that)g(will)h(r)o(epr)o(esent)e -(the)h(foundry)g(layout.)118 725 y Ff(Alliance)d Fk(pr)o(ovides)g(two)h -(distinct)f(formats:)j Fe(gds)e Fk(and)e Fe(cif)p Fk(.)p -118 780 2351 3 v 118 848 3 69 v 137 826 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(setenv)f(RDS_OUT)g(cif)p 2466 848 V 118 850 -2351 3 v 2467 862 13 73 v 129 862 2351 13 v 201 1021 -a Fk(This)d(command)f(instructs)h(the)f(converter)g(to)h(output)g(the)g -(chip)f(in)h(the)f(Caltech)g(Intermediat)f(Form.)118 -1101 y(This)g(form)g(is)g(an)f Fe(ascii)h Fk(format,)h(that)e(can)g -(include)g(connectors,)h(wher)o(eas)e Fe(gds)i Fk(is)g(binary)f(and)g -(doesn't)118 1180 y(include)c(connectors.)201 1260 y(A)22 -b(tricky)f(thing)h(is)g(that)f(the)h Fj(pad)e Fk(part)i(of)g(the)f -(symbolic)h(IO)f(pads)g(must)i(be)e(r)o(eplaced)f(by)h(its)h(\224r)o -(eal\224)118 1340 y(equivalent.)36 b(This)22 b(is)f(indeed)e(the)h -(only)h(technology)f(dependant)f(part)h(of)h(a)f(cir)o(cuit)g(designed) -g(with)h(our)118 1419 y(symbolic)14 b(appr)o(oach.)201 -1499 y(So)h(you)g(also)f(have)h(to)f(set)h(the)f Fe(RDS)p -966 1499 17 3 v 20 w(IN)h Fk(envir)o(onment)g(variable,)e(to)h -(indicate)g(the)g(format)h(of)g(the)f(substi-)118 1579 -y(tution)h(pad.)p 118 1634 2351 3 v 118 1702 3 69 v 137 -1680 a Fd(\230fred/addac)o(cu)22 b(\045-\))j(setenv)f(RDS_IN)g(cif)p -2466 1702 V 118 1704 2351 3 v 2467 1715 13 73 v 129 1715 -2351 13 v 201 1875 a Fk(At)14 b(last,)g(you)g(run)g(the)g(symbolic)f -(to)h(r)o(eal)f(converter)l(,)g Fe(s2r)p Fk(.)p 118 1929 -2351 3 v 118 1996 3 67 v 137 1975 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(s2r)g(-cv)h(addaccu)p 2466 1996 V 118 1998 -2351 3 v 2467 2009 13 71 v 129 2009 2351 13 v 201 2168 -a Fk(Y)-5 b(our)14 b(chip)g(is)h(now)f(r)o(eady)f(for)h(the)g(foundry)g -(that)g(pr)o(ovides)g(the)g(pr)o(ol10)f(technology)-6 -b(.)1272 4081 y(26)p eop -%%Page: 27 27 -27 26 bop 297 401 1982 3 v 297 3076 3 2676 v 347 472 -a Fc(\230fred/addaccu)26 b(\045-\))e(setenv)h(MBK_IN_PH)g(ap)347 -526 y(\230fred/addaccu)h(\045-\))e(setenv)h(MBK_CATA_LIB)h -(/alliance/cells/scr)q(:/al)q(lian)q(ce/c)q(ells)q(/rin)q(g)347 -579 y(\230fred/addaccu)g(\045-\))e(setenv)h(RDS_TECHNO_NAME)i -(/alliance/etc/prol10)q(.rds)347 632 y(\230fred/addaccu)f(\045-\))e -(setenv)h(RDS_OUT)g(cif)347 685 y(\230fred/addaccu)h(\045-\))e(setenv)h -(RDS_IN)g(cif)347 738 y(\230fred/addaccu)h(\045-\))e(s2r)g(-v)g -(addaccu)1230 844 y(@@@@)1207 898 y(@)70 b(@@)1184 951 -y(@@)93 b(@@)998 1004 y(@@@@@@)48 b(@@@)70 b(@@)24 b(@@@)g(@@@)974 -1057 y(@@)94 b(@)70 b(@)g(@@)g(@@@)47 b(@@)974 1110 y(@@@)257 -b(@)93 b(@@)70 b(@@)998 1163 y(@@@@)187 b(@)116 b(@@)1044 -1216 y(@@@@)h(@)140 b(@@)974 1269 y(@)94 b(@@@)70 b(@)93 -b(@)47 b(@@)974 1323 y(@@)94 b(@@)47 b(@@@@@@)71 b(@@)974 -1376 y(@)24 b(@@@@@)48 b(@@@@@@@)g(@@@@)905 1482 y(Symbolic)25 -b(to)f(Real)g(layout)g(converter)742 1588 y(Alliance)h(CAD)f(System)h -(3.2,)326 b(s2r)24 b(3.6)742 1641 y(Copyright)h(\(c\))f(1991-1997,)165 -b(ASIM/LIP6/UPMC)742 1695 y(E-mail)25 b(support:)g -(alliance-support@asi)q(m.li)q(p6.f)q(r)533 1854 y(o)e(loading)i -(technology)h(file)e(:)g(/usr/local/cad/allian)q(ce/e)q(tc/p)q(rol1)q -(0_7.)q(rds)533 1907 y(o)f(loading)i(all)f(level)h(of)e(symbolic)j -(layout)e(:)g(addaccu)533 1960 y(o)f(removing)i(symbolic)h(data)e -(structure)533 2013 y(o)f(layout)i(post-treating)h(with)f(connectors,)g -(with)g(scotchs.)533 2067 y(-->)f(post-treating)i(model)f(palo_sp)626 -2120 y(rectangle)g(merging)g(:)626 2173 y(.)e(RDS_NWELL)j -(....................)q(.....)q(....)q(....)626 2226 -y(.)d(RDS_NIMP)i(.................)q(....)q(.....)q(....)q(...)626 -2279 y(.)e(RDS_PIMP)i(.................)q(....)q(.....)q(....)q(...)626 -2332 y(.)e(RDS_ACTIV)j(....................)q(.....)q(....)q(....)626 -2385 y(.)d(RDS_POLY)i(.................)q(....)q(.....)q(....)q(...)626 -2438 y(.)e(RDS_ALU1)i(.................)q(....)q(.....)q(....)q(...)626 -2492 y(.)e(RDS_ALU2)i(.................)q(....)q(.....)q(....)q(...)626 -2545 y(.)626 2598 y(.)626 2651 y(.)533 2704 y(o)e(replacing)j(black)e -(boxes)533 2757 y(-->)g(replace)h(cell)f(padreal)533 -2810 y(o)f(saving)i(addaccu.cif)533 2864 y(o)e(memory)i(allocation)h -(informations)533 2917 y(-->)e(required)h(rectangles)h(=)d(7318)48 -b(really)24 b(allocated)i(=)d(7)533 2970 y(-->)h(required)h(scotchs)g -(=)e(3)47 b(really)25 b(created)g(=)e(3)533 3023 y(-->)h(Number)g(of)g -(allocated)i(bytes:)e(341231)p 2277 3076 V 297 3078 1982 -3 v 2278 3100 24 2680 v 319 3100 1982 24 v 420 3315 a -Fk(Figur)o(e)13 b(15:)j(T)-5 b(ranslating)14 b(the)g(symbolic)f(layout) -h(into)h(pr)o(ocess)f(layout)g(with)g Fe(s2r)p Fk(.)118 -3541 y Fg(14)80 b(Conclusion)118 3681 y Fk(If)14 b(you)g(actually)f -(arrived)g(her)o(e)g(doing)h(all)g(the)g(pr)o(evious)g(steps,)h -(congratulation!)201 3760 y(Y)-5 b(ou)21 b(can)e(see)h(an)f(automatic)h -(r)o(eplay)f(of)i(this)g(tutorial)f(by)g(executing)e(the)i -Fe(Makefile)i Fk(in)e(the)g(curr)o(ent)1272 4081 y(27)p -eop -%%Page: 28 28 -28 27 bop 118 349 a Fk(dir)o(ectory)13 b(by)g(issuing)i(the)f(command:) -p 118 404 2351 3 v 118 470 3 67 v 137 449 a Fd(\230fred/addac)o(cu)22 -b(\045-\))j(make)p 2466 470 V 118 472 2351 3 v 2467 483 -13 71 v 129 483 2351 13 v 132 563 a Fk(Note)14 b(that)f(the)h -Fe(Makefile)h Fk(uses)g(Bourne-shell)g(commands.)201 -642 y(If)i(you)g(plan)g(to)f(design)h(a)f(chip)h(with)g -Ff(Alliance)p Fk(,)g(it)g(is)g(a)f(good)h(idea)f(to)h(use)f -Fe(Makefile)p Fk(s)j(to)e(ensur)o(e)g(the)118 722 y(consistency)e -(between)e(the)h(design)h(and)f(veri\002cations)h(of)g(the)f(dif)o(fer) -o(ents)h(views)g(and)f(hierar)o(chies,)g(but)g(this)118 -802 y(is)h(another)e(story)-6 b(.)201 881 y(If)15 b(anything)g(went)h -(wr)o(ong)f(or)g(if)h(you)f(have)g(any)g(question,)h(you)g(can)e -(contact)h(us)h(by)e(sending)h(a)g(mail)g(to)118 961 -y(the)f(support)h(team)e(of)h Ff(Alliance)p Fk(,)g(located)f(at)h -Fe(alliance-support@lip6.fr)q Fk(.)1272 4081 y(28)p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/alliance/share/tutorials/amd2901/amd2901.pdf b/alliance/share/tutorials/amd2901/amd2901.pdf new file mode 100644 index 0000000000000000000000000000000000000000..82aea2d480ce1e8dfbf0715840ee8b1570c6e8d8 GIT binary patch literal 110738 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

N#>w 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≻b8eKhu@u*r$ZC)EhBg_bJn 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 OQ76rs_0{FKO!^NtM@={Y literal 0 HcmV?d00001 diff --git a/alliance/share/tutorials/amd2901/amd2901.ps b/alliance/share/tutorials/amd2901/amd2901.ps new file mode 100644 index 00000000..912e65df --- /dev/null +++ b/alliance/share/tutorials/amd2901/amd2901.ps @@ -0,0 +1,1622 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.85 Copyright 1999 Radical Eye Software +%%Title: amd2901.dvi +%%Pages: 11 +%%PageOrder: Ascend +%%BoundingBox: 0 0 596 842 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips amd2901.dvi -o amd2901.ps +%DVIPSParameters: dpi=600, compressed +%DVIPSSource: TeX output 2000.01.20:1142 +%%BeginProcSet: texc.pro +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 +mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 +0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ +landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize +mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ +matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round +exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ +statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] +N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin +/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array +/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N +df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 +1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx +0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx +sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ +rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp +gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B +/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ +/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ +A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy +get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} +ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp +fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 +{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add +chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ +1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} +forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put +}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ +bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A +mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ +SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ +userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X +1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N +/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ +/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) +(LaserWriter 16/600)]{A length product length le{A length product exch 0 +exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse +end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask +grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} +imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round +exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto +fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p +delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} +B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ +p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S +rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end + +%%EndProcSet +TeXDict begin 39158280 55380996 1000 600 600 (amd2901.dvi) +@start +%DVIPSBitmapFont: Fa cmti10 10.95 19 +/Fa 19 122 df<147E49B47E903907C1C38090391F80EFC090383F00FF017E137F491480 +4848133F485AA248481400120F5B001F5C157E485AA215FE007F5C90C7FCA21401485C5A +A21403EDF0385AA21407EDE078020F1370127C021F13F0007E013F13E0003E137FECF3E1 +261F01E313C03A0F8781E3803A03FF00FF00D800FC133E252977A72E>97 +DIIII<167C4BB4FC923807C78092380F83C0ED1F87161FED3F3FA2157EA21780EE0E004B +C7FCA414015DA414035DA30103B512F8A390260007E0C7FCA3140F5DA5141F5DA4143F92 +C8FCA45C147EA414FE5CA413015CA4495AA4495AA4495A121E127F5C12FF49C9FCA2EAFE +1EEAF83C1270EA7878EA3FE0EA0F802A5383BF1C>III<1478EB01FCA21303A314F8EB00E01400AD137C48 +B4FC38038F80EA0707000E13C0121E121CEA3C0F1238A2EA781F00701380A2EAF03F1400 +12005B137E13FE5BA212015BA212035B1438120713E0000F1378EBC070A214F0EB80E0A2 +EB81C01383148038078700EA03FEEA00F8163E79BC1C>I108 +DIII<903903E001F890390FF807FE903A1E7C1E0F80903A1C3E3C07C001 +3C137801389038E003E0EB783F017001C013F0ED80019038F07F0001E015F8147E160300 +0113FEA2C75AA20101140717F05CA20103140F17E05CA20107EC1FC0A24A1480163F010F +15005E167E5E131F4B5A6E485A4B5A90393FB80F80DA9C1FC7FCEC0FFCEC03E049C9FCA2 +137EA213FEA25BA21201A25BA21203A2387FFFE0B5FCA22D3A80A72E>I114 D116 +D<137C48B4141C26038F80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA781F +007001805BA2D8F03F1303140000005D5B017E1307A201FE5C5B150F1201495CA2151F00 +03EDC1C0491481A2153F1683EE0380A2ED7F07000102FF13005C01F8EBDF0F0000903807 +9F0E90397C0F0F1C90391FFC07F8903907F001F02A2979A731>I<017CEB01C048B4EB07 +F038038F80EA0707000E01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F13000070 +5BA2EAF03F91C712E012005B017E130116C013FE5B1503000115805BA2ED07001203495B +150EA25DA25D1578000114706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F0252979A7 +2A>I<137C48B4143826038F8013FCEA0707000E7F001E1401001C15F8EA3C0F12381503 +D8781F14F000701380A2D8F03F1307020013E012005B017E130F16C013FE5B151F120149 +1480A2153F000315005BA25D157EA315FE5D00011301EBF8030000130790387C1FF8EB3F +F9EB07E1EB00035DA21407000E5CEA3F80007F495AA24A5AD8FF0090C7FC143E007C137E +00705B387801F0383803E0381E0FC06CB4C8FCEA03F8263B79A72C>121 +D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fb cmbx12 12 33 +/Fb 33 119 df12 D46 D49 +DII<163FA25E5E5D5DA25D5D5D5D +A25D92B5FCEC01F7EC03E7140715C7EC0F87EC1F07143E147E147C14F8EB01F0EB03E013 +0714C0EB0F80EB1F00133E5BA25B485A485A485A120F5B48C7FC123E5A12FCB91280A5C8 +000F90C7FCAC027FB61280A531417DC038>I66 DII70 +D72 D77 +D82 +DI<903801FFE0011F13FE017F6D +7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7EA26F7FA36F7F6C5A6C5AEA00F0 +90C7FCA40203B5FC91B6FC1307013F13F19038FFFC01000313E0000F1380381FFE00485A +5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013EEBFFC03A1FFF80FC7F0007EBFF +F86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97 DIIIIIII<137C48B4FC4813804813C0A24813E0A56C +13C0A26C13806C1300EA007C90C7FCAAEB7FC0EA7FFFA512037EB3AFB6FCA518467CC520 +>I108 D<90277F8007FEEC0FFC +B590263FFFC090387FFF8092B5D8F001B512E002816E4880913D87F01FFC0FE03FF8913D +8FC00FFE1F801FFC0003D99F009026FF3E007F6C019E6D013C130F02BC5D02F86D496D7E +A24A5D4A5DA34A5DB3A7B60081B60003B512FEA5572D7CAC5E>I<90397F8007FEB59038 +3FFF8092B512E0028114F8913987F03FFC91388F801F000390399F000FFE6C139E14BC02 +F86D7E5CA25CA35CB3A7B60083B512FEA5372D7CAC3E>II<90397FC00FF8B590B57E02C314E002CF14F89139DFC03F +FC9139FF001FFE000301FCEB07FF6C496D13804A15C04A6D13E05C7013F0A2EF7FF8A4EF +3FFCACEF7FF8A318F017FFA24C13E06E15C06E5B6E4913806E4913006E495A9139DFC07F +FC02CFB512F002C314C002C091C7FCED1FF092C9FCADB67EA536407DAC3E>I<90387F80 +7FB53881FFE0028313F0028F13F8ED8FFC91389F1FFE000313BE6C13BC14F8A214F0ED0F +FC9138E007F8ED01E092C7FCA35CB3A5B612E0A5272D7DAC2E>114 +D<90391FFC038090B51287000314FF120F381FF003383FC00049133F48C7121F127E00FE +140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14C015F06C14FC6C800003806C15 +806C7E010F14C0EB003F020313E0140000F0143FA26C141F150FA27EA26C15C06C141FA2 +6DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E026E007FEC7FC232F7CAD2C +>IIII E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fc cmbx12 14.4 32 +/Fc 32 122 df12 D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13 +F0EAF800C7FCB3B3B3A6007FB712FEA52F4E76CD43>49 DI<91380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848 +C76C7ED803F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C7 +5AD801FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016 +FCEEFF80DA000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A270 +13FCA218FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C +4816E001F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D01 +1F1580010302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA216 +1F163F167FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC +0FC01580EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B48 +5A1207485A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43 +>III66 D<932601FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F +92B8EA803F0203DAE003EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC +494848C9FC4901F8824949824949824949824949824990CA7E494883A2484983485B1B7F +485B481A3FA24849181FA3485B1B0FA25AA298C7FC5CA2B5FCAE7EA280A2F307C07EA36C +7FA21B0F6C6D1980A26C1A1F6C7F1C006C6D606C6D187EA26D6C606D6D4C5A6D6D16036D +6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1F +F80203903AFFE001FFF0020091B612C0033F93C8FC030715FCDB007F14E0040101FCC9FC +525479D261>I +I80 +D<91260FFF80130791B500F85B010702FF5B011FEDC03F49EDF07F9026FFFC006D5A4801 +E0EB0FFD4801800101B5FC4848C87E48488149150F001F824981123F4981007F82A28412 +FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15F86CECFF8016FC6CEDFFC017F06C +16FC6C16FF6C17C06C836C836D826D82010F821303010082021F16801400030F15C0ED00 +7F040714E01600173F050F13F08383A200788200F882A3187FA27EA219E07EA26CEFFFC0 +A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A5A02F8EC7FF0903B1FFFC003FFE0 +486C90B65AD8FC0393C7FC48C66C14FC48010F14F048D9007F90C8FC3C5479D24B>83 +D<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F4919 +3F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A5 +53517BD05E>I86 D97 D<913801FFF8021FEBFF8091B612F0010315FC010F90 +38C00FFE903A1FFE0001FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F1380 +91C7FC486F1300705A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E +6E140F6CEE1F806C6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B5 +5A01001580023F49C7FC020113E033387CB63C>99 D<4DB47E0407B5FCA5EE001F1707B3 +A4913801FFE0021F13FC91B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5 +FC49487F4849143F484980485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA2 +6C7F5F6C6D5C7E6C6D5C6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF +6D90B5128F0101ECFE0FD9003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F +13FC49B6FC010715C04901817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E +48178048497F18C0488191C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6 +127FA27F7EA218E06CEE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F80 +6D6CECFF00D91FFEEB03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F0 +34387CB63D>I103 DI<137F497E00 +0313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3A6 +B612E0A51B547BD325>I108 +DII<913801FFE0021F13FE91B6 +12C0010315F0010F9038807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F4849 +6D7F4A147F48834890C86C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3 +003F18006D5DA26C5FA26C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE +011F90C7FC903A0FFF807FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I< +903A3FF001FFE0B5010F13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9 +FFE0EB1FFFC602806D7F92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A +0060A36118FFA2615F616E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FB +FE075B02F8B612E06F1480031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I< +90397FE003FEB590380FFF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013 +FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612 +FCA52F367CB537>114 D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307 +D81FE0130148487F4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15 +F86C14FF16C06C15F06C816C816C81C681013F1580010F15C01300020714E0EC003F0307 +13F015010078EC007F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC +7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB6 +35>I<143EA6147EA414FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FC +A426003FFEC8FCB3A9EE07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEB +FFF86D6C5B021F5B020313802A4D7ECB34>III121 +D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fd cmmi10 10.95 2 +/Fd 2 63 df<183818FC1703EF0FF8EF3FE0EFFF80933803FE00EE0FF8EE3FE0EEFF80DB +03FEC7FCED0FF8ED3FE0EDFF80DA03FEC8FCEC0FF8EC3FE0ECFF80D903FEC9FCEB0FF8EB +3FE0EBFF80D803FECAFCEA0FF8EA3FE0EA7F8000FECBFCA2EA7F80EA3FE0EA0FF8EA03FE +C66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0ED0F +F8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC17001838 +363678B147>60 D<126012F8B4FCEA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FC +EB01FF9038007FC0EC1FF0EC07FCEC01FF9138007FC0ED1FF0ED07FCED01FF9238007FC0 +EE1FF0EE07FCEE01FF9338007FC0EF1FF0EF07F8EF01FCA2EF07F8EF1FF0EF7FC0933801 +FF00EE07FCEE1FF0EE7FC04B48C7FCED07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7F +C04948C9FCEB07FCEB1FF0EB7FC04848CAFCEA07FCEA1FF0EA7FC048CBFC12FC12703636 +78B147>62 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fe cmsy10 10.95 1 +/Fe 1 16 df15 +D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Ff cmbx10 10.95 63 +/Ff 63 122 df<147CA4903803FF80011F13F8017F13FE48B6FC4815C048017C13E0D80F +F8EB1FF0D81FE0130701C0EB01F8D83F80EB00FCA2007F14030100EB07FE150F48141FA3 +1380A213C0ED0FFC01E0EB07F801F8EB01E0D87FFE90C7FCEBFFFC14FF6C14E015F86C80 +6C14FF16806C15C06C15E0C6FC6D14F0011F14F81307D9007F13FCA2EC7C7FED1FFED81F +80130FD83FC01307EA7FE0D8FFF01303A21501A401E014FC13C0D87F001303127E16F86C +14070180EB0FF0D81FC0EB1FE0D80FF0133F3A07FE7DFFC06CB612806CECFE006C6C5B01 +1F13F001031380D9007CC7FCA427497AC334>36 D<147C14FE497EA5260C00FE1360003F +EC01F8D87F80EB03FC01C0130701E0130F3AFFF87C3FFED87FFCEB7FFC01FE13FF263FFF +7D13F8000F90B512E000011500D8003F13F8010713C0A2013F13F848B6FC000F15E0003F +017D13F8267FFE7C13FC01FC137FD8FFF8EB3FFE3A7FE0FE0FFC01C0130701801303D83F +00EB01F8000CEC0060C6486C1300A56D5A147C27287AC334>42 D44 +DII<161C163E167EA216FE16FC150116F8A2150316F0A2150716E0 +150F16C0A2151F1680153F1600A25D157E15FE5DA214015DA214035D14075DA2140F5D14 +1F5DA2143F92C7FC5C147EA214FE5CA213015C13035CA213075C130F5CA2131F5C133F91 +C8FCA25B137EA213FE5B12015BA212035B12075BA2120F5B121F5BA2123F90C9FCA25A12 +7E12FE5AA25A1278275B7AC334>II<140F143F +5C495A130F48B5FCB6FCA313F7EAFE071200B3B3A8007FB612F0A5243C78BB34>I<9038 +03FF80013F13F890B512FE00036E7E4881260FF80F7F261FC0037F4848C67F486C6D7E6D +6D7E487E6D6D7EA26F1380A46C5A6C5A6C5A0007C7FCC8FC4B1300A25E153F5E4B5AA24B +5A5E4A5B4A5B4A48C7FC5D4A5AEC1FE04A5A4A5A9139FF000F80EB01FC495A4948EB1F00 +495AEB1F8049C7FC017E5C5B48B7FC485D5A5A5A5A5AB7FC5EA4293C7BBB34>I<903801 +FFE0010F13FE013F6D7E90B612E04801817F3A03FC007FF8D807F06D7E82D80FFC131F6D +80121F7FA56C5A5E6C48133FD801F05CC8FC4B5A5E4B5A4A5B020F5B902607FFFEC7FC15 +F815FEEDFFC0D9000113F06E6C7E6F7E6F7E6F7E1780A26F13C0A217E0EA0FC0487E487E +487E487EA317C0A25D491580127F49491300D83FC0495A6C6C495A3A0FFE01FFF86CB65A +6C5DC61580013F49C7FC010313E02B3D7CBB34>II<00071538D80FE0EB01F801FE133F90B6FC5E5E5E5E93C7FC5D +15F85D15C04AC8FC0180C9FCA9ECFFC0018713FC019F13FF90B67E020113E09039F8007F +F0496D7E01C06D7E5B6CC77FC8120F82A31780A21207EA1FC0487E487E12FF7FA21700A2 +5B4B5A6C5A01805C6CC7123F6D495AD81FE0495A260FFC075B6CB65A6C92C7FCC614FC01 +3F13F0010790C8FC293D7BBB34>II<121F7F13F890B712F0A45A17E017C0178017005E5E5A007EC7EA01F84B5A007C4A +5A4B5A4B5A93C7FC485C157E5DC7485A4A5AA24A5A140F5D141F143F5D147FA214FF92C8 +FC5BA25BA3495AA3130FA5131FAA6D5A6D5A6D5A2C3F7ABD34>I<903801FFE0010F13FC +013F13FF90B612C04801E07F489038003FF048486D7E000F6E7E485A6F7E123F48488081 +178012FFA217C0A517E0A4007F5CA4003F5C6C7E5D6C7E00075C3903FF80FB6C13FF6C6C +13F36D13C3010F018313C090380008031400A24B1380EA03F0487E486C1500487E4B5AA2 +5E151F4B5A495C6C48EBFFE049485B2607FC0F5B6CB6C7FC6C14FC6C14F06D13C0D90FFE +C8FC2B3D7CBB34>57 DI<007FBA12E0BB12F0A4003F19E0CEFCB0003FBA12E0BB12F0A46C19E0441C7AA4 +51>61 D<16FCA24B7EA24B7EA34B7FA24B7FA34B7FA24B7FA34B7F157C03FC7FEDF87FA2 +020180EDF03F0203804B7E02078115C082020F814B7E021F811500824A81023E7F027E81 +027C7FA202FC814A147F49B77EA34982A2D907E0C7001F7F4A80010F835C83011F8391C8 +7E4983133E83017E83017C81B500FC91B612FCA5463F7CBE4F>65 +DI<9226 +07FFC0130E92B500FC131E020702FF133E023FEDC07E91B7EAE1FE01039138803FFB4990 +39F80003FF4901C01300013F90C8127F4948151FD9FFF8150F48491507485B4A15034817 +01485B18004890CAFC197E5A5B193E127FA349170012FFAC127F7F193EA2123FA27F6C18 +7E197C6C7F19FC6C6D16F86C6D150119F06C6D15036C6DED07E0D97FFEED0FC06D6CED3F +80010F01C0ECFF006D01F8EB03FE6D9039FF801FFC010091B55A023F15E0020715800200 +02FCC7FC030713C03F407ABE4C>IIII72 DI75 +DIIIII82 D<903A03FFC001C0011FEBF803017FEBFE0748B6128F48 +15DF48010013FFD80FF8130F48481303497F4848EB007F127F49143F161F12FF160FA27F +1607A27F7F01FC91C7FCEBFF806C13F8ECFFC06C14FCEDFF806C15E016F86C816C816C81 +6C16806C6C15C07F010715E0EB007F020714F0EC003F1503030013F8167F163F127800F8 +151FA2160FA27EA217F07E161F6C16E06D143F01E015C001F8EC7F8001FEEB01FF9026FF +E00713004890B55A486C14F8D8F81F5CD8F00314C027E0003FFEC7FC2D407ABE3A>I<00 +3FB912FCA5903BFE003FFE003FD87FF0EE0FFE01C0160349160190C71500197E127EA200 +7C183EA400FC183F48181FA5C81600B3AF010FB712F8A5403D7CBC49>IIII<007FB6 +013FB512F0A5D8001F01C0D9003FC7FC6D6D147E18FE6D6D5C6D6D495A6D4B5A6F13076D +6D5C6E6C495A4D5A6EEB803F6E01C090C8FC6E147E705A6E13F16EEBF9F86EEBFBF0EEFF +E0806F5B5F816F7F81836F7F81834B7F4B7F5D83DB3F3F7FED7E1F03FE804B6C7F4A486C +7F4A487E0207814B6C7F4A487E4A4880023F6E7E92C76C7F027E804A8201016F7F4A6E7F +495A49486E7F010F6F7F4A80B600C0017F90B5FCA5483E7DBD4F>I<003FB812E0A59126 +E0001F13C091C7148001FC5C01F04A1300495D4914FF4848495B5F90C75A4B5B007E5E5D +4B5B007C5E5D4B90C7FC5E15FFC7485B5E4A5B5C5E4A5B5C5E4A90C8FC5C5D4A5A5B4BEB +01F0495B5B495B5D491503494914E092C7FC5B495A4A14075A4849140F5C48161F484914 +3F4A147F4816FF48495B91C7000713C048157FB9FCA5343E7ABD40>90 +DI93 D<903807FFC0013F13F848B6FC48812607FE037F260FF8007F6DEB3FF0 +486C806F7EA36F7EA26C5A6C5AEA01E0C8FC153F91B5FC130F137F3901FFFE0F4813E000 +0F1380381FFE00485A5B485A12FF5BA4151F7F007F143F6D90387BFF806C6C01FB13FE39 +1FFF07F36CEBFFE100031480C6EC003FD91FF890C7FC2F2B7DA933>97 +D<13FFB5FCA512077EAFEDFFE0020713FC021FEBFF80027F80DAFF8113F09139FC003FF8 +02F06D7E4A6D7E4A13074A80701380A218C082A318E0AA18C0A25E1880A218005E6E5C6E +495A6E495A02FCEB7FF0903AFCFF01FFE0496CB55AD9F01F91C7FCD9E00713FCC7000113 +C033407DBE3A>IIIII<903A03FF8007F0 +013F9038F83FF8499038FCFFFC48B712FE48018313F93A07FC007FC34848EB3FE1001FED +F1FC4990381FF0F81700003F81A7001F5DA26D133F000F5D6C6C495A3A03FF83FF8091B5 +C7FC4814FC01BF5BD80F03138090CAFCA2487EA27F13F06CB6FC16F016FC6C15FF17806C +16C06C16E01207001F16F0393FE000034848EB003F49EC1FF800FF150F90C81207A56C6C +EC0FF06D141F003F16E001F0147FD81FFC903801FFC02707FF800F13006C90B55AC615F8 +013F14E0010101FCC7FC2F3D7DA834>I<13FFB5FCA512077EAFED1FF8EDFFFE02036D7E +4A80DA0FE07F91381F007F023C805C4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A5333F7C +BE3A>II<13FFB5FCA512077EB092380FFFFEA5DB01FEC7FC4B5A +ED07F0ED1FE04B5A4B5A4BC8FCEC03FC4A5A4A5A141F4A7EECFFFCA2818102E77F02C37F +148102007F826F7E6F7E151F6F7E826F7F6F7F816F7FB5D8FC07EBFFC0A5323F7DBE37> +107 D<13FFB5FCA512077EB3B3AFB512FCA5163F7CBE1D>I<01FFD91FF8ECFFC0B590B5 +010713F80203DAC01F13FE4A6E487FDA0FE09026F07F077F91261F003FEBF8010007013E +DAF9F0806C0178ECFBC04A6DB4486C7FA24A92C7FC4A5CA34A5CB3A4B5D8FE07B5D8F03F +EBFF80A551297CA858>I<01FFEB1FF8B5EBFFFE02036D7E4A80DA0FE07F91381F007F00 +07013C806C5B4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A533297CA83A>II<01FFEBFFE0B5000713FC021FEBFF80027F80DA +FF8113F09139FC007FF8000701F06D7E6C496D7E4A130F4A6D7E1880A27013C0A38218E0 +AA4C13C0A318805E18005E6E5C6E495A6E495A02FCEBFFF0DAFF035B92B55A029F91C7FC +028713FC028113C00280C9FCACB512FEA5333B7DA83A>I<3901FE01FE00FF903807FF80 +4A13E04A13F0EC3F1F91387C3FF8000713F8000313F0EBFFE0A29138C01FF0ED0FE09138 +8007C092C7FCA391C8FCB3A2B6FCA525297DA82B>114 D<90383FFC1E48B512BE000714 +FE5A381FF00F383F800148C7FC007E147EA200FE143EA27E7F6D90C7FC13F8EBFFE06C13 +FF15C06C14F06C806C806C806C80C61580131F1300020713C014000078147F00F8143F15 +1F7EA27E16806C143F6D140001E013FF9038F803FE90B55A15F0D8F87F13C026E00FFEC7 +FC222B7DA929>IIII120 DI E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fg cmr10 10.95 73 +/Fg 73 123 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907 +F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7 +FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11 +DII<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F13 +3F391E600F3000001300A401E01370491360A3000114E04913C000031301010013804813 +03000EEB070048130E0018130C0038131C003013181C1C7DBE2D>34 +D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A +120E5A1218123812300B1C79BE19>39 D<1430147014E0EB01C0EB03801307EB0F00131E +133E133C5B13F85B12015B1203A2485AA2120F5BA2121F90C7FCA25AA3123E127EA6127C +12FCB2127C127EA6123E123FA37EA27F120FA27F1207A26C7EA212017F12007F13787F13 +3E131E7FEB07801303EB01C0EB00E014701430145A77C323>I<12C07E12707E7E121E7E +6C7E7F12036C7E7F12007F1378137CA27FA2133F7FA21480130FA214C0A3130714E0A613 +0314F0B214E01307A614C0130FA31480A2131F1400A25B133EA25BA2137813F85B12015B +485A12075B48C7FC121E121C5A5A5A5A145A7BC323>I<121EEA7F8012FF13C0A213E0A3 +127FEA1E601200A413E013C0A312011380120313005A120E5A1218123812300B1C798919 +>44 DI<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919> +I48 DIII<150E151E153EA2157EA215FE1401A21403EC077E140614 +0E141CA214381470A214E0EB01C0A2EB0380EB0700A2130E5BA25B5BA25B5B1201485A90 +C7FC5A120E120C121C5AA25A5AB8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<0006 +1403D80780131F01F813FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE9038 +0FFF8090383E03E090387001F8496C7E49137E497F90C713800006141FC813C0A216E015 +0FA316F0A3120C127F7F12FFA416E090C7121F12FC007015C012780038EC3F80123C6CEC +7F00001F14FE6C6C485A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D> +II<1238123C123F90B612FCA316F8 +5A16F016E00078C712010070EC03C0ED078016005D48141E151C153C5DC8127015F04A5A +5D14034A5A92C7FC5C141EA25CA2147C147814F8A213015C1303A31307A3130F5CA2131F +A6133FAA6D5A0107C8FC26407BBD2D>III<121EEA7F80A2 +EAFFC0A4EA7F80A2EA1E00C7FCB3121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619 +>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121E127FEAFF80A213C0A4127F12 +1E1200A412011380A3120313005A1206120E120C121C5A1230A20A3979A619>I<007FB9 +12E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A26C18E03C167BA147>61 +D<15074B7EA34B7EA34B7EA34B7EA34B7E15E7A2913801C7FC15C3A291380381FEA34AC6 +7EA3020E6D7EA34A6D7EA34A6D7EA34A6D7EA34A6D7EA349486D7E91B6FCA24981913880 +0001A249C87EA24982010E157FA2011E82011C153FA2013C820138151FA2017882170F13 +FC00034C7ED80FFF4B7EB500F0010FB512F8A33D417DC044>65 DIIIIIIII76 DIIII82 +DI<003FB91280A3903AF0007FE00101 +8090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00E0A5C81600 +B3B14B7E4B7E0107B612FEA33B3D7DBC42>IIII89 D91 D<486C13C00003130101001380481303000EEB070048130E0018130C0038131C00 +3013180070133800601330A300E01370481360A400CFEB678039FFC07FE001E013F0A300 +7F133FA2003F131F01C013E0390F0007801C1C73BE2D>II97 +DI<49B4FC010F13E090383F00F8017C131E4848131F +4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3 +003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E6C6C137890383F01 +F090380FFFC0D901FEC7FC222A7DA828>II +II<167C903903F801 +FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC0600000F6EC7FC +49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E03903FE0FC026071F +FFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15E06C810003813A +0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E007E157E6C5D6C6C49 +5A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D7EA82D>III<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC147FEB7FFFA313 +017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03F0381E07C0380F +FF803801FC00185185BD1C>II +I<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B7803F03C01F80007 +903BE001F87000FC2603F9C06D487F000101805C01FBD900FF147F91C75B13FF4992C7FC +A2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C>I<3901F801FE00FF +903807FFC091381E07E091387803F000079038E001F82603F9C07F0001138001FB6D7E91 +C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14FF010713E090381F +81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0000F15F04848EB01F8A2 +003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6C +EB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFFF0010090C7FC282A +7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F03A07FFC001FC6C49 +6C7E6C90C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1FE0A2EE3F +C06D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0DA3FFFC7FCEC07F8 +91C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C90381F80F090397F0038 +7C01FC131CD803F8130E4848EB0FFC150748481303121F485A1501485AA448C7FCAA6C7E +A36C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E137990383F81F190380FFF +C1903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807E000FFEB1FF8EC78 +7CECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A35BB3A5487EB512FE +A31F287EA724>I<90383FC0603901FFF8E03807C03F381F000F003E1307003C1303127C +0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F6C1480000114C0 +D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15F07E14016C14E06C +EB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<131CA6133CA4137C +A213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A912009038FE01C0A2 +EB7F03013F138090381F8700EB07FEEB01F81B397EB723>IIIIII<001FB61280A2EBE0000180140049485A001E495A121C4A5A003C +495A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A90393FC00380A2EB +7F80EBFF005A5B484813071207491400485A48485BA248485B4848137F00FF495A90B6FC +A221277EA628>I E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fh cmbx12 24.88 14 +/Fh 14 86 df[97 137 119 262 116 48 D[82 135 111 262 116 I[<93381FFFF00303B612E0033F15FC4AB812C0020717F002 +1F17FC027F17FF49BA12C0010719F049DA800F814901F8C715FE4901C0021F804948C800 +078149486F814801F00300814849708048018070804890CA6C806E70804813F002FC7080 +486D70158080486E6F15C0817315E081B6836F19F0A3861DF8A56C5CA26C5CA26C5C6C91 +CAFC6C5B000113F826007FE01AF090CCFC62A21DE0A297B6FC1DC0A24F1580A24F150064 +A24F5C64614F5C644F5C644F91C7FC96B55A4E5C634E5C4E5C4E5C634E49C8FC4E5B4E5B +95B55A4D14C0624D91C9FC4D13FC4D5B4D5B4D13C04D5B94B5CAFC4C13FC4C5B4C5B4C49 +ED0FF84C13804C90C9FC4C5A4C48EE1FF04B5B4B13E04B5B4B5B4B90CAFCDB3FFC173F4B +4818E04B5A4A5B4A49177F4A90CBFC4A4818FF5D4A485F4A48053F13C04ABBFC91BCFC5B +5B5B5B491B805B5B90BDFC5A5A5A5A481C005A5ABEFCA464A4>93 +135 117 262 116 I[<4CB5FC047F14F80307B7FC031F16C0037F16F04AB812FC020717 +FF021F18C04ADAE0078091B548C7804902F0023F7F494A6E7F494A6E7F4991C86C7F4971 +8049496F8049496F8090B55A48737F4B84488548874B824887A24887A27414805A4B19C0 +A25A1DE0A31DF0B6FCA37414F8A61DFCA7626C1CFEA56C61A36C8062A27E627EA26C6E93 +B6FC7E616C6EED03F77F6D6DED07E76D6D150F6D6DED1FC76D6E143F6D6EEC7F876D6E90 +3801FF076D02F8D907FE15FC023F9039FF803FFC6E91B512F8020716F0020116E06E6C15 +80031F1500030314F8DB000F01C016F893C9FC62A21DF0A41DE0A35014C0EB0FFE90383F +FF80496D198090B57E486E190062486E60A2486E4C5BA26497B5FC64A24F5C4F5C5D4F5C +6C4A4B91C7FC634B4B5B6C4A4B5B4B4B5B6C49C9B55A02E003035CD97FF84B5C6E031F91 +C8FC6DB4037F5B6D01E049B512F86D01FF011F5C6D91B712C06D95C9FC010017FC023F16 +F0020F16C002034BCAFCDA007F14E0030301FCCBFC>95 137 118 +262 116 57 DI[158 +145 120 272 175 65 D[156 142 120 269 178 68 D[74 142 122 269 87 73 D[121 142 +120 269 140 76 D[203 142 120 269 220 +I[<97B512F0077FECFFE00607B712FE067FEEFFE00503B912FC051FF0FF80057F19E004 +03BB12FC040F9226E0007F14FF043F02FCC7000315C04C02E0DA007F804BB60080031F14 +F8030702FCC9000314FE4B4A70804B02E0706C80037F0280051F14E092B6CB6C804A4A72 +804A4A72804A02F00600804A4A737F4A4A73804A8B4A4A738091B6CD6C80494A7480A249 +4A7480494A7480498C4C86498D4C87498D494A7580A290B68B4C87488EA24892CF6C80A3 +488E4B88A2488EA3484A761580A34823C0A5484A7615E0A7B621F0B36C23E0A26F64A56C +23C0A46F646C2380A36C23006F64A26C6AA270636C6AA26C6A70636C6A70636D69A26D6E +98B65AA26D6E505DA26D6E5092C7FC6D6870626D6E505C6D686D6F4F5C6E6E4F5C6E6E4F +5CA26E6E96B65A6E6E4E92C8FC6E6E4E5C020102FF060F14F86E6F4D5C6F6E4D5C6F02F0 +94B65A030F6E4C92C9FC6F02FE04075C03016E6C031F14F86F03F092B65A043F02FE0207 +15C0040FDAFFF090B7CAFC040392B812FC04001AF0051F198005074ECBFCDD007F17E006 +0F94CCFCDE007F15E0070002F0CDFC>148 146 115 271 175 79 +D[163 144 120 269 +173 82 D[<000FC312F8A6488EA304C0C7001F4AC7120103F8C8F0000F03C01C0192C973 +7E02FC1E1F4A1E0702E08A4A8A4A8A4890CA757EA249203F49201FA349200FA2492007A4 +492003007F8EA4498CA848487A1380A6CC99C7FCB3B3B3B3AA030FBD12FCA9>145 +140 120 267 162 84 D[162 144 120 269 179 +I E +%EndDVIPSBitmapFont +end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%PaperSize: A4 + +%%EndSetup +%%Page: 1 1 +1 0 bop 536 449 a Fh(TUTORIAL)76 b(:)h(AMD)i(2901)411 +661 y Fg(W)-8 b(elcome)32 b(to)f(the)g Ff(ALLIANCE)d +Fg(CAD)j(system.)270 774 y(The)36 b(goal)g(of)h(this)e(tutorial)g(is)g +(to)i(presen)m(t)f(a)h(t)m(ypical)e(design-\015o)m(w)h(of)g(a)g(simple) +f(4)h(bits)270 887 y(pro)s(cessor)30 b(\(AMD2901\),)k(using)29 +b(the)h Ff(ALLIANCE)f Fg(to)s(ols.)411 1000 y(The)h(to)s(ols)g(used)g +(here)g(are)h(:)406 1213 y Fe(\017)46 b Ff(asim)m(ut)30 +b Fg(:)40 b Ff(VHDL)30 b Fg(compiler)f(and)h(sim)m(ulator.)406 +1400 y Fe(\017)46 b Ff(genlib)31 b Fg(:)41 b(Net-List)30 +b(capture.)406 1588 y Fe(\017)46 b Ff(scr)31 b Fg(:)41 +b(Standard)29 b(Cell)g(placer)h(and)g(router.)406 1776 +y Fe(\017)46 b Ff(ring)31 b Fg(:)41 b(Core)30 b(to)h(pads)f(router.)406 +1963 y Fe(\017)46 b Ff(lynx)31 b Fg(:)41 b(Sym)m(b)s(olic)28 +b(la)m(y)m(out)j(extractor.)406 2151 y Fe(\017)46 b Ff(lvx)31 +b Fg(:)41 b(Net-List)30 b(comparator.)406 2338 y Fe(\017)46 +b Ff(druc)31 b Fg(:)41 b(Design)30 b(rule)f(c)m(hec)m(k)m(er.)406 +2526 y Fe(\017)46 b Ff(graal)31 b Fg(:)40 b(Graphic)30 +b(la)m(y)m(out)h(editor.)406 2714 y Fe(\017)46 b Ff(y)m(agle)31 +b Fg(:)41 b(F)-8 b(unctional)29 b(abstractor.)406 2901 +y Fe(\017)46 b Ff(pro)s(of)31 b Fg(:)41 b(F)-8 b(ormal)30 +b(pro)s(of)g(b)s(et)m(w)m(een)h(t)m(w)m(o)h(b)s(eha)m(vioral)d +(descriptions.)406 3089 y Fe(\017)46 b Ff(s2r)31 b Fg(:)41 +b(Sym)m(b)s(olic)28 b(to)j(real)f(la)m(y)m(out)i(con)m(v)m(erter.)406 +3277 y Fe(\017)46 b Ff(tas)30 b Fg(:)41 b(Timing)28 b(Analysis)h +(static.)270 3489 y(A)m(t)h(an)m(y)f(time)f(y)m(ou)h(can)g(get)h +(information)d(on)i(an)m(y)g Ff(ALLIANCE)e Fg(to)s(ol)i(using)e(the)i +(com-)270 3602 y(mand)h(:)p 270 3740 1051 4 v 270 3856 +4 117 v 329 3828 a Fd(>)k Ff(man)g Fd(<)p Ff(to)s(ol)h(name)p +Fd(>)p 1318 3856 V 270 3859 1051 4 v 270 4054 a Fg(All)e(the)i(a)m(v)-5 +b(ailable)34 b(do)s(cumen)m(tation)g(is)f(describ)s(ed)g(in)g(the)h +Ff(README)h Fg(\014le.)52 b(This)33 b(tu-)270 4167 y(torial)38 +b(do)s(esn't)g(con)m(tain)h(a)g(description)d(of)j(the)f +Ff(AMD2901)p Fg(,)43 b(but)37 b(the)i(metho)s(dology)270 +4280 y(used)k(in)f Ff(ALLIANCE)g Fg(to)j(pro)s(duce)d(it.)81 +b(Nev)m(ertheless,)47 b(y)m(ou)d(will)d(\014nd)i(in)f(the)i(\014le)270 +4392 y Ff(AMD2901)p 742 4392 32 4 v 39 w(do)s(c.ps.tar)p +Fg(,)33 b(the)e(original)e(data-sheet)k(of)f(the)f(circuit.)42 +b(T)-8 b(o)32 b(uncompress)270 4505 y(the)f(sheets,)g(use)f(the)g +Ff(UNIX)g Fg(command)h(:)p 270 4630 1461 4 v 270 4871 +4 242 v 329 4718 a Fd(>)p Ff(tar)j(xvf)h(AMD2901)p 1218 +4718 32 4 v 39 w(do)s(c.ps.tar)329 4829 y Fd(>)p Ff(uncompress)g +(AMD2901*.Z)p 1728 4871 4 242 v 270 4874 1461 4 v 270 +4942 a Fg(A)20 b(GIF)h(format)g(of)f(the)h(data-sheet)g(is)f(also)g(a)m +(v)-5 b(ailable)20 b(in)f(the)h(\014le)f Ff(AMD2901)p +2965 4942 32 4 v 40 w(do)s(c.gif.tar)p Fg(.)270 5055 +y(The)30 b(design-\015o)m(w)g(used)f(in)g(this)g(tutorial)h(is)f(comp)s +(osed)i(of)f(\014v)m(e)h(steps)f(:)406 5242 y Fe(\017)46 +b Ff(Step)35 b(1)30 b Fg(:)41 b(Beha)m(vioural)30 b(description)f(\()p +Ff(VHDL)h Fg(mo)s(del\))g(and)f(sim)m(ulation.)406 5430 +y Fe(\017)46 b Ff(Step)e(2)38 b Fg(:)57 b(Generation)38 +b(and)g(v)-5 b(alidation)37 b(of)h(the)h(structural)e(description)f +(\(gate)497 5543 y(net-list\).)1807 5841 y(1)p eop +%%Page: 2 2 +2 1 bop 406 399 a Fe(\017)46 b Ff(Step)35 b(3)30 b Fg(:)41 +b(Ph)m(ysical)29 b(design)h(la)m(y)m(out)h(\(Place)g(and)f(route\).)406 +586 y Fe(\017)46 b Ff(Step)35 b(4)30 b Fg(:)41 b(Extraction)31 +b(and)e(v)m(eri\014cation.)406 774 y Fe(\017)46 b Ff(Step)35 +b(5)30 b Fg(:)41 b(Timing)28 b(analysis.)406 961 y Fe(\017)46 +b Ff(Step)35 b(6)30 b Fg(:)41 b(Chip)28 b(\014nishing.)411 +1149 y(In)22 b(order)g(to)h(build)c(the)k(c)m(hip)e(in)h(ab)s(out)g(t)m +(w)m(o)h(hours,)h(all)d(the)i(source)f(\014les)f(are)i(pro)m(vided)270 +1262 y(with)29 b(this)g(tutorial)h(:)406 1450 y Fe(\017)46 +b Ff(amd.vb)s(e)30 b Fg(:)40 b Ff(VHDL)31 b Fg(b)s(eha)m(vioural)d(mo)s +(del.)406 1637 y Fe(\017)46 b Ff(pattern.pat)29 b Fg(:)41 +b(Sim)m(ulation)28 b(P)m(atterns.)406 1825 y Fe(\017)46 +b Ff(c)m(hip.c)32 b Fg(:)40 b(Chip)29 b(structural)g(description.)406 +2012 y Fe(\017)46 b Ff(c)m(hip.rin)32 b Fg(:)40 b(P)m(ads)31 +b(placemen)m(t)f(\(for)h Ff(ring)p Fg(\).)406 2200 y +Fe(\017)46 b Ff(heart.scr)31 b Fg(:)41 b(Connectors)30 +b(placemen)m(t)h(\(for)f Ff(scr)p Fg(\).)406 2388 y Fe(\017)46 +b Ff(c)m(hip.inf)31 b Fg(:)41 b(Registers)31 b(renaming)e(\(for)h +Ff(desb)p Fg(\).)411 2575 y(Y)-8 b(ou)24 b(will)c(use)j(the)h +Ff(ALLIANCE)d Fg(to)s(ols)i(to)h(v)-5 b(alidate)23 b(these)h(input)d +(\014les)h(and)h(to)h(build)270 2688 y(the)31 b(ph)m(ysical)e(la)m(y)m +(out.)41 b(The)30 b(output)g(is)f(a)i Ff(CIF)e Fg(la)m(y)m(out)j +(\014le)d(ready)h(for)h(the)f(foundry)-8 b(.)411 2801 +y(T)g(o)31 b(build)c(the)k(c)m(hip)e(y)m(ou)i(can)g(:)406 +2989 y Fe(\017)46 b Fg(-)31 b(run)e(the)h Ff(UNIX)h Fg(commands)f(in)f +(the)h(order)g(indicated)f(b)m(y)h(this)g(tutorial.)406 +3176 y Fe(\017)46 b Fg(-)29 b(build)c(automatically)j(the)h(en)m(tire)f +Ff(AMD2901)34 b(CHIP)28 b Fg(using)f(the)i(command)f(:)p +497 3314 461 4 v 497 3431 4 117 v 556 3402 a Fd(>)34 +b Ff(mak)m(e)p 955 3431 V 497 3434 461 4 v 497 3628 a +Fg(If)d(y)m(ou)g(w)m(an)m(t)h(to)g(start)g(again)f(this)f(example)h +(from)f(the)h(b)s(egining,)f(y)m(ou)h(just)g(ha)m(v)m(e)497 +3741 y(to)g(t)m(yp)s(e)g(:)p 497 3866 728 4 v 497 4074 +4 209 v 556 3954 a Fd(>)j Ff(mak)m(e)g(clean)556 4045 +y Fd(>)g Ff(mak)m(e)p 1222 4074 V 497 4077 728 4 v 411 +4233 a Fg(All)h Ff(ALLIANCE)g Fg(to)s(ols)h(use)g(a)h(set)g(of)g +Ff(UNIX)f Fg(en)m(vironmen)m(t)g(v)-5 b(ariables.)57 +b(These)270 4346 y(v)-5 b(ariables)29 b(are)i(set)g(b)m(y)f(the)h +Ff(UNIX)f Fg(command)g(\\exp)s(ort".)p 270 4470 4767 +4 v 270 4807 4 337 v 329 4557 a Fd(>)k Ff(MBK)p 695 4557 +32 4 v 38 w(W)m(ORK)p 1077 4557 V 38 w(LIB=.)329 4654 +y Fd(>)g Ff(MBK)p 695 4654 V 38 w(CA)-9 b(T)g(A)p 1022 +4654 V 38 w(LIB=.:/$ALLIANCE)p 2031 4654 V 37 w +(TOP/cells/sclib/prol10:/$ALLIANCE)p 3813 4654 V 40 w +(TOP/cells/ring/padsym)m(b)329 4764 y Fd(>)34 b Ff(exp)s(ort)h(MBK)p +1030 4764 V 38 w(W)m(ORK)p 1412 4764 V 38 w(LIB)g(MBK)p +1917 4764 V 38 w(CA)-9 b(T)g(A)p 2244 4764 V 37 w(LIB)p +5033 4807 4 337 v 270 4810 4767 4 v 406 4977 a Fe(\017)46 +b Ff(MBK)p 758 4977 32 4 v 38 w(CA)-9 b(T)g(A)p 1085 +4977 V 38 w(LIB)48 b(:)41 b Fg(This)f(v)-5 b(ariable)40 +b(de\014nes)h(all)g(paths)g(to)h(the)g(directories)497 +5090 y(con)m(taining)30 b(the)h Ff(ALLIANCE)e Fg(prede\014ned)f(cell)i +(libraries.)406 5277 y Fe(\017)46 b Ff(MBK)p 758 5277 +V 38 w(W)m(ORK)p 1140 5277 V 38 w(LIB)41 b(:)35 b Fg(This)f(v)-5 +b(ariable)34 b(de\014nes)g(the)i(w)m(orking)e(directory)h(:)51 +b(all)497 5390 y(user)30 b(\014les)f(will)f(b)s(e)i(written)f(in)g +(this)g(directory)-8 b(.)1807 5841 y(2)p eop +%%Page: 3 3 +3 2 bop 270 399 a Fg(Some)38 b(of)g(the)g(path)g(names)f(ha)m(v)m(e)j +(to)e(b)s(e)f(mo)s(di\014ed)f(in)h(order)g(to)i(corresp)s(ond)d(to)j(y) +m(our)270 511 y(particular)33 b(installation)g(of)i(Alliance,)g(in)e +(this)h(tutorial)g(w)m(e)h(will)d(assume)j(that)g(the)g(di-)270 +624 y(rectory)g(structure)e(of)i(the)f(sources)g(\014les)f(has)h(not)g +(b)s(een)g(altered)g(In)f(this)g(tutorial,)i(the)270 +737 y(commands)c(whic)m(h)g(are)h(inside)d([)j(])g(are)g(preset.)45 +b(If)31 b(y)m(ou)h(sta)m(y)h(in)d(the)i(same)g(shell)e(during)270 +850 y(the)i(making)g(of)g(the)g Ff(AMD2901)p Fg(,)i(y)m(ou)e(don't)g +(ha)m(v)m(e)i(to)e(set)h(again)f(these)g(en)m(vironmen)m(t)270 +963 y(v)-5 b(ariables.)270 1249 y Fc(1)135 b(Beha)l(vioural)46 +b(sp)t(eci\014cation)270 1456 y Fb(1.1)112 b(Beha)m(vioural)37 +b(mo)s(del)270 1627 y Fg(The)31 b(circuit)f(b)s(eha)m(viour)g(is)h +(describ)s(ed)e(in)i(the)g(amd.vb)s(e)g(\014le)g(using)f(the)i +Ff(ALLIANCE)270 1740 y(VHDL)23 b Fg(subset)g(\(see)i +Fa(man)i(vhd)5 b(l)24 b Fg(and)f Fa(man)k(vb)-5 b(e)p +Fg(\).)38 b(Y)-8 b(ou)24 b(m)m(ust)f(run)f(the)i Ff(VHDL)f +Fg(compiler)270 1853 y(to)31 b(v)-5 b(alidate)30 b(the)h +Ff(VHDL)f Fg(\014le)f(syn)m(tax.)p 270 1978 4855 4 v +270 2442 4 464 v 329 2071 a Ff([)p Fd(>)34 b Ff(MBK)p +724 2071 32 4 v 38 w(W)m(ORK)p 1106 2071 V 38 w(LIB=.])329 +2187 y([)p Fd(>)g Ff(MBK)p 724 2187 V 38 w(CA)-9 b(T)g(A)p +1051 2187 V 38 w(LIB=.:/$ALLIANCE)p 2060 2187 V 37 w +(TOP/cells/sclib/prol10:/$ALLIANCE)p 3842 2187 V 40 w +(TOP/cells/ring/padsym)m(b])329 2302 y([)p Fd(>)34 b +Ff(exp)s(ort)h(MBK)p 1059 2302 V 38 w(CA)-9 b(T)g(A)p +1386 2302 V 38 w(LIB)34 b(MBK)p 1890 2302 V 39 w(W)m(ORK)p +2273 2302 V 37 w(LIB])329 2413 y Fd(>)g Ff(asim)m(ut)g(-b)h(-c)g(amd)p +5121 2442 4 464 v 270 2445 4855 4 v 406 2601 a Fe(\017)46 +b Ff(amd)30 b Fg(is)f(the)i(\014lename)e(of)i(the)f(b)s(eha)m(vioural)f +(description)f(\()p Ff(amd.vb)s(e)p Fg(\).)406 2788 y +Fe(\017)46 b Ff(-b)31 b Fg(means)f(that)h(the)f(\014le)g(is)f(a)i(pure) +e(b)s(eha)m(vioural)g(description.)406 2976 y Fe(\017)46 +b Ff(-c)31 b Fg(stands)f(for)h(compilation)e(only)h(\(compilabilit)m(y) +e(is)i(c)m(hec)m(k)m(ed,)j(no)d(sim)m(ulation)f(is)497 +3089 y(p)s(erformed\).)270 3332 y Fb(1.2)112 b(Sim)m(ulation)35 +b(patterns)270 3504 y Fg(As)28 b(y)m(ou)h(ha)m(v)m(e)g(sp)s(eci\014ed)e +(a)h(formal)g(sp)s(eci\014cation,)g(y)m(ou)g(ha)m(v)m(e)i(to)f +(de\014ne)e(a)i(set)g(of)f(sim)m(ula-)270 3617 y(tion)e(patterns.)39 +b(The)26 b(same)h(patterns)f(will)d(b)s(e)j(used)g(to)h(v)-5 +b(alidate)25 b(eac)m(h)j(design)d(step)h(from)270 3730 +y(sp)s(eci\014cation)j(to)i(ph)m(ysical)e(la)m(y)m(out.)270 +3843 y(The)h(\014le)f Ff(pattern.pat)g Fg(is)h(giv)m(en)g(as)h(an)f +(example.)270 4086 y Fb(1.3)112 b(Sim)m(ulation)270 4258 +y Fg(Y)-8 b(ou)33 b(ha)m(v)m(e)g(no)m(w)g(a)f(logical)g(description)f +(of)h(y)m(our)g(circuit,)g(and)g(a)g(list)f(of)i(patterns.)46 +b(Y)-8 b(ou)270 4371 y(can)28 b(run)f(the)h(zero-dela)m(y)h(VHDL)g(sim) +m(ulator)d Ff(asim)m(ut)p Fg(.)39 b(Y)-8 b(ou)29 b(ha)m(v)m(e)g(to)g +(set)f(up)f(some)h(new)270 4484 y(en)m(vironmen)m(t)i(v)-5 +b(ariables)29 b(sp)s(eci\014c)g(to)i Ff(asim)m(ut)p Fg(.)p +270 4513 1239 4 v 270 4734 4 221 v 329 4600 a Fd(>)j +Ff(VH)p 601 4600 32 4 v 38 w(MAXERR=10)329 4691 y Fd(>)g +Ff(exp)s(ort)h(VH)p 936 4691 V 37 w(MAXERR)p 1506 4734 +4 221 v 270 4737 1239 4 v 406 4904 a Fe(\017)46 b Ff(VH)p +664 4904 32 4 v 38 w(MAXERR)21 b Fg(:)f(The)g(maxim)m(um)f(n)m(um)m(b)s +(er)g(of)i(errors)e(accepted)j(b)s(efore)e Ff(asim)m(ut)497 +5017 y Fg(stops)31 b(sim)m(ulation.)p 411 5145 1164 4 +v 411 5402 4 257 v 470 5239 a Fd(>)j Ff(VH)p 742 5239 +32 4 v 38 w(P)-9 b(A)g(TSFX=pat])470 5354 y Fd(>)34 b +Ff(exp)s(ort)h(VH)p 1077 5354 V 38 w(P)-9 b(A)g(TSFX])p +1571 5402 4 257 v 411 5405 1164 4 v 406 5576 a Fe(\017)46 +b Ff(VH)p 664 5576 32 4 v 38 w(P)-9 b(A)g(TSFX)31 b Fg(the)f(extension) +g(of)h(sim)m(ulation)d(patterns)j(\014le.)1807 5841 y(3)p +eop +%%Page: 4 4 +4 3 bop 411 311 4855 4 v 411 1020 4 710 v 470 404 a Ff([)p +Fd(>)34 b Ff(VH)p 771 404 32 4 v 38 w(MAXERR=10])470 +519 y([)p Fd(>)g Ff(VH)p 771 519 V 38 w(P)-9 b(A)g(TSFX=pat])470 +635 y([)p Fd(>)34 b Ff(MBK)p 865 635 V 38 w(W)m(ORK)p +1247 635 V 38 w(LIB=.])470 751 y([)p Fd(>)g Ff(MBK)p +865 751 V 38 w(CA)-9 b(T)g(A)p 1192 751 V 38 w(LIB=.:/$ALLIANCE)p +2201 751 V 37 w(TOP/cells/sclib/prol10:/$ALLIANCE)p 3983 +751 V 40 w(TOP/cells/ring/padsym)m(b])470 867 y([)p Fd(>)34 +b Ff(exp)s(ort)h(MBK)p 1200 867 V 38 w(CA)-9 b(T)g(A)p +1527 867 V 38 w(LIB)35 b(VH)p 1938 867 V 37 w(MAXERR)h(VH)p +2654 867 V 37 w(P)-9 b(A)g(TSFX)36 b(MBK)p 3390 867 V +38 w(W)m(ORK)p 3772 867 V 38 w(LIB])470 978 y Fd(>)e +Ff(asim)m(ut)g(-b)h(amd)f(pattern)g(result)p 1913 978 +V 38 w(b)s(eh)p 5262 1020 4 710 v 411 1023 4855 4 v 406 +1175 a Fe(\017)46 b Ff(amd)30 b Fg(:)40 b(is)30 b(the)g(\014lename)g +(of)g(the)h(description)d(\()p Ff(amd.vb)s(e)p Fg(\).)406 +1362 y Fe(\017)46 b Ff(pattern)30 b Fg(:)40 b(is)30 b(the)g(\014lename) +g(for)g(the)h(input)d(patterns)j(\()p Ff(pattern.pat)p +Fg(\).)406 1550 y Fe(\017)46 b Ff(result)p 763 1550 32 +4 v 38 w(b)s(eh)25 b Fg(:)38 b(is)25 b(the)g(\014lename)g(for)g(the)g +(resulting)f(patterns)h(\()p Ff(result)p 2952 1550 V +38 w(b)s(eh.pat)p Fg(\).)406 1738 y Fe(\017)46 b Ff(-b)31 +b Fg(:)40 b(means)30 b(that)h(the)g Ff(amd)e Fg(\014le)h(is)f(a)i(pure) +e(b)s(eha)m(vioural)g(description.)411 1925 y(The)d(input)f(pattern)h +(\014le)g(can)h(pro)m(vide)e(the)i(exp)s(ected)g(outputs.)39 +b(An)m(y)26 b(di\013erence)g(b)s(e-)270 2038 y(t)m(w)m(een)f(predicted) +e(outputs)g(in)g Ff(pattern.pat)f Fg(and)i(sim)m(ulation)e(results)g +(will)f(b)s(e)j(rep)s(orted)270 2151 y(as)30 b(commen)m(tary)i(on)e +(the)g(screen)g(and)g(in)f Ff(result)p 2006 2151 V 37 +w(b)s(eh.pat)p Fg(.)40 b(This)29 b(output)h(\014le)f(ma)m(y)i(b)s(e)270 +2264 y(used)c(again)h(for)g(an)g(another)g(sim)m(ulation,)f(since)g(it) +h(has)g(the)g(same)g(format)g(as)h(the)f(input)270 2377 +y(\014le.)270 2663 y Fc(2)135 b(Structural)45 b(Description)270 +2870 y Fb(2.1)112 b(Structural)37 b(Design)270 3041 y +Fg(The)c(aim)h(of)g(this)e(step)i(is)f(to)i(build)c(the)j(gate)h(lev)m +(el)f(sc)m(hematic)g(corresp)s(onding)e(to)j(the)270 +3154 y(b)s(eha)m(vioural)29 b(sp)s(eci\014cation.)411 +3267 y(W)-8 b(e)42 b(m)m(ust)e(instan)m(tiate)h(and)e(connect)j +(logical)e(gates)h(and)f(pads,)j(supplied)37 b(in)i(the)270 +3380 y(standard)33 b(cell)h(library)e Ff(scr)j Fg(and)e(the)i(pad)f +(library)d Ff(ring)p Fg(.)53 b(T)-8 b(o)35 b(do)f(this,)h +Ff(ALLIANCE)270 3493 y Fg(do)s(esn't)e(use)g(a)h(sc)m(hematic)g(editor) +f(but)f(the)i(pro)s(cedural)d(language)j Ff(genlib)f +Fg(whic)m(h)f(is)h(a)270 3606 y(set)e(of)f(C)g(functions)f(\(see)j +Fa(man)h(genlib)p Fg(\).)411 3719 y(The)48 b(structural)f(description)f +(of)i(the)h Ff(AMD2901)g Fg(follo)m(ws)f(a)g(hierarc)m(hical)f(ap-)270 +3832 y(proac)m(h.)406 4044 y Fe(\017)f Fg(First,)23 b(eac)m(h)g +(functionnal)c(blo)s(c)m(k)i(is)g(describ)s(ed)e(as)j(a)g(separate)g +(gate)h(net-list.)37 b(There)497 4157 y(are)31 b(\014v)m(e)g(blo)s(c)m +(ks)e(:)41 b Ff(accu,)36 b(alu,)f(ram,)f(m)m(uxe,)g(m)m(uxout)p +Fg(.)406 4345 y Fe(\017)46 b Fg(The)20 b(next)h(hierarc)m(hical)e(lev)m +(el)h(is)g(the)h Ff(heart)f Fg(that)h(in)m(terconnects)g(these)g(\014v) +m(e)g(blo)s(c)m(ks)497 4458 y(among)31 b(eac)m(h)h(others.)406 +4645 y Fe(\017)46 b Fg(The)39 b(\014nal)g(hierarc)m(hical)f(lev)m(el)h +(is)g(the)h Ff(c)m(hip)g Fg(that)g(connects)g(the)g Ff(heart)f +Fg(to)i(the)497 4758 y Ff(pads)p Fg(.)411 4971 y(The)d +Ff(c)m(hip.c)i Fg(\014le)d(uses)h(the)h Ff(genlib)g Fg(language)g(to)g +(describ)s(e)e(these)i(7)f(hierarc)m(hical)270 5084 y(blo)s(cs.)411 +5196 y(The)d Ff(ALLIANCE)f Fg(system)i(accepts)h(sev)m(eral)f(external) +f(\014le)g(formats)g(for)h(net-list)270 5309 y(\(EDIF,)25 +b(VHDL,)h(SPICE,)d(ALLIANCE,)h(VLSI\).)h(En)m(vironmen)m(t)e(v)-5 +b(ariables)23 b(allo)m(w)h(to)h(set)270 5422 y(the)31 +b(formats.)40 b(The)30 b Ff(.vst)h Fg(extension)f(corresp)s(onds)f(to)i +(the)f(structural)g Ff(VHDL)p Fg(.)1807 5841 y(4)p eop +%%Page: 5 5 +5 4 bop 270 410 1860 4 v 270 722 4 312 v 329 497 a Fd(>)34 +b Ff(MBK)p 695 497 32 4 v 38 w(IN)p 855 497 V 37 w(LO=vst)329 +588 y Fd(>)g Ff(MBK)p 695 588 V 38 w(OUT)p 965 588 V +38 w(LO=vst)329 679 y Fd(>)g Ff(exp)s(ort)h(MBK)p 1030 +679 V 38 w(OUT)p 1300 679 V 38 w(LO)f(MBK)p 1769 679 +V 38 w(IN)p 1929 679 V 37 w(LO)p 2126 722 4 312 v 270 +725 1860 4 v 411 792 a Fg(All)27 b(net-list)g(\014les)g(created)i(and)e +(used)g(b)m(y)h Ff(genlib)g Fg(will)e(no)m(w)i(b)s(e)f(structural)g +Ff(VHDL)p Fg(.)p 270 917 4860 4 v 270 1626 4 710 v 329 +1010 a Ff([)34 b Fd(>)h Ff(MBK)p 759 1010 32 4 v 38 w(IN)p +919 1010 V 37 w(LO=vst)g(])329 1125 y([)f Fd(>)h Ff(MBK)p +759 1125 V 38 w(OUT)p 1029 1125 V 37 w(LO=vst)g(])329 +1241 y([)f Fd(>)h Ff(MBK)p 759 1241 V 38 w(W)m(ORK)p +1141 1241 V 38 w(LIB=.)47 b(])329 1357 y([)34 b Fd(>)h +Ff(MBK)p 759 1357 V 38 w(CA)-9 b(T)g(A)p 1086 1357 V +38 w(LIB=.:/$ALLIANCE)p 2095 1357 V 37 w +(TOP/cells/sclib/prol10:/$ALLIANCE)p 3877 1357 V 39 w +(TOP/cells/ring/padsym)m(b])329 1473 y([)34 b Fd(>)h +Ff(exp)s(ort)g(MBK)p 1094 1473 V 38 w(CA)-9 b(T)g(A)p +1421 1473 V 38 w(LIB)34 b(MBK)p 1925 1473 V 39 w(IN)p +2086 1473 V 37 w(LO)g(MBK)p 2554 1473 V 38 w(OUT)p 2824 +1473 V 37 w(LO)h(MBK)p 3293 1473 V 38 w(W)m(ORK)p 3675 +1473 V 38 w(LIB])329 1584 y Fd(>)f Ff(genlib)h(-v)g(c)m(hip)p +5126 1626 4 710 v 270 1629 4860 4 v 411 1697 a Fg(The)c(7)h(\014les)e +Ff(alu.vst)36 b(accu.vst)h(ram.vst)e(m)m(uxe.vst)g(m)m(uxout.vst)g +(heart.vst)270 1809 y(c)m(hip.vst)c Fg(ha)m(v)m(e)h(b)s(een)d(created.) +270 2053 y Fb(2.2)112 b(Structural)37 b(Mo)s(del)g(Sim)m(ulation)270 +2225 y Fg(The)f(v)-5 b(arious)36 b(net-list)g(\014les)g(w)m(e)h(ha)m(v) +m(e)h(created)g(represen)m(t)f(the)g(structural)f(description)270 +2337 y(that)31 b(should)d(b)s(e)i(v)-5 b(alidated)30 +b(b)m(y)g(sim)m(ulation,)e(using)h(the)i(same)g(patterns)f(as)h(in)e +(step)h(1.)p 270 2462 4890 4 v 270 3403 4 942 v 329 2555 +a Ff([)k Fd(>)h Ff(MBK)p 759 2555 32 4 v 38 w(IN)p 919 +2555 V 37 w(LO=vst)g(])329 2671 y([)f Fd(>)h Ff(VH)p +665 2671 V 37 w(P)-9 b(A)g(TSFX=pat)36 b(])329 2787 y([)e +Fd(>)h Ff(VH)p 665 2787 V 37 w(MAXERR=10)i(])329 2902 +y([)d Fd(>)h Ff(MBK)p 759 2902 V 38 w(W)m(ORK)p 1141 +2902 V 38 w(LIB=.)47 b(])329 3018 y([)34 b Fd(>)h Ff(MBK)p +759 3018 V 38 w(CA)-9 b(T)g(A)p 1086 3018 V 38 w(LIB=.:/$ALLIANCE)p +2095 3018 V 37 w(TOP/cells/sclib/prol10:/$ALLIANCE)p +3877 3018 V 39 w(TOP/cells/ring/padsym)m(b])329 3134 +y([)34 b Fd(>)h Ff(exp)s(ort)g(MBK)p 1094 3134 V 38 w(CA)-9 +b(T)g(A)p 1421 3134 V 38 w(LIB)34 b(MBK)p 1925 3134 V +39 w(IN)p 2086 3134 V 37 w(LO)g(VH)p 2460 3134 V 37 w(P)-9 +b(A)g(TSFX)509 3250 y(VH)p 676 3250 V 37 w(MAXERR)36 +b(MBK)p 1486 3250 V 38 w(W)m(ORK)p 1868 3250 V 38 w(LIB)e(])329 +3361 y Fd(>)g Ff(asim)m(ut)g(c)m(hip)i(pattern)e(result)p +1637 3361 V 37 w(str)p 5156 3403 4 942 v 270 3406 4890 +4 v 406 3583 a Fe(\017)46 b Ff(c)m(hip)31 b Fg(is)f(the)g(structural)g +(input)e(\014le)h(\()p Ff(c)m(hip.vst)p Fg(\).)406 3770 +y Fe(\017)46 b Ff(pattern)30 b Fg(:)40 b(is)30 b(the)g(\014lename)g +(for)g(the)h(input)d(patterns)j(\()p Ff(pattern.pat)p +Fg(\).)406 3958 y Fe(\017)46 b Ff(result)p 763 3958 32 +4 v 38 w(str)30 b Fg(:)41 b(is)29 b(\014lename)h(for)g(the)h(resulting) +d(patterns)i(\()p Ff(result)p 2796 3958 V 38 w(str.pat)p +Fg(\).)411 4171 y(Note)23 b(the)g Ff(-b)e Fg(option)h(do)s(es)f(not)h +(app)s(ear)g(an)m(y)g(more,)i(since)d(w)m(e)i(no)m(w)f(ha)m(v)m(e)h(a)f +(structural)270 4283 y(mo)s(del.)411 4396 y(An)m(y)35 +b(new)f(error)h(app)s(earing)e(will)f(b)s(e)j(rep)s(orted)f(in)f(the)i +Ff(result)p 2668 4396 V 38 w(str.pat)f Fg(\014le.)53 +b(Y)-8 b(ou)270 4509 y(can)38 b(try)f(to)i(in)m(tro)s(duce)d(a)i(sc)m +(hematic)h(error)e(b)m(y)g(mo)s(difying)e(the)j Ff(c)m(hip.c)h +Fg(\014le,)g(running)270 4622 y Ff(genlib)31 b Fg(and)e +Ff(asim)m(ut)h Fg(to)h(see)g(the)f(errors.)270 4909 y +Fc(3)135 b(Ph)l(ysical)45 b(Design)270 5112 y Fg(Building)30 +b(the)k(heart,)g(and)f(routing)f(the)i(heart)f(to)h(the)g(pads)e(are)i +(quite)e(di\013eren)m(t)h(jobs.)270 5224 y(So)d(w)m(e)h(use)f +(di\013eren)m(t)g(to)s(ols.)1807 5841 y(5)p eop +%%Page: 6 6 +6 5 bop 270 399 a Fb(3.1)112 b(Routing)37 b(the)g(heart)270 +570 y Ff(Scr)31 b Fg(is)e(a)i(standard)f(cell)f(placing)g(and)h +(routing)g(to)s(ol.)411 683 y(Here)i(again)f Ff(ALLIANCE)f +Fg(accepts)j(sev)m(eral)e(external)h(\014le)e(formats)i(for)f(the)g +(sym-)270 796 y(b)s(olic)e(la)m(y)m(out.)41 b(En)m(vironmen)m(t)30 +b(v)-5 b(ariables)29 b(allo)m(w)h(to)h(set)g(the)f(formats.)p +270 920 2013 4 v 270 1271 4 351 v 329 1008 a Fd(>)k Ff(MBK)p +695 1008 32 4 v 38 w(IN)p 855 1008 V 37 w(PH=ap)329 1113 +y Fd(>)g Ff(MBK)p 695 1113 V 38 w(OUT)p 965 1113 V 38 +w(PH=ap)329 1223 y([)g Fd(>)h Ff(exp)s(ort)g(MBK)p 1094 +1223 V 38 w(IN)p 1254 1223 V 37 w(PH)g(MBK)p 1734 1223 +V 38 w(OUT)p 2004 1223 V 38 w(PH)p 2279 1271 4 351 v +270 1274 2013 4 v 270 1346 a Fg(The)30 b(hierarc)m(hical)f(net-list)g +(will)f(b)s(e)i(\015attenned)g(b)s(efore)g(routing.)p +270 1470 4860 4 v 270 2412 4 942 v 329 1563 a Ff([)k +Fd(>)h Ff(MBK)p 759 1563 32 4 v 38 w(IN)p 919 1563 V +37 w(PH=ap)h(])329 1679 y([)e Fd(>)h Ff(MBK)p 759 1679 +V 38 w(OUT)p 1029 1679 V 37 w(PH=ap)h(])329 1795 y([)e +Fd(>)h Ff(MBK)p 759 1795 V 38 w(IN)p 919 1795 V 37 w(LO=vst)g(])329 +1911 y([)f Fd(>)h Ff(MBK)p 759 1911 V 38 w(W)m(ORK)p +1141 1911 V 38 w(LIB=.)47 b(])329 2027 y([)34 b Fd(>)h +Ff(MBK)p 759 2027 V 38 w(CA)-9 b(T)g(A)p 1086 2027 V +38 w(LIB=.:/$ALLIANCE)p 2095 2027 V 37 w +(TOP/cells/sclib/prol10:/$ALLIANCE)p 3877 2027 V 39 w +(TOP/cells/ring/padsym)m(b])329 2143 y([)34 b Fd(>)h +Ff(exp)s(ort)g(MBK)p 1094 2143 V 38 w(CA)-9 b(T)g(A)p +1421 2143 V 38 w(LIB)34 b(MBK)p 1925 2143 V 39 w(IN)p +2086 2143 V 37 w(PH)h(MBK)p 2566 2143 V 38 w(OUT)p 2836 +2143 V 37 w(PH)509 2258 y(MBK)p 770 2258 V 38 w(IN)p +930 2258 V 37 w(LO)f(MBK)p 1398 2258 V 38 w(W)m(ORK)p +1780 2258 V 38 w(LIB])329 2369 y Fd(>)g Ff(scr)i(-p)e(-r)h(heart)p +5126 2412 4 942 v 270 2415 4860 4 v 406 2566 a Fe(\017)46 +b Ff(heart)j Fg(is)g(the)g(input)f(net-list)g(\(heart.vst)j(\))f(and)e +(the)i(connector)g(placemen)m(t)497 2679 y(\(heart.scr\).)42 +b(The)30 b(output)g(la)m(y)m(out)h(will)d(b)s(e)i(heart.ap.)406 +2867 y Fe(\017)46 b Ff(-p)31 b Fg(automatic)g(placemen)m(t.)406 +3054 y Fe(\017)46 b Ff(-r)30 b Fg(routing)g(required.)270 +3242 y(The)g(sym)m(b)s(olic)f(la)m(y)m(out)i(\014le)e +Ff(heart.ap)h Fg(has)g(b)s(een)g(created.)270 3485 y +Fb(3.2)112 b(Heart)37 b(v)m(eri\014cation)406 3657 y +Fe(\017)46 b Fg(DR)m(C)31 b(:)g(Druc)f(c)m(hec)m(ks)i(the)e(sym)m(b)s +(olic)f(la)m(y)m(out)i(rules)e(\(see)j Fa(man)h(druc)p +Fg(\))p 497 3782 V 497 4776 4 995 v 556 3875 a Ff([)i +Fd(>)f Ff(MBK)p 986 3875 32 4 v 38 w(IN)p 1146 3875 V +38 w(PH=ap)h(])556 3991 y([)g Fd(>)f Ff(MBK)p 986 3991 +V 38 w(W)m(ORK)p 1368 3991 V 38 w(LIB=.)47 b(])556 4106 +y([)35 b Fd(>)f Ff(MBK)p 986 4106 V 38 w(CA)-9 b(T)g(A)p +1313 4106 V 38 w(LIB=.:/$ALLIANCE)p 2322 4106 V 37 w +(TOP/cells/sclib/prol10:/$ALLIANCE)p 4104 4106 V 40 w +(TOP/cells/ring/padsym)m(b])556 4222 y Fd(>)34 b Ff(RDS)p +883 4222 V 39 w(TECHNO)p 1383 4222 V 35 w(NAME=$ALLIANCE)p +2431 4222 V 37 w(TOP/etc/cmos)p 3157 4222 V 38 w(7.rds)556 +4333 y Fd(>)g Ff(RDS)p 883 4333 V 39 w(IN=cif)556 4425 +y Fd(>)g Ff(RDS)p 883 4425 V 39 w(OUT=cif)556 4521 y([)h +Fd(>)f Ff(exp)s(ort)h(MBK)p 1321 4521 V 38 w(CA)-9 b(T)g(A)p +1648 4521 V 38 w(LIB)35 b(MBK)p 2153 4521 V 38 w(IN)p +2313 4521 V 37 w(PH)g(MBK)p 2793 4521 V 38 w(W)m(ORK)p +3175 4521 V 38 w(LIB)736 4637 y(RDS)p 958 4637 V 38 w(TECHNO)p +1457 4637 V 36 w(NAME)f(RDS)p 2072 4637 V 39 w(IN)g(RDS)p +2483 4637 V 38 w(OUT])556 4748 y Fd(>)g Ff(druc)i(heart)p +5353 4776 4 995 v 497 4779 4860 4 v 497 4974 a Fg(If)30 +b(necessary)-8 b(,)32 b Ff(druc)f Fg(generates)g(an)g(error)f(\014le)f +(\()p Ff(core.err)p Fg(\).)406 5161 y Fe(\017)46 b Fg(Net-list)31 +b(extraction.)497 5311 y Ff(Lynx)g Fg(is)e(a)i(hierarc)m(hical)e +(extractor)j(that)f(pro)m(vides)e(a)i(gate)h(net-list.)497 +5424 y(In)e(order)f(to)i(a)m(v)m(oid)g(name)f(collision,)e(w)m(e)i(use) +g(another)g(\014le)f(format)i(for)f(extracted)497 5537 +y(net-list)g(\()p Ff(.al)g Fg(format\).)42 b(This)29 +b(new)g(format)i(is)f(used)f(to)i(supp)s(ort)e(additional)f(data)1807 +5841 y(6)p eop +%%Page: 7 7 +7 6 bop 497 399 a Fg(:)41 b(extracted)32 b(parasitic)d(capacitances.)p +497 523 1232 4 v 497 744 4 222 v 556 611 a Fd(>)34 b +Ff(MBK)p 922 611 32 4 v 39 w(OUT)p 1193 611 V 37 w(LO=al)556 +702 y Fd(>)g Ff(exp)s(ort)h(MBK)p 1257 702 V 38 w(OUT)p +1527 702 V 38 w(LO)p 1725 744 4 222 v 497 747 1232 4 +v 497 815 a Fg(Then)30 b(w)m(e)g(run)f(the)i Ff(lynx)k(extractor)c +Fg(:)p 497 939 4860 4 v 497 1649 4 710 v 556 1032 a Ff([)k +Fd(>)f Ff(MBK)p 986 1032 32 4 v 38 w(OUT)p 1256 1032 +V 38 w(LO=al)g(])556 1148 y([)h Fd(>)f Ff(MBK)p 986 1148 +V 38 w(IN)p 1146 1148 V 38 w(PH=ap)h(])556 1264 y([)g +Fd(>)f Ff(MBK)p 986 1264 V 38 w(W)m(ORK)p 1368 1264 V +38 w(LIB=.)47 b(])556 1380 y([)35 b Fd(>)f Ff(MBK)p 986 +1380 V 38 w(CA)-9 b(T)g(A)p 1313 1380 V 38 w(LIB=.:/$ALLIANCE)p +2322 1380 V 37 w(TOP/cells/sclib/prol10:/$ALLIANCE)p +4104 1380 V 40 w(TOP/cells/ring/padsym)m(b])556 1496 +y([)35 b Fd(>)f Ff(exp)s(ort)h(MBK)p 1321 1496 V 38 w(CA)-9 +b(T)g(A)p 1648 1496 V 38 w(LIB)35 b(MBK)p 2153 1496 V +38 w(OUT)p 2423 1496 V 37 w(LO)f(MBK)p 2891 1496 V 39 +w(IN)p 3052 1496 V 37 w(PH)h(MBK)p 3532 1496 V 38 w(W)m(ORK)p +3914 1496 V 38 w(LIB])556 1606 y Fd(>)f Ff(lynx)i(heart)p +5353 1649 4 710 v 497 1652 4860 4 v 497 1832 a Fg(The)30 +b(extracted)i(net-list)d(\014le)h Ff(heart.al)g Fg(is)f(created)j(at)f +(this)e(lev)m(el.)406 2020 y Fe(\017)46 b Fg(Net-compare.)497 +2170 y(The)30 b(next)g(to)s(ol)g(is)g(the)g(net-compare)h +Ff(lvx)g Fg(that)g(p)s(erforms)d(a)j(netlist)e(comparison)497 +2283 y(b)s(et)m(w)m(een)g(the)f(input)e(net-list)h Ff(heart.vst)h +Fg(and)f(the)i(extracted)g(net-list)e Ff(heart.al)p Fg(,)497 +2396 y(after)k(\015attening)f(to)h(the)g(gate)h(lev)m(el.)p +497 2521 V 497 2984 4 464 v 556 2614 a Ff([)j Fd(>)f +Ff(MBK)p 986 2614 32 4 v 38 w(W)m(ORK)p 1368 2614 V 38 +w(LIB=.)47 b(])556 2729 y([)35 b Fd(>)f Ff(MBK)p 986 +2729 V 38 w(CA)-9 b(T)g(A)p 1313 2729 V 38 w(LIB=.:/$ALLIANCE)p +2322 2729 V 37 w(TOP/cells/sclib/prol10:/$ALLIANCE)p +4104 2729 V 40 w(TOP/cells/ring/padsym)m(b])556 2845 +y([)35 b Fd(>)f Ff(exp)s(ort)h(MBK)p 1321 2845 V 38 w(CA)-9 +b(T)g(A)p 1648 2845 V 38 w(LIB)35 b(MBK)p 2153 2845 V +38 w(W)m(ORK)p 2535 2845 V 37 w(LIB])556 2956 y Fd(>)f +Ff(lvx)i(vst)f(al)f(heart)h(heart)f(-f)p 5353 2984 4 +464 v 497 2987 4860 4 v 270 3199 a Fb(3.3)112 b(Routing)37 +b(the)g(c)m(hip)270 3371 y Fg(The)31 b(pad)g(placemen)m(t)i(dep)s(ends) +d(on)h(external)h(constrain)m(ts.)45 b(The)31 b(\014le)g +Ff(c)m(hip.rin)i Fg(de\014nes)270 3484 y(the)e(pads)e(placemen)m(t)i +(constrain)m(ts)f(\(see)i Fa(man)h(ring)p Fg(\).)p 270 +3609 V 270 4550 4 942 v 329 3702 a Ff([)h Fd(>)h Ff(MBK)p +759 3702 32 4 v 38 w(IN)p 919 3702 V 37 w(LO=vst)g(])329 +3817 y([)f Fd(>)h Ff(MBK)p 759 3817 V 38 w(IN)p 919 3817 +V 37 w(PH=ap)h(])329 3933 y([)e Fd(>)h Ff(MBK)p 759 3933 +V 38 w(OUT)p 1029 3933 V 37 w(PH=ap)h(])329 4049 y([)e +Fd(>)h Ff(MBK)p 759 4049 V 38 w(W)m(ORK)p 1141 4049 V +38 w(LIB=.)47 b(])329 4165 y([)34 b Fd(>)h Ff(MBK)p 759 +4165 V 38 w(CA)-9 b(T)g(A)p 1086 4165 V 38 w(LIB=.:/$ALLIANCE)p +2095 4165 V 37 w(TOP/cells/sclib/prol10:/$ALLIANCE)p +3877 4165 V 39 w(TOP/cells/ring/padsym)m(b])329 4281 +y([)34 b Fd(>)h Ff(exp)s(ort)g(MBK)p 1094 4281 V 38 w(CA)-9 +b(T)g(A)p 1421 4281 V 38 w(LIB)34 b(MBK)p 1925 4281 V +39 w(IN)p 2086 4281 V 37 w(LO)509 4397 y(MBK)p 770 4397 +V 38 w(IN)p 930 4397 V 37 w(PH)h(MBK)p 1410 4397 V 38 +w(OUT)p 1680 4397 V 37 w(PH)h(MBK)p 2161 4397 V 38 w(W)m(ORK)p +2543 4397 V 37 w(LIB])329 4507 y Fd(>)e Ff(ring)h(c)m(hip)h(c)m(hip)p +5126 4550 4 942 v 270 4553 4860 4 v 406 4704 a Fe(\017)46 +b Ff(c)m(hip)33 b Fg(The)e(input)e(\014les)i(c)m(hip.vst)g(and)g(c)m +(hip.rin)f(\(the)i(same)g(name)g Ff(c)m(hip)g Fg(m)m(ust)g(b)s(e)497 +4817 y(used)e(for)g(the)h(t)m(w)m(o)g(\014les\).)406 +5005 y Fe(\017)46 b Ff(c)m(hip)31 b Fg(The)f(output)g(ph)m(ysical)f +(\014le)h(c)m(hip.ap.)411 5193 y(The)i(sym)m(b)s(olic)f(la)m(y)m(out)i +(\014le)e Ff(c)m(hip.ap)i Fg(has)f(b)s(een)f(created.)48 +b(A)m(t)33 b(this)e(p)s(oin)m(t,)h(y)m(ou)h(can)270 5305 +y(displa)m(y)c(the)h(c)m(hip)g(with)f(the)h(la)m(y)m(out)h(editor)f +Ff(graal)p Fg(.)270 5418 y(Y)-8 b(ou)30 b(can)g(see)g(the)f(c)m(hip)g +(and)g(the)g(instan)m(tiated)g(heart,)h(using)e(the)i +Ff(graal)f Fg(commands)g(to)270 5531 y(go)i(through)f(the)g(hierarc)m +(h)m(y)g(lev)m(els.)1807 5841 y(7)p eop +%%Page: 8 8 +8 7 bop 270 410 4860 4 v 270 888 4 479 v 329 503 a Ff([)34 +b Fd(>)h Ff(MBK)p 759 503 32 4 v 38 w(W)m(ORK)p 1141 +503 V 38 w(LIB=.)47 b(])329 619 y([)34 b Fd(>)h Ff(MBK)p +759 619 V 38 w(CA)-9 b(T)g(A)p 1086 619 V 38 w(LIB=.:/$ALLIANCE)p +2095 619 V 37 w(TOP/cells/sclib/prol10:/$ALLIANCE)p 3877 +619 V 39 w(TOP/cells/ring/padsym)m(b])329 735 y([)34 +b Fd(>)h Ff(exp)s(ort)g(MBK)p 1094 735 V 38 w(CA)-9 b(T)g(A)p +1421 735 V 38 w(LIB)34 b(MBK)p 1925 735 V 39 w(W)m(ORK)p +2308 735 V 37 w(LIB])329 846 y Fd(>)g Ff(graal)p 5126 +888 4 479 v 270 891 4860 4 v 270 1132 a Fc(4)135 b(Ph)l(ysical)45 +b(V)-11 b(alidation)270 1335 y Fg(The)21 b Ff(ALLIANCE)f +Fg(v)m(eri\014cation)i(to)s(ols)f(allo)m(w)h(b)s(oth)f(\015at)h(and)f +(hierarc)m(hical)f(v)m(eri\014cation.)270 1448 y(W)-8 +b(e)32 b(will)27 b(use)j(a)h(hierarc)m(hical)e(approac)m(h.)270 +1691 y Fb(4.1)112 b(Chip)37 b(v)m(eri\014cation)270 1863 +y Fg(The)30 b(same)h(pro)s(cedure)e(used)g(for)i(the)f(heart)h(applies) +d(for)i(the)h(en)m(tire)f(c)m(hip.)p 270 1987 V 270 3045 +4 1058 v 329 2081 a Ff([)k Fd(>)h Ff(MBK)p 759 2081 32 +4 v 38 w(IN)p 919 2081 V 37 w(PH=ap)h(])329 2196 y([)e +Fd(>)h Ff(MBK)p 759 2196 V 38 w(W)m(ORK)p 1141 2196 V +38 w(LIB=.)47 b(])329 2312 y([)34 b Fd(>)h Ff(MBK)p 759 +2312 V 38 w(CA)-9 b(T)g(A)p 1086 2312 V 38 w(LIB=.:/$ALLIANCE)p +2095 2312 V 37 w(TOP/cells/sclib/prol10:/$ALLIANCE)p +3877 2312 V 39 w(TOP/cells/ring/padsym)m(b])329 2428 +y([)34 b Fd(>)h Ff(RDS)p 720 2428 V 38 w(TECHNO)p 1219 +2428 V 36 w(NAME=$ALLIANCE)p 2268 2428 V 36 w(TOP/etc/cmos)p +2993 2428 V 39 w(7.rds])329 2544 y([)f Fd(>)h Ff(RDS)p +720 2544 V 38 w(IN=cif)10 b(])329 2660 y([)34 b Fd(>)h +Ff(RDS)p 720 2660 V 38 w(OUT=cif)10 b(])329 2775 y([)34 +b Fd(>)h Ff(exp)s(ort)g(MBK)p 1094 2775 V 38 w(CA)-9 +b(T)g(A)p 1421 2775 V 38 w(LIB)34 b(MBK)p 1925 2775 V +39 w(IN)p 2086 2775 V 37 w(PH)h(MBK)p 2566 2775 V 38 +w(W)m(ORK)p 2948 2775 V 38 w(LIB)509 2891 y(RDS)p 731 +2891 V 38 w(TECHNO)p 1230 2891 V 36 w(NAME)f(RDS)p 1845 +2891 V 38 w(IN)h(RDS)p 2256 2891 V 38 w(OUT])329 3002 +y Fd(>)f Ff(druc)i(c)m(hip)p 5126 3045 4 1058 v 270 3048 +4860 4 v 270 3228 a Fg(Ev)m(en)m(tually)-8 b(,)30 b Ff(druc)h +Fg(generates)h(an)e(error)g(\014le)g(\()p Ff(c)m(hip.err)p +Fg(\).)p 270 3352 2796 4 v 270 3946 4 594 v 329 3445 +a Ff([)k Fd(>)h Ff(MBK)p 759 3445 32 4 v 38 w(OUT)p 1029 +3445 V 37 w(LO=al)g(])329 3561 y([)f Fd(>)h Ff(MBK)p +759 3561 V 38 w(IN)p 919 3561 V 37 w(PH=ap)h(])329 3677 +y([)e Fd(>)h Ff(MBK)p 759 3677 V 38 w(W)m(ORK)p 1141 +3677 V 38 w(LIB=.)47 b(])329 3793 y([)34 b Fd(>)h Ff(exp)s(ort)g(MBK)p +1094 3793 V 38 w(CA)-9 b(T)g(A)p 1421 3793 V 38 w(LIB)34 +b(MBK)p 1925 3793 V 39 w(OUT)p 2196 3793 V 37 w(LO)g(MBK)p +2664 3793 V 38 w(IN)p 2824 3793 V 37 w(PH])329 3904 y +Fd(>)g Ff(lynx)h(c)m(hip)p 3063 3946 4 594 v 270 3949 +2796 4 v 270 4130 a Fg(The)c(extracted)j(net-list)d(\014le)g +Ff(c)m(hip.al)h Fg(is)f(created)i(b)m(y)f(this)e(step)i(\(This)f +(net-list)g(instan-)270 4242 y(tiates)g(the)g(heart\).)p +270 4367 4860 4 v 270 4845 4 479 v 329 4460 a Ff([)j +Fd(>)h Ff(MBK)p 759 4460 32 4 v 38 w(W)m(ORK)p 1141 4460 +V 38 w(LIB=.)47 b(])329 4576 y([)34 b Fd(>)h Ff(MBK)p +759 4576 V 38 w(CA)-9 b(T)g(A)p 1086 4576 V 38 w(LIB=.:/$ALLIANCE)p +2095 4576 V 37 w(TOP/cells/sclib/prol10:/$ALLIANCE)p +3877 4576 V 39 w(TOP/cells/ring/padsym)m(b])329 4692 +y([)34 b Fd(>)h Ff(exp)s(ort)g(MBK)p 1094 4692 V 38 w(CA)-9 +b(T)g(A)p 1421 4692 V 38 w(LIB)34 b(MBK)p 1925 4692 V +39 w(W)m(ORK)p 2308 4692 V 37 w(LIB])329 4802 y Fd(>)g +Ff(lvx)h(vst)g(al)g(c)m(hip)h(c)m(hip)p 5126 4845 4 479 +v 270 4848 4860 4 v 270 5028 a Fg(Both)25 b(net-lists)e +Ff(c)m(hip.vst)i Fg(and)e Ff(c)m(hip.al)i Fg(are)g(\015attened)f(to)h +(the)f(gate)i(lev)m(el)e(b)m(y)g Ff(lvx)g Fg(b)s(efore)270 +5141 y(comparison)30 b(\(see)h Fa(man)i(c)-5 b(atal)p +Fg(\).)1807 5841 y(8)p eop +%%Page: 9 9 +9 8 bop 270 399 a Fb(4.2)112 b(Chip)37 b(sim)m(ulation)270 +570 y Fg(Finally)d(y)m(ou)j(can)g(c)m(hec)m(k)h(globally)d(the)i +(extracted)h(net-list)d(b)m(y)i(applying)d(the)j(original)270 +683 y(patterns)k(to)h(the)g(extracted)g(net-list.)73 +b(Thanks)40 b(to)i(the)f(m)m(ultiformat)f(approac)m(h)i(the)270 +796 y(sim)m(ulator)29 b Ff(asim)m(ut)h Fg(accepts)h Ff(.al)g +Fg(format)f(as)h(structural)e(input)f(description.)p +270 920 1121 4 v 270 1142 4 222 v 329 1009 a Fd(>)34 +b Ff(MBK)p 695 1009 32 4 v 38 w(IN)p 855 1009 V 37 w(LO=al)329 +1099 y Fd(>)g Ff(exp)s(ort)h(MBK)p 1030 1099 V 38 w(IN)p +1190 1099 V 37 w(LO)p 1388 1142 4 222 v 270 1145 1121 +4 v 270 1325 a Fg(Then)29 b(y)m(ou)i(ha)m(v)m(e)h(to)f(run)e +Ff(asim)m(ut)p Fg(.)p 270 1450 4860 4 v 270 2391 4 942 +v 329 1543 a Ff([)34 b Fd(>)h Ff(MBK)p 759 1543 32 4 +v 38 w(IN)p 919 1543 V 37 w(LO=al])329 1659 y([)f Fd(>)h +Ff(VH)p 665 1659 V 37 w(P)-9 b(A)g(TSFX=pat])329 1774 +y([)34 b Fd(>)h Ff(VH)p 665 1774 V 37 w(MAXERR=10])329 +1890 y([)f Fd(>)h Ff(MBK)p 759 1890 V 38 w(W)m(ORK)p +1141 1890 V 38 w(LIB=.)47 b(])329 2006 y([)34 b Fd(>)h +Ff(MBK)p 759 2006 V 38 w(CA)-9 b(T)g(A)p 1086 2006 V +38 w(LIB=.:/$ALLIANCE)p 2095 2006 V 37 w +(TOP/cells/sclib/prol10:/$ALLIANCE)p 3877 2006 V 39 w +(TOP/cells/ring/padsym)m(b])329 2122 y([)34 b Fd(>)h +Ff(exp)s(ort)g(MBK)p 1094 2122 V 38 w(CA)-9 b(T)g(A)p +1421 2122 V 38 w(LIB)34 b(MBK)p 1925 2122 V 39 w(IN)p +2086 2122 V 37 w(LO)509 2238 y(VH)p 676 2238 V 37 w(P)-9 +b(A)g(TSFX)36 b(VH)p 1318 2238 V 37 w(MAXERR)g(MBK)p +2128 2238 V 38 w(W)m(ORK)p 2510 2238 V 38 w(LIB])329 +2348 y Fd(>)e Ff(asim)m(ut)g(c)m(hip)i(pattern)e(res)p +1509 2348 V 38 w(pattern)p 5126 2391 4 942 v 270 2394 +4860 4 v 270 2574 a Fg(T)-8 b(o)34 b(complete)g(the)f(v)-5 +b(alidation)32 b(of)h(our)g(c)m(hip,)g(the)h(functional)e(abstraction)h +(follo)m(w)m(ed)g(b)m(y)270 2687 y(the)e(pro)s(of)e(m)m(ust)h(b)s(e)g +(done.)270 2931 y Fb(4.3)112 b(F)-9 b(unctionnal)37 b(abstraction)g +(and)h(formal)f(pro)s(of)270 3102 y Fg(The)e(functional)e(abstraction)i +(of)h(the)f(transitor)g(net-list)f(is)g(realized)h(b)m(y)g(the)g(to)s +(ol)g Ff(y)m(a-)270 3215 y(gle)i Fg(\(see)h Fa(man)h(yagle)p +Fg(\).)61 b Ff(y)m(agle)37 b Fg(\015attens)g(the)g(c)m(hip)f(\()p +Ff(c)m(hip.al)p Fg(\))i(to)f(obtain)g(a)g(transistor)270 +3328 y(lev)m(el)g(description,)h(and)e(abstract)j(then)e(a)h(b)s(eha)m +(vioral)e(description)f(\()p Ff(c)m(hip.vb)s(e)p Fg(\).)63 +b(T)-8 b(o)270 3441 y(k)m(eep)32 b(the)g(coherence)h(of)f(register)g +(names)f(b)s(et)m(w)m(een)i(the)f(b)s(eha)m(vioral)e(description)g(giv) +m(en)270 3554 y(b)m(y)k Ff(y)m(agle)g Fg(\()p Ff(c)m(hip.vb)s(e)p +Fg(\))i(and)d(the)h(initial)e(b)s(eha)m(vioral)g(description)g(\()p +Ff(amd.vb)s(e)p Fg(\),)j(a)g(\014le)270 3667 y(describing)28 +b(the)j(name's)f(transformation)g(is)f(required.)39 b(This)29 +b(\014le)g(is)h Ff(c)m(hip.inf)p Fg(.)p 270 3791 V 270 +4385 4 594 v 329 3884 a Ff([)k Fd(>)h Ff(MBK)p 759 3884 +32 4 v 38 w(IN)p 919 3884 V 37 w(LO=al)g(])329 4000 y([)f +Fd(>)h Ff(MBK)p 759 4000 V 38 w(W)m(ORK)p 1141 4000 V +38 w(LIB=.)47 b(])329 4116 y([)34 b Fd(>)h Ff(MBK)p 759 +4116 V 38 w(CA)-9 b(T)g(A)p 1086 4116 V 38 w(LIB=.:/$ALLIANCE)p +2095 4116 V 37 w(TOP/cells/sclib/prol10:/$ALLIANCE)p +3877 4116 V 39 w(TOP/cells/ring/padsym)m(b])329 4232 +y([)34 b Fd(>)h Ff(exp)s(ort)g(MBK)p 1094 4232 V 38 w(CA)-9 +b(T)g(A)p 1421 4232 V 38 w(LIB)34 b(MBK)p 1925 4232 V +39 w(IN)p 2086 4232 V 37 w(LO)g(MBK)p 2554 4232 V 38 +w(W)m(ORK)p 2936 4232 V 38 w(LIB])329 4343 y Fd(>)g Ff(y)m(agle)h(c)m +(hip)h(-i)f(-v)p 5126 4385 4 594 v 270 4388 4860 4 v +406 4540 a Fe(\017)46 b Ff(c)m(hip)31 b Fg(is)f(the)g(input)f(la)m(y)m +(out)i(\()p Ff(c)m(hip.al)p Fg(\).)406 4727 y Fe(\017)46 +b Ff(-i)30 b Fg(read)h(the)f Ff(c)m(hip.inf)h Fg(\014le.)406 +4915 y Fe(\017)46 b Ff(-v)31 b Fg(to)g(v)m(ectorize)h(the)e(in)m +(terface)h(of)g(b)s(eha)m(vioral)e(description.)411 5103 +y(The)h(VHDL)h(D)m(A)-8 b(T)g(A)32 b(FLO)m(W)f(description)e(as)h(b)s +(een)g(generated)h(:)41 b Ff(c)m(hip.vb)s(e)411 5328 +y Fg(No)m(w)h(y)m(ou)f(ha)m(v)m(e)h(the)f(abstracted)h(b)s(eha)m +(vioral)e(description)f(\()p Ff(c)m(hip.vb)s(e)p Fg(\))j(and)f(the)270 +5441 y(initial)c(b)s(eha)m(vioral)h(description)g(\()p +Ff(amd.vb)s(e)p Fg(\).)68 b(With)39 b Ff(pro)s(of)h Fg(\(see)h +Fa(man)h(pr)-5 b(o)g(of)p Fg(\),)45 b(y)m(ou)270 5554 +y(can)31 b(c)m(hec)m(k)h(the)e(formal)g(equiv)-5 b(alence)30 +b(b)s(et)m(w)m(een)h(the)f(t)m(w)m(o)i(descriptions.)1807 +5841 y(9)p eop +%%Page: 10 10 +10 9 bop 270 410 1472 4 v 270 772 4 363 v 329 503 a Ff([)34 +b Fd(>)h Ff(MBK)p 759 503 32 4 v 38 w(W)m(ORK)p 1141 +503 V 38 w(LIB=.)47 b(])329 619 y([)34 b Fd(>)h Ff(exp)s(ort)g(MBK)p +1094 619 V 38 w(W)m(ORK)p 1476 619 V 38 w(LIB])329 730 +y Fd(>)f Ff(pro)s(of)h(-d)g(amd)f(c)m(hip)p 1739 772 +4 363 v 270 775 1472 4 v 406 927 a Fe(\017)46 b Ff(c)m(hip)31 +b Fg(is)f(the)g(abstracted)i(\014le)d(\()p Ff(c)m(hip.vb)s(e)p +Fg(\).)406 1115 y Fe(\017)46 b Ff(amd)30 b Fg(is)f(the)i(initial)c(b)s +(eha)m(vioral)i(description)g(\()p Ff(amd.vb)s(e)p Fg(\).)406 +1302 y Fe(\017)46 b Ff(-d)31 b Fg(displa)m(ys)d(errors.)411 +1490 y(If)36 b(y)m(ou)g(w)m(an)m(t)h(to)g(see)g(an)f(error)f(y)m(ou)i +(can)f(c)m(hange)h(one)g(line)d(in)h(the)h(\014le)g Ff(amd.vb)s(e)p +Fg(.)270 1603 y(F)-8 b(or)31 b(example,)f(c)m(hange)i(the)f(line)d(301) +k(:)270 1716 y(scout)f Fd(<)p Fg(=)f(NOT)f(accu\(3\))k(AND)e(test)p +1625 1716 28 4 v 33 w(mo)s(de)f(;)270 1829 y(and)g(try)g +Ff(pro)s(of)h Fg(again.)270 2115 y Fc(5)135 b(Timing)45 +b(analysis)270 2318 y Fg(With)27 b(the)i(extracted)g(net)f(list)f(c)m +(hip.al)g(T)-8 b(As)28 b(analyses)f(eac)m(h)i(path)f(of)g(the)g +(circuit)f(taking)270 2431 y(accoun)m(t)33 b(of)f(the)g(v)-5 +b(arious)31 b(capacitances.)46 b(These)32 b(results)f(are)h(summarize)e +(in)h(a)h(\014le)f(.ttv)270 2544 y(In)40 b(this)f(\014le)h(w)m(e)h(can) +g(see)g(the)g(critical)e(path)h(and)g(the)h(correspnding)d(time.)71 +b(So)41 b(it)f(is)270 2657 y(p)s(ossible)28 b(to)j(kno)m(w)f(the)h(p)s +(erio)s(d)d(of)j(the)f(c)m(hip)411 2770 y(Y)-8 b(ou)31 +b(will)d(en)m(ter)j(:)p 270 2894 4860 4 v 270 3604 4 +710 v 329 2987 a Ff([)j Fd(>)h Ff(MBK)p 759 2987 32 4 +v 38 w(IN)p 919 2987 V 37 w(PH=ap)h(])329 3103 y([)e +Fd(>)h Ff(MBK)p 759 3103 V 38 w(IN)p 919 3103 V 37 w(LO=al)g(])329 +3219 y([)f Fd(>)h Ff(MBK)p 759 3219 V 38 w(W)m(ORK)p +1141 3219 V 38 w(LIB=.)47 b(])329 3335 y([)34 b Fd(>)h +Ff(MBK)p 759 3335 V 38 w(CA)-9 b(T)g(A)p 1086 3335 V +38 w(LIB=.:/$ALLIANCE)p 2095 3335 V 37 w +(TOP/cells/sclib/prol10:/$ALLIANCE)p 3877 3335 V 39 w +(TOP/cells/ring/padsym)m(b])329 3450 y([)34 b Fd(>)h +Ff(exp)s(ort)g(MBK)p 1094 3450 V 38 w(IN)p 1254 3450 +V 37 w(PH)g(MBK)p 1734 3450 V 38 w(W)m(ORK)p 2116 3450 +V 38 w(LIB)g(MBK)p 2621 3450 V 38 w(CA)-9 b(T)g(A)p 2948 +3450 V 38 w(LIB)34 b(])329 3561 y Fd(>)g Ff(tas)h(c)m(hip)p +5126 3604 4 710 v 270 3607 4860 4 v 270 3961 a Fc(6)135 +b(Chip)45 b(\014nishing)270 4163 y Fg(Un)m(til)e(no)m(w)h(w)m(e)h(used) +e(sym)m(b)s(olic)g(la)m(y)m(out)i(\(all)e(co)s(ordinates)h(in)f +Ff(lam)m(b)s(da)p Fg(-units\).)80 b(W)-8 b(e)270 4276 +y(should)29 b(no)m(w)h(con)m(v)m(ert)j(them)d(to)i(real)e(dimensions,)e +(creating)j(the)g(ph)m(ysical)f(la)m(y)m(out)h(\(t)m(w)m(o)270 +4389 y(output)c(formats)h(are)g(supp)s(orted)d(:)40 b(CIF)27 +b(and)g(GDSI)s(I\).)g(This)f(last)h(step)h(is)e(done)i(b)m(y)f +Ff(s2r)p Fg(.)270 4502 y Ff(s2r)22 b Fg(p)s(erforms)e(sym)m(b)s(olic)g +(to)i(real)f(expansion,)h(gap)g(\014lling,)f(denotc)m(hing)g(and)g +(instan)m(tiates)270 4615 y(preexisting)29 b(ph)m(ysical)g(cells)g +(\(this)h(is)f(necessary)i(for)f(the)h(pads\).)411 4728 +y(Y)-8 b(ou)31 b(m)m(ust)f(de\014ne)g(3)h(new)f(en)m(vironmen)m(t)f(v) +-5 b(ariables)30 b(:)p 270 4853 2966 4 v 270 5098 4 246 +v 329 4946 a Fd(>)k Ff(RDS)p 656 4946 32 4 v 38 w(TECHNO)p +1155 4946 V 36 w(NAME=/$ALLIANCE)p 2256 4946 V 37 w(TOP/etc/prol10.rds) +329 5056 y Fd(>)g Ff(exp)s(ort)h(RDS)p 991 5056 V 38 +w(TECHNO)p 1490 5056 V 36 w(NAME)p 3233 5098 4 246 v +270 5101 2966 4 v 270 5281 a Fg(The)25 b Ff(prol10.rds)i +Fg(is)d(the)i(tec)m(hnology)h(\014le)d(that)j(con)m(tains)e(the)h +(parameters)g(corresp)s(ond-)270 5394 y(ing)k(to)h(the)f(target)i(pro)s +(cess.)40 b(\(In)30 b(this)g(case)h(the)g(target)h(pro)s(cess)d(is)h(1) +h(micron.\))1785 5841 y(10)p eop +%%Page: 11 11 +11 10 bop 270 311 1014 4 v 270 532 4 222 v 329 399 a +Fd(>)34 b Ff(RDS)p 656 399 32 4 v 38 w(OUT=)h(cif)329 +489 y Fd(>)f Ff(exp)s(ort)h(RDS)p 991 489 V 38 w(OUT)p +1280 532 4 222 v 270 535 1014 4 v 270 715 a Fg(De\014nes)30 +b(the)h(output)f(format.)p 270 840 903 4 v 270 1061 4 +222 v 329 928 a Fd(>)k Ff(RDS)p 656 928 32 4 v 38 w(IN=cif)329 +1019 y Fd(>)g Ff(exp)s(ort)h(RDS)p 991 1019 V 38 w(IN)p +1170 1061 4 222 v 270 1064 903 4 v 270 1244 a Fg(De\014nes)30 +b(the)h(input)d(format)j(for)f(the)h(preexisting)e(la)m(y)m(out)i +(cells)e(\(pads\).)411 1357 y(Y)-8 b(ou)31 b(will)d(en)m(ter)j(:)p +270 1482 4860 4 v 270 2539 4 1058 v 329 1575 a Ff([)j +Fd(>)h Ff(MBK)p 759 1575 32 4 v 38 w(IN)p 919 1575 V +37 w(PH=ap)h(])329 1691 y([)e Fd(>)h Ff(MBK)p 759 1691 +V 38 w(W)m(ORK)p 1141 1691 V 38 w(LIB=.)47 b(])329 1807 +y([)34 b Fd(>)h Ff(MBK)p 759 1807 V 38 w(CA)-9 b(T)g(A)p +1086 1807 V 38 w(LIB=.:/$ALLIANCE)p 2095 1807 V 37 w +(TOP/cells/sclib/prol10:/$ALLIANCE)p 3877 1807 V 39 w +(TOP/cells/ring/padsym)m(b])329 1922 y([)34 b Fd(>)h +Ff(RDS)p 720 1922 V 38 w(TECHNO)p 1219 1922 V 36 w(NAME=/$ALLIANCE)p +2320 1922 V 37 w(TOP/etc/prol10.rds)h(])329 2038 y([)e +Fd(>)h Ff(RDS)p 720 2038 V 38 w(IN=cif)g(])329 2154 y([)f +Fd(>)h Ff(RDS)p 720 2154 V 38 w(OUT=cif)10 b(])329 2270 +y([)34 b Fd(>)h Ff(exp)s(ort)g(RDS)p 1055 2270 V 38 w(OUT)g(MBK)p +1615 2270 V 38 w(IN)p 1775 2270 V 37 w(PH)g(MBK)p 2255 +2270 V 38 w(W)m(ORK)p 2637 2270 V 38 w(LIB)509 2386 y(MBK)p +770 2386 V 38 w(CA)-9 b(T)g(A)p 1097 2386 V 37 w(LIB)35 +b(RDS)p 1562 2386 V 38 w(TECHNO)p 2061 2386 V 36 w(NAME)g(RDS)p +2677 2386 V 38 w(IN])329 2496 y Fd(>)f Ff(s2r)h(-c)h(c)m(hip)f(amd2901) +p 5126 2539 4 1058 v 270 2542 4860 4 v 406 2684 a Fe(\017)46 +b Ff(-c)31 b Fg(deletes)f(connectors)i(at)f(the)f(highest)g(lev)m(el)g +(of)h(hierarc)m(h)m(y)-8 b(.)411 2872 y(Y)g(ou)31 b(did)e(it...)270 +2985 y(The)h(\014le)f(pro)s(duced)g(is)g Ff(amd2901.cif)p +Fg(.)42 b(It)30 b(is)g(ready)g(for)g(the)h(foundry)-8 +b(.)1785 5841 y(11)p eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/alliance/share/tutorials/amd2901/tex.tgz b/alliance/share/tutorials/amd2901/tex.tgz deleted file mode 100644 index 8d3933f1a088ef7a711fb08525ff414898631b70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52652 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 BDE0sV diff --git a/alliance/share/tutorials/amd2901/tex/Makefile b/alliance/share/tutorials/amd2901/tex/Makefile new file mode 100644 index 00000000..ab46bfb4 --- /dev/null +++ b/alliance/share/tutorials/amd2901/tex/Makefile @@ -0,0 +1,21 @@ +# Generic Makefile for TeTeX projet +# (C) 1999, Czo +# $Id: Makefile,v 1.1 2000/01/20 16:10:03 czo Exp $ + +MYFILE=amd2901 + +view : ps + gv $(MYFILE).ps + +ps : $(MYFILE).tex + latex $(MYFILE).tex + dvips $(MYFILE).dvi -o $(MYFILE).ps + +distrib : clean ps + ps2pdf $(MYFILE).ps + cp -f $(MYFILE).ps .. + cp -f $(MYFILE).pdf .. + $(MAKE) clean + +clean : + rm -f $(MYFILE).ps $(MYFILE).pdf *.log *.dvi *.aux diff --git a/alliance/share/tutorials/amd2901/tex/amd2901.tex b/alliance/share/tutorials/amd2901/tex/amd2901.tex new file mode 100644 index 00000000..5681f3e7 --- /dev/null +++ b/alliance/share/tutorials/amd2901/tex/amd2901.tex @@ -0,0 +1,647 @@ +%%%%%%%%%%%%%%%%%%%% +% +% The amd2901 tutorial. +% Modified by czo for Alliance release 4.0 (01/2000) +% TODO : no fully working, needs some adjustements +% $Id: amd2901.tex,v 1.1 2000/01/20 16:10:03 czo Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\documentclass[11pt,a4]{article} + +\textwidth 21.0cm + +\oddsidemargin -5.0cm +\evensidemargin -2.5in + +\usepackage{picinpar} +\usepackage{a4} +\def\S#1{\protect\makebox[\mylength][l]{\noindent#1}} + + + +\begin{document} + +\begin{center} +\Huge\bf TUTORIAL : AMD 2901 +\end{center} + +Welcome to the {\bf ALLIANCE} CAD system.\\ +The goal of this tutorial is to present a typical design-flow of a +simple 4 bits processor (AMD2901), using the {\bf ALLIANCE} tools. + +The tools used here are : + +\begin{itemize} +\item {\bf asimut} : {\bf VHDL} compiler and simulator. +\item {\bf genlib} : Net-List capture. +\item {\bf scr} : Standard Cell placer and router. +\item {\bf ring} : Core to pads router. +\item {\bf lynx} : Symbolic layout extractor. +\item {\bf lvx} : Net-List comparator. +\item {\bf druc} : Design rule checker. +\item {\bf graal} : Graphic layout editor. +\item {\bf yagle} : Functional abstractor. +\item {\bf proof} : Formal proof between two behavioral descriptions. +\item {\bf s2r} : Symbolic to real layout converter. +\item {\bf tas} : Timing Analysis static. +\end{itemize} +At any time you can get information on any {\bf ALLIANCE} tool using +the command :\\ +\\ +\fbox{ +{\bf $>$ man $<$tool name$>$} +}\\ +\\ +All the available documentation is described in the {\bf README} file. +This tutorial doesn't contain a description of the {\bf AMD2901}, but +the methodology used in {\bf ALLIANCE} to produce it. +Nevertheless, you will find in the file {\bf AMD2901\_doc.ps.tar}, + the original data-sheet of the circuit. +To uncompress the sheets, use the {\bf UNIX} command :\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf $>$tar xvf AMD2901\_doc.ps.tar} \\ +{\bf $>$uncompress AMD2901*.Z} +}}\\ +A GIF format of the data-sheet is also available in the file {\bf AMD2901\_doc.gif.tar}. +\\ +The design-flow used in this tutorial is composed of five steps : +\begin{itemize} +\item {\bf Step 1} : Behavioural description ({\bf VHDL} model) and simulation. +\item {\bf Step 2} : Generation and validation of the structural description +(gate net-list). +\item {\bf Step 3} : Physical design layout (Place and route). +\item {\bf Step 4} : Extraction and verification. +\item {\bf Step 5} : Timing analysis. +\item {\bf Step 6} : Chip finishing. +\end{itemize} + +In order to build the chip in about two hours, all the source files +are provided with this tutorial : +\begin{itemize} +\item {\bf amd.vbe} : {\bf VHDL} behavioural model. +\item {\bf pattern.pat} : Simulation Patterns. +\item {\bf chip.c} : Chip structural description. +\item {\bf chip.rin} : Pads placement (for {\bf ring}). +\item {\bf heart.scr} : Connectors placement (for {\bf scr}). +\item {\bf chip.inf} : Registers renaming (for {\bf desb}). +\end{itemize} + +You will use the {\bf ALLIANCE} tools to validate these input files +and to build the physical layout. +The output is a {\bf CIF} layout file ready for the foundry. + +To build the chip you can : +\begin{itemize} +\item - run the {\bf UNIX} commands in the order indicated by this tutorial. +\item - build automatically the entire {\bf AMD2901 CHIP} using the command : \\ +\\ +\fbox{ +{\bf $>$ make} +}\\ +\\ +If you want to start again this example from the begining, +you just have to type :\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf $>$ make clean} \ \\ +{\bf $>$ make} +}} +\end{itemize} + +All {\bf ALLIANCE} tools use a set of {\bf UNIX} environment variables. +These variables are set by the {\bf UNIX} command ``export''.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf $>$ MBK\_WORK\_LIB=.} \\ +{\bf $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb} \\ +{\bf $>$ export MBK\_WORK\_LIB MBK\_CATA\_LIB} +}} + +\begin{itemize} +\item{\bf MBK\_CATA\_LIB :} This variable defines all paths to the directories +containing the {\bf ALLIANCE} predefined cell libraries. +\item{\bf MBK\_WORK\_LIB :} This variable defines the working directory : +all user files will be written in this directory. +\end{itemize} +Some of the path names have to be modified in order to correspond to your particular installation of Alliance, in this tutorial we will assume that the directory structure of the sources files has not been altered +In this tutorial, the commands which are inside [ ] are preset. +If you stay in the same shell during the making of the {\bf AMD2901}, + you don't have to set again these environment variables. + +\section{Behavioural specification} + +\subsection{Behavioural model} + +The circuit behaviour is described in the amd.vbe file using the +{\bf ALLIANCE VHDL} subset (see {\it man vhdl} and {\it man vbe}). +You must run the {\bf VHDL} compiler to validate the {\bf VHDL} +file syntax.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [$>$ MBK\_WORK\_LIB=.]}\\ +{\bf [$>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [$>$ export MBK\_CATA\_LIB MBK\_WORK\_LIB]}\\ +{\bf $>$ asimut -b -c amd} +} +} +\begin{itemize} +\item {\bf amd} is the filename of the behavioural description ({\bf amd.vbe}). +\item {\bf -b} means that the file is a pure behavioural description. +\item {\bf -c} stands for compilation only (compilability is checked, +no simulation is performed). +\end{itemize} + +\subsection{Simulation patterns} +As you have specified a formal specification, +you have to define a set of simulation patterns. +The same patterns will be used to validate each design step +from specification to physical layout. +\\ +The file {\bf pattern.pat} is given as an example. + +\subsection{Simulation} +You have now a logical description of your circuit, and a list of patterns. +You can run the zero-delay VHDL simulator {\bf asimut}. +You have to set up some new environment variables specific to {\bf asimut}.\\ +\fbox{ +\shortstack[l]{ +{\bf $>$ VH\_MAXERR=10}\\ +{\bf $>$ export VH\_MAXERR} +} +} + +\begin{itemize} +\item +{\bf VH\_MAXERR} : The maximum number of errors accepted before {\bf asimut} stops simulation. +\end{itemize} + +\fbox{ +\shortstack[l]{ +{\bf $>$ VH\_PATSFX=pat] }\\ +{\bf $>$ export VH\_PATSFX]} +}} + +\begin{itemize} +\item {\bf VH\_PATSFX} the extension of simulation patterns file. +\end{itemize} + +\fbox{ +\shortstack[l]{ +{\bf [$>$ VH\_MAXERR=10]}\\ +{\bf [$>$ VH\_PATSFX=pat]}\\ +{\bf [$>$ MBK\_WORK\_LIB=.]}\\ +{\bf [$>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [$>$ export MBK\_CATA\_LIB VH\_MAXERR VH\_PATSFX MBK\_WORK\_LIB]}\\ +{\bf $>$ asimut -b amd pattern result\_beh} +} +} +\begin{itemize} +\item {\bf amd} : is the filename of the description ({\bf amd.vbe}). +\item {\bf pattern} : is the filename for the input patterns ({\bf pattern.pat}). +\item {\bf result\_beh} : is the filename for the resulting patterns ({\bf result\_beh.pat}). +\item {\bf -b} : means that the {\bf amd} file is a pure behavioural description. +\end{itemize} + +The input pattern file can provide the expected outputs. +Any difference between predicted outputs in {\bf pattern.pat} and simulation +results will be reported as commentary +on the screen and in {\bf result\_beh.pat}. This output file may be used again +for an another simulation, since it has the same format as the input file. + +\section{Structural Description} + +\subsection{Structural Design} + +The aim of this step is to build the gate level schematic +corresponding to the behavioural specification. + +We must instantiate and connect logical gates and pads, +supplied in the standard cell library {\bf scr} and the pad +library {\bf ring}. +To do this, {\bf ALLIANCE} doesn't use a schematic editor +but the procedural language {\bf genlib} +which is a set of C functions (see {\it man genlib}). + +The structural description of the {\bf AMD2901} follows a hierarchical +approach. + +\begin{itemize} +\item First, each functionnal block is described as a separate gate net-list. +There are five blocks : {\bf accu, alu, ram, muxe, muxout}. +\item The next hierarchical level is the {\bf heart} +that interconnects these five blocks among each others. +\item The final hierarchical level is the {\bf chip} +that connects the {\bf heart} to the {\bf pads}. +\end {itemize} + +The {\bf chip.c} file uses the {\bf genlib} language to describe +these 7 hierarchical blocs. + +The {\bf ALLIANCE} system accepts several external file formats for net-list +(EDIF, VHDL, SPICE, ALLIANCE, VLSI). +Environment variables allow to set the formats. +The {\bf .vst} extension corresponds to the structural {\bf VHDL}.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf $>$ MBK\_IN\_LO=vst}\\ +{\bf $>$ MBK\_OUT\_LO=vst} \\ +{\bf $>$ export MBK\_OUT\_LO MBK\_IN\_LO} +}} + +All net-list files created and used by {\bf genlib} will now +be structural {\bf VHDL}.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_IN\_LO=vst ]}\\ +{\bf [ $>$ MBK\_OUT\_LO=vst ]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_IN\_LO MBK\_OUT\_LO MBK\_WORK\_LIB]}\\ +{\bf $>$ genlib -v chip} +}} + +The 7 files {\bf alu.vst accu.vst ram.vst muxe.vst muxout.vst +heart.vst chip.vst} have been created. + +\subsection{Structural Model Simulation} + +The various net-list files we have created represent the structural +description that should be validated by simulation, using the same patterns as in step 1.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_IN\_LO=vst ]}\\ +{\bf [ $>$ VH\_PATSFX=pat ]}\\ +{\bf [ $>$ VH\_MAXERR=10 ]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_IN\_LO VH\_PATSFX}\\ +\hspace*{0.3 in}\bf VH\_MAXERR MBK\_WORK\_LIB ]\\ +{\bf $>$ asimut chip pattern result\_str} +} +} + +\begin{itemize} +\item {\bf chip} is the structural input file ({\bf chip.vst}). +\item {\bf pattern} : is the filename for the input patterns ({\bf pattern.pat}). +\item {\bf result\_str} : is filename for the resulting patterns +({\bf result\_str.pat}). +\end{itemize} + +Note the {\bf -b} option does not appear any more, since we now have a +structural model. + +Any new error appearing will be reported in the {\bf result\_str.pat} file. +You can try to introduce a schematic error by modifying the {\bf chip.c} file, +running {\bf genlib} and {\bf asimut} to see the errors. +\section{Physical Design} + +Building the heart, and routing the heart to the pads are quite different jobs. +So we use different tools. + +\subsection{Routing the heart} + +{\bf Scr} is a standard cell placing and routing tool. + +Here again {\bf ALLIANCE} accepts several external file formats +for the symbolic layout. +Environment variables allow to set the formats.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf $>$ MBK\_IN\_PH=ap}\\ +{\bf $>$ MBK\_OUT\_PH=ap}\\ +{\bf [ $>$ export MBK\_IN\_PH MBK\_OUT\_PH } +} +} +\\ +The hierarchical net-list will be flattenned before routing.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_IN\_PH=ap ]}\\ +{\bf [ $>$ MBK\_OUT\_PH=ap ]}\\ +{\bf [ $>$ MBK\_IN\_LO=vst ]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_IN\_PH MBK\_OUT\_PH}\\ +\hspace*{0.3 in}\bf MBK\_IN\_LO MBK\_WORK\_LIB]\\ +{\bf $>$ scr -p -r heart} +}} +\begin{itemize} +\item {\bf heart} is the input net-list (heart.vst ) and the connector placement (heart.scr). The output layout will be heart.ap. +\item {\bf -p} automatic placement. +\item {\bf -r} routing required. + +\end{itemize} +The symbolic layout file {\bf heart.ap} has been created. + +\subsection{Heart verification} + +\begin{itemize} +\item {DRC} : Druc checks the symbolic layout rules +(see {\it man druc})\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_IN\_PH=ap ]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf $>$ RDS\_TECHNO\_NAME=\$ALLIANCE\_TOP/etc/cmos\_7.rds }\\ +{\bf $>$ RDS\_IN=cif }\\ +{\bf $>$ RDS\_OUT=cif }\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_IN\_PH MBK\_WORK\_LIB}\\ +\hspace*{0.3 in}\bf RDS\_TECHNO\_NAME RDS\_IN RDS\_OUT]\\ +{\bf $>$ druc heart} +}}\\ +\\ +If necessary, {\bf druc} generates an error file ({\bf core.err}). + +\item {Net-list extraction}. + +{\bf Lynx} is a hierarchical extractor that provides a gate net-list.\\ +In order to avoid name collision, we use another file format +for extracted net-list ({\bf .al} format). This new format is used +to support additional data : extracted parasitic capacitances.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf $>$ MBK\_OUT\_LO=al}\\ +{\bf $>$ export MBK\_OUT\_LO} +}}\\ +\ +Then we run the {\bf lynx extractor} :\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_OUT\_LO=al ]}\\ +{\bf [ $>$ MBK\_IN\_PH=ap ]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_OUT\_LO MBK\_IN\_PH MBK\_WORK\_LIB]}\\ +{\bf $>$ lynx heart} +}}\\ +\\ +The extracted net-list file {\bf heart.al} is created at this level. +\item {Net-compare}. + +The next tool is the net-compare {\bf lvx} that performs a netlist comparison +between the input net-list {\bf heart.vst} and the extracted net-list +{\bf heart.al}, after flattening to the gate level.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_WORK\_LIB]}\\ +{\bf $>$ lvx vst al heart heart -f} +}} + +\end{itemize} + +\subsection{Routing the chip} + +The pad placement depends on external constraints. +The file {\bf chip.rin} defines the pads placement constraints +(see {\it man ring}).\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_IN\_LO=vst ]}\\ +{\bf [ $>$ MBK\_IN\_PH=ap ]}\\ +{\bf [ $>$ MBK\_OUT\_PH=ap ]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_IN\_LO}\\ +\hspace*{0.3 in}\bf MBK\_IN\_PH MBK\_OUT\_PH MBK\_WORK\_LIB]\\ +{\bf $>$ ring chip chip} +}} +\begin{itemize} +\item {\bf chip} The input files chip.vst and chip.rin (the same name +{\bf chip} must be used for the two files). +\item {\bf chip} The output physical file chip.ap. +\end{itemize} + +The symbolic layout file {\bf chip.ap} has been created. +At this point, you can display the chip with the layout editor {\bf graal}.\\ +You can see the chip and the instantiated heart, using the {\bf graal} commands to +go through the hierarchy levels.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_WORK\_LIB]}\\ +{\bf $>$ graal} +}} + +\section{Physical Validation} + +The {\bf ALLIANCE} verification tools allow both flat and hierarchical +verification. We will use a hierarchical approach. + +\subsection{Chip verification} + +The same procedure used for the heart applies for the entire chip.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_IN\_PH=ap ]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ RDS\_TECHNO\_NAME=\$ALLIANCE\_TOP/etc/cmos\_7.rds]}\\ +{\bf [ $>$ RDS\_IN=cif]}\\ +{\bf [ $>$ RDS\_OUT=cif] }\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_IN\_PH MBK\_WORK\_LIB}\\ +\hspace*{0.3 in}\bf RDS\_TECHNO\_NAME RDS\_IN RDS\_OUT]\\ +{\bf $>$ druc chip} +}}\\ +\\ +Eventually, {\bf druc} generates an error file ({\bf chip.err}).\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_OUT\_LO=al ]}\\ +{\bf [ $>$ MBK\_IN\_PH=ap ]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_OUT\_LO MBK\_IN\_PH]}\\ +{\bf $>$ lynx chip} +}}\\ +\\ +The extracted net-list file {\bf chip.al} is created by this step +(This net-list instantiates the heart).\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_WORK\_LIB]}\\ +{\bf $>$ lvx vst al chip chip} +}}\\ +\\ +Both net-lists {\bf chip.vst} and {\bf chip.al} are flattened to the gate level +by {\bf lvx} before comparison (see {\it man catal}). + +\subsection{Chip simulation} + +Finally you can check globally the extracted net-list +by applying the original patterns to the extracted net-list. +Thanks to the multiformat approach the simulator {\bf asimut} +accepts {\bf .al} format as structural input description.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf $>$ MBK\_IN\_LO=al}\\ +{\bf $>$ export MBK\_IN\_LO} +}}\\ +\\ +Then you have to run {\bf asimut}.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_IN\_LO=al]}\\ +{\bf [ $>$ VH\_PATSFX=pat]}\\ +{\bf [ $>$ VH\_MAXERR=10]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_IN\_LO}\\ +\hspace*{0.3 in}\bf VH\_PATSFX VH\_MAXERR MBK\_WORK\_LIB]\\ +{\bf $>$ asimut chip pattern res\_pattern} +}}\\ +\\ +To complete the validation of our chip, the functional abstraction followed +by the proof must be done. + +\subsection{Functionnal abstraction and formal proof} + +The functional abstraction of the transitor net-list is realized by the tool +{\bf yagle} (see {\it man yagle}). {\bf yagle} flattens the chip ({\bf chip.al}) +to obtain a transistor level description, and abstract then a behavioral description ({\bf chip.vbe}). +To keep the coherence of register names between the behavioral description +given by {\bf yagle} ({\bf chip.vbe}) and the initial behavioral description +({\bf amd.vbe}), a file describing the name's transformation is required. +This file is {\bf chip.inf}.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_IN\_LO=al ]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ export MBK\_CATA\_LIB MBK\_IN\_LO MBK\_WORK\_LIB]}\\ +{\bf $>$ yagle chip -i -v} +}} +\begin{itemize} +\item {\bf chip} is the input layout ({\bf chip.al}). +\item {\bf -i} read the {\bf chip.inf} file. +\item {\bf -v} to vectorize the interface of behavioral description. +\end{itemize} + +The VHDL DATA FLOW description as been generated : {\bf chip.vbe}\\ + +Now you have the abstracted behavioral description ({\bf chip.vbe}) +and the initial behavioral description ({\bf amd.vbe}). +With {\bf proof} (see {\it man proof}), you can check the formal equivalence +between the two descriptions.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ export MBK\_WORK\_LIB]}\\ +{\bf $>$ proof -d amd chip} +}} +\begin{itemize} +\item {\bf chip} is the abstracted file ({\bf chip.vbe}). +\item {\bf amd} is the initial behavioral description ({\bf amd.vbe}). +\item {\bf -d} displays errors. +\end{itemize} + +If you want to see an error you can change one line in the file {\bf amd.vbe}. +For example, change the line 301 :\\ + scout $<=$ NOT accu(3) AND test\_mode ;\\ +and try {\bf proof} again. + +\section{Timing analysis} +With the extracted net list chip.al TAs analyses each path of the circuit taking account of the various capacitances. These results are summarize in a file .ttv In this file we can see the critical path and the correspnding time. So it is possible to know the period of the chip + +You will enter :\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_IN\_PH=ap ]}\\ +{\bf [ $>$ MBK\_IN\_LO=al ]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ export MBK\_IN\_PH MBK\_WORK\_LIB MBK\_CATA\_LIB ]}\\ +{\bf $>$ tas chip } +}}\\ + +\section{Chip finishing} + +Until now we used symbolic layout (all coordinates in {\bf lambda}-units). +We should now convert them to real dimensions, creating the physical layout +(two output formats are supported : CIF and GDSII). +This last step is done by {\bf s2r}. +{\bf s2r} performs symbolic to real expansion, gap filling, denotching +and instantiates preexisting physical cells +(this is necessary for the pads). + +You must define 3 new environment variables :\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf $>$ RDS\_TECHNO\_NAME=/\$ALLIANCE\_TOP/etc/prol10.rds} \\ +{\bf $>$ export RDS\_TECHNO\_NAME} +}}\\ +\\ +The {\bf prol10.rds} is the technology file that contains the parameters +corresponding to the target process. +(In this case the target process is 1 micron.)\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf $>$ RDS\_OUT= cif} \\ +{\bf $>$ export RDS\_OUT} +}}\\ +\\ +Defines the output format.\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf $>$ RDS\_IN=cif}\\ +{\bf $>$ export RDS\_IN} +}}\\ +\\ +Defines the input format for the preexisting layout cells (pads). + +You will enter :\\ +\\ +\fbox{ +\shortstack[l]{ +{\bf [ $>$ MBK\_IN\_PH=ap ]}\\ +{\bf [ $>$ MBK\_WORK\_LIB=. ]}\\ +{\bf [ $>$ MBK\_CATA\_LIB=.:/\$ALLIANCE\_TOP/cells/sclib/prol10:/\$ALLIANCE\_TOP/cells/ring/padsymb]}\\ +{\bf [ $>$ RDS\_TECHNO\_NAME=/\$ALLIANCE\_TOP/etc/prol10.rds ]}\\ +{\bf [ $>$ RDS\_IN=cif ]}\\ +{\bf [ $>$ RDS\_OUT=cif]}\\ +{\bf [ $>$ export RDS\_OUT MBK\_IN\_PH MBK\_WORK\_LIB}\\ +\hspace*{0.3 in}\bf MBK\_CATA\_LIB RDS\_TECHNO\_NAME RDS\_IN]\\ +{\bf $>$ s2r -c chip amd2901} +}} +\begin{itemize} +\item {\bf -c} deletes connectors at the highest level of hierarchy. +\end{itemize} + +You did it...\\ +The file produced is {\bf amd2901.cif}. +It is ready for the foundry. + +\end{document} + + diff --git a/alliance/share/tutorials/amd2901/tutorial.ps b/alliance/share/tutorials/amd2901/tutorial.ps deleted file mode 100644 index 21ea203c..00000000 --- a/alliance/share/tutorials/amd2901/tutorial.ps +++ /dev/null @@ -1,2271 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software -%%Title: tutorial.dvi -%%Pages: 11 -%%PageOrder: Ascend -%%BoundingBox: 0 0 596 842 -%%DocumentPaperSizes: A4 -%%EndComments -%DVIPSCommandLine: dvips tutorial.dvi -%DVIPSParameters: dpi=400, comments removed -%DVIPSSource: TeX output 1997.12.10:1559 -%%BeginProcSet: tex.pro -/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N -/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 -mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} -ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale -isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div -hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul -TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} -forall round exch round exch]setmatrix}N /@landscape{/isls true N}B -/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B -/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ -/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N -string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N -end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ -/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] -N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup -length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ -128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub -get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data -dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N -/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup -/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx -0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff -setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff -.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]} -if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup -length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ -cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin -0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul -add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict -/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook -known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X -/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for -65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 -0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V -{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 -getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} -ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false -RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 -false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform -round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg -rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail -{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} -B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ -4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ -p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p -a}B /bos{/SS save N}B /eos{SS restore}B end -%%EndProcSet -TeXDict begin 39158280 55380996 1000 400 400 (tutorial.dvi) -@start /Fa 19 122 df<001F0000007F8C0001E1DE0003C0FE0007807C000F007C001E -003C001E003C003E0078003C0078007C0078007C007800F800F000F800F000F800F000F8 -00F000F001E000F001E180F001E180F003E180F003C3007007C300780DC3003C39E6001F -F0FC0007C07800191A79991F>97 D<01E0003FE0003FE00003E00003C00003C00003C000 -03C0000780000780000780000780000F00000F00000F00000F00001E1F001E7F801EE1C0 -1F80E03F00F03E00F03C00F03C00F87800F87800F87800F87800F8F001F0F001F0F001F0 -F001E0F003E0E003C0E003C0E00780E00F00700F00701E003878001FF0000FC000152A79 -A91C>I<000FC0007FF000F07003C0380780780F00F81F00F81E00703E00003C00007C00 -007C0000F80000F80000F80000F80000F80000F00000F00000F000107800307800603801 -C01E0F800FFE0003F000151A79991C>I<000001E000003FE000003FE0000003E0000003 -C0000003C0000003C0000003C00000078000000780000007800000078000000F0000000F -0000000F0000000F00001F1E00007F9E0001E1DE0003C0FE0007807C000F007C001E003C -001E003C003E0078003C0078007C0078007C007800F800F000F800F000F800F000F800F0 -00F001E000F001E180F001E180F003E180F003C3007007C300780DC3003C39E6001FF0FC -0007C078001B2A79A91F>I<001FC0007FE001F07003C0180780180F00181E00183E0030 -3E00707C01E07FFFC07FFE00F80000F80000F80000F80000F80000F80000F80000780010 -7800307800603C01C01E0F800FFE0003F000151A79991C>I<000007C000000FE000001C -70000038F0000079F0000071F00000F0E00000F0000000F0000000F0000001E0000001E0 -000001E0000001E0000001E0000003C000007FFF80007FFF000003C0000003C0000003C0 -000007800000078000000780000007800000078000000F0000000F0000000F0000000F00 -00000F0000001E0000001E0000001E0000001E0000001E0000003C0000003C0000003C00 -00003C0000003C0000007800000078000000780000007000000070000000F0000030E000 -0078E00000F9C00000F9C00000F38000007F0000003E0000001C3681A913>I<0001F000 -0007F8C0001E1DE0003C0FE0007807C000F007C001E003C001E003C003E0078003C00780 -07C0078007C007800F800F000F800F000F800F000F800F000F001E000F001E000F001E00 -0F003E000F003C0007007C000780FC0003C3BC0001FF7800007C78000000780000007800 -0000F0000000F0000000F0000001E0007001E000F803C000F8078000F01F00007FFC0000 -3FF000001B267D991C>I<003C000007FC000007FC0000007C0000007800000078000000 -7800000078000000F0000000F0000000F0000000F0000001E0000001E0000001E0000001 -E0000003C1F80003C7FE0003DE0F0003F80F0007E0070007E0078007C00780078007800F -800F000F000F000F000F000F000F001E001E001E001E001E001E001E003C003C003C003C -003C303C0078303C0078307800786078007060780070C078007180F0003F0060001E001C -2A7CA91F>I<000C001E003E003E001C0000000000000000000000000000000000000000 -03C00FE01C701870307060F060F060F0C1E001E001E003C003C003C0078007800F000F06 -0F061E0C1E0C1E0C1E180E300FE003C00F297BA813>I<007807F80FF800F800F000F000 -F000F001E001E001E001E003C003C003C003C007800780078007800F000F000F000F001E -001E001E001E003C003C003C003C007800786078607860F0C0F0C071C071803F001E000D -2A7BA90F>108 D<07807E00FC000FC1FF83FF0018E383C7078030F603CC078030FC01F8 -03C060F801F003C060F801F003C060F001E003C0C1F003E0078001E003C0078001E003C0 -078001E003C0078003C007800F0003C007800F0003C007800F0003C007801E0007800F00 -1E0007800F001E0C07800F003C0C07800F003C180F001E003C180F001E0078300F001E00 -38300F001E0038E01E003C001FC00C0018000F002E1A7B9932>I<0F007E001F81FF8031 -C783C031EE03C061F801C061F801E061F001E061E001E0C3E003C003C003C003C003C003 -C003C007800780078007800780078007800F000F000F000F000F0C0F001E0C0F001E0C1E -001E181E001C181E001C301E001C603C000FC0180007801E1A7B9922>I<000FC0007FF0 -00F07803C03C07801C0F001E1F001E1E001F3E001F3C001F7C001F7C001FF8003EF8003E -F8003EF8003CF8007CF00078F000F8F000F07801E07803C03807801E1F000FFC0003F000 -181A79991F>I<007807C000FC1FE0018E3870018F6038030FC03C030F803C030F003C03 -0F003E061E003E001E003E001E003E001E003E003C007C003C007C003C007C003C007800 -7800F8007800F0007800F0007801E000F803C000F803C000FC078000FE1E0001E7FC0001 -E1F00001E0000001E0000003C0000003C0000003C0000003C00000078000000780000007 -8000000F8000007FF80000FFF800001F2680991F>I<0780F80FC3FE18E70730FE0730FC -0F60F81F60F01F60F00EC1E00001E00001E00001E00003C00003C00003C00003C0000780 -000780000780000780000F00000F00000F00000F00001E00000C0000181A7B991A>114 -D<00300078007800F000F000F000F001E001E001E001E0FFFFFFFF03C003C00780078007 -8007800F000F000F000F001E001E001E001E003C003C063C063C0C780C781838303C601F -C00F8010257AA414>116 D<03C0018007F003C00C7003C0187803C03078078030780780 -6078078060F00780C0F00F0000F00F0001E00F0001E00F0001E01E0003C01E0003C01E00 -03C01E0007803C0007803C1807803C1807803C1807807830078078300380F86003C3BC60 -01FF1FC0007C0F801D1A7B9921>I<07800E000FE01F0018E01F8030F01F8030F00F8060 -F0078060F0078061E00380C1E0030001E0030003C0030003C0030003C006000780060007 -80060007800C000F000C000F000C000F0018000F0010000F003000070060000780C00003 -C1800001FF0000007E0000191A7B991C>I<07C001800FE003C018E003C030F003C030F0 -078060F0078060F0078061E00780C1E00F0001E00F0003C00F0003C00F0003C01E000780 -1E0007801E0007801E000F003C000F003C000F003C000F003C000F0078000F00F8000781 -F8000783F80003FEF00000FCF0000000F0000000F0000001E0000801E0003C03C0003E03 -80007C0780007C0F0000301E0000387C00001FF000000FC000001A267B991D>121 -D E /Fb 33 119 df<00007FE0000007FFF800001FE03C00007F000E0000FE003F0001FC -007F8001F8007F8003F8007F8003F8007F8003F8003F0003F8001E0003F800000003F800 -000003F800000003F800000003F8000000FFFFFFFF80FFFFFFFF80FFFFFFFF8003F8003F -8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F80 -03F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003 -F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8003F8 -003F8003F8003F807FFF83FFFC7FFF83FFFC7FFF83FFFC262E7FAD2A>12 -D<1E003F007F80FFC0FFC0FFC0FFC07F803F001E000A0A7B8915>46 -D<0003800000078000001F800000FF8000FFFF8000FFFF8000FF7F8000007F8000007F80 -00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80 -00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80 -00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80 -00007F8000007F8000007F8000007F8000FFFFFF80FFFFFF80FFFFFF80192B7AAA25>49 -D<007FC00003FFF8000FFFFC001F01FF003C007F807C007FC07E003FC0FF003FE0FF801F -E0FF801FF0FF801FF0FF801FF07F001FF03E001FF000001FF000001FE000003FE000003F -C000003FC000007F8000007F000000FE000000FC000001F8000003F0000007E000000780 -00000F0000001E0000003C00700078007000F0007001C000E0018000E0030000E007FFFF -E00FFFFFE01FFFFFE03FFFFFE07FFFFFC0FFFFFFC0FFFFFFC0FFFFFFC01C2B7CAA25>I< -003FE00001FFFC0003FFFF0007C07F800F003FC01F801FE03FC01FE03FE01FF03FE01FF0 -3FE01FF03FE01FF01FC01FF00F801FE000001FE000003FC000003F8000007F0000007E00 -0001FC00007FE000007FFC0000007F0000003FC000001FE000001FF000000FF000000FF8 -00000FF800000FFC3F000FFC7F800FFC7F800FFCFFC00FFCFFC00FFCFFC00FF8FFC00FF8 -7F801FF07F001FE03C003FC01F807F800FFFFF0003FFFC00007FE0001E2B7DAA25>I<00 -0001C0000003C0000007C000000FC000001FC000001FC000003FC000007FC00000FFC000 -01DFC00001DFC000039FC000071FC0000E1FC0001E1FC0001C1FC000381FC000701FC000 -E01FC000E01FC001C01FC003801FC007001FC00E001FC00E001FC01C001FC038001FC070 -001FC0E0001FC0FFFFFFFFFFFFFFFFFFFFFFFF00003FC000003FC000003FC000003FC000 -003FC000003FC000003FC000003FC0001FFFFF001FFFFF001FFFFF202B7EAA25>I66 -D<00000FFE00180000FFFFC0380007FFFFF078001FFC01F8F8003FE0003FF800FF80000F -F801FF000007F803FC000003F807FC000001F80FF8000000F80FF0000000F81FF0000000 -781FE0000000783FE0000000783FE0000000387FE0000000387FC0000000387FC0000000 -00FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0000000 -00FFC000000000FFC000000000FFC000000000FFC0000000007FC0000000007FC0000000 -007FE0000000383FE0000000383FE0000000381FE0000000381FF0000000700FF0000000 -700FF80000007007FC000000E003FC000001C001FF0000038000FF80000700003FE0001E -00001FFC00FC000007FFFFF0000000FFFFC00000000FFE00002D2E7CAD36>I -I70 -D72 D77 -D82 D<003FE0060001FFFC0E0003FFFF1E000FE01FFE001F0003FE001E0000FE -003E00007E007C00003E007C00001E00FC00001E00FC00001E00FC00000E00FE00000E00 -FE00000E00FF00000000FFC00000007FF80000007FFF8000007FFFFC00003FFFFF80001F -FFFFC0000FFFFFF00007FFFFF80003FFFFFC0000FFFFFC00001FFFFE000001FFFF000000 -1FFF00000001FF000000007F800000007F800000003F806000001F80E000001F80E00000 -1F80E000001F80F000001F00F000001F00F800003F00F800003E00FE00007C00FF8000F8 -00FFF003F000F3FFFFE000E07FFF8000C00FFE0000212E7CAD2A>I<01FFE000000FFFF8 -00001F007E00003F803F00003FC01F80003FC01FC0003FC00FC0001F800FE0000F000FE0 -0000000FE00000000FE00000000FE00000007FE000003FFFE00001FFCFE00007F80FE000 -0FE00FE0001F800FE0003F000FE0007F000FE000FE000FE000FE000FE000FE000FE000FE -000FE000FE001FE0007F001FE0003F0037F0001FC0E7FF800FFFC3FF8001FF00FF80211E -7E9D24>97 D<03F0000000FFF0000000FFF0000000FFF000000007F000000007F0000000 -07F000000007F000000007F000000007F000000007F000000007F000000007F000000007 -F000000007F000000007F000000007F07F800007F1FFF00007F780FC0007FE003E0007FC -001F0007F8001F8007F0000FC007F0000FE007F00007F007F00007F007F00007F007F000 -07F807F00007F807F00007F807F00007F807F00007F807F00007F807F00007F807F00007 -F807F00007F007F00007F007F0000FE007F0000FE007F0000FC007F8001F8007FC003F00 -07EE007E0007C781FC000783FFF00007007F8000252E7EAD2A>I<000FFC00007FFF0001 -F807C007E00FC00FC01FE01FC01FE01F801FE03F800FC07F8007807F0000007F000000FF -000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F -0000007F8000003F8000701F8000701FC000E00FC000E007E003C001F80F80007FFE0000 -0FF0001C1E7E9D21>I<0000003F0000000FFF0000000FFF0000000FFF000000007F0000 -00007F000000007F000000007F000000007F000000007F000000007F000000007F000000 -007F000000007F000000007F000000007F00000FF87F00007FFE7F0001FC0F7F0003F003 -FF0007E000FF000FC0007F001F80007F003F80007F003F80007F007F00007F007F00007F -00FF00007F00FF00007F00FF00007F00FF00007F00FF00007F00FF00007F00FF00007F00 -FF00007F007F00007F007F00007F007F00007F003F80007F001F80007F000FC000FF0007 -C001FF0003E003FF0001F80F7FF8007FFC7FF8000FF07FF8252E7EAD2A>I<001FF00000 -FFFC0001F83F0007E00F800FC007C01F8007E01F8003E03F8003F07F0003F07F0001F87F -0001F8FF0001F8FF0001F8FFFFFFF8FFFFFFF8FF000000FF000000FF000000FF0000007F -0000007F0000007F0000003F8000381F8000380FC0007007C000E003E001C001F80F8000 -7FFF00000FF8001D1E7E9D22>I<0003FC00001FFE00003F0F00007E1F8000FC3FC001FC -3FC003F83FC003F81F8003F80F0003F8060003F8000003F8000003F8000003F8000003F8 -000003F80000FFFFF000FFFFF000FFFFF00003F8000003F8000003F8000003F8000003F8 -000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8 -000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8 -000003F800003FFFE0003FFFE0003FFFE0001A2E7EAD17>I<003FC03E0001FFF9FF0003 -F0FFCF8007C03E1F800FC03F0F801F801F87001F801F80003F801FC0003F801FC0003F80 -1FC0003F801FC0003F801FC0003F801FC0001F801F80001F801F80000FC03F000007C03E -000007F0FC00000FFFF800000C3FC000001C000000001C000000001C000000001E000000 -001F000000001FFFFE00000FFFFFC0000FFFFFF00007FFFFF80003FFFFFC001FFFFFFE00 -3E0001FE007C00003F007800001F00F800001F00F800001F00F800001F00F800001F007C -00003E003E00007C001F0000F8000FE007F00003FFFFC000003FFC0000212C7E9D25>I< -03F0000000FFF0000000FFF0000000FFF000000007F000000007F000000007F000000007 -F000000007F000000007F000000007F000000007F000000007F000000007F000000007F0 -00000007F000000007F01FC00007F07FF00007F1E0F80007F380FC0007F6007E0007FC00 -7E0007FC007F0007F8007F0007F8007F0007F0007F0007F0007F0007F0007F0007F0007F -0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00 -07F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00FF -FF8FFFF8FFFF8FFFF8FFFF8FFFF8252E7DAD2A>I<07800FC01FE03FF03FF03FF03FF01F -E00FC00780000000000000000000000000000007E0FFE0FFE0FFE00FE00FE00FE00FE00F -E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F -E0FFFEFFFEFFFE0F2F7DAE14>I<07E0FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE0 -0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 -0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2E -7DAD14>108 D<03E01FC001FC0000FFE07FF007FF0000FFE1E0F81E0F8000FFE380FC38 -0FC00007E6007E6007E00007EC007EC007E00007EC007FC007F00007F8007F8007F00007 -F8007F8007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F00 -07F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007 -F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F00 -07F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007 -F0007F0007F000FFFF8FFFF8FFFF80FFFF8FFFF8FFFF80FFFF8FFFF8FFFF80391E7D9D3E ->I<03E01FC000FFE07FF000FFE1E0F800FFE380FC0007E6007E0007EC007E0007EC007F -0007F8007F0007F8007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00 -07F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007 -F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00FFFF8FFFF8FFFF -8FFFF8FFFF8FFFF8251E7D9D2A>I<001FF80000FFFF0003F81FC007E007E00FC003F01F -8001F83F8001FC3F8001FC7F0000FE7F0000FE7F0000FEFF0000FFFF0000FFFF0000FFFF -0000FFFF0000FFFF0000FFFF0000FFFF0000FF7F0000FE7F0000FE7F0000FE3F8001FC3F -8001FC1F8001F80FC003F007E007E003F81FC000FFFF00001FF800201E7E9D25>I<03F0 -7F8000FFF1FFF000FFF781FC00FFFE007E0007FC003F0007F8001F8007F0001FC007F000 -0FE007F0000FF007F0000FF007F00007F007F00007F807F00007F807F00007F807F00007 -F807F00007F807F00007F807F00007F807F00007F807F00007F007F0000FF007F0000FE0 -07F0000FE007F0001FC007F8001F8007FC003F0007FE007E0007F781FC0007F3FFF00007 -F07F800007F000000007F000000007F000000007F000000007F000000007F000000007F0 -00000007F000000007F000000007F0000000FFFF800000FFFF800000FFFF800000252B7E -9D2A>I<03E0FC00FFE1FF00FFE30F80FFE61F8007EC3FC007EC3FC007F83FC007F81F80 -07F80F0007F8000007F0000007F0000007F0000007F0000007F0000007F0000007F00000 -07F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000 -07F00000FFFFC000FFFFC000FFFFC0001A1E7E9D1F>114 D<01FF0C0FFFFC1E01FC3800 -7C70003C70001CF0001CF0001CF8001CFE0000FFC0007FFE007FFFC03FFFF00FFFF807FF -FC01FFFE000FFE0000FF60003FE0001FE0000FF0000FF0000FF8000EF8001EFE001CFF80 -F8F3FFE0C0FF80181E7E9D1D>I<00380000380000380000380000780000780000780000 -F80000F80001F80003F80007F8001FFFFCFFFFFCFFFFFC03F80003F80003F80003F80003 -F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80E03 -F80E03F80E03F80E03F80E03F80E03F80E01F81C00FC1C007C38003FF0000FE0172A7FA9 -1D>I<03F0003F00FFF00FFF00FFF00FFF00FFF00FFF0007F0007F0007F0007F0007F000 -7F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F -0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00 -07F0007F0007F0007F0007F000FF0007F000FF0003F001FF0001F0037F0000FC0E7FF800 -7FFC7FF8001FF07FF8251E7D9D2A>II -E /Fc 32 122 df<000003FF800000007FFFE0000001FFFFF0000007FE01F800001FF000 -7C00003FE000FE00007FC001FF0000FF8003FF0000FF8003FF0001FF0003FF0001FF0003 -FF0001FF0001FE0001FF0000FC0001FF0000780001FF0000000001FF0000000001FF0000 -000001FF0000000001FF0000000001FF00000000FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF -FF00FFFFFFFFFF0001FF0003FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001 -FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001 -FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001 -FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001 -FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF0001FF003FFFF83FFFF83FFFF83F -FFF83FFFF83FFFF83FFFF83FFFF82D377FB632>12 D<000038000000F8000003F800000F -F80000FFF800FFFFF800FFFFF800FFFFF800FF1FF800001FF800001FF800001FF800001F -F800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001F -F800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001F -F800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001F -F800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800FFFF -FFFEFFFFFFFEFFFFFFFEFFFFFFFE1F3479B32D>49 D<000FFC0000007FFFC00001FFFFF0 -0007FFFFF8000FE03FFE001F000FFF003E0003FF807F0001FF807F8001FFC0FFC000FFE0 -FFE000FFE0FFE0007FE0FFE0007FF0FFE0007FF0FFE0007FF07FC0007FF03F80007FF01F -00007FF00000007FF00000007FE0000000FFE0000000FFC0000000FFC0000001FF800000 -01FF00000003FE00000007FC00000007F80000000FF00000001FC00000003F800000007F -00000000FC00000001F800000003F000F00007C000F0000F8000F0001F0000F0003E0001 -E000780001E000F00001E001E00003E003FFFFFFE007FFFFFFE00FFFFFFFE01FFFFFFFE0 -3FFFFFFFE07FFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC024347CB32D> -I<000FFE0000003FFFC00000FFFFF00003F80FFC0007C003FE000F8003FF000F8001FF80 -1FE001FF801FF001FFC03FF801FFC03FF801FFC03FF801FFC03FF801FFC03FF801FFC01F -F001FF800FE001FF8007C003FF80000003FF00000003FE00000007FC00000007F8000000 -0FF00000007FE000001FFF8000001FFE0000001FFFC00000001FF000000007FC00000003 -FE00000001FF00000001FF80000000FFC0000000FFE0000000FFE0000000FFF00F0000FF -F03FC000FFF07FE000FFF07FE000FFF0FFF000FFF0FFF000FFF0FFF000FFE0FFF000FFE0 -FFE000FFE07FE001FFC07FC001FF803F0003FF801F8007FF000FF00FFE0007FFFFF80003 -FFFFF000007FFFC000000FFC000024357CB32D>I<0000001F000000003F000000003F00 -0000007F00000000FF00000001FF00000003FF00000003FF00000007FF0000000FFF0000 -001FFF0000003FFF0000007DFF00000079FF000000F1FF000001E1FF000003E1FF000007 -C1FF00000781FF00000F01FF00001E01FF00003E01FF00007C01FF00007801FF0000F001 -FF0001E001FF0003C001FF0007C001FF000F8001FF000F0001FF001E0001FF003C0001FF -007C0001FF00F80001FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000003FF00 -000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF0000 -0003FF000007FFFFFF0007FFFFFF0007FFFFFF0007FFFFFF28337EB22D>I<0400000300 -0F80001F000FF800FF000FFFFFFE000FFFFFFC000FFFFFF8000FFFFFF0000FFFFFE0000F -FFFFC0000FFFFF80000FFFFE00000FFFF800000F1F0000000F000000000F000000000F00 -0000000F000000000F000000000F000000000F03FE00000F0FFFC0000F3FFFF0000F7C07 -FC000FF001FE000FC001FF000F8000FF800F0000FF800600007FC00000007FC00000007F -E00000007FE00000007FF00000007FF00000007FF00E00007FF03F80007FF07FC0007FF0 -FFC0007FF0FFE0007FF0FFE0007FF0FFE0007FE0FFC0007FE0FFC0007FE07F8000FFC07E -0000FF803C0000FF803E0001FF001F8003FE000FF01FFC0007FFFFF80001FFFFE000007F -FF8000000FF8000024357CB32D>I<00003FE0000001FFF8000007FFFC00001FF03E0000 -7F800F0000FF001F8001FE003F8003FC007FC007F800FFC007F800FFC00FF000FFC01FF0 -00FFC01FF0007F803FF0003F003FF0001E003FE00000007FE00000007FE00000007FE000 -00007FE1FFC000FFE3FFF000FFE7DFF800FFEE01FC00FFEC00FE00FFF800FF00FFF8007F -80FFF0007FC0FFF0007FC0FFF0007FE0FFF0007FE0FFE0007FE0FFE0007FF0FFE0007FF0 -FFE0007FF0FFE0007FF07FE0007FF07FE0007FF07FE0007FF07FE0007FF03FE0007FF03F -E0007FE03FE0007FE01FE0007FE01FF0007FC00FF0007FC00FF000FF8007F800FF0003FC -01FE0001FE07FC0000FFFFF800007FFFF000001FFFC0000003FE000024357CB32D>I66 -D<0000007FF0000C00000FFFFE001C00007FFFFF803C0001FFFFFFE07C0007FFF007F0FC -000FFF0000FDFC003FFC00003FFC007FF000001FFC00FFE000000FFC01FF80000007FC03 -FF00000003FC07FF00000001FC07FE00000001FC0FFE00000000FC0FFC00000000FC1FFC -000000007C3FF8000000007C3FF8000000007C3FF8000000003C7FF8000000003C7FF800 -0000003C7FF0000000003C7FF00000000000FFF00000000000FFF00000000000FFF00000 -000000FFF00000000000FFF00000000000FFF00000000000FFF00000000000FFF0000000 -0000FFF00000000000FFF00000000000FFF000000000007FF000000000007FF000000000 -007FF8000000003C7FF8000000003C3FF8000000003C3FF8000000003C3FF8000000003C -1FFC00000000780FFC00000000780FFE000000007807FE00000000F007FF00000000F003 -FF80000001E001FF80000003C000FFE0000007C0007FF000000F80003FFC00001F00000F -FF00007E000007FFF003F8000001FFFFFFF00000007FFFFFC00000000FFFFF0000000000 -7FF0000036397BB741>II80 D<000FFC0018007FFFC03801FFFF -F07803FFFFF8F807F803FDF80FE0007FF81FC0001FF83F800007F83F800003F87F000003 -F87F000001F87F000001F8FF000000F8FF000000F8FF00000078FF80000078FF80000078 -FFC0000078FFE0000000FFF00000007FFE0000007FFFE000007FFFFF00003FFFFFE0001F -FFFFFC001FFFFFFE000FFFFFFF0007FFFFFFC003FFFFFFE000FFFFFFE0003FFFFFF0000F -FFFFF80000FFFFF8000007FFFC0000007FFC0000001FFC0000000FFE00000007FE000000 -03FE70000003FEF0000001FEF0000001FEF0000001FEF0000001FEF8000001FCF8000001 -FCFC000001FCFC000003F8FE000003F8FF000007F0FFC00007F0FFF0000FE0FFFF007FC0 -F8FFFFFF80F07FFFFE00E00FFFF800C000FFC00027397BB732>83 -D<3FFFFFFFFFFFF83FFFFFFFFFFFF83FFFFFFFFFFFF83FFFFFFFFFFFF83FF003FF801FF8 -7F8003FF8003FC7F0003FF8001FC7E0003FF8000FC7C0003FF80007C7C0003FF80007C78 -0003FF80003C780003FF80003C780003FF80003C780003FF80003CF80003FF80003EF000 -03FF80001EF00003FF80001EF00003FF80001EF00003FF80001E000003FF800000000003 -FF800000000003FF800000000003FF800000000003FF800000000003FF800000000003FF -800000000003FF800000000003FF800000000003FF800000000003FF800000000003FF80 -0000000003FF800000000003FF800000000003FF800000000003FF800000000003FF8000 -00000003FF800000000003FF800000000003FF800000000003FF800000000003FF800000 -000003FF800000000003FF800000000003FF800000000003FF800000000003FF80000000 -0003FF800000000003FF800000000003FF800000000003FF800000003FFFFFFFF800003F -FFFFFFF800003FFFFFFFF800003FFFFFFFF80037367DB53E>I86 D<003FFE00000001FFFFE0000007FFFFF800000FF007FC00001FF001FE0000 -1FF800FF00001FF800FF80001FF8007F80001FF8007FC0000FF0007FC00007E0007FC000 -0180007FC0000000007FC0000000007FC00000003FFFC000000FFFFFC000007FFF7FC000 -01FF807FC00007FE007FC0000FF8007FC0001FE0007FC0003FC0007FC0007FC0007FC000 -FF80007FC000FF80007FC000FF80007FC000FF80007FC000FF8000FFC000FFC000FFC000 -7FC001BFC0003FE003BFE0001FF80F3FFF800FFFFE1FFF8003FFF80FFF80003FE003FF80 -29237EA22C>97 D<0003FFC000001FFFF800007FFFFE0001FF00FF0003FC00FF8007F801 -FF800FF001FF801FE001FF803FE001FF803FE000FF007FC0007E007FC00018007FC00000 -00FFC0000000FFC0000000FFC0000000FFC0000000FFC0000000FFC0000000FFC0000000 -FFC0000000FFC00000007FC00000007FC00000007FE00000003FE00003C03FE00003C01F -F00007800FF800078007F8000F0003FE001E0001FF80FC00007FFFF800001FFFE0000003 -FF000022237DA228>99 D<00000001FC00000000FFFC00000000FFFC00000000FFFC0000 -0000FFFC000000000FFC0000000007FC0000000007FC0000000007FC0000000007FC0000 -000007FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007FC0000 -000007FC0000000007FC0000000007FC0000000007FC000003FE07FC00001FFFC7FC0000 -7FFFF7FC0001FF80FFFC0003FC003FFC0007F8000FFC000FF00007FC001FE00007FC003F -E00007FC003FE00007FC007FC00007FC007FC00007FC007FC00007FC00FFC00007FC00FF -C00007FC00FFC00007FC00FFC00007FC00FFC00007FC00FFC00007FC00FFC00007FC00FF -C00007FC00FFC00007FC007FC00007FC007FC00007FC007FC00007FC003FE00007FC003F -E00007FC001FE00007FC000FF0000FFC0007F0001FFC0003FC007FFE0001FF01FFFFE000 -FFFFE7FFE0003FFF87FFE00007FC07FFE02B377DB632>I<0003FF0000001FFFF000007F -FFF80001FF03FE0003FC007F0007F8003F800FF0003F801FE0001FC03FE0001FE03FE000 -0FE07FC0000FE07FC0000FF07FC0000FF0FFC0000FF0FFFFFFFFF0FFFFFFFFF0FFFFFFFF -F0FFC0000000FFC0000000FFC0000000FFC0000000FFC00000007FC00000007FC0000000 -3FE00000003FE00000F01FE00000F01FF00001E00FF80001E007FC0003C003FE000F8000 -FFC03F00007FFFFC00001FFFF0000001FF800024237EA229>I<000000007C00000FFE01 -FE00007FFFC7FF0001FFFFFF9F8003FC07FC3F8007F001FC3F800FF001FE3F801FE000FF -1F001FE000FF0E001FE000FF00003FE000FF80003FE000FF80003FE000FF80003FE000FF -80003FE000FF80001FE000FF00001FE000FF00001FE000FF00000FF001FE000007F001FC -000003FC07F8000003FFFFF00000077FFFC00000060FFE0000000E00000000000F000000 -00000F00000000000F00000000000FC0000000000FFFFFF000000FFFFFFF00000FFFFFFF -C00007FFFFFFF00003FFFFFFF80001FFFFFFFC0003FFFFFFFC000FFFFFFFFE003F80000F -FE007F000001FF007E000000FF00FE0000007F00FE0000007F00FE0000007F00FE000000 -7F007F000000FE007F000000FE003F800001FC001FE00007F80007FC003FE00003FFFFFF -C000007FFFFE00000007FFE0000029347EA32D>103 D<01FC00000000FFFC00000000FF -FC00000000FFFC00000000FFFC000000000FFC0000000007FC0000000007FC0000000007 -FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007 -FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007 -FC03FE000007FC0FFF800007FC3FFFE00007FC7C1FF00007FCE00FF80007FDC00FF80007 -FF8007F80007FF0007FC0007FE0007FC0007FE0007FC0007FE0007FC0007FC0007FC0007 -FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007 -FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007 -FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007 -FC0007FC00FFFFE0FFFFE0FFFFE0FFFFE0FFFFE0FFFFE0FFFFE0FFFFE02B377CB632>I< -03C0000FF0001FF8001FF8003FFC003FFC003FFC003FFC001FF8001FF8000FF00003C000 -00000000000000000000000000000000000000000000000000000001FC00FFFC00FFFC00 -FFFC00FFFC000FFC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC00 -07FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC00 -07FC0007FC0007FC0007FC00FFFFE0FFFFE0FFFFE0FFFFE013387DB718>I<01FC00FFFC -00FFFC00FFFC00FFFC000FFC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC -0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC -0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC -0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC -0007FC00FFFFE0FFFFE0FFFFE0FFFFE013377DB618>108 D<03F801FF0000FF8000FFF8 -0FFFC007FFE000FFF81FFFF00FFFF800FFF87C0FF83E07FC00FFF8E007F87003FC000FF9 -C007FCE003FE0007F98003FCC001FE0007FB0003FF8001FF0007FE0003FF0001FF0007FE -0003FF0001FF0007FE0003FF0001FF0007FC0003FE0001FF0007FC0003FE0001FF0007FC -0003FE0001FF0007FC0003FE0001FF0007FC0003FE0001FF0007FC0003FE0001FF0007FC -0003FE0001FF0007FC0003FE0001FF0007FC0003FE0001FF0007FC0003FE0001FF0007FC -0003FE0001FF0007FC0003FE0001FF0007FC0003FE0001FF0007FC0003FE0001FF0007FC -0003FE0001FF0007FC0003FE0001FF0007FC0003FE0001FF0007FC0003FE0001FF0007FC -0003FE0001FF0007FC0003FE0001FF00FFFFE07FFFF03FFFF8FFFFE07FFFF03FFFF8FFFF -E07FFFF03FFFF8FFFFE07FFFF03FFFF845237CA24C>I<03F803FE0000FFF80FFF8000FF -F83FFFE000FFF87C1FF000FFF8E00FF8000FF9C00FF80007FB8007F80007FB0007FC0007 -FE0007FC0007FE0007FC0007FE0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007 -FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007 -FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007 -FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC00FFFFE0FFFFE0FF -FFE0FFFFE0FFFFE0FFFFE0FFFFE0FFFFE02B237CA232>I<0001FF8000001FFFF800007F -FFFE0001FF00FF8003FC003FC007F8001FE00FF0000FF01FE00007F83FE00007FC3FE000 -07FC7FC00003FE7FC00003FE7FC00003FEFFC00003FFFFC00003FFFFC00003FFFFC00003 -FFFFC00003FFFFC00003FFFFC00003FFFFC00003FFFFC00003FF7FC00003FE7FC00003FE -7FC00003FE3FE00007FC3FE00007FC1FE00007F80FF0000FF007F8001FE003FC003FC001 -FF00FF80007FFFFE00001FFFF8000001FF800028237EA22D>I<01FC07FC0000FFFC7FFF -8000FFFDFFFFE000FFFFF01FF000FFFFC007F80007FF0003FC0007FE0003FE0007FC0001 -FF0007FC0001FF8007FC0000FF8007FC0000FFC007FC0000FFC007FC00007FC007FC0000 -7FE007FC00007FE007FC00007FE007FC00007FE007FC00007FE007FC00007FE007FC0000 -7FE007FC00007FE007FC00007FE007FC00007FC007FC0000FFC007FC0000FFC007FC0000 -FF8007FC0001FF8007FC0001FF0007FE0003FE0007FF0007FC0007FF800FF80007FFF03F -F00007FDFFFFC00007FC7FFF000007FC0FF8000007FC0000000007FC0000000007FC0000 -000007FC0000000007FC0000000007FC0000000007FC0000000007FC0000000007FC0000 -000007FC0000000007FC00000000FFFFE0000000FFFFE0000000FFFFE0000000FFFFE000 -00002B327DA232>I<03F80FC0FFF83FF0FFF87FF8FFF8F1FCFFF9C3FE0FF983FE07FB83 -FE07FB03FE07FF01FC07FE00F807FE002007FE000007FC000007FC000007FC000007FC00 -0007FC000007FC000007FC000007FC000007FC000007FC000007FC000007FC000007FC00 -0007FC000007FC000007FC000007FC000007FC000007FC0000FFFFF800FFFFF800FFFFF8 -00FFFFF8001F237DA225>114 D<007FE1C003FFFFC00FFFFFC01F803FC03E000FC07C00 -07C07C0003C0FC0003C0FC0003C0FE0003C0FF000000FFC00000FFFE00007FFFE0007FFF -FC003FFFFE001FFFFF000FFFFF8003FFFFC000FFFFE0000FFFE000007FF000000FF07000 -07F0F00003F0F00003F0F80003F0F80003E0FC0003E0FE0007C0FF0007C0FFC03F80FFFF -FF00F1FFFC00C03FE0001C237DA223>I<001E0000001E0000001E0000001E0000001E00 -00003E0000003E0000003E0000003E0000007E0000007E000000FE000000FE000001FE00 -0003FE000007FE00001FFFFFC0FFFFFFC0FFFFFFC0FFFFFFC003FE000003FE000003FE00 -0003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE00 -0003FE000003FE000003FE000003FE000003FE000003FE01E003FE01E003FE01E003FE01 -E003FE01E003FE01E003FE01E003FE01E001FE03C001FF03C000FF8780007FFF00001FFE -000007F8001B337EB223>I<01FC0001FC00FFFC00FFFC00FFFC00FFFC00FFFC00FFFC00 -FFFC00FFFC000FFC000FFC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC00 -07FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC00 -07FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC00 -07FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC000FFC0007FC000FFC00 -07FC001FFC0003FC001FFC0003FC0077FE0001FF01E7FFE000FFFFC7FFE0003FFF87FFE0 -0007FC07FFE02B237CA232>II121 -D E /Fd 2 63 df<000000003000000000F000000003E00000000FC00000003F00000000 -FC00000003F00000000FC00000003F00000000FC00000003F00000000FC00000003F0000 -0000FC00000003F00000000FC00000003F00000000FC00000000F000000000FC00000000 -3F000000000FC000000003F000000000FC000000003F000000000FC000000003F0000000 -00FC000000003F000000000FC000000003F000000000FC000000003F000000000FC00000 -0003F000000000F0000000007024257BA12F>60 D62 -D E /Fe 1 16 df<00FE0003FF800FFFE01FFFF03FFFF83FFFF87FFFFC7FFFFCFFFFFEFF -FFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE7FFFFC7FFFFC3FFFF83FFFF81FFFF00FFFE003 -FF8000FE0017177D9A1E>15 D E /Ff 63 122 df<000E0000000E0000000E0000007F80 -0003FFF00007FFFC000F8E7E001E0E0F003C0E07807C0E0380780E0F80780E1FC0F80E3F -C0F80E3FC0F80E3FC0FC0E3FC0FE0E1F80FF8E06007FFE00007FFF80007FFFE0003FFFF0 -001FFFFC000FFFFE0007FFFE0003FFFF0000FFFF80000FFF80000EFFC0180E3FC03C0E1F -C07E0E0FC0FF0E07C0FF0E07C0FF0E07C0FE0E07C0FC0E0780700E0780700E0F00380E0F -001E0E1E000F8E7C0007FFF80003FFE000007F8000000E0000000E0000000E00001A307C -AC23>36 D<001E0000001E0000001F0000001E0000001E0000301E0300781E0780FC1E0F -C0FF1E3FC07F9E7F801FEDFE0007FFF80000FFC000003F000000FFC00007FFF8001FEDFE -007F9E7F80FF1E3FC0FC1E0FC0781E0780301E0300001E0000001E0000001F0000001E00 -00001E00001A1B7CAC23>42 D<1E003F007F80FFC0FFC0FFE0FFE07FE03F601E60006000 -6000C000C000C001800300030006000C00180010000B167C8913>44 -DI<1E003F007F80FFC0FFC0 -FFC0FFC07F803F001E000A0A7C8913>I<00000180000003C0000003C0000007C0000007 -8000000F8000000F0000000F0000001F0000001E0000003E0000003C0000003C0000007C -0000007800000078000000F8000000F0000001F0000001E0000001E0000003E0000003C0 -000007C0000007800000078000000F8000000F0000001F0000001E0000001E0000003E00 -00003C0000007C0000007800000078000000F8000000F0000001F0000001E0000001E000 -0003E0000003C0000007C0000007800000078000000F8000000F0000000F0000001F0000 -001E0000003E0000003C0000003C0000007C00000078000000F8000000F0000000F00000 -00600000001A3C7CAC23>I<003FC00001FFF80003F0FC000FC03F000F801F001F801F80 -3F801FC03F000FC07F000FE07F000FE07F000FE07F000FE0FF000FF0FF000FF0FF000FF0 -FF000FF0FF000FF0FF000FF0FF000FF0FF000FF0FF000FF0FF000FF0FF000FF0FF000FF0 -FF000FF0FF000FF0FF000FF07F000FE07F000FE07F000FE07F000FE03F000FC03F801FC0 -1F801F801FC03F800FC03F0003F0FC0001FFF800003FC0001C277DA623>I<000700000F -00007F0007FF00FFFF00FFFF00F8FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF -0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF -0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF007FFFFF7FFF -FF7FFFFF18277BA623>I<00FFC00007FFF8000FFFFE001F01FF003C007F807F003FC0FF -003FE0FF801FE0FF801FF0FF801FF07F001FF07F001FF01C001FF000001FF000001FE000 -003FE000003FC000007F8000007F000000FE000000FC000001F8000003E0000007C00000 -0F8000001E0070003C00700078007000F000E001C000E0038000E007FFFFE00FFFFFE01F -FFFFE03FFFFFE07FFFFFC0FFFFFFC0FFFFFFC0FFFFFFC01C277DA623>I<007FC00001FF -F80007C1FE000E00FF001F807F801FC07F803FE07FC03FE07FC03FE07FC03FE07FC01FC0 -7FC00F807F8007007F800000FF000000FE000001FC000007F00000FFC00000FFF8000001 -FE0000007F0000007F8000003FC000003FE000003FE01E003FF03F003FF07F803FF0FFC0 -3FF0FFC03FF0FFC03FF0FFC03FE0FF803FE07F007FC03E007F801F01FF000FFFFE0003FF -F80000FFC0001C277DA623>I<000007800000078000000F8000001F8000003F8000007F -800000FF800000FF800001FF800003BF8000073F80000E3F80001C3F80001C3F8000383F -8000703F8000E03F8001C03F8003803F8007803F8007003F800E003F801C003F8038003F -8070003F80F0003F80FFFFFFFCFFFFFFFCFFFFFFFC00007F8000007F8000007F8000007F -8000007F8000007F8000007F80003FFFFC003FFFFC003FFFFC1E277EA623>I<0C000180 -1F801F801FFFFF001FFFFE001FFFFC001FFFF8001FFFF0001FFFE0001FFF80001FFE0000 -1C0000001C0000001C0000001C0000001C0000001C3FE0001DFFF8001FC0FE001E003F00 -08003F8000001FC000001FE000001FE000001FF000001FF03E001FF07F001FF0FF001FF0 -FF801FF0FF801FF0FF001FE0FF001FE07E003FC078003F803C007F801F81FE000FFFFC00 -03FFF00000FF80001C277DA623>I<0007F800003FFE00007E0F0001F8038003F00F8007 -E01FC00FC03FC01FC03FC01FC03FC03FC03FC03F801F807F800F007F8000007F800000FF -800000FF8FE000FF9FFC00FFB07E00FFE03F00FFC01F80FFC01FC0FFC01FE0FF801FE0FF -801FF0FF801FF0FF801FF07F801FF07F801FF07F801FF07F801FF03F801FE03F801FE01F -801FE01FC01FC00FC03F8007F07F0003FFFE0000FFF800003FE0001C277DA623>I<3800 -00003E0000003FFFFFF83FFFFFF83FFFFFF83FFFFFF07FFFFFE07FFFFFC07FFFFF807FFF -FF0070000E0070001C0070001C00E0003800E0007000E000E0000001C0000003C0000003 -800000078000000F8000000F0000001F0000001F0000003F0000003E0000007E0000007E -000000FE000000FE000000FE000000FE000001FE000001FE000001FE000001FE000001FE -000001FE000001FE000000FC0000007800001D297CA823>I<007FC00001FFF00007F0FC -000FC03E001FC03F003F801F807F801F807F801FC0FF801FC0FF801FE0FF801FE0FF801F -E0FF801FF0FF801FF0FF801FF0FF801FF07F801FF07F803FF03F803FF01F803FF00FC07F -F007E0DFF001FF9FF0007F1FF000001FF000001FE000001FE00F001FE01F801FC03FC03F -C03FC03F803FC03F803FC07F003F807E001F00FC000F03F80007FFF00003FFC00000FE00 -001C277DA623>57 D<1E003F007F80FFC0FFC0FFC0FFC07F803F001E0000000000000000 -000000000000001E003F007F80FFC0FFC0FFC0FFC07F803F001E000A1B7C9A13>I<7FFF -FFFFFFF0FFFFFFFFFFF8FFFFFFFFFFF87FFFFFFFFFF00000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000007FFFFFFFFFF0FFFFFFFFFFF8FFFFFFFFFFF87FFFFFFFFFF02D12 -7C9736>61 D<000003C00000000003C00000000007E00000000007E00000000007E00000 -00000FF0000000000FF0000000001FF8000000001FF8000000003FFC000000003FFC0000 -00003FFC0000000077FE0000000073FE00000000F3FF00000000E1FF00000000E1FF0000 -0001C1FF80000001C0FF80000003C0FFC0000003807FC0000003807FC0000007007FE000 -0007003FE000000F003FF000000E001FF000000E001FF000001C000FF800001FFFFFF800 -003FFFFFFC00003FFFFFFC0000780007FE0000700003FE0000700003FE0000E00003FF00 -00E00001FF0001E00001FF8001C00000FF8001C00000FF80FFFE001FFFFFFFFE001FFFFF -FFFE001FFFFF302A7EA935>65 DI<00003FF001800003FFFE0380000FFF -FF8780003FF807DF8000FF8001FF8001FF00007F8003FC00003F8007F800001F800FF800 -000F800FF000000F801FF0000007803FE0000007803FE0000007807FE0000003807FC000 -0003807FC000000380FFC000000000FFC000000000FFC000000000FFC000000000FFC000 -000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0000000007FC000 -0000007FC0000003807FE0000003803FE0000003803FE0000003801FF0000007000FF000 -0007000FF800000F0007F800000E0003FC00001C0001FF0000380000FFC000F000003FF8 -07E000000FFFFFC0000003FFFF000000003FF00000292A7CA932>III< -FFFFFFFFE0FFFFFFFFE0FFFFFFFFE003FE001FE003FE0007F003FE0001F003FE0000F003 -FE0000F003FE00007003FE00007003FE00007003FE00007803FE01C03803FE01C03803FE -01C03803FE01C00003FE03C00003FE03C00003FE0FC00003FFFFC00003FFFFC00003FFFF -C00003FE0FC00003FE03C00003FE03C00003FE01C00003FE01C00003FE01C00003FE01C0 -0003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE000000 -03FE00000003FE00000003FE000000FFFFFE0000FFFFFE0000FFFFFE0000252A7DA92C> -I72 DI75 DIII<0000FFE000000007FFFC0000003FC07F8000007F00 -1FC00001FE000FF00003FC0007F80007F80003FC000FF00001FE000FF00001FE001FE000 -00FF003FE00000FF803FE00000FF803FE00000FF807FC000007FC07FC000007FC07FC000 -007FC0FFC000007FE0FFC000007FE0FFC000007FE0FFC000007FE0FFC000007FE0FFC000 -007FE0FFC000007FE0FFC000007FE0FFC000007FE0FFC000007FE07FC000007FC07FC000 -007FC07FE00000FFC07FE00000FFC03FE00000FF803FE00000FF801FF00001FF001FF000 -01FF000FF80003FE0007F80003FC0003FC0007F80001FE000FF000007F001FC000003FC0 -7F80000007FFFC00000000FFE000002B2A7CA934>II82 -D<007FC03003FFF87007FFFCF00FC03FF01F000FF03E0003F07C0001F07C0000F07C0000 -F0FC0000F0FC000070FE000070FE000070FF000000FFE000007FFE00007FFFF0003FFFFE -003FFFFF001FFFFF800FFFFFC007FFFFE001FFFFF0007FFFF80007FFF800003FF8000007 -FC000003FC000001FC600001FCE00000FCE00000FCE00000FCF00000F8F00000F8F80001 -F0FC0001F0FF0003E0FFE00FC0F3FFFF80E0FFFE00C01FF8001E2A7CA927>I<7FFFFFFF -FFE07FFFFFFFFFE07FFFFFFFFFE07F803FE01FE07E003FE003E078003FE001E078003FE0 -01E070003FE000E0F0003FE000F0F0003FE000F0E0003FE00070E0003FE00070E0003FE0 -0070E0003FE00070E0003FE0007000003FE0000000003FE0000000003FE0000000003FE0 -000000003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE0 -000000003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE0 -000000003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE0 -000000003FE00000007FFFFFF000007FFFFFF000007FFFFFF0002C297EA831>IIII<7FFFFC0FFFF87FFFFC0FFFF87FFFFC0FFFF801FF80003800 -00FFC0007800007FE000F000007FE001E000003FF001C000001FF803C000001FFC078000 -000FFC0F00000007FE0E00000003FF1E00000003FF3C00000001FFF800000000FFF00000 -0000FFF0000000007FE0000000003FF0000000003FF8000000001FF8000000000FFC0000 -00000FFE000000001FFE000000003FFF0000000079FF8000000071FF80000000F0FFC000 -0001E07FE0000003C07FE0000003803FF0000007801FF800000F001FFC00001E000FFC00 -001C0007FE00003C0007FF0000780003FF0000700001FF8000E00000FFC0FFFF801FFFFF -FFFF801FFFFFFFFF801FFFFF302A7EA935>I<3FFFFFFFC03FFFFFFFC03FFFFFFFC03FF0 -00FF803FC001FF003F0003FF003E0003FE003C0007FC007C000FFC0078000FF80078001F -F80078003FF00070003FE00070007FE0007000FFC0000000FF80000001FF80000001FF00 -000003FE00000007FE00000007FC0000000FF80000001FF80000001FF00000003FE00000 -007FE000E0007FC000E000FFC000E001FF8000E001FF0000E003FF0001E007FE0001E007 -FC0001E00FFC0003C00FF80003C01FF00007C03FF0000FC03FE0003FC07FC001FFC0FFFF -FFFFC0FFFFFFFFC0FFFFFFFFC0232A7CA92B>90 DI93 D<01FFC0000FFFF8001F80FC00 -3F803E003FC03F003FC01F803FC01FC01F801FC00F001FC000001FC000001FC0001FFFC0 -01FFFFC007FC1FC00FE01FC03F801FC07F001FC07F001FC0FE001FC0FE001FC0FE001FC0 -FE001FC07E003FC07F006FC03FC1CFFE0FFF87FE01FE01FE1F1B7E9A22>97 -D<07E0000000FFE0000000FFE0000000FFE00000000FE00000000FE00000000FE0000000 -0FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000F -E00000000FE1FE00000FE7FFC0000FFF03F0000FF800F8000FF000FC000FE0007E000FE0 -007F000FE0003F800FE0003F800FE0003F800FE0003FC00FE0003FC00FE0003FC00FE000 -3FC00FE0003FC00FE0003FC00FE0003FC00FE0003F800FE0003F800FE0003F000FE0007F -000FE0007E000FF000FC000FF801F8000F9E07F0000F07FFC0000E01FE0000222A7EA927 ->I<003FF00000FFFE0003F03F0007E03F800FC07F801F807F803F807F807F003F007F00 -1E007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F00 -00007F0000007F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00003F -E0001A1B7E9A1F>I<000000FC0000001FFC0000001FFC0000001FFC00000001FC000000 -01FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001 -FC00000001FC00000001FC00001FE1FC0000FFFDFC0003F81FFC0007E007FC000FC003FC -001F8001FC003F8001FC003F0001FC007F0001FC007F0001FC00FF0001FC00FF0001FC00 -FF0001FC00FF0001FC00FF0001FC00FF0001FC00FF0001FC007F0001FC007F0001FC007F -0001FC003F8001FC001F8001FC000FC003FC0007C00FFC0003F03DFFC000FFF9FFC0001F -E1FFC0222A7EA927>I<003FE00001FFF80003F07E0007C01F000F801F801F800F803F80 -0FC07F0007C07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF00 -0000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC001C007E0038003F8 -1F0000FFFE00001FF0001B1B7E9A20>I<0007F800003FFE00007E1F0000F83F0001F87F -8003F07F8007F07F8007F03F0007F01E0007F0000007F0000007F0000007F0000007F000 -0007F00000FFFFC000FFFFC000FFFFC00007F0000007F0000007F0000007F0000007F000 -0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000 -0007F0000007F0000007F0000007F0000007F0000007F0000007F000007FFF80007FFF80 -007FFF8000192A7EA915>I<007F80F803FFF3FC07C0FF3E0F807C3E1F003E3E3F003F1C -7F003F807F003F807F003F807F003F807F003F807F003F803F003F001F003E000F807C00 -0FC0F8001FFFF000187F800038000000380000003C0000003E0000003FFFFC001FFFFF80 -1FFFFFC00FFFFFE007FFFFF01FFFFFF83E0003F87C0000FCF800007CF800007CF800007C -F800007C7C0000F83C0000F01F0003E00FC00FC003FFFF00007FF8001F287E9A23>I<07 -E0000000FFE0000000FFE0000000FFE00000000FE00000000FE00000000FE00000000FE0 -0000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000 -00000FE07F80000FE1FFE0000FE383F0000FE603F8000FEC01F8000FF801FC000FF001FC -000FF001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001FC00 -0FE001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001FC000F -E001FC000FE001FC000FE001FC00FFFE1FFFC0FFFE1FFFC0FFFE1FFFC0222A7DA927>I< -07800FC01FE03FF03FF03FF03FF01FE00FC0078000000000000000000000000003E0FFE0 -FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 -0FE00FE00FE00FE0FFFEFFFEFFFE0F2B7DAA14>I<07E00000FFE00000FFE00000FFE000 -000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000 -000FE000000FE000000FE00FFE0FE00FFE0FE00FFE0FE003C00FE007800FE00F000FE03C -000FE078000FE0F0000FE1E0000FE7C0000FEFE0000FFFF0000FFFF8000FFBF8000FE1FC -000FC0FE000FC07F000FC07F000FC03F800FC01FC00FC00FE00FC00FE00FC007F0FFFC1F -FFFFFC1FFFFFFC1FFF202A7EA925>107 D<03E0FFE0FFE0FFE00FE00FE00FE00FE00FE0 -0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 -0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2A7DA914> -I<07C07F800FF000FFC1FFE03FFC00FFC383F0707E00FFC603F8C07F000FCC01F9803F00 -0FD801FF003F800FF001FE003F800FF001FE003F800FE001FC003F800FE001FC003F800F -E001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE0 -01FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001 -FC003F800FE001FC003F800FE001FC003F800FE001FC003F80FFFE1FFFC3FFF8FFFE1FFF -C3FFF8FFFE1FFFC3FFF8351B7D9A3A>I<07C07F8000FFC1FFE000FFC383F000FFC603F8 -000FCC01F8000FD801FC000FF001FC000FF001FC000FE001FC000FE001FC000FE001FC00 -0FE001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001FC000F -E001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001FC00FFFE1FFFC0FFFE -1FFFC0FFFE1FFFC0221B7D9A27>I<003FF00000FFFC0003F03F000FC00FC01F8007E01F -8007E03F0003F07F0003F87F0003F87F0003F8FF0003FCFF0003FCFF0003FCFF0003FCFF -0003FCFF0003FCFF0003FCFF0003FC7F0003F87F0003F83F8007F03F8007F01FC00FE00F -E01FC003F03F0001FFFE00003FF0001E1B7E9A23>I<07E1FE0000FFE7FFC000FFFF07F0 -00FFF801F8000FF000FC000FE000FE000FE0007F000FE0007F800FE0007F800FE0003F80 -0FE0003FC00FE0003FC00FE0003FC00FE0003FC00FE0003FC00FE0003FC00FE0003FC00F -E0003F800FE0007F800FE0007F000FE0007F000FE000FE000FF000FC000FF801F8000FFE -07F0000FE7FFC0000FE1FE00000FE00000000FE00000000FE00000000FE00000000FE000 -00000FE00000000FE00000000FE00000000FE0000000FFFE000000FFFE000000FFFE0000 -0022277E9A27>I<07C1F800FFC7FE00FFCE3F00FFD83F800FD87F800FF07F800FF07F80 -0FF03F000FE01E000FE000000FE000000FE000000FE000000FE000000FE000000FE00000 -0FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000FFFF0000 -FFFF0000FFFF0000191B7E9A1D>114 D<01FF180FFFF81E01F8380078700078F00038F0 -0038F80038FE0000FFF0007FFF007FFFC03FFFF00FFFF807FFFC00FFFC0003FE60007EE0 -003EE0001EF0001EF0001CF8001CFC0038FF00F0F7FFE0C0FF00171B7E9A1C>I<007000 -00700000700000700000F00000F00000F00001F00003F00003F00007F0001FFFF0FFFFF0 -FFFFF007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000 -07F00007F00007F03807F03807F03807F03807F03807F03803F03803F87001F86000FFC0 -001F8015267FA51B>I<07E000FC00FFE01FFC00FFE01FFC00FFE01FFC000FE001FC000F -E001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE0 -01FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001FC000FE001 -FC000FE003FC000FE003FC0007E007FC0007E007FC0003F01DFFC001FFF9FFC0003FE1FF -C0221B7D9A27>II120 D<7FFE01FF807FFE01FF807FFE01FF8007F000380007 -F000380003F800700003F800700003FC00F00001FC00E00001FE01E00000FE01C00000FF -03C000007F038000007F838000003F870000003F870000001FCE0000001FCE0000001FFE -0000000FFC0000000FFC00000007F800000007F800000003F000000003F000000001E000 -000001E000000001C000000001C000000003C0000038038000007C07800000FE07000000 -FE0F000000FE1E000000FE3C0000007C780000003FF00000000FC000000021277F9A25> -I E /Fg 73 123 df<0003F80FC0001FFE3FE0007C0778F000F00FE1F801E01FC1F803C0 -1FC1F803C01F80F007800F80600780078000078007800007800780000780078000078007 -8000078007800007800780000780078000FFFFFFFF00FFFFFFFF00078007800007800780 -000780078000078007800007800780000780078000078007800007800780000780078000 -078007800007800780000780078000078007800007800780000780078000078007800007 -800780000780078000078007800007800780000780078000078007C000FFF87FFE00FFF8 -7FFE00252A7FA923>11 D<0001FC00001FFF00003E078000F0038001E007C003C00FC003 -C00FC007800FC00780078007800000078000000780000007800000078000000780000007 -800000FFFFFFC0FFFFFFC0078007C0078003C0078003C0078003C0078003C0078003C007 -8003C0078003C0078003C0078003C0078003C0078003C0078003C0078003C0078003C007 -8003C0078003C0078003C0078003C0078003C0078003C0078003C0FFFC7FFEFFFC7FFE1F -2A7FA922>I<0001FCC0001FFFC0003E07C000F00FC001E00FC003C00FC003C007C00780 -03C0078003C0078003C0078003C0078003C0078003C0078003C0078003C0078003C0FFFF -FFC0FFFFFFC0078003C0078003C0078003C0078003C0078003C0078003C0078003C00780 -03C0078003C0078003C0078003C0078003C0078003C0078003C0078003C0078003C00780 -03C0078003C0078003C0078003C0078003C0078003C0FFFC7FFEFFFC7FFE1F2A7FA922> -I<3803807C07C0FE0FE0FE0FE0FF0FF07F07F03B03B00300300300300300300300300600 -600600600C00C00C00C018018038038070070020020014137EA91E>34 -D<387CFEFEFF7F3B0303030306060C0C1838702008137BA911>39 -D<000C00180030006000C001C003800300070006000E000E001C001C003C003800380078 -007800700070007000F000F000F000F000F000F000F000F000F000F000F000F000F000F0 -00F00070007000700078007800380038003C001C001C000E000E00060007000300038001 -C000C0006000300018000C0E3B7AAC18>II<38 -7CFEFEFF7F3B0303030306060C0C1838702008137B8611>44 DI<387CFEFEFE7C3807077B8611>I<007F000001FFC00007C1F0000F0078000E003800 -1E003C003C001E003C001E003C001E0078000F0078000F0078000F0078000F00F8000F80 -F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80 -F8000F80F8000F80F8000F80F8000F80F8000F8078000F0078000F0078000F007C001F00 -3C001E003C001E003C001E001E003C000E0038000F00780007C1F00001FFC000007F0000 -19297EA71E>48 D<00180000380000F80007F800FFF800F8F80000F80000F80000F80000 -F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000 -F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000 -F80000F80000F80000F80001FC007FFFF07FFFF014287CA71E>I<00FC0007FF800E07C0 -1803F03001F06000F860007CF8007CFC007EFE007EFE003EFE003E7C003E38007E00007E -00007C00007C0000F80000F80001F00001E00003E00007C0000780000F00001E00003C00 -00700000600000C00601800603000606000C0C000C18000C1FFFFC3FFFFC7FFFF8FFFFF8 -FFFFF817287DA71E>I<007F000001FFC0000781F0000E00F80018007C001E007C003F00 -7E003F803E003F803E003F803E001F007E000E007C0000007C0000007C000000F8000000 -F0000001E0000007C00000FF000000FF00000001E0000000F00000007C0000003E000000 -3E0000001F0000001F0000001F803C001F807E001F80FF001F80FF001F80FF001F80FF00 -1F00FE003F007C003E0030007C001C00F8000F01F00007FFE00000FF000019297EA71E> -I<00007000000070000000F0000001F0000001F0000003F0000007F0000007F000000DF0 -00001DF0000019F0000031F0000071F0000061F00000E1F00000C1F0000181F0000381F0 -000301F0000601F0000E01F0000C01F0001801F0003801F0003001F0006001F000E001F0 -00FFFFFF80FFFFFF800001F0000001F0000001F0000001F0000001F0000001F0000001F0 -000001F0000003F800007FFF80007FFF8019287EA71E>I<1000181E00F81FFFF01FFFE0 -1FFFC01FFF001BF800180000180000180000180000180000180000180000180000187E00 -19FF801F83C01E01E01800F01800F800007800007C00007C00007E00007E00007E38007E -7C007EFE007EFE007EFC007EFC007CF0007C6000F87000F83001F01803E00E07C007FF00 -01FC0017297DA71E>I<000FE000003FF00000F8380001E00C0003803E0007807E000F00 -7E000E007E001E007E003C003C003C0000003C0000007C0000007800000078040000F83F -C000F8FFF000F9807800FB003C00FA001C00FE001E00FC001F00FC000F00F8000F00F800 -0F80F8000F80F8000F80F8000F8078000F8078000F8078000F807C000F803C000F003C00 -0F001C001E001E001E000E003C000700780003C0F00001FFC000007F000019297EA71E> -I<300000003C0000003FFFFF803FFFFF803FFFFF007FFFFF007FFFFE0060000C0060000C -0060001800C0003000C0006000C00060000000C000000180000001800000030000000700 -0000060000000E0000000E0000001C0000001C0000003C0000003C0000003C0000007800 -00007800000078000000F8000000F8000000F8000000F8000001F8000001F8000001F800 -0001F8000001F8000001F8000001F8000001F8000000F00000192A7DA81E>I<007F0000 -01FFC0000381F000060078000C003C0018001C0018000E0038000E0038000E0038000E00 -3C000E003E000E003F001C001FC01C001FE038000FF870000FFDE00007FF800001FF8000 -00FFE00001FFF000079FF8000E07FC001C03FE003800FF0038007F0070001F8070000F80 -E0000780E0000780E0000380E0000380E0000380E0000300700007007800060038000C00 -1E0018000F80F00003FFE000007F000019297EA71E>I<007F000001FFC00007C1E0000F -0070001E0038003C003C003C001C0078001E0078001E00F8000F00F8000F00F8000F00F8 -000F00F8000F80F8000F80F8000F80F8000F8078000F8078001F807C001F803C003F801C -002F801E004F800F00CF8007FF8F8001FE0F8000100F0000000F0000000F0000001E0000 -001E001E001E003F003C003F003C003F0078003F0070003E00E0001801C0000E07800007 -FF000001F8000019297EA71E>I<387CFEFEFE7C38000000000000000000000000387CFE -FEFE7C38071A7B9911>I<387CFEFEFE7C38000000000000000000000000387CFCFEFE7E -3E060606060C0C0C181830702007267B9911>I61 -D<000018000000003C000000003C000000003C000000007E000000007E000000007E0000 -0000FF00000000FF00000000FF000000019F800000019F800000019F800000030FC00000 -030FC00000030FC000000607E000000607E000000607E000000C03F000000C03F000001C -03F800001801F800001801F800003801FC00003000FC00003000FC00007FFFFE00007FFF -FE000060007E0000C0007F0000C0003F0000C0003F000180003F800180001F800180001F -800300000FC00300000FC00780000FC01FC0001FE0FFF801FFFFFFF801FFFF282A7EA92D ->65 DI<00 -007F80080007FFE018001FC07838003E000C3800F800067801F00003F803E00001F807C0 -0000F80F800000780F800000781F000000383F000000383E000000383E000000387E0000 -00187E000000187C00000018FC00000000FC00000000FC00000000FC00000000FC000000 -00FC00000000FC00000000FC00000000FC000000007C000000007E000000187E00000018 -3E000000183E000000183F000000301F000000300F800000300F8000006007C000006003 -E00000C001F000018000F8000300003E000E00001FC03C000007FFF00000007F8000252B -7DA92C>I -III<00007F80080000 -07FFE01800001FC0783800003E000C380000F80006780001F00003F80003E00001F80007 -C00000F8000F80000078000F80000078001F00000038003F00000038003E00000038003E -00000038007E00000018007E00000018007C0000001800FC0000000000FC0000000000FC -0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC -0001FFFF807C0001FFFF807E000003F8007E000001F8003E000001F8003E000001F8003F -000001F8001F000001F8000F800001F8000F800001F80007C00001F80003E00001F80001 -F00003F80000FC00037800003E000E7800001FC03C18000007FFF0080000007F80000029 -2B7DA930>III76 DII<0000FF00000007FFE000001F81 -F800007C003E0000F8001F0001E000078003C00003C007C00003E00F800001F01F000000 -F81F000000F83E0000007C3E0000007C7E0000007E7E0000007E7C0000003E7C0000003E -FC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC -0000003FFC0000003F7C0000003E7E0000007E7E0000007E7E0000007E3E0000007C3F00 -0000FC1F000000F81F800001F80F800001F007C00003E003E00007C001F0000F8000F800 -1F00007C003E00001F81F8000007FFE0000000FF0000282B7DA92F>II82 -D<00FF008003FFC1800780F3800E003B801C001F8038000F807800078070000780F00003 -80F0000380F0000380F0000180F8000180F8000180FC0000007F0000007FC000003FFC00 -003FFFC0001FFFF8000FFFFC0003FFFE0000FFFF00001FFF800001FF8000001FC000000F -C0000007E0000003E0C00003E0C00001E0C00001E0C00001E0E00001E0E00001C0E00001 -C0F0000380F8000380FC000700EF000E00E3E03C00C0FFF800801FC0001B2B7DA922>I< -7FFFFFFFFC7FFFFFFFFC7E007E00FC78007E003C70007E001C60007E000C60007E000CE0 -007E000EE0007E000EC0007E0006C0007E0006C0007E0006C0007E0006C0007E00060000 -7E000000007E000000007E000000007E000000007E000000007E000000007E000000007E -000000007E000000007E000000007E000000007E000000007E000000007E000000007E00 -0000007E000000007E000000007E000000007E000000007E000000007E000000007E0000 -00007E000000007E00000000FF000000FFFFFF0000FFFFFF0027297EA82C>IIII89 D91 D<0400400E00E01C01C0180180300300300300600600600600C00C00 -C00C00C00C00C00C00DC0DC0FE0FE0FF0FF07F07F07F07F03E03E01C01C0141379A91E> -II<07FC00001FFF80003E03C0003F01E000 -3F00F0003F0078001E0078000000780000007800000078000007F80000FFF80007E07800 -0F8078003E0078007C0078007C007800F8007860F8007860F8007860F800F860F800B860 -7C0138603F063CC01FFC1F8007F00F001B1A7E991E>97 D<07800000FF800000FF800000 -0F8000000780000007800000078000000780000007800000078000000780000007800000 -078000000780000007800000078000000783F800078FFF0007BC0F8007F003C007C001E0 -078000F0078000F0078000F8078000780780007C0780007C0780007C0780007C0780007C -0780007C0780007C0780007C07800078078000F8078000F007C001F007C001E0077007C0 -073C1F80070FFE000603F8001E2A7FA922>I<007FE001FFF807C07C0F00FC1E00FC3E00 -FC3C00787C0000780000F80000F80000F80000F80000F80000F80000F80000F800007C00 -007C00003C000C3E000C1F00180F803007E06001FFC0007F00161A7E991B>I<00000780 -0000FF800000FF8000000F80000007800000078000000780000007800000078000000780 -000007800000078000000780000007800000078000000780007F078001FFC78007E07780 -0F001F801E000F803E0007803C0007807C00078078000780F8000780F8000780F8000780 -F8000780F8000780F8000780F8000780F8000780780007807C0007803C0007803C000F80 -1E001F800F003F8007C0E7C003FFC7FC007E07FC1E2A7EA922>I<007E0003FF800783E0 -0F00F01E00F03C00783C00787C003C78003CF8003CFFFFFCFFFFFCF80000F80000F80000 -F80000F800007800007C00003C000C3E000C1E00180F803007E06001FFC0007F00161A7E -991B>I<000FC0003FE00078F001E1F801C1F803C1F80780F00780600780000780000780 -00078000078000078000078000078000FFFF00FFFF000780000780000780000780000780 -000780000780000780000780000780000780000780000780000780000780000780000780 -0007800007800007800007800007C000FFFE00FFFE00152A7FA913>I<00000F0000FC1F -8003FF33C00787C3C00E01C3C01E01E0001C00E0003C00F0003C00F0003C00F0003C00F0 -003C00F0003C00F0001C00E0001E01E0000E01C000078780000BFF000018FC0000180000 -0018000000180000001C0000001FFFC0000FFFF80007FFFC000FFFFE003C003F0070000F -0070000780E0000380E0000380E0000380E00003807000070078000F003C001E000F80F8 -0007FFF00000FF80001A287E9A1E>I<07800000FF800000FF8000000F80000007800000 -078000000780000007800000078000000780000007800000078000000780000007800000 -07800000078000000781F8000787FE00079C0F0007B0078007A003C007C003C007C003C0 -078003C0078003C0078003C0078003C0078003C0078003C0078003C0078003C0078003C0 -078003C0078003C0078003C0078003C0078003C0078003C0078003C0078003C0FFFC7FFE -FFFC7FFE1F2A7FA922>I<0E001F003F803F803F801F000E000000000000000000000000 -00000000000F00FF00FF001F000F000F000F000F000F000F000F000F000F000F000F000F -000F000F000F000F000F000F000F000F00FFF0FFF00C297EA811>I<001C003E007F007F -007F003E001C00000000000000000000000000000000001F01FF01FF001F000F000F000F -000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F -000F000F000F000F000F000F780FFC0EFC1EFC3C78783FF01FC0103583A813>I<078000 -00FF800000FF8000000F8000000780000007800000078000000780000007800000078000 -000780000007800000078000000780000007800000078000000780FFF00780FFF007803F -8007803C0007803800078070000780C000078180000783000007860000079F000007BF00 -0007F3800007E3C00007C1C0000780E0000780F000078070000780380007803C0007801E -0007800E0007800F0007800F80FFFC3FF8FFFC3FF81D2A7FA920>I<0F00FF00FF001F00 -0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00 -0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00 -FFF0FFF00C2A7EA911>I<0781F800FC00FF87FE03FF00FF9C0F0E07800FB0079803C007 -A003D001E007C003E001E007C003E001E0078003C001E0078003C001E0078003C001E007 -8003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E007 -8003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E007 -8003C001E0078003C001E0FFFC7FFE3FFFFFFC7FFE3FFF301A7F9933>I<0781F800FF87 -FE00FF9C0F000FB0078007A003C007C003C007C003C0078003C0078003C0078003C00780 -03C0078003C0078003C0078003C0078003C0078003C0078003C0078003C0078003C00780 -03C0078003C0078003C0078003C0078003C0FFFC7FFEFFFC7FFE1F1A7F9922>I<007F00 -0001FFC00007C1F0000F0078001E003C003C001E003C001E0078000F0078000F00F8000F -80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F8078000F007C001F -003C001E003C001E001E003C000F00780007C1F00001FFC000007F0000191A7E991E>I< -0783F800FF8FFF00FFBC0F800FF007C007C003E0078001F0078000F0078000F8078000F8 -0780007C0780007C0780007C0780007C0780007C0780007C0780007C0780007C078000F8 -078000F8078001F007C001F007C003E007F007C007BC1F80078FFE000783F80007800000 -078000000780000007800000078000000780000007800000078000000780000007800000 -FFFC0000FFFC00001E267F9922>I<007F018001FFC18007E0E3800F8033801F001B803E -000F803E000F807C0007807C000780F8000780F8000780F8000780F8000780F8000780F8 -000780F8000780F80007807C0007807C0007803C000F803E000F801F001F800F80378007 -C0E78001FFC780007E078000000780000007800000078000000780000007800000078000 -0007800000078000000780000007800000FFFC0000FFFC1E267E9920>I<0F03E0FF0FF0 -FF1CF80F30F80720F8076070074000074000078000078000078000078000078000078000 -07800007800007800007800007800007800007800007800007800007C000FFFE00FFFE00 -151A7F9918>I<07F8401FFFC03C07C07003C06001C0E000C0E000C0E000C0F000007E00 -007FF0003FFC001FFF0007FF80003FC00007C0C001E0C000E0E000E0E000E0E000E0F000 -C0F801C0FE0780C7FF0083F800131A7E9918>I<01800001800001800001800003800003 -80000380000780000780000F80003F8000FFFFC0FFFFC007800007800007800007800007 -800007800007800007800007800007800007800007800007800007806007806007806007 -80600780600780600780C003C0C001E18000FF00007E0013257FA418>I<078003C0FF80 -7FC0FF807FC00F8007C0078003C0078003C0078003C0078003C0078003C0078003C00780 -03C0078003C0078003C0078003C0078003C0078003C0078003C0078003C0078003C00780 -07C0078007C007800BC003C01BC001E073E000FFE3FE003F83FE1F1A7F9922>II< -FFF1FFC1FF80FFF1FFC1FF800F803E007E000F001E00380007801E00300007801E003000 -07801F00300003C03F00600003C03700600003C03780600001E07780C00001E06380C000 -01E063C1C00000F0E3C1800000F0C1C1800000F0C1E38000007980E30000007980E30000 -007D80F70000003F00760000003F00760000001F007C0000001E003C0000001E003C0000 -000E00380000000C00180000291A7F992C>II -I<7FFFF87FFFF87C00F07001E06003E0E003C0E00780C00F80C01F00C01E00003C00007C -0000780000F00001F00C01E00C03C00C07C00C0F801C0F001C1E00183E00383C00787801 -F8FFFFF8FFFFF8161A7E991B>I E /Fh 14 86 df<0000003FFC000000000003FFFFC000 -0000001FFFFFF8000000007FFFFFFE00000001FFFFFFFF80000007FFF00FFFE000000FFF -C003FFF000001FFF0000FFF800003FFE00007FFC00007FFC00003FFE0000FFF800001FFF -0001FFF000000FFF8001FFF000000FFF8003FFE0000007FFC003FFE0000007FFC007FFE0 -000007FFE007FFC0000003FFE00FFFC0000003FFF00FFFC0000003FFF01FFFC0000003FF -F81FFFC0000003FFF81FFFC0000003FFF83FFFC0000003FFFC3FFF80000001FFFC3FFF80 -000001FFFC3FFF80000001FFFC7FFF80000001FFFE7FFF80000001FFFE7FFF80000001FF -FE7FFF80000001FFFE7FFF80000001FFFE7FFF80000001FFFE7FFF80000001FFFEFFFF80 -000001FFFFFFFF80000001FFFFFFFF80000001FFFFFFFF80000001FFFFFFFF80000001FF -FFFFFF80000001FFFFFFFF80000001FFFFFFFF80000001FFFFFFFF80000001FFFFFFFF80 -000001FFFFFFFF80000001FFFFFFFF80000001FFFFFFFF80000001FFFFFFFF80000001FF -FFFFFF80000001FFFFFFFF80000001FFFFFFFF80000001FFFFFFFF80000001FFFFFFFF80 -000001FFFFFFFF80000001FFFFFFFF80000001FFFFFFFF80000001FFFFFFFF80000001FF -FFFFFF80000001FFFFFFFF80000001FFFF7FFF80000001FFFE7FFF80000001FFFE7FFF80 -000001FFFE7FFF80000001FFFE7FFF80000001FFFE7FFF80000001FFFE7FFF80000001FF -FE3FFF80000001FFFC3FFF80000001FFFC3FFFC0000003FFFC3FFFC0000003FFFC1FFFC0 -000003FFF81FFFC0000003FFF81FFFC0000003FFF80FFFC0000003FFF00FFFC0000003FF -F00FFFE0000007FFF007FFE0000007FFE007FFE0000007FFE003FFE0000007FFC001FFF0 -00000FFF8001FFF800001FFF8000FFF800001FFF00007FFC00003FFE00003FFE00007FFC -00001FFF0000FFF800000FFFC003FFF0000007FFF00FFFE0000001FFFFFFFF80000000FF -FFFFFF000000001FFFFFF80000000007FFFFE000000000003FFC000000405B7AD94D>48 -D<00000003C0000000000007E000000000001FE000000000003FE00000000000FFE00000 -000007FFE0000000001FFFE000000001FFFFE00000007FFFFFE00000FFFFFFFFE00000FF -FFFFFFE00000FFFFFFFFE00000FFFFEFFFE00000FFFE0FFFE00000FF800FFFE000000000 -0FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000F -FFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFF -E0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0 -000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE000 -0000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE00000 -00000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000 -000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE000000000 -0FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000F -FFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFF -E0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0 -000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE000 -0000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE00000 -00000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000 -000FFFE0000000000FFFE000007FFFFFFFFFFFF87FFFFFFFFFFFF87FFFFFFFFFFFF87FFF -FFFFFFFFF87FFFFFFFFFFFF87FFFFFFFFFFFF8355A74D94D>I<000003FFE00000000000 -3FFFFE0000000001FFFFFFC000000007FFFFFFF80000001FFFFFFFFE0000007FFFFFFFFF -000000FFF007FFFFC00003FF8000FFFFE00007FE00003FFFF0000FF800001FFFF8000FF0 -00000FFFFC001FE0000007FFFE003FF8000003FFFF003FFE000001FFFF807FFF000001FF -FF807FFF800000FFFFC07FFFC00000FFFFC0FFFFC000007FFFC0FFFFE000007FFFE0FFFF -E000007FFFE0FFFFE000007FFFE0FFFFE000007FFFF0FFFFE000003FFFF0FFFFE000003F -FFF07FFFC000003FFFF07FFFC000003FFFF03FFF8000003FFFF03FFF8000003FFFF01FFF -0000003FFFF007FC0000003FFFF000E00000007FFFE000000000007FFFE000000000007F -FFE000000000007FFFE00000000000FFFFC00000000000FFFFC00000000000FFFF800000 -000001FFFF800000000001FFFF000000000001FFFE000000000003FFFE000000000003FF -FC000000000007FFF800000000000FFFF000000000000FFFE000000000001FFFC0000000 -00003FFF8000000000003FFF0000000000007FFE000000000000FFFC000000000001FFF0 -000000000003FFE0000000000003FFC0000000000007FF0000000000000FFE0000000000 -001FFC0000000000003FF80000000000007FE0000000000000FFC0000000000001FF8000 -0000000003FF00000000000003FE000003F0000007F8000003F000000FF0000003F00000 -1FE0000007F000003FC0000007E000007F80000007E00000FF00000007E00001FE000000 -07E00003FC0000000FE00007F00000000FE0000FE00000000FE0001FC00000001FC0001F -800000003FC0003FFFFFFFFFFFC0007FFFFFFFFFFFC000FFFFFFFFFFFFC001FFFFFFFFFF -FFC003FFFFFFFFFFFFC007FFFFFFFFFFFF800FFFFFFFFFFFFF801FFFFFFFFFFFFF803FFF -FFFFFFFFFF807FFFFFFFFFFFFF807FFFFFFFFFFFFF80FFFFFFFFFFFFFF80FFFFFFFFFFFF -FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF003C5A78D94D>I<000000 -7FFC000000000007FFFFC0000000003FFFFFF800000000FFFFFFFE00000003FFFFFFFF80 -00000FFFF00FFFC000001FFF8001FFE000003FFE0000FFF800007FFC00007FFC0000FFF8 -00003FFE0001FFF000001FFE0003FFF000001FFF0007FFE000000FFF800FFFE000000FFF -800FFFE0000007FFC01FFFE0000007FFC01FFFE0000007FFE03FFFC0000007FFE03FFFC0 -000007FFF07FFFC0000007FFF07FFFC0000007FFF87FFFC0000003FFF87FFFC0000003FF -F8FFFFC0000003FFFCFFFFC0000003FFFCFFFFC0000003FFFCFFFFC0000003FFFCFFFFC0 -000003FFFEFFFFC0000003FFFEFFFFC0000003FFFEFFFFC0000003FFFEFFFFC0000003FF -FEFFFFC0000003FFFEFFFFC0000003FFFEFFFFC0000003FFFFFFFFC0000003FFFF7FFFC0 -000007FFFF7FFFC0000007FFFF7FFFC0000007FFFF7FFFC0000007FFFF3FFFC0000007FF -FF3FFFC000000FFFFF3FFFC000000FFFFF1FFFE000000FFFFF1FFFE000001FFFFF0FFFE0 -00001FFFFF07FFE000001FFFFF07FFE000003FFFFF03FFF000007FFFFF01FFF800007BFF -FF00FFF80000FBFFFF007FFC0001F3FFFF003FFF0007E3FFFF001FFFC01FC3FFFF0007FF -FFFF83FFFE0003FFFFFF03FFFE0000FFFFFC03FFFE00001FFFF803FFFE000001FFC003FF -FE000000000003FFFC000000000003FFFC000000000003FFFC000000000007FFFC000000 -000007FFF8000000000007FFF8000000000007FFF8007F00000007FFF001FFC0000007FF -F003FFE0000007FFF007FFF000000FFFE007FFF000000FFFE00FFFF800000FFFC00FFFF8 -00001FFFC00FFFF800001FFF800FFFF800001FFF000FFFF800003FFF000FFFF800007FFE -000FFFF000007FFC0007FFF00000FFF80007FFE00001FFF80007FFC00003FFF00003FF00 -0007FFE00003FC00001FFF800001FF00007FFF000000FFF003FFFE0000007FFFFFFFF800 -00003FFFFFFFE00000001FFFFFFF8000000007FFFFFE0000000000FFFFF000000000000F -FF00000000405B7AD94D>57 D<01F80007FE000FFF001FFF803FFFC07FFFE07FFFE0FFFF -F0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF07FFFE07FFFE03FFFC01FFF800FFF0007FE0001F8 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000001F80007FE000FFF -001FFF803FFFC07FFFE07FFFE0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF07FFFE07FFF -E03FFFC01FFF800FFF0007FE0001F800143D75BC2B>I<0000000000003F000000000000 -000000000000007F80000000000000000000000000FFC0000000000000000000000000FF -C0000000000000000000000001FFE0000000000000000000000001FFE000000000000000 -0000000001FFE0000000000000000000000003FFF0000000000000000000000003FFF000 -0000000000000000000007FFF8000000000000000000000007FFF8000000000000000000 -000007FFF800000000000000000000000FFFFC00000000000000000000000FFFFC000000 -00000000000000001FFFFE00000000000000000000001FFFFE0000000000000000000000 -1FFFFE00000000000000000000003FFFFF00000000000000000000003FFFFF0000000000 -0000000000007FFFFF80000000000000000000007FFFFF80000000000000000000007FFF -FF8000000000000000000000FFFFFFC000000000000000000000FEFFFFC0000000000000 -00000001FEFFFFE000000000000000000001FCFFFFE000000000000000000003FC7FFFF0 -00000000000000000003FC7FFFF000000000000000000003F83FFFF00000000000000000 -0007F83FFFF800000000000000000007F03FFFF80000000000000000000FF01FFFFC0000 -000000000000000FF01FFFFC0000000000000000000FE00FFFFC0000000000000000001F -E00FFFFE0000000000000000001FC00FFFFE0000000000000000003FC007FFFF00000000 -00000000003FC007FFFF0000000000000000003F8003FFFF0000000000000000007F8003 -FFFF8000000000000000007F0003FFFF800000000000000000FF0001FFFFC00000000000 -000000FF0001FFFFC00000000000000000FE0000FFFFC00000000000000001FE0000FFFF -E00000000000000001FC0000FFFFE00000000000000003FC00007FFFF000000000000000 -03FC00007FFFF00000000000000003F800003FFFF00000000000000007F800003FFFF800 -00000000000007F000003FFFF8000000000000000FF000001FFFFC000000000000000FF0 -00001FFFFC000000000000000FE000000FFFFC000000000000001FE000000FFFFE000000 -000000001FC0000007FFFE000000000000003FC0000007FFFF000000000000003F800000 -07FFFF000000000000003F80000003FFFF000000000000007F80000003FFFF8000000000 -00007F00000001FFFF80000000000000FF00000001FFFFC0000000000000FFFFFFFFFFFF -FFC0000000000000FFFFFFFFFFFFFFC0000000000001FFFFFFFFFFFFFFE0000000000001 -FFFFFFFFFFFFFFE0000000000003FFFFFFFFFFFFFFF0000000000003FFFFFFFFFFFFFFF0 -000000000007F8000000003FFFF8000000000007F8000000003FFFF8000000000007F000 -0000001FFFF800000000000FF0000000001FFFFC00000000000FE0000000001FFFFC0000 -0000001FE0000000000FFFFE00000000001FE0000000000FFFFE00000000001FC0000000 -0007FFFE00000000003FC00000000007FFFF00000000003F800000000007FFFF00000000 -007F800000000003FFFF80000000007F800000000003FFFF80000000007F000000000001 -FFFF8000000000FF000000000001FFFFC000000000FE000000000001FFFFC000000001FE -000000000000FFFFE000000001FE000000000000FFFFE000000001FC0000000000007FFF -E000000003FC0000000000007FFFF000000003F80000000000007FFFF00000001FFF8000 -000000003FFFF80000FFFFFFFF80000007FFFFFFFFFFC0FFFFFFFF80000007FFFFFFFFFF -C0FFFFFFFF80000007FFFFFFFFFFC0FFFFFFFF80000007FFFFFFFFFFC0FFFFFFFF800000 -07FFFFFFFFFFC0FFFFFFFF80000007FFFFFFFFFFC06A5F7BDE75>65 -D68 D73 D76 DI< -00000000007FFF000000000000000000001FFFFFFC000000000000000001FFFFFFFFC000 -0000000000000FFFFFFFFFF8000000000000003FFFFFFFFFFE00000000000000FFFFE003 -FFFF80000000000003FFFF00007FFFE000000000000FFFF800000FFFF800000000001FFF -E0000003FFFC00000000003FFFC0000001FFFE0000000000FFFF000000007FFF80000000 -01FFFE000000003FFFC000000003FFFC000000001FFFE000000007FFF8000000000FFFF0 -0000000FFFF00000000007FFF80000001FFFE00000000003FFFC0000003FFFE000000000 -03FFFE0000003FFFC00000000001FFFE0000007FFF800000000000FFFF000000FFFF8000 -00000000FFFF800001FFFF0000000000007FFFC00001FFFF0000000000007FFFC00003FF -FE0000000000003FFFE00003FFFE0000000000003FFFE00007FFFE0000000000003FFFF0 -0007FFFC0000000000001FFFF0000FFFFC0000000000001FFFF8000FFFFC000000000000 -1FFFF8001FFFFC0000000000001FFFFC001FFFF80000000000000FFFFC001FFFF8000000 -0000000FFFFC003FFFF80000000000000FFFFE003FFFF80000000000000FFFFE003FFFF8 -0000000000000FFFFE003FFFF80000000000000FFFFE007FFFF000000000000007FFFF00 -7FFFF000000000000007FFFF007FFFF000000000000007FFFF007FFFF000000000000007 -FFFF007FFFF000000000000007FFFF007FFFF000000000000007FFFF00FFFFF000000000 -000007FFFF80FFFFF000000000000007FFFF80FFFFF000000000000007FFFF80FFFFF000 -000000000007FFFF80FFFFF000000000000007FFFF80FFFFF000000000000007FFFF80FF -FFF000000000000007FFFF80FFFFF000000000000007FFFF80FFFFF000000000000007FF -FF80FFFFF000000000000007FFFF80FFFFF000000000000007FFFF80FFFFF00000000000 -0007FFFF80FFFFF000000000000007FFFF80FFFFF000000000000007FFFF80FFFFF00000 -0000000007FFFF807FFFF000000000000007FFFF007FFFF000000000000007FFFF007FFF -F80000000000000FFFFF007FFFF80000000000000FFFFF007FFFF80000000000000FFFFF -007FFFF80000000000000FFFFF003FFFF80000000000000FFFFE003FFFF8000000000000 -0FFFFE003FFFF80000000000000FFFFE001FFFFC0000000000001FFFFC001FFFFC000000 -0000001FFFFC001FFFFC0000000000001FFFFC000FFFFC0000000000001FFFF8000FFFFE -0000000000003FFFF80007FFFE0000000000003FFFF00007FFFE0000000000003FFFF000 -07FFFF0000000000007FFFF00003FFFF0000000000007FFFE00001FFFF800000000000FF -FFC00001FFFF800000000000FFFFC00000FFFFC00000000001FFFF8000007FFFC0000000 -0001FFFF0000007FFFE00000000003FFFF0000003FFFF00000000007FFFE0000001FFFF0 -0000000007FFFC0000000FFFF8000000000FFFF800000007FFFC000000001FFFF0000000 -03FFFE000000003FFFE000000001FFFF000000007FFFC000000000FFFFC0000001FFFF80 -000000007FFFE0000003FFFF00000000001FFFF800000FFFFC00000000000FFFFF00007F -FFF8000000000003FFFFE003FFFFE0000000000000FFFFFFFFFFFF800000000000003FFF -FFFFFFFE000000000000000FFFFFFFFFF80000000000000001FFFFFFFFC0000000000000 -00001FFFFFFC000000000000000000007FFF000000000000616077DE74>79 -D82 D<1FFFFFFFFFFFFFFFFFFFFFF01FFFFFFFFFFFFFFFFFFFFFF01FFFFFFFFF -FFFFFFFFFFFFF01FFFFFFFFFFFFFFFFFFFFFF01FFFFFFFFFFFFFFFFFFFFFF01FFFFFFFFF -FFFFFFFFFFFFF03FFFFC0001FFFF80007FFFF83FFFC00001FFFF800007FFF83FFF000001 -FFFF800001FFF83FFC000001FFFF8000007FF83FF8000001FFFF8000003FF83FF0000001 -FFFF8000001FF83FE0000001FFFF8000000FF83FC0000001FFFF80000007F83FC0000001 -FFFF80000007F83F80000001FFFF80000003F83F80000001FFFF80000003F87F80000001 -FFFF80000001FC7F00000001FFFF80000001FC7F00000001FFFF80000001FC7F00000001 -FFFF80000001FC7E00000001FFFF80000000FC7E00000001FFFF80000000FC7E00000001 -FFFF80000000FC7E00000001FFFF80000000FC7E00000001FFFF80000000FC7E00000001 -FFFF80000000FC7E00000001FFFF80000000FCFC00000001FFFF800000007EFC00000001 -FFFF800000007EFC00000001FFFF800000007EFC00000001FFFF800000007EFC00000001 -FFFF800000007E0000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF80000000000000000001FFFF80000000000000000001FFFF80000000000000000001 -FFFF800000000000003FFFFFFFFFFFFFFC000000003FFFFFFFFFFFFFFC000000003FFFFF -FFFFFFFFFC000000003FFFFFFFFFFFFFFC000000003FFFFFFFFFFFFFFC000000003FFFFF -FFFFFFFFFC00005F5D7ADC6C>84 DI E end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 400dpi -TeXDict begin -%%PaperSize: A4 - -%%EndSetup -%%Page: 1 1 -1 0 bop 358 299 a Fh(TUTORIAL)51 b(:)g(AMD)g(2901)274 -441 y Fg(W)-5 b(elcome)20 b(to)g(the)f Ff(ALLIANCE)k(3.2)d -Fg(CAD)h(system.)180 516 y(The)i(goal)i(of)f(this)f(tutorial)g(is)h(to) -g(presen)n(t)e(a)j(t)n(ypical)e(design-\015o)n(w)h(of)g(a)g(simple)f(4) -h(bits)180 592 y(pro)r(cessor)19 b(\(AMD2901\),)i(using)f(the)f -Ff(ALLIANCE)h Fg(to)r(ols.)274 667 y(The)g(to)r(ols)f(used)h(here)f -(are)i(:)271 808 y Fe(\017)31 b Ff(asim)n(ut)18 b Fg(:)27 -b Ff(VHDL)20 b Fg(compiler)f(and)h(sim)n(ulator.)271 -934 y Fe(\017)31 b Ff(genlib)18 b Fg(:)26 b(Net-List)20 -b(capture.)271 1059 y Fe(\017)31 b Ff(scr)19 b Fg(:)27 -b(Standard)18 b(Cell)i(placer)g(and)f(router.)271 1184 -y Fe(\017)31 b Ff(ring)18 b Fg(:)27 b(Core)20 b(to)g(pads)g(router.)271 -1309 y Fe(\017)31 b Ff(lynx)18 b Fg(:)27 b(Sym)n(b)r(olic)19 -b(la)n(y)n(out)i(extractor.)271 1434 y Fe(\017)31 b Ff(lvx)19 -b Fg(:)26 b(Net-List)20 b(comparator.)271 1559 y Fe(\017)31 -b Ff(druc)19 b Fg(:)27 b(Design)20 b(rule)f(c)n(hec)n(k)n(er.)271 -1684 y Fe(\017)31 b Ff(graal)18 b Fg(:)27 b(Graphic)19 -b(la)n(y)n(out)i(editor.)271 1809 y Fe(\017)31 b Ff(y)n(agle)19 -b Fg(:)26 b(F)-5 b(unctional)19 b(abstractor.)271 1934 -y Fe(\017)31 b Ff(pro)r(of)19 b Fg(:)27 b(F)-5 b(ormal)19 -b(pro)r(of)h(b)r(et)n(w)n(een)f(t)n(w)n(o)h(b)r(eha)n(vioral)g -(descriptions.)271 2059 y Fe(\017)31 b Ff(s2r)19 b Fg(:)27 -b(Sym)n(b)r(olic)18 b(to)j(real)f(la)n(y)n(out)g(con)n(v)n(erter.)271 -2184 y Fe(\017)31 b Ff(tas)19 b Fg(:)27 b(Timing)19 b(Analysis)h -(static.)180 2326 y(A)n(t)f(an)n(y)h(time)e(y)n(ou)h(can)g(get)g -(information)f(on)h(an)n(y)g Ff(ALLIANCE)f Fg(to)r(ol)h(using)g(the)f -(com-)180 2401 y(mand)h(:)p 180 2493 701 3 v 180 2571 -3 78 v 219 2552 a Fd(>)k Ff(man)g Fd(<)p Ff(to)r(ol)g(name)p -Fd(>)p 878 2571 V 180 2573 701 3 v 180 2702 a Fg(All)g(the)f(a)n(v)m -(ailable)h(do)r(cumen)n(tation)e(is)i(describ)r(ed)d(in)j(the)f -Ff(README)h Fg(\014le.)34 b(This)23 b(tu-)180 2778 y(torial)i(do)r -(esn't)f(con)n(tain)i(a)f(description)f(of)h(the)g Ff(AMD2901)p -Fg(,)i(but)d(the)h(metho)r(dology)180 2853 y(used)j(in)h -Ff(ALLIANCE)f Fg(to)h(pro)r(duce)f(it.)53 b(Nev)n(ertheless,)30 -b(y)n(ou)f(will)g(\014nd)f(in)g(the)h(\014le)180 2928 -y Ff(AMD2901)p 496 2928 21 3 v 25 w(do)r(c.ps.tar)p Fg(,)20 -b(the)g(original)g(data-sheet)g(of)h(the)f(circuit.)27 -b(T)-5 b(o)21 b(uncompress)180 3004 y(the)e(sheets,)g(use)h(the)f -Ff(UNIX)h Fg(command)f(:)p 180 3087 974 3 v 180 3248 -3 161 v 219 3145 a Fd(>)p Ff(tar)k(xvf)g(AMD2901)p 813 -3145 21 3 v 25 w(do)r(c.ps.tar)219 3219 y Fd(>)p Ff(uncompress)e -(AMD2901*.Z)p 1152 3248 3 161 v 180 3250 974 3 v 180 -3294 a Fg(A)14 b(GIF)e(format)h(of)g(the)g(data-sheet)f(is)h(also)h(a)n -(v)m(ailable)g(in)f(the)f(\014le)h Ff(AMD2901)p 1978 -3294 21 3 v 25 w(do)r(c.gif.tar)p Fg(.)180 3370 y(The)20 -b(design-\015o)n(w)f(used)h(in)f(this)h(tutorial)f(is)h(comp)r(osed)f -(of)h(\014v)n(e)g(steps)f(:)271 3495 y Fe(\017)31 b Ff(Step)22 -b(1)e Fg(:)27 b(Beha)n(vioural)20 b(description)e(\()p -Ff(VHDL)i Fg(mo)r(del\))e(and)i(sim)n(ulation.)271 3620 -y Fe(\017)31 b Ff(Step)d(2)e Fg(:)37 b(Generation)24 -b(and)h(v)m(alidation)f(of)i(the)e(structural)g(description)f(\(gate) -332 3695 y(net-list\).)1205 3894 y(1)p eop -%%Page: 2 2 -2 1 bop 271 266 a Fe(\017)31 b Ff(Step)22 b(3)e Fg(:)27 -b(Ph)n(ysical)20 b(design)g(la)n(y)n(out)g(\(Place)g(and)g(route\).)271 -391 y Fe(\017)31 b Ff(Step)22 b(4)e Fg(:)27 b(Extraction)19 -b(and)h(v)n(eri\014cation.)271 516 y Fe(\017)31 b Ff(Step)22 -b(5)e Fg(:)27 b(Timing)19 b(analysis.)271 641 y Fe(\017)31 -b Ff(Step)22 b(6)e Fg(:)27 b(Chip)19 b(\014nishing.)274 -766 y(In)c(order)f(to)h(build)e(the)h(c)n(hip)h(in)f(ab)r(out)g(t)n(w)n -(o)h(hours,)g(all)g(the)f(source)h(\014les)f(are)h(pro)n(vided)180 -841 y(with)k(this)g(tutorial)g(:)271 966 y Fe(\017)31 -b Ff(amd.vb)r(e)19 b Fg(:)27 b Ff(VHDL)20 b Fg(b)r(eha)n(vioural)f(mo)r -(del.)271 1091 y Fe(\017)31 b Ff(pattern.pat)19 b Fg(:)27 -b(Sim)n(ulation)18 b(P)n(atterns.)271 1217 y Fe(\017)31 -b Ff(c)n(hip.c)19 b Fg(:)27 b(Chip)19 b(structural)f(description.)271 -1342 y Fe(\017)31 b Ff(c)n(hip.rin)18 b Fg(:)26 b(P)n(ads)21 -b(placemen)n(t)e(\(for)g Ff(ring)p Fg(\).)271 1467 y -Fe(\017)31 b Ff(heart.scr)19 b Fg(:)26 b(Connectors)19 -b(placemen)n(t)g(\(for)h Ff(scr)p Fg(\).)271 1592 y Fe(\017)31 -b Ff(c)n(hip.inf)18 b Fg(:)27 b(Registers)19 b(renaming)g(\(for)g -Ff(desb)p Fg(\).)274 1717 y(Y)-5 b(ou)16 b(will)f(use)g(the)f -Ff(ALLIANCE)h Fg(to)r(ols)g(to)g(v)m(alidate)g(these)f(input)g(\014les) -h(and)g(to)g(build)180 1792 y(the)k(ph)n(ysical)h(la)n(y)n(out.)27 -b(The)20 b(output)e(is)i(a)h Ff(CIF)g Fg(la)n(y)n(out)f(\014le)g(ready) -g(for)f(the)h(foundry)-5 b(.)274 1867 y(T)g(o)20 b(build)f(the)h(c)n -(hip)f(y)n(ou)i(can)f(:)271 1993 y Fe(\017)31 b Fg(-)20 -b(run)f(the)h Ff(UNIX)f Fg(commands)g(in)h(the)f(order)h(indicated)e(b) -n(y)j(this)e(tutorial.)271 2118 y Fe(\017)31 b Fg(-)19 -b(build)e(automatically)h(the)g(en)n(tire)g Ff(AMD2901)j(CHIP)e -Fg(using)f(the)g(command)g(:)p 332 2209 308 3 v 332 2287 -3 78 v 371 2268 a Fd(>)23 b Ff(mak)n(e)p 636 2287 V 332 -2289 308 3 v 332 2419 a Fg(If)d(y)n(ou)h(w)n(an)n(t)f(to)h(start)e -(again)j(this)d(example)h(from)g(the)g(b)r(egining,)f(y)n(ou)i(just)e -(ha)n(v)n(e)332 2494 y(to)h(t)n(yp)r(e)f(:)p 332 2577 -486 3 v 332 2716 3 139 v 371 2636 a Fd(>)k Ff(mak)n(e)g(clean)371 -2697 y Fd(>)g Ff(mak)n(e)p 815 2716 V 332 2718 486 3 -v 274 2822 a Fg(All)h Ff(ALLIANCE)g Fg(to)r(ols)g(use)f(a)i(set)f(of)g -Ff(UNIX)f Fg(en)n(vironmen)n(t)g(v)m(ariables.)38 b(These)180 -2897 y(v)m(ariables)19 b(are)i(set)e(b)n(y)h(the)g Ff(UNIX)f -Fg(command)g(\\exp)r(ort".)p 180 2980 2395 3 v 180 3204 -3 225 v 219 3038 a Fd(>)k Ff(MBK)p 464 3038 21 3 v 25 -w(W)n(ORK)p 718 3038 V 25 w(LIB=.)219 3103 y Fd(>)g Ff(MBK)p -464 3103 V 25 w(CA)-6 b(T)g(A)p 682 3103 V 25 w -(LIB=.:/$ALLIANCE_TOP/cells/sclib)o(/pro)o(l10)o(:/$ALLIANCE_TOP/cel)o(ls)o(/ri)o(ng)o -(/pads)o(ym)n(b)219 3176 y Fd(>)23 b Ff(exp)r(ort)g(MBK)p -688 3176 V 24 w(W)n(ORK)p 941 3176 V 26 w(LIB)g(MBK)p -1279 3176 V 24 w(CA)-6 b(T)g(A)p 1496 3176 V 25 w(LIB)p -2572 3204 3 225 v 180 3206 2395 3 v 271 3318 a Fe(\017)31 -b Ff(MBK)p 507 3318 21 3 v 24 w(CA)-6 b(T)g(A)p 724 3318 -V 25 w(LIB)31 b(:)d Fg(This)f(v)m(ariable)g(de\014nes)g(all)g(paths)g -(to)h(the)f(directories)332 3393 y(con)n(taining)19 b(the)h -Ff(ALLIANCE)f Fg(prede\014ned)f(cell)i(libraries.)271 -3518 y Fe(\017)31 b Ff(MBK)p 507 3518 V 24 w(W)n(ORK)p -760 3518 V 25 w(LIB)c(:)d Fg(This)f(v)m(ariable)g(de\014nes)f(the)h(w)n -(orking)g(directory)g(:)33 b(all)332 3593 y(user)19 b(\014les)h(will)f -(b)r(e)g(written)g(in)g(this)h(directory)-5 b(.)1205 -3894 y(2)p eop -%%Page: 3 3 -3 2 bop 180 266 a Fg(Some)25 b(of)g(the)f(path)g(names)h(ha)n(v)n(e)h -(to)f(b)r(e)f(mo)r(di\014ed)g(in)g(order)h(to)g(corresp)r(ond)f(to)h(y) -n(our)180 341 y(particular)d(installation)g(of)g(Alliance,)i(in)f(this) -f(tutorial)g(w)n(e)h(will)f(assume)h(that)f(the)g(di-)180 -416 y(rectory)g(structure)e(of)j(the)f(sources)g(\014les)g(has)g(not)h -(b)r(een)e(altered)h(In)g(this)g(tutorial,)g(the)180 -491 y(commands)e(whic)n(h)g(are)h(inside)f([)h(])g(are)g(preset.)28 -b(If)21 b(y)n(ou)g(sta)n(y)g(in)g(the)f(same)h(shell)f(during)180 -567 y(the)g(making)h(of)g(the)g Ff(AMD2901)p Fg(,)g(y)n(ou)h(don't)e -(ha)n(v)n(e)i(to)f(set)g(again)g(these)g(en)n(vironmen)n(t)180 -642 y(v)m(ariables.)180 833 y Fc(1)89 b(Beha)n(vioural)30 -b(sp)r(eci\014cation)180 970 y Fb(1.1)75 b(Beha)n(vioural)27 -b(mo)r(del)180 1085 y Fg(The)20 b(circuit)g(b)r(eha)n(viour)g(is)h -(describ)r(ed)e(in)h(the)g(amd.vb)r(e)g(\014le)g(using)h(the)f -Ff(ALLIANCE)180 1160 y(VHDL)15 b Fg(subset)f(\(see)h -Fa(man)i(vhd)s(l)f Fg(and)g Fa(man)h(vb)m(e)p Fg(\).)24 -b(Y)-5 b(ou)16 b(m)n(ust)f(run)f(the)h Ff(VHDL)g Fg(compiler)180 -1235 y(to)20 b(v)m(alidate)f(the)h Ff(VHDL)g Fg(\014le)f(syn)n(tax.)p -180 1318 2454 3 v 180 1628 3 310 v 219 1381 a Ff([)p -Fd(>)24 b Ff(MBK)p 484 1381 21 3 v 24 w(W)n(ORK)p 737 -1381 V 26 w(LIB=.])219 1458 y([)p Fd(>)g Ff(MBK)p 484 -1458 V 24 w(CA)-6 b(T)g(A)p 701 1458 V 25 w(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o -(rol)o(10:/$T)o(OP/cell)o(s)o(/ri)o(ng/p)o(adsy)o(m)n(b])219 -1535 y([)p Fd(>)24 b Ff(exp)r(ort)e(MBK)p 707 1535 V -24 w(CA)-6 b(T)g(A)p 924 1535 V 25 w(LIB)23 b(MBK)p 1261 -1535 V 25 w(W)n(ORK)p 1515 1535 V 25 w(LIB])219 1609 -y Fd(>)g Ff(asim)n(ut)f(-b)i(-c)f(amd)p 2631 1628 3 310 -v 180 1630 2454 3 v 271 1734 a Fe(\017)31 b Ff(amd)19 -b Fg(is)h(the)g(\014lename)f(of)h(the)f(b)r(eha)n(vioural)h -(description)e(\()p Ff(amd.vb)r(e)p Fg(\).)271 1859 y -Fe(\017)31 b Ff(-b)20 b Fg(means)f(that)h(the)f(\014le)h(is)f(a)i(pure) -e(b)r(eha)n(vioural)h(description.)271 1984 y Fe(\017)31 -b Ff(-c)20 b Fg(stands)g(for)g(compilation)f(only)h(\(compilabilit)n(y) -e(is)i(c)n(hec)n(k)n(ed,)h(no)f(sim)n(ulation)f(is)332 -2059 y(p)r(erformed\).)180 2222 y Fb(1.2)75 b(Sim)n(ulation)27 -b(patterns)180 2336 y Fg(As)19 b(y)n(ou)g(ha)n(v)n(e)h(sp)r(eci\014ed)d -(a)i(formal)f(sp)r(eci\014cation,)f(y)n(ou)i(ha)n(v)n(e)g(to)g -(de\014ne)f(a)h(set)f(of)g(sim)n(ula-)180 2411 y(tion)f(patterns.)24 -b(The)17 b(same)g(patterns)f(will)h(b)r(e)f(used)h(to)g(v)m(alidate)g -(eac)n(h)h(design)e(step)h(from)180 2487 y(sp)r(eci\014cation)h(to)j -(ph)n(ysical)e(la)n(y)n(out.)180 2562 y(The)h(\014le)f -Ff(pattern.pat)h Fg(is)g(giv)n(en)g(as)g(an)g(example.)180 -2724 y Fb(1.3)75 b(Sim)n(ulation)180 2839 y Fg(Y)-5 b(ou)22 -b(ha)n(v)n(e)g(no)n(w)f(a)h(logical)g(description)e(of)h(y)n(our)h -(circuit,)e(and)h(a)h(list)e(of)i(patterns.)29 b(Y)-5 -b(ou)180 2914 y(can)19 b(run)e(the)h(zero-dela)n(y)h(VHDL)g(sim)n -(ulator)f Ff(asim)n(ut)p Fg(.)25 b(Y)-5 b(ou)19 b(ha)n(v)n(e)g(to)f -(set)g(up)g(some)h(new)180 2989 y(en)n(vironmen)n(t)g(v)m(ariables)g -(sp)r(eci\014c)g(to)h Ff(asim)n(ut)p Fg(.)p 180 3009 -826 3 v 180 3156 3 148 v 219 3067 a Fd(>)j Ff(VH)p 401 -3067 21 3 v 25 w(MAXERR=10)219 3127 y Fd(>)g Ff(exp)r(ort)g(VH)p -625 3127 V 24 w(MAXERR)p 1004 3156 3 148 v 180 3158 826 -3 v 271 3269 a Fe(\017)31 b Ff(VH)p 444 3269 21 3 v 24 -w(MAXERR)13 b Fg(:)g(The)g(maxim)n(um)f(n)n(um)n(b)r(er)g(of)i(errors)f -(accepted)f(b)r(efore)g Ff(asim)n(ut)332 3344 y Fg(stops)19 -b(sim)n(ulation.)p 274 3430 776 3 v 274 3601 3 172 v -313 3492 a Fd(>)k Ff(VH)p 495 3492 21 3 v 25 w(P)-6 b(A)g(TSFX=pat])313 -3570 y Fd(>)23 b Ff(exp)r(ort)g(VH)p 719 3570 V 24 w(P)-6 -b(A)g(TSFX])p 1048 3601 3 172 v 274 3603 776 3 v 271 -3718 a Fe(\017)31 b Ff(VH)p 444 3718 21 3 v 24 w(P)-6 -b(A)g(TSFX)19 b Fg(the)g(extension)g(of)h(sim)n(ulation)f(patterns)f -(\014le.)1205 3894 y(3)p eop -%%Page: 4 4 -4 3 bop 274 207 2454 3 v 274 680 3 474 v 313 269 a Ff([)p -Fd(>)24 b Ff(VH)p 515 269 21 3 v 24 w(MAXERR=10])313 -346 y([)p Fd(>)g Ff(VH)p 515 346 V 24 w(P)-6 b(A)g(TSFX=pat])313 -423 y([)p Fd(>)24 b Ff(MBK)p 578 423 V 24 w(W)n(ORK)p -831 423 V 26 w(LIB=.])313 501 y([)p Fd(>)g Ff(MBK)p 578 -501 V 24 w(CA)-6 b(T)g(A)p 795 501 V 25 w(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o -(rol)o(10:/$T)o(OP/cell)o(s)o(/ri)o(ng/pa)o(dsy)o(m)n(b])313 -578 y([)p Fd(>)24 b Ff(exp)r(ort)e(MBK)p 801 578 V 25 -w(CA)-6 b(T)g(A)p 1019 578 V 24 w(LIB)23 b(VH)p 1292 -578 V 25 w(MAXERR)g(VH)p 1770 578 V 24 w(P)-6 b(A)g(TSFX)22 -b(MBK)p 2261 578 V 24 w(W)n(ORK)p 2514 578 V 26 w(LIB])313 -652 y Fd(>)h Ff(asim)n(ut)f(-b)i(amd)f(pattern)f(result)p -1277 652 V 23 w(b)r(eh)p 2725 680 3 474 v 274 682 2454 -3 v 271 783 a Fe(\017)31 b Ff(amd)19 b Fg(:)27 b(is)20 -b(the)f(\014lename)h(of)g(the)f(description)f(\()p Ff(amd.vb)r(e)p -Fg(\).)271 908 y Fe(\017)31 b Ff(pattern)19 b Fg(:)27 -b(is)20 b(the)f(\014lename)g(for)h(the)f(input)g(patterns)f(\()p -Ff(pattern.pat)p Fg(\).)271 1033 y Fe(\017)31 b Ff(result)p -511 1033 21 3 v 23 w(b)r(eh)16 b Fg(:)25 b(is)17 b(the)f(\014lename)f -(for)i(the)f(resulting)f(patterns)g(\()p Ff(result)p -1970 1033 V 23 w(b)r(eh.pat)p Fg(\).)271 1158 y Fe(\017)31 -b Ff(-b)20 b Fg(:)26 b(means)20 b(that)f(the)h Ff(amd)g -Fg(\014le)f(is)h(a)h(pure)e(b)r(eha)n(vioural)g(description.)274 -1283 y(The)e(input)f(pattern)g(\014le)h(can)h(pro)n(vide)f(the)g(exp)r -(ected)f(outputs.)24 b(An)n(y)18 b(di\013erence)f(b)r(e-)180 -1359 y(t)n(w)n(een)e(predicted)f(outputs)g(in)i Ff(pattern.pat)f -Fg(and)g(sim)n(ulation)g(results)f(will)i(b)r(e)f(rep)r(orted)180 -1434 y(as)20 b(commen)n(tary)f(on)h(the)f(screen)h(and)f(in)h -Ff(result)p 1339 1434 V 23 w(b)r(eh.pat)p Fg(.)26 b(This)20 -b(output)e(\014le)i(ma)n(y)g(b)r(e)180 1509 y(used)e(again)h(for)f(an)h -(another)e(sim)n(ulation,)h(since)g(it)g(has)g(the)g(same)g(format)g -(as)h(the)f(input)180 1585 y(\014le.)180 1776 y Fc(2)89 -b(Structural)29 b(Description)180 1913 y Fb(2.1)75 b(Structural)24 -b(Design)180 2027 y Fg(The)e(aim)g(of)g(this)g(step)g(is)g(to)g(build)f -(the)h(gate)h(lev)n(el)f(sc)n(hematic)g(corresp)r(onding)e(to)j(the)180 -2103 y(b)r(eha)n(vioural)c(sp)r(eci\014cation.)274 2178 -y(W)-5 b(e)27 b(m)n(ust)f(instan)n(tiate)f(and)i(connect)f(logical)h -(gates)g(and)f(pads,)i(supplied)d(in)i(the)180 2253 y(standard)22 -b(cell)g(library)g Ff(scr)g Fg(and)g(the)g(pad)h(library)f -Ff(ring)p Fg(.)33 b(T)-5 b(o)23 b(do)f(this,)h Ff(ALLIANCE)180 -2329 y Fg(do)r(esn't)e(use)g(a)i(sc)n(hematic)e(editor)g(but)g(the)g -(pro)r(cedural)g(language)h Ff(genlib)e Fg(whic)n(h)i(is)g(a)180 -2404 y(set)e(of)g(C)g(functions)e(\(see)h Fa(man)j(genlib)p -Fg(\).)274 2479 y(The)32 b(structural)e(description)g(of)i(the)f -Ff(AMD2901)h Fg(follo)n(ws)f(a)i(hierarc)n(hical)e(ap-)180 -2554 y(proac)n(h.)271 2696 y Fe(\017)g Fg(First,)13 b(eac)n(h)i -(functionnal)d(blo)r(c)n(k)i(is)g(describ)r(ed)e(as)j(a)g(separate)e -(gate)i(net-list.)23 b(There)332 2771 y(are)d(\014v)n(e)g(blo)r(c)n(ks) -g(:)26 b Ff(accu,)e(alu,)e(ram,)h(m)n(uxe,)h(m)n(uxout)p -Fg(.)271 2896 y Fe(\017)31 b Fg(The)13 b(next)f(hierarc)n(hical)h(lev)n -(el)h(is)f(the)g Ff(heart)g Fg(that)g(in)n(terconnects)e(these)i(\014v) -n(e)g(blo)r(c)n(ks)332 2972 y(among)20 b(eac)n(h)g(others.)271 -3097 y Fe(\017)31 b Fg(The)25 b(\014nal)h(hierarc)n(hical)g(lev)n(el)g -(is)g(the)f Ff(c)n(hip)h Fg(that)f(connects)g(the)h Ff(heart)g -Fg(to)g(the)332 3172 y Ff(pads)p Fg(.)274 3314 y(The)f -Ff(c)n(hip.c)g Fg(\014le)g(uses)g(the)g Ff(genlib)e Fg(language)j(to)g -(describ)r(e)d(these)i(7)h(hierarc)n(hical)180 3389 y(blo)r(cs.)274 -3464 y(The)d Ff(ALLIANCE)g Fg(system)g(accepts)f(sev)n(eral)i(external) -f(\014le)g(formats)f(for)h(net-list)180 3540 y(\(EDIF,)16 -b(VHDL,)h(SPICE,)f(ALLIANCE,)h(VLSI\).)e(En)n(vironmen)n(t)g(v)m -(ariables)h(allo)n(w)g(to)h(set)180 3615 y(the)i(formats.)26 -b(The)20 b Ff(.vst)g Fg(extension)f(corresp)r(onds)f(to)i(the)g -(structural)e Ff(VHDL)p Fg(.)1205 3894 y(4)p eop -%%Page: 5 5 -5 4 bop 180 273 1240 3 v 180 481 3 208 v 219 332 a Fd(>)23 -b Ff(MBK)p 464 332 21 3 v 25 w(IN)p 570 332 V 25 w(LO=vst)219 -392 y Fd(>)g Ff(MBK)p 464 392 V 25 w(OUT)p 644 392 V -24 w(LO=vst)219 453 y Fd(>)g Ff(exp)r(ort)g(MBK)p 688 -453 V 24 w(OUT)p 867 453 V 25 w(LO)g(MBK)p 1180 453 V -25 w(IN)p 1286 453 V 25 w(LO)p 1418 481 3 208 v 180 483 -1240 3 v 274 528 a Fg(All)c(net-list)e(\014les)h(created)g(and)g(used)g -(b)n(y)g Ff(genlib)f Fg(will)h(no)n(w)g(b)r(e)g(structural)f -Ff(VHDL)p Fg(.)p 180 611 2457 3 v 180 1084 3 474 v 219 -673 a Ff([)24 b Fd(>)f Ff(MBK)p 507 673 21 3 v 24 w(IN)p -612 673 V 26 w(LO=vst)g(])219 750 y([)h Fd(>)f Ff(MBK)p -507 750 V 24 w(OUT)p 686 750 V 25 w(LO=vst)g(])219 827 -y([)h Fd(>)f Ff(MBK)p 507 827 V 24 w(W)n(ORK)p 760 827 -V 26 w(LIB=.)31 b(])219 905 y([)24 b Fd(>)f Ff(MBK)p -507 905 V 24 w(CA)-6 b(T)g(A)p 724 905 V 25 w -(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o(rol)o(10:/$ALLIANCE_TOP/)o(cell)o(s/)o(rin)o(g/pad) -o(sym)n(b)o(])219 982 y([)24 b Fd(>)f Ff(exp)r(ort)f(MBK)p -730 982 V 25 w(CA)-6 b(T)g(A)p 948 982 V 24 w(LIB)24 -b(MBK)p 1285 982 V 24 w(IN)p 1390 982 V 25 w(LO)g(MBK)p -1704 982 V 24 w(OUT)p 1883 982 V 25 w(LO)f(MBK)p 2196 -982 V 25 w(W)n(ORK)p 2450 982 V 25 w(LIB])219 1056 y -Fd(>)g Ff(genlib)f(-v)h(c)n(hip)p 2634 1084 3 474 v 180 -1086 2457 3 v 274 1131 a Fg(The)d(7)h(\014les)g Ff(alu.vst)h(accu.vst)h -(ram.vst)h(m)n(uxe.vst)f(m)n(uxout.vst)g(heart.vst)180 -1206 y(c)n(hip.vst)c Fg(ha)n(v)n(e)i(b)r(een)e(created.)180 -1369 y Fb(2.2)75 b(Structural)24 b(Mo)r(del)i(Sim)n(ulation)180 -1483 y Fg(The)e(v)m(arious)g(net-list)f(\014les)h(w)n(e)g(ha)n(v)n(e)h -(created)f(represen)n(t)f(the)g(structural)g(description)180 -1558 y(that)c(should)h(b)r(e)f(v)m(alidated)g(b)n(y)h(sim)n(ulation,)f -(using)h(the)f(same)h(patterns)e(as)j(in)e(step)h(1.)p -180 1641 2477 3 v 180 2269 3 628 v 219 1703 a Ff([)k -Fd(>)f Ff(MBK)p 507 1703 21 3 v 24 w(IN)p 612 1703 V -26 w(LO=vst)g(])219 1781 y([)h Fd(>)f Ff(VH)p 444 1781 -V 24 w(P)-6 b(A)g(TSFX=pat)22 b(])219 1858 y([)i Fd(>)f -Ff(VH)p 444 1858 V 24 w(MAXERR=10)g(])219 1935 y([)h -Fd(>)f Ff(MBK)p 507 1935 V 24 w(W)n(ORK)p 760 1935 V -26 w(LIB=.)31 b(])219 2012 y([)24 b Fd(>)f Ff(MBK)p 507 -2012 V 24 w(CA)-6 b(T)g(A)p 724 2012 V 25 w(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o -(rol)o(10:/$ALLIANCE_TOP/)o(cell)o(s/)o(rin)o(g/pad)o(sym)n(b)o(])219 -2089 y([)24 b Fd(>)f Ff(exp)r(ort)f(MBK)p 730 2089 V -25 w(CA)-6 b(T)g(A)p 948 2089 V 24 w(LIB)24 b(MBK)p 1285 -2089 V 24 w(IN)p 1390 2089 V 25 w(LO)g(VH)p 1641 2089 -V 24 w(P)-6 b(A)g(TSFX)339 2167 y(VH)p 451 2167 V 24 -w(MAXERR)23 b(MBK)p 991 2167 V 25 w(W)n(ORK)p 1245 2167 -V 25 w(LIB)h(])219 2240 y Fd(>)f Ff(asim)n(ut)f(c)n(hip)g(pattern)h -(result)p 1093 2240 V 23 w(str)p 2655 2269 3 628 v 180 -2271 2477 3 v 271 2388 a Fe(\017)31 b Ff(c)n(hip)19 b -Fg(is)g(the)h(structural)e(input)h(\014le)g(\()p Ff(c)n(hip.vst)p -Fg(\).)271 2514 y Fe(\017)31 b Ff(pattern)19 b Fg(:)27 -b(is)20 b(the)f(\014lename)g(for)h(the)f(input)g(patterns)f(\()p -Ff(pattern.pat)p Fg(\).)271 2639 y Fe(\017)31 b Ff(result)p -511 2639 21 3 v 23 w(str)19 b Fg(:)27 b(is)20 b(\014lename)f(for)h(the) -f(resulting)g(patterns)g(\()p Ff(result)p 1867 2639 V -23 w(str.pat)p Fg(\).)274 2780 y(Note)c(the)f Ff(-b)g -Fg(option)g(do)r(es)g(not)g(app)r(ear)g(an)n(y)h(more,)g(since)f(w)n(e) -g(no)n(w)h(ha)n(v)n(e)g(a)g(structural)180 2856 y(mo)r(del.)274 -2931 y(An)n(y)24 b(new)e(error)h(app)r(earing)f(will)h(b)r(e)f(rep)r -(orted)f(in)i(the)g Ff(result)p 1781 2931 V 23 w(str.pat)f -Fg(\014le.)36 b(Y)-5 b(ou)180 3006 y(can)25 b(try)f(to)h(in)n(tro)r -(duce)e(a)j(sc)n(hematic)e(error)g(b)n(y)h(mo)r(difying)f(the)g -Ff(c)n(hip.c)g Fg(\014le,)h(running)180 3081 y Ff(genlib)18 -b Fg(and)i Ff(asim)n(ut)f Fg(to)h(see)g(the)f(errors.)180 -3272 y Fc(3)89 b(Ph)n(ysical)32 b(Design)180 3408 y Fg(Building)21 -b(the)g(heart,)h(and)g(routing)f(the)g(heart)g(to)h(the)g(pads)f(are)h -(quite)g(di\013eren)n(t)f(jobs.)180 3483 y(So)f(w)n(e)g(use)g -(di\013eren)n(t)f(to)r(ols.)1205 3894 y(5)p eop -%%Page: 6 6 -6 5 bop 180 266 a Fb(3.1)75 b(Routing)25 b(the)g(heart)180 -380 y Ff(Scr)20 b Fg(is)g(a)g(standard)f(cell)h(placing)g(and)f -(routing)h(to)r(ol.)274 455 y(Here)h(again)g Ff(ALLIANCE)f -Fg(accepts)g(sev)n(eral)h(external)f(\014le)g(formats)g(for)g(the)g -(sym-)180 531 y(b)r(olic)f(la)n(y)n(out.)28 b(En)n(vironmen)n(t)18 -b(v)m(ariables)i(allo)n(w)g(to)g(set)g(the)f(formats.)p -180 614 1342 3 v 180 847 3 234 v 219 672 a Fd(>)k Ff(MBK)p -464 672 21 3 v 25 w(IN)p 570 672 V 25 w(PH=ap)219 742 -y Fd(>)g Ff(MBK)p 464 742 V 25 w(OUT)p 644 742 V 24 w(PH=ap)219 -816 y([)h Fd(>)f Ff(exp)r(ort)f(MBK)p 730 816 V 25 w(IN)p -836 816 V 25 w(PH)g(MBK)p 1157 816 V 25 w(OUT)p 1337 -816 V 24 w(PH)p 1519 847 3 234 v 180 849 1342 3 v 180 -897 a Fg(The)e(hierarc)n(hical)f(net-list)g(will)g(b)r(e)h -(\015attenned)e(b)r(efore)h(routing.)p 180 980 2457 3 -v 180 1608 3 628 v 219 1042 a Ff([)24 b Fd(>)f Ff(MBK)p -507 1042 21 3 v 24 w(IN)p 612 1042 V 26 w(PH=ap)f(])219 -1120 y([)i Fd(>)f Ff(MBK)p 507 1120 V 24 w(OUT)p 686 -1120 V 25 w(PH=ap)f(])219 1197 y([)i Fd(>)f Ff(MBK)p -507 1197 V 24 w(IN)p 612 1197 V 26 w(LO=vst)g(])219 1274 -y([)h Fd(>)f Ff(MBK)p 507 1274 V 24 w(W)n(ORK)p 760 1274 -V 26 w(LIB=.)31 b(])219 1351 y([)24 b Fd(>)f Ff(MBK)p -507 1351 V 24 w(CA)-6 b(T)g(A)p 724 1351 V 25 w -(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o(rol)o(10:/$ALLIANCE_TOP/)o(cell)o(s/)o(rin)o(g/pad) -o(sym)n(b)o(])219 1428 y([)24 b Fd(>)f Ff(exp)r(ort)f(MBK)p -730 1428 V 25 w(CA)-6 b(T)g(A)p 948 1428 V 24 w(LIB)24 -b(MBK)p 1285 1428 V 24 w(IN)p 1390 1428 V 25 w(PH)f(MBK)p -1712 1428 V 24 w(OUT)p 1891 1428 V 25 w(PH)339 1506 y(MBK)p -514 1506 V 24 w(IN)p 619 1506 V 26 w(LO)g(MBK)p 933 1506 -V 25 w(W)n(ORK)p 1187 1506 V 25 w(LIB])219 1579 y Fd(>)g -Ff(scr)g(-p)g(-r)g(heart)p 2634 1608 3 628 v 180 1610 -2457 3 v 271 1711 a Fe(\017)31 b Ff(heart)h Fg(is)g(the)h(input)e -(net-list)g(\(heart.vst)g(\))i(and)f(the)g(connector)g(placemen)n(t)332 -1786 y(\(heart.scr\).)24 b(The)c(output)e(la)n(y)n(out)j(will)e(b)r(e)h -(heart.ap.)271 1911 y Fe(\017)31 b Ff(-p)20 b Fg(automatic)f(placemen)n -(t.)271 2036 y Fe(\017)31 b Ff(-r)20 b Fg(routing)f(required.)180 -2161 y(The)h(sym)n(b)r(olic)f(la)n(y)n(out)h(\014le)g -Ff(heart.ap)f Fg(has)h(b)r(een)g(created.)180 2324 y -Fb(3.2)75 b(Heart)26 b(v)n(eri\014cation)271 2438 y Fe(\017)31 -b Fg(DR)n(C)20 b(:)g(Druc)g(c)n(hec)n(ks)g(the)f(sym)n(b)r(olic)g(la)n -(y)n(out)i(rules)e(\(see)h Fa(man)h(druc)p Fg(\))p 332 -2521 V 332 3184 3 664 v 371 2583 a Ff([)i Fd(>)g Ff(MBK)p -658 2583 21 3 v 25 w(IN)p 764 2583 V 25 w(PH=ap)f(])371 -2660 y([)h Fd(>)g Ff(MBK)p 658 2660 V 25 w(W)n(ORK)p -912 2660 V 25 w(LIB=.)32 b(])371 2738 y([)23 b Fd(>)g -Ff(MBK)p 658 2738 V 25 w(CA)-6 b(T)g(A)p 876 2738 V 25 -w(LIB=.:/$ALLIANCE_TOP/cells/sclib)o(/prol)o(10:/$T)o(OP/cel)o(ls)o(/ri)o(ng/)o -(pads)o(ym)n(b])371 2815 y Fd(>)23 b Ff(RDS)p 589 2815 -V 25 w(TECHNO)p 921 2815 V 25 w(NAME=$ALLIANCE_TOP/etc/cmos)p -1716 2815 V 23 w(7.rds)371 2889 y Fd(>)g Ff(RDS)p 589 -2889 V 25 w(IN=cif)371 2950 y Fd(>)g Ff(RDS)p 589 2950 -V 25 w(OUT=cif)371 3014 y([)g Fd(>)g Ff(exp)r(ort)g(MBK)p -882 3014 V 24 w(CA)-6 b(T)g(A)p 1099 3014 V 25 w(LIB)23 -b(MBK)p 1436 3014 V 25 w(IN)p 1542 3014 V 25 w(PH)f(MBK)p -1863 3014 V 24 w(W)n(ORK)p 2116 3014 V 26 w(LIB)491 3091 -y(RDS)p 639 3091 V 25 w(TECHNO)p 971 3091 V 24 w(NAME)h(RDS)p -1382 3091 V 25 w(IN)g(RDS)p 1655 3091 V 26 w(OUT])371 -3165 y Fd(>)g Ff(druc)f(heart)p 2786 3184 3 664 v 332 -3186 2457 3 v 332 3316 a Fg(If)d(necessary)-5 b(,)19 -b Ff(druc)h Fg(generates)f(an)h(error)g(\014le)g(\()p -Ff(core.err)p Fg(\).)271 3441 y Fe(\017)31 b Fg(Net-list)19 -b(extraction.)332 3541 y Ff(Lynx)g Fg(is)h(a)g(hierarc)n(hical)g -(extractor)f(that)g(pro)n(vides)h(a)g(gate)h(net-list.)332 -3616 y(In)e(order)g(to)h(a)n(v)n(oid)h(name)e(collision,)h(w)n(e)g(use) -f(another)g(\014le)h(format)f(for)g(extracted)332 3692 -y(net-list)f(\()p Ff(.al)i Fg(format\).)25 b(This)19 -b(new)h(format)f(is)h(used)f(to)i(supp)r(ort)d(additional)h(data)1205 -3894 y(6)p eop -%%Page: 7 7 -7 6 bop 332 266 a Fg(:)26 b(extracted)19 b(parasitic)g(capacitances.)p -332 349 821 3 v 332 496 3 148 v 371 407 a Fd(>)k Ff(MBK)p -616 407 21 3 v 24 w(OUT)p 795 407 V 25 w(LO=al)371 468 -y Fd(>)g Ff(exp)r(ort)f(MBK)p 839 468 V 25 w(OUT)p 1019 -468 V 24 w(LO)p 1150 496 3 148 v 332 498 821 3 v 332 -543 a Fg(Then)d(w)n(e)h(run)f(the)h Ff(lynx)i(extractor)d -Fg(:)p 332 626 2457 3 v 332 1099 3 474 v 371 688 a Ff([)k -Fd(>)g Ff(MBK)p 658 688 21 3 v 25 w(OUT)p 838 688 V 25 -w(LO=al)f(])371 766 y([)h Fd(>)g Ff(MBK)p 658 766 V 25 -w(IN)p 764 766 V 25 w(PH=ap)f(])371 843 y([)h Fd(>)g -Ff(MBK)p 658 843 V 25 w(W)n(ORK)p 912 843 V 25 w(LIB=.)32 -b(])371 920 y([)23 b Fd(>)g Ff(MBK)p 658 920 V 25 w(CA)-6 -b(T)g(A)p 876 920 V 25 w(LIB=.:/$ALLIANCE_TOP/cells/sclib)o(/prol)o(10:/$T)o -(OP/cel)o(ls)o(/ri)o(ng/)o(pads)o(ym)n(b])371 997 y([)23 -b Fd(>)g Ff(exp)r(ort)g(MBK)p 882 997 V 24 w(CA)-6 b(T)g(A)p -1099 997 V 25 w(LIB)23 b(MBK)p 1436 997 V 25 w(OUT)p -1616 997 V 24 w(LO)h(MBK)p 1929 997 V 24 w(IN)p 2034 -997 V 25 w(PH)f(MBK)p 2356 997 V 24 w(W)n(ORK)p 2609 -997 V 25 w(LIB])371 1071 y Fd(>)g Ff(lynx)f(heart)p 2786 -1099 3 474 v 332 1101 2457 3 v 332 1222 a Fg(The)d(extracted)g -(net-list)g(\014le)g Ff(heart.al)g Fg(is)h(created)g(at)g(this)f(lev)n -(el.)271 1347 y Fe(\017)31 b Fg(Net-compare.)332 1447 -y(The)19 b(next)g(to)r(ol)h(is)g(the)f(net-compare)g -Ff(lvx)g Fg(that)g(p)r(erforms)f(a)i(netlist)f(comparison)332 -1522 y(b)r(et)n(w)n(een)e(the)h(input)f(net-list)g Ff(heart.vst)h -Fg(and)g(the)g(extracted)f(net-list)g Ff(heart.al)p Fg(,)332 -1597 y(after)i(\015attening)g(to)h(the)f(gate)h(lev)n(el.)p -332 1680 V 332 1990 3 310 v 371 1742 a Ff([)j Fd(>)g -Ff(MBK)p 658 1742 21 3 v 25 w(W)n(ORK)p 912 1742 V 25 -w(LIB=.)32 b(])371 1820 y([)23 b Fd(>)g Ff(MBK)p 658 -1820 V 25 w(CA)-6 b(T)g(A)p 876 1820 V 25 w(LIB=.:/$ALLIANCE_TOP/cells/sclib)o -(/prol)o(10:/$T)o(OP/cel)o(ls)o(/ri)o(ng/)o(pads)o(ym)n(b])371 -1897 y([)23 b Fd(>)g Ff(exp)r(ort)g(MBK)p 882 1897 V -24 w(CA)-6 b(T)g(A)p 1099 1897 V 25 w(LIB)23 b(MBK)p -1436 1897 V 25 w(W)n(ORK)p 1690 1897 V 25 w(LIB])371 -1971 y Fd(>)g Ff(lvx)f(vst)h(al)f(heart)h(heart)f(-f)p -2786 1990 3 310 v 332 1992 2457 3 v 180 2133 a Fb(3.3)75 -b(Routing)25 b(the)g(c)n(hip)180 2247 y Fg(The)c(pad)f(placemen)n(t)g -(dep)r(ends)f(on)j(external)e(constrain)n(ts.)28 b(The)20 -b(\014le)h Ff(c)n(hip.rin)e Fg(de\014nes)180 2323 y(the)g(pads)h -(placemen)n(t)f(constrain)n(ts)g(\(see)g Fa(man)j(ring)p -Fg(\).)p 180 2406 V 180 3033 3 628 v 219 2468 a Ff([)i -Fd(>)f Ff(MBK)p 507 2468 21 3 v 24 w(IN)p 612 2468 V -26 w(LO=vst)g(])219 2545 y([)h Fd(>)f Ff(MBK)p 507 2545 -V 24 w(IN)p 612 2545 V 26 w(PH=ap)f(])219 2622 y([)i -Fd(>)f Ff(MBK)p 507 2622 V 24 w(OUT)p 686 2622 V 25 w(PH=ap)f(])219 -2699 y([)i Fd(>)f Ff(MBK)p 507 2699 V 24 w(W)n(ORK)p -760 2699 V 26 w(LIB=.)31 b(])219 2777 y([)24 b Fd(>)f -Ff(MBK)p 507 2777 V 24 w(CA)-6 b(T)g(A)p 724 2777 V 25 -w(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o(rol)o(10:/$ALLIANCE_TOP/)o(cell)o(s/)o(rin)o -(g/pad)o(sym)n(b)o(])219 2854 y([)24 b Fd(>)f Ff(exp)r(ort)f(MBK)p -730 2854 V 25 w(CA)-6 b(T)g(A)p 948 2854 V 24 w(LIB)24 -b(MBK)p 1285 2854 V 24 w(IN)p 1390 2854 V 25 w(LO)339 -2931 y(MBK)p 514 2931 V 24 w(IN)p 619 2931 V 26 w(PH)e(MBK)p -941 2931 V 24 w(OUT)p 1120 2931 V 25 w(PH)g(MBK)p 1441 -2931 V 25 w(W)n(ORK)p 1695 2931 V 25 w(LIB])219 3005 -y Fd(>)h Ff(ring)f(c)n(hip)g(c)n(hip)p 2634 3033 3 628 -v 180 3035 2457 3 v 271 3136 a Fe(\017)31 b Ff(c)n(hip)19 -b Fg(The)i(input)e(\014les)i(c)n(hip.vst)f(and)g(c)n(hip.rin)g(\(the)g -(same)g(name)h Ff(c)n(hip)f Fg(m)n(ust)g(b)r(e)332 3212 -y(used)f(for)h(the)f(t)n(w)n(o)i(\014les\).)271 3337 -y Fe(\017)31 b Ff(c)n(hip)19 b Fg(The)g(output)g(ph)n(ysical)g(\014le)h -(c)n(hip.ap.)274 3462 y(The)h(sym)n(b)r(olic)f(la)n(y)n(out)i(\014le)f -Ff(c)n(hip.ap)f Fg(has)i(b)r(een)e(created.)30 b(A)n(t)21 -b(this)g(p)r(oin)n(t,)f(y)n(ou)i(can)180 3537 y(displa)n(y)e(the)f(c)n -(hip)h(with)f(the)g(la)n(y)n(out)i(editor)e Ff(graal)p -Fg(.)180 3612 y(Y)-5 b(ou)20 b(can)f(see)h(the)e(c)n(hip)h(and)h(the)e -(instan)n(tiated)g(heart,)h(using)g(the)g Ff(graal)f -Fg(commands)g(to)180 3688 y(go)j(through)e(the)g(hierarc)n(h)n(y)h(lev) -n(els.)1205 3894 y(7)p eop -%%Page: 8 8 -8 7 bop 180 273 2457 3 v 180 592 3 319 v 219 335 a Ff([)24 -b Fd(>)f Ff(MBK)p 507 335 21 3 v 24 w(W)n(ORK)p 760 335 -V 26 w(LIB=.)31 b(])219 413 y([)24 b Fd(>)f Ff(MBK)p -507 413 V 24 w(CA)-6 b(T)g(A)p 724 413 V 25 w -(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o(rol)o(10:/$ALLIANCE_TOP/)o(cell)o(s/)o(rin)o(g/pad) -o(sym)n(b)o(])219 490 y([)24 b Fd(>)f Ff(exp)r(ort)f(MBK)p -730 490 V 25 w(CA)-6 b(T)g(A)p 948 490 V 24 w(LIB)24 -b(MBK)p 1285 490 V 24 w(W)n(ORK)p 1538 490 V 25 w(LIB])219 -564 y Fd(>)f Ff(graal)p 2634 592 3 319 v 180 594 2457 -3 v 180 755 a Fc(4)89 b(Ph)n(ysical)32 b(V)-7 b(alidation)180 -890 y Fg(The)14 b Ff(ALLIANCE)g Fg(v)n(eri\014cation)f(to)r(ols)h(allo) -n(w)h(b)r(oth)e(\015at)h(and)h(hierarc)n(hical)e(v)n(eri\014cation.)180 -965 y(W)-5 b(e)20 b(will)g(use)g(a)g(hierarc)n(hical)f(approac)n(h.)180 -1128 y Fb(4.1)75 b(Chip)25 b(v)n(eri\014cation)180 1242 -y Fg(The)20 b(same)f(pro)r(cedure)g(used)g(for)h(the)f(heart)h(applies) -f(for)h(the)f(en)n(tire)h(c)n(hip.)p 180 1325 V 180 2030 -3 705 v 219 1387 a Ff([)k Fd(>)f Ff(MBK)p 507 1387 21 -3 v 24 w(IN)p 612 1387 V 26 w(PH=ap)f(])219 1464 y([)i -Fd(>)f Ff(MBK)p 507 1464 V 24 w(W)n(ORK)p 760 1464 V -26 w(LIB=.)31 b(])219 1541 y([)24 b Fd(>)f Ff(MBK)p 507 -1541 V 24 w(CA)-6 b(T)g(A)p 724 1541 V 25 w(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o -(rol)o(10:/$ALLIANCE_TOP/)o(cell)o(s/)o(rin)o(g/pad)o(sym)n(b)o(])219 -1619 y([)24 b Fd(>)f Ff(RDS)p 480 1619 V 26 w(TECHNO)p -813 1619 V 24 w(NAME=$ALLIANCE_TOP/etc/cmos)p 1607 1619 V 23 w(7.rds])219 -1696 y([)h Fd(>)f Ff(RDS)p 480 1696 V 26 w(IN=cif)7 b(])219 -1773 y([)24 b Fd(>)f Ff(RDS)p 480 1773 V 26 w(OUT=cif)7 -b(])219 1850 y([)24 b Fd(>)f Ff(exp)r(ort)f(MBK)p 730 -1850 V 25 w(CA)-6 b(T)g(A)p 948 1850 V 24 w(LIB)24 b(MBK)p -1285 1850 V 24 w(IN)p 1390 1850 V 25 w(PH)f(MBK)p 1712 -1850 V 24 w(W)n(ORK)p 1965 1850 V 25 w(LIB)339 1928 y(RDS)p -487 1928 V 26 w(TECHNO)p 820 1928 V 24 w(NAME)f(RDS)p -1230 1928 V 26 w(IN)h(RDS)p 1504 1928 V 25 w(OUT])219 -2001 y Fd(>)g Ff(druc)g(c)n(hip)p 2634 2030 3 705 v 180 -2032 2457 3 v 180 2152 a Fg(Ev)n(en)n(tually)-5 b(,)20 -b Ff(druc)f Fg(generates)g(an)i(error)e(\014le)h(\()p -Ff(c)n(hip.err)p Fg(\).)p 180 2235 1864 3 v 180 2631 -3 396 v 219 2297 a Ff([)k Fd(>)f Ff(MBK)p 507 2297 21 -3 v 24 w(OUT)p 686 2297 V 25 w(LO=al)g(])219 2374 y([)h -Fd(>)f Ff(MBK)p 507 2374 V 24 w(IN)p 612 2374 V 26 w(PH=ap)f(])219 -2451 y([)i Fd(>)f Ff(MBK)p 507 2451 V 24 w(W)n(ORK)p -760 2451 V 26 w(LIB=.)31 b(])219 2529 y([)24 b Fd(>)f -Ff(exp)r(ort)f(MBK)p 730 2529 V 25 w(CA)-6 b(T)g(A)p -948 2529 V 24 w(LIB)24 b(MBK)p 1285 2529 V 24 w(OUT)p -1464 2529 V 25 w(LO)f(MBK)p 1777 2529 V 25 w(IN)p 1883 -2529 V 25 w(PH])219 2602 y Fd(>)g Ff(lynx)f(c)n(hip)p -2042 2631 3 396 v 180 2633 1864 3 v 180 2753 a Fg(The)f(extracted)e -(net-list)h(\014le)h Ff(c)n(hip.al)e Fg(is)i(created)g(b)n(y)g(this)f -(step)g(\(This)g(net-list)g(instan-)180 2828 y(tiates)f(the)h(heart\).) -p 180 2911 2457 3 v 180 3230 3 319 v 219 2973 a Ff([)k -Fd(>)f Ff(MBK)p 507 2973 21 3 v 24 w(W)n(ORK)p 760 2973 -V 26 w(LIB=.)31 b(])219 3051 y([)24 b Fd(>)f Ff(MBK)p -507 3051 V 24 w(CA)-6 b(T)g(A)p 724 3051 V 25 w -(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o(rol)o(10:/$ALLIANCE_TOP/)o(cell)o(s/)o(rin)o(g/pad) -o(sym)n(b)o(])219 3128 y([)24 b Fd(>)f Ff(exp)r(ort)f(MBK)p -730 3128 V 25 w(CA)-6 b(T)g(A)p 948 3128 V 24 w(LIB)24 -b(MBK)p 1285 3128 V 24 w(W)n(ORK)p 1538 3128 V 25 w(LIB])219 -3202 y Fd(>)f Ff(lvx)g(vst)f(al)h(c)n(hip)f(c)n(hip)p -2634 3230 3 319 v 180 3232 2457 3 v 180 3352 a Fg(Both)16 -b(net-lists)e Ff(c)n(hip.vst)h Fg(and)g Ff(c)n(hip.al)g -Fg(are)h(\015attened)e(to)i(the)f(gate)h(lev)n(el)g(b)n(y)g -Ff(lvx)f Fg(b)r(efore)180 3427 y(comparison)k(\(see)h -Fa(man)h(c)m(atal)p Fg(\).)1205 3894 y(8)p eop -%%Page: 9 9 -9 8 bop 180 266 a Fb(4.2)75 b(Chip)25 b(sim)n(ulation)180 -380 y Fg(Finally)e(y)n(ou)i(can)f(c)n(hec)n(k)g(globally)h(the)e -(extracted)g(net-list)g(b)n(y)h(applying)g(the)f(original)180 -455 y(patterns)j(to)h(the)g(extracted)f(net-list.)47 -b(Thanks)26 b(to)i(the)e(m)n(ultiformat)f(approac)n(h)j(the)180 -531 y(sim)n(ulator)19 b Ff(asim)n(ut)g Fg(accepts)h Ff(.al)f -Fg(format)g(as)i(structural)d(input)h(description.)p -180 614 748 3 v 180 761 3 148 v 219 672 a Fd(>)k Ff(MBK)p -464 672 21 3 v 25 w(IN)p 570 672 V 25 w(LO=al)219 733 -y Fd(>)g Ff(exp)r(ort)g(MBK)p 688 733 V 24 w(IN)p 793 -733 V 25 w(LO)p 925 761 3 148 v 180 763 748 3 v 180 883 -a Fg(Then)c(y)n(ou)i(ha)n(v)n(e)f(to)h(run)e Ff(asim)n(ut)p -Fg(.)p 180 966 2457 3 v 180 1594 3 628 v 219 1029 a Ff([)24 -b Fd(>)f Ff(MBK)p 507 1029 21 3 v 24 w(IN)p 612 1029 -V 26 w(LO=al])219 1106 y([)h Fd(>)f Ff(VH)p 444 1106 -V 24 w(P)-6 b(A)g(TSFX=pat])219 1183 y([)24 b Fd(>)f -Ff(VH)p 444 1183 V 24 w(MAXERR=10])219 1260 y([)h Fd(>)f -Ff(MBK)p 507 1260 V 24 w(W)n(ORK)p 760 1260 V 26 w(LIB=.)31 -b(])219 1337 y([)24 b Fd(>)f Ff(MBK)p 507 1337 V 24 w(CA)-6 -b(T)g(A)p 724 1337 V 25 w(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o(rol)o(10:/$ALLIANCE_TOP/)o -(cell)o(s/)o(rin)o(g/pad)o(sym)n(b)o(])219 1415 y([)24 -b Fd(>)f Ff(exp)r(ort)f(MBK)p 730 1415 V 25 w(CA)-6 b(T)g(A)p -948 1415 V 24 w(LIB)24 b(MBK)p 1285 1415 V 24 w(IN)p -1390 1415 V 25 w(LO)339 1492 y(VH)p 451 1492 V 24 w(P)-6 -b(A)g(TSFX)22 b(VH)p 879 1492 V 24 w(MAXERR)h(MBK)p 1419 -1492 V 25 w(W)n(ORK)p 1673 1492 V 25 w(LIB])219 1566 -y Fd(>)g Ff(asim)n(ut)f(c)n(hip)g(pattern)h(res)p 1007 -1566 V 24 w(pattern)p 2634 1594 3 628 v 180 1596 2457 -3 v 180 1716 a Fg(T)-5 b(o)22 b(complete)f(the)g(v)m(alidation)g(of)h -(our)g(c)n(hip,)g(the)g(functional)e(abstraction)h(follo)n(w)n(ed)h(b)n -(y)180 1791 y(the)d(pro)r(of)h(m)n(ust)f(b)r(e)g(done.)180 -1954 y Fb(4.3)75 b(F)-6 b(unctionnal)25 b(abstraction)h(and)f(formal)h -(pro)r(of)180 2068 y Fg(The)d(functional)e(abstraction)i(of)g(the)f -(transitor)g(net-list)g(is)h(realized)g(b)n(y)g(the)g(to)r(ol)g -Ff(y)n(a-)180 2143 y(gle)h Fg(\(see)f Fa(man)j(yagle)p -Fg(\).)39 b Ff(y)n(agle)24 b Fg(\015attens)f(the)h(c)n(hip)f(\()p -Ff(c)n(hip.al)p Fg(\))g(to)h(obtain)g(a)g(transistor)180 -2219 y(lev)n(el)h(description,)f(and)g(abstract)g(then)g(a)h(b)r(eha)n -(vioral)f(description)f(\()p Ff(c)n(hip.vb)r(e)p Fg(\).)39 -b(T)-5 b(o)180 2294 y(k)n(eep)21 b(the)f(coherence)g(of)h(register)f -(names)h(b)r(et)n(w)n(een)f(the)g(b)r(eha)n(vioral)h(description)e(giv) -n(en)180 2369 y(b)n(y)k Ff(y)n(agle)e Fg(\()p Ff(c)n(hip.vb)r(e)p -Fg(\))f(and)j(the)f(initial)f(b)r(eha)n(vioral)h(description)f(\()p -Ff(amd.vb)r(e)p Fg(\),)h(a)h(\014le)180 2445 y(describing)c(the)g -(name's)g(transformation)g(is)h(required.)25 b(This)19 -b(\014le)h(is)g Ff(c)n(hip.inf)p Fg(.)p 180 2528 V 180 -2923 3 396 v 219 2590 a Ff([)k Fd(>)f Ff(MBK)p 507 2590 -21 3 v 24 w(IN)p 612 2590 V 26 w(LO=al)f(])219 2667 y([)i -Fd(>)f Ff(MBK)p 507 2667 V 24 w(W)n(ORK)p 760 2667 V -26 w(LIB=.)31 b(])219 2744 y([)24 b Fd(>)f Ff(MBK)p 507 -2744 V 24 w(CA)-6 b(T)g(A)p 724 2744 V 25 w(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o -(rol)o(10:/$ALLIANCE_TOP/)o(cell)o(s/)o(rin)o(g/pad)o(sym)n(b)o(])219 -2821 y([)24 b Fd(>)f Ff(exp)r(ort)f(MBK)p 730 2821 V -25 w(CA)-6 b(T)g(A)p 948 2821 V 24 w(LIB)24 b(MBK)p 1285 -2821 V 24 w(IN)p 1390 2821 V 25 w(LO)g(MBK)p 1704 2821 -V 24 w(W)n(ORK)p 1957 2821 V 26 w(LIB])219 2895 y Fd(>)f -Ff(y)n(agle)g(c)n(hip)f(-i)g(-v)p 2634 2923 3 396 v 180 -2925 2457 3 v 271 3026 a Fe(\017)31 b Ff(c)n(hip)19 b -Fg(is)g(the)h(input)e(la)n(y)n(out)j(\()p Ff(c)n(hip.al)p -Fg(\).)271 3152 y Fe(\017)31 b Ff(-i)19 b Fg(read)h(the)g -Ff(c)n(hip.inf)e Fg(\014le.)271 3277 y Fe(\017)31 b Ff(-v)20 -b Fg(to)g(v)n(ectorize)g(the)f(in)n(terface)g(of)h(b)r(eha)n(vioral)g -(description.)274 3402 y(The)g(VHDL)h(D)n(A)-5 b(T)g(A)21 -b(FLO)n(W)g(description)d(as)i(b)r(een)g(generated)f(:)27 -b Ff(c)n(hip.vb)r(e)274 3552 y Fg(No)n(w)h(y)n(ou)g(ha)n(v)n(e)g(the)e -(abstracted)g(b)r(eha)n(vioral)h(description)e(\()p Ff(c)n(hip.vb)r(e)p -Fg(\))g(and)i(the)180 3628 y(initial)e(b)r(eha)n(vioral)h(description)f -(\()p Ff(amd.vb)r(e)p Fg(\).)43 b(With)26 b Ff(pro)r(of)g -Fg(\(see)g Fa(man)h(pr)m(o)m(of)p Fg(\),)f(y)n(ou)180 -3703 y(can)20 b(c)n(hec)n(k)g(the)g(formal)f(equiv)m(alence)g(b)r(et)n -(w)n(een)g(the)g(t)n(w)n(o)i(descriptions.)1205 3894 -y(9)p eop -%%Page: 10 10 -10 9 bop 180 273 982 3 v 180 515 3 242 v 219 335 a Ff([)24 -b Fd(>)f Ff(MBK)p 507 335 21 3 v 24 w(W)n(ORK)p 760 335 -V 26 w(LIB=.)31 b(])219 413 y([)24 b Fd(>)f Ff(exp)r(ort)f(MBK)p -730 413 V 25 w(W)n(ORK)p 984 413 V 25 w(LIB])219 487 -y Fd(>)h Ff(pro)r(of)g(-d)g(amd)g(c)n(hip)p 1159 515 -3 242 v 180 517 982 3 v 271 618 a Fe(\017)31 b Ff(c)n(hip)19 -b Fg(is)g(the)h(abstracted)f(\014le)g(\()p Ff(c)n(hip.vb)r(e)p -Fg(\).)271 743 y Fe(\017)31 b Ff(amd)19 b Fg(is)h(the)g(initial)f(b)r -(eha)n(vioral)h(description)e(\()p Ff(amd.vb)r(e)p Fg(\).)271 -868 y Fe(\017)31 b Ff(-d)20 b Fg(displa)n(ys)f(errors.)274 -993 y(If)24 b(y)n(ou)g(w)n(an)n(t)g(to)g(see)f(an)h(error)g(y)n(ou)g -(can)g(c)n(hange)g(one)g(line)g(in)f(the)g(\014le)h Ff(amd.vb)r(e)p -Fg(.)180 1068 y(F)-5 b(or)20 b(example,)f(c)n(hange)h(the)g(line)f(301) -i(:)180 1144 y(scout)f Fd(<)p Fg(=)g(NOT)h(accu\(3\))e(AND)j(test)p -1086 1144 19 3 v 20 w(mo)r(de)e(;)180 1219 y(and)g(try)f -Ff(pro)r(of)h Fg(again.)180 1410 y Fc(5)89 b(Timing)31 -b(analysis)180 1545 y Fg(With)18 b(the)g(extracted)f(net)h(list)f(c)n -(hip.al)h(T)-5 b(As)19 b(analyses)g(eac)n(h)f(path)g(of)g(the)g -(circuit)f(taking)180 1621 y(accoun)n(t)k(of)g(the)f(v)m(arious)h -(capacitances.)29 b(These)20 b(results)g(are)h(summarize)e(in)i(a)g -(\014le)g(.ttv)180 1696 y(In)27 b(this)e(\014le)i(w)n(e)g(can)g(see)g -(the)f(critical)g(path)g(and)g(the)h(correspnding)e(time.)46 -b(So)27 b(it)f(is)180 1771 y(p)r(ossible)19 b(to)h(kno)n(w)g(the)g(p)r -(erio)r(d)e(of)i(the)g(c)n(hip)274 1846 y(Y)-5 b(ou)21 -b(will)e(en)n(ter)h(:)p 180 1929 2457 3 v 180 2403 3 -474 v 219 1991 a Ff([)k Fd(>)f Ff(MBK)p 507 1991 21 3 -v 24 w(IN)p 612 1991 V 26 w(PH=ap)f(])219 2069 y([)i -Fd(>)f Ff(MBK)p 507 2069 V 24 w(IN)p 612 2069 V 26 w(LO=al)f(])219 -2146 y([)i Fd(>)f Ff(MBK)p 507 2146 V 24 w(W)n(ORK)p -760 2146 V 26 w(LIB=.)31 b(])219 2223 y([)24 b Fd(>)f -Ff(MBK)p 507 2223 V 24 w(CA)-6 b(T)g(A)p 724 2223 V 25 -w(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o(rol)o(10:/$ALLIANCE_TOP/)o(cell)o(s/)o(rin)o -(g/pad)o(sym)n(b)o(])219 2300 y([)24 b Fd(>)f Ff(exp)r(ort)f(MBK)p -730 2300 V 25 w(IN)p 836 2300 V 25 w(PH)g(MBK)p 1157 -2300 V 25 w(W)n(ORK)p 1411 2300 V 25 w(LIB)h(MBK)p 1748 -2300 V 25 w(CA)-6 b(T)g(A)p 1966 2300 V 24 w(LIB)24 b(])219 -2374 y Fd(>)f Ff(tas)g(c)n(hip)p 2634 2403 3 474 v 180 -2405 2457 3 v 180 2640 a Fc(6)89 b(Chip)31 b(\014nishing)180 -2776 y Fg(Un)n(til)e(no)n(w)g(w)n(e)h(used)e(sym)n(b)r(olic)h(la)n(y)n -(out)g(\(all)g(co)r(ordinates)g(in)f Ff(lam)n(b)r(da)p -Fg(-units\).)52 b(W)-5 b(e)180 2851 y(should)19 b(no)n(w)i(con)n(v)n -(ert)f(them)f(to)i(real)f(dimensions,)e(creating)i(the)g(ph)n(ysical)f -(la)n(y)n(out)i(\(t)n(w)n(o)180 2926 y(output)c(formats)g(are)h(supp)r -(orted)e(:)26 b(CIF)18 b(and)g(GDSI)r(I\).)e(This)i(last)g(step)f(is)h -(done)g(b)n(y)g Ff(s2r)p Fg(.)180 3001 y Ff(s2r)13 b -Fg(p)r(erforms)g(sym)n(b)r(olic)g(to)h(real)g(expansion,)h(gap)f -(\014lling,)h(denotc)n(hing)e(and)h(instan)n(tiates)180 -3077 y(preexisting)19 b(ph)n(ysical)g(cells)h(\(this)f(is)h(necessary)f -(for)h(the)f(pads\).)274 3152 y(Y)-5 b(ou)21 b(m)n(ust)e(de\014ne)g(3)h -(new)g(en)n(vironmen)n(t)f(v)m(ariables)g(:)p 180 3235 -1586 3 v 180 3399 3 164 v 219 3297 a Fd(>)k Ff(RDS)p -437 3297 21 3 v 26 w(TECHNO)p 770 3297 V 24 w -(NAME=/$ALLIANCE_TOP/etc/prol10.rds)219 3370 y Fd(>)g Ff(exp)r(ort)g(RDS)p -661 3370 V 25 w(TECHNO)p 993 3370 V 24 w(NAME)p 1764 -3399 3 164 v 180 3401 1586 3 v 180 3521 a Fg(The)16 b -Ff(prol10.rds)f Fg(is)i(the)f(tec)n(hnology)h(\014le)f(that)g(con)n -(tains)h(the)f(parameters)f(corresp)r(ond-)180 3596 y(ing)20 -b(to)g(the)f(target)h(pro)r(cess.)26 b(\(In)19 b(this)g(case)i(the)e -(target)h(pro)r(cess)f(is)h(1)g(micron.\))1190 3894 y(10)p -eop -%%Page: 11 11 -11 10 bop 180 207 676 3 v 180 355 3 148 v 219 266 a Fd(>)23 -b Ff(RDS)p 437 266 21 3 v 26 w(OUT=)g(cif)219 326 y Fd(>)g -Ff(exp)r(ort)g(RDS)p 661 326 V 25 w(OUT)p 853 355 3 148 -v 180 357 676 3 v 180 477 a Fg(De\014nes)d(the)f(output)g(format.)p -180 560 602 3 v 180 707 3 148 v 219 619 a Fd(>)k Ff(RDS)p -437 619 21 3 v 26 w(IN=cif)219 679 y Fd(>)g Ff(exp)r(ort)g(RDS)p -661 679 V 25 w(IN)p 780 707 3 148 v 180 709 602 3 v 180 -830 a Fg(De\014nes)d(the)f(input)g(format)g(for)h(the)f(preexisting)f -(la)n(y)n(out)j(cells)f(\(pads\).)274 905 y(Y)-5 b(ou)21 -b(will)e(en)n(ter)h(:)p 180 988 2457 3 v 180 1693 3 705 -v 219 1050 a Ff([)k Fd(>)f Ff(MBK)p 507 1050 21 3 v 24 -w(IN)p 612 1050 V 26 w(PH=ap)f(])219 1127 y([)i Fd(>)f -Ff(MBK)p 507 1127 V 24 w(W)n(ORK)p 760 1127 V 26 w(LIB=.)31 -b(])219 1204 y([)24 b Fd(>)f Ff(MBK)p 507 1204 V 24 w(CA)-6 -b(T)g(A)p 724 1204 V 25 w(LIB=.:/$ALLIANCE_TOP/cells/sclib/p)o(rol)o(10:/$ALLIANCE_TOP/)o -(cell)o(s/)o(rin)o(g/pad)o(sym)n(b)o(])219 1282 y([)24 -b Fd(>)f Ff(RDS)p 480 1282 V 26 w(TECHNO)p 813 1282 V -24 w(NAME=/$ALLIANCE_TOP/etc/prol10.rds)c(])219 1359 y([)24 b -Fd(>)f Ff(RDS)p 480 1359 V 26 w(IN=cif)g(])219 1436 y([)h -Fd(>)f Ff(RDS)p 480 1436 V 26 w(OUT=cif)7 b(])219 1513 -y([)24 b Fd(>)f Ff(exp)r(ort)f(RDS)p 703 1513 V 26 w(OUT)g(MBK)p -1077 1513 V 25 w(IN)p 1183 1513 V 25 w(PH)g(MBK)p 1504 -1513 V 25 w(W)n(ORK)p 1758 1513 V 25 w(LIB)339 1590 y(MBK)p -514 1590 V 24 w(CA)-6 b(T)g(A)p 731 1590 V 25 w(LIB)23 -b(RDS)p 1041 1590 V 26 w(TECHNO)p 1374 1590 V 24 w(NAME)f(RDS)p -1784 1590 V 26 w(IN])219 1664 y Fd(>)h Ff(s2r)g(-c)g(c)n(hip)f(amd2901) -p 2634 1693 3 705 v 180 1695 2457 3 v 271 1789 a Fe(\017)31 -b Ff(-c)20 b Fg(deletes)f(connectors)g(at)h(the)g(highest)f(lev)n(el)h -(of)g(hierarc)n(h)n(y)-5 b(.)274 1914 y(Y)g(ou)21 b(did)e(it...)180 -1990 y(The)h(\014le)f(pro)r(duced)g(is)h Ff(amd2901.cif)p -Fg(.)25 b(It)20 b(is)g(ready)g(for)g(the)f(foundry)-5 -b(.)1190 3894 y(11)p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF