8 computer arithmetics
TRANSCRIPT
ARITHMETIC AND LOGIC IN COMPUTER
SYSTEMSΝταμπίτζιας Φώτιος Καραλής Πασχάλης
Χατζής Νικόλαος
Credits to:Mi Lu,
Texas A&M university
ARITHMETIC AND LOGIC IN COMPUTER SYSTEMS
Στόχοι της διάλεξης:● Η κατανόηση των διάφορων αριθμητικών συστημάτων που
χρησιμοποιούνται στα υπολογιστικά(και ευρύτερα στα ψηφιακά) συστήματα.
● Η αφομοίωση των εννοιών που απασχολούν των σχεδιαστή που υλοποιεί τις μονάδες πρόσθεσης,αφαίρεσης,πολλαπλασιασμού και
διαίρεσης (όπως η χωρική και χρονική πολυπλοκότητα).● Η μελέτη του υλικού με το οποίο τα παραπάνω συστήματα
υλοποιούνται.● Ο προβληματισμός πάνω στις
παραχωρήσεις(κόστους,χώρου,χρόνου κ.α) που πρέπει να κάνει ο μηχανικός,δεδομένης της υφιστάμενης τεχνολογίας, για να
υλοποιήσει τις παραπάνω μονάδες.● Με την ανάπτυξη της τεχνολογίας των VLSI(32nm κατά την
συγγραφή της εργασίας) πολλοί πολύπλοκοι αλγόριθμοι που μέχρι πρόσφατα ήταν μη-υλοποιήσιμοι σε διαφορετικά αριθμητικά
συστήματα συναγωνίζονται για την μέγιστη αποτελεσματικότητα
Κεφάλαιο 1οΑριθμητικά συστήματα
Α)Conventional Radic Number System του αριθμού Ν
,με το r να ονομάζεται βάση(radix) του συστήματος
Έτσι λοιπόν,ο αριθμός Ν μπορεί να εμφανιστεί ώς
Πχ
0in−1d i∈{0,1.... , r−1}
Θέματα προς συζήτηση
1) Πόσα bits χρειάζονται για να κωδικοποιηθεί ένας αριθμός λ? απάντηση:
2)Πως μετατρέπουμε έναν αριθμό από και προς του conventional radix system?
απάντηση: Διαιρούμε συνεχόμενα τον αριθμό μας με την βάση(r),και το υπόλοιπο της ευκλείδιας διαίρεσης είναι το“δεξιότερο“ ψηφίο του αριθμού μας.Η μετατροπή τελειώνει όταν έχουμε κάνει την
παραπάνω διαδικασία n-1 φορές
log2 λ1
Προσημασμένοι αριθμοί
Μέχρι τώρα ασχοληθήκαμε με μη-προσημασμένους αριθμούς.Όμως,όπως είναι φυσιολογικό, υπάρχει η ανάγκη για
αναπαράσταση ΚΑΙ προσημασμένων αριθμών. Αυτό γίνεται με τις παρακάτω τεχνικές:
● Πρόσημο-Τιμή● Μειωμένο συμπλήρωμα της βάσης(diminished radix compliment)
● Συμπλήρωμα της βάσης(radix compliment)● Προσημασμένα ψηφία
● Πόλωση● RNS(Residue Number System)
● LNS(Logarithmic Number System)
Μέθοδος Πρόσημο-Τιμή
Για να ξεχωρίσουμε τους θετικούς από τους αρνητικούς αριθμούς,το MSB παίρνει τιμές σύμφωνα με τον παρακάτω νόμο
Πχ
Απαραίτητη κρίνεται και η εισαγωγή του μέτρου του αριθμού, που προφανώς ορίζεται ως εξής
Diminished Radix Compliment
Αλλιώς ονομάζεται συμπλήρωμα του (r-1), και ορίζεται ως εξής
Αλλιώς,συμβολίζεται ως εξής:
Όπου N το σύνολο των ψηφίων του αριθμούπχ
Radix Compliment
Ονομάζεται και συμπλήρωμα του r και ορίζεται ως
Εναλλακτικά θα το δούμε παρακάτω ως:
πχ
Αριθμοί των 4 Bit στα διάφορα αριθμητικά
συστήματα
Signed-Digit
Στο σύστημα αυτό,κάθε ψηφίο μπορεί να έχει είτε θετική, είτε αρνητική τιμή. Δηλαδή, για κάθε r>1 έχουμε:
Σημείωση: Η επιλογή του α έγινε έτσι ώστε το σύστημα μας να είναι non-redudant(δηλαδή να μην περιέχει περιττά ψηφία),καθώς και να
είναι πλήρες(κάθε αριθμός,εντός κάποιον ορίων, να μπορεί να απεικονιστεί). Η απόδειξη παραλείπεται.
Singed Digit, continued
ΠΡΟΣΟΧΗ!Στο signed digit ένας αριθμός ΔΕΝ αντιστοιχείται ένα προς ένα με
μια σειρά από ψηφία. ΠχΓια να παραστήσουμε τον ακέραιο -3 (Χ=-3 , n=4, r=2, κ(δεκαδικά
ψηφία)=0 ) στο σύστημα αυτό έχουμε τους εξής τρόπους:
Floating point numbers
Μέχρι τώρα έχουμε περιγράψει αριθμούς (προσημασμένους ή μη, δεκαδικούς ή όχι) στους οποίους η τυχόν υποδιαστολή βρίσκονταν
σε σταθερό σημείο(fixed-point). Επειδή όμως στα υπολογιστικά συστήματα η υποδιαστολή δεν “βρίσκεται“ πουθενά,αλλά η ύπαρξη της και η θέση της είναι ένα προσυμφωνημένο “μυστικό“ ανάμεσα
στον προγραμματιστή και στον υπολογιστή, αναπτύχθηκαν προτόκολλα που επιτρέπουν την υποδιαστολή να ολισθαίνει κατά μερικά ψηφία μέσα σε μια σειρά από ψηφία.Γενικότερα, όπως είναι
γνωστό, χρησιμοποιούνται οι έννοιες της mantissa(Μ)και του exponent(E)
Normalization
Για να παραστήσουμε τον ίδιο αριθμό με τα λιγότερα δυνατά ψηφία, έχει εφευρεθεί η διαδικασία της κανονικοποίησης, που με λίγα λόγια
υπαγορεύει ότι το MSB(Most Significant Bit) της mantissa ΔΕΝ μπορεί να είναι 0.
Πχ
Έτσι,η mantissa για ένα string από k bits μπορεί να πάρει τιμές
Residue Number System(RNS)
Έστω ακέραιος Χ=(x1,x2....xn) με κάθε xi>1 . Έστω ένα σετ αριθμών mi=(m1,m2...mn) που αποκαλείται ομάδα υπόλοιπων. Κάθε αριθμός
xi αναπαρίσταται με τον εξής τρόπο:
πχΓια να παραστήσουμε τον αριθμό 9 στο RNS έχουμε:
Και άρα η RNS αναπαράσταση είναι η (104)Καλό θα είναι τα στοιχεία του mi να μην έχουν κοινό διαιρέτη.
Όπως φαίνεται εύκολα, υπάρχει tradeoff ανάμεσα στον αριθμό των mi και στο μέγεθός τους
xi=X mod mi
Logarithmic Number System(LNS)
Δεδομένου ενός μη-προσημασμένου αριθμού Χ,παίρνουμε τον λογάριθμο του Χ με βάση το r. Αν η αναπαράσταση αυτή του
Χ(εφεξής Lx) είναι σε δυαδική μορφή με n bit για το ακέραιο μέρος και k bits για το δεκαδικό,τότε λέμε ότι η LNS αναπαράσταση του Χ
είναι η :
Και προφανώς,ο αριθμός Χ ανακτάται ως εξής:
ΠχΚαι άρα
Πλεονεκτήματα/ Μειονεκτήματα
RNS: Πρακτικά το RNS μετατρέπει έναν μεγάλο ακέραιο σε ένα αριθμό από μικρότερους ακέραιους.Έτσι,όταν θέλουμε να κάνουμε
πράξεις ανάμεσα σε 2 μεγάλους ακέραιους το RNS μας επιτρέπει να κάνουμε αντί για 1 μεγάλη πράξη πολλές παράλληλες με μικρούς
αριθμούς.LNS:Απλοποιεί τρομερά τον πολλαπλασιασμό και την διαίρεση,αφού
οι πράξεις αυτές γίνονται με το ίδιο κύκλωμα που γίνεται η πρόσθεση. Όμως η πρόσθεση πλέον απαιτεί περισσότερους πόρους από τις κλασσικές μεθόδους. Κλασική περίπτωση χρήσης του LNS
είναι για Hidden Markov Models(πχ αλγόριθμος viterby)
Κυκλώματα Πρόσθεσης και
αφαίρεσης
Στο κεφάλαιο αυτό ασχολούμαστε με σειριακά κυκλώματα πρόσθεσης και αφαίρεσης στα διάφορα αριθμητικά συστήματα που
έχουν αναφερθεί. Πρώτα όμως κρίνεται σκόπιμο να αναφερθούν μερικοί ορισμοί:
➔ Time complexity Δτ(πολυπλοκότητα χρόνου): Ο χρόνος διάδοσης σήματος σε ένα ψηφιακό κύκλωμα. Βασική μονάδα μέτρησης είναι το
Δg που είναι η χρονική καθυστέρηση που έχει το σήμα μέχρι να εξέλθει από μια πύλη NAND ή NOR
Ορισμοί
➔ Area complexity(χωρική πολυπλοκότητα) Ατ: Είναι ο χώρος που καταλαμβάνει ένα ψηφιακό κύκλωμα(αν σχεδιαστεί σε 1 μόνο layer).
Βασική μονάδα μέτρησης είναι το 1 Αg που είναι ο χώρος που καταλαμβάνει μια πύλη NAND ή NOR.
Time and area Complexities
Half Adder
Full Adder
Single bit full adder
Single bit AOI(And- OR- invert) adder
Αφαίρεση
Έστω αφαίρεση , με το borrow-out(το αντίστοιχο του carry) bit . Οι λογικές συναρτήσεις που περιγράφουν την αφαίρεση
αυτή είναι
Προφανώς,το πως γίνεται η αφαίρεση εξαρτάται από το πιο αριθμητικό σύστημα χρησιμοποιούμε.Ο πιο γρήγορος τρόπος για να
γίνει η αφαίρεση χωρίς χρήση ειδικού hardware(πέραν αυτού που χρησιμοποιείται για πρόσθεση) είναι η πράξη A-Β να γίνει Α+(-Β)
ai−bi=d il i
Subtractor circuit
Αφαίρεση σε 1s-complement
Negation Circuit with enable
Αφαίρεση σε 2s complement
Για να βρούμε το συμπλήρωμα του 2 ενός αριθμού,πρώτα αλλάζουμε όλα τα 0 σε 1 και όλα τα 1 σε 0 και μετά προσθέτουμε το
1. Έτσι λοιπόν,το hardware κύκλωμα θα αποτελείται από ένα 1's complement circuit και από ένα κύκλωμα που προσθέτει μονάδα στο
αποτέλεσμα. Η χρονική πολυπλοκότητα είναι
Ενώ η χωρική πολυπλοκότητα
Αφαίρεση σε 2s complement no2
Το σύστημα που περιγράφηκε στην προηγούμενη διαφάνεια είναι το εξής:
Αφαίρεση,continued
Εναλλακτική υλοποίηση
Αφαίρεση,continuedΗ χρονική και χωρική πολυπλοκότητα υπολογίζεται ως εξής:
Από την οποία φαίνεται ότι αυτή η υλοποίηση(συμπλήρωμα του 2) είναι προτιμότερη από την προηγούμενη(συμπλήρωμα του 1).
Full 1bit adder/ subtractor with enable-M
Full 1bit adder/subtractor
Όπως μπορούμε να παρατηρήσουμε,το παραπάνω κύκλωμα εκτελεί πρόσθεση αν Μ=0 και αφαίρεση αν Μ=1. Άρα το Μ λειτουργεί
ουσιαστικά ως ελεγκτής της πράξης που θα γίνει.
Overflow
Προφανώς,overflow(υπερχείληση) συμβαίνει όταν το carry του MSB ή του προηγούμενου του ψηφίου(σε περίπτωση προσημασμένου
αριθμού) είναι 1.Για να μελετήσουμε μαθηματικά το σε ποιες περιπτώσεις γίνεται overflow,χωρίζουμε το πρόβλημα σε
υποκατηγορίες. Για συντομία(και για πρακτικούς λόγους) μελετάμε το overflow μόνο σε 2's complement 2 προσθετέων(Α και Β) που
έχουν n bits ο καθένας.
Περιπτώσεις overflow
● Αν Α,Β θετικά
● Αν Α,Β αρνητικά
● Α θετικό και Β αρνητικό
Ripple Carry AddersΑυτή η κατηγορία των adders βασίζεται στην λογική ότι για να
προσθέσουμε έναν αριθμό n bits το carry out του LSB συνδέεται με το carry in του επόμενου bit κοκ.Όπως φαίνεται στην επόμενη διαφάνεια,ειδική μέριμνα λαμβάνεται για περίπτωση overflow.
Ripple Carry schematic
Ones complemet addition
Για την εκτέλεση της πράξης Α+Β διακρίνουμε τις εξής περιπτώσεις:1) Α και Β θετικά: Στην περίπτωση αυτή η πρόσθεση γίνεται με την
ίδια μεθοδολογία με αυτή του συμπληρώματος του 2.2) Α και Β αρνητικά:
Προφανώς για να είναι σωστό το αποτέλεσμα,θα πρέπει να προστεθεί 1.Γι'αυτό υπάρχει η διάταξη end-arround carry(Cn στο
προηγούμενο σχήμα)3) Α αρνητικό και Β θετικό(|Α|>|Β|)
Χωρίς την διάταξη end-arround Carry,το αποτέλεσμα είναι
Και άρα το end-arround carry είναι περιττό
Ones complemet addition
4) Α αρνητικό, Β θετικό και |Α|<|Β|(χωρίς end arround carry)Το αποτέλεσμα θα είναι:
Μετά από την mod 2^n (συμπλήρωμα 1) μετατροπή,το κύκλωμα θα βγάλει ως έξοδο |Β|-|Α|-1, ενώ θα έπρεπε να βγάλει |Β|-|Α|. Για να λύσουμε το πρόβλημα αυτό,κάνουμε implement ένα end arround
carry
Τέλος,η συνολική χρονική πολυπλοκότητα του FA 1's complement είναι
Sign- Magnitude addition
Sign- Magnitude addition
Pre-Complement(P): Βρίσκει το συμπλήρωμα του 1 πριν την εκτέλεση της πράξης
Post-Complement(Q): Βρίσκει το συμπλήρωμα του 1 μετά την εκτέλεση της πράξης ,χρησιμοποιείται στην αφαίρεση αν |Β|>=|Α|
Εύρεση προσήμου πράξης:Ομόσημοι → το πρόσημο των 2 τελεστών
Ετερόσημοι → (|Β|>=|Α|)→ |Β|<Α|→
Sign- Magnitude addition
High Speed Adders- Conditional Sum
AdditionΣτην προσπάθεια μας για όσο το δυνατόν μεγαλύτερη ταχύτητα στις
πράξεις,αναγκαζόμαστε να παραλληλοποιήσουμε τις διαδικασίες όσο περισσότερο γίνεται. Το Conditional Sum Addition είναι μια
μέθοδος να προσθέτουμε δύο-δύο bits και ,εφόσον δεν μπορούμε να ξέρουμε το carry bit από πριν,βγάζουμε όλους τους πιθανούς
συνδιασμούς.
Συμβολίζουμε με το αποτέλεσμα της πράξης ανάμεσα σε 2 bit αν υποθέσουμε ότι το carry-in είναι 0. Αν υποθέσουμε ότι το carry in
είναι 1, το σύμβολο γίνεται
Έχουμε λοιπόν:
Conditional Sum Addition
Circuit of Conditional Sum
Carry Completion Sensing Addition
(CCSA)Η γραμική χρονική καθυστέρηση των rippley carry adders ,που
οφείλεται στην καθυστέρηση της “μεταφοράς„ του carry από το LSB στο MSB(δηλαδή του χρόνου που -στην χειρότερη περίπτωση- κάνει ο FA του MSB να υπολογίσει το carry-out και το σωστό αποτέλεσμα μας οδήγησε στην υλοποίηση CCSA's των οποίων η μέση τιμή του
χρόνου ολοκλήρωσης μιας πράξης είναι μικρότερη.
Στα CCSA's ορίζουμε 2 ειδών carrys, τα Independent(IC) και τα Dependent(DC).Όπως φαίνεται παρακάτω,τα IC carry μπορούν να οριστούν ταυτόχρονα(παράλληλα) για κάθε bit του αποτελέσματος
χωρίς να περιμένουμε να έρθει το προηγούμενο carry,αντίθετα με τα DC τα οποία χρειάζονται γνώση του IC ή/και του DC του
προηγούμενου bit.
CCSA additionΒλέπουμε ότι τα IC carry τα οποία δημιουργούνται παράλληλα
επιταχύνουν συνήθως την πρόσθεση καθώς η μεγαλύτερη αναμονή για carry είναι ίση με την μεγαλύτερη απόσταση ανάμεσα σε ένα IC
και σε ένα DC carry.Εκτέλεση της πράξης:
Βήμα 1ο: Δημιουργούμε τα IC carryΒήμα 2ο: Δημιουργούμε τα DC carry
Βήμα 3ο: Προσθέτουμε τους 2 αριθμούς μαζί με τα IC και DC carrys με mod2(δηλαδή αγνοούμε τα τυχόν carry που θα προκείψουν από
την πρόσθεση των 2 αρχικών αριθμών)
CCSA circuit
CCSA complexities
Carry Look-Ahead Adition(CLA)
Κάνοντας ένα βήμα παραπέρα από τις παραπάνω υλοποιήσεις, δημιουργήθηκε το CLA το οποίο μπορεί να δημιουργήσει παράλληλα
όλα τα carrys. Υπάρχουν διάφοροι τρόποι να γίνει αυτό, όπως το 1)Carry-Lookahead adder
2)Carry- Blockahead adder
Carry lookahead adder
Έστω Α και Β οι 2 προσθεταίοι των n bits.Ορίζουμε την συνάρτηση Carry generation ως Ορίζουμε επίσης και την Carry
propagation function ωςH carry generation μας δίνει ένα μέτρο της πιθανότητας εμφάνισης carry στην θέση i, ενώ η συνάρτηση carry propagation μας δίνει ένα μέτρο της πιθανότητας το carry in του bit i να μεταφερθεί ως carry in
στο bit i+1.Έτσι έχουμε
G i=Ai⋅Bi P i=Ai exor Bi
CLA
To είναι πλέον ανεξάρτητο από το C i1 C i
Carry Look-Ahead Adder schematic
Carry-Save adders(CSA)
Με την εξέλιξη της τεχνολογίας η απαίτηση για πρόσθεση όχι 2, αλλά περισσοτέρων αριθμών παράλληλα έγινε επιτακτική ανάγκη. Η
λογική πίσω από αυτή την υλοποίηση είναι να μην περιμένουμε το carry-out της πρώτης πρόσθεσης να τελειώσει πριν αρχίσουμε την
δεύτερη,αλλά η δεύτερη πρόσθεση να αρχίσει ήδη κοκ.Στο τέλος όλα τα carry προστίθενται(και άρα αν οι αριθμοί έχουν πολλά bits τότε η
υλοποίηση αρχίζει και γίνεται αρκετά αργή)
CSA algorithm
CSA circuit
CSA vs CLA
Bit-partitioned multiple addition
Στην συγκεκριμένη μέθοδο, τα ψηφία προστίθενται στήλη-στήλη, με κάθε αθροιστή να αναλαμβάνει την πρόσθεση ενός bit κάθε φορά.Ο
αριθμός των bits που είναι στο λογικό 1 υπολογίζεται από έναν αθροιστή στήλης(υλοποιείται συνήθως με ROM ή PLA).Ύστερα,οι
έξοδοι προσθέτονται σειριακά(αφού βάλουμε έναν συντελεστή βαρύτητας σε κάθε στήλη και τον κάνουμε ένα left shift). Ένα
παράδειγμα της μεθόδου αυτής φαίνεται στην παρακάτω διαφάνεια.
Bit partitioned addition of 2 7-digit numbers
Πρόσθεση 7 αριθμών των 4 bit
Bit partitioned Adder
Σύγκριση απόδοσης
Στην παρούσα εργασία ασχοληθήκαμε μόνο με την παρουσίαση των αλγορίθμων και την μελέτη της χρονικής και
χωρικής πολυπλοκότητας. Υπάρχουν όμως και άλλα πολύ σημαντικά μεγέθη όπως η καταναλισκόμενη ισχύς,τα οποία για 64 bit αθροιστές φαίνονται στα παρακάτω σχήματα. Αξίζει να σημειωθεί όμως ότι για λόγους πληρότητας της εργασίας στο πίνακα υπάρχουν και αλγόριθμοι παράλληλης άθροισης που
δεν αναλύθηκαν για λόγους εξικονόμησης χώρου.
Σύγκριση απόδοσης
Χρήσιμα LinksLNS VHDL ALGORITHMS :
http://www.ens-lyon.fr/LIP/Arenaire/Ware/FPLibrary/RNS VHDL ALGORITHMS:
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.3.5398C++ of VHDL for the transformation of parallel algorithms:
http://www.eda.org/VIUF_proc/Fall95/ANDERSON_R95B.PDFVHDL carry look-ahead adder(και άλλα πολλά):
http://www.altera.com/support/examples/vhdl/v_cl_addr.htmlPerformance Analysis of fast adders using VHDL:
http://www.computer.org/portal/web/csdl/doi/10.1109/ARTCom.2009.132
VHDL codes
Στις επόμενες διαφάνειες αυτές θα προσπαθήσουμε να δώσουμε παραδείγματα στην VHDL για τους διάφορους
τύπους αθροιστών που αναφέρθηκαν παρακάτω. Αξίζει να σημειωθεί ότι προαπαιτούμενο για την ανάγνωση του
επόμενου κομματιού είναι μια καλή γνώση της vhdl καθώς και η κατανόηση των εννοιών που έχουν αναπτυχθεί μέχρι τώρα.
Επίσης, όπου κρίνεται σκόπιμο θα υπάρχουν σχόλια στον κώδικα.Τέλος οι αλγόριθμοί παρατίθενται όχι με την μορφή που αναλύθηκαν, αλλά από τον ευκολότερο (σε μέγεθος-
δυσκολία κώδικα) στον δυσκολότερο.
Carry Look-Ahead adder
Στο παράδειγμα αυτό θα υλοποιηθεί σε vhdl ένας 8bit Carry look Ahead Adder. Το carry,όπως έχουμε μάθει, προκύπτει
παράλληλα με την βοήθεια των συναρτήσεων P και G. Η υλοποίηση αυτή μπορεί να γίνει με μια λογική AND-OR 2
επιπέδων και έτσι μειώνεται αισθητά η καθηστέρηση δημιουργίας του carry.
CLA VHDL implementation
LIBRARY ieee;USE ieee.std_logic_1164.ALL;
ENTITY c_l_addr IS PORT ( x_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0); y_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0); carry_in : IN STD_LOGIC; sum : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); carry_out : OUT STD_LOGIC );END c_l_addr;
ARCHITECTURE behavioral OF c_l_addr IS
SIGNAL h_sum : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL carry_generate : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL carry_propagate : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL carry_in_internal : STD_LOGIC_VECTOR(7 DOWNTO 1);
CLA VHDL implementation
BEGIN h_sum <= x_in XOR y_in; carry_generate <= x_in AND y_in; carry_propagate <= x_in OR y_in; PROCESS (carry_generate,carry_propagate,carry_in_internal) BEGIN carry_in_internal(1) <= carry_generate(0) OR (carry_propagate(0) AND carry_in); inst: FOR i IN 1 TO 6 LOOP carry_in_internal(i+1) <= carry_generate(i) OR (carry_propagate(i) AND carry_in_internal(i)); END LOOP; carry_out <= carry_generate(7) OR (carry_propagate(7) AND carry_in_internal(7)); END PROCESS;
sum(0) <= h_sum(0) XOR carry_in; sum(7 DOWNTO 1) <= h_sum(7 DOWNTO 1) XOR carry_in_internal(7 DOWNTO 1);END behavioral;
Ripple Carry Adder
Στο συγκεκριμένο παράδειγμα θα υλοποιηθεί ένας Ripple Carry Adder με την βοήθεια της συνάρτηση του πλήρη
αθροιστή. Στην βιβλιοθήκη της altera, ο πλήρης αθροιστής υπάρχει στο αρχείο full_add.vhd, όμως κρίνεται σκόπιμο να
παρουσιαστεί και εδώ.Τέλος, να σημειώσουμε ότι η υλοποίηση δίνει προτεραιότητα στην όσο το δυνατό μικρότερη
χρησιμοποίηση λογικών πόρων, και άρα είναι κάπως πιο αργή από άλλες υλοποιήσεις του Ripple Carry Adder
Ripple Carry Adder VHDL Example
LIBRARY altera;USE altera.maxplus2.carry;
LIBRARY ieee;USE ieee.std_logic_1164.ALL;
LIBRARY WORK;USE WORK.usr_def.ALL;
ENTITY f_add8 IS PORT( x_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0); y_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0); c_in : IN STD_LOGIC; sum : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); c_out : OUT STD_LOGIC);END f_add8;
Ripple Carry Adder VHDL Example
ARCHITECTURE struct OF f_add8 ISSIGNAL im : STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL imi : STD_LOGIC_VECTOR(6 DOWNTO 0);BEGIN c0 : full_add PORT MAP (x_in(0),y_in(0),c_in,sum(0),im(0)); c01 : carry PORT MAP (im(0),imi(0)); c : FOR i IN 1 TO 6 GENERATE c1to6: full_add PORT MAP (x_in(i),y_in(i), imi(i-1),sum(i),im(i)); c11to16: carry PORT MAP (im(i),imi(i)); END GENERATE; c7 : full_add PORT MAP (x_in(7),y_in(7), imi(6),sum(7),c_out);END struct;
Full Adder VHDLΣτον ripple carry adder έγινε η χρήση του πλήρη αθροιστή(full
adder) του οποίου ο κώδικας στην VHDL είναι:
LIBRARY ieee;USE ieee.std_logic_1164.ALL;
ENTITY full_add IS PORT( a : IN STD_LOGIC; b : IN STD_LOGIC; c_in : IN STD_LOGIC; sum : OUT STD_LOGIC; c_out : OUT STD_LOGIC);END full_add;
ARCHITECTURE behv OF full_add ISBEGIN sum <= a XOR b XOR c_in; c_out <= (a AND b) OR (c_in AND (a OR b));END behv;
Conditional Sum Adder VHDL code
Στο επόμενο παράδειγμα θα υλοποιηθεί adder 2 αριθμών των 16 bits με την μέθοδο του Conditional Sum addition.Σύμφωνα με την θεωρία που αναπτύχθηκε παραπάνω,η πράξη θα γίνει
σε 4 βήματα.Βήμα 1ο:Όλα τα conditional sums και τα carries του i-ζεύγους
από bits δημιουργούνται.Βήμα 2ο: Τα bits του βήματος αυτού(level 2 bits) καθορίζονται
από το 1ο βήμα. Αρχικά, όλα τα bits του 1ο βήματος ομαδοποιούνται ανά 2. Το λιγότερο σημαντικό carry
χρησιμοποιείται για να επιλέξει ποιο άθροισμα και πιο carry της επόμενης θέσης θα μεταφερθεί στο 2ο βήμα
Conditional Sum Adder VHDL code
Βήμα 3ο: Ομοίως, τα carrys και τα αθροίσματα του 3ου επιπέδου καθορίζονται από τις εξόδους του 2ου επιπέδου.
Βήμα 4ο: Ομοίως με τα βήματα 2,3. Έτσι λοιπόν με μια τελευταία πρόσθεση έχουμε το επιθυμητό αποτέλεσμα. Ο κώδικας για την παραπάνω(16bit) υλοποίηση δίνεται στις
επόμενες διαφάνειες.
Conditional Sum Adder VHDL code
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity Adder_CS_16bit isport (a, b: in std_logic_vector(15 downto 0);cin: in std_logic;sum: out std_logic_vector(15 downto 0);cout: out std_logic);end Adder_CS_16bit;architecture behavioral of Adder_CS_16bit issignal s10: std_logic_vector(15 downto 0) := "0000000000000000";signal s11: std_logic_vector(15 downto 0) := "0000000000000000";signal c10: std_logic_vector(15 downto 0) := "0000000000000000";signal c11: std_logic_vector(15 downto 0) := "0000000000000000";signal s20: std_logic_vector(15 downto 0) := "0000000000000000";signal s21: std_logic_vector(15 downto 0) := "0000000000000000";signal c20: std_logic_vector(15 downto 0) := "0000000000000000";signal c21: std_logic_vector(15 downto 0) := "0000000000000000";signal s30: std_logic_vector(15 downto 0) := "0000000000000000";signal s31: std_logic_vector(15 downto 0) := "0000000000000000";signal c30: std_logic_vector(15 downto 0) := "0000000000000000";signal c31: std_logic_vector(15 downto 0) := "0000000000000000";signal s40: std_logic_vector(15 downto 0) := "0000000000000000";signal s41: std_logic_vector(15 downto 0) := "0000000000000000";signal c40: std_logic_vector(15 downto 0) := "0000000000000000";signal c41: std_logic_vector(15 downto 0) := "0000000000000000";signal P: std_logic := '0';signal G: std_logic := '0';
Conditional Sum Adder VHDL code
begin-- - 1Κατασκευήβασικούκελιούπουκάνει τηνπρόσθεση βήμα οprocess (a, b)beginP <= a(0) xor b(0);G <= a(0) and b(0);end process;process (a, b, P, G, cin)begins10(0) <= P xor cin;c10(0) <= G or (P and cin);for i in 1 to a'length - 1 loops10(i) <= a(i) xor b(i);c10(i) <= a(i) and b(i);c11(i) <= a(i) or b(i);end loop;end process;process (s10)begins11 <= not s10;end process;
Conditional Sum Adder VHDL code
-- 2Βήμα οprocess (s10, s11, c10, c11)begins20(0) <= s10(0);if c10(0) = '1' thens20(1) <= s11(1);c20(1) <= c11(1);elsif c10(0) = '0' thens20(1) <= s10(1);c20(1) <= c10(1);end if;for i in 2 to a'length - 1 loopif (i mod 2 = 0) thens20(i) <= s10(i);s21(i) <= s11(i);if c10(i) = '1' thens20(i+1) <= s11(i+1);c20(i+1) <= c11(i+1);elsif c10(i) = '0' thens20(i+1) <= s10(i+1);c20(i+1) <= c10(i+1);end if;
Conditional Sum Adder VHDL code
if c11(i) = '0' thens21(i+1) <= s10(i+1);c21(i+1) <= c10(i+1);elsif c11(i) = '1' thens21(i+1) <= s11(i+1);c21(i+1) <= c11(i+1);end if;end if;end loop;end process;-- 3Βήμα οprocess (s20, s21, c20, c21)begins30(1 downto 0) <= s20(1 downto 0);if c20(1) = '1' thens30(3 downto 2) <= s21(3 downto 2);c30(3) <= c21(3);elsif c20(1) = '0' thens30(3 downto 2) <= s20(3 downto 2);c30(3) <= c20(3);end if;
Conditional Sum Adder VHDL code
for i in 4 to a'length - 1 loopif (i mod 4 = 1) thens30(i downto i-1) <= s20(i downto i-1);s31(i downto i-1) <= s21(i downto i-1);if c20(i) = '1' thens30(i+2 downto i+1) <= s21(i+2 downto i+1);c30(i+2) <= c21(i+2);elsif c20(i) = '0' thens30(i+2 downto i+1) <= s20(i+2 downto i+1);c30(i+2) <= c20(i+2);end if;if c21(i) = '0' thens31(i+2 downto i+1) <= s20(i+2 downto i+1);c31(i+2) <= c20(i+2);elsif c21(i) = '1' thens31(i+2 downto i+1) <= s21(i+2 downto i+1);c31(i+2) <= c21(i+2);end if;end if;end loop;end process;
Conditional Sum Adder VHDL code
-- 4Βήμα οprocess (s30, s31, c30, c31)begins40(3 downto 0) <= s30(3 downto 0);if c30(3) = '1' thens40(7 downto 4) <= s31(7 downto 4);c40(7) <= c31(7);elsif c30(3) = '0' thens40(7 downto 4) <= s30(7 downto 4);c40(7) <= c30(7);end if;-- level - 4process (s30, s31, c30, c31)begins40(3 downto 0) <= s30(3 downto 0);if c30(3) = '1' thens40(7 downto 4) <= s31(7 downto 4);c40(7) <= c31(7);elsif c30(3) = '0' thens40(7 downto 4) <= s30(7 downto 4);c40(7) <= c30(7);end if;
Conditional Sum Adder VHDL code
c40(i+4) <= c30(i+4);end if;if c31(i) = '0' thens41(i+4 downto i+1) <= s30(i+4 downto i+1);c41(i+4) <= c30(i+4);elsif c31(i) = '1' thens41(i+4 downto i+1) <= s31(i+4 downto i+1);c41(i+4) <= c31(i+4);end if;end if;end loop;end process;
Conditional Sum Adder VHDL code
-- 5βήμα οprocess (s40, s41, c40, c41)beginsum(7 downto 0) <= s40(7 downto 0);if c40(7) = '1' thensum(15 downto 8) <= s41(15 downto 8);cout <= c41(15);elsif c40(7) = '0' thensum(15 downto 8) <= s40(15 downto 8);cout <= c40(15);end if;end process;end behavioral;
Στο κεφάλαιο αυτό θα ασχοληθούμε με τις τεχνικές του διαδοχικού πολλαπλασιασμού παρουσιάζοντας τεχνικές τόσο υλοποίησης όσο και επιτάχυνσης της εν λόγω διαδικασίας.Οι αλγόριθμοι που θα συζητηθούν παρακάτω βασίζονται στην προσέγγιση add-shift.Πρώτα όμως θα αναφέρουμε μερικούς συμβολισμούς που θα χρησιμοποιηθούν στο παρόν κεφαλαίο:
Sequential Sequential MultiplicationMultiplication
SSigned & Unsignedigned & Unsigned MultiplicationMultiplication
Έστω A και B δύο μη προσημασμένοι n-bit αριθμοί.
Ο πολλαπλασιασμός P=A x B θα έχει σαν αποτέλεσμα έναν αριθμό P 2n-bit.
Στην περίπτωση που οι Α και Β είναι προσημασμένοι, το αποτέλεσμα P θα έχει 2(n-1)+1=2n-1 bits συμπεριλαμβανομένου και του bit προσήμου.
Για να έχουμε μια ομοιόμορφη απεικόνιση, προστίθεται στο αποτέλεσμα ένα εικονικό(dummy) bit μεταξύ του bit προσήμου και του most significant bit οπότε και προκύπτει ένας αριθμός 2n –bits.
Το εικονικό bit μπορεί να είναι είτε 0, είτε το αντίγραφο του bit προσήμου ανάλογα με τον αν η απεικόνιση του αριθμού είναι προσημασμένου μέτρου ή συμπληρώματος με βάση το ένα ή το δύο.
Pencil-And-Paper Pencil-And-Paper MultiplicationMultiplication
‹----------Partial Product
Κάθε Partial Product μπορεί να δημιουργηθεί με πύλες AND και στο τέλος το αποτέλεσμα θα προκύψει με την πρόσθεση τους.
Add-And-Shift Add-And-Shift ApproachApproach
Αντί να δημιουργούμε κάθε partial product χωριστά και ύστερα να τα προσθέτουμε όλα μαζί στο τέλος, προσθέτουμε κάθε partial product κατευθείαν στο τελικό ποσό αμέσως μετά τη δημιουργία του.
Εφόσον κάθε bit που εξετάζεται είναι υψηλότερο κατά μία θέση bit σε σχέση με το προηγούμενο, κάθε partial product που προστίθεται θα πρέπει να είναι κατά μία θέση bit αριστερά σε σχέση με το προηγούμενο.
O χρόνος καθυστέρησης μιας μονάδας indirect multiplication είναι:
Add-And-Shift Add-And-Shift ApproachApproach (cont.)(cont.)
Hardware for Sequential Multiplication
Register Occupation
Indirect Multiplication Indirect Multiplication SchemesSchemes
1. Unsigned Number Multiplication
2. Sign-Magnitude Number Multiplication
3. One’s Complement Number Multiplication
4. Two’s Complement Number Multiplication
Unsigned Number Unsigned Number MultiplicationMultiplication
H διαδικασία ολοκληρώνεται σε n+1 κύκλους(n ο αριθμός bit του κάθε αριθμού).
Ένας κύκλος C0 για την εγκατάσταση των δεδομένων στους καταχωρητές και C1,...,Cn κύκλοι για την εκτέλεση των πράξεων.
Sign-Magnitude Number Sign-Magnitude Number MultiplicationMultiplication
H διαδικασία ολοκληρώνεται σε n κύκλους.
Στον κύκλο C0 μαζί με την εγκατάσταση των δεδομένων στους καταχωρητές τα bit προσήμου των Α και Β φορτώνονται στα FF As και Bs
αντίστοιχα ενώ το MSB των καταχωρητών AX και MR τοποθετούνται στο μηδέν.
Το πρόσημο του αποτελέσματος υπολογίζεται στο τέλος από την πράξη A Bs sΔ
One’s Complement One’s Complement Number MultiplicationNumber Multiplication
H διαδικασία ολοκληρώνεται σε n+2 κύκλους.
Στον κύκλο C0 φορτώνονται τα δεδομένα στους καταχωρητές ενώ στον κύκλο C1 οι αρνητικοί αριθμοί μετατρέπονται στη μορφή προσημασμένου μέτρου.
Από τον κύκλο C2 μέχρι και τον Cn πραγματοποιείται η loop του πολλαπλασιασμού
Τέλος στον κύκλο Cn+1 το αποτέλεσμα ξαναμετατρέπεται στην μορφή συμπληρώματος του ένα.
Two’s Complement Two’s Complement Number MultiplicationNumber Multiplication
H διαδικασία ολοκληρώνεται σε n+4 κύκλους.
Στον κύκλο C0 φορτώνονται τα δεδομένα στους καταχωρητές, στον κύκλο C1 οι αρνητικοί αριθμοί μετατρέπονται σε συμπληρώματα του ένα ενώ στον κύκλο C2 μετατρέπονται στη μορφή προσημασμένου μέτρου.
Από τον κύκλο C3 μέχρι και τον Cn+1 πραγματοποιείται η loop του πολλαπλασιασμού
Τέλος στους κύκλους Cn+2 και Cn+3 πραγματοποιείται η αντίστροφη διαδικασία ώστε το αποτέλεσμα να επιστρέψει στην μορφή συμπληρώματος του δύο.
Robertson’s Signed Number Robertson’s Signed Number MultiplicationMultiplication
Οι διαδικασίες pre και post complemement που παρουσιάστηκαν προηγουμένως, παρόλη την λογική τους ορθότητα είναι ιδιαίτερα χρονοβόρες. Για το λόγο αυτό θα αναπτύξουμε παρακάτω δυο περιπτώσεις του πολλαπλασιασμού Robertson για προσημασμένους αριθμούς.
Negative Multiplicand Times Negative Multiplicand Times Positive MultiplierPositive Multiplier
Negative Multiplicand Times Negative Multiplicand Times Negative MultiplierNegative Multiplier
Recoding Recoding TechniqueTechnique
1. Non-Overlapped Multiple Bit Scanning
2. Overlapped Multiple Bit Scanning
3. Booth’s Algorithm
4. Canonical Multiplier Recoding
Non-Overlapped Multiple Non-Overlapped Multiple Bit Scanning Bit Scanning
Single Bit Scanning Multiple Bit Scanning
Overlapped Multiple Bit Overlapped Multiple Bit Scanning Scanning
1
Η διαδοχική ακολουθία από 1 σε μια δυαδική απεικόνιση ονομάζεται “string of 1s”
Υποθέτουμε ότι ξεκινάμε το μέτρημα από τα δεξιά οπότε το τέρμα δεξί 1 καλείται “beginning of string”
Για το τέρμα αριστερό 1 ένα 0 αριστερά του ορίζει το τέλος του string.
¨Ένα τέτοιο long string από 1 μπορεί να επανακωδικοποιηθεί τοποθετώντας στο begging of string το στο end of string το 1 και γεμίζοντας όλα τα ενδιάμεσα με 0
String Property of a conventional radix
Overlapped Multiple Bit Overlapped Multiple Bit Scanning (cont.) Scanning (cont.)
Με αυτόν τον τρόπο, όταν ελέγχονται τα στοιχεία του πολλαπλασιαστή κατά τη διάρκεια του πολλαπλασιασμού, μπορούμε να αντικαταστήσουμε τις συνεχόμενες προσθέσεις του πολλαπλασιαστέου με μία μόνο αφαίρεση στην αρχή του string και μια πρόσθεση στο τέλος του.
Recoding Triplets
Non-OverlappedNon-Overlapped VsVs.. Overlapped Overlapped Multiple Bit Scanning Multiple Bit Scanning
Two-Bit Scan vs. Overlapped Three-Bit Scan
To εικονικό 0 τοποθετήθηκε στο στα δεξιά του LSB του string ούτως ώστε αν το LSB είναι 1 να αναγνωριστούν οι περιπτώσεις “beginning of string” ή “isolated 1”
O έλεγχος μπορεί να γίνει από δεξιά προς τα αριστερά και αντίστροφα.
Κάθε τριπλέτα μπορεί να ελεχγθεί ταυτόχρονα παρουσιάζοντας έτσι το μοντέλο του παράλληλου ελέγχου που θα δούμε παρακάτω.
Booth’s Booth’s AlgorithmAlgorithm
Με βάση το string property που αναφέρθηκε προηγουμένως, μπορούμε να επανακωδικοποιήσουμε τον πολλαπλασιαστή B σε D, βρίσκοντας για 2 bit του B ένα bit του D όπως παρακάτω:
με
Επειδή όπως αναφέραμε η αρχή του string of 1s αναγνωρίζεται από ένα 0 στα δεξιά, τοποθετούμε ένα dummy 0 δεξιά από το LSB του string.
O έλεγχος μπορεί να πραγματοποιηθεί είτε από δεξιά προς τα αριστερά, είτε από τα αριστερά προς τα δεξιά είτε παράλληλα έχοντας πάντα το ίδιο αποτέλεσμα.
Booth’s AlgorithmBooth’s Algorithm ((cont.cont.))
Υποθέτοντας ότι: και
ο αλγόριθμος του Booth περιγράφεται ως εξής:
Όπως γίνεται κατανοητό ο συγκεκριμένος αλγόριθμος μπορεί να πολλαπλασιάσει δύο αριθμός συμπληρώματος του 2 χωρίς να τον ενδιαφέρουν τα πρόσημά τους, παρακάμπτοντας έτσι τις διαδικασίες pre και post-complement.
Booth’s Algorithm Booth’s Algorithm (example)(example)
Booth’s Algorithm Example
Radix-4
Canonical Multiplier Canonical Multiplier RecodingRecoding
Η συγκεκριμένη τεχνική χρησιμοποιεί την απεικόνιση signed-digit (SD).
Ένα minimal SD διάνυσμα είναι αυτό που περιέχει τον ελάχιστο αριθμό μη-μηδενικών ψηφίων.
Ένα canonical SD διάνυσμα είναι ένα minimal SD διάνυσμα D=dn-1…d1d0
που περιέχει μη γειτονικά μη-μηδενικά ψηφία δλδ di x di-1=0 για 1≤ i ≤ n-1.
Από εδώ και πέρα θα υποθέτουμε ότι το διάνυσμα D=dndn-1…d1d0 θα έχει n+1 bits και dn ≡ 0.
Ένας αριθμός στην canonical μορφή του έχει (n+1)/2 μη μηδενικά bit..
(n+1)-bit number to (n+1)-bit canonical SD number algorithm
Canonical Multiplier Canonical Multiplier Recoding (example)Recoding (example)
Scan Pattern
Canonical Multiplier Canonical Multiplier Recoding (example)Recoding (example)
Multiples Selection
Canonical Multiplier Canonical Multiplier Recoding (example)Recoding (example)
Adding the Bit-Pairs Parallelly Scanned with a CSA Tree
Parallel Parallel MultiplicationMultiplication
Στον παράλληλο πολλαπλασιασμό, χρησιμοποιείται μια συστοιχία πολλαπλασιαστών όπου πολλαπλά επίπεδα υλικού αντικαθιστούν τα κυκλώματα του ενός επιπέδου.
Κάθε πρόσθεση υλοποιείται από διαφορετικά επίπεδα υλικού και κάθε ολίσθηση από την κατάλληλη καλωδίωση μεταξύ των επιπέδων.
Οι διαδικασίες πολλαπλασιασμού επικαλύπτονται δηλαδή ο δεύτερος πολλαπλασιασμός ξεκινάει πριν ολοκληρωθεί ο πρώτος.
Wallace TreesWallace Trees
Στην πολλαπλασιαστική διαδικασία η πρόσθεση των μερικών γινομένων είναι η πιο χρονοβόρα δραστηριότητα.
Χρειαζόμαστε ένα υλικό το οποίο να χειρίζεται αυτές τις διαδοχικές προσθέσεις.
Ένα Wallace tree είναι ένας slice-bit αθροιστής ο οποίος προσθέτει όλα τα bit που βρίσκονται στη ίδια bit position.
Wallace Trees (cont.)Wallace Trees (cont.)
Unsigned Array Unsigned Array MultiplierMultiplier
Έστω και μη προσημασμένοι ακέραιοι και το γινόμενο τους.
Έχουμε:
Unsigned Array Unsigned Array MultiplierMultiplier ( (cont.cont.))
5 – 5 Multiplication Example
} summands
-------------->---------------------->
------------------------------>-------------------------------------->
-----------------------------------------------> Par
tial P
rodu
cts
Unsigned Array Unsigned Array MultiplierMultiplier ( (cont.cont.))
H τελευταία σειρά των FA μπορεί να αντικατασταθεί από έναν Carry Lookahead Adder ενός επιπέδου ώστε ο χρόνος καθυστέρησης να είναι ανάλογος του μεγέθους του πολλαπλασιαστέου.
Η αποδοτικότητα μπορεί να βελτιωθεί προσθέτοντας latch registers ανάμεσα στις σειρές των FA. Έτσι η πρόσθεση του μερικού γινομένου ενός προηγούμενου πολλαπλασιασμού επικαλύπτεται από την πρόσθεση του επόμενου.
Two’s Complement Two’s Complement Array MultiplierArray Multiplier
Ισχύει ότι:
Προκύπτει ότι για να βρούμε τον αντίθετο ενός αριθμού μπορούμε να αλλάξουμε το αi με 1-αi και το 0 με το 1 και αντίστροφα.
Two’s Complement Array Two’s Complement Array MultiplierMultiplier ( (cont.cont.))
Με το κατάλληλο συνδυασμό διαφόρων τύπων αθροιστών μπορούμε να κατασκευάσουμε συστοιχίες που υλοποιούν απευθείας πολλαπλασιασμούς συμπληρώματος.
Baugh-Wooley Two’s Baugh-Wooley Two’s Complement MultiplierComplement Multiplier
Έστω και , δύο αριθμοί συμπληρώματος του δύο και το γινόμενό τους.
Σύμφωνα με το προηγούμενο κεφάλαιο έχουμε:
Οπότε :κα
ι
Baugh-Wooley Two’s Baugh-Wooley Two’s Complement MultiplierComplement Multiplier((cont.cont.))
O τρίτος και ο τέταρτος όρος της προηγούμενης έκφρασης ήταν αρνητικός.
Αποδεικνύεται ότι:
ΔBW=[2(m+n) + 1]Δg
Baugh-Wooley Two’s Complement Baugh-Wooley Two’s Complement MultiplierMultiplier((example)example)
Modular StructureModular Structure
Είναι συστοιχίες πολλαπλασιαστών που εκτελούν γρήγορους πολλαπλασιασμούς μεταξύ μικρού ή μεσαίου μήκους όρων.
Modular Modular Structure(example)Structure(example)
Baugh-Wooley Two’s Baugh-Wooley Two’s Complement MultiplierComplement Multiplier((cont.cont.))
Additive Multiply Additive Multiply ModulesModules
Τα AMM μπορούν να δεχθούν “έξτρα” προσθετέους και τους προσθέτουν στο γινόμενο του πολλαπλασιαστέου και του πολλαπλασιαστή εισόδου.
Additive Multiply Additive Multiply Modules(Modules(exampleexample))
Additive Multiply Additive Multiply Modules(Modules(exampleexample))
Sequential DivisionSequential Division
Substract –And-Shift Substract –And-Shift ApproachApproach
Στους ψηφιακούς υπολογιστές οι περισσότερες διαδικασίες διαίρεσης, πραγματοποιούνται με μια αναδρομική διαδικασία που παρουσιάζεται στην εξίσωση:
Όπου,
•j=0,1,...,n-1, o δείκτης αναδρομής
•R(j) ,το μερικό υπόλοιπο στην j-η επανάληψηR(0) , ο διαιρετέος
R(n) , το τελικό υπόλοιπο
•q ,το πηλίκο
•D ,o διαιρέτης
•r ,η βάση αρίθμησης
Pencil-And-Paper Pencil-And-Paper DivisionDivision
Pencil-And-Paper Division Example
Long Division FormLong Division Form
O διαιρετέος R(0) και ο διαιρέτης D είναι σε κλασματική μορφή δλδ.
R(0)=r0.r1r2....
D=d0.d1d2.... και
Q=q0.q1q2....q(n)
R(0)<D , D≠0 και είναι θετικοί
Υπερχείλιση πηλίκου έχουμε όταν R(0)≥D
Restoring DivisionRestoring Division
Ισχύει ότι: 0≤R(0)<D
Κάθε φορά το D αφαιρείται από το μερικό υπόλοιπο μέχρις ότου η διαφορά γίνει αρνητική.
Tο D προστίθεται στην αρνητική διαφορά (restoring)
To πηλίκο προκύπτει από τον αριθμό τον αφαιρέσεων:q(j+1)=(number of subtractions -1).
Binary Restoring Binary Restoring DivisionDivision
Αν το πρόσημο του R(j+1) είναι θετικό, είναι q(j+1)=1.
Αν το πρόσημο του R(j+1) είναι θετικό, είναι q(j+1)=0.
Binary Restoring Binary Restoring DivisionDivision HardwareHardware
Binary Non-Restoring Binary Non-Restoring DivisionDivision
Βελτιωμένη μέθοδος χωρίς την “πρόσθεση αποκατάστασης”(restoring addition).
Ισχύει: με D>0.
H πράξη που πραγματοποιείται μπορεί να είναι είτε πρόσθεση είτε αφαίρεση ανάλογα με πρόσημο του μερικού υπολοίπου δλδ:
Παρομοίως το πηλίκο προκύπτει:
Όταν 2R(j)=0 η διαδικασία τερματίζεται.
High-Radix Non-High-Radix Non-Restoring DivisionRestoring Division
To πεδίο τιμών του πηλίκου είναι: {-(r-1),…,-1,1,…,(r-1)} , όπου r η βάση.
– D < Rj < D
Q=.q1q2...qn
π.χ
Για r=4 το πεδίο τιμών του qj+1 είναι {-3,-2,-1,1,2,3}
- 4D < 4R(j) < 4D
High – Radix Non -Restoring High – Radix Non -Restoring Division (cont.)Division (cont.)
Στην περίπτωση που θέλουμε να μετατρέψουμε ένα προσημασμένο αριθμό r βάσης στην αντίστοιχη μορφή συμπληρώματος του r , Q=q 0.q’1q’2....… με
χρησιμοποιούμε τον διπλανό αλγόριθμο.
SRT DivisionSRT DivisionSweeney, Robertson & Tocher------>SRT
και (D και R κανονικοποιημένες).
qj+1 є {-1, 0, 1}
SRT DivisionSRT Division ( (cont.cont.))
Αν χρησιμοποιήσουμε μόνο το τότε έχουμε:
και
Robertson’s High-Robertson’s High-Radix DivisionRadix Division
1. To μερικό υπόλοιπο R(j) ολισθαίνει στα αριστερά κατά μία θέση.
2. Επιλέγεται το κατάλληλο κλάσμα ώστε η μέγιστη απόλυτη τιμή του
μειωθεί κατά 1/r.
3. Δημιουργείται ένα ψηφίο του πηλίκου που αντιστοιχεί στο επιλεγμένο κλάσμα.
με
με
Robertson DiagramsRobertson Diagrams
Convergence Convergence DivisionDivision
To πηλίκο προκύπτει από επαναληπτικούς πολλαπλασιασμούς και όχι από ολισθήσεις και αφαιρέσεις.
Χρησιμοποιείται το ίδιο υλικό που υλοποιεί και τους πολλαπλασιασμούς.
Ο διαιρέτης και ο διαιρετέος χρησιμοποιούνται σαν αριθμητής και παρονομαστής κλάσματος.
Πολλαπλασιάζονται με την ίδια ακολουθία παραγόντων σύγκλισης ενώ η τιμή του κλάσματος παραμένει σταθερή.
Όταν ο παρονομαστής φτάσει στο 1 ο αριθμητής γίνεται το επιθυμητό πηλίκο.
Convergence DivisionConvergence Division MethodologiesMethodologies
Για ικανοποιητικά μεγάλα m:
Υποθέτουμε ότι οι N και D είναι θετικά κανονικοποιημένα κλάσματα οπότε:
Convergence DivisionConvergence Division MethodologiesMethodologies ( (cont.cont.))
Ο γενικός κανόνας επιλογής των πολλαπλασιαστών Ri είναι :
Οι παράγοντες Ri υπολογίζονται από τη σχέση Ri = 2 – Di-1
The end!
Ευχαριστούμε για την προσοχή και την ανάγνωση της παρουσίασης!