Riistvarakirjelduskeel

Allikas: Vikipeedia

Riistvarakirjelduskeel (Hardware Description Language ehk HDL) on keel digitaal-elektroonikalülituste formaalseks kirjeldamiseks või modelleerimiseks. Sellega on võimalik kirjeldada loodava elektroonikalülituse funktsioone ja süsteemi ülesehitust. Riistvarakirjelduskeelse mudeli põhjal on võimalik hiljem süsteemi arvutis simuleerida või füüsilise elektroonikalülitusena teostada.

Omadused[muuda | redigeeri lähteteksti]

Riistvarakirjelduskeelte peaeesmärk on riistvarafunktsioonide kirjeldamine sõltumatult rakendusest. Keeled võimaldavad kirjeldada elektroonikalülituse kasutamist, selle arhitektuuri, ühesehitust ning testida selle kasutamisvõimalusi arvutisimulatsiooni vahendite abil. Võrreldes tarkvara programmeerimisel kasutatavate keeltega sisaldab HDL-i süntaks ning semantika täpseid kirjaviise aja ja samaaegsuse väljendamiseks. Signaalide ajaliste seoste kirjeldamine on riistvara puhul võtmetähtsusega.

Kirjeldused võivad põhineda kas lülituse struktuuril või käitumisel.

  • Struktuurikirjeldus on mingi seadise või selle graafilise skeemi (tekstiline) kirjeldus. Süsteemi struktuuri kirjeldatakse hierarhilise mudeliga. Kirjeldatava seadise hierarhia madalaim tase koosneb primitiivosast, mis on kasutatavale keelele spetsiifiline.
  • Käitumusliku mudeli ehk funktsionaalne lähenemise puhul kirjeldatakse mida loogikaseadis teeb. Objekti vaadeldakse kui plokki millel on teatud omadused (sisendid, väljundid, funktsioonid). Käitumusliku mudeli puhul pole disaini algetapis rakendus oluline. Loogikaseadise tegelik struktuur ja skeem genereeritakse alles hiljem – loogikaseadme sünteesimise etapis.

Keeled, millele on iseloomulikuks väljendada ainult struktuuri st. erinevate hierarhiliste blokkide vahelisi ühendusi liigitatakse kui „netlist“ keeled.[1]

Kasutus[muuda | redigeeri lähteteksti]

Riistvarakirjelduskeeli kasutatakse programmeeritavate loogikalülituste nagu nt. lihtsad programmeeritavad loogikaseadised (SPLD) ja keerukate programmeritavate 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 SystemVerilog-i 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 objekt orienteeritust ja „prügi kogumist“.[2]

Ajalugu[muuda | redigeeri lähteteksti]

Esimesteks riistvarakirjelduskeelteks oli ISP (Instruction Set Processor), mida arendati Carnegie Melloni Ülikoolis ja KARL, mida arendati Kaiserslauterni Ülikoolis 1977. aastal. ISP oli siiski pigem tarkvaraarenduskeel, mida kasutati disaini sisendite ning 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 ning 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 kaasaaegne 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 ning VHDL kasutusel juba olemasolevate elektroonikalülituste disainikirjelduste dokumenteerimiseks ning 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 muutusid nii VHDL kui ka Verilog elektroonikatööstuses domineerivale kohale, kuid samaaegselt vanemad ning väiksemate võimalustega riistvarakirjelduskeeled järk-järgult igapäevakasutusest kadusid. Sellegipoolest on VHDL'i ja Verilogil mitmeid sarnaseid piiranguid: kumbki keel pole sobilik 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 Verilog/VHDL piiranguid, kuid ükski nendest polnud kunagi mõeldud VHDL-i või Verilogi asendajaks.

Üle aastate on palju panustatud HDL-ide arendamisse. Viimane versioon Verilog-ist, ametlikult tuntud, kui IEEE 1800–2005. SystemVerilog keel tutvustas paljusid uusi keele võimalusi (klassid, muutujad ning atribuudid ja deklaratsioonid), et rahuldada nõudlust parema disainihierarhia ning objektide taaskasutuse järele. Oodatakse, et uus arenduses olev VHDL keele versioon on SystemVerilog keelele võrdväärsete võimalustega. [3]

Digitaalelektroonikalülituste disain riistvarakirjelduskeeltega[muuda | redigeeri lähteteksti]

Töö efektiivsuse suurenemine riistvarakirjelduskeelte kasutamisel on viinud selleni, et suurem osa tänapäeva digitaalskeemide disainist põhineb riistvarakirjelduskeeltel. Enamik disainidest algab nõuete komplekti koostamisega või kõrgtasemelise arhitektuurilise skeemina. Kontrolli ning otsustus struktuurid on sageli prototüüpidena näidatud voodiagrammide rakendustes või sisestatud taseme töötlusskeemi või töötlusprogrammi. HDL-i kirjelduse sisestamise protsess sõltub palju skeemi iseloomust ning disaineri eelistusest kodeerimisstiili valikul. Riistvarakirjelduskeel on pelgalt ideede sisestamise keel („capture language“) mis võimaldab kõrgetasemelist algoritmilist kirjeldamist nagu C++ või matemaatiline mudelgi. Elektroonikadisainerid kasutavad sageli lisaks skriptimise keeli (nagu Perl), et automaatselt genereerida korduvaid skeemistruktuure riistvarakirjelduskeeltes.

