Σχεδίαση Ψηφιακών...

Preview:

Citation preview

Σχεδίαση Ψηφιακών Συστημάτων

Ενότητα 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;

Τέλος Ενότητας

Recommended