Verilog | |
---|---|
Jazyková třída | Jazyk popisu hardwaru |
Objevil se v | 1983 - 1984 |
Autor | Phil Moorby , Prabhu Goel |
Přípona souboru | .proti |
Byl ovlivněn | C , Pascal [1] [2] a Ada [1] |
Verilog , Verilog HDL ( Eng. Verilog Hardware Description Language ) je jazyk pro popis hardwaru používaný k popisu a modelování elektronických systémů. Verilog HDL, nezaměňovat s VHDL (konkurenční jazyk), se nejčastěji používá při návrhu, ověřování a implementaci (např. jako VLSI ) analogových, digitálních a smíšených elektronických systémů na různých úrovních abstrakce.
Vývojáři Verilog udělali jeho syntaxi velmi podobnou syntaxi jazyka C , což usnadňuje učení. Verilog má preprocesor velmi podobný preprocesoru C a základní řídicí konstrukce "if", "while" jsou také podobné stejnojmenným konstrukcím jazyka C. Konvence formátování výstupu jsou také velmi podobné (viz printf ).
Je třeba poznamenat, že popis hardwaru napsaný v jazyce Verilog (stejně jako v jiných jazycích HDL ) se obvykle nazývá programy, ale na rozdíl od obecně přijímaného pojetí programu jako sekvence instrukcí zde program definuje strukturu systému. Také termín "provádění programu" se nevztahuje na jazyk Verilog.
Existuje podmnožina instrukcí jazyka Verilog nazvaná syntetizovatelný . Moduly zapsané v této podmnožině se nazývají RTL ( úroveň přenosu registrů ) . Mohou být fyzicky implementovány pomocí CAD syntézy. CAD data podle určitých algoritmů převádějí abstraktní zdrojový kód Verilog na netlist - logicky ekvivalentní popis skládající se z elementárních logických primitiv (například AND, OR, NOT, triggery ), které jsou dostupné ve vybrané technologii výroby VLSI nebo BMC . a programování FPGA . Další zpracování netlistu nakonec vygeneruje fotomasky pro litografii nebo firmware pro FPGA .
Verilog byl vytvořen Philem Moorbym a Prabhu Goelem v zimě 1983-1984 v Automated Integrated Design Systems (od roku 1985 Gateway Design Automation ) jako hardwarový modelovací jazyk. V roce 1990 koupil Gateway Design Automation společnost Cadence Design Systems . Cadence je držitelem práv na logické simulátory Verilog a Verilog-XL společnosti Gateway.
Během rostoucí popularity jazyka VHDL se Cadence rozhodl jazyk standardizovat. Cadence uvolnila Verilog do veřejné domény. Verilog byl předložen IEEE a přijat jako standard IEEE 1364-1995 (často označovaný jako Verilog-95).
Dodatky k jazyku Verilog-95 byly přijaty jako IEEE 1364-2001 (nebo Verilog-2001).
Verilog-2001 je významný upgrade z Verilog-95. Nejprve přidal podporu pro proměnné se znaménkem (ve formátu s dvojím doplňkem ). Dříve museli autoři kódu implementovat operace se znaky pomocí velkého množství bitových logických operací. Stejnou funkcionalitu na Verilog-2001 popisují vestavěné jazykové operátory: + , - , / , * , >>> Soubor I/O byl vylepšen. Pro zlepšení čitelnosti kódů byla mírně změněna syntaxe, například vždy @* , předefinování pojmenovaných parametrů, deklarování hlaviček funkcí, úloh a modulů ve stylu C.
Verilog-2001 je nejběžněji používaný dialekt jazyka a je podporován většinou komerčních elektronických CAD systémů (viz EDA ).
Verilog 2005 (IEEE Standard 1364-2005) přidal drobné opravy, upřesnění specifikací a několik nových syntaxí, jako je klíčové slovo uwire .
Oddělená část od standardu, Verilog-AMS , umožňuje simulaci analogových a analogově-digitálních zařízení.
SystemVerilog je nadmnožinou Verilog-2005 s mnoha novými funkcemi pro ověřování návrhu a simulaci.
Ahoj světe! (nelze syntetizovat)
hlavní modul ; initial begin $display ( "Ahoj světe!" ); $dokončit ; koncový modulPopis Verilog 2001: dva jednoduché klopné obvody zapojené do série:
nejvyšší úroveň modulu ( vstupní hodiny , reset vstupu , vstup d , výstupní reg flop2 ); reg flop1 ; vždy @ ( reset posedge , hodiny posedge ) if ( reset ) { flop1 , flop2 } <= 2 'b00 ; else begin flop1 <= d ; flop2 <= flop1 ; end endmodule //toplevelVerilog obsahuje dva základní datové typy: wire a reg . Oba tyto typy mohou nabývat 4 možných hodnot při simulaci programu Verilog:
Typ drátu se používá k popisu obvodů, reg pro registry a proměnné. Oba tyto typy lze také použít při popisu vícebitových dat:
drát w1 ; drát [ 31 : 0 ] sběrnice ; // 32bitová sběrnice reg r1 ; reg [ 7 : 0 ] bitvector ; // 8bitový registrProměnné typu reg mají počáteční hodnotu 'X'. Řetězce přenášejí hodnoty mezi registry. Pokud síť není připojena k žádnému registru, bude mít hodnotu 'Z'.
Verilog také obsahuje pole, která umožňují simulaci paměti :
reg [ 31 : 0 ] paměť [ 0 : 1023 ]; // 1024 slov paměti, každé slovo obsahuje 32 bitů.Verilog navíc obsahuje následující typy dat:
Verilog obsahuje dva druhy bloků, které mohou provádět výpočty: „počáteční“ blok a „vždy“ blok.
"Počáteční" blok definuje, jaké akce se mají provést při spuštění programu. Tento blok není syntetizovatelný a obvykle se používá pro testovací účely. Například:
modul testbench ; regclock ; _ reg [ 31 : 0 ] in1 , in2 ; reg [ 63 : 0 ] ven ; // Testovaný násobič modulu mult ( clock , in1 , in2 , out ); initial begin // Testovací data. in1 = 4 ; in2 = 20 ; // Počkejte, až bude výsledek připraven. # 10 ; // Výstup výsledku výpočtu. $display ( "vysledek=%d" , out ); $dokončit (); koncový modulProgram může obsahovat několik "počátečních" bloků, z nichž všechny jsou prováděny paralelně.
Typ | Symboly | Probíhá operace |
---|---|---|
bitový | ~ | Inverze |
& | Bitové AND | |
| | Bitově NEBO | |
^ | Bitový XOR | |
~^ nebo ^~ | Bitové XNOR (EQU) | |
hlavolam | ! | NE |
&& | A | |
|| | NEBO | |
Snížení | & | Snížený AND |
~& | Snížená NAND | |
| | Snížený NEBO | |
~| | Snížené NOR | |
^ | Snížený XOR | |
~^ nebo ^~ | Snížený XNOR | |
Aritmetický | + | Přidání |
- | Odčítání | |
- | doplněk 2 | |
* | Násobení | |
/ | Divize | |
** | Exponent (*Verilog-2001) | |
přístup | > | Více |
< | Méně | |
>= | Větší nebo rovno | |
<= | Menší nebo rovno | |
== | Booleovská rovnost | |
!= | booleovský nerovný | |
=== | 4-stavová booleovská rovnost | |
!== | 4stavová booleovská hodnota se nerovná | |
Posun | >> | Logický posun doprava |
<< | Logický posun doleva | |
>>> | Aritmetický pravý Shift (*Verilog-2001) | |
<<< | Aritmetický levý Shift (*Verilog-2001) | |
Spojka | { , } | Spojka |
kopírování | {n{m}} | Zkopíruje hodnotu m nkrát |
Stav | ? : | Stav |
Popisy otevřených mikroprocesorů OpenSPARC T1, T2, S1 Core a OpenRISC jsou vytvořeny v jazyce Verilog . Jejich zdrojový kód je dostupný pod licencemi LGPL a GPL .