Verilog | |
---|---|
Kieliluokka | Laitteiston kuvauskieli |
Esiintyi | 1983-1984 _ _ |
Tekijä | Phil Moorby , Prabhu Goel |
Tiedostotunniste _ | .v |
Vaikutettu | C , Pascal [1] [2] ja Ada [1] |
Verilog , Verilog HDL ( eng. Verilog Hardware Description Language ) on laitteiston kuvauskieli , jota käytetään kuvaamaan ja mallintamaan elektronisia järjestelmiä. Verilog HDL, jota ei pidä sekoittaa VHDL - kieleen (kilpaileva kieli), on yleisimmin käytetty analogisten, digitaalisten ja sekoitettujen elektronisten järjestelmien suunnittelussa, todentamisessa ja toteutuksessa (esim. VLSI :nä ) eri abstraktiotasoilla.
Verilogin kehittäjät ovat tehneet sen syntaksista hyvin samanlaisen kuin C-kielen syntaksin , mikä helpottaa sen oppimista. Verilogissa on esiprosessori, joka on hyvin samanlainen kuin C-esiprosessori, ja perus "if", "while" -ohjausrakenteet ovat myös samanlaisia kuin samannimiset C-kielen konstruktit. Myös tulosteen muotoilukäytännöt ovat hyvin samankaltaisia (katso printf ).
On huomattava, että Verilog-kielellä (samoin kuin muilla HDL - kielillä) kirjoitettua laitteistokuvausta kutsutaan yleensä ohjelmiksi, mutta toisin kuin yleisesti hyväksytty käsite ohjelmasta käskysarjana, tässä ohjelma määrittelee rakenteen. järjestelmästä. Myöskään termiä "ohjelman suoritus" ei voida soveltaa Verilog-kieleen.
Verilog-kielen ohjeista on osajoukko, jota kutsutaan syntetisoitavaksi . Tähän osajoukkoon kirjoitettuja moduuleja kutsutaan nimellä RTL ( rekisterinsiirtotaso ) . Ne voidaan toteuttaa fyysisesti CAD- synteesin avulla. CAD-data muuntaa tiettyjen algoritmien mukaan abstraktin Verilog-lähdekoodin netlistiksi - loogisesti vastaavaksi kuvaukseksi, joka koostuu elementaarisista loogisista primitiiveistä (esim. AND, OR, NOT, triggers ), jotka ovat käytettävissä valitussa VLSI-tuotantotekniikassa tai BMC :ssä. ja FPGA - ohjelmointi . Verkkolistan jatkokäsittely tuottaa lopulta valomaskeja litografiaa varten tai laiteohjelmiston FPGA :lle .
Phil Moorby ja Prabhu Goel loivat Verilogin talvella 1983-1984 Automated Integrated Design Systemsissä (vuodesta 1985 Gateway Design Automation ) laitteiston mallinnuskieleksi. Vuonna 1990 Cadence Design Systems osti Gateway Design Automationin . Cadence omistaa oikeudet Gatewayn Verilog- ja Verilog-XL-simulaattorilogiikkasimulaattoreihin.
VHDL-kielen kasvavan suosion aikana Cadence teki päätöksen standardoida kieli. Cadence on julkaissut Verilogin julkisuuteen. Verilog toimitettiin IEEE : lle ja hyväksyttiin IEEE 1364-1995 -standardiksi (kutsutaan usein nimellä Verilog-95).
Verilog-95-kieleen tehdyt lisäykset on hyväksytty IEEE 1364-2001:ksi (tai Verilog-2001:ksi).
Verilog-2001 on merkittävä päivitys Verilog-95:stä. Ensinnäkin se lisäsi tuen allekirjoitetuille muuttujille (kahden komplementtimuodossa ). Aikaisemmin koodin tekijöiden piti toteuttaa merkkioperaatioita käyttämällä suurta määrää bittikohtaisia loogisia operaatioita. Verilog-2001:n samat toiminnot kuvataan sisäänrakennetuilla kielioperaattoreilla: + , - , / , * , >>> Tiedoston I/O:ta on parannettu. Koodien luettavuuden parantamiseksi syntaksia on hieman muutettu, kuten aina @* , nimettyjen parametrien uudelleenmäärittely, funktioiden, tehtävien ja moduulien otsikoiden ilmoittaminen C-tyylillä.
Verilog-2001 on kielen yleisimmin käytetty murre, ja useimmat kaupalliset elektroniikka- CAD-järjestelmät tukevat sitä (katso EDA ).
Verilog 2005 (IEEE-standardi 1364-2005) lisäsi pieniä korjauksia, spesifikaatioiden selvennyksiä ja muutamia uusia syntakseja, kuten uwire- avainsanan .
Standardista erillinen osa, Verilog-AMS , mahdollistaa analogisten ja analogisista digitaalisiin laitteiden simuloinnin.
SystemVerilog on Verilog-2005:n supersetti, jossa on monia uusia ominaisuuksia suunnittelun todentamiseen ja simulointiin.
Hei maailma! (ei syntetisoitavissa)
moduulin pää ; aloitusaloitus $ näyttö ( "Hei maailma!" ); $finish ; loppumoduuli _Verilog 2001:n kuvaus: kaksi yksinkertaista sarjaan kytkettyä varvastossua:
moduulin ylätaso ( tulokello , tulon nollaus , tulo d , lähtö reg flop2 ) ; reg flop1 ; aina @ ( posedge reset , posedge clock ) if ( reset ) { flop1 , flop2 } <= 2 'b00 ; muuten alkaa flop1 <= d ; flop2 <= flop1 ; end endmodule //ylätasoVerilog sisältää kaksi perustietotyyppiä: wire ja reg . Molemmat näistä tyypeistä voivat saada 4 mahdollista arvoa simuloitaessa Verilog-ohjelmaa:
Johdintyyppiä käytetään kuvaamaan piirejä, rekistereitä ja muuttujia. Molempia näitä tyyppejä voidaan käyttää myös kuvattaessa monibittistä dataa:
lanka w1 ; johdin [ 31 : 0 ] väylä ; // 32-bittinen väylä reg r1 ; reg [ 7 : 0 ] bittivektori ; // 8-bittinen rekisteriReg-tyyppisten muuttujien alkuarvo on 'X'. Ketjut siirtävät arvoja rekisterien välillä. Jos verkkoa ei ole yhdistetty mihinkään rekisteriin, sen arvo on 'Z'.
Verilog sisältää myös taulukoita, jotka mahdollistavat muistisimuloinnin :
reg [ 31 : 0 ] muisti [ 0 : 1023 ]; // 1024 sanaa muistia, jokainen sana sisältää 32 bittiä.Lisäksi Verilog sisältää seuraavat tietotyypit:
Verilog sisältää kahdenlaisia lohkoja, jotka voivat suorittaa laskelmia: "alkuperäisen" lohkon ja "aina" lohkon.
"Alkuperäinen"-lohko määrittää, mitä toimia tulee tehdä, kun ohjelma käynnistyy. Tämä lohko ei ole syntetisoitavissa ja sitä käytetään yleensä testaustarkoituksiin. Esimerkiksi:
moduulin testipenkki ; regclock ; _ reg [ 31 : 0 ] in1 , in2 ; reg [ 63 : 0 ] ulos ; // Testattu moduulikerroin mult ( clock , in1 , in2 , out ) ; Ensimmäinen aloitus // Testitiedot. in1 = 4 ; in2 = 20 ; // Odota, kunnes tulos on valmis. # 10 ; // Tulostaa laskennan tuloksen. $näyttö ( "tulos=%d" , ulos ); $valmis (); loppumoduuli _Ohjelma voi sisältää useita "alkulohkoja", jotka kaikki suoritetaan rinnakkain.
Tyyppi | Symbolit | Toiminta käynnissä |
---|---|---|
Bitittain | ~ | Inversio |
& | Bitittain JA | |
| | Bittikohtaisesti TAI | |
^ | Bitittainen XOR | |
~^ tai ^~ | Bittikohtainen XNOR (EQU) | |
aivojumppa | ! | EI |
&& | JA | |
|| | TAI | |
Vähentäminen | & | Vähennetty JA |
~& | Vähentynyt NAND | |
| | Alennettu TAI | |
~| | Alennettu NOR | |
^ | Alennettu XOR | |
~^ tai ^~ | Pienempi XNOR | |
Aritmeettinen | + | Lisäys |
- | Vähennyslasku | |
- | 2:n täydennys | |
* | Kertominen | |
/ | Division | |
** | Eksponentti (*Verilog-2001) | |
Asenne | > | Lisää |
< | Vähemmän | |
>= | Suurempi tai yhtä suuri | |
<= | Pienempi tai yhtä suuri | |
== | Boolen tasa-arvo | |
!= | boolen epätasainen | |
=== | 4-tilan Boolen tasa-arvo | |
!== | 4-tilan boolen arvo ei ole sama | |
Siirtää | >> | Looginen siirto oikealle |
<< | Looginen siirto vasemmalle | |
>>> | Aritmeettinen siirto oikealle (*Verilog-2001) | |
<<< | Aritmeettinen vasen vaihto (*Verilog-2001) | |
Kytkin | { , } | Kytkin |
kopioiminen | {n{m}} | Kopioi m arvon n kertaa |
Kunto | ? : | Kunto |
Kuvaukset avoimista mikroprosessoreista OpenSPARC T1, T2, S1 Core ja OpenRISC luodaan Verilog-kielellä . Niiden lähdekoodi on saatavilla LGPL- ja GPL-lisenssien alla .