pondělí, července 31, 2006

Testování

V jakési diskusi jsem teď nedávno četl bezelstný dotaz, jak lze testovat integrované obvody na křemíkové desce (waferu). I napadlo mě, že by nemuselo být špatné zúročit ty čtyři roky zkušeností v polovodivém průmyslu a informovat širokou veřejnost o tom, jak vlastně funguje finální fáze výroby polovodivých součástek, zejména jejich testování.

Nuže: Mějme hotový wafer, na kterém jsou po desítkách hodin, které (od chvíle, kdy jej uřízli z monokrystalického ingotu diamantovou pilou) strávil ve výrobním procesu, hotové polovodivé součástky toho či onoho typu. Takový wafer by měl obsahovat a) testovací struktury, b) čipy.

Testovací struktury jsou zajímavé pro všelijaké mechanismy statistického řízení procesu, a obsahují takové ty základní součástky, jako je tranzistor, tranzistor vydávající se za rezistor, tranzistor vydávající se za kapacitor, rezistor, kapacitor, nějaká ta dioda a tak podobně. Smyslem testovacích struktur je, umožnit sledování stability výrobního procesu (existuje nepřeberné množství výrobních procesů, které polovodivé firmy žárlivě střeží a které umožňují výrobu různých druhů struktur s různými parametry, nicméně v zásadě je takový proces receptem, nebo sadou nastavení strojů, které se podílejí na výrobě čipů), což má za důsledek schopnost vyrábět podle pravidel 6-sigma (což znamená, že směrodatná odchylka procesu se musí do tolerančního pole vejít šestkrát, což by mělo znamenat, že zmetek vyrobíte jednou za milión kusů; ve skutečnosti se spíše používá pravidel lean 6-sigma, která jsou ještě tvrdší), a tudíž být na trhu vůbec konkurenceschopným (vysoká zmetkovost znamená nárust ceny čipu, protože náklady na výrobu waferu jsou konstantní).

Testovací struktura nemá smysl bez testování, čili prvním testováním je testování testovacích struktur. Každý prvek takové struktury je připojen k padům (česky asi nejlépe připojovací ploška, tedy čtvereček nebo obdélnícěk z nějakého vodivého kovu). Na tyto pady se lze připojovat pomocí speciálních pružných hrotů (jehel), které jsou různým způsobem (připájeny k PCB, osazeny do speciálního epoxidového kroužku, zasazeny jako stlačitelné piny do nějaké matrice atp.) připojeny k testovacímu zařízení, kterému se říká tester. V této fázi jde nejčastěji o zařízení vybavené co nejvíce čtyřkvadrantovými zdroji, které umožňují změřit co nejrychleji co nejvíce testovacích struktur a zjistit tak, zda se jejich vlastnosti od polední várky (neb výroba integrovaných obvodů je várková výroba, při které se nezpracovávají jednotlivé desky, ale celé sady -- loty -- desek) nezměnily, eventuálně zda nenastal problém někde při výrobě této konkrétní várky. (Podotknu ještě, že desky bývají označené kódy, podle kterých lze většinou přesně dohledat kdy se která sada/deska nacházela v jaké fázi výrobního procesu.)

Nuže, zeptá se zvídavý čtenář, jak se vlastně ty hroty dostanou na správné místo, aby dosedly přesně do plošek velkých sotva několik mikrometrů? Odpověď je snadná: nijak. Při hrotovém testování neputuje měřící zařízení, ale wafer. Ano, ano. Wafer se usadí a podtlakem zajistí na pohyblivý stolek, který se pak pohybuje pod meřícími hroty a pozicuje desku tak, aby bylo dosaženo ideálního propojení. Samozřejmě to vyžaduje sofistikovaný systém pro orientaci waferu na stolku (stolek se otáčí podle potřeby doprava a doleva), který pomocí rozpoznávání obrazu hledá nějaké význačné struktury na desce/čipech, a snaží se dosáhnout správné orientace vůči souřadnicovému systému testovacích hrotů, a také alespoň základní řízení přítlaku desky na hroty. Celý ten krásny stroj, který pohybuje deskou se jmenuje prober (neboli krokovač). Existují různé systémy pohybu stolku od lineárních krokových motorů pohybujících stolkem plovoucím na vzduchovém polštáři nad drážkovanou deskou, až po různé soustavy ozubených řemenů, ke kterým je stolek připojen.

