Data Flow Descriptions
5. Άλλοι Τελεστές
Στην προηγούμενη ενότητα αναφερθήκαμε σε κάποιους τύπους που είναι διαθέσιμοι στην VHDL. Υπάρχουν ακόμη ενσωματωμένοι μερικοί τελεστές οι οποίοι μπορούν να χρησιμοποιηθούν με αυτούς τους τύπους.
Οι λογικοί τελεστές NOT, AND, OR, NAND, NOR, XOR μπορούν να χρησιμοποιηθούν με οποιοδήποτε τύπο bit ή bit_vector. Όταν χρησιμοποιούνται σαν τελεστές σε bit τότε έχουν το συνηθισμένο νόημα. Όταν χρησιμοποιούνται με bit_vectors, τότε τα bit_vectors πρέπει να έχουν το ίδιο πλήθος στοιχείων, και η πράξη γίνεται bitwise. Για παράδειγμα , η πράξη "00101001" xor "11100101" έχει αποτέλεσμα "11001100" .
Σημείωση: όπως το"0" και "1" αντιπροσωπεύουν σταθερές τιμές bit, οι σταθερές bit_vector μπορούν να γραφούν στην VHDL σαν μία λίστα από τιμές bit με double quotes. Π.χ. αν το d είναι bit_vector(1 to 4) η παρακάτω πρόταση δίνει στο d μόνιμες τιμές d(1)='1', d(2)='1', d(3)='0', d(4)='0':
d<=x"c";
Ο "C" είναι ο δεκαεξαδικός αριθμός 12, ο οποίος στο δυαδικό είναι 1100. Το "x" μπροστά από τον "c" δηλώνει ότι ο αριθμός είναι δεκαεξαδικός και όχι δυαδικός.
Οι τυπικοί αλγεβρικοί τελεστές ' + ',' - ',' * ' (πολλαπλασιασμός), ' / ' (διαίρεση) , είναι διαθέσιμοι για ακέραιους. Αν και αυτοί οι τελεστές δεν είναι ενσωματωμένοι για bit_vectors, συχνά παρέχονται σε βιβλιοθήκες (libraries) που δίνονται μαζί με το software της VHDL.
Επίσης προκαθορισμένοι είναι οι κανονικοί σχεσιακοί τελεστές (normal relational operators) : = , /= (όχι ίσο) , < , > , <= και >= και έχουν την συνηθισμένη τους σημασία. Το αποτέλεσμα αυτών των τελεστών είναι ένας αριθμός boolean (TRUE ή FALSE). Τα arguments των τελεστών <,>,<=,>= πρέπει να είναι τύπου scalar (integer, real και physical types) ή τύπου bit_vector. Αν τα arguments είναι bit_vector , τότε πρέπει να έχουν το ίδιο μήκος και το αποτέλεσμα είναι TRUE αν η σχέση είναι TRUE για κάθε σχετιζόμενο στοιχείο του array arguments.
Ο τελεστής ' & ' είναι ενσωματωμένος στην VHDL και εκτελεί την αλληλουχία των bit_vectors. Για παράδειγμα έχουμε τις παρακάτω δηλώσεις:
signal a : bit_vector (1 to 4);
signal b : bit_vector (1 to 8);
Η παρακάτω πρόταση θα συνδέσει το a με το δεξί μισό του b και θα κάνει το αριστερό μισό του b "0".
b<= "0000" & a;
Το & επισυνάπτει το a στο τέλος του "0000" για να σχηματιστεί ένα αποτέλεσμα που περιέχει οχτώ bits.