VHDL/Operacje na zmiennych
W tym rozdziale zostaną omówione zagadnienia związane z operacjami stosowanymi w VHDL.
Operacje przypisywania
edytujJak wspomniano w rozdziale Typy danych, w VHDL istnieje rozróżnienie między sygnałem, a zmienną. Ma to odzwierciedlenie w sposobie przypisywania wartości do nich.
Przypisywanie do sygnałów
edytujW celu przypisania wartości do sygnału stosuje się operator <=, oraz zapis:
sygnał <= wartość;
Przykłady:
sygnał1 <= '0';
sygnał2 <= "001";
Uwaga!
|
Przypisywanie do zmiennych
edytujW celu przypisania wartości do zmiennej stosuje się operator :=, oraz zapis:
zmienna := wartość;
Przykłady:
zmienna1 := '0';
zmienna2 := "001";
Uwaga!
|
Sygnały, a zmienne
edytujChoć zmienne i sygnały różnią się miedzy sobą, można dokonywać miedzy nimi kopiowania wartości, jeśli mają zgodne typy. Ważne jest jednak, by zastosować odpowiedni operator. Jego wybór uzależniony jest od tego do czego przypisywana jest wartość. Przykładowo:
sygnał1 <= zmienna1;
zmienna2 := sygnał2;
Kopiowanie części wektora
edytujPrzy stosowaniu operatora przypisania do wektora należy zachować odpowiednią wielkość wektorów po obu stronach operatora. Istnieje jednak czasem potrzeba "wykrojenia" z wektora jego części, by móc ją przypisać do innego wektora. Czyni się to po przez stosowanie słów kluczowych to i downto (stosowanych już w rozdziale Typy danych). Przykładowo, jeśli sygnał1 ma wartość "011", to zapis:
sygnał2 <= sygnał1 (2 downto 1);
spowoduje przypisanie do sygnał2 wartości "01".
Konkatenacja
edytujJak wspomniano w rozdziale Typy danych, w VHDL można deklarować zarówno wektory jak i skalary. Istnieje jednak możliwość przypisania wartości z wektora do skalaru, jak i na odwrót.
Zapis:
skalar <= wektor(indeks);
spowoduje przypisanie do sygnału skalar wartości z sygnału wektor o indeksie indeks. Przykładowo, jeśli sygnał2 ma wartość 101, to zapis:
sygnał1 <= sygnał2(1);
spowoduje przypisanie do sygnał1 wartości 0 (jak więc widać jest to szczególny przypadek kopiowania części wektora).
Można też z kilku skalarów utworzyć nową wartość wektora, po przez zapis:
wektor <= skalar1 & skalar2 & skalar3;
Przykładowo, jeśli skalar1 ma wartość 1, a skalar2 i skalar3 mają wartości 0, to powyższy zapis spowoduje przypisanie wartości 100 do zmiennej wektor.
Ta druga operacja (tworzenie wektora ze skalarów) ma nazwę konkatenacji, zaś znak & nazywany jest operatorem konkatenacji. Istnieje możliwość konkatenacji nie tylko skalarów, ale i wektorów, oraz wektorów i skalarów. Przykładowo (pozostając przy wartościach z poprzednich przykładów), zapis:
sygnał4 <= skalar2 & sygnał2(2 downto 1) & skalar1;
spowoduje przypisanie do sygnał4 wartości 0101.
Operacje logiczne
edytujPodstawowe informacje
edytujW VHDLu można dokonać podstawowych operacji logicznych przy użyciu następujących słów kluczowych:
- and
- or
- not
- xor
Przykład operacji logicznych
c <= a and b;
Uwaga!
|
Zagnieżdżanie operacji logicznych
edytujDo zagnieżdżania operacji logicznych służą nawiasy. Przykładowo:
c <= not (a and b);
da w efekcie operację nand.
Operacje arytmetyczne
edytujTen artykuł należy dopracować |
Język VHDL sam w sobie nie posiada obsługi operacji arytmetycznych. Jednak można to "obejść" po przez stosowanie biblioteki standardowej napisanej przez IEEE. Potrzebny pakiet nazywa się IEEE.numeric_std, a spis jego dokumentacja jest dostępna w Internecie[1].
Operacje warunkowe
edytujUwaga!
|
IF
edytujIF warunek THEN instrukcje; END IF;
IF warunek1 THEN instrukcje; ELSIF warunek2 THEN instrukcje; END IF;
CASE
edytujCASE wyrazenie IS WHEN wartosc1 => instrukcje; WHEN wartosc2 => instrukcje; END CASE;
CASE wyrazenie IS WHEN wartosc1 => instrukcje; WHEN wartosc2 => instrukcje; WHEN OTHERS => instrukcje; END CASE;