Verilog | |
---|---|
Nyelvóra | Hardverleíró nyelv |
Megjelent | 1983-1984 _ _ |
Szerző | Phil Moorby , Prabhu Goel |
Fájlkiterjesztés _ | .v |
Befolyásolva | C , Pascal [1] [2] és Ada [1] |
Verilog , Verilog HDL ( Eng. Verilog Hardware Description Language ) egy hardverleíró nyelv , amelyet elektronikus rendszerek leírására és modellezésére használnak. A Verilog HDL-t, amelyet nem szabad összetéveszteni a VHDL -lel (konkurens nyelv), leggyakrabban az analóg, digitális és vegyes elektronikus rendszerek tervezésében, ellenőrzésében és megvalósításában (pl. VLSI -ként ) használják különféle absztrakciós szinteken.
A Verilog fejlesztői a szintaxisát nagyon hasonlóvá tették a C nyelvéhez , így könnyebben megtanulható. A Verilog előfeldolgozója nagyon hasonlít a C előfeldolgozóhoz, és az alapvető "if", "while" vezérlő konstrukciók is hasonlóak az azonos nevű C nyelvi konstrukciókhoz. A kimeneti formázási konvenciók is nagyon hasonlóak (lásd printf ).
Megjegyzendő, hogy a Verilog nyelven (és más HDL nyelveken is) írt hardverleírást általában programnak nevezik, de ellentétben a program általánosan elfogadott felfogásával, mint utasítássorozattal, itt a program határozza meg a struktúrát. a rendszerről. Ezenkívül a „programvégrehajtás” kifejezés nem alkalmazható a Verilog nyelvre.
A Verilog nyelvi utasításoknak van egy részhalmaza, az úgynevezett szintetizálható . Az ebbe a részhalmazba írt modulokat RTL -nek ( regiszterátviteli szint ) hívják . Fizikailag megvalósíthatók CAD szintézis segítségével. A CAD adatok bizonyos algoritmusok szerint az absztrakt Verilog forráskódot netlistává alakítják – ez egy logikailag egyenértékű leírás, amely elemi logikai primitívekből (például AND, OR, NOT, triggers ) áll, amelyek elérhetők a kiválasztott VLSI gyártási technológiában vagy BMC -ben. és FPGA programozás . A netlista további feldolgozása végül fotómaszkokat generál litográfiához vagy firmware-t az FPGA -hoz .
A Verilog-ot Phil Moorby és Prabhu Goel hozta létre 1983-1984 telén az Automated Integrated Design Systemsnél (1985 óta Gateway Design Automation ) hardvermodellezési nyelvként. 1990-ben a Gateway Design Automationt a Cadence Design Systems megvásárolta . A Cadence birtokolja a Gateway Verilog és Verilog-XL szimulátor logikai szimulátorainak jogait.
A VHDL nyelv növekvő népszerűsége során a Cadence a nyelv szabványosítása mellett döntött. A Cadence nyilvánosságra hozta a Verilogot. A Verilog-ot benyújtották az IEEE -hez, és az IEEE 1364-1995 szabványként fogadták el (gyakran Verilog-95-nek nevezik).
A Verilog-95 nyelv kiegészítései IEEE 1364-2001 (vagy Verilog-2001) néven kerültek elfogadásra.
A Verilog-2001 a Verilog-95 jelentős frissítése. Először is hozzáadta az előjeles változók támogatását (kettős komplement formátumban ). Korábban a kódszerzőknek előjelműveleteket kellett végrehajtaniuk nagyszámú bitenkénti logikai művelettel. Ugyanezt a funkcionalitást a Verilog-2001-en írják le a beépített nyelvi operátorok: + , - , / , * , >>> Fájl I/O továbbfejlesztésre került. A kódok olvashatóságának javítása érdekében a szintaxis kissé módosult, például mindig @* , a megnevezett paraméterek újradefiniálása, a függvények, feladatok és modulok fejléceinek deklarálása C stílusban.
A Verilog-2001 a nyelv leggyakrabban használt dialektusa, és a legtöbb kereskedelmi elektronikai CAD-rendszer támogatja (lásd az EDA -t ).
A Verilog 2005 (IEEE 1364-2005 szabvány) kisebb javításokat, specifikációk pontosításokat és néhány új szintaxist adott hozzá, például az uwire kulcsszót .
A szabványtól különálló alkatrész, a Verilog-AMS lehetővé teszi az analóg és analóg-digitális eszközök szimulációját.
A SystemVerilog a Verilog-2005 szuperkészlete, számos új funkcióval a tervezés ellenőrzéséhez és szimulációjához.
Helló Világ! (nem szintetizálható)
modul fő ; kezdeti kezdés $display ( "Hello world!" ); $befejezés ; végmodul _Verilog 2001 leírása: két egyszerű flip-flop sorba kapcsolva:
modul legfelső szintje ( bemeneti óra , bemenet visszaállítása , d bemenet , kimeneti reg flop2 ); reg flop1 ; mindig @ ( posedge reset , posedge clock ) if ( reset ) { flop1 , flop2 } <= 2 'b00 ; különben kezdődik flop1 <= d ; flop2 <= flop1 ; end endmodule //toplevelA Verilog két alapvető adattípust tartalmaz: vezeték és reg . Mindkét típus 4 lehetséges értéket vehet fel egy Verilog program szimulálásakor:
A vezeték típusa áramkörök leírására szolgál, regiszterek és változók reg . Mindkét típus használható többbites adatok leírására is:
vezeték w1 ; vezeték [ 31 : 0 ] busz ; // 32 bites busz reg r1 ; reg [ 7 : 0 ] bitvektor ; // 8 bites regiszterA reg típusú változók kezdeti értéke 'X'. A láncok értéket adnak át a regiszterek között. Ha a hálózat nem kapcsolódik egyetlen regiszterhez sem, akkor 'Z' értéke lesz.
A Verilog tömböket is tartalmaz, amelyek lehetővé teszik a memóriaszimulációt :
reg [ 31 : 0 ] memória [ 0 : 1023 ]; // 1024 szó memória, minden szó 32 bitet tartalmaz.Ezenkívül a Verilog a következő adattípusokat tartalmazza:
A Verilog kétféle blokkot tartalmaz, amelyek számításokat végezhetnek: egy "kezdeti" és egy "mindig" blokkot.
A "kezdeti" blokk határozza meg, hogy a program indításakor milyen műveleteket kell végrehajtani. Ez a blokk nem szintetizálható, és általában tesztelési célokra használják. Például:
modul tesztpad ; regóra ; _ reg [ 31 : 0 ] in1 , in2 ; reg [ 63 : 0 ] out ; // Tesztelt modul szorzó mult ( clock , in1 , in2 , out ); kezdeti kezdet // Tesztadatok. in1 = 4 ; in2 = 20 ; // Várja meg, amíg az eredmény elkészül. # 10 ; // Kiírja a számítás eredményét. $display ( "eredmény=%d" , ki ); $befejezés (); végmodul _Egy program több „kezdeti” blokkot is tartalmazhat, amelyek mindegyike párhuzamosan fut.
Típusú | Szimbólumok | Művelet folyamatban |
---|---|---|
Bitenként | ~ | Inverzió |
& | Bitenként ÉS | |
| | Bitenkénti VAGY | |
^ | Bitenkénti XOR | |
~^ vagy ^~ | Bitenkénti XNOR (EQU) | |
összerakós játékaik | ! | NEM |
&& | ÉS | |
|| | VAGY | |
Csökkentés | & | Csökkentett ÉS |
~& | Csökkentett NAND | |
| | Csökkentett VAGY | |
~| | Csökkentett NOR | |
^ | Csökkentett XOR | |
~^ vagy ^~ | Csökkentett XNOR | |
Számtan | + | Kiegészítés |
- | Kivonás | |
- | 2 komplementere | |
* | Szorzás | |
/ | Osztály | |
** | Kitevő (*Verilog-2001) | |
Hozzáállás | > | Több |
< | Kevésbé | |
>= | Nagyobb vagy egyenlő | |
<= | Kisebb vagy egyenlő | |
== | Logikai egyenlőség | |
!= | logikai egyenlőtlen | |
=== | 4-állapotú logikai egyenlőség | |
!== | A 4 állapotú logikai érték nem egyenlő | |
Váltás | >> | Logikai jobbra váltás |
<< | Logikai eltolás balra | |
>>> | Aritmetikai jobb eltolás (*Verilog-2001) | |
<<< | Aritmetikai bal eltolás (*Verilog-2001) | |
Kuplung | { , } | Kuplung |
másolás | {n{m}} | m értéket n-szer másol |
Állapot | ? : | Állapot |
Az OpenSPARC T1, T2, S1 Core és OpenRISC nyílt mikroprocesszorok leírása a Verilog nyelven készült . Forráskódjuk LGPL és GPL licenc alatt érhető el .