Vyzbrojeni proberem tedy operátoři založí kazetu s čipy do stoje, který si pak sám podává a orientuje křemíkové desky, přečte si jejich výrobní čísla, připojí příslušné struktury k testovacím hrotům, dá signál testeru, který provede odměr, je-li jich více, projede další testovací struktury na waferu a nakonec wafer vloží do výstupní kazety.

Tím se elegantně dostáváme k testování čipů. Ty se hrotově testují úplně stejně jako testovací struktury, jen na mnohem vyšší logické úrovni, nejčastěji s jinými testery a zcela určitě s jinými testovacími přípravky. Požadavky na testování (obecně) jsou: 1) co nejkratší čas (a tudíž nejmenší cena), 2) co nejlepší pokrytí funkcí součástky testy, 3) co nejlepší opakovatelnost a reprodukovatelnost testů. Jako v každém jiném testování, jdou i v testování polovodičů tyto požadavky proti sobě. Čas testování lze zkracovat snižováním přesnosti a pokrytí, pokrytí lze zvětšovat přidámím testů, které stojí čas, stejně jako zvyšování přesnosti pomocí průměrování (AD převodníky v testeru trpí různými druhy šumů, které lze průměrováním potlačit) nebo lepších testovacích metod.

Jistou pomoc nabízí tzv. multisite testování, které, jak správně tušíte, spočívá v tom, že na testovacím přípravku zopakujete testovací hroty (a související elektroniku pomáhající testeru) vícekrát, typicky v mocninách dvou, takže se najednou testuje ne jeden ale dva, čtyři, nebo i šestnáct nebo více čipů. To samozřejmě klade větši nároky na vybavení testerů, přesnost a schopnosti proberu, kvalitu hrotů a asi tisíc dalších věcí. V neposlední řadě také na design testovacích přípravků. Ty musí být navrženy tak, aby se dokázaly vypořádat s přeslechy mezi jednotlivými sity (ó ano, jsou situace, kdy proudy dokáží proudit i přes potenciálové bariéry mezi jednotlivými čipy), se situacemi, kdy jeden nebo více čipů v testované skupině bude vadných, nebo budou na okraji desky (kde jsou neúplné čipy), a tak podobně.

Výsledkem testování čipu je seznam změřených parametrů (u analogových obvodů), nebo odpovědi na vstupy (u digitálních obvodů) a zpráva, zda čip testem prošel nebo neprošel. Z měření vznikají jednak mapy desek, které označují ve kterém místě na desce jsou čipy dobré a kde jsou špatné, jednak datalogy, které skupina pověřených jedinců zevrubně analyzuje a zkoumá kde se vrbí nějaký problém, nebo kde lze díky dobré distribuci předehnat konkurenci a nasadit na parametr tvrdší limit. V některých případech se čipy rozdělují do skupin, podle toho do jakého tolerančního pásma padle některý parametr (lze tak vytestovat čipy se zaručeně lepšími parametry, které stojí víc, protože metodika testování je složitější a tudíž dražší, nebo proto, že na konkrétní parametr je problematická výtěžnost).

Tím se dostáváme k nejdůležitějšímu parametru při výrobě integrovaných obvodů: výtěžnosti. Výtěžnost je číslo, které udává, kolik procent čipů na desce bylo plně funkčních. Jak jsem už řekl, je cena výroby waferu konstatní, proto je důležité mít výtěžnost co nejlepší (a také neustále zvětšovat wafery a zmenšovat čipy). Je nutné si uvědomit, že ve výtěžnosti se projevují dvě věci: zaprvé proces a jeho odchylky/poruchy, zadruhé samotné testování. Můžete mít jak chcete dobrý proces, ale se špatnými testy (tedy testy, které nejsou schopny tisickrát, nebo i milionkrát po sobě měřit to samé -- nebo skoro to samé a to i na různých testerech, které podléhají vlastní kalibraci a ujíždění parametrů) z něj udělá naprostou katastrofu.

