Rakendus-spetsiifiline integraallülitus

**Rakendusspetsiifiline integraallülitus** (ingl k *Application Specific Integrated Circuit*, lühend **ASIC**) on integraallülitus, mis ei ole üldotstarbeline, vaid omab kindlat eesmärki.

Tegemist on väga keeruliste kiipidega, mis kasutavad üle 100 miljoni loogikalülituse.
ASIC kiibid on tihti süsteemikiibid, mis koosnevad suurtest plokkidest nagu mikroprotsessorid ja mälud. 
Nende funktsionaalsuse defineerimiseks kasutatakse tihti riistvarakirjelduse keeli nagu näiteks VHDL või Verilog.
Kuna eesmärgipärased integraallülitusi on kulukas toota kasutatakse prototüüpimisel enamasti FPGA-sid. Alles seadme masstootmisel muutub efektiivsemaks eesmärgipärase integraallülituse kasutamine.
## Kasutusalad
Rakendusespetsiifiliste integraallülituste kasutusala on väga lai, aga peamiselt kasutatakse neid kõrgtasemeliste kiipide masstootmisel, kus on oluline elektriline jõudlus, kiibi suurus ja transistoride tihedus.

Levinud kasutusvaldkonnad:
* Kommunikatsioon
* Krüptograafia
* Meditsiin
* Autotööstus ja avioonika
* Robootika

Rakendusespetsiifilised integraallülitused on laialdaselt levinud ka tarbeelektroonikas erinevates kaamerates ja mängukonsoolides.
## Disaini voog
Rakendusespetsiiflilise integraallülituse kavandamine ja arendamine koosneb mitmest protseduurist: 

* **Nõuete loomine** – esimene samm, mis loob riistvarakirjelduse keele abil kogu loogika disaini 
* **Loogika süntees** – loogikaelementide ja nende ühenduste kirjeldamine
* **Süsteemi partitsioonid** – süsteemi jagamine plokkideks
* **Paigutuse eelne simulatsioon** – simulatsiooni test vigade otsimiseks
* **Alus planeerimine** – kõigi vooluahela plokkide paigutamine kiibil
* **Paigutamine** – elementide paigutamine ploki sees
* **Ühendamine** – plokkide ja elementide vahele ühenduste loomine
* **Paigutuse järgne simulatsioon** – simulatsiooni test süsteemi töö korrektsuse hindamiseks
* **Disainireeglite kontrollimine** – viimane samm, mis kontrollib kogu vooluahela paigutust ning selle vastavust seatud reeglitele
## Disaini tehnoloogiad

Rakendusespetsiifilisi integraallülitusi jaotatakse vastavalt sellele, kui palju saab programmeerija kiipi kohandada. 
Sellest tuleneb ka esimene suurem jagunemine programmeeritavateks ja mitteprogrammeeritavateks integraallülitusteks. 
Prototüüpimise etapis kasutatakse programmeeritavaid integraallülitusi, et vigade korral võimaldada parandamist samal kiibil. 
Programmeeritavate rakendusespetsiifiliste integraallülituste alla kuuluvad FPGA-d ja programmeeritavad loogikaseaded.

Mitteprogrammeeritavad seadmed jagunevad edasi selle põhjal kui üldise disainiga on tegu. 
Kui disain koosneb üldkasutatavatest osadest, siis loetakse seda pool-kohandatud disainiks, aga kui disain luuakse algusest lõpuni eesmärgist lähtuvalt, siis on tegemist kohandatud disainiga.

Poolkohandatud disainiga seadmete puhul eristatakse kahe peamist disaini tehnoloogiat: standardsed loogikaplokid ja väratite massiiv. 
Mõlemad jagunevad omakorda erinevateks alamtehnoloogiateks nagu kanaliga ja kanalita standardsed loogikaplokid, Standard ja makro plokkidega väratite massiivid

Täielikult kohandatud disainiga seadmed on väga erinevad, kuna neil puuduvad ühiselt kasutatavad alusplokid. 
Sellepärast on ka nende tootmine ajakulukam, aga tänu sellele on võimalik saada maksimaalselt optimeeritud disaini. 
Täielikult kohandatud seadete alla kuuluvad ka mitme projekti toorikud. 

### Programmeeritav vantiilmaatriks ehk FPGA
FPGA (*Field Programmable Gate Array)* on programmeeritav rakendusespetsiifiline integraallülitus, mis võimaldab kasutajal ise loogikaplokkide vahelisi ühendusi programmeerida. Need koosnevad programmeeritavatest loogikakomponentidest ja ühendustest, millega on võimalik luua keerulisi arhitektuure. FPGA-del ei ole valmistamise ajal kindlat funktsiooni, aga kuna nende programmeerimisel muutub lisaks tarkvarale ka riistvara, siis loetakse neid tihti rakendusespetsiifiliste integraallülituste hulka.

