Verilog
Z Wikipedii
Verilog jest popularnym językiem opisu sprzętu używanym do projektowania oraz symulacji układów cyfrowych, zwłaszcza typu ASIC i FPGA.
[edytuj] Historia
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ł bardzo popularny 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 zainicjalizowała proces gruntownych ulepszeń w Verilogu. Ze względu na znaczną ilość 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.
Przewiduje się połączenie standardów Veriloga i SystemVeriloga około roku 2007.
[edytuj] Opis
W wersji z roku 1995 Verilog był nieco niejednorodnym językiem opisu sprzętu z doskonałymi środkami opisu na niskim poziomie (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 (instrukcje przypisania, wywołania funkcji, pętle for, while, repeat i.t.p.).
[edytuj] Przykład
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