VHDL/Operacje na zmiennych: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
dodanie tagów source
Linia 12:
 
Przykłady:
<source lang="vhdl">
 
''sygnał1'' <= '0';
''sygnał2'' <= "001";
</source>
 
{{Uwaga|Podczas przypisywania wartości istnieje rozróżnienie między skalarem, a wektorem. Do przypisania pojedynczej wartości (skalaru) stosuje się znak apostrofu ('). Do przypisania całego wektora stosuje się znak cudzysłowu (").}}
Linia 25 ⟶ 26:
 
Przykłady:
<source lang="vhdl">
 
''zmienna1'' := '0';
''zmienna2'' := "001";
</source>
 
{{Uwaga|Tutaj też ma zastosowanie uwaga odnośnie apostrofu i cudzysłowu (patrz poprzedni punkt).}}
Linia 34 ⟶ 36:
 
Choć ''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:
<source lang="vhdl">
 
''sygnał1'' <= ''zmienna1'';
''zmienna2'' := ''sygnał2'';
</source>
 
==Kopiowanie części wektora==
 
Przy 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 [[VHDL/Typy danych|Typy danych]]). Przykładowo, jeśli ''sygnał1'' ma wartość "011", to zapis:
<source lang="vhdl">
 
''sygnał2'' <= ''sygnał1'' (2 downto 1);
</source>
 
spowoduje przypisanie do ''sygnał2'' wartości ''"01"''.
Linia 55 ⟶ 59:
 
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:
<source lang="vhdl">
''sygnał1'' <= ''sygnał2''(1);
</source>
 
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:
<source lang="vhdl">
 
''wektor'' <= ''skalar1'' & ''skalar2'' & ''skalar3'';
</source>
 
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ę '''koniunkcji''', zaś znak ''&'' nazywany jest ''operatorem koniunkcji''. Istnieje możliwość koniunkcji 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:
<source lang="vhdl">
 
''sygnał4'' <= ''skalar2'' & ''sygnał2''(2 downto 1) & ''skalar1'';
</source>
 
spowoduje przypisanie do ''sygnał4'' wartości ''0101''.
 
= Operacje logiczne =
 
==Podstawowe informacje ==
W VHDLu można dokonać podstawowych operacji logicznych przy użyciu następujących słów kluczowych:
'''
* and
* or
* not
* xor
'''
 
Przykład operacji logicznych
<source lang="vhdl">
 
c <= a '''and''' b;
</source>
 
{{Uwaga|Tak jak przy przypisywaniu, tak i przy operacjach logicznych, musi być zachowana taka sama długość obu argumentów.}}
Linia 91 ⟶ 99:
 
Do zagnieżdżania operacji logicznych służą nawiasy. Przykładowo:
<source lang="vhdl">
 
c <= '''not''' (a '''and''' b);
</source>
 
da w efekcie operację '''nand'''.