ΗΥ220 - Βασίλης Παπαευσταθίου1 ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων Χειμερινό Εξάμηνο 2006-2007 Verilog: Μια πιο κοντινή ματιά.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Υποθέτοντας ότι ο τελεστής ^ δεν είναι διαθέσιμος στην Γλώσσα Προγραμματισμού, να γραφτεί αλγόριθμος που να υπολογίζει την παράσταση xν, όπου xR, νZ.
Advertisements

Δίκτυα Υπολογιστών Εργαστήριο 1.
Όργιο Αυθαιρεσιών Στη Βαράσοβα Εικόνες & σκέψεις μετά από τη τελευταία επίσκεψη… Μήπως όμως είναι και η τελευταία ευκαιρία μας να κάνουμε κάτι;;;
ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων
ΕΝΟΤΗΤΑ 10Η Η ΓΛΩΣΣΑ VHDL: ΑΚΟΛΟΥΘΙΑΚΑ ΚΥΚΛΩΜΑΤΑ
ΜΑΘ-3122/106 Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Ταξινόμηση και Αναζήτηση.
Aπλή Αρμονική Ταλάντωση χωρίς αρχική φάση 1/9/2010Ε.Παπαευσταθίου1.
Καμηλοπάρδαλη από το Μιχάλη Αλεξανίδη
Γλώσσες Περιγραφής Υλικού. Οι γλώσσες περιγραφής υλικού είναι προσανατολισμένες στην περιγραφή της δομής του hardware και/ή της συμπεριφοράς του Χρησιμοποιούνται.
1. Τα απολύτως απαραίτητα
ΗΥ220 - Βασίλης Παπαευσταθίου1 ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων Χειμερινό Εξάμηνο Εισαγωγή.
To περιβάλλον kodu Σενάριο διδασκαλίας.
ΚMΕΚMΕ Η σχεδίαση ψηφιακών κυκλωμάτων όπως η ΚΜΕ ενός Η/Υ απαιτεί συμβιβασμούς μεταξύ αντικρουόμενων παραγόντων: ΧΡΟΝΟΣ ΕΚΤΕΛΕΣΗΣΚΟΣΤΟΣΕΠΙΦΑΝΕΙΑΠΟΛΥΠΛΟΚΟΤΗΤΑ.
ΗΥ-220 Γιάννης Παπαευσταθίου Σύνθεση Κυκλωμάτων με εργαλεία CAD Γιάννης Παπαευσταθίου Ευχαριστίες στον Διονύση Πνευματικάτο για την ύλη της διάλεξης Φθινόπωρο.
V ERILOG 2. Μια πιο κοντινή ματιά. ΗΥ-220 – Μαυροειδής Ιάκωβος2 Δομή της γλώσσας Μοιάζει πολύ με τη C –Preprocessor –Keywords –Τελεστές Γλώσσα «event.
Εργαστήριο του μαθήματος “Ψηφιακή Επεξεργασία και Ανάλυση Εικόνας”
ΗΥ220 - Βασίλης Παπαευσταθίου1 ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων Χειμερινό Εξάμηνο SoC: System on Chip.
ΗΥ-220 Verilog HDL. Τα βασικά.... ΗΥ-220 – Ιάκωβος Μαυροειδής2 Βασική Ροή Σχεδίασης Requirements SimulateRTL Model Gate-level Model Synthesize SimulateTest.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Η δημοφιλέστερη γλώσσα Hardware
ΗΥ220 - Βασίλης Παπαευσταθίου1 ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων Χειμερινό Εξάμηνο Ρολόγια και Χρονισμός.
ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων
ΗΥ220 - Βασίλης Παπαευσταθίου1 ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων Χειμερινό Εξάμηνο Verilog: Τα βασικά.
V ERILOG 2. Μια πιο κοντινή ματιά. ΗΥ Παπαευσταθίου Γιάννης2 Δομή της γλώσσας Μοιάζει πολύ με τη C –Preprocessor –Keywords –Τελεστές Γλώσσα «event.
ΗΥ220 - Βασίλης Παπαευσταθίου1 ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων Χειμερινό Εξάμηνο Ροή Σχεδίασης Κυκλωμάτων και Εργαλεία CAD.
1 ΠΛΗΡΟΦΟΡΙΑΚΑ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Γεώργιος Γιαγλής Οικονομικό Πανεπιστήμιο Αθηνών Τμήμα Διοικητικής Επιστήμης & Τεχνολογίας.
1 ΠΛΗΡΟΦΟΡΙΑΚΑ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Γεώργιος Γιαγλής Οικονομικό Πανεπιστήμιο Αθηνών Τμήμα Διοικητικής Επιστήμης & Τεχνολογίας.
ΗΥ220 - Βασίλης Παπαευσταθίου1 ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων Χειμερινό Εξάμηνο Εργαστήρια.
ΗΥ220 - Βασίλης Παπαευσταθίου1 ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων Χειμερινό Εξάμηνο Εισαγωγή.
Εισαγωγή στους Η/Υ PHP Hypertext Preprocessor 3. Διατάξεις (arrays) Σε μία μεταβλητή αποθηκεύαμε μόνο μία τιμή. Αν θέλουμε να αποθηκεύσουμε περισσότερες.
Βασικες Εννοιες Φυσικης Βασιλης Κολλιας Βασικές Εννοιες Φυσικής _ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ.
Σεμινάριο & Υποχρεώσεις Μονάδα Αριστείας ΕΛ/ΛΑΚ ΤΕΙ Αθήνας Θερινό Σχολείο «Προγραμματισμός Arduino για έλεγχο του Diyiot- car & ανάπτυξη WEB περιβάλλοντος.
Κεφάλαιο 6 Δίκτυα Ευρείας Περιοχής Εισαγωγικά. Κατηγορίες Δικτύων Με βάση τη γεωγραφική περιοχή –Τοπικά Δίκτυα (LAN) –Δίκτυα Ευρείας Περιοχής (WAN)
ΜΗΧΑΝΟΛΟΓΙΚΟ ΕΡΓΑΣΤΗΡΙΟ ΙΙ κ.α.204 εξάμηνο Β’ 1.ΔΟΜΗ ΤΩΝ ΜΕΤΑΛΛΩΝ 2.ΕΡΓΑΛΕΙΟΜΗΧΑΝΕΣ 3.ΣΥΓΚΟΛΛΗΣΕΙΣ.
Μετρήσεις-Αβεβαιότητα-Σφάλματα. Η μέτρηση ενός μεγέθους στο εργαστήριο μπορεί να είναι: ΑΜΕΣΗ ή ΕΜΜΕΣΗ Στην άμεση μέτρηση το μέγεθος μετράται με κάποιο.
ΔΠΘ- ΜΠΔ:ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 00 1 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C Δ.Π.Θ. ΤΜΗΜΑ Μηχανικών Παραγωγής & Διοίκησης ΕΞΑΜΗΝΟ B’ ΦΕΒΡΟΥΑΡΙΟΣ – ΙΟΥΝΙΟΣ.
ΒΑΣΙΚΕΣ ΑΡΧΕΣ ΘΕΡΑΠΕΙΑΣ ΤΟΥ ΚΑΡΚΙΝΟΥ Χρήστος Ν. Χριστόπουλος, MD Ακτινοθεραπευτής - Ογκολόγος Ογκολογική Νοσηλευτική ΑΤΕΙ Πάτρας 2009.
ΘΕΩΡΙΑ 1. 2 Oι παράγοντες, οι οποίοι επέδρασαν σημαντικά και αποφασιστικά στην αναβάθμιση του ρόλου της συσκευασίας στην παραγωγή και εμπορία των προϊόντων,
ΝΕΟ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΠΟΡΕΙΑ ΥΛΟΠΟΙΗΣΗΣ ΣΚΟΠΟΙ ΝΕΟΥ ΠΣ ΜΑΘΗΜΑΤΑ ΓΕΝΙΚΕΣ ΑΛΛΑΓΕΣ ΔΗΛΩΣΕΙΣ ΜΑΘΗΜΑΤΩΝ ΜΕΤΑΒΑΤΙΚΕΣ ΡΥΘΜΙΣΕΙΣ.
Προγραμματισμός & Εφαρμογές Υπολογιστών Κωδικός Μαθήματος: 2890 Κωδικός Διαφανειών: MKT130 Καθηγητής Νίκος Λορέντζος Γεωπονικό Πανεπιστήμιο Αθηνών Τμήμα.
Το Πρόγραμμα Σπουδών του Τμήματος Ηλεκτρονικής Δημήτρης Παπακώστας Δρ. Ηλεκτρολόγος Μηχανικός Αναπληρωτής Καθηγητής
ΔΕΥΤΕΡΟΒΑΘΜΙΑ ΕΚΠΑΙΔΕΥΣΗ
Διοίκηση ΜΜΕ και Επιχειρηματικότητα Διάλεξη 3η ( ) Από την Ευκαιρία, στη Δημιουργία μίας Επιχείρησης Δρ. Αλέξανδρος Αποστολάκης
Πρόγραμμα Προπτυχιακών Σπουδών Ροή Λ: Λογισμικό
Μαθήματα Τομέα Σ.Ε.Ρ. / Ροής Σ: (Σήματα, Ελεγχος και Ρομποτική)
Από τον Νικόλα Φοινικαρίδη Φεβρουάριος, 2017
Ροή Η: Ηλεκτρονική-Κυκλώματα-Υλικά
Εισαγωγή στους Η/Υ Ενότητα 11: Αλγεβρικές πράξεις στους Η/Υ
ΑΝΑΠΛΗΡΩΣΗ ΕΡΓΑΣΤΗΡΙΩΝ ΠΕΡΙΒΑΛΛΟΝΤΙΚΗΣ ΧΗΜΕΙΑΣ
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Εισαγωγή στη VHDL 5/8/2018 Εισαγωγή στη VHDL.
Μαθήματα Τομέα Σ.Ε.Ρ. / Ροής Σ: (Σήματα, Ελεγχος και Ρομποτική)
ΤΕΧΝΙΚΑ ΘΕΜΑΤΑ ΠΩΛΗΣΕΩΝ & ΠΡΟΔΙΑΓΡΑΦΕΣ ΥΛΙΚΟΥ ΚΑΙ ΛΟΓΙΣΜΙΚΟΥ Β΄ ΕΠΑΛ ΚεφΑλαιο 2: ΠροδιαγραφΕΣ ΥλικοΥ Η/Υ 2.8 Μνήμη.
“Ψηφιακός έλεγχος και μέτρηση της στάθμης υγρού σε δεξαμενή"
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
Ασύγχρονες Μηχανές Στις ασύγχρονες μηχανές (Α.Μ.) ή αλλιώς επαγωγικές μηχανές ο δρομέας αποτελείται, α) είτε από ένα τύλιγμα στο οποίο συνδέονται εξωτερικά.
Βάσεις Δεδομένων Γεωπονικό Πανεπιστήμιο Αθηνών Γενικό Τμήμα
lacip® 160 Υγρό πλυντηρίου πιάτων/ποτηριών/σκευών
Ψηφιακή Σχεδίαση εργαστήριο
Χειμερινό εξάμηνο 2017 Τέταρτη διάλεξη
Ψηφιακή Σχεδίαση εργαστήριο
Ροή Η: Ηλεκτρονική-Κυκλώματα-Υλικά
«Προϊόντα αγροτικής παραγωγής με όνομα και ταυτότητα»
Μάθημα στην τάξη.
A Virtual Tour of London
UNIT 1 Τα Πρώτα Προγράμματα.
Οι Κατευθύνσεις στο τμήμα Μηχανικών Πληροφορικής
«Επιδημιολογία + Δημόσια Υγεία»
Ν: Συνολικός αριθμός εγγεγραμμένων φοιτητών Π: Προπτυχιακοί φοιτητές
Μεταγράφημα παρουσίασης:

