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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

VHDL Introduction. Subtitle

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

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

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

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

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

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

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

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

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

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

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

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

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

ΚΕΦΑΛΑΙΟ Συνδυαστικά Κυκλώµατα. 3.2 Σχεδιασµός Συνδυαστικής Λογικής 3.3 ιαδικασία Ανάλυσης 3.4 ιαδικασία Σχεδιασµού.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο Τρία: Ψηφιακά Ηλεκτρονικά

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

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

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

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

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

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

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

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

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

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

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

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

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

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

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

242 -ΕισαγωγήστουςΗ/Υ

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

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

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

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

Transcript:

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

Η εξέλιξη στη σχεδίαση ψηφιακών κυκλωµάτων Μεγάλη εξέλιξη τα τελευταία 30 χρόνια Στις αρχές σχεδιάζαµε µε λυχνίες(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) Μία υψηλού επιπέδου γλώσσα που µπορεί να αναπαραστεί και να προσοµοιώνει ψηφιακά κυκλώµατα. Hardware concurrency Parallel Activity Flow Semantics for Signal Value and Time Παραδείγµατα σχεδίασης µε Verilog HDL Intel Pentium, AMD K5, K6, Athlon, ARM7, etc Thousands of ASIC designs using Verilog HDL Other HDL : VHDL,SystemC, SystemVerilog ΗΥ220 - Βασίλης Παπαευσταθίου 5

Αναπαράσταση Ψηφιακών Συστηµάτων H Verilog HDL χρησιµοποιείται για να φτιάξουµε το µοντέλο ενός συστήµατος. Λόγοι: Ορισµός Απαιτήσεων (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> <size> δείχνει τον αριθµό απο bits <base_format> µπορεί να είναι : d, h, b, o (default: d) Όταν το <size> λείπει το µέγεθος καθορίζεται από τον compiler Όταν το <number> έχει πολλα ψηφία µπορούµε νατο χωρίζουµε µε _ (underscore) όπου θέλουµε 100 // 100 4 b1111 // 15, 4 bits 6 h3a // 58, 6 bits 6 b111010 // 58, 6 bits 12 h13x // 304+x, 12 bits 8 b10_10_1110 // 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 module arith (out1, out2, in1, in2); output out1, out2; input in1, in2; out2 endmodule ΗΥ220 - Βασίλης Παπαευσταθίου 10

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

Modules vs Instances Instantiation είναι η διαδικασία δηµιουργίας αντικειµένου από το module. module module nand(out, nand(out, a, a, b,); b,); input input a, a, b; b; output output out; out; wire wire out out = ~ (a (a & b); b); endmodule endmodule ΗΥ220 - Βασίλης Παπαευσταθίου 12

Primitives Επίπεδο Πυλών and, nand, or, nor, xor, xnor, not, buf Παράδειγµα: and N25 (out, A, B) // instance name and #10 (out, A, B) // delay or #15 N33(out, A, B) // 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 module test(a, test(a, b,); b,); input input a;output a;output b; b; reg reg b; b; wire wire c; c; always always @(posedge a)begin a)begin b = #2 #2 a; a; end end always always @(negedge a) a) begin begin b = #2 #2 ~c; ~c; end end not not N1 N1 (c, (c, a) a) initial initial begin begin b = 0; 0; end end endmodule ΗΥ220 - Βασίλης Παπαευσταθίου 15

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

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

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

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

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

Αναθέσεις (Assignments) blocking = always @(posedge clk) begin a = b; c = a; // c παίρνει τιµή τουb end non blocking <= always @(posedge clk) begin a <= b; c <= a; // c παίρνει παλιά τιµή τουa end b b a a c c ΗΥ220 - Βασίλης Παπαευσταθίου 21

Assignments: Example time time 0 : a = #10 #10 b time time 10 10 : c = a a(t=10) = b(t=0) c(t=10) = a(t=10) = b(t=0) time time 0 : #10 #10 time time 10 10 : a = b time time 10 10 : c = a a(t=10) = b(t=10) c(t=10) = a(t=10) = b(t=10) time time 0 : a <= <= #10 #10 b time time 0 : c <= <= a a(t=10) = b(t=0) c(t=0) = a(t=0) ΗΥ220 - Βασίλης Παπαευσταθίου 22

Κανόνες Πορτών Module Τα input και inout έχουν τύπο wire µέσα στο module Ta 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 (out, in1, in2); output [1:0] out; input [1:0] in1, in2; endmodule ΗΥ220 - Βασίλης Παπαευσταθίου 25

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

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

Branch Statement Case Το γνωστό case Μόνο µεσα σε blocks! Μόνο σταθερές εκφράσεις εν υπάρχει break! Υπάρχει default! module mux mux (a (a, b, c, d, sel sel, out out ); ); input input [4:0] [4:0] a, a, b, b, c,d;,d; input input [1:0] [1:0] sel; sel; output [4:0] [4:0] out; out; reg reg [4:0] [4:0] out; out; always @(a @(a or or b or or c or or d or or sel sel ) begin begin case case (sel) (sel) 2 b00: out out <= <= a; a; 2 b01: out out <= <= b; b; 2 b10: out out <= <= c; c; 2 b11: out out <= <= d; d; default: out out <= <= 5 bx; 5 bx; endcase end 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 module adder(a, adder(a, b, b, sum, sum, cout); cout); module test; test; input input a, a, b; b; reg reg a, a, b; b; output output sum, sum, cout; cout; wire wire s, s, c; c; wire wire sum sum = a ^ b; b; adder adder add0(a, b, b, s, s, c); wire c); wire cout cout = a & b; b; endmodule initial begin endmodule begin a = 0; 0; b = 0; 0; #5 #5 $display("a: %x, %x, b: b: %x, %x, s: s: %x, %x, c: c: %x", %x", a, a, b, b, s, s, c); c); a = 1; 1; #5 #5 $display("a: %x, %x, b: b: %x, %x, s: s: %x, %x, c: c: %x", %x", a, a, b, b, s, s, c); c); b = 1; 1; #5 #5 $display("a: %x, %x, b: b: %x, %x, s: s: %x, %x, c: c: %x", %x", a, a, b, b, s, s, c); c); a = 0; 0; #5 #5 $display("a: %x, %x, b: b: %x, %x, s: s: %x, %x, c: c: %x", %x", a, a, b, b, s, s, c); c); end end endmodule ΗΥ220 - Βασίλης Παπαευσταθίου 34

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

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

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