Αρχιτεκτονική Υπολογιστών

Σχετικά έγγραφα
ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Γλώσσα περιγραφής υλικού: Verilog

ΠΛΕ- 027 Μικροεπεξεργαστές 4ο μάθημα: γλώσσα περιγραφής υλικού Verilog

VERILOG. Γενικά περί γλώσσας

Αρχιτεκτονική Υπολογιστών

ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων

8 η Θεµατική Ενότητα : Εισαγωγή στις Γλώσσες Περιγραφής Υλικού: Μοντέλα Συνδυαστικών Κυκλωµάτων

ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωµάτων

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

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών

Λογική Σχεδίαση Ι - Εξεταστική Φεβρουαρίου 2013 Διάρκεια εξέτασης : 160 Ονοματεπώνυμο : Α. Μ. Έτος σπουδών:

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 1

ΗΥ-225. Verilog HDL. Τα βασικά...

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων VLSI II

Εισαγωγή στην Επιστήμη των Υπολογιστών

Μετρητής Ριπής ΛΟΓΙΚΗ ΣΧΕΔΙΑΣΗ. Αναφορά 9 ης. εργαστηριακής άσκησης: ΑΦΡΟΔΙΤΗ ΤΟΥΦΑ Α.Μ.:

Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων VLSI II

Εισαγωγή στους Υπολογιστές

Πράξεις με δυαδικούς αριθμούς

Δομημένος Προγραμματισμός

Κυριάκης - Μπιτζάρος Ευστάθιος Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.

Εισαγωγή στην πληροφορική

Πληροφορική ΙΙ Θεματική Ενότητα 5

Ψηφιακή Λογική Σχεδίαση

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Εργαστήριο Αρχιτεκτονικής Υπολογιστών Ι. Εισαγωγή στη VHDL

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική Ι. Ενότητα 4 : Πράξεις με bits. Δρ. Γκόγκος Χρήστος

Σχεδίαση CMOS Ψηφιακών Ολοκληρωμένων Κυκλωμάτων

Μοντέλα. χαρακτηριστικά χωρίς να συνοδεύεται από λεπτοµέρειες.

Εισαγωγή στην Επιστήμη των Υπολογιστών

Υπολογιστές Ι. Άδειες Χρήσης. Εισαγωγή. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Αρχιτεκτονική Υπολογιστών

Ενσωματωμένα Συστήματα

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Συντρέχων Κώδικας

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 1

Εισαγωγή στην πληροφορική

Εισαγωγή στους Υπολογιστές

Ηλεκτρονικοί Υπολογιστές I

Ελίνα Μακρή

Εισαγωγή Η VHDL υποστηρίζει τους εξής τρείς βασικούς και διαφορετικούς τρόπους περιγραφής

Εισαγωγή στη γλώσσα περιγραφής υλικού VHDL. Γενικά χαρακτηριστικά, σύνταξη και τύποι. Ψηφιακή Σχεδίαση µε CAD ΙΙ - ιάλεξη 1 -

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

Μοντελοποίηση Λογικών Κυκλωμάτων

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

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

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Ψηφιακή Σχεδίαση

Κυκλωμάτων» Χειμερινό εξάμηνο

7 η Θεµατική Ενότητα : Εισαγωγή στις Γλώσσες Περιγραφής Υλικού

HY430 Εργαστήριο Ψηφιακών Κυκλωμάτων. Πολυπλέκτες Καμπύλη Παρέτο. Κωδικοποιητές/Από-κωδικοποιητές D FF

Πληροφορική. Ενότητα 1: Α. Οργάνωση μαθήματος. Β. Στοιχεία Προγραμματισμού -Προγραμματιστικές Δομές, Πρόγραμμα, Γλώσσες.

Μικροβιολογία & Υγιεινή Τροφίμων

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Ακολουθιακός Κώδικας

ΗΜΥ211 Εργαστήριο Ψηφιακών Συστημάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Πιθανότητες. Συνδυαστική Ανάλυση Διδάσκων: Επίκουρος Καθηγητής Κωνσταντίνος Μπλέκας

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

