Verilog
Verilog – język opisu sprzętu używany do projektowania oraz symulacji elektronicznych układów cyfrowych, zwłaszcza typu ASIC i FPGA.
Historia
[edytuj | edytuj kod]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.
Opis
[edytuj | edytuj kod]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 | edytuj kod]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