Jezik za opis hardvera

С Википедије, слободне енциклопедије

U elektronici, jezik za opis hardvera (JOH) je specijalizovani programski jezik koji se koristi za opisivanje osobina i ponašanja elektronskih kola, i najčešće, digitalnih logičkih kola.

Jezik za opis hardvera omogućava precizan, formalan opis elektronskog kola koji dozvoljava automatsku analizu i simulaciju elektronskog kola.

Takođe dozvoljava logičku sintezu jezika za opis hardvera u netlistu (specifikacija fizickih elektronskih komponenti i kako su međusobno povezane), koja onda može biti postavljna i usmerena da proizvede skup maski koje se koriste da konstruišu integrisana kola.

Jezik za opis hardvera dosta liči na programske jezike kao što je C (програмски језик); to je tekstualni opis koji se sastoji od izraza, iskaza i kontrolnih struktura. Jedna od bitnih razlika između većine programskih jezika i jezika za opis hardvera je da jezika za opis hardvera eksplicitno uključuje pojam vremena.

Jezici za opis hardvera čine sastavni deo sistema automatizacije elektronskog dizajna (EDA), naročito za kompeksna kola, kao što su integrisana kola namenjna posebno za aplikacije, microprocesori, i programabilni logički uređaji.


Motivacija[уреди | уреди извор]

Zbog eksplozivnog uvećavanja složenosti digitalnih elektronskih kola počevši od sedamdesetih godina prošlog veka (vidi Murov zakon), dizajnerima kola je bilo potrebno da se opis digitalne logike izvršava na što većem nivou bez vezivanja za specijalnu elektronsku tehnologiju kao što je CMOS ili BJT.

Jezici za opis hardvera su bili kreirani da implementiraju apstrakciju na nivou registar-prenosa, model toka podataka (dataflow) i tajminga kola.[1]

Dva najbitnija jezika za opis hardvera su: VHDL i Verilog. Postoje različiti tipovi opisa u njima „dataflow, funkcionalni strukturni”.

Primer dataflow modela u jeziku za opis hardvera:

library iEEE;
use iEEE.STD_LOGIC_1164.ALL;
use iEEE.STD_NUMERIC_STD.ALL;

entity not1 is
  port(a:in STD_LOGIC;
       b:out STD_logic);
end not1;

architecture behavioral of not1 is
begin
  b <= not a;
end behavioral;

Struktura jezika za opis hardvera[уреди | уреди извор]

Jezici za opis hardvera su tekstualno zasnovani izrazi strukture elektronskih sistema i njihovog ponašanja tokom vremena.

Kao kod jezika konkurentnog programiranja, sintaksa i semantika jezika za opis hardvera uključuje eksplicitnu notaciju za izražavanje konkurentnosti. Međutim, za razliku od većine softvera programskih jezika, jezici za opis hardvea takođe uključuju pojam vremena, što je zapravo primarni atribut hardvera. Jezici čija je jedina karakteristika da izražavaju povezanost kola između hijerarhije blokova su prikladno klasifikovani kao netlist jezici koji se koriste u električnom računarskom dizajnu (CAD). Jezici za opis hardvera se mogu koristiti da izraze dizajn u strukturnom, funkcionalnom ili registar-prenos-nivou arhhitekture za istu funkcionalnost kola; u dva poslednja slučaja Logička sinteza odlučuje o arhitekturi i o izgledu digitalne logike.

Jezici za opis hardvera se koriste za pisanje izvršnih specifikacija za hardver. Program dizajniran da implementira fundamentalnu semantiku jezika i simulira napredak vremena obezbeđuje dizajnerima hardvera mogućnost da modeliraju deo hardvera pre nego što se on fizički kreira. To je mogućnost izvršavanja koja daje jezicima za opis hardvrara iluziju da su programabilni, kada su oni tačno klasificirani kao specifikacijski jezici ili jezici za modelovanje. Postoje simulatori sposobni za podršku diskretnih (digitalnih) i neprekidnih (analognih), i za svaki od njih je dostupan jezik za opis hardvera.


