Riistvarakirjelduskeel

Kasutus

Riistvarakirjelduskeeli kasutatakse programmeeritavate loogikalülituste, näiteks lihtsate programmeeritavate loogikaseadiste (SPLD) ja keerukate programmeeritavate loogikalülituste (CPLD) funktsioonide kirjeldamiseks elektroonikaseadmetes.
Keele simulaatorprogramm on ettenähtud tõlgendama aluseks oleva semantika abil keele lauseid koos aja kulgemise simuleerimisega. See võimaldab riistvara disaineril modelleerida osa riistvarast enne selle füüsiliselt valmistamist. Taoline võimalus programmi simulaatoril täita tekitab riistvarakirjelduskeele puhul illusiooni et tegemist on "programmeerimiskeelega". Riistvarakirjelduskeeled on täpsemalt määratletud kui spetsifikatsioonikeeled või modelleerimiskeeled. On olemas simulaatoreid koos vastavate HDL keeltega millega saab kirjeldada nii diskreetseid (digitaalseid) sündmusi kui ka analoog-elektrilülituste mudeleid.
Kindlasti on võimalik kirjaldada riistvara semantikat ka traditsiooniliste programmeerimiskeeltega, nagu C++, kuigi sellised programmid peavad olema varustatud ulatusliku ning üheselt tõlgendatava teegiga. Tarkvara programmeerimiseks mõeldud keeltel puuduvad võimalused ühemõtteliselt aega määratleda ning seetõttu pole neil piisavat funktsionaalsust riistvara kirjeldamiseks.
Enne SystemVerilogi kasutati programmeerimiskeele C++ integreerimist loogikasimulaatorisse, mis oli üks väheseid objektorienteeritud programmeerimiskeele (OOP) kasutusi riistvara töövõime kontrollimisel. SystemVerilog oli esimene suurem HDL, mis võimaldas objektorienteeritust ja "prügi kogumist".

Ajalugu

Esimesed riistvarakirjelduskeeled olid ISP (Instruction Set Processor), mis töötati välja Carnegie Melloni Ülikoolis, ja KARL, mida arendati Kaiserslauterni Ülikoolis 1977. aastal. ISP oli siiski pigem tarkvaraarenduskeel, mida kasutati disaini sisendite ja väljundite vaheliste seoste kirjeldamiseks. Seega sai ISP'd kasutada disaini simuleerimisel, kuid mitte lülituste sünteesil. KARL lisas omadused, mis olid vajalikud VLSI (Very-large-scale integration) kiipide struktureeritud riistvaradisainil.
See oli ühtlasi aluseks KARL-i interaktiivsele graafilisele sõsarkeelele ABL, mis loodi telekommunikatsiooni uurimiskeskuse CSELT poolt Torinos Itaalias kui ABLED graafikaga VLSI disaini redaktor. 
1980. aastate keskpaiku arendas rahvusvaheline Euroopa firmade konsortsium koos ülikoolidega, VLSI disaini KARL-i ja ABLi peal. Aastal 1973 tutvustati firma Data-I/O poolt keelt ABEL. See oli mõeldud programmeeritavate loogikaseadmete kirjeldamiseks ning seda kasutati peamiselt lõplikel olekumasinatel (finite-state machine).
Esimene kaasaegne HDL oli Verilog, mis toodi turule firma Gateway Design Automation poolt aastal 1985. Firma Cadence Design Systems omandas hiljem õigused Verilog-Xl-ile ehk HDL simulaatorile. Sellest kujunes järgmise kümnendi de facto standard Verilog simulaatorite seas.
1987. aastal viis Ameerika Ühendriikide kaitseministeeriumi tellimus väga kiiretele integraallülitustele (VHSIC ehk Very High Speed Integrated Circuit) VHDL-i (lühend sõnadest VHSIC Hardware Description Language) väljatöötamiseni. VHDL põhines programmeerimskeelel Ada. Algselt olid Verilog ja VHDL kasutusel juba olemasolevate elektroonikalülituste disainikirjelduste dokumenteerimiseks ja simuleerimiseks. HDL- simulatsioon võimaldas inseneridel töötada kõrgemal abstraktsioonitasemel kui seda oli sellele eelnenud skeemide tase. Sellega suurendati disaini suurust sadadelt transistoridelt tuhandeteni.
Loogikasünteesi võidukäik tõstis riistvarakirjelduskeeled digitaaldisaini mõistes taustalt esiplaanile. Loogikasüntees tõstis riistvarakirjelduskeeled digitaalse disaini tehnoloogia kesksesse rolli.
Vaid mõne aastaga kerkisid nii VHDL kui ka Verilog elektroonikatööstuses domineerivale kohale, samas vanemad ja väiksemate võimalustega riistvarakirjelduskeeled järk-järgult igapäevakasutusest kadusid. Sellegipoolest on VHDL-il ja Verilogil sarnaseid piiranguid: kumbki keel ei sobi analoog- ja segasignaaliga skeemi simulatsiooniks. Kumbki ei oma keelelisi võimalusi rekursiivselt genereeritud loogikastruktuuride kirjeldamiseks. Spetsiaalsed HDL-id (nt Confluence) tulid turule eesmärgiga ületada spetsiifilisi Verilogi/VHDL-i piiranguid, kuid ükski nendest polnud kunagi mõeldud VHDL-i või Verilogi asendajaks.
Üle aastate on palju panustatud HDL-ide arendamisse. Viimane versioon Verilogist, ametlikult tuntud kui IEEE 1800–2005. SystemVerilogi keel tutvustas paljusid uusi keele võimalusi (klassid, muutujad ning atribuudid ja deklaratsioonid), et rahuldada nõudlust parema disainihierarhia ja objektide taaskasutuse järele. Oodatakse, et uus arenduses olev VHDL keele versioon on SystemVerilogi keelega võrdväärsete võimalustega.

