Σχεδίαση Ψηφιακών...
TRANSCRIPT
Σχεδίαση Ψηφιακών Συστημάτων
Ενότητα 4: Σχεδιασμός Σειριακού Αθροιστή
Κυριάκης - Μπιτζάρος Ευστάθιος Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα
Άδειες Χρήσης
• Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.
• Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.
Χρηματοδότηση • Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια
του εκπαιδευτικού έργου του διδάσκοντα.
• Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού.
• Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Σκοπός Ενότητας
Ανάλυση και σχεδίαση σειριακού αθροιστή με χρήση των βασικών στοιχείων που έχουν αναλυθεί στις 3 προηγούμενες
ενότητες.
Περιεχόμενα ενότητας
• Σειριακός Αθροιστής • Μηχανή Άθροισης • Κύκλωμα Σειριακού Αθροιστή • Κύκλωμα Σειριακού Αθροιστή • Καταχωρητής Ολίσθησης (shift register) • Σύγχρονος Μετρητής (Counter) • Πακέτο Βασικών Στοιχείων (Components) • Χρήση Βασικών Στοιχείων
Σειριακός Αθροιστής
Sum A B + =
Shift register
Shift register
Adder FSM Shift register
B
A
a
b
s
Clock
Διάγραμμα Βαθμίδων Σειριακού Αθροιστή
FSM:Finite State Machine
Μηχανή Άθροισης
Κύκλωμα Μηχανής Άθροισης
Full adder
a b
s
D Q
Q
carry-out
Clock
Reset
Y y carry-in
Κύκλωμα Σειριακού Αθροιστή -1
Adder FSM
Clock
E w L
E w L
b 7 b 0
a 7 a 0
E w L
E L
Q 3 Q 2 Q 1 Q 0
D 3 D 2 D 1 D 0
1 0 0 0
Counter
0 0
Reset
Sum 7 Sum 0
0 1
0 1
Run
SSer
Aser 7 Aser 0
Bser 7 Bser 0
low8
Cnt_in
Shift Register
Shift Register
Shift Register
Κύκλωμα Σειριακού Αθροιστή -2
Clock
E w L
E w L
E w L
E L
Q 3 Q 2 Q 1 Q 0
D 3 D 2 D 1 D 0
1 0 0 0
Counter
00000000
Reset
0 1
0 1
Run
S
Cnt_in
Shift Register
Shift Register
Shift Register
Full adder
D Q
Q
00100110
01101101
1
00100110
01101101
00000000
1
1
0
0
00010011
00110110
10000000
1
0
1 0 0 1
0
0
00001001
00011011
11000000
0
1
1 0 1 0
0
0
00000100
00001101
01100000
0
1
1 0 1 1
1
0
00000010
00000110
00110000
1
0
1 1 0 0
1
0
00000001
00000011
10011000
0
1
1 1 0 1
0
0
00000000
00000001
01001100
0
1
1 1 1 0
1
0
00000000
00000000
00100110
1
0
1 1 1 1
1
0
00000000
00000000
10010011
0
0
0 0 0 0
0 0
1 0 0 0
Καταχωρητής Ολίσθησης (shift register)
D Q
Q Clock
D Q
Q
D Q
Q
D Q
Q
In Out
t 0
t 1
t 2
t 3
t 4
t 5
t 6
t 7
1
0
1
1
1
0
0
0
0
1
0
1
1
1
0
0
0
0
1
0
1
1
1
0
0
0
0
1
0
1
1
1
0
0
0
0
1
0
1
1
Q 1 Q 2 Q 3 Q 4 Out = In Κύκλωμα
Q 1 Q 2 Q 3 Q 4
Καταχωρητής Ολίσθησης Q 3 Q 2 Q 1 Q 0
Clock
Parallel input
Parallel output
Shift/Load
Serial input
D Q
Q
D Q
Q
D Q
Q
D Q
Q
Πλήρης Αθροιστής
c i
x i y i
c i 1 +
s i
Κύκλωμα Πλήρους Αθροιστή
Σύγχρονος Μετρητής (Counter)
Enable D Q
Q
Q 0
D Q
Q
Q 1
D Q
Q
Q 2
D Q
Q
Q 3
D 0
D 1
D 2
D 3
Load Clock
Output carry
0 1
0 1
0 1
0 1
Καταχωρητής Ολίσθησης (shift register) ENTITY shiftrn IS
GENERIC ( N : INTEGER := 8 ) ; PORT (R : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0) ; Clock, L, w,E : IN STD_LOGIC ; Q : BUFFER STD_LOGIC_VECTOR(N-1 DOWNTO 0) ) ; END shiftrn ; ARCHITECTURE Behavior OF shiftn IS BEGIN PROCESS BEGIN WAIT UNTIL Clock'EVENT AND Clock = '1' ; IF E=‘1’ THEN IF L = '1' THEN Q <= R ; ELSE Genbits: FOR i IN 0 TO N-2 LOOP Q(i) <= Q(i+1) ; END LOOP ; Q(N-1) <= w ; END IF ; END IF; END PROCESS ; END Behavior ;
Στοιχείο Καταχωρητή Ολίσθησης (muxdff)
ENTITY muxdff IS PORT ( D0, D1, Sel, Clock : IN STD_LOGIC ; Q : OUT STD_LOGIC ) ; END muxdff ;
ARCHITECTURE Behavior OF muxdff IS BEGIN PROCESS BEGIN WAIT UNTIL Clock'EVENT AND Clock = '1' ; IF Sel = '0' THEN Q <= D0 ; ELSE Q <= D1 ; END IF ; END PROCESS ; END Behavior ;
Καταχωρητής Ολίσθησης (structural) -1
ENTITY shift4 IS PORT ( R : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; L, w, Clock : IN STD_LOGIC ; Q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; END shift4 ; ARCHITECTURE Structure OF shift4 IS COMPONENT muxdff PORT (D0, D1, Sel, Clock : IN STD_LOGIC ; Q: OUT STD_LOGIC ) ; END COMPONENT ; BEGIN Stage3: muxdff PORT MAP ( w, R(3), L, Clock, Q(3) ) ; Stage2: muxdff PORT MAP ( Q(3), R(2), L, Clock, Q(2) ) ; Stage1: muxdff PORT MAP ( Q(2), R(1), L, Clock, Q(1) ) ; Stage0: muxdff PORT MAP ( Q(1), R(0), L, Clock, Q(0) ) ; END Structure ;
Καταχωρητής Ολίσθησης (structural) -2
ENTITY shift4 IS PORT ( R : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; L, w, Clock : IN STD_LOGIC ; Q : BUFFER STD_LOGIC_VECTOR(4 DOWNTO 0) ) ; END shift4 ; ARCHITECTURE Structure OF shift4 IS COMPONENT muxdff PORT (D0, D1, Sel, Clock : IN STD_LOGIC ; Q: OUT STD_LOGIC ) ; END COMPONENT ; BEGIN Q(4)<=w; shiftall: for i in 0 to 3 generate stage: muxdff PORT MAP ( Q(i+1), R(i), L, Clock, Q(i) ) ; end generate; END Structure ;
Σύγχρονος Μετρητής (Counter) ENTITY upcount IS GENERIC ( mod : INTEGER := 8 ) ; PORT ( Clock, L, E : IN STD_LOGIC ; D : IN INTEGER RANGE 0 TO mod-1 ; Q : BUFFER INTEGER RANGE 0 TO mod-1 ) ; END upcount ; ARCHITECTURE Behavior OF upcount IS BEGIN PROCESS BEGIN WAIT UNTIL (Clock'EVENT AND Clock = '1') ; IF E = '1' THEN IF L = '1' THEN q <= D ; ELSE q <= q+1 ; END IF ; END IF ; END PROCESS; END Behavior ;
Πακέτο Βασικών Στοιχείων (Components) (1)
LIBRARY ieee ; USE ieee.std_logic_1164.all ; PACKAGE mycomponents IS -- n-bit left-to-right shift register with parallel load and enable COMPONENT shiftrne GENERIC ( N : INTEGER := 4 ) ; PORT (R : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0) ; Clock, L,w, E : IN STD_LOGIC ; Q : BUFFER STD_LOGIC_VECTOR(N-1 DOWNTO 0)); END COMPONENT ; -- up-counter that counts from 0 to modulus-1 COMPONENT upcount GENERIC ( mod : INTEGER := 8 ) ; PORT (Clock, L, E: IN STD_LOGIC ; D : IN INTEGER RANGE 0 TO mod-1 ; Q : BUFFER INTEGER RANGE 0 TO mod-1 ) ; END COMPONENT ;
Πακέτο Βασικών Στοιχείων (Components) (2)
-- 1-bit full adder COMPONENT fulladd PORT ( Cin, x, y : IN STD_LOGIC ; s, Cout : OUT STD_LOGIC ) ; END COMPONENT ; -- D flip-flop COMPONENT flipflop IS PORT ( D, Clock : IN STD_LOGIC ; Resetn : IN STD_LOGIC ; Q : OUT STD_LOGIC ) ; END COMPONENT; END mycomponents;
Χρήση Βασικών Στοιχείων Component Instantiation
USE work.mycomponents.all ; ENTITY serialadder IS GENERIC ( length : INTEGER := 8 ) ; PORT (Clock, Reset : IN STD_LOGIC ; A, B : IN STD_LOGIC_VECTOR(length-1 DOWNTO 0) ; Sum : BUFFER STD_LOGIC_VECTOR(length-1 DOWNTO 0) ); END serialadder ;
ARCHITECTURE struct OF serialadder IS Signal low, high, run : std_logic; Signal Aser, Bser, low8 : std_logic_vector(7 down to 0); Signal cnt_in : integer range 0 to 15; BEGIN low <= ‘0’; high <= ‘1’; ShiftA: shiftrne GENERIC MAP ( N => 8 ) PORT MAP ( A, clock, reset, low, high, Aser) ; … END struct;
Τέλος Ενότητας