Poređenje sa data-flow jezicima[уреди | уреди извор]

Svakako je moguće predstaviti semantiku hardvera koristeći tradicionalne programske jezike kao što su C++, koji radi na control flow semantici suprotno od data flow, iako funkcionišu kao takvi, programi moraju biti prošireni obimnim i nezgrapnim klasnim bibliotekama. Obično, međutim, softverski programski jezici ne uključuju bilo kakvu mogućnost eksplicitnog izražavanja vremena, i stoga ne mogu funkcionisati kao jezici za opis hardvera.

Pre uvođenja System Verilog-a 2002. godine, C++ integracija sa logičkim simulatorom je bio jedan od nekoliko načina korišćenja objektno-orijentisanih programskih jezika u verifikaciji hardvera.

System Verilog je prvi veliki jezik za opis hardvera koji nudi koncepte objektno orijentisanog programiranja i garbage collection-a.

Korišćenjem pogodnog podskupa skupa jezika za opis hardvera, program nazvan sintetizator, ili alat za logičku sintezu, možemo izversti zaključak can infer hardware logic operations from the language statements and produce an equivalent netlist of generic hardware primitivesШаблон:Jargon-inline to implement the specified behaviour.[тражи се извор] Synthesizers generally ignore the expression of any timing constructs in the text. Digital logic synthesizers, for example, generally use clock edges as the way to time the circuit, ignoring any timing constructs. The ability to have a synthesizable subset of the language does not itself make a hardware description language.

Istorija[уреди | уреди извор]

Prvi jezici za opis hardvera pojavili su se krajem šezdesetih godina prošlog vek, koji su više ličili na tradicionalne jezike.[2] Prvi koji je duže potrajao opisan je 1971. godine u C-u. Gordon Bell i Allen Newell's su objavili u Computer Structures.[3] Ovaj članak je predstavio koncept nivoa prenosa registara, prvi put upotrebljen u ISP jeziku da opiše funkcionalnost Digital Equipment Corporation (DEC) PDP-8.[4]

Jezik je postao široko upotrebljiv pojavom DEC PDP-16 RT-Level Modules (RTMs) i u knjizi je opisana njegova upotreba.[5] U nastavku su najmanje dve implementacije osnovnih ISP jezika (ISPL i ISPS).[6][7] ISPS je bio dobro snadbeven da opiše odnos između ulaza i izlaza dizajna i komercijalni timovi su ga brzo prisvojili u DEC-u, kao i brojni istraživački timovi i u Americi i širom NATO saveza.

RTM proizvodi nikada nisu bili uspešno komercijalizovani pa je DEC prestao da ih reklamira sredinom osamdesetih godina, dok su nove tehnike posebno VLSI postajale sve popularnije.

Oko 1979 na Univerzitetu Kaiserslautern je napravljen jezik koji je nazvan KARL („KAiserslautern Register Transfer Language”), koji je sadržao osobine računskih jezika podržavajući VLSI čipove i strukturu hardverskog dizajna. Ovaj posao je osnova KARL-ovog sestrinskog jezika ABL po interaktivnoj grafici, čije ime je inicijalizam za „A Block diagram Language”.[8] ABL je implementiran ranih osamdesetih godina prošlog veka od strane Centro Studi e Laboratori Telecomunicazioni (CSELT) u Torinu, Italija, koja proizvodi ABLED grafički VLSI dizajn editor.

Do kasne 1970. godine, dizajn korišćen u programabilnim logičkim uređajima postao je veoma popularan iako su primarno ovi dizajni bili ograničeni na dizajniranje mašina sa konačnim stanjima. Posao u Data General 1980. godine koristio je iste uređaje za dizajniranje Data General Eclipse MV/8000, i potrebe za reklamiranjem su porasle za jezik koji ih dobro da im se pridruži. Do 1983 Data I/O predstavio je ABEL da ispuni potrebe.