Διδακτική της Πληροφορικής

Εισαγωγή στη Verilog

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Αρχιτεκτονική-Ι. Ενότητα 1: Εισαγωγή στην Αρχιτεκτονική -Ι

ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων

ΕΙΣΑΓΩΓΙΚΟ ΕΓΧΕΙΡΙ ΙΟ ΓΙΑ ΣΧΕ ΙΑΣΜΟ ΜΕ ΧΡΗΣΗ ΤΗΣ ΓΛΩΣΣΑΣ VHDL

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών

Ιστορία της μετάφρασης

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Εκτέλεση πράξεων. Ψηφιακά Ηλεκτρονικά και Δυαδική Λογική. Πράξεις με δυαδικούς αριθμούς. Πράξεις με δυαδικούς αριθμούς

Επιβεβαίωση ορθής λειτουργίας απλών ψηφιακών κυκλωμάτων

Ηλεκτρονικοί Υπολογιστές IV

ΗΥ220: Εργαστήριο σχεδίασης ψηφιακών κυκλωμάτων Χριστόφορος Κάχρης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Ηλεκτρονικοί Υπολογιστές I

Μαθησιακές δραστηριότητες με υπολογιστή

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

ΗΜΥ 210: Σχεδιασμός Ψηφιακών Συστημάτων. Καταχωρητές 1

Εργαστήριο Οργάνωσης Η/Υ. Δαδαλιάρης Αντώνιος

Προγραμματισμός και Εφαρμογές Υπολογιστών

Τεχνικές Προγραμματισμού και Χρήση Λογισμικού Η/Υ στις Κατασκευές

Διδακτική της Πληροφορικής

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στην Πληροφορική

26-Nov-09. ΗΜΥ 210: Λογικός Σχεδιασμός, Χειμερινό Εξάμηνο Καταχωρητές 1. Διδάσκουσα: Μαρία Κ. Μιχαήλ

Οργάνωση Υπολογιστών

Συστήματα Μικροϋπολογιστών

100 ΕΡΩΤΗΣΕΙΣ ΜΕ ΤΙΣ ΑΝΤΙΣΤΟΙΧΕΣ ΑΠΑΝΤΗΣΕΙΣ ΓΙΑ ΤΟ ΜΑΘΗΜΑ ΨΗΦΙΑΚΑ ΚΥΚΛΩΜΑΤΑ

Εισαγωγή στην Επιστήμη των Υπολογιστών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Εργαστήριο Ψηφιακών Κυκλωμάτων

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

Οδοποιία IΙ. Ενότητα 14: Υπόδειγμα σύνταξης τευχών θέματος Οδοποιίας. Γεώργιος Μίντσης ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Δομές Δεδομένων Ενότητα 3

Πληροφορική ΙΙ Θεματική Ενότητα 6

Αντικειμενοστραφής Προγραμματισμός

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΛΟΠΟΝΝΗΣΟΥ ΣΧΟΛΗ ΟΙΚΟΝΟΜΙΑΣ, ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΛΟΓΙΚΗ ΣΧΕΔΙΑΣΗ

Εφαρμοσμένη Στατιστική

Ηλεκτρονικοί Υπολογιστές IV

Εισαγωγή στους Η/Υ. Ενότητα 2β: Αντίστροφο Πρόβλημα. Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Αρχιτεκτονική Υπολογιστών Αρχιτεκτονικό σύνολο εντολών Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Γλώσσα περιγραφής υλικού: Verilog Αρης Ευθυμίου

Το σημερινό μάθημα! Η γλώσσα περιγραφής υλικού Verilog Περίληψη των αντίστοιχων μαθημάτων Ψηφιακής σχεδίασης έμφαση σε πρακτική χρήση, όχι ολοκληρωμένη παρουσίαση! Σκοπός: Στα επόμενα 3 εργαστήρια θα χρησιμοποιήσετε Verilog Κυρίως μικρές αλλαγές σε έτοιμο κώδικα Σημαντικότερο να κατανοείτε τον υπάρχοντα κώδικα παρά να γράφετε δικό σας Επίσης βοηθά στην περιγραφή τμημάτων του επεξεργαστή 2

