VHDL/Składnia

Z Wikibooks, biblioteki wolnych podręczników.

W tym rozdziale omówiona zostanie składnia języka VHDL, która to jest podobna do składni języków takich, jak Pascal i Ada.


Komentarze[edytuj]

Komentarz w języku VHDL rozpoczyna się dwoma myślnikami (--), a jego ważność ogranicza koniec linii. Komentarz nie musi rozpoczynać linii.

-- To jest komentarz
kod VHDL

Stosowanie komentarzy pozwala na opisanie kodu, co znacznie pomaga w jego zrozumieniu, szczególnie osobom, które nie są jego autorami.


Identyfikatory[edytuj]

Identyfikatorem może być dowolny ciąg alfanumeryczny (łącznie ze znakami podkreślenia) spełniający następujące warunki:

  • zaczyna się od litery,
  • kończy się znakiem innym niż podkreślenie,
  • nie ma dwóch znaków podkreślenia następujących zaraz po sobie.

Przykłady identyfikatorów:

-- te identyfikatory są równoznaczne:
MojaZmienna
mojazmienna
mOjAZMIENNa

-- ale ten już jest innym identyfikatorem niż powyższe:
Moja_Zmienna

Liczby[edytuj]

Reprezentacja dziesiętna[edytuj]

Liczby mogą być reprezentowane zarówno w systemie dziesiętnym, jak i każdym innym, gdzie baza mieści się pomiędzy 2 i 16. Jeśli w ciągu cyfrowym znajdzie się znak kropki (.), to ciąg ten jest interpretowany jako liczba zmiennopozycyjna, w przeciwnym wypadku - gdy kropki nie ma - jako liczba całkowita. W ciągu tym może również znajdować się znak podkreślenia (_) wykorzystywany do czytelnego zapisu długich liczb. Podkreślenie nie może być jednak ani pierwszym znakiem, ani ostatnim - nie może również następować zaraz po sobie. Do wyrażenia liczb w formacie wykładniczym stosuje się (zaraz po ciągu cyfr) znak E, za którym określa się wykładnik. Wykładnik może zaczynać się od znaku plus (+) lub minus (-) i zawiera jedynie cyfry. Przykłady zapisu liczb:

-- liczby całkowite:
0      1      123_456_789       987E6
 
-- liczby zmiennopozycyjne:
0.0    0.5    2.718_28          12.4E-9

Inne systemy liczbowe[edytuj]

Liczby o innej bazie niż 10 zapisuje się w ten sposób:

  • liczba dziesiętna określająca bazę (np. 16),
  • znak #,
  • właściwa liczba (o jej zapisie poniżej),
  • znak #,
  • ew. wykładnik (rozpoczynany znakiem E).

Ogólnie format zapisu wspomnianej właściwej liczby jest taki sam, jak dla liczb dziesiętnych z tą różnicą, że dla systemów, gdzie baza jest większa od 10, stosuje się początkowe litery alfabetu łacińskiego (wielkość znaków nie gra roli), a wykładnik (wyrażony dziesiętnie) można określić dopiero po znaku #. Dziesiętną liczbę całkowitą 196 można zapisać zatem tak:

 2#1100_0100#       16#C4#       4#301#E1

a liczbę zmiennopozycyjną 4095.0 tak:

 2#1.1111_1111_111#E+11          16#F.FF#E2


Znaki[edytuj]

W języku VHDL można używać jedynie znaków ASCII. Pojedynczy znak otacza się apostrofami ('), na przykład:

'A'      '*'      '''      ''


Ciągi znaków[edytuj]

Ciąg znaków otacza się cudzysłowami ("). Jeśli istnieje potrzeba, aby zawrzeć w ciągu sam cudzysłów, należy napisać go podwójnie. Ciągi znaków mogą być używane jako wartości dla obiektów będących tablicą znaków. Przykłady ciągów znaków:

"Jestem napisem"                         -- zwykły ciąg znaków,
""                                       -- pusty ciąg,
"Napis w napisie: ""Jestem napisem"". "  -- ciąg zawierający cudzysłów.

Ciągi bitów[edytuj]

Język VHDL wprowadza strukturę zwaną ciągiem bitów wykorzystywaną do przypisywania wartości tablicom bitów. Ciąg bitów nie musi być zapisany w systemie dwójkowym (B od Binary) - mogą to być systemy ósemkowy (O od Octal) i szesnastkowy (X od heXadecimal). Aby parser wiedział jakiego systemu liczbowego użyto, taki ciąg należy poprzedzić znakiem go specyfikującym: B, O lub X. Po specyfikatorze zapisuje się liczbę otoczoną - podobnie jak ciągi tekstowe - cudzysłowami. Znakami użytymi do zapisania tej liczby mogą być tylko cyfry odpowiednie dla danego systemu i znak podkreślenia, który nie może być ani pierwszym znakiem, ani ostatnim, ani występować zaraz po sobie. Użyta tu liczba może być tylko liczbą całkowitą. Przykłady ciągów bitów:

 B"1010110"     -- długość ciągu wynosi 7,
 O"126"         -- długość ciągu wynosi 9, jest to odpowiednik zapisu B"001_010_110",
 X"56"          -- długość ciągu wynosi 8, jest to odpowiednik zapisu B"0101_0110".