ΗΥ220 - Βασίλης Παπαευσταθίου1 ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων Χειμερινό Εξάμηνο Verilog: Μια πιο κοντινή ματιά

ΗΥ220 - Βασίλης Παπαευσταθίου2 Δομή της γλώσσας Μοιάζει αρκετά με τη C –Preprocessor –Keywords –Τελεστές Γλώσσα «event driven» `timescale 1ns / 1ns `define dh 2 (e.g q <= #`dh d) `undef dh `ifdef dh / `ifndef dh... `else... `endif `include “def.h” `timescale 1ns / 1ns `define dh 2 (e.g q <= #`dh d) `undef dh `ifdef dh / `ifndef dh... `else... `endif `include “def.h” & and | or ~ not ^ xor & and | or ~ not ^ xor = ==, !=, = && || ? : = ==, !=, = && || ? :

ΗΥ220 - Βασίλης Παπαευσταθίου3 Events in Verilog (1/3) Δουλεύει μόνο όταν κάτι αλλάξει Όλο το simulation δουλεύει γύρω από μια ουρά από γεγονότα (event queue) –Περιέχει events και ετικέτες με το χρόνο στον οποίο θα εκτελεστούν –Καμμιά εγγύηση για τη σειρά εκτέλεσης γεγόνοτων που πρέπει να γίνουν στον ίδιο χρόνο!!! always clk = #(`period / 2) ~clk; clk) a = b + 1; clk) b = c + 1; always clk = #(`period / 2) ~clk; clk) a = b + 1; clk) b = c + 1; !

ΗΥ220 - Βασίλης Παπαευσταθίου4 Βασική ροή προσομοίωσης –Εκτέλεση των events για τον τρέχοντα χρόνο –Οι εκτέλεση events αλλάζει την κατάσταση του συστήματος και μπορεί να προκαλέσει προγραμματισμό events για το μέλλον –Όταν τελειώσουν τα events του τρέχοντα χρόνου προχωράμε στα αμέσως επόμενα χρονικά! Events in Verilog (2/3) t 0 + period t0t0

ΗΥ220 - Βασίλης Παπαευσταθίου5 Events in Verilog (3/3) 2 τύποι events –Evaluation : υπολογίζουν τις συναρτήσεις των εισόδων της έκφρασης (RHS) –Update : Αλλάζουν τις εξόδους (LHS) –Λαμβάνουν υπόψιν delays – nonb-assignments Evaluation: διαβάζει τις τιμές b και c, υπολογίζει, αποθηκεύει εσωτερικά και προγραμματίζει ένα update event Update: Γράφει το νέο a και προγραμματίζει evaluation events για κώδικα που εξαρτάται από το α. a <= b + c

ΗΥ220 - Βασίλης Παπαευσταθίου6 Blocking vs Non-blocking assignments and Events Blocking = –Evaluation/read (RHS) και assignment/write (LHS) (update event) στον ίδιο χρόνο –Εκτέλεση σειριακή Non-blocking <= –Evaluation και assignment σε 2 βήματα 1.Evaluation στο δεξί μέλος (RHS) άμεσα 2.Assignment (update) στο αριστερό μέλος (LHS) όταν τελειώσουν όλα τα evaluations του τρέχοντος χρόνου clk) a <= b; clk) b <= a; clk) a <= b; clk) b <= a; clk) a = b; clk) b = a; clk) a = b; clk) b = a; Swap ? 