Kako se dizajn preusmerio na VLSI, prvi moderni jezik za opis hardvera, Verilog je predstavljen od strane Gateway Design Automation 1985. godine. Cadence Design Systems su kasnije preuzeli prava za Verilog-XL, simulator jezika za opis hardvera koji postaje de facto standard za Verilog simulatore u sledećoj deceniji. Zahtev od strane Ministarstva odbrane SAD-a, 1987, predvodio je razvoju VHDL (VHSIC Hardware Description Language). VHDL je bio zasnovan na Ada programskom jeziku, kao i na iskustvu dobijenom na ranijem razvoju ISPS.[9] Inicijalno, Verilog i VHDL su korišćeni da dokumentuju i simuliraju dizajn kola koji su već bili sačuvani i opisani u drugačijoj formi (kao što su šematski fajlovi). Simulacije jezika za opis hardvera su omogućile inženjerima da rade na višem nivou apstrakcije nego u radu sa simulacijama na šematskom nivou, i tako je uvećan kapacitet od stotine tranzistora do nekoliko hiljada.

Uvod logičke sinteze za jezike za opis hardvera podigle su jezike za opis hardvera iz pozadine u prvi plan digitalnog dizajna. Alatke za sintezu kompajlirale su izvorne fajlove jezika za opis hardvera (napisane u uslovnom formatu nazvanim RTL) u opise mehanički izgradive netliste u terminima kola i tranzistora. Pisanje RTL fajla koji je moguće sintetizovati zahteva vežbu i disciplinu dizajnera, u poređenju sa tradicionalnim, šematskim planom, performanse sintetizovanih RTL netlisti su skoro uvek bile površinski veće i sporije. Kola dizajnirana od strane iskusnih inženjera, koristeći intenzivan rad uz ručno planirane šeme, su skoro uvek prevazilazile svoj logičko sintetizovani ekvivalent, ali prednost po pitanju proizvodnje koju je imala logička sinteza uskoro zamenjuje digitalne šeme na mestima koja su bila problematična za RTL sintetizatore: ekstremno velika brzina, malo energije, ili asinhrona kola.

U toku nekoliko godina, VHDL i Verilog probili su se kao dominantni jezici za opis hardvera u elektronskoj industriji, dok su stariji i manje sposobniji jezici za opis hardvera posteptno nestajali ia upotrebe. Međutim, VHDL i Verilog dele mnogo zajedničkih ograničenja: nijedan od njih nije pogodan za simulacije analognih ili mešovitih kola; nijedan ne poseduje jezičku strukturu da opiše rekurzivno generisane logičke strukture. Specijalizovani jezici za opis hardvera (kao što je Confluence) bili su predstavljeni sa jasnom namenom popravljanja specifičnih ograničenja Veriloga i VHDL, ipak nijedan od njih nije napravljen s namerom da ih zameni.

Tokom godina, mnogo truda uloženo je u poboljšanje jezika za opis hardvera. Poslednja verzija Veriloga, formalno poznata kao IEEE 1800—2005 SystemVerilog, uvela je dosta novih karakteristika (klase, slučajne veličine, i svojstva) da ukaže na sve veću potrebu za boljim test bench-om, hijerarhijom dizajna i ponovnom upotrebljivošču. Buduća izdanje VHDL-a je takođe u izradik i očekuje se da odgovara pobpljšanjima SystemVerilog.

Dizajn korišćenjem HDL-a[уреди | уреди извор]

Kao rezultat efikasnosti realizovane korišćenjem jezika za opis hardvera, većina modernog dizajna digitalnih kola se okreće oko njih. Većina dizajna počinje kao skup zahteva ili kao arhitektonski dijagram visokog nivoa. Strukture kontrola i odlučivanja su često razvijene u aplikacijama za dijagram toka ili su u sastavu uredjaja stanja dijagrama. Proces pisanja koda jezikom za opis hardvera veoma zavisi od prirode kola i od dizajnerovog načina pisanja koda. Jezik za opis hardvera je samo 'hvatač jezika', najčešće počinje opisom aritmetike na visokom nivou kao što je na primer C++ matematički model. Dizajneri najčešće koriste skript jezike kao što je Perl da automacki generišu strukture ponavljajućih kola u jeziku za opis hardvera.