Τι είναι η γλώσσα Verilog! Γλώσσα περιγραφής υλικού (hardware descripdon language)! Επιτρέπει τη περιγραφή (μοντελοποίηση) ψηφιακών συστημάτων! Γιατί όχι διαγράμματα κυκλωμάτων, πίνακες αλήθειας, χάρτες Karnaugh,... ; Ταχύτητα ανάπτυξης μοντέλου Δυνατότητα απευθείας προσομοίωσης Δυνατότητα «σύνθεσης» υλικού: μετάφρασης σε «δίκτυο» λογικών πυλών (netlist) και βελτιστοποίησης (βλ. χάρτες Karnaugh κτλ) 3

Τι είναι (2)! Είναι γλώσσα προγραμματισμού; Ναι όταν χρησιμοποιείται για έλεγχο/οδήγηση προσομοίωσης ενός συστήματος (test- bench): παροχή εισόδου, έλεγχος εξόδου Οχι όταν περιγράφει πραγματικό υλικό! Τρία επίπεδα περιγραφής: Επίπεδο διαρθρωτικό (structural): περιγράφει τις συνδέσεις μεταξύ λογικών πυλών ή άλλων μονάδων Υποσύνολο συνθέσιμης περιγραφής «συμπεριφοράς» (synthesizable behavioural) Υποσύνολο μή- συνθέσιμης περιγραφής «συμπεριφοράς» (non- synthesizable behavioural)! για test- benches, αρχικά μοντέλα συστημάτων 4

Τυπική χρήση SYNTHESIZABLE VERILOG (DESIGN) LOGIC SYNTHESIS TOOL BEHAVIOURAL VERILOG (TEST-BENCH) SIMULATOR GATE-LEVEL VERILOG (THE NETLIST) 5

Τιμές! Βασικό δομικό κομμάτι είναι το bit με 4 «λογικές» τιμές: 0, 1 προφανώς! x δεν ξέρουμε την τιμή (ή δεν μας ενδιαφέρει) z δεν οδηγείται (τρι- κατάστατη οδήγηση)! Συμβουλή: αποφεύγετε ονόματα μεταβλητών x, z αν και χρησιμοποιούνται συχνά ως ονόματα εισόδων εξόδων! Οι τιμές μεταδίδονται μέσω καλωδίων nets! Κρατούνται σε καταχωρητές registers! Συνδιάζονται με τελεστές δημιουργώντας λογικές εκφράσεις! Οι εκφράσεις μπορούν να εκχωριθούν (assign) σε καλώδια ή καταχωρητές 6

Καλώδια! Τα καλώδια αναπαριστούν συνδέσεις μονάδων! Υπάρχουν διάφοροι τύποι, αλλά το πιο κοινό είδος ονομάζεται wire! Δεν κρατούν τιμές απλά τις μεταφέρουν wire w; assign w = a & b; Αναθέσεις τιμών σε καλώδια γίνονται μόνο μία φορά! Οποιαδήποτε αλλαγή στα a,b εμφανίζεται αμέσως στο w 7

Καταχωρητές (reg)! Ενας reg κρατάει μια τιμή που του εκχωρείται μέχρι την επόμενη εκχώριση όπως μια μεταβλητή σε γλώσσα προγραμματισμού! Χρησιμοποιείται για να περιγράψει στοιχεία αποθήκευσης flip- flops, μανταλωτές (latches), μνήμες,! Χρησιμοποιείται και για συνδιαστική λογική, γιατί είναι πιο βολικός από το τύπο net αλλά θέλει προσοχή στη χρήση/σύνταξη για να μην υπονοηθεί (infer) στοιχείο αποθήκευσης 8

