Περιγραφή Κυκλωμάτων με χρήση της VHDL Καταχωρητές και χρονισμός με ρολόι
Οργάνωση Παρουσίασης Διεργασίες (κανόνες) Ακολουθιακές Δηλώσεις (Sequential Statements) Καταχωρητές και χρονισμός Συμπληρωματική βιβλιογραφία / αναφορές ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 2
Κανόνες για διεργασίες Απαγορεύεται η ταυτόχρονη χρήση sensitivity list και wait Διαδικασία με sensitivity list διεγείρεται τη χρονική στιγμή t=0 Όλα τα σήματα έχουν πάντα μια αρχική τιμή στο t=0 Υποτίθεται ότι υπάρχει ένα wait statement στο τέλος Μόνο στατικά σήματα πρέπει να υπάρχουν στη sensitivity list Ένα σήμα είναι στατικό όταν έχει σταθερό πρόθεμα (prefix) και παίρνει μια διακριτή τιμή ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 3
Κανόνες για διεργασίες Η εκτέλεση της διεργασίας συνίσταται στη διαρκή εκτέλεση των δηλώσεων που εμπεριέχει Απαραίτητη η χρήση sensitivity list ή wait statement ΠΡΟΣΟΧΗ στη δημιουργία ατέρμονα κύκλου (infinite loop) PROCESS a <= 1 ; END PROCESS; Η διεργασία εκτελείται διαρκώς (infinite loop) ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 4
Συνήθη Λάθη σε Συνδυαστικές Διεργασίες ENTITY ex IS PORT ( in1: IN std_logic vector(3 DOWNTO 0); out1, out2,out3 : OUT std_logic_vector (3 DOWNTO 0)); END ex ; ARCHITECTURE test OF ex IS SIGNAL t : INTEGER:=7; Μη στατικό σήμα στη λίστα ευαισθησίας END test ; Error2: PROCESS (in(3) DOWNTO t) Out3<=in1; END PROCESS error2; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 5
Συνήθη Λάθη σε Συνδυαστικές Διεργασίες true: PROCESS (in1) out1<=in1; END PROCESS true; error1: PROCESS (out1) out2 <= in1; WAIT FOR 10ns; END PROCESS error1; Διαβάζει σωστά το σήμα της λίστας ευαισθησίας και αναθέτει στην έξοδο Η λίστα ευαισθησίας περιλαμβάνει το σήμα εξόδου!! ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 6
Είδη Διεργασιών Συνδυαστικές διεργασίες (Combinational Processes) Διεργασίες χρονοδρομολογούμενες από ρολόι (Clocked Processes) ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 7
Συνδυαστικές Διεργασίες Χρησιμοποιούνται για τη μοντελοποίηση συνδυαστικών κυκλωμάτων Όλα τα σήματα εισόδου πρέπει να περιέχονται στη λίστα ευαισθησίας (sensitivity list) ή στο wait_statement Ένα συνδυαστικό κύκλωμα διεγείρεται μέσω αλλαγής της εισόδου Η διεργασία πρέπει να διεγείρεται από όλα τα σήματα εισόδου Παράλειψη σήματος εσόδου οδηγεί σε μη διέγερση της διεργασίας σε τυχόν αλλαγή αυτού ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 8
Συνδυαστικές Διεργασίες - Παράδειγμα Ένα σύνηθες λάθος είναι να μην περιέχεται ένα απαιτούμενο σήμα στη sensitivity list PROCESS (a,s) IF (s= 1 ) THEN y <= a; ELSE y <= b; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 9
Συνδυαστικές Διεργασίες - Παράδειγμα Θεωρητικά αναμένεται ένας 2 > 1 MUX. Επειδή το σήμα b δεν είναι στη sensitivity, εάν s=0 τότε οποιαδήποτε αλλαγή στο b δεν περνάει στο y Φυσική ερμηνεία: Ένα συνδυαστικό κύκλωμα διεγείρεται σε κάθε αλλαγή της εισόδου => όλα τα σήματα εισόδου πρέπει να είναι εντός της sensitivity list ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 10
Συνδυαστικές Διεργασίες - Παράδειγμα good : PROCESS (a,b,c) d <= (a AND b) OR c; END PROCESS; a b c d ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 11
Συνδυαστικές Διεργασίες - Παράδειγμα bad: PROCESS (en, d) IF (en= 1 ) THEN q <=d; END IF; END process; d q Latch en ΠΡΟΣΟΧΗ!!! Δημιουργία ανεπιθύμητου latch Όταν en= 0 το σήμα q διατηρεί την παλιά τιμή Εισάγει επιπλέον κύκλωμα και καθυστέρηση Δημιουργία μεγάλα προβλήματα στο testing ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 12
Συνδυαστικές Διεργασίες - Latches Γενική περίπτωση εμφάνισης ανεπιθύμητου latch PROCESS (a, b) IF condition THEN x <= a; y <= b; ELSE condition x <= 0 ; END IF; END process ; y? Δημιουργία latch για το y ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 13
Συνδυαστικές Διεργασίες - Latches Επίλυση: Αρχικοποίηση των σημάτων στα οποία ανατίθενται τιμές PROCESS (a, b) x <= 0 ; y <= 1 ; IF condition THEN ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 14
Clocked Processes Χρησιμοποιούνται για τη μοντελοποίηση σύγχρονων ακολουθιακών κυκλωμάτων Για τη διέγερση τους απαιτείται αλλαγή του σήματος ρολογιού Ένα ακολουθιακό κύκλωμα αλλάζει κατάσταση μόνο στις χρονικές στιγμές αλλαγής του ρολογιού ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 15
Εναλλακτικές περιγραφές του ρολογιού Alt 1: PROCESS(CLK) Alt 2: PROCESS(CLK) IF clk'event AND clk='1' THEN IF clk='1' THEN q<=d; q<=d; END IF; END IF; END PROCESS; END PROCESS; Alt 3: PROCESS(CLK) IF clk'event AND clk='1' AND clk'last_value='0' THEN q<=d; END IF; END PROCESS; Alt 4: PROCESS Alt 5: PROCESS WAIT UNTIL clk='1'; WAIT UNTIL rising_edge(clk); q<=d; q<=d; END PROCESS; END PROCESS; Οι 1,2, 3 και 4 είναι οι πιο ευρέως χρησιμοποιούμενες και υποστηρίζονται από την πληθώρα των εργαλείων σύνθεσης Η 3 είναι η πιο πλήρης για σύνθεση ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 16
Clocked Processes A: PROCESS B: PROCESS WAIT UNTIL clk= 0 WAIT UNTIL clk= 0 ; c_out <= NOT (a AND b); e_out <= NOT (d_out AND c); d_out <= NOT b; f_out <= NOT c; END PROCESS a; END PROCESS b; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 17
Clocked Processes Σε μια clocked διεργασία όλα τα σήματα στα οποία γίνεται ανάθεσης τιμής οδηγούνται από flip-flop Παράδειγμα example : PROCESS WAIT UNTIL clk = 1 ; dout <= din; END; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 18
Clocked Processes Εάν μια μεταβλητή πρώτα διαβάζεται και κατόπιν γράφεται τότε και αυτή οδηγείται από flip-flop SIGNAL q_s :std_logic VARIABLE jk_v :std_logic_vector (1 DOWNTO 0); q <=q_s; PROCESS END PROCESS; jk_v: = (J&K); WAIT UNTIL clk event AND clock = 1 ; CASE jk_v is WHEN 00 => q_s <= q_s; WHEN 01 => q_s <= 0 ; WHEN 10 => q_s <= 1 ; WHEN others => q_s <= X ; END CASE; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 19
Clocked Processes Εάν μια μεταβλητή πρώτα διαβάζεται και κατόπιν γράφεται τότε και αυτή οδηγείται από flip-flop SIGNAL q_s :std_logic PROCESS VARIABLE jk_v :std_logic_vector (1 downto 0); WAIT UNTIL clk event AND clock = 1 ; CASE jk_v is WHEN 00 => q_s <= q_s; WHEN 01 => q_s <= 0 ; WHEN 10 => q_s <= 1 ; WHEN others => q_s <= X ; END CASE; Jk_v: = (J&K); END PROCESS; q <=q_s; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 20
Clocked Processes Εάν σε ένα σήμα δεν ανατίθεται πάντοτε τιμή τότε αυτό διατηρεί την προηγούμενη τιμή του Το αποτέλεσμα της σύνθεσης είναι μια ανάδραση από την έξοδο του flip-flop στην είσοδο διαμέσου πολυπλέκτη Παράδειγμα PROCESS WAIT UNTIL clk = 1 ; IF en = 1 THEN q <= d ; END PROCESS; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 21
Clocked Processes Gated clock: clk2 <= clk AND en; PROCESS WAIT UNTIL clk2 = 1 ; q <= d ; END PROCESS; Διεργασίες που οδηγούν σε gated clock κυκλώματα πρέπει να αποφεύγονται Δημιουργούν προβλήματα κατά το έλεγχο (testability) του κυκλώματος ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 22
Clocked Processes Η λογική που δημιουργείται μέσω της ανάθεσης τιμής σήματος τερματίζει στην είσοδο του flip-flop ARCHITECTURE rtl OF ex IS SIGNAL q : std_logic ; PROCESS (reset, clk) IF reset = 1 THEN q <= 0 ; ELSIF clk event AND clk= 1 THEN IF en= 1 THEN q <=.. -- Boolean expr. B1 END IF; END PROCESS; q1 <= q and -- Boolean expr. B2 END rtl ; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 23
Δήλωση if Είναι αντίστοιχη της when - Σύνταξη if <condition> then <sequence_of_statements> [elsif <condition> then <sequence_of_statements>] [else <sequence_of_statements>] end if ; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 24
Δήλωση if Παράδειγμα IF sel = 1 THEN c <= d; ELSE c <=a; end if ; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 25
Κυκλωματικό Ισοδύναμο Δήλωσης if IF (cntrl = 000 ) THEN z<=a; ELSIF (cntrl = 001 ) THEN z<=b; ELSIF ( cntrl = 010 ) THEN z<=c; ELSE z<=d; END IF; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 26
Κυκλωματικό Ισοδύναμο Δήλωσης if ΠΡΟΣΟΧΗ!!! Είναι ακολουθιακή δήλωση => Η σειρά εμφάνισης των συνθηκών είναι σημαντική Το ισοδύναμο κύκλωμα έχει προτεραιότητες ανάλογα με τη σειρά εμφάνισης των συνθηκών στον κώδικα ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 27
Δήλωση Case Είναι αντίστοιχη της with - Σύνταξη: CASE <expression> is WHEN <choice> => <sequence_of_statements>; WHEN <choice> => <sequence_of_statements>;. [ WHEN OTHERS => [<sequence_of_statements>] ; END CASE; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 28
Δήλωση Case Παράδειγμα ENTITY case_mux IS ARCHITECTURE rtl of case_mux PORT (a,b,sel : IN bit; c: OUT bit); PROCESS (sel, a,b) END case_mux; CASE sel IS WHEN 0 => c<=a; WHEN 1 => c<=b; END CASE; END PROCESS; END rtl; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 29
Δήλωση Case Όλες οι δυνατές τιμές πρέπει να απαριθμούνται Χρήση others στην περίπτωση που αυτές είναι πολλές Χρήση others όταν χρησιμοποιείται std_logic (9 values) ENTITY case_ex IS ARCHITECTURE rtl OF case_ex IS PORT (a : IN integer RANGE 0 to 30; c : OUT integer RANGE 0 to 6); PROCESS (a) END case_ex; CASE a IS WHEN 0 1 => c<= 3; WHEN 1 to 17 => c<=2; WHEN 23 DOWNTO 18 => c<= 6; WHEN OTHERS => c<=0; END CASE; END PROCESS; END rtl; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 30
Δήλωση Case Χρήση πολλαπλών διανυσμάτων στη λίστα επιλογής Δεν επιτρέπεται η χρήση & για ένωση διανυσμάτων ARCHITECTURE rtl of ex is PROCESS (a,b) CASE a&b IS --ERROR WHEN => q<= ;. ARCHITECTURE RTL OF EX IS PROCESS (a,b) VARIABLe int: std_logic_vector (0 TO 5) int := a&b; -- CORRECT CASE int IS WHEN => q<= ; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 31
Κανόνες Χρήσης case case <expression> is when <choice> => <sequence_of_statements>; when <choice> => <sequence_of_statements>;. [ when others => [<sequence_of_statements>] ; end case; Η έκφραση πρέπει να είναι διακριτού τύπου Κάθε δυνατή τιμή της έκφρασης πρέπει να εμφανίζεται στις επιλογές του when clause ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 32
Κανόνες Χρήσης case case <expression> is when <choice> => <sequence_of_statements>; when <choice> => <sequence_of_statements>;. [ when others => [<sequence_of_statements>] ; end case; Εάν γίνεται χρήση others, τότε αυτή πρέπει να είναι στο τέλος Η επιλογές πρέπει να είναι διακριτές τιμές και όχι σήματα, μεταβλητές, generics Κυκλωματικό Ισοδύναμο: Παρόμοιο με τη δήλωση if ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 33
Δήλωση Null Καμία ενέργεια δε λαμβάνει χώρα (do nothing) Χρησιμοποιείται κυρίως στην case όταν δεν πρέπει να αλλάξει κάποια τρέχουσα τιμή ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 34
Δήλωση Null Παράδειγμα ARCHITECTURE rtl OF ex IS PROCESS (a) q1 <= 0 ; q2 <= 0 ; q3 <= 0 ; CASE a IS WHEN 00 => q1<= 1 ; 01 => q2 <= 1 ; q3 <= 1 ; WHEN OTHERS => null; -- Τα q1, q2, q3 διατηρούν τις προηγ. τιμές ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 35
Δήλωση Wait Υπάρχουν 4 τρόποι χρήσης του wait σε μια διεργασία process (a,b) wait until a= 1 ; wait on a,b ; wait for 10 ns Not for synthesis Η πρώτη και η τρίτη περίπτωση είναι όμοιες αν το wait on είναι στο τέλος της διεργασίας PROCESS (a,b) END process; PROCESS WAIT ON a,b; END process; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 36
Δήλωση Wait PROCESS (a,b) END process; PROCESS WAIT ON a,b; END process; Οι διεργασίες εκτελούνται μέχρι το πρώτο wait_statement Εάν χρησιμοποιείται sensitivity_list δεν επιτρέπεται ταυτόχρονη χρήση wait_statement!!! ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 37
Example 1 Example 2 Example 3 PROCESS(A) PROCESS PROCESS c1<=not a; c2<=not a; WAIT ON a; END PROCESS; WAIT ON a; c3<=not a; END PROCESS; END PROCESS; Example 4 Example 5 PROCESS PROCESS WAIT UNTIL a='1'; c5<=not a; c4<=not a; WAIT UNTIL a='1' FOR 10 ns; END PROCESS; END PROCESS; A 10 20 30 40 50 60 [ns] C1 C2 C3 C4 C5 10 ns 20 ns ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 38
For loop FOR <identifier> IN <range> LOOP sequence_of_statements END LOOP; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 39
For loop Παράδειγμα ENTITY ex IS PORT (a,b,c : IN std_logic_vector (4 DOWNTO 0); q : OUT std_logic_vector (4 DOWNTO 0)); END; ARCHITECTURE rtl OF ex IS PROCESS (a,b,c) FOR i IN 0 TO 4 LOOP IF a(i) = 1 THEN q(i) <= b(i); ELSE q(i) <= c(i); END IF; END LOOP; END PROCESS; END; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 40
While loop [loop_label]: WHILE <condition> LOOP statements END LOOP [loop_label]; ΠΡΟΣΟΧΗ!!! Αρκετά εργαλεία σύνθεσης δεν υποστηρίζουν τη δήλωση while Χρησιμοποιείται για ανάπτυξη μοντέλων προδιαγραφών και για εξομοίωση Συνίσταται η χρήση της δήλωσης for η οποία υποστηρίζεται από όλα τα εργαλεία σύνθεσης ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 41
D Flip-Flop LIBRARY ieee; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF IS PORT (CLK,D : IN std_logic; Q :OUT std_logic); END DFF; ARCHITECTURE rtl OF DFF IS seq0: PROCESS WAIT UNTIL CLK'event AND CLK='1'; Q <= D; END PROCESS; END rtl; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 42
D Flip-Flop with Qn ENTITY DFFQN IS PORT (CLK,D : IN std_logic; Q, Qn :OUT std_logic); END DFFQN; ARCHITECTURE rtl OF DFFQN IS SIGNAL DFF : std_logic; seq0: PROCESS WAIT UNTIL CLK'event AND CLK='1'; DFF <= D; END PROCESS; Q<=DFF; Qn<= NOT DFF; END rtl; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 43
D Flip-Flop with Qn 1. ENTITY DFFQN IS 2. PORT (CLK,D : IN std_logic; 3. Q, Qn :OUT std_logic); 4. END DFFQN; 5. ARCHITECTURE rtl OF DFFQN IS 6. SIGNAL DFF : std_logic; 7. 8. seq0: PROCESS 9. 10. WAIT UNTIL CLK'event AND CLK='1'; 11. DFF <= D; 12. END PROCESS; 13. Q<=DFF; Qn<= NOT DFF; 14. END rtl; Ποια η διαφορά αν η 13 είναι εντός της process στη θέση της 11 και δε χρησιμοποιηθεί εσωτερικό σήμα; Περιμένετε περισσότερα από ένα flip-flops; Πόσες εξόδους έχει το flip-flop; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 44
D Flip-Flop with Qn 1. ENTITY DFFQN IS 2. PORT (CLK,D : IN std_logic; 3. Q, Qn :OUT std_logic); 4. END DFFQN; 5. ARCHITECTURE rtl OF DFFQN IS 6. SIGNAL DFF : std_logic; 7. 8. seq0: PROCESS 9. 10. WAIT UNTIL CLK'event AND CLK='1'; 11. DFF <= D; 12. END PROCESS; 13. Q<=DFF; Qn<= NOT DFF; 14. END rtl; Μπορεί να χρησιμοποιηθεί μεταβλητή αντί σήματος στην 6; Αν ναι, πως τροποποιείται ο κώδικας; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 45
D Flip-Flop with Qn 1. ENTITY DFFQN IS 2. PORT (CLK,D : IN std_logic; 3. Q, Qn :OUT std_logic); 4. END DFFQN; 5. ARCHITECTURE rtl OF DFFQN IS 6. 7. seq0: PROCESS (CLK) 8. VARIABLE DFF : std_logic; 9. 10. IF (CLK'event AND CLK='1 ) THEN DFF := D; 11. Q <= DFF; 12. Qn <= NOT DFF; 13. END PROCESS; 14. END rtl; Είναι ακριβώς ίδια η συμπεριφορά; Το αποτέλεσμα της σύνθεσης; Μήπως η χρήση σημάτων αρχικοποίησης επιλύει τυχόν προβλήματα; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 46
D Flip-Flop with Qn 1. ENTITY DFFQN IS 2. PORT (CLK,D : IN std_logic; 3. Q, Qn :OUT std_logic); 4. END DFFQN; Μπορεί να χρησιμοποιηθεί μεταβλητή αντί σήματος στην 6? Αν ναι, πως τροποιείται ο κώδικας? 5. ARCHITECTURE rtl OF DFFQN IS 6. SIGNAL DFF : std_logic; 7. 8. seq0: PROCESS 9. 10. WAIT UNTIL CLK'event AND CLK='1'; 11. DFF <= D; 12. END PROCESS; 13. Q<=DFF; Qn<= NOT DFF; 14. END rtl; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 47
D Flip-Flop with Clear &Reset (1/3) 1. ENTITY DFF_SR IS 2. PORT (CLK,D,CLRn,SETn : IN std_logic; 3. Q:OUT std_logic); 4. END DFF_SR; Μπορεί να χρησιμοποιηθεί μεταβλητή αντί σήματος στην 6? Αν ναι, πως τροποιείται ο κώδικας? 5. ARCHITECTURE rtl OF DFF_SR IS 6. SIGNAL DFF : std_logic; 7. 8. 9. END rtl; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 48
D Flip-Flop with Clear &Reset (2/3) PROCESS (SETn,CLRn, CLK) ΣΧΟΛΙΑ To clear υπερισχύει του set λόγω θέσης IF (CLRn='0') THEN στον κώδικα Q<='0'; Σε ένα ακολουθιακό statement (if) η ELSIF (SETn='0') THEN σειρά των δηλώσεων είναι σημαντική!!! Q<='1'; ELSIF (CLK'event AND CLK='1') THEN Q<=D; END IF; END PROCESS; END RTL; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 49
D Flip-Flop with Clear &Reset (3/3) PROCESS (SETn,CLRn, CLK) IF (SETn='0') THEN Στο παράδειγμα αυτό υπερισχύει το set Q<='1'; ELSIF (CLRn='0') THEN Q<='0'; ELSIF (CLK'event AND CLK='1') THEN Q<=D; END IF; END PROCESS; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 50
Ασύγχρονο reset Το flip-flop έρχεται σε reset κατάσταση όταν ενεργοποιηθεί το σήμα reset ανεξάρτητα από την τιμή του ρολογιού Το σήμα reset πρέπει να εμπεριέχεται στη sensitivity_list ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 51
Ασύγχρονο reset Παράδειγμα PROCESS (clk,reset) IF reset='1' THEN data<="00"; ELSIF clk'event AND clk='1' THEN data<=in_data; END IF; END PROCESS; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 52
Σύγχρονο reset Το flip flop έρχεται σε κατάσταση reset μόνο στις ενεργές παρυφές του ρολογιού Μόνο το σήμα clk εμπεριέχεται στη sensitivity_list ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 53
Σύγχρονο reset Παράδειγμα PROCESS(CLK) IF clk'event AND clk='1' THEN IF reset='1' THEN data<="00"; ELSE data<=not in_data; END IF; END IF; END PROCESS; ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 54
Εναλλακτικοί τρόποι περιγραφής D Flip- Flop με Σύγχρονο / Ασύγχρονο reset LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY FFS Is PORT (CLK, SRSTn, ARSTn: IN std_logic; DIN : in std_logic_vector(2 DOWNTO 0); DOUT: OUT std_logic); END FFS; Γενική δήλωση (συμπεριλαμβάνει σύγχρονο SRSTn, και ασύγχροο ARSTn σήμα αρχικοποίησης-reset ARCHITECTURE rtl OF FFS IS PROCESS WAIT UNTIL CLK'event AND CLK='1'; DOUT <= DIN(0) XOR DIN(1); END PROCESS; END rtl; Version 1 (δίχως reset) ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 55
Εναλλακτικοί τρόποι περιγραφής D Flip- Flop με Σύγχρονο / Ασύγχρονο reset PROCESS WAIT UNTIL CLK'event AND CLK='1'; IF (SRSTn='0') THEN DOUT(0)<='0'; ELSE DOUT(0) <= a NAND b; END IF; DOUT(1) <=SRSTn AND (a NAND c); END PROCESS; Το clk προηγείται του reset Version 2 (με σύγχρονο reset) ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 56
Εναλλακτικοί τρόποι περιγραφής D Flip- Flop με Σύγχρονο / Ασύγχρονο reset PROCESS (ARSTn, CLK) IF (ARSTn='0') THEN DOUT <='0'; ELSIF (CLK'event AND CLK='1') THEN DOUT <= a nor b; END IF; END PROCESS; sensitivity list Το reset προηγείται του clk Version 3 (με ασύγχρονο reset) ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 57
Εναλλακτικοί τρόποι περιγραφής D Flip- Flop με Σύγχρονο / Ασύγχρονο reset PROCESS (CLK) IF (CLK'event AND CLK='1') THEN DOUT(0) <= SRSTn AND a; IF (SRSTn='0') THEN DOUT(1)<='0'; ELSE DOUT(1)<=a; END IF; END IF; END PROCESS; Version 4 (με σύγχρονο reset και gated output) ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 58
Βιβλιογραφία / άλλες πηγές P. Ashenden, The Designer s Guide to VHDL, Morgan Kaufman Publishers, 1996 S. Sjoholm and L. Lennart, VHDL for Designers, Prentice Hall, 1997 B. Cohen, VHDL Coding Styles and Methodologies, Kluwer Academic Publishers, 1999 Z. Navabi, VHDL-Analysis and Modeling of Digital Systems, Mc Graw-Hill, 1993 VHDL cookbooks of the synthesis tools ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 59
Βιβλιογραφία / άλλες πηγές On-line μαθήματα σε ASIC/VHDL design: http://www.dacafe.com/asics.htm http://www.ecs.umass.edu/ece/vspgroup/burleso n/courses/558/ http://mikro.e-technik.uni-ulm.de/vhdl/anlengl.vhd/html/vhdl-all-e.html http://www.eas.asu.edu/~yong598d/vhdl_links. html ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 60
Βιβλιογραφία / άλλες πηγές Tutorials/Papers: http://www.vhdl.org/fmf/wwwpages/fmf_ecl_m odels_paper.html http://www.bluepc.com/download.html#downloa dtop http://www.symphonyeda.com/products.htm http://www.angelfire.com/electronic/in/vlsi/vhdl.ht ml#vhdl ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 61
Βιβλιογραφία / άλλες πηγές Freeware VHDL/Synthesis tools: http://www-asim.lip6.fr/recherche/alliance/ http://www.bluepc.com/download.html#downloa dtop http://www.symphonyeda.com/products.htm http://www.ececs.uc.edu/~paw/savant/ http://www.aldec.com/downloads/ ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 62
Βιβλιογραφία / άλλες πηγές Άλλες πηγές: http://www.ieee.org http://www.acm.org http://www.vhdl.org http://tech-www.informatik.uni-hamburg.de/vhdl/ http://www.eeglossary.com/vhdl.htm http://www.ent.ohiou.edu/~starzyk/network/class /ee514/intro.html ΑΣΗΜΑΚΗΣ-ΒΟΥΡΒΟΥΛΑΚΗΣ-ΚΑΚΑΡΟΥΝΤΑΣ-ΛΕΛΙΓΚΟΥ 63