Kod HDL-a se podvrgava pregledu kodova ili reviziji. U pripremi za sintezu, opis HDL-a podleže nizu automatizovanih kontrola. Kontrole prijavljuju odstupanja od standardizovanih smernica za kod, uočavaju potencijalne nejednoznačnosti konstrukcije pre nego što mogu proizvesti pogrešno izvršavanje koda, i proveravaju česte greške. Ovaj proces pomaže u rešavanju grešaka pri sintezi koda.

U industrijskom govoru, dizajn HDL-a se uglavnom završava u fazi sinteze. Jednom kada je alat za sintezu mapirao opis HDL-a u netlist-u, netlist-a se prosleđuje u zadnju fazu. U zavisnosti od fizičke tehnologije (FPGA, ASIC), jezici za opis hardvera mogu, a i ne moraju igrati bitnu ulogu značajnu ulogu u protoku podataka. Uopšteno gledano, s obzirom da dizajn napreduje prema fizički realizovanom obliku, baza podataka o dizajnu postaje sve više opterećena informacijama specifičnim za tehnologiju, koje se ne mogu čuvati u generičkom HDL opisu. Na kraju, integrisano kolo se proizvodi ili programira za upotrebu.


Simulacija i debagovanje HDL koda[уреди | уреди извор]

Od suštinskog značaja za HDL dizajn je mogućnost simulacije HDL programa. Simulacija omogućava HDL opis dizajna (nazvan model) da prodje verifikaciju dizajna, važna prekretnica koja potvrđuje dizajniranu namenu (specifikaciju) protiv implementacije koda u opisu HDL-a. Takođe dozvoljava arhitektonsko istraživanje. Inženjer može da eksperimentiše u odbiru dizajna pisanjem više varijacija osnovnog dizajna, a zatim poređenjem njihovog ponašanja u simulatoru.

Da bi simulirali HDL model, inženjer piše vrhunsko simulacijsko okruženje (koje se zove testbench). Minimalno, testbench sadrži instanciranje modela, pin/signal deklaracije za IO modela, i clock. Testbench kode je vođen događajem: inženjer piše HDL iskaze da implementira reset-signal, da modelira transakcije interfejsa (kao što je čitanje / pisanje host-busa), kao i da nadgleda izlaz DUT-a. HDL simulator -program koji izvršava testbench — održava simultaorski sat, što je glavna referenca za sve događaje u simulaciji testbench-a. Događaji se javljaju samo onda kada je diktirao testbench (kao što je prekidač programiran unutar testbench-a), ili u reakciji radi stimulacije i pokretanja događaja.Savremeni HDL simulatori imaju potpuno opremljene grafičke korisničke interfejse, u kompletu sa alatom za debagovanje. Ovo omogućava korisniku da zaustavi i ponovo pokrene simulaciju u bilo kom trenutku, ubaci tačke prekida simulatora (nezavisno od HDL koda) i nadgleda ili modifikuje bilo koji element u hijerarhiji modela HDL. Savremeni simulatori mogu takođe povezati HDL okruženje sa bibliotekama napravljenim od korisnika, preko definisanog PLI / VHPI interfejsa. Povezivanje je zavisno od sistema (Win32 / Linux / SPARC), jer su HDL simulator i korisničke biblioteke kompajlirane i povezane van HDL okruženja.

Verifikacija dizajna je često vremenski najzahtevniji deo procesa dizajna, zbog razdvajanja između funkcionalne specifikacije uređaja, tumačenja specifikacije dizajnera i nepreciznosti jezika HDL-a. Većina inicijalnog ciklusa testiranja / debagovanja se sprovodi u okruženju HDL simulatora, jer je rana faza dizajna podložna čestim i velikim promenama kola. HDL opis se takođe može razviti i testirati u hardversku — programabilni logički uređaji se često koriste u ove svrhe. Pravljenje prototipa hardvera je relativno skuplje od HDL simulacije, ali nudi realni pogled na dizajn. Pravljenje prototipa je najbolji način za proveru povezivanja sa drugim hardverskim uređajima i hardverskim prototipima. Čak i oni koji rade na sporim FPGA-ima nude mnogo kraće vreme simulacije od čiste HDL simulacije.