ΗΥ220 - Βασίλης Παπαευσταθίου7 Delays and Events Regular / Inter-Assignment delays #5 a = b + c; // a=b+c at time 5 #4 d = a; // d=a new at time 9 Intra-Assignment delays –Evaluation του RHS πρίν την καθυστέρηση –With blocking assignments: a = #5 b + c; // a=b+c at time 5 d = a; // d=a new at time 5 –With non-blocking assignments: a <= #5 b + c; // a=b+c at time 5 d <= a; // d=a old at time 0

ΗΥ220 - Βασίλης Παπαευσταθίου8 Events Example Κάθε έκφραση συνδέεται με έναν αρχικό χρόνο Initial και always: εσωτερικά σειριακά - εκτός από non-blocking assignments initial begin a = 0; b = 0; c = 0; clk = 0; end always begin clk = #10 1; clk = #10 0; end wire #4 [3:0] comb = a + b; clk) a <= b + 1; clk) b <= c + 1; clk) c <= #5 a + 1; initial begin a = 0; b = 0; c = 0; clk = 0; end always begin clk = #10 1; clk = #10 0; end wire #4 [3:0] comb = a + b; clk) a <= b + 1; clk) b <= c + 1; clk) c <= #5 a + 1; 0 10, 30 15, 35 10, 20, 30, 40, 50 4, 14, 34

