Εργαστήριο Οργάνωσης Η/Υ Δαδαλιάρης Αντώνιος dadaliaris@uth.gr
Ρόλος των γλωσσών περιγραφής υλικού σε μια τυπική ροή σχεδίασης: Documentation Simulation Synthesis Οι γλώσσες περιγραφής υλικού μπορούν να χρησιμοποιηθούν για την σχεδίαση ενός κυκλώματος τόσο στο επίπεδο πυλών (gate level) όσο και στο επίπεδο καταχωρητών (RTL level), αναπαριστώντας το εκάστοτε κύκλωμα είτε σε structural view είτε σε behavioral view.
Οι δύο βασικότερες γλώσσες περιγραφής υλικού που χρησιμοποιούνται στην βιομηχανία είναι η VHDL (Very High Speed Integrted Circuit Hardware Description Language) και η Verilog. Διαφορετική σύνταξη. Παρόμοιες δυνατότητες. Υποστηρίζονται από το σύνολο των βιομηχανικών εργαλείων σχεδίασης ψηφιακών κυκλωμάτων.
Πλεονεκτήματα: Μεταφερσιμότητα Επαναχρησιμοποιησιμότητα Πλήρως καθορισμένα πρότυπα Τεχνολογικά ανεξάρτητες Πλεονεκτήματα γλωσσών προγραμματισμού υψηλού επιπέδου: Δόμηση Παραμετροποίηση Εντολές συνθήκης Βρόχοι επανάληψης Ιεράρχηση
Even Parity Detection Circuit
library ieee; use ieee.std_logic_1164.all; entity even_detector is port( a: in std_logic_vector(2 downto 0); even: out std_logic ); end even_detector; architecture sop_arch of even_detector is signal p1, p2, p3, p4 : std_logic; begin even <= (p1 or p2) or (p3 or p4); p1 <= (not a(2)) and (not a(1)) and (not a(0)); p2 <= (not a(2)) and a(1) and a(0); p3 <= a(2) and (not a(1)) and a(0); p4 <= a(2) and a(1) and (not a(0)); end sop_arch;
Library & Packages: Δήλωση βιβλιοθηκών (library) και πακέτων (package) που χρησιμοποιούμε στην περιγραφή. Entity: Δήλωση εισόδων και εξόδων του κυκλώματος. Είσοδος Κυκλώματος: μία είσοδος μήκους 3 bit. Έξοδος Κυκλώματος: μία έξοδος μήκους 1 bit Architecture: Καθορισμός της λειτουργικότητας ή της δομής του κυκλώματος.
Architecture: Δήλωση σημάτων (signal). Άτυπα, μπορούμε να θεωρήσουμε πως κάθε σήμα αντιστοιχεί σε ένα "καλώδιο". Αναθέσεις τιμών σε προκαθορισμένα σήματα. Ταυτόχρονες (concurrent) αναθέσεις.
Περιγραφή του κυκλώματος βάσει των υποκυκλωμάτων που το αποτελούν και του τρόπου που αυτά συνδέονται μεταξύ τους. Πρακτικά η περιγραφή ενός σχηματικού. Αρχικά, πρέπει να "δηλώσουμε" τα υποκυκλώματα και στην συνέχεια να τα "καλέσουμε" / "αρχικοποιήσουμε".
architecture str_arch of even_detector is component xor2 port( i1, i2: in std_logic; o1: out std_logic ); end component; component not1 port( i1: in std_logic; o1: out std_logic ); end component; signal sig1,sig2: std_logic; begin unit1: xor2 port map (i1=>a(0), i2=>a(1), o1=>sig1); unit2: xor2 port map (i1=>a(2), i2=>sig1, o1=>sig2); unit3: not1 port map (i1=>sig2, o1=>even); end str_arch;
Κλήση υποκυκλώματος: Η κλήση ενός υποκυκλώματος υλοποιείται με την χρήση της εντολής port map, η οποία ακολουθεί την εξής σύνταξη: label: instantiated_component_name port map(signal_mapping) Η εντολή port map ανήκει στα concurrent statements και μπορεί να δηλωθεί σε συνδυασμό με άλλες εντολές της ίδιας κατηγορίας. Η χρήση υποκυκλωμάτων κατά την υλοποίηση μιας σχεδίασης διευκολύνει: την ιεραρχική σχεδίαση την ενσωμάτωση IP σχεδιάσεων
library ieee; use ieee.std_logic_1164.all entity xor2 is port( i1, i2: in std_logic; o1: out std_logic ); end xor2; architecture beh_arch of xor2 is begin o1 <= i1 xor i2; end beh_arch; library ieee; use ieee.std_logic_1164.all entity not1 is port( i1: in std_logic; o1: out std_logic ); end not1; architecture beh_arch of not1 is begin i1 <= not o1; end beh_arch;
Λίστα Ευαισθησίας (Sensitivity List) Το process "ενεργοποιείται" όταν αλλάζει η τιμή κάποιου σήματος που βρίσκεται εντός της λίστας ευαισθησίας του. Η επιλογή των σημάτων που θα ενταχθούν στη λίστα ευαισθησίας, εξαρτάται από την λειτουργικότητα του κυκλώματος. Even Parity Detector: architecture beh1_arch of even_detector is signal odd: std_logic; begin even <= not odd; process(a) variable tmp: std_logic; begin tmp := 0 ; for i in 2 downto 0 loop tmp := tmp xor a(i); end loop; odd <= tmp; end process; end beh1_arch;
Ένας κώδικας σε VHDL για την υλοποίηση ενός "εικονικού" πειράματος. Το οποίο περιλαμβάνει: το κύκλωμα που θέλουμε να ελέγξουμε τις εισόδους με τις οποίες θέλουμε να τροφοδοτήσουμε το κύκλωμα μια διαδικασία ελέγχου των παραγόμενων εξόδων
library ieee; use ieee.std_logic_1164.all; entity even_detector_testbench is end even_detector_testbench; architecture tb_arch of even_detector_testbench is component even_detector port( a: in std_logic_vector(2 downto 0); even: out std_logic ); end component; signal test_in: std_logic_vector(2 downto 0); signal test_out: std_logic; begin uut: even_detector port map(a=>test_in, even=>test_out); process begin test_in <= "000"; wait for 200 ns; test_in <= "001"; wait for 200 ns; test_in <= "010"; wait for 200 ns;
test_in <= "111"; wait for 200 ns; end process; process variable error_status: boolean; begin wait on test_in; wait for 100 ns; if ((test_in="000" and test_out = 1 ) or (test_in="001" and test_out = 0 ) or (test_in="010" and test_out = 0 )) then error_status := false; else error_status := true; end if; assert not error_status report "test failed." severity note; end process; end tb_arch;
1. Σχεδιάστε ένα behavioral και ένα structural view model για έναν πλήρη αθροιστή 4-bit. 2. Εξηγείστε για ποιό λόγο δεν μπορούμε να χρησιμοποιήσουμε γλώσσες προγραμματισμού όπως η C και η Java για την σχεδίαση ενός κυκλώματος. 3. Τί είναι τα even parity decision circuits και που χρησιμοποιούνται; 4. Αναφέρετε τις βασικές διαφορές μεταξύ της δομικής περιγραφής (structural description) και της περιγραφής συμπεριφοράς (behavioral description) ενός κυκλώματος στη VHDL. 5. Τί εννοούμε με τον όρο dataflow description; 6. Ποιά είναι τα βασικά πλεονεκτήματα της structural περιγραφής κυκλωμάτων; 7. Για ποιό λόγο χρησιμοποιούμε τα testbenches κατά την σχεδίαση ενός κυκλώματος; 8. Για ποιές τιμές εισόδου πρέπει (ιδανικά) να ελέγξουμε κάθε κυκλωμα που σχεδιάζουμε; 9. Πότε "ενεργοποιείται" ένα process; 10. Ποιά σήματα τοποθετούμε στην λίστα ευαισθησίας ενός process; 11. Ποιά είναι η βασική διαφορά στον τρόπο με τον οποίο αντιμετωπίζουν τα εργαλεία σύνθεσης έναν κώδικα σε behavioral VHDL και έναν κώδικα σε structura VHDL;