Simulatsioon ja vigade kõrvaldamine

Riistvarakirjelduskeelega disainides on väga oluline disaini simuleerimise võimalus. Simulatsioon võimaldab kirjeldusel ehk mudelil läbida disaini kontrollimise. See on oluline vaheetapp, mis valideerib HDL kirjelduses disaini funktsiooni ja rakendamisvõimalused. 
See annab ühtlasi võimalusi uuteks leidudeks süsteemi arhitektuuri osas. Insener saab eksperimenteerida mitmete disaini varaitsioonidega, tehes erinevaid modifikatsioone peadisainist ning seejärel võrreldes nende käitumist simulatsioonis. Seetõttu on simulatsioon eluliselt tähtis osa riistvarakirjelduskeelses elektroonikadisainis.
Disaini lõplik kinnitamine on sageli kõige aeganõudvam osa disainiprotsessist, seda järgnevate lahkhelide tõttu: seadmete funktsionaalsed spetsifikatsioonid, disaineri interpretatsioon spetsifikatsioonist ning HDL keele ebatäpsused. Valdav osa esmasest testimise ja vigade kõrvaldamise tsüklist viiakse läbi HDL simulaatori keskkonnas sest disaini varajane etapp on täis sagedasi ning mahukaid muutusi skeemides. HDL kirjeldust saab prototüüpida (valmistada füüsiline prototüüp) ning testida ka riistvaras. Sageli kasutatakse selleks programmeeritavaid loogikaseadmeid. Riistvara prototüüpimine on märkimisväärselt kulukam, kui HDL simulatsioon, kuid seevastu pakub see päris-maailma vaatenurka disainist. Prototüüpimine on parim viis kontrollimaks kasutajaliideseid erinevate riistvaraliste seadmete ja riistvara prototüüpidega. Isegi need füüsilised mudelid, mida jooksutab aeglane FPGA (field-programmable gate array) pakuvad tunduvalt kiiremat simulatsiooni kui puhas HDL-i arvutisimulatsioon.

Disaini töövõimelisuse kontroll riistvarakirjelduskeeles