ΗΥ220 - Βασίλης Παπαευσταθίου9 Sensitivity lists Λογικές εκφράσεις με or, and posedge και negedge –Ρολόγια, reset clk or negedge rst_)... or b or c) if (opcode == 32’h52A0234E) a = b ^ (~c); a or posedge b)... clk or negedge rst_)... or b or c) if (opcode == 32’h52A0234E) a = b ^ (~c); a or posedge b)... ! Παράλειψη παραγόντων RHS και αυτών που γίνονται “read” δίνουν λάθη στην προσομοίωση Προσοχή στο hardware που θέλουμε να περιγράψουμε…

ΗΥ220 - Βασίλης Παπαευσταθίου10 Τιμές σημάτων Four-valued logic 0 ή 1 Ζ –Έξοδος τρικατάστατου οδηγητή –Καλώδιο χωρίς ανάθεση X –Αρχική τιμή των regs –Έξοδος πύλης με είσοδο/ους Ζ –Ταυτόχρονη ανάθεση 0 και 1 από δύο ή περισσότερες πηγές Προσοχή στην αρχικοποίηση (regs) clk) if (reset)... else... clk) if (reset)... else... initial... 01XZ XXX0XXXZ0XXX01XZ XXX0XXXZ0XXX

ΗΥ220 - Βασίλης Παπαευσταθίου11 Concatenation «Hardwired» πράξεις… … απαραίτητες σε μια HDL wire [2:0] a; wire [4:0] b; wire [7:0] c = {a, b}; wire [2:0] a; wire [4:0] b; wire [7:0] c = {a, b}; a b c wire [7:0] unsigned; wire [15:0] sign_extend = { (unsigned[7] ? 8’hFF : 8’h0), unsigned }; wire [7:0] unsigned; wire [15:0] sign_extend = { (unsigned[7] ? 8’hFF : 8’h0), unsigned };