Verifikacija dizajna pomoću HDL-a[уреди | уреди извор]

Istorijski, verifikacija dizajna je bila teška, ponavljajuća petlja pisanja i pokretanja simulacionih testova naprotiv dizajna ispod testa. Kako su dizajni čipova postali sve veći i složeniji, zadatak verifikacije dizajna je porastao do tačke kada sada upravlja rasporedom dizajnerskog tima. U potrazi za načinima za poboljšanje produktivnosti dizajna, industrija elektronskog dizajna automatizacije razvila je PSL (Property Specification Language).

U uslovima formalne verifikacije, svojstvo (property) je činjenična izjava o očekivanom ili pretpostavljenom ponašanju drugog objekta. Idealno, za dat HDL opis, koristeći formalne matematičke metode može se dokazati da je svojstvo ili da su svojstva tačna ili netačna. U praktičnom smislu, mnoga svojstva se ne mogu dokazati zato što zauzimaju neograničen prostor za rešenje . Međutim, ako se obezbedi niz operativnih pretpostavki ili ograničenja, provera svojstava može dokazati (ili potvrditi) određena svojstva smanjenjem prostora za rešenje.

Navedbe ne simuliraju aktivnosti kola, već zauzimaju i dokumentuju nameru dizajnera u HDL kodu. U simulacionom okruženju simulator evaluira sve navedene tvrdnje, prijavljujući lokaciju i težinu bilo kojeg kršenja. U okruženju za sintezu, alat za sintezu obično radi sa pravilom zaustavljanja sinteze nakon bilo kakvog kršenja. Verifikacija zasnovana na tvrdnji je još uvijek u razvoju, ali se očekuje da postane sastavni deo HDL dizajnerskog alata.


HDL i programski jezici[уреди | уреди извор]

HDL je grubo sličan programskom jeziku, ali postoje velike razlike. Mnogi programski jezici su inherentno proceduralni (imaju jednu nit), sa sintaksičkim i semantičkim ograničenom da podrže konkurentnost. HDLovi, s druge strane, podsećaju na jezike koji omogućavaju konkurentnost zbog mogućnosti za modeliranjem više paralelnih procesa (kao što su flipflopovi i sabirači) koji se automatski izvršavaju nezavisno jedan od drugog. Svaka promena ulaznog procesa automatski pokreće ažuriranje u stack procesoru simulator-a. I programski jezici i HDL-ovi obrađuje kompajler, ali sa različitim ciljevima. Kod HDL-ova, „kompajliranje” se odnosi na logičku sintezu, proces transformacije HDL koda u fizički ostvarljiv netlist. Netlist-a sa izlaza može biti u jednoj od mnogo formi: „simulaciona” netlist-a sa sa informacijama o kašnjenju, „handoff” netlist za mesto i putanju nakon sinteze ili generički standardni format elektronskog dizajna (EDIF) za sledeće pretvaranje u JEDEC- format datoteke).

Sa druge strane, kompilator softvera pretvara listu izvornog koda u mikroprocesor — specifičan objektni kod za izvršavanje na ciljanom mikroprocesoru. Kako HDL i programski jezici pozajmljuju koncepte i osobine jedna od druge, granica između njih postaje manje izražena. Međutim, čisti HDL nisu pogodni za razvoj aplikativnog softvera opšte namene, baš kao što su programski jezici opšte namene nepoželjni za modeliranje hardvera. Ipak, pošto elektronski sistemi postaju sve složeniji, a sistemi koji se ponovo konfigurišu postaju sve češći, postoji rastuća želja u industriji za jednostavniji jezik koji može obavljati neke zadatke i hardverskog dizajna i softverskog programiranja. SistemC je takav primer — ugrađeni sistem hardvera može se modelirati kao ne-detaljni arhitektonski blokovi (crne kutije sa modeliranim ulaznim signalima i izlaznim upravljačima). Ciljna aplikacija je napisana u C-u ili C ++ i obično sastavljena za sistem za hostovanje (za razliku od ciljanja ugrađenog CPU-a, koji zahteva simulaciju hosta ugrađenog CPU-a ili emuliranog CPU-a). Visok stepen apstrakcije SistemC modela je pogodan za istraživanje rane arhitekture, jer arhitektonske modifikacije mogu se lako proceniti uz malo zabrinutosti za probleme implementacije na nivou signala. Međutim, model niti koji se koristi u SistemC-u i njegovo oslanjanje na deljenu memoriju znači da ne podržava paralelno izvršavanje ili modele nižih nivoa.