Lisavõimlustega tekstiredaktorid võimaldavad riistvarakirjelduskeeles kirjutatu automaatset värvimist ja automaatseid taandridasid sõltuvalt süntaksist. Spetsiaalsetel tekstiredaktoritel on makrodel põhinevad olemite, arhitektuuride ja signaalide deklareerimise laiendused.

Pärast sisestamist läbivad teksti kujul kirjeldused kontrollimise või revideerimise. Elektroonikalülituse loogikasünteesi ettevalmistusena antakse HDL keelne tekst mitmesugustele automaatsetele kontrollimisprogrammidele. Kontrollimisprogrammid raporteerivad kõrvalekalletest standardiseeritud koodi piirmääradest ning tuvastavad potentsiaalelt ebakorrektseid koodi konstruktsioone, enne kui need võivad hakata midagi segama ja kontrollib tavalisi loogikakodeerimise vigu, nagu määramata olekuga ehk „rippuvad" väratid (ports) või lühistatud väljundid. Kontrolliprotsess aitab lahendada probleeme ja parandada disainivigu enne lülituse koodi sünteesimist. [4]

Kui lihtsamate programmeeritavate loogikakiipide (SPLD) puhul tehakse lihtsa riistvarakirjelduskeele kompilaatoriga madalatasemelisest mudelist otse vastavale kiibile sobiv kood, siis tänapäevaste kõrgtasemeliste riistvarakirjelduskeelte ja keerukate loogikakiipide (CPLD) puhul on koodi moodustamine jagatud mitmesse etappi:

  • Loogika automaatsüntees (Automatic logic synthesis)
  • Sünteesitud skeemi paigutamine kiipi (fitter, place-and-route)

Simulatsioon ja vigade kõrvaldamine[muuda | redigeeri lähteteksti]

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 ning 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.[5]

Disaini töövõimelisuse kontroll riistvarakirjelduskeeles[muuda | redigeeri lähteteksti]

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 EDA (Electronic Design Automation) 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äärtuseid 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 programmerimiskeeled[muuda | redigeeri lähteteksti]

Riistvarakirjelduskeeled on sarnased tarkvaraarenduses kasutatavate programmeerimiskeeltele, kuid suurte erinevustega. Mõni programmeerimiskeel on loomupäraselt protseduuriline, piiratud süntaktilise ning semantilise toega, toetamaks samaaegsust. HDL-id seevastu sarnanevad samaaegse programmeerimise (concurrent programming) keeltega oma võimekuselt modelleerida paralleelselt mitmeid protsesse, mis töötavad automaatselt ning üksteisest sõltumatult. Vähimgi muutus protsesside sisendis vallandab automaatselt uuenduse simulaatori protsesside hulgas. Nii programmeerimise keeled, kui ka HDL-id on töödeldavad kompilaatoriga (HDL-i puhul nimetatakse seda tavaliselt sünteesijaks), kuid erinevate eesmärkidega.

Teisalt, tarkvara kompileerija konverteerib lähtekoodi loetelu mikroprotsessori-spetsiifiliseks objektkoodiks, et panna see tööle valitud mikroprotsessoril. Kuna HDL ning programmerimise keeled laenavad üksteiselt kontseptsioone ning omadusi, on nende vaheline piir üha hägustumas. Siiski puhas HDL on sobimatu üldlevinud otstarbega tarkvararakenduste arendamisel, samamoodi nagu üldlevinud-otstarbega programmeerimiskeeled on sobimatud riistvara modelleerimiseks. Kuid, kuna elektroonilised süsteemid muutuvad ühe keerukamateks ning ümberseadistatavad süsteemides muutuvad aina laialtlevinumaks, siis on nõudlus ühe keele järgi, mis suudaks sobiks nii riistvara disainis, kui ka tarkvaraarenduses on aina suurenev. Näide sellisest keelest on SystemC — sisseehitatud süsteemi riistvara osi saab modelleerida, kui ebadetailseid arhitektuurilisi blokke. Sihtrakendus on kirjutatud C/C++ keeles ning algupäraselt kompileeritud host-arendussüsteemile (vastupidiselt Mikroprotsessorile suunatust). SystemC mudelite kõrge abstraktsioonitase on hästi sobituv varajasse arhitektuurilisse uuringusse, kuna arhitektuurilisi modifikatsioone saab lihtsa vaevaga hinnata. Kuid SystemC puhul kasutatav mudel ning selle sõltuvus jagatud mälust tähendavad seda, et see ei saa paralleelsete käskluste ning madalama taseme mudelitega hästi hakkama.[6]

MyHDL[muuda | redigeeri lähteteksti]

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

Viited[muuda | redigeeri lähteteksti]

  1. http://www.cs.ucsb.edu/~gaurav_mehta/reports/cs263.pdf
  2. http://en.wikipedia.org/wiki/Hardware_description_language
  3. http://www.vallaste.ee/index.htm?Type=UserId&otsing=2998
  4. http://www.myhdl.org/doku.php/overview

Vaata ka[muuda | redigeeri lähteteksti]