### Programmeeritav loogikaseade

Programmeeritav loogikaseade (*Programmable Logic Device* ehk *PLD)* on teine programmeeritav rakendusespetsiifiline integraallülitus, mis on valmistamise ajal määramata funktsiooniga. PLD programmeerimisel muudetakse seadmes olevate väratite vahelisi ühendusi ning sellega programmeeritakse ümber ka loogikaseade eesmärk. Komplekssed programmeeritavad loogikaseadmed sarnanevad FPGA-dega, aga neil on vähem loogikaväratite jadasid ja loogikaelementide vahelisi ühendusi.

### Standardsed loogikaelemendid

ingl k *Standard Cell*

Standardsetel loogikaelementidel põhinevad rakendusespetsiifilised integraallülitused kasutavad varem disainitud loogikaelemente, mis kannavad endas Boole’i loogika või salvestusfunktsioone.
Boole'i loogika edasiandmiseks kasutatakse erinevaid loogikavärateid, mis võimaldavad teha aritmeetilisi operatsioone (liitmine, lahutamine, täiendkood), bitipõhiseid loogilisi operatsioone (NING, VÕI, eksklusiivne-VÕI, pöördkood) ja bitinihke toiminguid (aritmeetiline ja loogiline nihe, pööramine). Salvestusfunktsioonina mälu tekitamiseks kasutatakse trigereid (ingl k *flip-flop*). 

Üldiselt kasutatavad funktsioonid on standardsete loogikaelementidena kataloogi salvestatud, kust neid saab integraallülitusi disainides importida ja sisenditena kasutada. Kiipi disainides paigutatakse samasuguse suurusega standardsed loogikaelemendid korrektselt ridadena üksteise kõrvale ning ühendatakse omavahel keeruliste funktsioonide loomiseks.

### Väratite massiiv

ingl k *Gate Array*

Väratite massiivid on rakendusspetsiifilised integraallülitused, mis kasutavad eelnevalt defineerutud ränikettal paiknevaid n- ja p-tüüpi transistoride massiive. Kasutaja ei saa ränikettal olevate transistoride paigutust muuta, aga ta saab nende peal oma soovitud ühendused defineerida, mille põhjal lõplikud plaadid toodetakse.

Väratite massiivid jagunevad kanalitega ja kanaliteta massiivideks, mis erinevad üksteisest ühenduste paiknemise poolest. Kanalitega väratite massiividel luuakse loogikaelementide vahelised ühendused loogikaelementide ridade vahel asuvates kanalites. See tähendab, et transistori ridade vahele jäetakse rohkem ruumi ühenduste vedamiseks. Kanaliteta väratite massiivide puhul paiknevad ühendused loogikaelementide peal asuvas metallikihis. Tänu sellele ei pea transistoride vahele vaba ruumi jätma, aga kasutamata jäävad transistorid, mille peal paiknevad teiste ühendused.
### Kohandatud disain
 

Kohandatud disainiga (*custom design) *rakendusespetsiifilistel integraallülitustel on kohandatud loogikaelemendid ning kõik kohandatud kihid. Kohandatud disain võtab palju rohkem aega kui poolkohandatud disain, kuna ei ole valmisolevaid tükke millest kiip kokku panna, vaid kõik osad disainitakse käsitsi. Terve integraallülituse käsitsi disainimisel on võimalik lisada analoog komponente, optimeeritud mäluelemente ja mehaanilise struktuuri osasid, mida poleks võimalik ainult ühendustega lisada. Pika disainiaja ja käsitsi disainitud komponentide kasutamine muudab kohandatud disaini pool-kohandatud disainist palju kallimaks.
Üheks sobivaks kohandatud disaini näiteks on mikroprotsessorid. 

### Mitme projekti toorik
ingl k *Multi-Project Wafers*

Mitme projekti toorikud on ränikettad, millel integreeritakse mitu erinevat rakendusespetsiifilist disaini. See aitab vähendada disainide maksuvust jagades maskikomplekti kulud tellijate vahel ära. Soodsama disain muudab kohandatud disaini tavakasutajale kergemini kättesaadavaks tänu mitme prokjekti toorikute kasutamisele.

## Vaata ka
* FPGA
* Integraallülitus
* Mikroprotsessor
* Programmeeritav loogikaseade
* Riistvarakirjelduse keel
* Süsteemikiip

## Viited