Διανύσματα (vector)! Ενα bit δεν μπορεί να κάνει πολλά!! Συνήθως χρειαζόμαστε μια ομάδα από bits, όπου η θέση καθενός έχει σημασία (π.χ. αναπαράσταση ενός αριθμού) λέγονται διανύσματα (vectors) υπάρχουν και σε reg και σε wire! Περιγραφή διανύσματος: [ upper : lower ] Καλύτερα upper >= lower lower μπορεί να είναι οποιοσδήποτε αριθμός (όχι υποχρεωτικά 0)! Η Verilog συμπληρώνει με 0 στα αριστερά ό,τι bit λείπουν κατά την ανάθεση Νεότερες εκδόσεις της γλώσσας προσθέτουν προσημασμένους τύπους reg, wire 9

Διανύσματα - παράδειγμα wire [31:0] data; reg [31:16] upper_half; reg [15:0] lower_half; always @(data) begin lower_half = upper_half = lower_half = upper_half = end data[15:0]; data[31:0]; 0; data; extended with 0s 16 LSBs only. 10

Σταθερές - literals! Οι σταθερές συνήθως έχουν δηλωμένο μέγεθος και ξεκινούν με size base size σε bits, b binary, o octal, h hexadecimal, d decimal! Το x ή z θέτει 1 bit για b, 3 bit για o, 4 bit για h! Αν το πιο σημαντικό bit είναι 0, x or z, επεκτείνεται αυτόματα μέχρι το αριστερό άκρο wire [31:0] data1, [15:0] data2; wire enable; tri [31:0] bus; tri declares a tri-state wire, i.e. can be [0,1,z] assign assign assign assign enable data1 data2 bus assign data2 = = = = 1 b0; 32 h0000_0000; 16 d256; 32 bz; = 16 b0101 b = binary h = hex (underscore is ignored, helps visually) d = decimal assigns z to all 32 bits of the bus assigns 0000000000000101 to data2 11

Συνένωση διανυσμάτων! Για συνένωση (concatenadon) διανυσμάτων χρησιμοποιούμε: { vector1, vector2,..., vectorn }! Για συνένωση n φορές του ίδιου διανύσματος, χρησιμοποιούμε: { n { vector } }! Μπορεί να χρησιμοποιηθεί και στο αριστερό μέρος μιας ανάθεσης wire [31:0] data1, [15:0] data2, [3:0] data3; wire a, b, c, d; assign data3 = 4 b0011; assign data2 = {4{data3}}; assign data1 = {16 d0, data2}; assigns 00000000000000000011001100110011 to data1 assigns 0011001100110011 to data2 assign {a,b,c,d} = data3; 12

Τελεστές!!!!!! Arithmedc: + - * / % Logical: &&! Bitwise: & ^ ~ ~^ Comparison: ==!= > < >= <= Reducdon: & ~& ~ ^ ~^ Shi : << >> 13

Αριθμητικές πράξεις wire [3:0] x, y, sum, diff, prod, div, mod; assign x = 4 b1100; 12 assign y = 4 b0011; 3 assign assign assign assign sum prod div mod = = = = x x x x + * / % y; y; y; y; sum gets 15 prod gets lower 4 bits of 8 b10_0100, i.e. 4 b0100 div gets 4 mod gets 0! Αν οποιοδήποτε bit τελεστέου έχει x ή z, όλα τα bit του αποτελέσματος είναι x! Αν το αποτέλεσμα έχει μεγαλύτερο μήκος σε bits, μόνο τα λιγότερο σημαντικά bits εκχωρούνται αν γίνει υπερχείλιση,... wire [3:0] x, y, sum, carry; assign x = 4 b1100; 12 assign y = 4 b0100; 4 assign sum = x + y; 4 b0000 assign {carry, sum} = x + y; 5 b1_0000 14

Συγκρίσεις, λογικές πράξεις! Οι συγκρίσεις (<,>,...) θέλουν προσοχή για αρνητικούς αριθμούς κανονικά οι συγκρίσεις ακολουθούν τη δήλωση των reg, wire απρόσημοι με όσα είπαμε εδω! Οι λογικές πράξεις υποθέτουν ότι οι τελεστέοι είναι 1 bit (boolean) υπάρχουν ειδικοί τελεστές για δυαδικές πράξεις wire [3:0] x, y, z; assign x = 4 b1100; assign y = 4 b0011; 12 3 assign z = (((x == 4 d0) && (y > x))!(y < 4 d10)) 15