ΗΥ220 - Βασίλης Παπαευσταθίου12 For … While … … τa γνωστά Μόνο μέσα σε blocks ! Δεν υπάρχει break ουτε continue!!! Δεν υπάρχει i++, ++i κτλ! Κυρίως για testbenches !!! integer i; // the famous i variable :) initial begin for ( i=0; i<10; i=i+1 )begin $display (“i= %d”,i); end integer i; // the famous i variable :) initial begin for ( i=0; i<10; i=i+1 )begin $display (“i= %d”,i); end integer j; //reg [3:0] j is OK! initial begin j=0; while(j < 10)begin $display (“j= %b”,j); j=j+1; end integer j; //reg [3:0] j is OK! initial begin j=0; while(j < 10)begin $display (“j= %b”,j); j=j+1; end

ΗΥ220 - Βασίλης Παπαευσταθίου13 Παραμετρικά modules Μπορούμε να έχουμε παραμέτρους σε ένα module Default μέγεθος … πολύ βολικό! module RegLd( D, Q, load, clk); parameter N = 8; parameter dh = 2; input [N-1:0] D; output [N-1:0] Q; input load, clk; reg [N-1:0] Q; clk) if (load) Q = #dh D; endmodule module RegLd( D, Q, load, clk); parameter N = 8; parameter dh = 2; input [N-1:0] D; output [N-1:0] Q; input load, clk; reg [N-1:0] Q; clk) if (load) Q = #dh D; endmodule RegLd reg0(d0, q0, ld, clk); RegLd #(16,2) reg1(d1, q1, ld, clk); RegLd reg2(d2, q2, ld, clk); defparam reg2.N = 4; defparam reg2.dh = 4; RegLd reg0(d0, q0, ld, clk); RegLd #(16,2) reg1(d1, q1, ld, clk); RegLd reg2(d2, q2, ld, clk); defparam reg2.N = 4; defparam reg2.dh = 4;

