«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο 2016-2017 VHDL, Χαρακτηριστικά και τρόποι περιγραφής Δρ. Παρασκευάς Κίτσος Επίκουρος Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ http://diceslab.cied.teiwest.gr E-mail: pkitsos@teimes.gr Αντίρριο 13/10/2015
ΔΟΜΗ VHDL ΚΩΔΙΚΑ Βιβλιοθήκες: Δήλωση των βιβλιοθηκών που θα χρησιμοποιηθούν (περιέχουν τους τύπους δεδομένων που θα χρησιμοποιηθούν στον κώδικα) Οντότητα (Entity declaration): δήλωση ακροδεκτών εισόδου, εξόδου Αρχιτεκτονική (Architecture body): περιγραφή του τρόπου λειτουργίας του κυκλώματος, μπορεί να αποτελείται από διασυνδεδεμένες δομικές μονάδες (components), διαδικασίες (processes) και αναθέσεις σημάτων, τα οποία λειτουργούν παράλληλα
ΒΙΒΛΙΟΘΗΚΕΣ Για τη δήλωση της βιβλιοθήκης απαιτούνται Αρχικά η δήλωση του ονόματός της Η δήλωση χρήσης συγκεκριμένου πακέτου από τη παραπάνω βιβλιοθήκη --------------------------------------- LIBRARY όνομα_βιβλιοθήκης; USE όνομα_βιβλιοθήκης.όνομα_πακέτου.μέρη_πακέτου; --------------------------------------- Το (;) υποδηλώνει το τέλος της εντολής, ενώ οι δύο συνεχόμενες παύλες (--) υποδηλώνουν σχόλιο Π.χ. LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY work; USE work.all; Παρατήρηση: Περισσότερα για τις βιβλιοθήκες στους τύπους δεδομένων
ΟΝΤΟΤΗΤΑ (ENTITY) (1/3) Περιγράφει των τρόπο διασύνδεσης του κυκλώματος Δήλωση των ακροδεκτών (θυρών) εισόδων-εξόδων του κυκλώματος Δήλωση σταθερών που επηρεάζουν την αρχιτεκτονική Τύποι ακροδεκτών (mode): IN, OUT, INOUT, BUFFER IN: Είσοδος OUT: Έξοδος, δε διαβάζεται εσωτερικά INOUT: Είσοδος Έξοδος BUFFER: Έξοδος, που διαβάζεται και εσωτερικά Τύποι δεδομένων: bit/ bit_vector std_logic/ std_logic_vector Boolean/ integer/ real κλπ
ΟΝΤΟΤΗΤΑ (ENTITY) (2/3) Στη δήλωση generic μπορούμε να δηλώσουμε σταθερές που προσδιορίζουν το κύκλωμα (επηρεάζουν την αρχιτεκτονική) Συνήθως καθορίζουν χρόνο και μέγεθος Δεν είναι υποχρεωτική η χρήση της
ΟΝΤΟΤΗΤΑ (ENTITY) (3/3) Πύλη NAND 2 εισόδων FF τύπου D ENTITY nand_gate IS PORT (A, B : IN BIT; X: OUT BIT); END nand_gate; ENTITY dff IS PORT (d, clk, rst: IN STD_LOGIC; q: OUT STD_LOGIC); END dff;
ΑΡΧΙΤΕΚΤΟΝΙΚΗ (1/2) Περιέχει την περιγραφή του τρόπου συμπεριφοράς και διασύνδεσης του κυκλώματος Δηλώνονται σταθερές, σήματα, υποπρογράμματα κ.λ.π.
ΑΡΧΙΤΕΚΤΟΝΙΚΗ (2/2) Πύλη NAND 2 εισόδων ARCHITECTURE my_arch OF nand_gate IS BEGIN X<=A nand B; END my_arch; Ίδιο όνομα με την ENTITY
ΤΡΟΠΟΙ ΠΕΡΙΓΡΑΦΗΣ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Στη VHDL υπάρχουν τρεις τρόποι περιγραφής μιας αρχιτεκτονικής Συντρέχων (dataflow) που εκτελείται παράλληλα Ακολουθιακός (behiavioral) που εκτελείται διαδοχικά (ή ακολουθιακά) Με χρήση υποκυλωμάτων (structural) κατά το οποίο ένα κύκλωμα για τη κατασκευή του χρησιμοποιεί άλλα υποκυκλώματα (μικρότερης ιεραρχίας). Π.χ ένας πλήρης αθροιστής των 8-bit κατασκευάζεται από οκτώ πλήρης αθροιστές 1-bit ο καθένας
ΡΟΗ ΣΧΕΔΙΑΣΜΟΥ ΨΗΦΙΑΚΩΝ ΚΥΚΛΩΜΑΤΩΝ Συγγραφή κώδικα VHDL Μεταγλώττιση κώδικα σε ένα δικτύωμα πυλών Βελτιστοποίηση ως προς τη ταχύτητα ή την επιφάνεια Δυνατότητα προσομοίωσης Φυσικός Σχεδιασμός (Τοποθέτηση και Καλωδίωση) Δυνατότητα προσομοίωσης
ΜΕΤΑΓΛΩΤΤΙΣΗ
ΠΡΟΣΟΜΟΙΩΣΗ Προσομοίωση του πλήρη αθροιστή του 1-bit
ΚΥΚΛΟΣ ΠΡΟΣΟΜΟΙΩΣΗΣ H VHDL χρησιμοποιεί έναν κύκλο προσομοίωσης για τη μοντελοποίηση της διέγερσης (stimulus) και της απόκρισης (response) των ψηφιακών κυκλωμάτων
ΔΕΣΜΕΥΜΕΝΕΣ ΛΕΞΕΙΣ ΤΗΣ VHDL
ΙΕΡΑΡΧΙΚΟΣ ΣΧΕΔΙΑΣΜΟΣ ΣΤΗ VHDL
EΝΑ ΠΑΡΑΔΕΙΓΜΑ VHDL 1 LIBRARY ieee; 2 USE ieee.std_logic_1164.all; 3 --------------------------------------- 4 ENTITY example IS 5 PORT (a, b, clk: IN BIT; 6 q: OUT BIT); 7 END example; 8 --------------------------------------- 9 ARCHITECTURE example OF example IS 10 SIGNAL temp : BIT; 11 BEGIN 12 temp <= a NAND b; 13 PROCESS (clk) 14 BEGIN 15 IF (clk'event AND clk='1') THEN q<=temp; 16 END IF; 17 END PROCESS; 18 END example; ---------------------------------------
H ΠΡΟΣΟΜΟΙΩΣΗ ΤΟΥ ΚΥΚΛΩΜΑΤΟΣ
ΠΛΗΡΗΣ ΑΘΡΟΙΣΤΗΣ ΤΟΥ 1-ΒΙΤ (1/2) a b cin
ΠΛΗΡΗΣ ΑΘΡΟΙΣΤΗΣ ΤΟΥ 1-ΒΙΤ (2/2) library IEEE; use IEEE.std_logic_1164.all; entity full_adder is port ( a : in STD_LOGIC; b : in STD_LOGIC; cin : in STD_LOGIC; s : out STD_LOGIC; cout : out STD_LOGIC); end full_adder; a b cin architecture structural of full_adder is begin s <= a xor b xor cin; cout <= (a and b) OR (cin and (a xor b)); end structural;
ΧΡΟΝΙΚΗ ΚΑΘΥΣΤΕΡΗΣΗ (DELAY) (1/2) Η ενημέρωση των τιμών εξόδου παρουσιάζει χρονική καθυστέρηση σε σχέση με τις εφαρμοζόμενες τιμές εισόδου Οι τύποι της χρονικής καθυστέρησης είναι δύο Αδρανειακή (inertial) καθυστέρηση: καθυστέρηση διάδοσης λόγω εσωτερικής αδράνειας απόκρισης. Πχ. signal1 <= not signal2 after 15 nsec Καθυστέρηση βήματος «δέλτα» (delta delay): αυτή η μονάδα προσδιορίζει το χρόνο που χρειάζεται για την ανανέωση των σημάτων στο κύκλωμα (εσωτερικών ή εξόδων) Υπολογισμοί των σημάτων σε βήματα delta έως ότου δεν υπάρχει πλέον δραστηριότητα (activity) στο κύκλωμα
ΧΡΟΝΙΚΗ ΚΑΘΥΣΤΕΡΗΣΗ (DELAY) (2/2)
ΣΗΜΑΤΑ-ΜΕΤΑΒΛΗΤΕΣ Η VHDL παρέχει δύο αντικείμενα για το χειρισμό μη στατικών τιμών των δεδομένων Τα σήματα (Signals) και τις μεταβλητές (Variables) Παρέχει επίσης τρόπους για τον καθορισμό στατικών τιμών Τις σταθερές (Constants) και την εντολή Generic Τα σήματα και οι σταθερές μπορεί να είναι καθολικά Δηλαδή να είναι ορατά από ολόκληρο τον κώδικα Χρησιμοποιούνται είτε σε συντρέχοντα είτε σε ακολουθιακό κώδικα Οι μεταβλητές έχουν τοπική εμβέλεια Χρησιμοποιούνται μόνο σε ακολουθιακό κώδικα
CONSTANT (1/2) Το αντικείμενο constant χρησιμοποιείται για τον καθορισμό προεπιλεγμένων τιμών Συντάσσεται όπως παρακάτω -------------------------------------- Constant όνομα : τύπος := τιμή; -------------------------------------- Π.χ. Constant set_bit : std_logic := 1 ;
CONSTANT (2/2) Οι Constants μπορούν να δηλωθούν σε ένα πακέτο ή σε μια entity ή σε μια architecture Όταν δηλώνεται σε ένα πακέτο είναι πλήρως καθολικά μια και το πακέτο μπορεί να χρησιμοποιηθεί από πολλές οντότητες Όταν δηλώνεται σε μια οντότητα (μετά τον όρο port) είναι καθολικά για όλες τις αρχιτεκτονικές που ακολουθούν αυτή την οντότητα Όταν δηλώνεται σε μια αρχιτεκτονική είναι καθολική μόνο για τον κώδικα της συγκεκριμένης ενότητας architecture
To Signal χρησιμοποιείται SIGNAL (1/2) Για τη μετάδοση τιμών εσωτερικά και εξωτερικά του κυκλώματος Μεταξύ των εσωτερικών μονάδων Αναπαριστάνει κυκλωματικές διασυνδέσεις (καλώδια) Όλοι οι ακροδέκτες (ports) μιας οντότητας (entity) είναι εξ ορισμού τύπου signal ------------------------------- Signal όνομα: τύπος [εύρος] [:=αρχική_τιμή]; ------------------------------- Π.χ. Signal control: BIT := 0 ; signal y: std_logic_vector(7 downto 0);
SIGNAL (2/2) H δήλωση του signal μπορεί να γίνει στα ίδια σημεία όπως και της constant Όταν το signal χρησιμοποιείται σε μια διεργασία (process) σε ακολουθιακό κώδικα η τιμή του αναμένεται με το τέλος της διεργασίας
--------------------------------------- LIBRARY ieee; USE ieee.std_logic_1164.all; --------------------------------------- ENTITY count_ones IS ΠΑΡΑΔΕΙΓΜΑ PORT (din: IN STD_LOGIC_VECTOR (7 DOWNTO 0); ones: OUT INTEGER RANGE 0 TO 8); END count_ones; --------------------------------------- ARCHITECTURE not_ok OF count_ones IS SIGNAL temp: INTEGER RANGE 0 TO 8; BEGIN PROCESS (din) BEGIN temp <= 0; FOR i IN 0 TO 7 LOOP IF (din(i)='1') THEN temp <= temp + 1; END IF; END LOOP; ones <= temp; END PROCESS; END not_ok;
VARIABLE (1/2) Οι Variables αναπαριστάνουν μόνο τοπικές πληροφορίες και δηλώνονται (και χρησιμοποιούνται) μόνο μέσα σε μια διεργασία, συνάρτηση και μια διαδικασία Η τιμή της δεν μπορεί να μεταβιβαστεί άμεσα έξω από τον ακολουθιακό κώδικα Η ενημέρωσή της είναι άμεση Οπότε μπορεί να χρησιμοποιηθεί απευθείας στην επόμενη γραμμή κώδικα Συντάσσεται όπως παρακάτω ------------------------------- Variable όνομα : τύπος [εύρος] [:=αρχική τιμή] -------------------------------
VARIABLE (2/2) Π.χ. Variable control: BIT := 0 ; Variable count : integer range 0 to 50; Variable X: std_logic_vector(7 downto 0) := 1101001 ;
--------------------------------------- LIBRARY ieee; USE ieee.std_logic_1164.all; --------------------------------------- ENTITY count_ones IS ΠΑΡΑΔΕΙΓΜΑ PORT (din: IN STD_LOGIC_VECTOR (7 DOWNTO 0); ones: OUT INTEGER RANGE 0 TO 8); END count_ones; --------------------------------------- ARCHITECTURE ok OF count_ones IS BEGIN PROCESS (din) VARIABLE temp: INTEGER RANGE 0 TO 8; BEGIN temp := 0; FOR i IN 0 TO 7 LOOP IF (din(i)='1') THEN temp := temp + 1; END IF; END LOOP; ones <= temp; END PROCESS; END ok;
SIGNAL Vs VARIABLE
ΠΟΛΥΠΛΕΚΤΗΣ Πολυπλέκτης 2-σε-1 Γενικά 2 n -σε-1 2 n είσοδοι δεδομένων 1 έξοδος δεδομένων n είσοδοι επιλογής Γενική λειτουργία: If s=0 =>Y=I 0 If s=1 =>Y=I 1
ΠΟΛΥΠΛΕΚΤΗΣ (1 η ΛΥΣΗ LIBRARY ieee; USE ieee.std_logic_1164.all; ----------------------------------------- ENTITY mux IS PORT (a, b, c, d, s0, s1: IN STD_LOGIC; y: OUT STD_LOGIC); END mux; ----------------------------------------- ARCHITECTURE not_ok OF mux IS SIGNAL sel : INTEGER RANGE 0 TO 3; BEGIN PROCESS (a, b, c, d, s0, s1) BEGIN sel <= 0; IF (s0= 1 ) THEN sel <= sel + 1; END IF; IF (s1= 1 ) THEN sel <= sel + 2; END IF; CASE sel IS WHEN 0 => y<=a; WHEN 1 => y<=b; WHEN 2 => y<=c; WHEN 3 => y<=d; END CASE; END PROCESS; END not_ok; ----------------------------------------- ΛΑΝΘΑΣΜΕΝΗ)
ΠΟΛΥΠΛΕΚΤΗΣ (2 η ΛΥΣΗ ΣΩΣΤΗ) ----------------------------------------- LIBRARY ieee; USE ieee.std_logic_1164.all; ----------------------------------------- ENTITY mux IS PORT (a, b, c, d, s0, s1: IN STD_LOGIC; y: OUT STD_LOGIC); END mux; ----------------------------------------- ARCHITECTURE ok OF mux IS BEGIN PROCESS (a, b, c, d, s0, s1) VARIABLE sel : INTEGER RANGE 0 TO 3; BEGIN sel := 0; IF (s0= 1 ) THEN sel := sel + 1; END IF; IF (s1= 1 ) THEN sel := sel + 2; END IF; CASE sel IS WHEN 0 => y<=a; WHEN 1 => y<=b; WHEN 2 => y<=c; WHEN 3 => y<=d; END CASE; END PROCESS; END ok;
ΠΟΛΥΠΛΕΚΤΗΣ: ΠΡΟΣΟΜΟΙΩΣΗ
Απορίες???