VHDL czy Verilog? [Zamknięte]

93

VHDL i Verilog to HDL dnia. Jakie są zalety dla kogoś, kto w ogóle nie ma doświadczenia z HDL?

stevenvh
źródło
2
Wydają się być równie wydajne, wybierz ten, który wolisz. Uważam, że VHDL najbardziej mi odpowiada.
Leon Heller
1
Jak mogę dać tym moderatorom „głosować”? Retoryka osób z wcześniejszym doświadczeniem jest cenniejsza niż informacje zawarte w książkach. Książki nie zawierają pojęcia czasu.
dsgdfg

Odpowiedzi:

70

Nie mogę ci powiedzieć, czego się uczyć, ale oto kilka kontrastujących punktów (od bardzo skoncentrowanego na VHDL użytkownika, ale starałem się być jak najbardziej sprawiedliwy!), Które mogą pomóc ci dokonać wyboru na podstawie własnych preferencji pod względem stylu rozwoju:

I pamiętaj o słynnym cytacie, który brzmi: „Wolę którykolwiek z tych, których obecnie nie używam” (przepraszam, nie pamiętam, kto tak naprawdę to napisał - być może Janick Bergeron?)

VHDL

  • silnie napisane
  • więcej gadatliwy
  • bardzo deterministyczny
  • składnia inna niż C (i sposób myślenia)

Wiele błędów kompilacji na początek, ale potem działa w większości zgodnie z oczekiwaniami. Może to prowadzić do bardzo stromej krzywej uczenia się (wraz z nieznaną składnią)

Verilog

  • słabo napisane
  • bardziej zwięzłe
  • tylko deterministyczne, jeśli przestrzegasz pewnych zasad ostrożnie
  • więcej składni podobnej do C (i sposób myślenia)

Błędy znajdują się później w symulacji - krzywa uczenia się do „poczucia, że ​​coś się robi” jest płytsza, ale trwa dłużej (czy to właściwa metafora?)

Również na korzyść Verilog jest to, że wysokiej klasy weryfikacja coraz bardziej opiera się na SystemVerilog, który jest ogromnym rozszerzeniem Verilog. Ale zaawansowane narzędzia mogą również łączyć kod syntezy VHDL z kodem weryfikacyjnym SystemVerilog.


Całkowicie inne podejście: MyHDL - zyskujesz pełną moc Pythona jako języka weryfikacyjnego z zestawem rozszerzeń syntezy, z których możesz wygenerować VHDL lub Verilog.

Lub Cocotb - cała moc Pythona jako języka weryfikacyjnego, z syntetycznym kodem wciąż napisanym w dowolnym HDL, który postanowiłeś się nauczyć (tj. VHDL lub Verilog).

Martin Thompson
źródło
2
Znam Verilog, ale nie znam VHDL: co rozumiesz przez to, że VHDL jest bardziej deterministyczny niż Verilog?
cykl
44

Nauczyłem się obu w tym samym tygodniu. VHDL jest jak ADA / Pascal, a Verilog jest jak C. VHDL jest bardziej gadatliwy i bardziej bolesny, aby uzyskać kompilację, ale kiedy kompilacja się pojawi, masz większe szanse na sukces. Przynajmniej to znalazłem. Verilog, podobnie jak C, jest całkiem zadowolony z możliwości strzelania sobie w stopę. Niektóre branże, takie jak lotnictwo / rząd, skłaniają się ku VHDL, inne skłaniają się ku Verilog. Problem, który znalazłem w obu przypadkach, to możliwości stanowiska testowego, a kiedy próbuję się uczyć i próbować przejść od symulacji do pisania w krzemie / FPGA, syntezowalny tylko kod jest kolejnym poziomem edukacji.

Język, który naprawdę lubię, nazywa się CDL . Jest ściśle syntezowalny, piszesz swoje stanowiska testowe na inne sposoby, generuje syntezowalny Verilog, który możesz wziąć do innych narzędzi. Niestety brakuje dokumentów CDL , mam nadzieję, że wydam kilka próbek na świecie, aby pokazać, o ile łatwiej jest używać niż Verilog lub VHDL, ale po prostu tego nie zrobię. Pochodzi z własnym środowiskiem SIM / testowym. Dzięki CDL i GTKWave możesz wykonać sporo pracy.