ΗΥ220 - Βασίλης Παπαευσταθίου14 Τρικατάστατοι οδηγητές Εκμετάλλευση της κατάστασης Ζ module tristate(en, clk, data); input en, clk; inout [7:0] data; wire [7:0] data = (en) ? data_out : 8’bz; clk) begin if (!en) case (data)... endmodule module tristate(en, clk, data); input en, clk; inout [7:0] data; wire [7:0] data = (en) ? data_out : 8’bz; clk) begin if (!en) case (data)... endmodule Χρήση του τύπου inout wire [7:0] bus; tristate tr0(en0, clk, bus); tristate tr1(en1, clk, bus); tristate tr2(en2, clk, bus); wire [7:0] bus; tristate tr0(en0, clk, bus); tristate tr1(en1, clk, bus); tristate tr2(en2, clk, bus);

ΗΥ220 - Βασίλης Παπαευσταθίου15 Μνήμες Αναδρομικά: array of array Συνήθως non- synthesizable Ειδική αρχικοποίηση –$readmemh –$readmemb wire [15:0] word_in; wire [15:0] word_out; wire [ 9:0] addr; reg [15:0] memory [1023:0]; clk) begin if (we) memory[addr] = word_in; else word_out = memory[addr]; end wire [15:0] word_in; wire [15:0] word_out; wire [ 9:0] addr; reg [15:0] memory [1023:0]; clk) begin if (we) memory[addr] = word_in; else word_out = memory[addr]; end rst_n) $readmemh(“memory.dat”, memory); rst_n) $readmemh(“memory.dat”, memory); memory.dat: 0F00 00F1 0F02 memory.dat: 0F00 00F1 0F02

ΗΥ220 - Βασίλης Παπαευσταθίου16 Συναρτήσεις – Functions (1/3) Δήλωση (declaration): function [ range_or_type ] fname; input_declarations statements endfunction Επιστρεφόμενη τιμή (return value): –Ανάθεση στο σώμα του function fname = expression; Κλήση (function call): fname ( expression,… )

ΗΥ220 - Βασίλης Παπαευσταθίου17 Συναρτήσεις - Functions (2/3) Χαρακτηριστικά συναρτήσεων: –Επιστρέφει 1 τιμή (default: 1 bit) –Μπορεί να έχει πολλαπλά ορίσματα εισόδου (πρέπει να έχει τουλάχιστον ένα) –Μπορούν να καλούν άλλες functions αλλά όχι tasks. –Δεν υποστηρίζουν αναδρομή (non-recursive) –Εκτελούνται σε μηδέν χρόνο προσομοίωσης Δεν επιτρέπονται χρονικές λειτουργίες (π.χ. delays, events) Χρησιμοποιούνται για συνδυαστική λογική και συνθέτονται συνήθως ετσι. –προσοχή στον κώδικα για να γίνει σωστά σύνθεση

ΗΥ220 - Βασίλης Παπαευσταθίου18 Συναρτήσεις - Functions (3/3) Function examples: function calc_parity; input [31:0] val; begin calc_parity = ^val; end endfunction function [15:0] average; input [15:0] a, b, c, d; begin average = (a + b + c + d) >> 2; end endfunction;

ΗΥ220 - Βασίλης Παπαευσταθίου19 Verilog Tasks (1/2) Τυπικές procedures Πολλαπλά ορίσματα input, output και inout Δεν υπάρχει συγκεκριμένη τιμή επιστροφής (χρησιμοποιεί τα όρισματα output ) Δεν υποστηρίζουν αναδρομή (non-recursive) Μπορούν να καλούν άλλες tasks και functions Μπορούν να περιέχουν delays, events και χρονικές λειτουργίες –Προσοχή στη σύνθεση