Ajalooliselt oli elektroonikadisaini töövõime kontroll väga vaevarikas, korduvad tsüklid mudelite kirjutamist ning simulatsioonide jooksutamist katsekeskkonnas. Kuna kiibidisain on kasvanud mahukaks ning keerukamaks, siis on disaini valideerimine laienenud tervele disaini meeskonnale. Otsides lahendusi disainiprotsessi produktiivsuse tõstmiseks, on elektroonilise disaini automatiseerimise (Electronic Design Automation, EDA) süsteemides arendatud välja omaduste spetsifitseerimise keel PSL (Property Specification Language).
Ametliku verifikatsiooni puhul on omadus faktiline väide eeldatud või tellija poolt oodatud käitumisest mingi teise objekti suhtes. Ideealis, antud HDL kirjelduses oleks omaduse või omaduste väärtusi võimalik nimetada kas õigeks või valeks, kasutades matemaatilisi meetodeid. Praktiliselt aga pole paljude omaduste puhul seda võimalik tõestada, kuna need hõlmavad enda alla sidumata lahenduse ruumi. Kuigi andes ette mingi hulga operatiivseid eeldusi või piiranguid, oleks omaduste kontrollijal võimalik tõestada, või ümber lükata rohkem omadusi, üle piiratud lahenduste hulga.
Need tõestused ei modelleeri skeemi aktiivsust, vaid hõlmavad ja dokumenteerivad disaineri kavatsusi HDL keeles. Simulatsiooni keskkonnas, kui simulaator hindab kõiki määratud tõestusi, raporteerides rikke asukoha ning mingi rikkumise tõsiduse. Sünteesikeskkonnas, kus sünteesi vahend tavaliselt opereerib sünteeside peatamisega mingite rikkumiste korral. Tõestusel põhinev valideerimine on veel lapsekingades kuid, sellelt oodatakse integreeritud osa HDL disaini töövahendites.

Riistvarakirjelduskeeled ja programmeerimiskeeled

Riistvarakirjelduskeeled sarnanevad tarkvaraarenduses kasutatavate programmeerimiskeeltega, kuid suurte erinevustega. Mõni programmeerimiskeel on loomupäraselt protseduuriline, piiratud süntaktilise ja semantilise toega, toetamaks samaaegsust. HDL-id seevastu sarnanevad samaaegse programmeerimise (concurrent programming) keeltega oma võimekuselt modelleerida paralleelselt mitmeid protsesse, mis töötavad automaatselt ja üksteisest sõltumatult. Vähimgi muutus protsesside sisendis vallandab automaatselt uuenduse simulaatori protsesside hulgas. Nii programmeerimiskeeled kui ka HDL-id on töödeldavad kompilaatoriga (HDL-i puhul nimetatakse seda tavaliselt süntesaatoriks), kuid erinevate eesmärkidega.
Teisalt, tarkvara kompilaator teisendab lähtekoodi loetelu mikroprotsessori-spetsiifiliseks objektkoodiks, et panna see tööle valitud mikroprotsessoril. Kuna HDL ja programmeerimiskeeled laenavad üksteiselt kontseptsioone ja omadusi, on nende vaheline piir üha hägustumas. Siiski puhas HDL ei sobi üldotstarbeliste tarkvararakenduste arendamisel, samamoodi nagu üldotstarbelised programmeerimiskeeled ei sobi riistvara modelleerimiseks. Kuid kuna elektroonilised süsteemid muutuvad ühe keerukamateks ning ümberseadistatavad süsteemid levivad aina laiemalt, siis nõudlus sellise ühe keele järele, mis sobiks nii riistvaradisainiks kui ka tarkvaraarenduseks, aina suureneb. Näide sellisest keelest on SystemC – sisseehitatud süsteemi riistvara osi saab modelleerida, kui ebadetailseid arhitektuurilisi plokke. Sihtrakendus on kirjutatud C/C++ keeles ning algupäraselt kompileeritud hostarendussüsteemile (vastupidi mikroprotsessorile suunatust). SystemC mudelite kõrge abstraktsioonitase sobitub hästi varajasse arhitektuurilisse uuringusse, kuna arhitektuurilisi modifikatsioone saab lihtsa vaevaga hinnata. Kuid SystemC puhul kasutatav mudel ja selle sõltuvus jagatud mälust tähendavad seda, et see ei saa paralleelsete käskude ja madalama taseme mudelitega hästi hakkama.

MyHDL

MyHDL on tarkvaraarenduses kasutatud objektorienteeritud programmeerimiskeelel Python põhinev riistvarakirjelduskeel. MyHDL on tasuta, vabavaraline pakett, mis võimaldab kasutada kõrgkeelt Python riistvara kirjeldamise ja verifitseerimise keelena. Programm MyHDL suudab teisendada disaini Verilogi või VHDL-i. See annab võimaluse disaini hiljem traditsiooniliste vahenditega jätkata.