Inne narzędzie o nazwie Verilator jest dość sztywne w utrzymywaniu Verilog w czystości. Jest to darmowy symulator Verilog z bardzo łatwym sposobem na podłączenie do karty SIM lub stworzenie stanowisk testowych w C / C ++. Możesz także korzystać z Verilog, nie ogranicza Cię to. Jest też Icarus Verilog , który jest większy i bardziej znany, ale polecam Verilator, jeśli chcesz nauczyć się Verilog. W przypadku VHDL istnieje GHDL , moje doświadczenie z nim nie było tak dobre jak Verilator , ale przynajmniej jest darmowe narzędzie do próby zmoczenia stóp. Jeśli masz doświadczenie w programowaniu, prawdopodobnie będziesz mógł korzystać z Verilog szybciej niż VHDL.

Zdecydowanie zgadzam się z Leonem, spróbuj obu. fpga4fun i inne strony internetowe zawierają dobre informacje, a niektóre z nich podadzą zarówno odpowiedniki Verilog, jak i VHDL dla omawianego tematu. Uważam, że takie strony są najbardziej przydatne do porównywania dwóch języków. Jeśli korzystanie z HDL jest czymś, co chcesz robić w swojej karierze, zalecam posiadanie przynajmniej niektórych możliwości z oboma, być może naprawdę dobrze z jednym, ale nie bądź całkowicie niezdolny do korzystania z drugiego.

dwelch
źródło
1
Bardzo dobre wskazówki. Zredagowałem twoją odpowiedź jako odniesienie do mnie i innych. +1
Daniel Grillo
23

Walczyło o to wiele świętych wojen. Szczególną wadą Verilog jest jego niedeterministyczne zachowanie. http://www.sigasi.com/content/verilogs-major-flaw

Philippe
źródło
Tak, wygląda to źle, ale nie jestem pewien: czy to wada w języku, czy w tym konkretnym syntezatorze?
stevenvh
4
To problem językowy. Różne syntezatory wybierają własne zachowanie w nieprzewidywalny sposób. Uruchom ten sam kod na symulatorze Mentor lub symulatorze kadencji, aby uzyskać różne wyniki.
Philippe,
20

Oba mają zalety i wady. VHDL jest bardziej akademicki, pełny i bardziej złożony. Musisz napisać więcej kodu, ale rygor oznacza, że ​​jest bardziej prawdopodobne, że zadziała. Verilog jest prostszy w typowym projektowaniu cyfrowym, ale ułatwia tworzenie trudnych błędów. VHDL jest bardziej powszechny na uniwersytetach. Verilog występuje częściej w dużych firmach z półprzewodnikami.

Zazwyczaj wybór jednego lub drugiego zależy od używanych narzędzi. Niektóre popularne narzędzia FPGA radzą sobie lepiej z VHDL. Niektóre popularne narzędzia ASIC działają lepiej dzięki Verilog. Tak więc, co jest lepsze, zależy od tego, co chcesz z tym zrobić.

Powiedz, że chcesz budować małe projekty przy użyciu układów FPGA Altera, które są popularne w szkołach EE. Darmowe narzędzia obsługują oba HDL. Ale może się okazać, że społeczność użytkowników korzysta głównie z VHDL. Będzie więcej przykładów kodu, modułów wielokrotnego użytku itp., Jeśli zdecydujesz się na ten język.

I odwrotnie, jeśli zamierzasz pracować w dużej firmie wykonującej poważne prace projektowe, prawie wszystkie z nich korzystają obecnie z Verilog. Wytrzymałe narzędzia do syntezy, symulacji i weryfikacji są zoptymalizowane dla Verilog. A ostatnio SystemVerilog - rozszerzenia Verilog do obsługi projektowania i weryfikacji systemu na wysokim poziomie.

Więcej dyskusji tutaj i przydatne linki tutaj:

http://www.eetimes.com/electronics-blogs/programmable-logic-designline-blog/4032239/Verilog-versus-VHDL-which-is-best-

Dla początkujących / hobbystów najlepszą radą jest zdecydować, z którymi żetonami chcesz grać, i zobaczyć, jakie przykłady podaje dostawca. Użyć tego. Gdy jesteś doświadczonym projektantem cyfrowym, nauka drugiego języka zajmie tylko kilka dni.