Sinteza na visokom nivou[уреди | уреди извор]

U svom nivou abstrakcije, HDL-ovi su upoređeni sa asemblerom. Postoje pokušaji da se podigne nivo apstrakcije dizajna, kako bi se smanjila složenost programa u HDLs. Kompanije kao što su Cadence , Sinopsis i Agiliti Design Solutions promovišu SistemC kao način kombinovanja jezika visokog nivoa sa modelima konkurentnosti, kako bi omogućili brži dizajn ciklusi za FPGA nego što je moguće koristeći tradicionalne HDL-ove. Pristupi zasnovani na standardnim C ili C ++ (sa bibliotekama ili drugim proširenjima koji omogućavaju paralelno programiranje) nalaze se u Catapult C alatima iz Mentor Graphics i Impulse C alatima od Impulse Accelerated Technologies.Annapolis Micro Systems, Inc.'s CoreFire Design Suite i National Instruments LabVIEW FPGA omogućavaju grafičkidataflow pristup dizajnu na visokom nivou i jezike kao što su SystemVerilog, SystemVHDL, i Handel-C koji nastoje da postignu isti cilj, ali imaju za cilj čineći postojeće hardverske inženjere produktivnijim, umesto da FPGA postane dostupnijim postojećim softverskim inženjerima. Takođe je moguće dizajn hardvera modula koristeći MATLAB i Simulink koristeći Mathworks HDL Coder tool[10] ili Xilinx System Generator (XSG) (formerly Accel DSP) from Xilinx.[11]

Референце[уреди | уреди извор]

  1. ^ Ciletti, Michael D. (2010). Advanced Digital Design with Verilog HDL. Prentice Hall. 
  2. ^ Barbacci, M. "A comparison of register transfer languages for describing computers and digital systems, " Carnegie-Mellon Univ., Dept. of Computer Science, March 1973
  3. ^ Bell, C. G.; Newell, A. (1971). Computer Structures: Readings and Examples. McGraw-Hill. ISBN 978-0-07-004357-2. 
  4. ^ Reilly, E.D. (2003). Milestones in computer science and information technology. Greenwood Press. стр. 183. ISBN 978-1-57356-521-9. 
  5. ^ Bell, C.G.; Grason, J.; Newell, A. (1972). Designing Computers and Digital Systems. Digital Press.  (LCCN Number 72-89566)
  6. ^ Barbacci, M. "The Symbolic Manipulation of Computer Descriptions: ISPL Compiler and Simulator, " Carnegie-Mellon Univ., Dept. of Computer Science, 1976
  7. ^ Barbacci, M. "The ISPS Computer Description Language, " Carnegie-Mellon Univ., Dept. of Computer Science, 1977
  8. ^ Girardi, G.; Hartenstein, R. (1983). ABL specification (Извештај). CSELT and University of Kaiserslautern. 
  9. ^ Barbacci, M., Grout S., Lindstrom, G., Maloney, M.P. "Ada as a hardware description language : an initial report, " Carnegie-Mellon Univ., Dept. of Computer Science, 1984
  10. ^ „VHDL code - HDL Coder - MATLAB & Simulink”. Mathworks.com. 30. 4. 2011. Приступљено 11. 8. 2012. 
  11. ^ „System Generator for DSP”. Xilinx.com. Архивирано из оригинала 12. 7. 2012. г. Приступљено 11. 8. 2012.