Δυαδικές (λογικές) πράξεις!!!! Bitwise AND & Bitwise OR Bitwise XOR ^ Bitwise NOT ~ wire[3:0] a, b, z1, z2, z3, z4; assign a = 4 b1100; assign b = 4 b0111; 12 7 assign assign assign assign z1 z2 z3 z4 = = = = a & b; a b; a ^ b; ~a; z1 z2 z3 z4 gets gets gets gets 0100 1111 1011 0011 16

Τελεστές αναγωγής (reducdon)!!!! Αναγωγική AND / NAND &expr ~&expr Αναγωγική OR / NOR expr ~ expr Αναγωγική XOR / XNOR ^expr ~^expr Κάνει τη λογική πράξη σε όλα τα bit ενός διανύσματος, μεταξύ τους wire[3:0] a, b; wire z1, z2, z3, z4, z5; assign a = 4 b1100; assign b = 4 b0111; assign assign assign assign assign z1 z2 z3 z4 z5 = = = = = &a; &a[3:2]; b; ^a; ~^b; z1 z2 z3 z4 z5 gets gets gets gets gets (1 & 1 & 0 & 0) = 0 (1 & 1) = 1 (0 1 1 1) = 1 (1 ^ 1 ^ 0 ^ 0) = 0 ~(0 ^ 1 ^ 1 ^ 1) = ~(1) = 0 17

Τελεστές ολίσθησης! Αριστερή ολίσθηση <<! Δεξιά ολίσθηση >> Συμπληρώνονται με 0 wire [3:0] a, b, z1, z2, z3, z4; assign a = 4 b1100; assign b = 4 b0111; assign assign assign assign z1 z2 z3 z4 = = = = a a a a << >> >> << 1; 2; 5; 5; z1 z2 z3 z4 gets gets gets gets 1000 0011 0000 0000 18

Ενότητες (modules)! Η ενότητα είναι το δομικό στοιχείο κατασκευής ιεραρχικών κυκλωμάτων μοιάζουν με κλάσεις σε ΟΟ γλώσσες προγραμματισμού Καλή πρακτική: κάθε module σε ξεχωριστό αρχείο με όνομα ίδιο με αυτό του module! Αφού οριστεί/δηλωθεί, μια ενότητα μπορεί να χρησιμοποιηθεί πολλές φορές ως συστατικό άλλων ενοτήτων υπόσταση/στιγμιότυπο - instance! Για παράδειγμα μια λογική πύλη AND αποτελεί μια ενότητα αλλά υπάρχει σε πολλά σημεία σε ένα κύκλωμα δηλ. έχει πολλά instances! Η υψηλότερου επιπέδου (top level) ενότητα αποτελεί το (συνολικό) κύκλωμα Αν και δέν υπάρχουν instances της, η δήλωση θεωρείται και instance 19

Επικοινωνία ενοτήτων! Οι υποστάσεις ενοτήτων επικοινωνούν μέσω θυρών (port)! Κάθε θύρα είναι ένα ονομαζόμενο σήμα ή διάνυσμα σημάτων! Θύρες εισόδου πρέπει να συνδεθούν με (οδηγηθούν από) regs ή wires εσωτερικά είναι πάντα wire! Θύρες εξόδου οδηγούν wires της (υπερ)ενότητας στην οποία τοποθετείται μια υπόσταση της ενότητας εσωτερικά μπορούν να είναι reg ή wire 20

