Verilog er eit maskinvarebeskrivingsspråk (HDL) som blir brukt til å designe, simulere og verifisere digitale elektroniske system, spesielt integrerte kretser (IC). Utvikla på 1980-talet, gjer Verilog det mogleg for ingeniørar å beskrive oppførselen og strukturen til elektroniske system på ulike nivå av abstraksjon, frå høgnivå-algoritmar ned til portnivå. Den primære rolla er å legge til rette for simulering og syntese av digitale logiske kretser, noko som gjer det mogleg å designe og verifisere komplekse maskinvarekomponentar som CPU-ar, FPGA-ar (Field-Programmable Gate Arrays) og ASIC-ar (Application-Specific Integrated Circuits).
Verilog oppstod i 1984 som eit proprietært språk utvikla av Gateway Design Automation. Den første hensikta var å tilby eit modelleringsverktøy for digitale system. I 1990 blei det kjøpt opp av Cadence Design Systems, noko som la til rette for breiare bruk av språket i elektronikkindustrien.
I 1995 blei Verilog standardisert som IEEE 1364, noko som markerte det som ein offisiell HDL-standard. Denne standardiseringa bidrog betydelig til Verilog sin popularitet, og gjorde det mogleg å konkurrere med andre HDL-ar, spesielt VHDL, som hadde fått framgang på 1980-talet gjennom bruken i militære og romfartsapplikasjonar.
I åra som følgde har Verilog utvikla seg til å inkludere konstruksjonar for moderne designmetodologiar som SystemVerilog, ein utviding som inkorporerer funksjonar frå både Verilog og objektorienterte programmeringsparadigmer. No representerer SystemVerilog både eit verifikasjons- og designverktøy, noko som ytterlegare aukar Verilog sine moglegheiter.
Per i dag fortsetter Verilog og dets utvidingar å vere eit grunnleggjande språk i elektronisk designautomatisering (EDA)-industrien, med eit robust økosystem av verktøy levert av ulike store firma som Synopsys, Mentor Graphics og Cadence.
Den grunnleggjande byggesteinen i Verilog er modulen. Modulane inneheld inngangar, utgangar og intern logikk.
module my_adder(input a, input b, output sum);
assign sum = a + b;
endmodule
Verilog støttar prosedyreblokkar som always
og initial
, som gjer det mogleg med sekvensiell logikk og initialisering.
always @(posedge clk) begin
q <= d; // Ved stigande kant av clk, tildel d til q
end
Kontinuerlege tildelingar kan gjerast med assign
-setninga, som sikrar at utgangen reflekterer endringar i inngangane umiddelbart.
wire out;
assign out = a & b; // OG-port
Verilog gjer det mogleg med direkte modellering ved hjelp av innebygde primitive som AND, OR og NOT.
and my_and(out, a, b); // Instansierer ein OG-port
Testbenkar blir brukt i Verilog for å simulere og verifisere funksjonaliteten til eit design.
module tb_my_adder;
reg a, b;
wire sum;
my_adder dut (.a(a), .b(b), .sum(sum)); // Instansier designet
initial begin
a = 0; b = 0; #10; // Påfør inngangar og vent
a = 1; #10;
b = 1; #10;
end
endmodule
Verilog støttar vilkårlege setningar som if
, case
for beslutningstaking i prosedyreblokkar.
if (sel) begin
out = a;
end else begin
out = b;
end
Løkker kan brukast i Verilog for repetitive tildelingar og operasjonar.
for (i = 0; i < 8; i = i + 1) begin
// Utfør operasjonar
end
Verilog gjer det mogleg med parametriserte modul, som gjer det mogleg å gjenbruke design med ulike konfigurasjonar.
module my_multiplier #(parameter WIDTH = 8)(input [WIDTH-1:0] a, input [WIDTH-1:0] b, output [2*WIDTH-1:0] product);
assign product = a * b;
endmodule
Verilog gir moglegheit til å definere oppgåver og funksjonar for modulær kode-design.
function [7:0] add(input [7:0] a, input [7:0] b);
add = a + b;
endfunction
Ikkje-blokkerande tildelingar med <=
-operatøren gjer det mogleg å modellere synkrone design betre.
always @(posedge clk) begin
q <= d; // Planlagt for seinare utføring
end
Verilog-utvikling blir lagt til rette gjennom ei rekkje verktøy og IDE-ar. Vanleg brukt programvare inkluderer ModelSim, Synopsys VCS og Cadence Incisive, som tilbyr simulering, syntese og feilsøking.
For å bygge eit Verilog-prosjekt, skriv du vanlegvis Verilog-koden din i .v
-filer. Du kan deretter kalle på ein simulator eller synteseverktøy frå kommandolinja eller innan ein IDE. For eksempel kan ein kompilasjonskommando sjå slik ut:
vcs my_design.v -o my_sim
Etter kompilering kan du kjøre simuleringa med:
./my_sim
Verilog blir hovudsakleg brukt i design og verifisering av digitale kretser, inkludert:
Dens evne til å modellere maskinvare på ulike nivå av abstraksjon gjer den allsidig for mange applikasjonar innan elektronikkindustrien.
Verilog blir ofte samanlikna med andre HDL-språk som VHDL. Mens begge har liknande føremål, blir Verilog generelt sett på som enklare å lære på grunn av sin forenkla syntaks som liknar på C-programmeringsspråket. VHDL er føretrekt for meir verbose design som krev sterk typekontroll og blir ofte brukt i offentlege og romfartsapplikasjonar.
Når det blir samanlikna med programvareprogrammeringsspråk som C og Java, fokuserer Verilog på maskinvare-strukturar og samtidige prosessar, medan programvarespråk handterer sekvensiell og prosedyrel logikk. Python kan brukast for høgnivåtesting og behandling av simuleringsdata, men gir ikkje ein direkte metode for maskinvarebeskriving.
For dei som ønskjer å oversette Verilog-design til andre HDL-format, finst det verktøy som Calyx og annan open-source programvare for å legge til rette for denne prosessen. Men dei spesifikke karakteristikkane til Verilog kan gjere direkte oversettingar utfordrande på grunn av dei iboande forskjellane i abstraksjon og intensjon for kvart språk.
Verktøy som Verilator eller Yosys har blitt utvikla for å hjelpe til med å konvertere Verilog-kode til ulike format eller optimalisere den, og dei tilbyr moglegheiter for syntese og simulering. Desse verktøya er spesielt nyttige for å integrere Verilog-design i flytorienterte miljø.