ΗΥ220 - Βασίλης Παπαευσταθίου20 Verilog Tasks (2/2) Task example: task ReverseByte; input [7:0] a; output [7:0] ra; integer j; begin for (j = 7; j >=0; j=j-1) begin ra[j] = a[7-j]; end endtask

ΗΥ220 - Βασίλης Παπαευσταθίου21 Functions and Tasks Ορίζονται μέσα σε modules και είναι τοπικές Δεν μπορούν να έχουν always και initial blocks αλλά μπορούν να καλούνται μέσα από αυτά –Μπορούν να έχουν ότι εκφράσεις μπαίνουν σε blocks

ΗΥ220 - Βασίλης Παπαευσταθίου22 Functions vs Tasks FunctionsTasks Μπορούν να καλούν άλλες functions αλλά όχι tasks Μπορούν να καλούν άλλες tasks και functions Εκτελούνται σε μηδενικό χρόνο προσομοίωσης Μπορούν να διαρκούν μη μηδενικό χρόνο προσομοίωσης Δεν μπορούν περιέχουν χρονικές λειτουργίες (delay, events κτλ) Μπορούν να περιέχουν χρονικές λειτουργίες (delay, events κτλ) Έχουν τουλάχιστον 1 είσοδο και μπορούν να έχουν πολλές Μπορούν να έχουν μηδέν ή περισσότερα ορίσματα εισόδων, εξοδων και inout Επιστρέφουν μια τιμή, δεν έχουν εξόδους Δεν επιστρέφουν τιμή αλλά βγάζουν έξοδο από τα ορίσματα εξόδου και inout

ΗΥ220 - Βασίλης Παπαευσταθίου23 System Tasks and Functions Tasks and functions για έλεγχο της προσομοίωσης –Ξεκινούν με "$" (e.g., $monitor) –Standard – της γλώσσας Παράδειγμα system task: $display $display("format-string", expr1, …, exprn); format-string - regular ASCII mixed with formatting characters %d - decimal, %b - binary, %h - hex, %t - time, etc. other arguments: any expression, including wires and regs $display("Error at time %t: value is %h, expected %h", $time, actual_value, expected_value);

ΗΥ220 - Βασίλης Παπαευσταθίου24 Χρήσιμες System Tasks $time – τρέχον χρόνος προσομοίωσης $monitor – τυπώνει όταν αλλάζει τιμή ένα όρισμα ( 1 μόνο κάθε φορά νέες κλήσεις ακυρώνουν τις προηγούμενες ) $monitor("cs=%b, ns=%b", cs, ns) Έλεγχος προσομοίωσης –$stop - διακοπή simulation –$finish - τερματισμός simulation Υπάρχουν και συναρτήσεις για file I/O ( $fopen, $fclose, $fwrite … etc )

ΗΥ220 - Βασίλης Παπαευσταθίου25 Παράλληλα Blocks - fork / join Επιτρέπει την παράλληλη εκτέλεση ενός σειριακού block –Προσοχή στα race conditions Δεν υποστηρίζονται εύκολα στη σύνθεση Μπορούν να υπάρχουν nested Βασική δομή fork parallel-statement1; parallel-statement2; … join

ΗΥ220 - Βασίλης Παπαευσταθίου26 Sequential vs Parallel Blocks reg x,y; reg [1:0] z; initial begin fork x = 1’b0; // time 0 #5 y = 1’b1; // time 5 #10 z = {x,y};// time 10 join end reg x,y; reg [1:0] z; initial begin fork x = 1’b0; // time 0 #5 y = 1’b1; // time 5 #10 z = {x,y};// time 10 join end reg x,y; reg [1:0] z; initial begin x = 1’b0; // time 0 #5 y = 1’b1; // time 5 #10 z = {x,y};// time 15 end reg x,y; reg [1:0] z; initial begin x = 1’b0; // time 0 #5 y = 1’b1; // time 5 #10 z = {x,y};// time 15 end