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



Σχετικά έγγραφα
Αρχιτεκτονική Υπολογιστών

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

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

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

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

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

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

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

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

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

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

Ελίνα Μακρή

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

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

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

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

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

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

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

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

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

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

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

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

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

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

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

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

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

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

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

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

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

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

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

Εισαγωγή στη Γλώσσα VHDL

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

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

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

Ψηφιακά Κυκλώματα (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 ΔΙΑΛΕΞΗ 15: Καταχωρητές (Registers)

VHDL Εισαγωγικές έννοιες

Πρόγραμμα Μεταπτυχιακών Σπουδών «Πληροφορική και Εφαρμογές»

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

ΘΕΜΑΤΑ & ΕΝΔΕΙΚΤΙΚΕΣ ΛΥΣΕΙΣ

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία

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

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 Συµπληρωµατική ΔΙΑΛΕΞΗ 14: Περιγραφή Ακολουθιακών Κυκλωµάτων στη VHDL

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

ΗΜΥ 210: Σχεδιασμός Ψηφιακών Συστημάτων. VHDL για Ακολουθιακά Κυκλώματα 1

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 ΔΙΑΛΕΞΗ 18: Διαδικασία Σχεδίασης Ψηφιακών Συστηµάτων - Επανάληψη

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

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Αναπαράσταση Δεδομένων. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

7 η διάλεξη Ακολουθιακά Κυκλώματα

2.1. Εντολές Σχόλια Τύποι Δεδομένων

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

Περίληψη. ΗΜΥ-210: Λογικός Σχεδιασµός Εαρινό Εξάµηνο Παράδειγµα: Καταχωρητής 2-bit. Καταχωρητής 4-bit. Μνήµη Καταχωρητών

HY130 Ψηφιακή Σχεδίαση

Γ2.1 Στοιχεία Αρχιτεκτονικής. Γ Λυκείου Κατεύθυνσης

ΠΛΗ10 Κεφάλαιο 2. ΠΛH10 Εισαγωγή στην Πληροφορική: Τόμος Α Κεφάλαιο: : Αριθμητική περιοχή της ALU 2.5: Κυκλώματα Υπολογιστών

ΗΥ225 Οργάνωση Υπολογιστών. Εισαγωγή στη Verilog

Οδηγίες εγκατάστασης και χρήσης του Quartus

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

ΠΛΕ- 027 Μικροεπεξεργαστές 5ο μάθημα: Αρχιτεκτονική πυρήνα: υλοποίηση ενός κύκλου

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Απόδειξη Ισοδυναμίας Συναρτήσεων

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

Δημοκρίτειο Πανεπιστήμιο Θράκης Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών. Συστήματα VLSI. Πρόοδος Άνοιξη 2018

Σχεδίαση κυκλωμάτων σε SystemVerilog: 1o μέρος

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Περιγραφή Κυκλωμάτων με χρήση της VHDL. Καταχωρητές και χρονισμός με ρολόι

Περιεχόμενα. Πρώτο Κεφάλαιο. Εισαγωγή στα Ψηφιακά Συστήματα. Δεύτερο Κεφάλαιο. Αριθμητικά Συστήματα Κώδικες

VHDL για Σχεδιασµό Ακολουθιακών Κυκλωµάτων

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

K24 Ψηφιακά Ηλεκτρονικά 9: Flip-Flops

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

ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΚΑΡΑΓΚΙΑΟΥΡΗΣ ΝΙΚΟΛΑΟΣ

Επεξεργαστής Υλοποίηση ενός κύκλου μηχανής

ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωµάτων Τµήµα Επιστήµης Υπολογιστών Χειµερινό Εξάµηνο

ΗΜΥ 210: Λογικός Σχεδιασµός, Εαρινό Εξάµηνο Ένα συνδυαστικό κύκλωµα µπορεί να περιγραφεί από: Φεβ-05. n-είσοδοι

ΑΣΚΗΣΗ 9η-10η ΑΡΙΘΜΗΤΙΚΗ-ΛΟΓΙΚΗ ΜΟΝΑΔΑ ΕΝΟΣ ΨΗΦΙΟΥ (1-BIT ALU)

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

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

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΟΙ ΚΑΤΑΧΩΡΗΤΕΣ ΚΑΙ Η ΥΛΟΠΟΙΗΣΗ ΤΟΥΣ ΜΕ FLIP-FLOP ΚΑΙ ΠΥΛΕΣ

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

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

Χρονισμός και Απόδοση Υπολογιστικών Συστημάτων

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

Library, package και subprograms

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Μάθημα 4 ο Πράξεις με bits. Δρ.

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

Προγραμματισμός Ι (ΗΥ120)

Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές

ΠΕΡΙΕΧΟΜΕΝΑ. Πρόλογος...9 ΚΕΦ. 1. ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ - ΚΩΔΙΚΕΣ

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

Επίπεδο Ψηφιακής Λογικής (The Digital Logic Level)

A2. Να γράψετε για κάθε περίπτωση τον αριθμό της πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

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

Εισαγωγή στα κυκλώµατα CMOS 2

Transcript:

ΜΥΥ- 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! Συνδιάζονται με τελεστές δημιουργώντας λογικές εκφράσεις! Οι εκφράσεις μπορούν να εκχωριθούν () σε καλώδια ή καταχωρητές 6

Καλώδια! Τα καλώδια αναπαριστούν συνδέσεις μονάδων! Υπάρχουν διάφοροι τύποι, αλλά το πιο κοινό είδος ονομάζεται wire! Δεν κρατούν τιμές απλά τις μεταφέρουν wire w; 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] enable data1 data2 bus data2 1 b0; 32 h0000_0000; 16 d256; 32 bz; 16 b0101 b binary h hex (underscore is ignored, helps visually) d decimal s z to all 32 bits of the bus s 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; data3 4 b0011; data2 {4{data3}}; data1 {16 d0, data2}; s 00000000000000000011001100110011 to data1 s 0011001100110011 to data2 {a,b,c,d} data3; 12

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