Andy McC
źródło
4
Dzięki. Ostatnie zdanie jest ważne. Czy istnieją narzędzia, które przekształcają jedno w drugie?
stevenvh
jest trochę historii rządowej, w którą nie wchodzę, ale jeśli spojrzysz na modelimim, kiedy pobiera verilog, konwertuje na vhdl, a następnie symuluje. Nie robi tego na odwrót, więc przynajmniej verilog do vhdl można zobaczyć konwersję za pomocą tego narzędzia. istnieją inne narzędzia, które konwertują w jedną lub drugą stronę i mają wersje demo.
old_timer
3
Niektóre narzędzia komercyjne (synteza, analiza statyczna) będą czytać w jednym języku, a dane wyjściowe w drugim. Rezultat jest jak użycie kompilatora, aby zmienić Aę w język asemblera, a następnie dekompilatora w celu wyodrębnienia C. Nie spodoba ci się wynik.
Andy McC 13'11
17

Krótka odpowiedź : użyj SystemVerilog, ale ucz się także VHDL . Jeśli możesz, unikaj Verilog-2001.

Bardzo długa odpowiedź : w tej chwili zakładam, że przez Verilog masz na myśli Verilog-2001, co prawdopodobnie jest również tym, co zakłada większość innych odpowiedzi. Najlepszą sugestią byłoby prawdopodobnie nauczenie się obu, ale nie używaj żadnej (więcej na ten temat na końcu odpowiedzi). Główne różnice można wznowić w następujący sposób:

  • Verilog-2001 jest zwięzły , podczas gdy VHDL jest (bardzo, bardzo) bardzo gadatliwy
  • Verilog-2001 obsługuje konstrukcje bardzo niskiego poziomu, które nie są obsługiwane przez VHDL (ale nie będziesz musiał ich używać do typowego projektowania poziomu transferu rejestru (RTL)
  • VHDL jest silniej typowany , co zwykle znacznie ułatwia wczesne wykrywanie błędów
  • VHDL jest znacznie bardziej wyrazisty niż Verilog
  • Verilog-2001 ma składnię bardziej podobną do C , podczas gdy VHDL jest bardziej podobna do Ada
  • Verilog-2001 może mieć mylące pojęcia dla początkujących (np. wireVs reg)

To powiedziawszy, najważniejsze pojęcia są wspólne dla obu języków, choć pod różnymi nazwami (np. alwaysVs process), a w każdym razie trudność w nauce HDL jest bardziej związana z koncepcjami (takimi jak współbieżność wszystkich procesów, HW konwencje itp.) niż do samego języka. Biorąc pod uwagę różnice, jeśli wybór dotyczy Verilog 2001 i VHDL, osobiście zwróciłbym się do każdego początkującego do VHDL.

Jednak, jak powiedziałem, moja propozycja nie polega na użyciu VHDL ani Verilog-2001, jeśli masz moc wyboru. W przeciwieństwie do tego, co wielu ludzi zakłada, SystemVerilog nie jest językiem wyższego poziomu przydatnym tylko do projektowania lub weryfikacji na poziomie systemu i ma niewiele wspólnego z językami, które można zasilać z narzędzia do syntezy wysokiego poziomu, takiego jak SystemC.

Zamiast tego SystemVerilog jest pełną aktualizacją języka Verilog (opartą na Verilog-2005, patrz http://en.wikipedia.org/wiki/SystemVerilog ), który ma w pełni syntezowalny podzbiór, który pasuje do zwięzłości Verilog z wyższą ekspresją niż oba Verilog-2001 i VHDL, zapewniające moim zdaniem to, co najlepsze z obu światów.

Przykłady bardzo znaczących konstrukcji / wyrażeń dostępnych w SystemVerilog, które nie są dostępne w Verilog-2001, VHDL lub obu obejmują:

  • always_ff, always_latch, always_combBloki, które pomagają odróżnić projektant natychmiast między blokami realizujących różne rodzaje logiki, a także - dla always_combi always_latch- (! Źródłem nieskończonych błędów w VHDL i Verilog, szczególnie dla początkujących) wnioskujemy automatycznie sygnały, które powinny iść na liście czułości
  • logictypy, które zastępują mylące wirei regtypy Verilog-2001
  • typy spakowane, które pozwalają łatwo budować wielowymiarowe magistrale (np. logic [N-1:0][M-1:0][P-1:0]), podczas gdy Verilog-2001 obsługuje tylko dwuwymiarowe magistrale, a VHDL zmusza projektanta do zdefiniowania nowych typów do budowy podobnych struktur
  • konstrukcje wysokiego poziomu, takie jak struct(podobne do VHDL record), a nawet wyższe, interfacektóre można bardzo skutecznie wykorzystać do modelowania regularnych struktur (takich jak porty magistrali)

Wszystkie te różnice przetestowałem „na skórze”, pracując nad dość złożonym systemem wielordzeniowym do celów badawczych. Jest teraz obsługiwany przez wiele narzędzi i wiem na pewno (z korzystania z nich prawie codziennie), że jest obsługiwany przez narzędzia Synopsys (zarówno dla przepływów syntezy ASIC, jak i FPGA), Xilinx Vivado (dla syntezy FPGA) oraz narzędzia symulacyjne, takie jak jako MentorGraphics Modelsim, Cadence NCsim i Synopsys VCS.

Aby być całkowicie kompletnym, istnieją dwa inne znaczące rodzaje języków w przyborniku projektanta sprzętu (chociaż jakość tych narzędzi może się bardzo różnić):

  • Języki generacji HDL , takie jak MyHDL (oparte na Python) i Rocket (oparte na Scali). Koncepcja jest następująca: opisujesz swój projekt w języku wyższego poziomu, ale nadal używasz koncepcji bardzo HDL (np. Współbieżne bloki, wyraźne taktowanie), a następnie generujesz konwencjonalny HDL (zwykle Verilog-2001). Szczerze mówiąc, nie uważam ich za bardzo przydatne, ponieważ etap abstrakcji z HDL jest niewielki, a SystemVerilog zapewnia już wiele koncepcji wyższego poziomu, z tą zaletą, że jest bezpośrednio wprowadzany do przepływu syntezy bez etapów pośrednich.
  • Narzędzia do syntezy wysokiego poziomu , takie jak Vivado HLS, LegUp, Calypto Catapult i wiele innych. Przyjmują one bardzo ogólny opis, często w C, C ++ lub SystemC i zwykle nieterminowe, i generują implementację typu best-use w (zwykle nieczytelnym) Verilog. Są dość dobre w generowaniu niektórych obiektów (na przykład akceleratory HW dla funkcji takich jak splot, FFT itp.), Ale generalnie nie są ogólnego zastosowania. Na przykład nie można zaprojektować rdzenia procesora w większości narzędzi HLS - jedyne, o czym wiem, to BlueSpec, który tak naprawdę jest hybrydą między generacją HLS i HDL.
Francesco Conti
źródło
Tak właściwie się nauczyłem. Najpierw nauczyłem się VHDL i kodowałem go przez 3 lata. Spędziłem 3 miesiące na kodowaniu verilog i (bardzo szybko) zdecydowałem, że SystemVerilog będzie właściwą drogą. Teraz koduję prawie wyłącznie SV, ale polegam w dużej mierze na technikach zrozumienia i kodowania, których nauczyłem się podczas używania VHDL.
stanri
12

Moja kariera przez ostatnie 13 lat wynosiła 80% ASIC i 20% FPGA.

VHDL był używany przez pierwsze 3,5 roku, a resztą był Verilog. Przejście na Verilog nie było dla mnie trudne, a ze względu na lokalizację (Dolinę Krzemową) i szybkość koduję tylko dzisiaj w Verilog.

Ponadto wykonuję wiele interfejsów, zatrzasków i pół niestandardowych projektów Async dla wydajności, więc VHDL ma teraz bardzo małe zastosowanie w moim życiu. Zamiast tego znalazłem SystemVerilog i SystemC o wiele bardziej przydatne do zbierania i używania w dużych projektach inżynierskich.

Na jednym etapie narzędzia takie jak Verilator (za darmo! I szybko) pozwoliły mi zaoszczędzić sporo potrzebnego funduszu na krytyczne symulacje. Nie masz jeszcze tej opcji dla VHDL. I możesz go nigdy nie potrzebować, jeśli zawsze pływasz w bogatym basenie lub nie wykonujesz projektów bram o wielkości> 1M.

Jednak VHDL jest lepszy dla początkujących, zanim opracują solidne zasady projektowania sprzętu. Moja komunikacja z ludźmi z EDA sugeruje, że dokonali niewielkich zmian w VHDL przez ostatnie 10 lat, a za HLS stoi dziś duży dysk. Więc nie będzie wielu programistów narzędzi VHDL w pobliżu ...

użytkownik27239
źródło
FreeHDL do symulacji VHDL? Qucs jako frontend.
Martin
8

Poszedłem do VHDL, głównie dlatego, że znam C bardzo dobrze i stwierdziłem, że próba pisania verilog zwykle powodowała, że ​​pisałem tak, jakbym celował w procesor nie opisujący sprzętu.

Bardzo denerwujące było napisanie strony kodu i uświadomienie sobie, że to, co napisałeś, było w istocie programem sekwencyjnym, a nie projektowaniem sprzętowym, tak, syntezowałoby się, ale wynik był brzydki i powolny.

VHDL był na tyle inny, że znacznie łatwiej było mi myśleć w kategoriach logiki, a nie kontroli przepływu.

Ostatecznie język jest trudny, umiejętność polega na projektowaniu systemu, a nie na pisaniu.

Pozdrawiam, Dan.

Dan Mills
źródło
5

W ubiegłym roku uniwersytet, który studiowałem, promował dwa kursy otwarte dla początkujących. Oba dotyczyły tej samej treści, ale jedna używa VHDL, a druga Verilog.

Oczywiście zapytałem obu profesorów o różnice w VHDL i Verilog. Obaj nie mogli wybrać najlepszego.

Musiałem więc zrobić oba kursy, aby przekonać się, który z nich może być dla mnie lepszy. Moje pierwsze wrażenie było VHDL jest bardziej Pascal-jak i Verilog jest bardziej C-like .

Po tym postanowiłem zrobić tylko VHDL, ponieważ wtedy pracowałem z Delphi.

Ale po kursie nigdy nie pracowałem z FPGA. Więc to jest najlepsze, w czym mogę pomóc.

Daniel Grillo
źródło
5

Używam VHDL prawie całkowicie. Z mojego doświadczenia wynika, że ​​VHDL jest bardziej powszechny w Europie, Verilog w Stanach Zjednoczonych, ale VHDL robi również stały postęp w Stanach Zjednoczonych. Silne pisanie VHDL nie przeszkadza mi, ponieważ używam go jak staromodnego języka projektowania sprzętu stosowanego w małej programowalnej logice, takiej jak PALASM lub AHDL Altera.

Dużym problemem dla większości osób używających VHDL są silne typy. Chcą dokonywać przypisań między std_logic_vector (co uważam za zbiór przewodów w celu) i „int” (co uważam za liczbę zapisaną na komputerze, który kompiluje projekt). Najbardziej irytująca konwersja typów, na jaką zazwyczaj wpadam, to między bit_vector (co uważam za opis zbioru przewodów w komputerze kompilującym projekt) i std_logic_vector. W rzeczywistości to, co wciągnęło mnie teraz do stackexchange, to poszukiwanie konwersji z char (zmienna znakowa przechowywana na komputerze kompilującym) na int.

Wcześniej najsłynniejszym konfliktem między VHDL i Verilog był konkurs projektowy zorganizowany przez magazyn ASIC i EDA. Google „Nieoczekiwane wyniki konkursu na projekt sprzętu: Verilog Won i VHDL Lost? - You Be The Judge!”, Na przykład: http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual /Example/lrgeEx2/cooley.html

Konkurs polegał na wdrożeniu dość skomplikowanego 9-bitowego rejestru. Miał liczenie w górę / w dół, a także kilka innych rzeczy. W rezultacie 8 z 9 projektantów Verilog uruchomiło kod po 90 minutach. Zero z 5 facetów z VHDL działało.

Nie używam VHDL jak nikt inny. Sposób, w jaki go używam, typy nie przeszkadzają mi zbyt często. Zaimplementowałbym powyższy projekt w ten sam sposób, w jaki robię wszystko inne, całkowicie w std_logic i std_logic_vector, używając (z powrotem) biblioteki niepodpisanej IEEE. Zamiast tego wyobrażam sobie, że projektanci VHDL wykonali swoją pracę z int i zgubili się w konwersji typu.

Istnieją dwa miejsca, w których możesz zagubić się w konwersji typu: (a) projekt i (b) stanowisko testowe. Dla mnie łatwiej jest napisać stanowisko testowe (prawie) całkowicie w std_logic, więc samo stanowisko testowe jest (prawie) syntezowalne. Przez „prawie” rozumiem, że zdefiniuję zegar z opóźnionym przydziałem, którego nie można zsyntetyzować. Ale poza tym (i komentarzami) nie można odróżnić moich stanowisk testowych od zsyntetyzowanej logiki.

W każdym razie, zanim zdecydujesz się na pierwszy język do nauki (prawie wszyscy mają preferencje, ale prawie wszyscy używają obu), radziłbym sprawdzić ten konkurs i przeczytać komentarz na jego temat.

Jednym z problemów, które zaobserwowałem w VHDL, jest to, że ponieważ jest to bardzo szczegółowy język, wydaje się, że (w opinii projektantów) istnieje tendencja do przekonania, że ​​nie wymaga on komentarzy. Nie jest to oczywiście prawda, powinieneś pisać komentarze przed kodem.

Carl Brannen
źródło
1
Myślę, że to interesujące twierdzenie, że silne pisanie VHDL jest największym problemem. Dla mnie mocne pisanie jest centralną cechą, która pozwala mi podnieść poziom abstrakcji. W projektowaniu sprzętu masz wybór między opisaniem struktury, która implementuje zachowanie, lub opisaniem zachowania, które implementuje strukturę. Historia pokazała, że ​​abstrakcja jest kluczem do udanego projektowania dużych systemów, a systemy cyfrowe nie są wyjątkiem. Dlatego uważam, że bardzo tęsknisz, ograniczając się do bardzo wąskiego zestawu funkcji językowych.
trondd,
2
To prawda, ale nie specjalizuję się w „projektowaniu dużych systemów”, specjalizuję się w małych rzeczach, które muszą być niezwykle wydajne. Istnieje wiele powodów, dla których sprawność czasami staje się najważniejsza w projektowaniu elektroniki. Czasami duży system składa się z wielu z tych małych systemów, a tego rodzaju konstrukcja zapewnia znacznie większą wydajność.
Carl Brannen,
5

Zważę na dwa centy: sam jestem dużym użytkownikiem VHDL, ale Verilog z pewnością może wykonać tę pracę równie dobrze. Zawsze możesz owijać jeden w drugi (choć czas i koszt pisania).

Odkryłem, że surowy VHDL nie ma wielu przydatnych funkcji. (LUB lub AND: przychodzi mi na myśl całe std_logic_vector). Tak więc zbudowanie zestawu narzędzi z debugowanymi, syntezowalnymi funkcjami znacznie zwiększa wydajność podczas korzystania z VHDL.

Może ktoś mógłby odwołać się do dobrej biblioteki typu open source, która oferuje wszystkie te „dobre do posiadania” funkcje?

ErikAndren
źródło
2
Jestem pewien, że redukcja ORAZ / LUB jest zawarta w VHDL 2008 wraz z kilkoma innymi przydatnymi aktualizacjami.
ks0ze,
4

Poprzednie odpowiedzi w zasadzie obejmują kontrasty między dwoma językami, a ten artykuł całkiem dobrze omawia te kwestie: http://www.bitweenie.com/listings/verilog-vs-vhdl/

Chciałbym również dodać jeszcze kilka punktów, o których nie wspomniano.

Polecam najpierw naukę VHDL z kilku powodów. Silne pisanie pomaga uchwycić kompilatorowi kilka łatwych błędów początkujących. Słyszałem również, że VHDL jest trudniejszy do pobrania po pierwszym użyciu Verilog.

Szczerze mówiąc, nie można się pomylić z żadnym językiem; a jeśli pracujesz w tej branży bardzo długo, ostatecznie i tak będziesz uczyć się obu języków.

użytkownik19460
źródło