Programmeringsspråk Verilog

Verilog-språket

Oversikt over Verilog

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).

Historiske aspekt

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.

Syntaksfunksjonar i Verilog

Moduldeklarasjon

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

Prosedyreblokkar

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

Tildelingssetningar

Kontinuerlege tildelingar kan gjerast med assign-setninga, som sikrar at utgangen reflekterer endringar i inngangane umiddelbart.

wire out;
assign out = a & b; // OG-port

Portnivåmodellering

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

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

Vilkårlege setningar

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

Løkker kan brukast i Verilog for repetitive tildelingar og operasjonar.

for (i = 0; i < 8; i = i + 1) begin
    // Utfør operasjonar
end

Parameterar

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

Oppgåver og funksjonar

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

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

Utviklarverktøy, køyretid og populære IDE-ar

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.

Bygging av eit prosjekt

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

Applikasjonar av Verilog

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.

Sammenlikning med relevante eller liknande språk

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.

Tips for kilde-til-kilde oversetting

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ø.