Navíc hrotové testování není poslední: po něm následuje ještě finální testování, které se provádí na zapouzdřených čipech. Tedy: křemíkové desky se diamantovou pilou nařežou na jednotlivé čipy. Pak se podle mapy dobrých čipů jednotlivé čipy přiletují k rámečku s vývody, kouzelný stroj, kterému se říká bondovačka propojí jednotlivé vývody s pady na čipu (ano, ano, i čipy mají pady), celé se to zalisuje do umělé hmoty, lisem rozstříhá, laserem označkuje.

Na final testu pak handler připojuje součástky k dalšímu testovacímu přípravku, který ověří, zda výsledný produkt odpovídá tomu, co prezentuje zákazníkům datasheet.

Prostě práce tesťáka je krásná a plná dobrodružství. Můžete třeba neopatrnou manipulací ohnout právě vybalené hroty za 700€ (což se mně podařilo), nebo špatným sekvencováním smahnout nějaký zdroj v testeru, jehož oprava stojí 2500USD a trvá tři neděle (to se povedlo někomu jinému), nebo se tetelit nad tím, když váš testovací balík správně otestuje kdoví kolik čipů za minutu s výtěžností 99.9%.

čtvrtek, července 20, 2006

Jazykotepci

Není nic smutnějšího, než zamlklý blogger. Chci říct: nějak se mi v létě ani nechce nic psát, ale protože přiznat, že se mi nechce psát, by v kontextu weblogu působilo dost podivně, řeknu, že jsem se věnoval studiu jazyků. A opravdu. Narazil jsem teď nedávno na dva docela zajímavé programovací jazyky, kterým jsem věnoval nějaký ten čas, který bych jinak třeba věnoval psaní duchaplností.

Takže první z nich je Boo. Boo je převodem syntaxe dynamicky typovaného Pythonu do prostředí staticky typované platformy .NET, bez pythonovských dogmat, ale s některými rysy, které připomínají tak trochu Ruby a malinko (opravdu malinko a jen někdy) Lisp. Zní to dost zmateně, ale Boo má všechno, co jsem kdy záviděl programátorům ve skripotvacích jazycích, jako jsou třeba closures (pěkně o closures píše třeba guru extremních programátorů Martin Fowler tady), generátory nebo Perlovská syntaxe regulárních výrazů, a přitom se zbavuje některých věcí, které jsou opravdu otravné v C# (verzi dva), jako je třeba nutnost psát sáhodlouhé názvy typů tam, kde si kompilátor může typ domyslet sám, a obecně potřeba chrlit desítky řádků kódu, abyste napsali nějakou v zásadě jednoduchou věc.

Další výhodou Boo je třeba že: a) generuje standardní .NET assemblies (pro verzi frameworku 1.1 i 2.0), což prý IronPython (port Pythonu na platformu .NET) neumožňuje, b) díky tomu, že je staticky typovaný, netrpí výkonovou ztrátou, která je pro dynamicky typované jazyky obvyklá, c) je podporován vývojovým prostředím SharpDevelop, d) i když ho vyvíjí prakticky jediný člověk, je otevřený, a tudíž není pod kontrolou jediné firmy, e) disponuje báječnou věcí, které se říká syntactic macros, která umožňuje doplnit jeho syntaxi o cokoliv, co vás jen napadne (nebo skoro cokoliv), f) komunita kolem něj není příliš velká a v zásadě je velmi rozumná, takže se zatím dokázal ubránit smršti fanatických debat o hloupostech.

