Programmeringsspråk Verilog

Verilog-språket

Översikt av Verilog

Verilog är ett hårdvarubeskrivningsspråk (HDL) som används för att designa, simulera och verifiera digitala elektroniska system, särskilt integrerade kretsar (IC). Utvecklat på 1980-talet, gör Verilog det möjligt för ingenjörer att beskriva beteendet och strukturen hos elektroniska system på olika abstraktionsnivåer, från hög nivå algoritm ner till grindnivå. Dess primära roll är att underlätta simuleringen och syntesen av digitala logikkretsar, vilket möjliggör effektiv design och verifiering av komplexa hårdvarukomponenter som CPU:er, FPGA:er (fältprogrammerbara grindarrayer) och ASIC:er (applikationsspecifika integrerade kretsar).

Historiska Aspekter

Verilog uppstod 1984 som ett proprietärt språk utvecklat av Gateway Design Automation. Dess ursprungliga syfte var att tillhandahålla ett modelleringsverktyg för digitala system. År 1990 förvärvades det av Cadence Design Systems, vilket underlättade en bredare adoption av språket inom elektronikindustrin.

År 1995 standardiserades Verilog som IEEE 1364, vilket markerade det som en officiell HDL-standard. Denna standardisering bidrog avsevärt till Verilogs popularitet, vilket gjorde det möjligt för det att konkurrera med andra HDL:er, särskilt VHDL, som hade fått framträdande ställning på 1980-talet genom sin användning inom militär och rymdteknik.

Under de följande åren har Verilog utvecklats för att inkludera konstruktioner för moderna designmetoder som SystemVerilog, en förlängning som inkorporerar funktioner från både Verilog och objektorienterade programmeringsparadigm. Nu representerar SystemVerilog både ett verifierings- och designverktyg, vilket ytterligare förbättrar Verilogs kapabiliteter.

I dagsläget fortsätter Verilog och dess förlängningar att vara ett grundläggande språk inom elektronikdesignautomation (EDA)-industrin, med ett robust ekosystem av verktyg som tillhandahålls av olika stora företag som Synopsys, Mentor Graphics och Cadence.

Syntaxfunktioner i Verilog

Moduldeklaration

Den grundläggande byggstenen i Verilog är modulen. Moduler innehåller ingångar, utgångar och intern logik.

module my_adder(input a, input b, output sum);
    assign sum = a + b;
endmodule

Procedurblock

Verilog stöder procedurblock som always och initial, som möjliggör sekventiell logik och initialisering.

always @(posedge clk) begin
    q <= d; // Vid stigande kant av clk, tilldela d till q
end

Tilldelningssatser

Kontinuerliga tilldelningar kan göras med hjälp av assign-satsen, vilket säkerställer att utgången omedelbart återspeglar förändringen i ingångarna.

wire out;
assign out = a & b; // OCH-grind

Grindnivåmodellering

Verilog tillåter direkt modellering med hjälp av inbyggda primitiva som OCH, ELLER och INTE.

and my_and(out, a, b); // Instansierar en OCH-grind

Testbänkar

Testbänkar används i Verilog för att simulera och verifiera funktionaliteten hos en design.

module tb_my_adder;
    reg a, b;
    wire sum;

    my_adder dut (.a(a), .b(b), .sum(sum)); // Instansiera designen

    initial begin
        a = 0; b = 0; #10; // Tillämpa ingångar och vänta
        a = 1; #10;
        b = 1; #10;
    end
endmodule

Villkorssatser

Verilog stöder villkorssatser som if, case för beslutsfattande i procedurblock.

if (sel) begin
    out = a;
end else begin
    out = b;
end

Loopar

Loopar kan användas i Verilog för repetitiva tilldelningar och operationer.

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

Parametrar

Verilog tillåter parametriserade moduler, vilket möjliggör att designer kan återanvändas med olika konfigurationer.

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

Uppgifter och funktioner

Verilog ger möjlighet att definiera uppgifter och funktioner för modulär koddesign.

function [7:0] add(input [7:0] a, input [7:0] b);
    add = a + b;
endfunction

Icke-blockerande tilldelningar

Icke-blockerande tilldelningar med hjälp av <=-operatorn möjliggör bättre modellering av synkrona designer.

always @(posedge clk) begin
    q <= d; // Schemalagd för senare exekvering
end

Utvecklarverktyg, körningar och populära IDE:er

Verilog-utveckling underlättas genom en mängd olika verktyg och IDE:er. Vanligt använda programvaror inkluderar ModelSim, Synopsys VCS och Cadence Incisive, som tillhandahåller simulering, syntes och felsökning.

Bygga ett projekt

För att bygga ett Verilog-projekt skriver du vanligtvis din Verilog-kod i .v-filer. Du kan sedan anropa en simulator eller syntesverktyg från kommandoraden eller inom en IDE. Till exempel kan ett kompilationskommando se ut så här:

vcs my_design.v -o my_sim

Efter kompileringen kan du köra simuleringen med:

./my_sim

Tillämpningar av Verilog

Verilog används främst i design och verifiering av digitala kretsar, inklusive:

Dess kapabilitet att modellera hårdvara på olika abstraktionsnivåer gör det mångsidigt för många tillämpningar inom elektronikindustrin.

Jämförelse med relevanta eller liknande språk

Verilog jämförs ofta med andra HDL-språk som VHDL. Medan båda tjänar liknande syften, anses Verilog generellt vara lättare att lära sig på grund av sin förenklade syntax som liknar C-programmeringsspråket. VHDL föredras för mer omfattande designer som kräver stark typkontroll och används ofta inom statliga och rymdrelaterade tillämpningar.

När det jämförs med mjukvaruprogrammeringsspråk som C och Java fokuserar Verilog på hårdvarustrukturer och samtidiga processer, medan mjukvaruspråk hanterar sekventiell och proceduriell logik. Python kan användas för hög nivå testning och bearbetning av simuleringsdata men tillhandahåller ingen direkt metod för hårdvarubeskrivning.

Tips för käll-till-källa översättning

För dem som vill översätta Verilog-designs till andra HDL-format finns verktyg som Calyx och annan öppen källkod som finns för att underlätta denna process. Dock kan de specifika egenskaperna hos Verilog göra direkta översättningar utmanande på grund av de inneboende skillnaderna i abstraktion och avsikt hos varje språk.

Verktyg som Verilator eller Yosys har utvecklats för att hjälpa till att konvertera Verilog-kod till olika format eller optimera den, och de erbjuder kapabiliteter för syntes och simulering. Dessa verktyg är särskilt användbara för att integrera Verilog-designs i flödesorienterade miljöer.