ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Χειµ …Τύπος...
TRANSCRIPT
ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ
ΧΑΡΗΣ ΘΕΟΧΑΡΙΔΗΣ Επίκουρος Καθηγητής, ΗΜΜΥ
Χειµερινό Εξάµηνο 2016 ΔΙΑΛΕΞΗ 10:
Συµπληρωµατική Διάλεξη Flip-Flops (Basics) και VHDL)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.2 © Θεοχαρίδης, ΗΜΥ, 2016
VHDL (Very high speed integrated circuits Hardware Description Language) q Γλώσσα προγραµµατισµού για την περιγραφή και προσοµοίωση υλικού (λογικών σχεδιασµών).
q Επιχορηγήθηκε από ΙEEE και DoD (Department of Defense των ΗΠΑ) στις αρχές του ‘80.
q Βασικά χαρακτηριστικά: ● Ιεραρχικός σχεδιασµός ● Περιγραφή Διασυνδέσεων και Συµπεριφοράς µε ακρίβεια (και ξεχωριστά)
● Περιγραφή συµπεριφοράς: αλγοριθµικά ή µε δοµικό (structural) τρόπο
● Μοντελοποίηση Χρονισµού (Timing) και Ταυτοχρονισµού (Concurrency) à Σχεδιασµοί µπορούν να προσοµοιωθούν µε ακρίβεια
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.3 © Θεοχαρίδης, ΗΜΥ, 2016
Μοντελοποίηση
q Μια πλήρης περιγραφή ενός στοιχείου (component) µε VHDL απαιτεί: ● Entity (Οντότητα) : καθορίζει τις διασυνδέσεις
(interface) ενός στοιχείου (όνοµα, εισόδους, εξόδους).
● Architecture (Αρχιτεκτονική): καθορίζει την λειτουργία/συµπεριφορά (function) ενός στοιχείου.
q Σε κάθε στοιχείο αντιστοιχεί ένα µόνο entity και τουλάχιστον ένα architecture (πολλαπλά architecture είναι δυνατά).
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.4 © Θεοχαρίδης, ΗΜΥ, 2016
Απλό παράδειγµα: Entity
entity My_Component is -- “My_Component”: όνοµα
port (X,Y: in BIT; -- προδιαγραφές διασυνδέσεων
Z: out BIT);
end My_Component;
Σχόλια (comments) Λέξεις κλειδιά VHDL (keywords) Αναγνωριστικό (identifier) Λειτουργία θύρας (port mode) Τύπος δεδοµένων (data type)
My_Component X
Y Z
Εντολή port καθορίζει εισόδους και εξόδους
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.5 © Θεοχαρίδης, ΗΜΥ, 2016
Απλό παράδειγµα:Αρχιτεκτονική
entity My_Component is -- “My_Component”: όνοµα
Port (X,Y: in BIT; -- προδιαγραφές διασυνδέσεων
Z: out BIT); end My_Component;
Architecture My_Component_Arch of My_Component is begin
Z <= ‘1’ when X=‘1’ and Y=‘0’ else ‘0’;
end My_Component_Arch;
Z = X•Y’ Αντίστοιχη οντότητα (entity)
Σχόλια (comments) Λέξεις κλειδιά VHDL (keywords) Αναγνωριστικό (identifier) Λειτουργία θύρας (port mode) Τύπος δεδοµένων (data type)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.6 © Θεοχαρίδης, ΗΜΥ, 2016
Άλλο Παράδειγµα: πύλη AND
entity My_AND is -- “My_AND”: όνοµα
Port (X,Y: in BIT; -- προδιαγραφές διασυνδέσεων
Z: out BIT); end My_END;
Architecture My_AND_Arch of My_AND is begin
Z <= ‘1’ when X=‘1’ and Y=‘1’ else ‘0’;
end My_AND_Arch;
Z = X•Y
Σχόλια (comments) Λέξεις κλειδιά VHDL (keywords) Αναγνωριστικό (identifier) Λειτουργία θύρας (port mode) Τύπος δεδοµένων (data type)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.7 © Θεοχαρίδης, ΗΜΥ, 2016
Στοιχεία γλώσσας VHDL q Σχόλια (Comments)
● ξεκινούν µε --, ισχύουν µέχρι το τέλος της γραµµής
q Δεσµευµένες Λέξεις (Keywords)
● π.χ. entity, port, is, in, out, end, architecture, begin, end, when, else, …
q Αναγνωριστικά (Identifiers) ● Μεταβλητές, ονόµατα στοιχείων, κτλ
q Synthesizeable – vs. NON-Synthesizeable ● Μπορεί η περιγραφή υλικού όντως να υλοποιηθεί (µέσω εργαλείων σύνθεσης)
● Επίσης κάποια στοιχεία ΔΕΝ ΥΛΟΠΟΙΟΥΝΤΑΙ σε υλικό µέσω των εργαλείων σύνθεσης – η χρήση τους γίνεται για σκοπούς της δικής µας ευκολίας και για επαλήθευση.
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.8 © Θεοχαρίδης, ΗΜΥ, 2016
Αναγνωριστικά (Identifiers)
q Μπορούν να περιέχουν A-Z, a-z, 0-9, _
q Πρέπει να ξεκινούν µε γράµµα
q Δεν µπορούν να τελειώσουν µε _
q Δεν µπορούν να περιέχουν 2 συνεχόµενες _
q Η VHDL είναι case-insensitive ● Sel, sel και SEL αναφέρονται στο ίδιο αντικείµενο
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.9 © Θεοχαρίδης, ΗΜΥ, 2016
Παραδείγµατα Αναγνωριστικών q A2G
● έγκυρο
q 8bit_counter ● άκυρο – ξεκινά µε αριθµό
q _NewValue ● άκυρο – ξεκινά µε _
q first# ● άκυρο – περιέχει µη-αποδεκτό χαρακτήρα
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.10 © Θεοχαρίδης, ΗΜΥ, 2016
VHDL Αντικείµενα Δεδοµένων (Data Objects)
q Σταθερές (Constants)
q Μεταβλητές (Variables)
q Σήµατα (Signals)
q Αρχεία (Files*)
* Δεν υποστηρίζονται από εργαλεία σύνθεσης
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.11 © Θεοχαρίδης, ΗΜΥ, 2016
Χαρακτήρες και Συµβολοσειρές
q Χαρακτήρες (Characters) ● ‘A’, ‘0’, ‘1’, ‘$’, ’x’, ‘*’
q Συµβολοσειρές (Strings) ● “string of characters” ● “00101101” ● “0X110ZZ1”
q Δυαδικές (Bit) Συµβολοσειρές ● B”011111010110” ● O”3726” ● X”7D6”
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.12 © Θεοχαρίδης, ΗΜΥ, 2016
VHDL Τύποι Δεδοµένων (Data Types)
q Scalar ● Integers ● Enumerated ● Reals (floating point)*
q Composite (σύνθετοι) ● Arrays (πίνακες/διατάξεις) ● Records
q Access (pointers -- δείκτες)* * Δεν υποστηρίζονται από εργαλεία σύνθεσης
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.13 © Θεοχαρίδης, ΗΜΥ, 2016
Τύποι Δεδοµένων Scalar: Integer ● Μικρότερο εύρος για κάθε υλοποίηση, όπως καθορίζεται από σχετικό πρότυπο: - 2,147,483,647 … + 2,147,483,647
● Παράδειγµα: αναθέσεις σε µεταβλητή τύπου integer :
ARCHITECTURE test_int OF test IS BEGIN PROCESS (X) VARIABLE a: INTEGER; BEGIN a := 1; -- OK a := -1; -- OK a := 1.0; -- άκυρο END PROCESS;
END test_int;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.14 © Θεοχαρίδης, ΗΜΥ, 2016
Τύποι Δεδοµένων Scalar: Integer (συν.) q Μπορούµε επίσης να ορίσουµε integers µε µικρότερο εύρος (sub-ranges)
● Παραδείγµατα:
type CountValue is range 0 to 15;
type Twenties is range 20 to 29;
type Thirties is range 39 downto 30;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.15 © Θεοχαρίδης, ΗΜΥ, 2016
TYPE binary IS ( ON, OFF ); ... κάποιες εντολές ... ARCHITECTURE test_enum OF test IS BEGIN PROCESS (X) VARIABLE a: binary; BEGIN a := ON; -- OK ... επιπρόσθετες εντολές ... a := OFF; -- OK ... επιπρόσθετες εντολές ... END PROCESS;
END test_enum;
Τύποι Δεδοµένων Scalar: Enumerated ● Ο χρήστης ορίζει τη λίστα πιθανών τιµών ● Παράδειγµα:
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.16 © Θεοχαρίδης, ΗΜΥ, 2016
Τύποι Δεδοµένων Scalar: Enumerated à Boolean
type boolean is (false, true); ... κάποιες εντολές ... variable A,B,C: boolean; ... κάποιες εντολές ... C := not A C := A and B C := A or B C := A nand B C := A nor B C := A xor B C := A xnor B
aντικείµενο (object) VHDL
Τελεστής ανάθεσης για µεταβλητές
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.17 © Θεοχαρίδης, ΗΜΥ, 2016
Τύποι Δεδοµένων Scalar: Enumerated à Bit
type bit is (‘0’, ‘1’); ... κάποιες εντολές ... signal x,y,z: bit; ... κάποιες εντολές ... x <= ‘0’; y <= ‘1’; z <= x and y;
aντικείµενο (object) VHDL
Τελεστής ανάθεσης για σήµατα
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.18 © Θεοχαρίδης, ΗΜΥ, 2016
Τύποι Δεδοµένων Scalar: Enumerated à Standard Logic
type std_logic is ( ‘U’, -- Uninitialized (µη-αρχικοποιηµένο) ‘X’ -- Unknown (άγνωστο) ‘0’ -- Zero (µηδέν) ‘1’ ); -- One (ένα)
n std_logic είναι µέρος του πακέτου ieee n Πακέτα (Packages): ήδη-µεταγλωττισµένος κώδικας VHDL που αποθηκεύεται σε βασικό κατάλογο (library) library IEEE;
use IEEE.std_logic_1164.all;
Πρέπει να περιλαµβάνεται στο κώδικά σας, πριν τη δήλωση τύπων δεδοµένων std_logic
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.19 © Θεοχαρίδης, ΗΜΥ, 2016
TYPE data_bus IS ARRAY(0 TO 31) OF BIT;
VARIABLE X : data_bus; VARIABLE Y : BIT; Y := X(12); -- το Y παίρνει την τιµή του στοιχείου µε δείκτη 12 του Χ
0 31
0 1
... δείκτες στοιχείων... ...τιµές στοιχείων πίνακα...
Σύνθετοι Τύποι Δεδοµένων - (Composite Data Types)
q Array (Πίνακες/Διατάξεις): ● Χρησιµοποιείται για οµαδοποίηση δεδοµένων του ιδίου τύπου σε ένα ενιαίο αντικείµενο VHDL
● Το εύρος µπορεί να είναι ακαθόριστο (=απεριόριστο) στη δήλωση (declaration) à καθορίζεται µόλις ο πίνακας χρησιµοποιηθεί
● Παράδειγµα: δήλωση πίνακα µίας-διάστασης (one-dimensional array (vector))
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.20 © Θεοχαρίδης, ΗΜΥ, 2016
Αρχιτεκτονική Περιγραφή µε VHDL architecture name_arch of name is begin end name_arch;
Signal assignments
Ταυτόχρονες εντολές (concurrent statements)
Ταυτόχρονες εντολές (concurrent statements)
Process 1
Process 2
Ταυτόχρονες εντολές (concurrent statements)
Το κάθε process περιέχει ακολουθιακές εντολές (sequential statements), αλλά όλα τα processes εκτελούνται ταυτόχρονα
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.21 © Θεοχαρίδης, ΗΜΥ, 2016
VHDL Process
P1: process (<sensitivity list>) <variable declarations> begin <sequential statements> end process P1;
Προαιρετική σήµανση
Μέσα σε ένα process: • Ανάθεση µεταβλητών (variables) µε := και άµεση ενηµέρωση. • Ανάθεση σηµάτων (signals) µε <= και η ενηµέρωση γίνετε στο τέλος του process.
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.22 © Θεοχαρίδης, ΗΜΥ, 2016
Αρχιτεκτονική VHDL (συν.) n Στο κάθε entity (µοναδικό ανά στοιχείο) αντιστοιχεί τουλάχιστον µια περιγραφή αρχιτεκτονικής (architecture)
n Υπάρχουν 3 τρόποι περιγραφής της αρχιτεκτονικής: n Structural (Δοµική): λεπτοµερής περιγραφή σε επίπεδο πυλών/βασικών στοιχείων
n Data Flow (Ροή Δεδοµένων): περιγραφή βάση του τρόπου µεταφοράς δεδοµένων µεταξύ των στοιχείων/σηµάτων
n Behavioral (Συµπεριφορά): αλγοριθµική περιγραφή – υψηλό επίπεδο χωρίς λεπτοµέρειες
n Θα δούµε διάφορα παραδείγµατα …
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.23 © Θεοχαρίδης, ΗΜΥ, 2016
2-to-4 DEC σε VHDL: Διάγραµµα σε επίπεδο πυλών
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.24 © Θεοχαρίδης, ΗΜΥ, 2016
2-to-4 DEC σε VHDL: Δήλωση Οντότητας (Entity Declaration)
-- 2-to-4 Line Decoder: Structural VHDL Description
library ieee, lcdf_vhdl;
use ieee.std_logic_1164.all, lcdf_vhdl.func_prims.all;
entity decoder_2_to_4 is
port(E_n, A0, A1: in std_logic;
D0_n, D1_n, D2_n, D3_n: out std_logic);
end decoder_2_to_4;
Εισαγόµενος κώδικας από βιβλιοθήκες
Είσοδοι & Έξοδοι
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.25 © Θεοχαρίδης, ΗΜΥ, 2016
2-to-4 DEC σε VHDL: Αρχιτεκτονική - Δοµική Περιγραφή Structural)
architecture structural_1 of decoder_2_to_4 is
component NOT1
port(in1: in std_logic;
out1: out std_logic);
end component;
component NAND3
port(in1, in2, in3: in std_logic; out1: out std_logic);
end component;
Δήλωση απαραίτητων component (διαθέσιµα από τις
βιβλιοθήκες)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.26 © Θεοχαρίδης, ΗΜΥ, 2016
signal E, A0_n, A1_n: std_logic;
begin
g0: NOT1 port map (in1 => A0, out1 => A0_n); g1: NOT1 port map (in1 => A1, out1 => A1_n); g2: NOT1 port map (in1 => E_n, out1 => E); g3: NAND3 port map (in1 => A0_n, in2 => A1_n,
in3 => E, out1 => D0_n);
g4: NAND3 port map (in1 => A0, in2 => A1_n, in3 => E, out1 => D1_n);
g5: NAND3 port map (in1 => A0_n, in2 => A1, in3 => E, out1 => D2_n);
g6: NAND3 port map (in1 => A0, in2 => A1, in3 => E, out1 => D3_n);
end structural_1;
Τοπικά σήµατα
2-to-4 DEC σε VHDL: Αρχιτεκτονική Δοµική Περιγραφή (Structural) (συν.)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.27 © Θεοχαρίδης, ΗΜΥ, 2016
architecture dataflow_1 of decoder_2_to_4 is
signal E, A0_n, A1_n: std_logic;
begin
A0_n <= not A0;
A1_n <= not A1;
E <= not E_n;
D0_n <= not (A0_n and A1_n and E);
D1_n <= not (A0 and A1_n and E);
D2_n <= not (A0_n and A1 and E);
D3_n <= not (A0 and A1 and E);
end dataflow_1;
2-to-4 DEC σε VHDL: Αρχιτεκτονική Περιγραφή Ροής Δεδοµένων (Dataflow)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.28 © Θεοχαρίδης, ΗΜΥ, 2016
Άλλο Παράδειγµα: n-bit 4-σε-1 MUX
a(n-1:0) b(n-1 :0)
y(n-1 :0)
Sel(1:0)
n-bit 4-σε-1 MUX c(n-1 :0)
d(n-1 :0)
Sel y “00” a “01” b “10” c “11” d
2
n
n
n
n
n
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.29 © Θεοχαρίδης, ΗΜΥ, 2016
library IEEE; use IEEE.std_logic_1164.all; entity mux4g is generic(width:positive);
port ( a: in STD_LOGIC_VECTOR (width-1 downto 0); b: in STD_LOGIC_VECTOR (width-1 downto 0); c: in STD_LOGIC_VECTOR (width-1 downto 0); d: in STD_LOGIC_VECTOR (width-1 downto 0); sel: in STD_LOGIC_VECTOR (1 downto 0); y: out STD_LOGIC_VECTOR (width-1 downto 0) ); end mux4g;
n-bit 4-σε-1 MUX: Δήλωση Οντότητας (Entity declaration)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.30 © Θεοχαρίδης, ΗΜΥ, 2016
architecture mux4g_arch of mux4g is begin process (sel, a, b, c, d) begin case sel is when "00" => y <= a; when "01" => y <= b; when "10" => y <= c; when others => y <= d; end case; end process; end mux4g_arch; Η εντολή CASE πρέπει να
περιέχει ΟΛΕΣ τις πιθανότητες τιµών.
Sel y “00” a “01” b “10” c “11” d
n-bit 4-σε-1 MUX: Αρχιτεκτονική: Περιγραφή Ροής Δεδοµένων µε
χρήση εντολής CASE
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.31 © Θεοχαρίδης, ΗΜΥ, 2016
Παράδειγµα απλής συνδυαστικής συνάρτησης: Περιγραφή Ροής Δεδοµένων
library ieee;
use ieee.std_logic_1164.all;
entity func2 is
port (x1,x2,x3: in std_logic;
f: out std_logic );
end func2;
architecture dataflow of func2 is
begin
f <= (not x1 and not x2 and x3) or (x1 and not x2 and not x3) or (x1 and not x2 and x3) or (x1 and x2 and not x3);
end dataflow;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.32 © Θεοχαρίδης, ΗΜΥ, 2016
Ηµιαθροιστής q Πρόβληµα: Σχεδιάστε ένα ηµιαθροιστή 1-bit µε κρατούµενο (carry) και σήµα ενεργοποίησης (enable).
q Προδιαγραφές ● Είσοδοι και έξοδοι είναι 1-bit ● Όταν το enable είναι 1, το αποτέλεσµα είναι η πρόσθεση x+y µε
carry ● Έξοδοι 0 όταν το enable είναι 0
x y
enable
carry
result Ηµιαθροιστής
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.33 © Θεοχαρίδης, ΗΜΥ, 2016
Ηµιαθροιστής: Δήλωση Οντότητας q Η οντότητα περιγράφει τις διασυνδέσεις του
component -- δηλώνονται θύρες (ports) εισόδων και εξόδων
x
y
enable
carry
result Ηµιαθ- ροιστής
ENTITY half_adder IS
PORT( x, y, enable: IN bit; carry, result: OUT bit);
END half_adder;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.34 © Θεοχαρίδης, ΗΜΥ, 2016
Ηµιαθροιστής: Αρχιτεκτονική µε Περιγραφή Συµπεριφοράς (Behavioral) q Μπορούµε να χρησιµοποιήσουµε µια περιγραφή υψηλού επιπέδου για την συνάρτηση που υλοποιεί το κύκλωµα
● Αυτό το µοντέλο µπορεί να προσοµοιωθεί έτσι ώστε να επαληθευτεί η σωστή λειτουργία του κυκλώµατος
ARCHITECTURE half_adder_a of half_adder IS BEGIN PROCESS (x, y, enable) BEGIN IF enable = ‘1’ THEN result <= x XOR y; carry <= x AND y; ELSE … END IF; END PROCESS; END half_adder_a;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.35 © Θεοχαρίδης, ΗΜΥ, 2016
q Εναλλακτικά, µπορούµε να χρησιµοποιήσουµε µια δοµική περιγραφή (βάση διαθέσιµων components που έχουν ήδη δηλωθεί)
● Αυτό το µοντέλο µπορεί επίσης να προσοµοιωθεί έτσι ώστε να επαληθευτεί η σωστή λειτουργία του κυκλώµατος
x y
enable carry
result
Ηµιαθροιστής: Δοµική Περιγραφή Αρχιτεκτονικής (Structural)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.36 © Θεοχαρίδης, ΗΜΥ, 2016
ARCHITECTURE half_adder_c of half_adder_Nty IS
COMPONENT and2 PORT (in0, in1 : IN BIT; out0 : OUT BIT); END COMPONENT; COMPONENT and3 PORT (in0, in1, in2 : IN BIT; out0 : OUT BIT); END COMPONENT;
COMPONENT xor2 PORT (in0, in1 : IN BIT; out0 : OUT BIT); END COMPONENT;
FOR ALL : and2 USE ENTITY gate_lib.and2_Nty(and2_a); FOR ALL : and3 USE ENTITY gate_lib.and3_Nty(and3_a); FOR ALL : xor2 USE ENTITY gate_lib.xor2_Nty(xor2_a);
-- η περιγραφή συνεχίζεται στην επόµενη διαφάνεια
Ηµιαθροιστής: Δοµική Περιγραφή Αρχιτεκτονικής (συν.)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.37 © Θεοχαρίδης, ΗΜΥ, 2016
-- συνεχιζόµενη περιγραφή half_adder_c
SIGNAL xor_res : bit; -- εσωτερικό σήµα -- τα υπόλοιπα σήµατα έχουν ήδη δηλωθεί στο entity
BEGIN
A0 : and2 PORT MAP (enable, xor_res, result); A1 : and3 PORT MAP (x, y, enable, carry); X0 : xor2 PORT MAP (x, y, xor_res);
END half_adder_c;
Ηµιαθροιστής: Δοµική Περιγραφή Αρχιτεκτονικής (συν.)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.38 © Θεοχαρίδης, ΗΜΥ, 2016
q Μια τρίτη µέθοδος περιγραφής της αρχιτεκτονικής ενός component χρησιµοποιεί λογικές εξισώσεις για να αναπτύξει µια περιγραφή ροής δεδοµένων
● Ξανά: το µοντέλο αυτό µπορεί να προσοµοιωθεί σε αυτό το επίπεδο για να επιβεβαιωθούν οι λογικές εξισώσεις.
ARCHITECTURE half_adder_b of half_adder_Nty IS BEGIN carry <= enable AND (x AND y);
result <= enable AND (x XOR y); END half_adder_b;
Ηµιαθροιστής: Αρχιτεκτονική µε Περιγραφή Ροής Δεδοµένων (Dataflow)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.39 © Θεοχαρίδης, ΗΜΥ, 2016
Παράδειγµα Αθροιστή 4ων-bit: Δήλωση Οντότητας
-- Αθροιστής 4ων-bit
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity adder_4_b is
port(B, A : in std_logic_vector(3 downto 0);
C0 : in std_logic;
S : out std_logic_vector(3 downto 0);
C4 : out std_logic);
end adder_4_b;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.40 © Θεοχαρίδης, ΗΜΥ, 2016
architecture behavioral of adder_4_b is
signal sum : std_logic_vector(4 downto 0);
begin
sum <= ('0' & A) + ('0' & B) + ("0000" & C0);
C4 <= sum(4);
S <= sum(3 downto 0);
end behavioral;
0A3A2A1A0 0B3B2B1B0 0000C0
Αθροιστής 4ων-bit:Αρχιτεκτονική µε Περιγραφή Συµπεριφοράς (Behavioral)
Είναι πλήρης αθροιστής;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.41 © Θεοχαρίδης, ΗΜΥ, 2016
Αθροιστής 1-bit:Αρχιτεκτονική µε Περιγραφή Ροής Δεδοµένων (Dataflow) library ieee;
use ieee.std_logic_1164.all;
entity fulladd is
port (Cin, x, y: in std_logic;
s, Cout: out std_logic);
end fulladd;
architecture logicfunc of fulladd is
begin
s <= x xor y xor Cin;
Cout <= (x and y) or (Cin and x) or (Cin and y);
end logicfunc;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.42 © Θεοχαρίδης, ΗΜΥ, 2016
Αθροιστής 4ων-bit: Δήλωση Οντότητας
library ieee;
use ieee.std_logic_1164.all;
entity adder4 is -- s = x+y
port ( Cin: in std_logic;
x3,x2,x1,x0: in std_logic;
y3,y2,y1,y0: in std_logic;
s3,s2,s1,s0: out std_logic;
Cout: out std_logic );
end adder4;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.43 © Θεοχαρίδης, ΗΜΥ, 2016
Αθροιστής 4ων-bit: Δοµική Περιγραφή Αρχιτεκτονικής (Structural)
architecture structural of adder4 is
signal c1,c2,c3: std_logic;
component fulladd
port (Cin,x,y: in std_logic;
s,Cout: out std_logic);
end component;
begin
stage0: fulladd port map (Cin,x0,y0,s0,c1);
stage1: fulladd port map (c1,x1,y1,s1,c2);
stage2: fulladd port map (c2,x2,y2,s2,c3);
stage3: fulladd port map (Cin=>c3,Cout=>cout,x=>x3,y=>y3,s=>s3);
end structural;
Προσαρµοσµένη σειρά
Ίδια σειρά όπως στη δήλωση του entity
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.44 © Θεοχαρίδης, ΗΜΥ, 2016
2-σε-1 MUX library ieee;
use ieee.std_logic_1164.all;
entity mux2to1 is
port (d0,d1,s: in std_logic;
y: out std_logic);
end mux2to1;
architecture behavioral of mux2to1 is
begin
with s select
y <= d0 when ‘0’,
d1 when others;
end behavioral;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.45 © Θεοχαρίδης, ΗΜΥ, 2016
Αποκωδικοποιητής 2-σε-4 library ieee;
use ieee.std_logic_1164.all;
entity dec2to4 is
port (w: in std_logic_vector(1 downto 0);
e: in std_logic;
y: out std_logic_vector(0 to 3));
end dec2to4;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.46 © Θεοχαρίδης, ΗΜΥ, 2016
Αποκωδικοποιητής 2-σε-4 (συν.) architecture behavioral of dec2to4 is
signal ew: std_logic_vector(2 downto 0);
begin
ew <= e & w; -- concatenation!
with ew select
y <= “1000” when “100”,
“0100” when “101”,
“0010” when “110”,
“0001” when “111”,
“0000” when others;
end behavioral;
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.47 © Θεοχαρίδης, ΗΜΥ, 2016
ΒΙΒΛΙΟΓΡΑΦΙΑ ΚΑΙ ΑΝΑΦΟΡΕΣ q Στην ιστοσελίδα υπάρχουν ΠΟΛΛΕΣ αναφορές για VHDL και γενικά για γλώσσες περιγραφής υλικού.
q http://www.eng.ucy.ac.cy/theocharides/Courses/ECE210/Useful.html
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.48 © Θεοχαρίδης, ΗΜΥ, 2016
FLIP FLΟPS – Σύντοµη εισαγωγή!
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.49 © Θεοχαρίδης, ΗΜΥ, 2016
Αποθήκευση Καταστάσεως
q Τι γίνεται αν η A ενωθεί µε την Y?
q Συναρτήσεις: ● Y = B για S = 1 ● Y(t) εξαρτάται από
Y(t – 0.9) για S = 0
q Το συνδυαστικό κύκλωµα µετατράπηκε σε ακολουθιακό, αφού η συνάρτηση εξόδου εξαρτάται και από προηγούµενες τιµές εισόδων (όχι µόνο τις τρέχουσες τιµές)
BS
YS
S B
Y0.5
0.4 0.2
0.4
Y είναι η αποθηκεµένη τιµή στη σκιασµένη περιοχή
Μονοπάτι ανάδρασης (feedback path)
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.50 © Θεοχαρίδης, ΗΜΥ, 2016
Αποθήκευση Καταστάσεως (συν.) q Παράδειγµα προσοµοίωσης: Οι τιµές εισόδων αλλάζουν µε την πάροδο του χρόνου. Οι αλλαγές σηµειώνονται κάθε 100 ns, έτσι ώστε καθυστερήσεις σε δέκατα του ns αγνοούνται.
q Y εκπροσωπεί την κατάσταση του κυκλώµατος, όχι απλά µια έξοδο!
B S Y Σχόλια 1 0 0 Y “θυµάται” 0 1 1 1 Y = B όταν S = 1 1 0 1 Τώρα Y “θυµάται” B = 1 για S = 0 0 0 1 Καµία αλλαγή για Y όταν αλλάζει το B
0
1
0
Y = B όταν S = 1
0 0 0 Y “θυµάται” B = 0 για S = 0 1 0 0 Καµία αλλαγή για Y όταν αλλάζει το B
Χρόνος
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.51 © Θεοχαρίδης, ΗΜΥ, 2016
Αποθήκευση Καταστάσεως (συν.)
q Θεωρείστε ότι τοποθετούµε ένα αντιστροφέα στο µονοπάτι ανάδρασης.
q Συµβαίνουν τα ακόλουθα:
1. Το κύκλωµα γίνεται ασταθή (unstable).
2. Για S = 0, το κύκλωµα γίνεται ταλαντωτής (oscillator).
3. Μπορεί να χρησιµο- ποιηθεί ως ένα «αδρό» ρολόι.
B S Y Σχόλια 0 1 0 Y = B όταν S = 1 1 1 1 1 0 1 Τώρα Y “θυµάται” B 1 0 0 Y, 1.1 ns αργότερα 1 0 1 Y, 1.1 ns αργότερα 1 0 0 Y, 1.1 ns αργότερα
S B
Y
0.2 0.5
0.4
0.4
0.2
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.52 © Θεοχαρίδης, ΗΜΥ, 2016
SR latch (από NOR)
-- SR: “set-reset”, δισταθές στοιχείο µε 2 εισόδους. Προσέξτε την «ακαθόριστη» τιµή για S=R=1.
-- Διαβάζοντας τη λογική:
§ Q = (R+Q’)’ και Q’ = (S+Q)’
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.53 © Θεοχαρίδης, ΗΜΥ, 2016
R = S = 1 ?? q Ακαθόριστη έξοδος γιατί:
● Όταν S=R=1, τότε και οι 2 έξοδοι γίνονται 0. ● Εάν και οι 2 έξοδοι είναι 0, η κατάσταση του SR
latch εξαρτάται από την είσοδο που παραµένει στην τιµή 1 για περισσότερο χρόνο, πριν γίνει 0.
● Άρα είναι όντως, “ακαθόριστη” κατάσταση à ΠΡΕΠΕΙ να αποφευχθεί.
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.54 © Θεοχαρίδης, ΗΜΥ, 2016
S’R’ Latch (από NAND)
S’
R’
Q
Q’
0 0 0 1 1 0 1 1
S’ R’ Q Q’ 0
1
1
0
1 0 Set
0 0 1 0 1 1 1 0 1 1 1 0
X Y NAND
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.55 © Θεοχαρίδης, ΗΜΥ, 2016
S’R’ Latch (από NAND)
S’
R’
Q
Q’
0 0 0 1 1 0 1 1
S’ R’ Q Q’ 1
1
1
0 1 0 Hold
0 0 1 0 1 1 1 0 1 1 1 0
X Y NAND
1 0 Set
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.56 © Θεοχαρίδης, ΗΜΥ, 2016
S’R’ Latch (από NAND)
S’
R’
Q
Q’
0 0 0 1 1 0 1 1
S’ R’ Q Q’ 1
0
0
1
0 0 1 0 1 1 1 0 1 1 1 0
X Y NAND
1 0 Hold
1 0 Set 0 1 Reset
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.57 © Θεοχαρίδης, ΗΜΥ, 2016
S’R’ Latch (από NAND)
S’
R’
Q
Q’
0 0 0 1 1 0 1 1
S’ R’ Q Q’ 1
1
0
1
0 0 1 0 1 1 1 0 1 1 1 0
X Y NAND 0 1 Hold
1 0 Set 0 1 Reset 1 0 Hold
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.58 © Θεοχαρίδης, ΗΜΥ, 2016
S’R’ Latch (από NAND)
S’
R’
Q
Q’
0 0 0 1 1 0 1 1
S’ R’ Q Q’ 0
0
1
1
0 0 1 0 1 1 1 0 1 1 1 0
X Y NAND 0 1 Hold
1 0 Set 0 1 Reset 1 0 Hold
1 1 Disallowed
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.59 © Θεοχαρίδης, ΗΜΥ, 2016
SR Latches
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.60 © Θεοχαρίδης, ΗΜΥ, 2016
Προσοµοίωση SR Latch
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.61 © Θεοχαρίδης, ΗΜΥ, 2016
SR Latch µε σήµα Ελέγχου
§ Το Latch είναι ευαίσθητο σε αλλαγές στις εισόδους ΜΟΝΟ όταν το C=1
§ Σηµαντικό στοιχείο, χρησιµοποιείται για σχεδιασµό άλλων latches και flip-flops
§ Θεωρείται και ως flip-flop, άλλα όχι βάση του ορισµού του βιβλίου σας
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.62 © Θεοχαρίδης, ΗΜΥ, 2016
SR Latch µε σήµα Ελέγχου (συν.)
S’
R’
Q
Q’
S
R
C=CLK
S R CLK S’ R’ Q Q’ 0 0 1 1 1 Q0 Q0’ Store 0 1 1 1 0 0 1 Reset 1 0 1 0 1 1 0 Set 1 1 1 0 0 1 1 Disallowed X X 0 1 1 Q0 Q0’ Store
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.63 © Θεοχαρίδης, ΗΜΥ, 2016
D Latch q Ένας τρόπος αποφυγής των ανεπιθύµητων ακαθόριστων καταστάσεων στο RS flip-flop, είναι η εξασφάλιση ότι οι είσοδοι S και R δεν θα πάρουν ποτέ την τιµή 1 ταυτόχρονα. Αυτό επιτυγχάνεται µε ένα SR-latch, όπου S=D και R=D’ à D-latch:
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.64 © Θεοχαρίδης, ΗΜΥ, 2016
D Latch (συν.)
D
S R CLK Q Q’ 0 0 1 Q0 Q0’ Store 0 1 1 0 1 Reset 1 0 1 1 0 Set 1 1 1 1 1 Disallowed X X 0 Q0 Q0’ Store
0 1 0 1 1 1 1 0 X 0 Q0 Q0’
D CLK Q Q’
S’
R’
Q
Q’
S
R
CLK
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.65 © Θεοχαρίδης, ΗΜΥ, 2016
Flip-Flops q Τα Latches είναι “διαυγή” (transparent) δηλ., οποιαδήποτε αλλαγή στην κατάσταση του latch είναι αντιληπτή και στις εξόδους (αν υπάρχει σήµα ελέγχου C, αυτό ισχύει κατά τη διάρκεια που C=1).
q Αυτό προκαλεί προβλήµατα συγχρονισµού, αφού η κατάσταση ενός latch µπορεί να αλλάξει πολλαπλές φορές όταν C=1!
q Λύση: Χρησιµοποιούµε latches για τη δηµιουργία των flip-flops που µπορούν να ανταποκριθούν (update) ΜΟΝΟ σε ΣΥΓΚΕΚΡΙΜΕΝΕΣ χρονικές στιγµές (όχι ανά πάσα στιγµή ή κατά τη διάρκεια ενός διαστήµατος).
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.66 © Θεοχαρίδης, ΗΜΥ, 2016
Πυροδότηση (Triggering) Latch/FF q Ο µηχανισµός που επιτρέπει σε ένα στοιχείο
µνήµης (latch ή FF) να αλλάξει κατάσταση
q Τρόποι Πυροδότησης: ● Ασύγχρονα, δηλ. εντελώς διαυγή (π.χ. SR-latch) ● Πυροδότηση-επιπέδου (level trigger, C=1)
(π.χ. SR-latch ή D-latch µε σήµα ελέγχου C) ● Master-Slave (π.χ. SR-FF, D-FF) ● Πυροδότηση-ακµής: θετική ή αρνητική ακµή του C
(rising or falling edge trigger, C=� ή C=�) (π.χ. SR-FF, D-FF)
latches
FFs
ΗΜΥ210 Δ10 VHDL και Flip-Flops – Συµπληρωµατική Διάλεξη.67 © Θεοχαρίδης, ΗΜΥ, 2016
Εναλλακτικές λύσεις στην επιλογή FF
q Τύποι FF: ● SR ● D ● JK
q Τρόποι ενεργοποίησης (triggering): ● Master-Slave: χρησιµοποιεί πυροδότηση-επιπέδου αλλά
µε 2 latches, έτσι ώστε η κατάσταση του FF αλλάζει µόνο µια φορά σε µία περίοδο του ρολογιού
● Ενεργοποίηση-ακµής: θετική ή αρνητική ακµή του C (rising or falling edge trigger, C=∧ ή C=∨)