Verilog

język programowania

Verilogjęzyk opisu sprzętu używany do projektowania oraz symulacji elektronicznych układów cyfrowych, zwłaszcza typu ASIC i FPGA.

Historia

edytuj

Verilog został stworzony około roku 1984 przez Phila Moorby'ego w firmie Gateway Design Automation. W roku 1985 ukazała się pierwsza wersja handlowa Veriloga. W roku 1986 powstał symulator używający tego języka – Verilog-XL. Rok 1988 przyniósł pierwsze narzędzie do syntezy sprzętu na podstawie opisu w Verilogu, wyprodukowane przez firmę Synopsys.

W roku 1989 Gateway Design Automation została przejęta przez firmę Cadence, która zdecydowała uczynić Verilog otwartym standardem w roku 1990. W celu sprawowania nadzoru nad rozwojem języka powołano Open Verilog International (OVI). Ta organizacja doprowadziła do powstania pierwszego oficjalnego standardu języka – IEEE Std 1364-1995 – w roku 1995. Open Verilog International i VHDL International połączyły się w roku 2000, tworząc nową organizację – Accellera. Na podstawie życzeń użytkowników i sugestii producentów oprogramowania standard został zrewidowany w roku 2001 (IEEE Std 1364-2001).

W roku 2002 Accellera rozpoczęła proces gruntownych ulepszeń w Verilogu. Ze względu na znaczną liczbę zmian i ulepszeń, zdecydowano się utworzyć nowy projekt – SystemVerilog – przy zachowaniu dużego poziomu zgodności z oryginalnym Verilogiem. Pod koniec roku 2005 zaaprobowano nową wersję standardu Veriloga IEEE Std 1364-2005 i pierwszą wersję standardu SystemVeriloga IEEE Std 1800-2005.

W wersji z roku 1995 Verilog był nieco niejednorodnym językiem opisu sprzętu z doskonałymi środkami opisu na niskim poziomie (ang. gate level), bardzo dobrą obsługą poziomów pośrednich (RTL) i akceptowalną obsługą wyższych poziomów. Zmiany wprowadzone w roku 2001 uczyniły język bardziej jednorodnym, ulepszając składnię i poprawiając obsługę wyższych poziomów opisu.

Podstawową jednostką opisu hierarchii projektu w Verilogu jest moduł (module). Moduły niższego poziomu mogą być łatwo używane wewnątrz modułów wyższego poziomu przez podanie nazwy modułu, etykiety, listy wartości parametrów modułu (opcjonalnie) oraz listy połączeń z innymi modułami. Opis funkcjonalny modułów jest możliwy dzięki współbieżnym procesom typu always i initial. Wewnątrz procesów można używać instrukcji znanych z innych, tradycyjnych języków programowania (instrukcje przypisania, wywołania funkcji, pętle for, while, repeat itp.).

Przykład

edytuj

Prosty opis układu 7400 (opóźnienie odpowiadające serii 74LS):

module ttl7400(Out, A, B);
   output [3:0] Out;
   input [3:0] A;
   input [3:0] B;

   nand #10 (Out[0], A[0], B[0]);
   nand #10 (Out[1], A[1], B[1]);
   nand #10 (Out[2], A[2], B[2]);
   nand #10 (Out[3], A[3], B[3]);
endmodule