Hej,
Przymierzając się do zabawy z CPLD zacząłem uczyć się VHDLa z książki "The Designer's Guide To VHDL" (trzecia edycja).
W ćwiczeniach na końcu pierwszego rozdziału każą napisać "entity declaration and a behavioral architecture body" (polskie tłumaczenie, które przychodzi mi na myśl, brzmi idiotycznie) prostego multipleksera. Dwa wejścia ('a' i 'b'), sygnał wybierający ('sel') i wyjście 'z'. Wyjście ma przyjąć wartość wejścia 'b' dla sel=1 lub 'a' dla sel=0.
Napisałem:
#v+ entity mux2 is port (a, b, sel: in bit; z: out bit); end entity mux2;
architecture mux2_behav of mux2 is begin mux2: process is begin if sel then z <= b after 5ns; else z <= a after 5ns; end if; end process mux2; end architecture mux2_behav; #v-
i jest problem, bo teraz chcę to zasymulować.
Debianowe apt-cache znajduje mi m.in.:
fauhdlc - experimental VHDL compiler and interpreter freehdl - VHDL simulator for Linux
gvhdl (frontend do freehdl) niestety twierdzi, że:
#v+ $ gvhdl ch1-10.vhdl gvhdl: FreeHDL root path is '/usr'. gvhdl: executing '/usr/bin/freehdl-v2cc -m ch1-10._main_.cc -L /usr/share/freehdl/lib -o ch1-10.cc ch1-10.vhdl' ch1-10.vhdl: in mux2(mux2_behav): ch1-10.vhdl:7: sel does not match required type BOOLEAN, its type could be: /usr/share/freehdl/lib/std/standard.vhdl:6: BIT v2cc: ch1-10.vhdl: 1 errors gvhdl: Compilation failed! Died at /usr/bin/gvhdl line 211. #v-
fauhdlc nie rozpoznaje symbolu 5ns:
#v+ $ fauhdlc ch1-10.vhdl ERROR> ch1-10.vhdl:8: Symbol '5ns' undefined. ERROR> ch1-10.vhdl:10: Symbol '5ns' undefined. #v-
a po wykomentowaniu go twierdzi mniej więcej to samo, co freehdl:
#v+ $ fauhdlc ch1-10.vhdl ERROR> ch1-10.vhdl:7: Type error for <sel>. #v-
Rozumiem że nie pasuje im "if sel then", bo sel jest typu 'bit', a nie boolean.
Stąd pytania:
- Czy robię coś nie tak? Czy nie można w ten sposób porównywać bitów, lub można tylko od określonej wersji języka (np. 2008)? Książka twierdzi, że można, zresztą przykłady z niej wykładają się w analogiczny sposób.
- Nie wiem, czy te dwa symulatory w ogóle obsługują VHDL-2008. Próbowałem zrobić komentarz /* ... */, a nie --, bo to podobno cecha VHDL-2008 (poniżej można tylko --). Nie rozpoznały, wyłożyły się na tym. Nie widzę też nigdzie opcji wyboru wersji języka.
- Jaki symulator polecacie? Niekoniecznie dla Linuksa, choć to byłoby duże ułatwienie. Chodzi o naukę, ale ukierunkowaną na to, żeby prędzej czy później stworzyć model, który da się zsyntetyzować do postaci, którą da się wrzucić do CPLD.