Projektant pisze moduły Verilog opisujące strukturę i zachowanie układu. Logikę kombinacyjną wyraża się przez assign lub bloki always @(*), a sekwencyjną przez always @(posedge clk) z przypisaniami nieblokującymi (<=). Kod jest zdarzeniowo współbieżny — wiele bloków always działa równolegle. Symulator (np. zdarzeniowy Icarus/ModelSim lub cyklowy Verilator) wykonuje testbench podający pobudzenia i sprawdzający odpowiedzi. Do produkcji sprzętu narzędzie syntezy (np. Yosys, Design Compiler) tłumaczy syntezowalny podzbiór Verilog na listę bramek (netlist), mapowaną potem na komórki ASIC lub zasoby FPGA. Kluczowe reguły: używać nieblokujących przypisań w logice sekwencyjnej, blokujących w kombinacyjnej, pisać kompletne przypisania (unikać niezamierzonych zatrzasków) i trzymać się syntezowalnego podzbioru języka.
Rosnąca złożoność układów scalonych uczyniła projektowanie schematyczne i na poziomie bramek niepraktycznym. Verilog dostarczył tekstowy, hierarchiczny, symulowalny i syntezowalny sposób opisu sprzętu na wysokim poziomie (RTL), umożliwiając weryfikację przed produkcją oraz automatyzację przejścia od opisu do gotowego układu.
Podstawowa jednostka opisu w Verilog: blok z portami wejścia/wyjścia, łączony hierarchicznie w większe układy.
Bloki always (logika kombinacyjna/sekwencyjna) i initial (inicjalizacja/testbench) wyzwalane zdarzeniami, np. zboczem zegara.
Typy sygnałów: wire (sterowany ciągle, łączy elementy) i reg (przechowuje wartość między przypisaniami proceduralnymi).
Przypisania blokujące (=) modelują natychmiastowe (kombinacyjne) obliczenia, a nieblokujące (<=) równoczesną aktualizację rejestrów na zbocze zegara.
Użycie = zamiast <= w logice sekwencyjnej (lub odwrotnie) powoduje rozbieżność symulacja–synteza i wyścigi.
Opóźnienia (#), pętle bez granic czy niektóre konstrukcje testbenchowe działają w symulacji, ale nie dają się zsyntezować.
Niepełna lista wrażliwości lub brak else prowadzą do rozbieżności symulacji i wnioskowania niezamierzonych zatrzasków.
Prabhu Goel, Phil Moorby i Chi-Lai Huang tworzą Verilog jako język opisu i symulacji sprzętu; nazwa łączy „verification" i „logic".
Cadence Design Systems przejmuje Gateway, a wkrótce Verilog zostaje udostępniony publicznie (Open Verilog International), co przyspiesza jego adopcję.
Verilog staje się otwartym standardem IEEE, obok późniejszych rewizji 2001 (arytmetyka ze znakiem) i 2005.
IEEE 1364-2005 zostaje scalony ze standardem SystemVerilog (IEEE 1800-2009), dodającym zaawansowaną weryfikację i konstrukcje obiektowe.
Wersja standardu (Verilog-95/2001/2005 lub SystemVerilog 1800) determinuje dostępne konstrukcje językowe i weryfikacyjne.
Ograniczenie do konstrukcji syntezowalnych (vs. czysto symulacyjnych) decyduje, czy kod da się zrealizować w sprzęcie.
Verilog opisuje sprzęt współbieżny: wszystkie bloki always i przypisania ciągłe działają równolegle, odzwierciedlając fizyczną jednoczesność układu.
Verilog to jeden z dwóch głównych języków opisu układów mapowanych na FPGA.
Ten sam kod Verilog syntezuje się na ASIC lub FPGA — język jest niezależny od docelowej technologii.