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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

«Σχεδιασμός Ψηφιακών Συστημάτων σε FPGA» Εαρινό εξάμηνο

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

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

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

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

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

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

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

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

VHDL Introduction. Subtitle

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

H γλώσσα περιγραφής κυκλωµάτων VHDL

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

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

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

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

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

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

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

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

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

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

Σχεδίαση Υπολογιστικών

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

1 Περίληψη Η εργασία έγινε στα πλαίσια του μαθήματος των Ψηφιακών Ηλεκτρονικών Συστημάτων με σκοπό αρχικά την εκμάθηση της γλώσσας VHDL (Very High Spe

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

«Σχεδιασμός Ψηφιακών Συστημάτων σε FPGA» Εαρινό εξάμηνο

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

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

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

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

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

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

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

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

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

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

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

Πτυχιακή Εργασία. Σχεδίαση Εφαρμογών Ψηφιακών Συστημάτων Με Τη Γλώσσα VHDL

ΑΣΚΗΣΗ 2: Σχεδίαση και προσομοίωση κυκλωμάτων καταχωρητών και μετρητών

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

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

Οι Διδάσκοντες. Αντώνης Πασχάλης, Καθηγητής, Θεωρία. Χρήστος Κρανιώτης, ΕEΔΙΠ, Εργαστήριο

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

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

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

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

Εισαγωγή στη VHDL Υλοποίηση στο Quartus

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

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

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

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

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

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

Structural VHDL. Structural VHDL

Ψηφιακή Σχεδίαση Ενότητα 10:

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

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

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

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

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

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

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

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

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

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

Μικροηλεκτρονική - VLSI

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

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

ΗΥ 232 Οργάνωση και στον Σχεδίαση Η/Y. Διάλεξη 8. Concepts of Digital Design Introduction to Verilog

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Συναρτήσεις, Διαδικασίες και Δομές Ελέγχου Λειτουργίας Κυκλωμάτων (testbenches)

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

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

Transcript:

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

Η εξέλιξη στη σχεδίαση ψηφιακών κυκλωμάτων Μεγάλη εξέλιξη τα τελευταία 40 χρόνια Στις αρχές σχεδιάζαμε με λυχνίες(vacuum tubes) και transistors. Μετά ήρθαν τα ολοκληρωμένα ( Integrated Circuits ICs) SSI: λίγες πύλες ( Small Scale Integration) MSI: εκατοντάδες πύλες ( Medium Scale Integration) LSI: χιλιάδες πύλες ( Large Scale Integration) VLSI: πολλά εκατομμύρια πύλες ( Very Large Scale Integration) Ανάγκη για τεχνικές Computer Aided Design (CAD) και γλώσσες περιγραφής υλικού για να μπορούμε να σχεδιάζουμε και να επαληθεύουμε τα κυκλώματα. ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 2

Τυπική Ροή Σχεδίασης (Design Flow) Requirements RTL Model Simulate Synthesis Gate-level Model Simulate Test Bench ASIC or FPGA Place & Route Timing Model Simulate ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 3

Ιεραρχικές Μεθοδολογίες Σχεδίασης Top-Down ή Bottom-Up Συνήθως μια μίξη Το τελικό σύστημα αποτελείται από τα Leaf blocks που τρέχουν παράλληλα. ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 4

Τι είναι η Verilog; Verilog Hardware Description Language (HDL) Μία υψηλού επιπέδου γλώσσα που μπορεί να αναπαριστά και να προσομοιώνει ψηφιακά κυκλώματα. o Hardware concurrency o Parallel Activity Flow o Semantics for Signal Value and Time Παραδείγματα σχεδίασης με Verilog HDL o Intel Pentium, AMD K5, K6, Athlon, ARM7, etc. o Thousands of ASIC designs using Verilog HDL Other HDL : VHDL, SystemC, SystemVerilog ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 5

Αναπαράσταση Ψηφιακών Συστημάτων H Verilog χρησιμοποιείται για να φτιάξουμε το μοντέλο ενός συστήματος. Διαδικασία: Ορισμός Απαιτήσεων (requirements specification) Documentation Έλεγχος μέσω προσομoίωσης (simulation) Λειτουργική Επαλήθευση (formal verification) Μπορούμε να το συνθέσουμε! Στόχος: Αξιόπιστη σχεδίαση με χαμηλές απαιτήσεις κόστους και χρόνου Αποφυγή και πρόληψη λαθών σχεδίασης ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 6

Συμβάσεις στην γλώσσα Verilog Η Verilog είναι case sensitive. Λέξεις κλειδιά είναι σε μικρά. Σχόλια Για μία γραμμή είναι // Για πολλές /* */ Βασικές τιμές 1-bit σημάτων 0: λογική τιμή 0. 1: λογική τιμή 1 x: άγνωστη τιμή z: ασύνδετο σήμα, high impedance ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 7

Αριθμοί Αναπαράσταση αριθμών <size> <base_format> <number> o <size> δείχνει τον αριθμό απο bits o <base_format> μπορεί να είναι : d, h, b, o (default: d) Όταν το <size> λείπει το μέγεθος καθορίζεται από τον compiler Όταν το <number> έχει πολλά ψηφία μπορούμε να το χωρίζουμε με _ (underscore) όπου θέλουμε 100 // 100 4 b1111 6 h3a 6 b111010 12 h13x 8 b10_10_1110 // 15, 4 bits // 58, 6 bits // 58, 6 bits // 304+x, 12 bits // 174, 8 bits ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 8

Τελεστές (Operators) Arithmetic + - * / % Logical! && Relational < > <= >= Equality ==!= Bit-wise ~ & ^ Reduction & ^ (εφαρμόζεται σε έναν τελεστέο) Shift << >> Concatenation/Replication {A,B, } {4{A}} (πολλούς τελεστέους) Conditional x? y : z (3 τελεστέους) ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 9

Βασικό Block: Module in1 in2 arith out1 out2 module arith (out1, out2, in1, in2); output out1, out2; input in1, in2; endmodule ή module arith ( output out1, output out2, input in1, input in2); endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 10

Πόρτες ενός Module in1 in2 in3 arith1 bi_out out module arith1 ( inout bi_out, output out, input in1, input in2, input in3); endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 11

Modules vs Instances Instantiation είναι η διαδικασία δημιουργίας αντικειμένου από το module. module nand(input a, input b, output out); assign out = ~ (a & b); endmodule module SRLATCH(input Sbar, input Rbar, output Q, output Qbar); //Instantiate lower-level modules nand n1 (Sbar, Qbar, Q) nand n2 (Q, Rbar, Qbar) endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 12

Primitives Επίπεδο Πυλών and, nand, or, nor, xor, xnor, not, buf Παράδειγμα: and N25 (out, A, B) and #10 (out, A, B) or #15 N33(out, A, B) // instance name // delay // name + delay ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 13

Χρόνος Προσομοίωσης `timescale <time_unit>/<time_precision> time_unit: μονάδα μέτρησης χρόνου time_precision: ελάχιστο χρόνο βήματα κατά την προσομοίωση. Μονάδες χρόνου: s, ms, us, ns, ps, fs #<time> : αναμονή για χρόνο <time> #5 a=8 h1a @ ( <σήμα> ): αναμονή μέχρι το σήμα να αλλάξει τιμή (event) @ (posedge clk) @ (negedge clk) @ (a) @ (a or b or c) // θετική ακμή // αρνητική ακμή ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 14

Module Body declarations always blocks: Μπορεί να περιέχει πάνω από ένα initial block: Μπορεί να περιέχει ένα ή κανένα. modules/primitives instantiations module test( input a, output reg b); wire c; always @(posedge a) begin b = #2 a; end always @(negedge a) begin b = #2 ~c; end not N1 (c, a) initial begin b = 0; end endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 15

Τύποι μεταβλητών στην Verilog integer wire reg tri // αριθμός // καλώδιο σύρμα // register // tristate ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 16

Wires Συνδυαστική λογική (δεν έχει μνήμη) Γράφος εξαρτήσεων Μπορεί να περιγράψει και ιδιαίτερα πολύπλοκη λογική wire sum = a ^ b; wire c = sum b; wire a = ~d; wire sum;... assign sum = a ^ b; wire muxout = (sel == 1)? a : b; wire op = ~(a & ((b)? ~c : d) ^ (~e)); ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 17

Σύρματα και συνδυαστική λογική module endmodule Δήλωση εισόδων - εξόδων Concurrent statements module adder(input a, input b, output sum, output cout); assign sum = a ^ b; assign cout = a & b; endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 18

Regs και ακολουθιακή λογική Στοιχεία μνήμης κάτι ανάλογο με μεταβλητές στη C Μόνο regs (οχι wires) παίρνουν τιμή σε initial και always blocks. Χρήση των begin και end για grouping πολλών προτάσεων Όπου χρησιμοποιούμε reg δεν σημαίνει οτι θα συμπεριφέρεται σαν καταχωρητής (register)!!! reg q; always @(posedge clk) begin q = #2 (load)? d : q; end reg a; initial begin a = 0; #5; a = 1; end ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 19

Regs και συνδυαστική λογική Αν η συνάρτηση F() είναι πολύπλοκη τότε: in1 in2 in3 Συνδιαστική Λογική F() out reg out; always @(in1 or in2 or in3) out = f(in1,in2,in3); reg out; Ισοδύναμα always @(in1 or in2 or in3) out = in1 (in2 & in3); wire out = in1 (in2 & in3); ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 20

Αναθέσεις (assignments) blocking = always @(posedge clk) begin a = b; c = a; // c παίρνει τιμή του b End b a c non blocking <= always @(posedge clk) begin a <= b; c <= a; // c παίρνει παλιά τιμή του a end b a c ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 21

Assignments: Example time 0 : a = #10 b time 10 : c = a a(t=10) = b(t=0) c(t=10) = a(t=10) = b(t=0) time 0 : #10 time 10 : a = b time 10 : c = a a(t=10) = b(t=10) c(t=10) = a(t=10) = b(t=10) time 0 : a <= #10 b time 0 : c <= a a(t=10) = b(t=0) c(t=0) = a(t=0) ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 22

Κανόνες Πορτών Module Τα input και inout έχουν τύπο wire μέσα στο module Τα outputs μπορεί να έχουν τύπο wire ή reg ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 23

Συνδέσεις μεταξύ Instances Με βάση την θέση module adder(sum, In1, In2) adder (A, B, C) // Sum = A, In1 = B, In2 = C Συσχετίζοντας ονόματα (το καλύτερο) module adder(sum, In1, In2) adder (.In2(B),.In1(A),.Sum(C)) // Sum = C, In1 = A, In2 = B ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 24

Buses (1/2) in1[1:0] in1[1] in1[0] in2[1:0] in2[1] in2[0] arith2 out[0] out[1:0] out[1] module arith2 ( output [1:0] out, input [1:0] in1, input [1:0] in2); endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 25

Buses (2/2) Καμία διαφορά στη συμπεριφορά Συμβάσεις: [high : low] [msb : lsb] Προσοχή στις αναθέσεις (μήκη) και τις συνδέσεις εκτός του module module adder( input [7:0] a, input [7:0] b, output [7:0] sum, output cout); wire [8:0] tmp = a + b; wire [7:0] sum = tmp[7:0]; wire cout = tmp[8]; endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 26

Conditional Statements If Else Το γνωστό if else Μόνο μεσα σε blocks! Επιτρέπονται πολλαπλά και nested ifs Πολλά εlse if... Αν υπάρχει μόνο 1 πρόταση δεν χρειάζεται begin end module mux( input [4:0] a, input [4:0] b, input sel, output reg [4:0] out); always @(a or b or sel) begin if ( sel == 0 ) begin out <= a; end else out <= b; end endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 27

Branch Statement Case Το γνωστό case Μόνο μεσα σε blocks! Μόνο σταθερές εκφράσεις Δεν υπάρχει break! Υπάρχει default! module mux ( input [4:0] a, input [4:0] b, input [4:0] c, input [4:0] d, input [1:0] sel, output reg [4:0] out); always @(a or b or c or d or sel) begin case (sel) 2 b00: out <= a; 2 b01: out <= b; 2 b10: out <= c; 2 b11: out <= d; default: out <= 5 bx; endcase end endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 28

Επίπεδα Αφαίρεσης Κώδικα Η λειτουργία ένος module μπορεί να οριστεί με διάφορους τρόπους Behavioral (επίπεδο πιο κοντά στην λογική) Παρόμοια με την C ο κώδικας δεν έχει άμεση σχέση με το hardware. wire a = b + c Gate level/structural (επίπεδο κοντά στο hardware) Ο κώδικας δείχνει πως πραγματικά υλοποιείται σε πύλες η λογική. wire sum = a ^ b; wire cout = a & b; ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 29

Συνθέσιμος Κώδικας Ο Synthesizable κώδικας μπορεί να γίνει synthesize και να πάρουμε gate-level μοντέλο για ASIC/FPGA. wire [7:0] sum = tmp[7:0] & {8{a}}; wire cout = tmp[8]; Non-synthesizable κώδικας χρησιμοποιείται μόνο για προσομοίωση και αγνοείται (συνήθως) κατά την διαδικασία της σύνθεσης (logic synthesis). initial begin a = 0; b = 0; #5 a = 1; b = 1; end ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 30

Χρήση Καθυστέρησης στην Verilog Λειτουργική Επαλήθευση - Functional Verification (RTL Model) Η καθυστέρηση είναι προσεγγιστική. Π.χ. always @(posedge clk) q <= #2 d; // FF µε 2 µονάδες καθυστέρηση Συνήθως θεωρούμε ότι η συνδυαστική λογική δεν έχει καθυστέρηση π.χ. wire a = (b & c) d; // µόνο την λειτουργία όχι καθυστέρηση πυλών Η καθυστέρηση χρησιμοποιείται κυρίως στο testbench κώδικα για να φτιάξουμε τα inputs. Χρονική Επαλήθευση - Timing Verification Αναλυτικά κάθε πύλη έχει καθυστέρηση. Συνήθως κάνουμε timing verification σε gate-level model το οποίο φτιάχνεται από ένα synthesis tool. ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 31

Testing Ιεραρχικός Έλεγχος Κάθε module ξεχωριστά Block level simulation Έλεγχος των προδιαγραφών, της λειτουργίας και των χρονισμών των σημάτων Όλο το design μαζί (System level simulation) Έλεγχος της συνολικής λειτουργίας και των διεπαφών ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 32

Έλεγχος σωστής λειτουργίας Testbench: top module που κάνει instantiate το module που τεστάρουμε, δημιουργεί τις τιμές των εισόδων του (stimulus) και ελέγχει ότι οι έξοδοί του παίρνουν σωστές τιμές. 2 προσεγγίσεις : Έλεγχος εξόδων και χρονισμού με το μάτι Έλεγχος εξόδων και χρονισμού μέσω κώδικα δηλαδη αυτόματη σύγκριση των αναμενόμενων εξόδων. ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 33

Ένα απλό «test bench» module test; reg a, b; wire s, c; adder add0(a, b, s, c); module adder(input a, input b, output sum, output cout); assign sum = a ^ b; assign cout = a & b; endmodule initial begin a = 0; b = 0; #5 $display("a: %x, b: %x, s: %x, c: %x", a, b, s, c); a = 1; #5 $display("a: %x, b: %x, s: %x, c: %x", a, b, s, c); b = 1; #5 $display("a: %x, b: %x, s: %x, c: %x", a, b, s, c); a = 0; #5 $display("a: %x, b: %x, s: %x, c: %x", a, b, s, c); end endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 34

Μετρητής 8 bits (1/3) module counter( input clk, input reset, output reg [7:0] out); wire [7:0] next_value = out + 1; always @(posedge clk) begin if (reset) out = #2 8 b0; else out = #2 next_value;! end module clk( output reg out); initial out = 1 b0; always out = #10 ~out; endmodule endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 35

Μετρητής 8 bits (2/3) module test; wire clk; reg reset; wire [7:0] count; clock clk0(clk); counter cnt0(clk, reset, count);! initial begin reset = 1; @(posedge clk); @(posedge clk); reset = #2 0; @(posedge clk); #300; $stop; end endmodule ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 36

Μετρητής 8 bits (3/3) counter.v clock.v test.v clk reset count 00 01 02 03 04 05 06 ΗΥ220 - Βασίλης Παπαευσταθίου & Γιώργος Καλοκαιρινός 37