Verilog | |
---|---|
Sprog klasse | Hardwarebeskrivelsessprog |
Dukkede op i | 1983 - 1984 |
Forfatter | Phil Moorby , Prabhu Goel |
Filtypenavn _ | .v |
Blev påvirket | C , Pascal [1] [2] og Ada [1] |
Verilog , Verilog HDL ( eng. Verilog Hardware Description Language ) er et hardwarebeskrivelsessprog, der bruges til at beskrive og modellere elektroniske systemer. Verilog HDL, ikke at forveksle med VHDL (konkurrerende sprog), er mest almindeligt anvendt i design, verifikation og implementering (f.eks. som VLSI ) af analoge, digitale og blandede elektroniske systemer på forskellige abstraktionsniveauer.
Udviklerne af Verilog har gjort sin syntaks meget lig den for C-sproget , hvilket gør det lettere at lære. Verilog har en præprocessor, der ligner C-præprocessoren, og de grundlæggende "hvis", "mens" kontrolkonstruktioner ligner også C-sprogkonstruktionerne af samme navn. Outputformateringskonventionerne er også meget ens (se printf ).
Det skal bemærkes, at hardwarebeskrivelsen skrevet på Verilog-sproget (såvel som i andre HDL -sprog) normalt kaldes programmer, men i modsætning til det almindeligt accepterede koncept for et program som en sekvens af instruktioner, definerer programmet her strukturen af systemet. Udtrykket "programudførelse" gælder heller ikke for Verilog-sproget.
Der er en undergruppe af Verilog sprog instruktioner kaldet synthesizable . Moduler skrevet i denne delmængde kaldes RTL ( register transfer level ) . De kan implementeres fysisk ved hjælp af CAD -syntese. CAD-data konverterer ifølge visse algoritmer den abstrakte Verilog-kildekode til en netliste - en logisk ækvivalent beskrivelse bestående af elementære logiske primitiver (for eksempel AND, OR, NOT, triggers ), der er tilgængelige i den valgte VLSI-produktionsteknologi eller BMC og FPGA- programmering . Yderligere behandling af netlisten genererer til sidst fotomasker til litografi eller firmware til FPGA .
Verilog blev skabt af Phil Moorby og Prabhu Goel i vinteren 1983-1984 på Automated Integrated Design Systems (siden 1985 Gateway Design Automation ) som et hardwaremodelleringssprog. I 1990 blev Gateway Design Automation købt af Cadence Design Systems . Cadence har rettighederne til Gateways Verilog og Verilog-XL simulatorlogiske simulatorer.
Under VHDL-sprogets stigende popularitet tog Cadence beslutningen om at standardisere sproget. Cadence har frigivet Verilog til det offentlige domæne. Verilog blev indsendt til IEEE og godkendt som IEEE 1364-1995-standarden (ofte omtalt som Verilog-95).
Tilføjelser til Verilog-95-sproget er blevet vedtaget som IEEE 1364-2001 (eller Verilog-2001).
Verilog-2001 er en væsentlig opgradering fra Verilog-95. For det første tilføjede det understøttelse af signerede variabler (i tos komplementformat ). Tidligere skulle kodeforfattere implementere tegnoperationer ved hjælp af et stort antal bitvise logiske operationer. Den samme funktionalitet på Verilog-2001 er beskrevet af de indbyggede sprogoperatorer: + , - , / , * , >>> Fil I/O er blevet forbedret. For at forbedre kodernes læsbarhed er syntaksen blevet ændret en smule, såsom altid @* , omdefinering af navngivne parametre, deklaration af overskrifter for funktioner, opgaver og moduler i C-stilen.
Verilog-2001 er den mest brugte dialekt af sproget og understøttes af de fleste kommercielle elektroniske CAD-systemer (se EDA ).
Verilog 2005 (IEEE Standard 1364-2005) tilføjede mindre rettelser, specifikationsforklaringer og et par nye syntakser, såsom uwire nøgleordet .
En separat del fra standarden, Verilog-AMS , tillader simulering af analoge og analog-til-digitale enheder.
SystemVerilog er et supersæt af Verilog-2005, med mange nye funktioner til designverifikation og simulering.
Hej Verden! (kan ikke syntetiseres)
hovedmodul ; _ initial start $display ( "Hej verden!" ); $afslut ; slutmodul _Verilog 2001 beskrivelse: to simple flip-flops forbundet i serie:
modul topniveau ( input clock , input reset , input d , output reg flop2 ); reg flop1 ; altid @ ( posedge reset , posedge ur ) if ( reset ) { flop1 , flop2 } <= 2 'b00 ; ellers begynder flop1 <= d ; flop2 <= flop1 ; end endmodule //toplevelVerilog indeholder to grundlæggende datatyper: wire og reg . Begge disse typer kan antage 4 mulige værdier ved simulering af et Verilog-program:
Ledningstypen bruges til at beskrive kredsløb, reg for registre og variable. Begge disse typer kan også bruges til at beskrive multi-bit data:
ledning w1 ; ledning [ 31 : 0 ] bus ; // 32-bit bus reg r1 ; reg [ 7 : 0 ] bitvektor ; // 8-bit registerVariabler af typen reg har en startværdi på 'X'. Kæder overfører værdier mellem registre. Hvis nettet ikke er forbundet til noget register, vil det have værdien 'Z'.
Verilog indeholder også arrays, der tillader hukommelsessimulering :
reg [ 31 : 0 ] hukommelse [ 0 : 1023 ]; // 1024 ord i hukommelsen, hvert ord indeholder 32 bit.Derudover indeholder Verilog følgende datatyper:
Verilog indeholder to slags blokke, der kan udføre beregninger: en "initial" blok og en "altid" blok.
Den "indledende" blok definerer, hvilke handlinger der skal udføres, når programmet starter. Denne blok kan ikke syntetiseres og bruges normalt til testformål. For eksempel:
modul testbænk ; regclock ; _ reg [ 31 : 0 ] in1 , in2 ; reg [ 63 : 0 ] ud ; // Testet modulmultiplikator mult ( ur , ind1 , ind2 , ud ); indledende start // Testdata. in1 = 4 ; in2 = 20 ; // Vent, indtil resultatet er klar. # 10 ; // Udskriv resultatet af beregningen. $display ( "result=%d" , ud ); $afslut (); slutmodul _Et program kan indeholde flere "indledende" blokke, som alle udføres parallelt.
Type | Symboler | Drift i gang |
---|---|---|
Bitvis | ~ | Inversion |
& | Bitvis OG | |
| | Bitvis ELLER | |
^ | Bitvis XOR | |
~^ eller ^~ | Bitwise XNOR (EQU) | |
hjerne teaser | ! | IKKE |
&& | OG | |
|| | ELLER | |
Reduktion | & | Reduceret OG |
~& | Reduceret NAND | |
| | Reduceret ELLER | |
~| | Reduceret NOR | |
^ | Reduceret XOR | |
~^ eller ^~ | Reduceret XNOR | |
Aritmetik | + | Tilføjelse |
- | Subtraktion | |
- | 2's komplement | |
* | Multiplikation | |
/ | Division | |
** | Eksponent (*Verilog-2001) | |
Holdning | > | Mere |
< | Mindre | |
>= | Større end eller lig | |
<= | Mindre end eller lig | |
== | Boolesk lighed | |
!= | boolesk ulige | |
=== | 4-stats boolesk ligestilling | |
!== | 4-stats boolean ikke ens | |
Flytte | >> | Logisk højreskift |
<< | Logisk skift til venstre | |
>>> | Aritmetisk højreskift (*Verilog-2001) | |
<<< | Aritmetisk venstreskift (*Verilog-2001) | |
Kobling | { , } | Kobling |
kopiering | {n{m}} | Kopier m værdi n gange |
Tilstand | ? : | Tilstand |
Beskrivelser af åbne mikroprocessorer OpenSPARC T1, T2, S1 Core og OpenRISC er oprettet i Verilog-sproget . Deres kildekode er tilgængelig under LGPL- og GPL-licenserne .