Αριθμητικές πράξεις wire [3:0] x, y, sum, diff, prod, div, mod; x 4 b1100; 12 y 4 b0011; 3 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; x 4 b1100; 12 y 4 b0100; 4 sum x + y; 4 b0000 {carry, sum} x + y; 5 b1_0000 14

Συγκρίσεις, λογικές πράξεις! Οι συγκρίσεις (<,>,...) θέλουν προσοχή για αρνητικούς αριθμούς κανονικά οι συγκρίσεις ακολουθούν τη δήλωση των reg, wire απρόσημοι με όσα είπαμε εδω! Οι λογικές πράξεις υποθέτουν ότι οι τελεστέοι είναι 1 bit (boolean) υπάρχουν ειδικοί τελεστές για δυαδικές πράξεις wire [3:0] x, y, z; x 4 b1100; y 4 b0011; 12 3 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; a 4 b1100; b 4 b0111; 12 7 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; a 4 b1100; b 4 b0111; 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; a 4 b1100; b 4 b0111; 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 b {a, {7{c}}; 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; two ~one; 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): εντολή η έξοδος ξανα- υπολογίζεται αυτόματα όταν αλλάζει μία από τις εισόδους μόνο για καλώδια: wire, tri, αναθέσεις σε καλώδια μόνο με ή ως έξοδοι modules! Φραγής (blocking): με τον τελεστή όπως σε γλώσσες προγραμματισμού: η σειρά εκτέλεσης έχει σημασία π.χ. a #5 b;! Μή- φραγής (non- blocking): με τον τελεστή < η σειρά δεν έχει σημασία π.χ. a < #5 b; καθυστέρηση 27

Φραγή και αναθέσεις! Στις αναθέσεις φραγής, η επόμενη εντολή εκτελείται αφού γίνει η ανάθεση (και περάσει η καθυστέρηση, #.. αν υπάρχει)! Αντίθετα στις αναθέσεις μή- φραγής, η επόμενη εντολή εκτελείται «ταυτόχρονα» με την ανάθεση! Παράδειγμα (έστω a 0, b1) 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