Δηλώσεις ορισμάτων/θυρών Τρία είδη:! Σήματα/διανύσματα εισόδου! εξόδου! αμφίδρομα (bidirecdonal) module foo (a, b, c); input wire [6:0] a; output wire [13:0] b; inout tri c; vector of input wires vector of output wires tri-state input/output assign b = {a, {7{c}}; assign c = b[0]? 1 bz : a[0]; drive out with a[0] if b[0] is true endmodule P.S. Can you see a problem with the circuit above? 21

Υποστάσεις instances module foo (one, two); input wire one; output wire two; module foo (one, two); input wire one; output wire two; assign two = ~one; assign two = ~one; endmodule module bar (a, b); input wire a; output wire b; foo u_foo(a, b); endmodule Instance name positional args endmodule module bar (a, b); input wire a; output wire b; foo u_foo(.one(a),.two(b) ); named args endmodule Η υπόσταση χρειάζεται ένα όνομα Οι πόρτες συνδέονται είτε με τη σειρά ορισμού, είτε, καλύτερα, με τα ονόματα θυρών 22

Διεργασίες 1/2! Τα κυκλώματα δεν «υπολογίζουν» σειριακά όπως τα προγράμματα όλα τα τμήματα λειτουργούν ταυτόχρονα! Τα συνδιαστικά κυκλώματα ανταποκρίνονται σε κάθε αλλαγή εισόδου, ξανα- υπολογίζοντας την έξοδό τους! Τα (σύγχρονα) ακολουθιακά κυκλώματα ανταποκρίνονται στις μεταβολές του σήματος ρολογιού! Η Verilog παρέχει δομές διεργασιών για να χειριζόμαστε αυτές τις δύο κατηγορίες κυκλωμάτων 23

Διεργασίες 2/2! Κάθε διεργασία έχει επικεφαλίδα (header) και κύριο σώμα (body)! Η επικεφαλίδα ορίζει μια λίστα από σήματα τα οποία η διεργασία πρέπει να παρακολουθεί για αλλαγές τιμών (sensi[vity list)! Το κύριο σώμα ορίζει τί πρέπει να γίνει όταν ένα σήμα εισόδου αλλάξει σε απλές περιπτώσεις είναι ένα σύνολο εντολών που υπολογίζει το σήμα εξόδου Εκχωρίσεις τιμών επιτρέπονται μόνο σε reg μέσα σε διεργασίες 24

Συνδιαστικές διεργασίες module decode_2_to_4 (x, z); input wire [1:0] x; output reg [3:0] z; module NAND (x, y, z); input wire x, y; output reg z; always @(x) begin : decode_proc z[0] = (x == 2 b00); z[1] = (x == 2 b01); z[2] = (x == 2 b10); z[3] = (x == 2 b11); end always @(x or y) z = ~(x & y); endmodule module mux(a, b, c, q); endmodule input a,b,c; output q; reg q; always @( a or b or c ) if (c == 1 b1) q = a; else q = b; endmodule If items are missing from the sensitivity list, the logic will not simulate correctly. always @(*) always @(x) z = ~(x & y); 25

Ακολουθιακές διεργασίες module D_LATCH (d, ck, q); module D_FF(d, ck, q); input d, ck; output q; input d, ck; output q; reg q; reg q; always @( d or ck ) if (ck == 1 b1) q = d; endmodule always @( posedge ck ) q <= d; endmodule! Η επικεφαλίδα περιέχει μια ακμή ρολογιού, ή! έναν αριθμό από σήματα, αλλά δεν εκχωρούνται τιμές σε όλες τις περιπτώσεις υπονοείται (infer) μανταλωτής (latch) συχνό λάθος. ο χρήστης ήθελε συνδιαστική διεργασία 26

Αναθέσεις τιμών Τρία είδη ανάθεσης τιμών:! Συνεχόμενη (condnuous): εντολή assign η έξοδος ξανα- υπολογίζεται αυτόματα όταν αλλάζει μία από τις εισόδους μόνο για καλώδια: wire, tri, αναθέσεις σε καλώδια μόνο με assign ή ως έξοδοι modules! Φραγής (blocking): με τον τελεστή = όπως σε γλώσσες προγραμματισμού: η σειρά εκτέλεσης έχει σημασία π.χ. a = #5 b;! Μή- φραγής (non- blocking): με τον τελεστή <= η σειρά δεν έχει σημασία π.χ. a <= #5 b; καθυστέρηση 27

Φραγή και αναθέσεις! Στις αναθέσεις φραγής, η επόμενη εντολή εκτελείται αφού γίνει η ανάθεση (και περάσει η καθυστέρηση, #.. αν υπάρχει)! Αντίθετα στις αναθέσεις μή- φραγής, η επόμενη εντολή εκτελείται «ταυτόχρονα» με την ανάθεση! Παράδειγμα (έστω a = 0, b=1) a = b; a <= b; c = a + 1; c <= a + 1; Αποτέλεσμα: a = 1, c = 2 Αποτέλεσμα: a = 1, c = 1 28

Αναθέσεις τιμών - κανόνες! Σε ακολουθιακές διεργασίες δεν χρησιμοποιούμε αναθέσεις φραγής! Πρέπει να υπάρχει μία μόνο διεργασία που εκχωρεί τιμή σε ένα reg! Σε συνδιαστικές διεργασίες χρησιμοποιούμε μόνο αναθέσεις φραγής! Σε μία διεργασία έχουμε μόνο ένα είδος ανάθεσης always @( posedge ck or posedge rst) if (rst == 1 b1) q <= 1 b0; else q <= d; always @(x or y) begin : logic_proc z = (x == 2 b00); if (y == 1 b1) z = x[0]; end 29

Εντολές ελέγχου! Υπάρχουν εντολές ελέγχου if- then- else, case, και επαναλήψεων: while, for, forever! Χρησιμοποιούμε begin end για περισσότερες από μία εντολή οι περιπτώσεις της case, δεν χρειάζονται break σαν την C (Java?) και αν χρειάζονται περισσότερες εντολές πρέπει να περικλείονται σε begin end. reg [N-1:0] out; always @(*) begin case (sel) 0: out <= #(`MUX_D) in0; 1: out <= #(`MUX_D) in1; endcase end 30

Διεργασίες inidal! Εκτός από τις always, υπάρχει ένας άλλος τρόπος για περιγραφή διεργασιών με την δεσμευμένη λέξη inidal! Αυτές οι διεργασίες δεν χρησιμοποιούνται για σύνθεση κυκλωμάτων αλλά μόνο για μοντελοποίηση υψηλού επιπέδου και οδήγηση προσομοίωσης (test- bench)! Χρήσεις: αρχικοποίηση reg σημάτων καλύτερα να χρησιμοποιεί κανείς ένα σήμα reset παραγωγή σημάτων εισόδου για έλεγχο κυκλώματος 31

Test benches! Περιγράφουν το περιβάλον μέσα στο οποίο θα τοποθετηθεί το κύκλωμα υπό σχεδίαση! Δεν κατασκευάζεται μπορεί να χρησιμοποιήσει μή- συνθέσιμες δομές Verilog! Παράγει εισόδους, σήματα χρονισμού (ρολόι)! Ελέγχει τις εξόδους για λάθη! Παραπέμπω στις διαφάνειες της Ψηφιακή σχεδίασης για λεπτομέρειες 32

Αρχικοποίηση καταχωρητών module dff_le_r (q, d, lden, reset, clk); output reg [31:0] q; input clk; input reset; input lden; input [31:0] d; always @(posedge clk or negedge reset) begin if (!reset) dff_le_r pc( q <= 'h0;.q(pc_r), else if (lden) begin.d(nextpc), q <= #`DFF_D d;.lden(1'b1), end.clk(clk), end.reset(reset) endmodule ); 33

Επόμενο μάθημα Σχεδίαση επεξεργαστή 1ο μέρος: δίαυλος δεδομένων 34

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

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Σημειώματα

Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ. http:ecourse.uoi.gr/course/view.php?id=1307.

Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου. «Αρχιτεκτονική Υπολογιστών. Αρχιτεκτονικό σύνολο εντολών». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http:ecourse.uoi.gr/course/view.php?id=1307.

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https:creativecommons.org/licenses/by-sa/4.0/.