Zkoušel jsem psát v Boo dva jednoduché programy (jeden pro příkazovou řádku, druhý s WinForms), a byla to moc příjemná práce. Samozřejmě, že Boo má své nevýhody. Asi největší je absence podrobnější dokumentace, druhou pak skutečnost, že zatím nepodporuje generika, což někdy může být docela nepříjemný problém. Tak jako tak, ze skupiny alternativních .NET jazyků jako je IronPython, F# nebo Nemerle, je mi Boo nejsympatičtější a uvažuji, že v něm zkusím napsat nějakou obsáhlejší aplikaci.

Druhým jazykem na který jsem narazil, který je z akademického pohledu mnohem zajímavější než Boo, je Inform 7. I7 je jazyk (nebo spíše prostředí) určený jen a pouze pro vývoj interaktivních fikcí (interaktivní fikce se má k textovým hrám asi tak, jako nejnovější Toyota k prvnímu autu Henryho Forda), a zajímavé na něm je, že se maskuje jako angličtina.

Čili pokud chcete definovat nějakou herní lokaci (třeba kuchyni, ve které je stůl a na něm hrnek), napíšete něco jako Kitchen is a room. Description of kitchen is "Nice little kitchen". Table is supporter. Table is in the kitchen. Cup is container. It is on the table., čímž jste popsali kuchyni jako místnost, stůl jako objekt, na který se dají pokládat objekty a hrnek jako objekt, který může obsahovat objekty a který se nachází v kuchyni na stole (ve skutečnostidokonde stačí napsat jen něco jako Description of kitchen is "Nice little kitchen". Table is in the kitchen. Cup is on the table. Tea is in the cup., z čehož už si I7 domyslí co je co). Kouzelné je, že celý I7 je rule-based, a umožňuje definici různých operátorů jako je "většina", "několik", "skoro žádný", a tak podobně, které pak lze kombinovat s definovanými pravidly (takže můžete říct, že stůl unese 10kg, a ze když je přetížen rozpadne se -- to všechno v angličtině, samozřejmě). Dále I7 obsahuje implementaci path-findigu, který lze ovšem aplikovat nejen na hledání nejlepší cesty z místnosti do místnosti pro NPC (non-player characters), ale třeba také na stromy dialogů, které umožňují NPC bavit se s vámi poměrně sofistikovaným způsobem.

Zkrátka je to moc pěkný experiment, který se může (ale také nemusí) ukázat úžasným zjednodušením práce autorů interaktivních fikcí. Hlavní výhodou i nevýhodou I7 je používání angličtiny jakožto programovacího jazyka. Výhodou je, že když se podíváte na nějaké ukázkové programy, hned máte pocit, že programovat v I7 je jednoduché, z čehož jste ovšem záhy vyléčeni, protože I7 nerozumí angličtině, ale jen a pouze angličtině I7. Ta se, s tím, jak se snažíte dělat složitější a složitější věci, stále více vzdaluje angličtině, a více se přibližuje běžnému programovacímu jazyku, takže postupně zjišťujete, že se stejně musíte naučit programovací jazyk, jen o dost užvaněnější než jiné jazyky (snad s vyjímkou Visual Basicu).

V každém případě mě myšlenka alespoň takto omezeného použití "přirozeného" jazyka k programování nadchla a skoro si začínám myslet, že tudy se bude ubírat vývoj jednoduchých skritovacích jazyků: Každý si nadefinuje svou vlastní verzi angličtiny, které se vzájemně nebudou příliš lišit, a které otevřou programování i lidem, kterým teď připomíná kabalu. Hlavním proti je skutečnost, že různí lidé mluví různými jazyky a že lokalizace takového programovacího prostředku není triviální (pokusy naučit I7 česky alespoň na úrovni parseru příkazů jsem po pár hodinách vzdal, protože jsem měl nepříjemný pocit, že marním svůj čas).

Tak jako tak, bude zajímavé z povzdálí sledovat, co se z Inform 7 vyvine...