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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΑΡΑΡΤΗΜΑ Β. Verification

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

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

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

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

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

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

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

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

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

Εισαγωγή στη Verilog με το ISE

ΗΥ-150. Προγραμματισμός

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

ΗΥ-150. Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

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

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Ακολουθιακές εντολές. (Peter Ashenden, The Students Guide to VHDL)

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

Εισαγωγή στον Προγραμματισμό

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

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

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

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

Κεφάλαιο 7: Υπορουτίνες

Προγραμματισμό για ΗΜΥ

ΚΑΣΣΙΑΝΟΣ ΜΕΛΑΝΙΤΗΣ. Αποκωδικοποιητής ΛΟΓΙΚΗ ΣΧΕΔΙΑΣΗ. Αναφορά 8 ης εργαστηριακής άσκησης: Α.Μ.:

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

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

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

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

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

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

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

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Δομημένος Προγραμματισμός (ΤΛ1006)

HY220 Pipelines and FSMs Χειμεριν Χειμερι ό Εξ άμη Εξ ν άμη ο

Library, package και subprograms

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

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

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

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

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

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

Μοντελοποίηση Επιπέδου Πύλης. (Peter Ashenden, The Students Guide to VHDL)

Κεφάλαιο : Επαναλήψεις (for, do-while)

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

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Υπολογισμός - Εντολές Επανάληψης

Προγραμματισμός Η/Υ (ΤΛ2007 )

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

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

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

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

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

Προγραμματισμός Ι (HY120)

Transcript:

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

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

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

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

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

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 του τρέχοντος χρόνου always @(posedge clk) clk) a = b; b; always @(posedge clk) clk) b = a; a; Swap? always @(posedge clk) clk) a <= <= b; b; always @(posedge clk) clk) b <= <= a; a; ΗΥ220 - Βασίλης Παπαευσταθίου 6

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 - Βασίλης Παπαευσταθίου 7

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

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

Τιµές σηµάτων Four-valued logic 0 ή 1 Ζ Έξοδος τρικατάστατου οδηγητή Καλώδιο χωρίς ανάθεση X Αρχική τιµή των regs Έξοδος πύλης µε είσοδο/ους Ζ Ταυτόχρονη ανάθεση 0 και 1 από δύο ή περισσότερες πηγές (multi-source logic) [πηγή = always block] Προσοχή στην αρχικοποίηση (regs) initial...... always @(posedge clk) clk) if if (reset)...... else else...... 0 1 X Z 0 0 0 0 0 1 0 1 X X X 0 X X X Z 0 X X X ΗΥ220 - Βασίλης Παπαευσταθίου 10

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

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

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

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

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

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

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

Συναρτήσεις - 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 - Βασίλης Παπαευσταθίου 18

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

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 end endtask ΗΥ220 - Βασίλης Παπαευσταθίου 20

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

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

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 - Βασίλης Παπαευσταθίου 23

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

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

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