ΗΜΥ-210: Σχεδιασμός Ψηφιακών Συστημάτων Καταχωρητές Διδάσκουσα: Μαρία Κ. Μιχαήλ Πανεπιστήμιο Κύπρου Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Περίληψη Καταχωρητές Παράλληλης Φόρτωσης Καταχωρητές Ολίσθησης Σειριακή Φόρτωση Σειριακή Ολίσθηση Καταχωρητές Ολίσθησης / Παράλληλης Φόρτωσης Καταχωρητές Ολίσθησης ίθ ιπλής Κατεύθυνσης Αναπαράσταση Καταχωρητή Ολίσθησης σε VHDL MKM - 2 Καταχωρητές και Μετρητές (Registers and Counters) Ένας n-bit καταχωρητής είναι ένα σύνολο από n flip-flops, ικανό να αποθηκεύσει n bits δυαδικής πληροφορίας. Με επιπρόσθετες συνδυαστικές πύλες, ο καταχωρητής μπορεί να εκτελέσει λειτουργίες επεξεργασίας δεδομένων (data-processing processing). Ένας μετρητής είναι ένας καταχωρητής που έχει μια προκαθορισμένη σειρά καταστάσεων, βάση της εφαρμογής των παλμών του ρολογιού. Παράδειγμα: Καταχωρητής 2-bit 1. Πόσες καταστάσεις υπάρχουν; In1 2. Πόσοι συνδυασμοί εισόδων; Συνδυασμοί εξόδων; 3. Ποια είναι η συνάρτηση εξόδου; In0 4. Ποια είναι η συνάρτηση της επόμενης κατάστασης; 5. Είναι Moore ή Mealy; Ποια είναι η απάντηση για το 1 και 2 (πιο πάνω) για ένα καταχωρητή με n-bits; D C A1 C A0 D Y1 Y0 Παρούσα Κατ. Επόμενη Κατ. A1(t+1) A0(t+1) Για In1 In0 = Έξοδος (=A1 A0) A1 A0 00 01 10 11 Y1 Y0 0 0 00 01 10 11 0 0 0 1 00 01 10 11 0 1 1 0 00 01 10 11 1 0 1 1 00 01 10 11 1 1 MKM - 3 MKM - 4 Καταχωρητές 1
Καταχωρητής 4-bit Η κοινή είσοδος Clock πυροδοτεί όλα τα flip-flopsflops στην θετική ακμή κάθε παλμού, και η διαθέσιμη πληροφορία στις 4 D-εισόδους μεταφέρεται στον καταχωρητή. MKM - 5 Μνήμη Καταχωρητών Προσδοκίες: Ένας καταχωρητής πρέπει να μπορεί να αποθηκεύει πληροφορίες για πολλαπλές χρονικές περιόδους Η αποθήκευση ή φόρτωση πληροφοριών πρέπει να ελέγχεται από κάποιο σήμα Πραγματικότητα: Ο προηγούμενος καταχωτητής φορτώνει πληροφορίες σε κάθε χρονική περίοδο του ρολογιού (clock cycle) Λύση: Χρήση σήματος για μπλοκάρισμα του καταχωρητή από το ρολόι, ή Χρήση σήματος για έλεγχο ανάδρασης (feedback control) από την έξοδο του καταχωρητή πίσω στις εισόδους του, ή Χρήση SR ή JK flip-flops flops τα οποία κρατούν την παρούσα κατάσταση τους για είσοδο (0,0) Load: συχνή ονομασία για το σήμα που ελέγχει την αποθήκευση και φόρτωση καταχωρητών Load = 1: Φορτώνει τις τιμές των εισόδων Load = 0: Αποθηκεύει τις τιμές του καταχωρητή MKM - 6 Καταχωρητής 4-bit (συν.) C = Load + Clock Τα FFs είναι ευαίσθητα σε αλλαγές μόνο όταν Load=1 Clock-gating, όχι καλή λύση! MKM - 7 Καταχωρητές με Clock Gating Το σήμα Load χρησιμοποιείται για ενεργοποίηση του σήματος του ρολογιού όταν είναι 1, και απενεργοποιεί το ρολόι όταν είναι 0. Παράδειγμα προβλήματος: Για Flip-flops θετικής ακμοπυροδότησης ή αρνητικού-επιπέδου πυροδότησης: Clock Load Gated Clock στο FF Πιο είναι το πρόβλημα; Απόκλιση του gated clock από το πραγματικό ρολόι λόγω της καθυστέρησης από τις επιπρόσθετες πύλες (clock skew) MKM - 8 Καταχωρητές 2
Καταχωρητές Παράλληλης Φόρτωσης, με έλεγχο ανάδρασης (Controlled Feedback) Πιο αξιόπιστος σχεδιασμός: Το ρολόι δουλεύει ασταμάτητα (στα FFs), και Επιλεκτική χρήση του Load για αλλαγή των περιεχομένων του καταχωρητή. Παράδειγμα: καταχωρητής 2-bit: Για Load = 0, κράτηση παρούσας κατάστασης Load Για Load = 1, D1 φόρτωση τιμών εισόδου, βάση του ρολογιού Πιο σύνθετος σχεδιασμός από clock gating, αλλά ελεύθερος από D0 προβλήματα χρονισμού Clock 2-to-1 Multiplexers D A1 MKM - 9 C D C A0 Y1 Y0 Καταχωρητής Παράλληλης Φόρτωσης 4-bit MKM - 10 Καταχωρητές Ολίσθησης (Shift Registers) Οι καταχωρητές ολίσθησης μεταφέρουν πληροφορίες «πλάγια» μέσα στον καταχωρητή, προς τη περισσότερο σημαντική (MSB MSB) ή λιγότερο σημαντική (LSB LSB) θέση Στην πιο απλή περίπτωση, ο καταχωρητής ολίσθησης είναι απλά ένα σύνολο από D flip-flops flops ενωμένα διαδοχικά, ως ακολούθως: In A B C Out D D D D Είσοδος δεδομένων, In, ονομάζεται σειριακή είσοδος ή είσοδος δεξιάς ολίσθησης Έξοδος δεδομένων, Out, συχνά ονομάζεται σειριακή έξοδος Το διάνυσμα (A, B, C, Out) ονομάζεται η παράλληλη έξοδος MKM - 11 Καταχωρητές Ολίσθησης (συν.) Η συμπεριφορά του In A B C Out σειριακού καταχωρητή D D D D ολίσθησης δίνεται στον πίνακα απέναντι T0 είναι η κατάσταση ακριβώς πριν την Clock εμφάνιση του 1ου παλμού του ρολογιού T1 έρχεται μετά τον In A B C Out πρώτο παλμό, και T0 0???? πριν το δεύτερο T1 1 0??? Αρχικές άγνωστες T2 1 1 0?? καταστάσεις δηλώνονται με? T3 0 1 1 0? Συμπληρώστε τις 3 T4 1 τελευταίες γραμμές T5 1 του πίνακα T6 1 MKM - 12 Καταχωρητές 3
Σειριακή Μεταφορά εδομένων Σειριακή μεταφορά δεδομένων από ένα καταχωρητή A σε ένα καταχωρητή B. Απαιτείται μία περίοδος ρολογιού για κάθε bit. Σειριακή πρόσθεση με χρήση καταχωρητή ολίσθησης Οι δύο δυαδικοί προσθετέοι αποθηκεύονται σειριακά σε δύο καταχωρητές Α και Β. Πόσος χρόνος χρειάζεται για να φορτωθούν οι αριθμοί; Τα bits προσθέτονται ανά ζεύγος κάθε χρονική στιγμή, μέσω ενός πλήρη αθροιστή (full-adder circuit). Πόσος χρόνος χρειάζεται για την πρόσθεση; Το carry out του πλήρη αθροιστή μεταφέρεται σε ένα D flip-flop flop, του οποίου η έξοδος χρησιμοποιείται ως το carry in για το επόμενο ζεύγος των bits. Το sum bit στην έξοδο S του πλήρη αθροιστή μεταφέρεται πίσω στο καταχωρητή A(συσσωρευτής). MKM - 13 MKM - 14 Σειριακή πρόσθεση με χρήση καταχωρητή ολίσθησης Πόσος χρόνος χρειάζεται για ολόκληρη τη διαδικασία; Σχεδιάστε το διάγραμμα, σε επίπεδο καταχωρητών (ή RTL-level = Register- Transfer Level) Σειριακή ή Παράλληλη Πρόσθεση; Ο παράλληλος αθροιστής είναι ένα συνδυαστικό κύκλωμα,, ενώ ο σειριακός ένα ακολουθιακό. Ο παράλληλος αθροιστής αποτελείται από n πλήρες 1-bit αθροιστές για προσθετέους των n- bit, ενώ ο σειριακός απαιτεί μόνο 1 πλήρη 1-bit αθροιστή. Το σειριακό κύκλωμα παίρνει n περιόδους του ρολογιού για να ολοκληρώσει, ενώ το παράλληλο 1. 1 Συνοπτικά, ο παράλληλος αθροιστής είναι n φορές μεγαλύτερος του σειριακού σε χώρο, αλλά είναι και n φορές πιο γρήγορος. MKM - 15 MKM - 16 Καταχωρητές 4
Καταχωρητής Ολίσθησης Παράλληλης Φόρτωσης Παράδειγμα Καταχωρητή Ολίσθησης Προσθέτοντας ένα MUX Παράλλήλης Φόρτωσης 2-bit μεταξύ κάθε «στάδιο» D A D B του καταχωρητή A B ολίσθησης, δεδομένα IN D D μπορούν να αποθηκεύονται ή φορτώνονται με SHIFT αξιόπιστο τρόπο. SHIFT=0, τα A και B αντικαθιστούνται με τα δεδομένα δ στις γραμμές D A και D B (παράλληλη φόρτωση), αλλιώς τα δεδομένα ολισθαίνουν προς τα δεξιά στην κάθε περίοδο ρολογιού και φορτώνεται 1-bit (σειριακή φόρτωση). Προσθέτοντας και άλλα bits, κατασκευάζουμε καταχωρητή ολίσθησης παράλληλης φόρτωσης n-bit. MKM - 17 Καταχωρητής Ολίσθησης Παράλληλης Φόρτωσης Παράδειγμα Καταχωρητή Ολίσθησης Προσθέτοντας ένα MUX Παράλλήλης Φόρτωσης 2-bit μεταξύ κάθε «στάδιο» D A D B του καταχωρητή SHIFT=0 A B ολίσθησης, δεδομένα IN D D μπορούν να αποθηκεύονται ή φορτώνονται με SHIFT αξιόπιστο τρόπο. SHIFT=0, τα A και B αντικαθιστούνται με τα δεδομένα δ στις γραμμές D A και D B (παράλληλη φόρτωση), αλλιώς τα δεδομένα ολισθαίνουν προς τα δεξιά στην κάθε περίοδο ρολογιού και φορτώνεται 1-bit (σειριακή φόρτωση). Προσθέτοντας και άλλα bits, κατασκευάζουμε καταχωρητή ολίσθησης παράλληλης φόρτωσης n-bit. MKM - 18 Καταχωρητής Ολίσθησης Παράλληλης Φόρτωσης Παράδειγμα Καταχωρητή Ολίσθησης Προσθέτοντας ένα MUX Παράλλήλης Φόρτωσης 2-bit μεταξύ κάθε «στάδιο» D A D B του καταχωρητή SHIFT=1 A B ολίσθησης, δεδομένα IN D D μπορούν να αποθηκεύονται ή φορτώνονται με SHIFT αξιόπιστο τρόπο. SHIFT=0, τα A και B αντικαθιστούνται με τα δεδομένα δ στις γραμμές D A και D B (παράλληλη φόρτωση), αλλιώς τα δεδομένα ολισθαίνουν προς τα δεξιά στην κάθε περίοδο ρολογιού και φορτώνεται 1-bit (σειριακή φόρτωση). Προσθέτοντας και άλλα bits, κατασκευάζουμε καταχωρητή ολίσθησης παράλληλης φόρτωσης n-bit. MKM - 19 Φόρτωσης Άλλος σχεδιασμός MKM - 20 Καταχωρητές 5
Φόρτωσης Άλλος σχεδιασμός SHIFT = 1 Φόρτωσης Άλλος σχεδιασμός SHIFT = 0 LOAD = 1 MKM - 21 MKM - 22 Φόρτωσης Άλλος σχεδιασμός SHIFT = 0 LOAD = 0 Φόρτωσης Άλλος σχεδιασμός (συν.) Μπορούμε να προσθέσουμε την λειτουργία hold για αποθήκευση/κράτηση / της παρούσας πληροφορίας. Shift Load Λειτουργία 0 0 Κράτηση παρούσας κατάστασης: 0 0, 0, 1 1, 1, 2 2, 2, 0 1 Παράλληλη φόρτωση: D0 0, D1 1, D2 2, 1 X Ολίσθηση: Serial Input 0 1 2 MKM - 23 MKM - 24 Καταχωρητές 6
Καταχωρητής Ολίσθησης με Επιπρόσθετες Λειτουργίες Προσθέτοντας ένα MUX 4-εισόδων μπροστά από το κάθε D flip-flop flop σε ένα καταχωρητή ολίσθησης, μπορούμε να υλοποιήσουμε ένα κύκλωμα με λειτουργίες: ολίσθηση δεξιά, ολίσθηση αριστερά, παράλληλη φόρτωση, κράτηση παρούσας κατάστασης. Καταχωρητές ολίσθησης μπορούν επίσης να σχεδιαστούν για ολίσθηση περισσοτέρων του ενός bit ολίσθηση k (<n) bits Παράδειγμα: Καταχωρητής Ολίσθησης ιπλής Κατεύθυνσης (Bidirectional) S 1 S 0 Λειτουργία 00 Κράτηση παρούσας κατάστασης 01 Ολίσθηση προς τα κάτω 10 Ολίσθηση προς τα πάνω 11 Παράλληλη φόρτωση MKM - 25 MKM - 26 S 0 S 1 = 00 MKM - 27 MKM - 28 Καταχωρητές 7
S 0 S 1 = 01 S 0 S 1 = 10 MKM - 29 MKM - 30 S 0 S 1 = 11 Καταχωρητής Ολίσθησης σε VHDL -- Καταχωρητής αριστερής ολίσθησης 4-bit με ασύγχρονο Reset library ieee; use ieee.std_logic_1164.all; entity srg_4_r is port(clk, RESET, SI : in std_logic; : out std_logic_vector(3 downto 0); SO : out std_logic); end srg_4_r; _ MKM - 31 MKM - 32 Καταχωρητές 8
Καταχωρητής Ολίσθησης σε VHDL architecture behavioral of srg_4_r is signal shift : std_logic_vector(4 downto 0); begin process (RESET, CLK) begin if (RESET = '1') then shift <= "00000"; elsif (CLK'event and (CLK = '1')) then shift <= shift(3 downto 0) & SI; end if; ; end process; 4 3 2 1 0 <= shift(3 downto 0); A B C D SO <= shift(4); end behavioral; A B C D SI 4 3 2 1 0 MKM - 33 Καταχωρητές 9