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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

VHDL Introduction. Subtitle

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

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

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

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

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

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

«Σχεδιασμός Ψηφιακών Συστημάτων σε FPGA» Εαρινό εξάμηνο Διάλεξη 8 η : Μηχανές Πεπερασμένων Κaταστάσεων σε FPGAs

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

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

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

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

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

Ενότητα ΑΡΧΕΣ ΑΚΟΛΟΥΘΙΑΚΗΣ ΛΟΓΙΚΗΣ LATCHES & FLIP-FLOPS

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

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

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

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

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

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

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

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

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

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

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

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

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

Ελίνα Μακρή

Πανεπιστήμιο Πατρών Τμήμα Φυσικής Εργαστήριο Ηλεκτρονικής. Ψηφιακά Ηλεκτρονικά. Ακολουθιακή Λογική. Επιμέλεια Διαφανειών: Δ.

HY330 Ψηφιακά Κυκλώματα - Εισαγωγή στα Συστήματα VLSI. 1 ΗΥ330 - Διάλεξη 7η - Ακολουθιακά Κυκλώματα

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

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

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

Κεφάλαιο 7 ο. Γ. Τσιατούχας. VLSI Technology and Computer Architecture Lab. Ακολουθιακή Λογική 2

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

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

ΗΜΥ 210: Σχεδιασμό Ψηφιακών Συστημάτων, Χειμερινό Εξάμηνο 2008

Xρονισμός ψηφιακών κυκλωμάτων

Χρονισμός Σύγχρονων Κυκλωμάτων, Καταχωρητές και Μανταλωτές. Χειμερινό Εξάμηνο

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

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

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

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

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

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

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

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

Κεφάλαιο 10 ο. Γ. Τσιατούχας. VLSI Systems and Computer Architecture Lab. Ακολουθιακή Λογική 2

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

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

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

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

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

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

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

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

Σχεδίαση CMOS Ψηφιακών Ολοκληρωμένων Κυκλωμάτων

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

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

Καταχωρητες (Registers) Μετρητες (Counters)

Transcript:

ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωμάτων Εισαγωγή στη Verilog Χειμερινό Εξάμηνο 2009 2010

Hardware vs Software Γιατί να σχεδιάζουμε σε Hardware? Γρήγορη εκτέλεση (~10x) Χαμηλή κατανάλωση ισχύος (~10x) αλλά πολύ δυσκολότερο να σχεδιάζουμε σε HW (cycle accurate) και υψηλό κόστος Univeristy of Crete ΗΥ220 2

Η εξέλιξη ξηστη σχεδίαση ψηφιακών κυκλωμάτων Μεγάλη εξέλιξη τα τελευταία 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) και γλώσσες περιγραφής υλικού για να μπορούμε μ να σχεδιάζουμε και να επαληθεύουμε τα κυκλώματα. Univeristy of Crete ΗΥ220 3

Intel l8086 Processor 1978 29.000 transistors t 5 MHz operation 4 Univeristy of Crete ΗΥ220

Cell Processor, PS3 2008 9 Processors 234M transistors (~10.000 i8086) Clock speed: 4GHz 230 GFlops 5 Univeristy of Crete ΗΥ220

Transistor Counts 1,000,000 K 1 Billion Transistors 100,000 10,000 1,000 Pentium 100 10 8086 i386 80286 Pentium III Pentium II Pentium Pro i486 Pentium Source: Intel 1 1975 1980 1985 1990 1995 2000 2005 2010 Projected Univeristy of Crete ΗΥ220 6

Productivity Trends 10,000,000 Co omplexity Lo ogic Transi stor per Ch hip (M M) 10,000 1,000 1,000,000 100,000 100 10,000 1,000 10 100 1 0.1 0.01 10 Logic Tr./Chip Tr./Staff Month. x x x x x x x x 58%/Yr. compounded Complexity growth rate 21%/Yr. compound Productivity growth rate 100,000 100,000,000 10,000 10,000,000 1,000 1,000,000 100 100,000 10 10,000 1 1,000 0.1 100 Prod ductivity (K) Trans../Staff Mo o. 0.001 1 0.01 10 1981 1983 1985 1987 1989 1991 1993 1995 1997 1999 2001 2003 2005 2007 2009 Source: Sematech Complexity outpaces design productivity Courtesy, ITRS Roadmap Univeristy of Crete ΗΥ220 7

Requirements Τυπική Ροή Σχεδίασης (Design Flow) Verilog, VHDL Simulate Synthesis Gate level Model Simulate Test Bench ASIC or FPGA Place & Route Timing Model Simulate Univeristy of Crete ΗΥ220 8

Ιεραρχικές Μεθοδολογίες Σχεδίασης Top Down ή Bottom Up Συνήθως μια μίξη Τελικό σύστημα αποτελείται από τα Leaf blocks που τρέχουν όλα παράλληλα. Univeristy of Crete ΗΥ220 9

Τι είναι η 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 Univeristy of Crete ΗΥ220 10

Design Abstraction Levels SYSTEM Matlab, SystemC, SystemVerilog + MODULE GATE Verilog, VHDL CIRCUIT S n+ G DEVICE n+ D VLSI Univeristy of Crete ΗΥ220 11

Transistor Counts 1,000,000 K 1 Billion Transistors 100,000 10,000 1,000 Pentium 100 10 8086 Discrete i386 80286 Pentium III Pentium II Pentium Pro i486 Pentium Verilog,VHDL 1 1975 1980 1985 1990 1995 2000 2005 2010 Projected SystemC Source: Intel Univeristy of Crete ΗΥ220 12

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

NAND: Dtfl Dataflow Module module nand(a, b, f); a b g1 t NAND g2 f input a, b; output f; endmodule Univeristy of Crete ΗΥ220 14

NAND: Dtfl Dataflow Module module nand(a, b, f); a b g1 t g2 f input a, b; output f; endmodule Univeristy of Crete ΗΥ220 15

NAND: Dtfl Dataflow Module module nand(a, b, f); a b g1 t g2 f input a, b; output f; wire t; assign t = a & b; assign f = ~t; endmodule Univeristy of Crete ΗΥ220 16

Mux: Dtfl Dataflow Module module sel(a, b, sel, f); a b f input a, b, sel; output f; endmodule sel a b sel f x y 0 x x y 1 y Univeristy of Crete ΗΥ220 17

Mux: Bh Behavioral lmodule module sel(a, b, sel, f); a b sel f input a, b, sel; output f; reg f; always @(sel or a or b) begin a b sel f end endmodule x y 0 x x y 1 y Univeristy of Crete ΗΥ220 18

Mux: Bh Behavioral lmodule module sel(a, b, sel, f); a f b sel a b sel f x y 0 x x y 1 y input a, b, sel; output f; reg f; always @(sel or a or b) begin if (sel==0) f <= a; else f <= b; end endmodule Univeristy of Crete ΗΥ220 19

Μανταλωτής D (D Latch) Lth) Στοιχείο μνήμης (Flip Flop) Latch D Q Data and Load inputs Πίνακας Αληθείας (Data) D Ld Q Q Ld (Load) 0 0 Q t-1 Q t-1 0 1 0 1 1 0 Q t-1 Q t-1 1 1 1 0 Q Univeristy of Crete ΗΥ220 20

Lth Latches: Bh Behavioral lmodule module latch(d, g, q); input d, g; output q; reg q; D G Q x 0 Q endmodule G 0 1 0 1 1 1 Univeristy of Crete ΗΥ220 21

Lth Latches: Bh Behavioral lmodule D G Q x 0 Q module latch(d, g, q); input d, g; output q; reg q; always @(g or d) begin if (g) q = d; end 0 1 0 endmodule 1 1 1 Univeristy of Crete ΗΥ220 22

Lth Latches with CLR: Bh Behavioral lmodule module latch(d, g, clr, q); input d, g, clr; output q; reg q; D G CLR Q endmodule x x 1 0 0 1 0 0 1 1 0 1 Univeristy of Crete ΗΥ220 23

Lth Latches with CLR: Bh Behavioral lmodule module latch(d, g, clr, q); input d, g, clr; output q; reg q; D G CLR Q x x 1 0 0 1 0 0 1 1 0 1 always @(g or d or clr) begin if (clr) q = 1'b0; else if (g) q = d; end endmodule Univeristy of Crete ΗΥ220 24

Ακμοπυροδότητο D Flip Flop Στοιχείο μνήμης (Flip Flop) D Flip Flop D Q Master Slave Latches Εσωτερικά Ακμοπυροδότητο (edge triggered) Το πιο ευρέως χρησιμοποιούμενο Data and Clock inputs Αποθηκεύει την τιμή του D μόνο κατά την ακμή του ρολογιού (συνήθως τη θετική) Q t+1 = D t Απαιτεί χρόνο αποκατάστασης (Setup) και συγκράτησης (Hold) των δεδομένων εισόδου Clk (Clock) Η λέξη Flip Flop είναι ταυτισμένη με το aκμοπυροδότητο D Flip Flop Univeristy of Crete ΗΥ220 25

DFF: Behavioral Bh lmodule module dff(d, clk, q); input d, clk; output q; reg q; C CLK Q endmodule 0 0 1 1 Univeristy of Crete ΗΥ220 26

DFF: Behavioral Bh lmodule module dff(d, clk, q); input d, clk; output q; reg q; D CLK Q always @(posedge clk) 0 0 begin q <= d; 1 1 end endmodule Univeristy of Crete ΗΥ220 27

DFF with SET: Bh Behavioral lmodule module dff(d, clk, s, q); input d, clk, s; output q; d clk S q x 1 1 0 0 0 1 0 1 endmodule Univeristy of Crete ΗΥ220 28

DFF with SET: Bh Behavioral lmodule module dff(d, clk, s, q); input d, clk, s; output q; reg q; d clk S q always @(posedge clk) begin x 1 1 if (s) q <= 1'b1; 0 0 0 else q <= d; 1 0 1 end endmodule Univeristy of Crete ΗΥ220 29

Counters: Behavioral Bh lmodule module counters (CLK, CLR, Q); input CLK, CLR; output [3:0] Q; reg [3:0] tmp; CLR CLK Q X 0000 0 Q+1 endmodule Univeristy of Crete ΗΥ220 30

Counters: Behavioral Bh lmodule module counters (CLK, CLR, Q); input CLK, CLR; output [3:0] Q; reg [3:0] tmp; CLR CLK Q always @(posedge CLK or posedge CLR) begin if (CLR) tmp <= 4'b0000; else X 0000 tmp <= tmp + 1'b1; 0 Q+1 end end assign Q = tmp; endmodule Univeristy of Crete ΗΥ220 31

Βασικό όblock: Module module and_ff(a, b, f); a b input a, b; t g1 g2 f output f; endmodule Univeristy of Crete ΗΥ220 32

Βασικό όblock: Module module nand(a, b, q, clk); a b clk g1 t D SET g2 CLR Q Q q input a, b, clk; output q; wire t; and g1(a, b, t), d_ ff g2(t, clk, q); endmodule Univeristy of Crete ΗΥ220 33

Πόρτες ενός 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 Univeristy of Crete ΗΥ220 34

Modules vs Instances Instantiation είναι η διαδικασία δημιουργίας αντικειμένου από το module. module nand(out, a, b,); input a, b; output out; wire out = ~ (a & b); endmodule Univeristy of Crete ΗΥ220 35

Pi Primitivesiti Επίπεδο Πυλών 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 Univeristy of Crete ΗΥ220 36

Verilog Modeling Structural Για να συνδέουμε τα modules e.g. counter counter_1( clk, enable, count_out); Dataflow όταν χρησιμοποιούμε βασικές πύλες e.g. wire = (a & b) (c & d); Behavioral or Procedural procedural calls e.g. always @(posedge clk) begin end Univeristy of Crete ΗΥ220 37

Verilog Modeling Synthesizable vs Not Synthesizable e.g. a <= #10 b + 1; RTL (Register Transfer Level) όταν η σχεδίαση γίνεται σε επίπεδο registers Univeristy of Crete ΗΥ220 38

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

Αναπαράσταση αριθμών Αριθμοί <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 Univeristy of Crete ΗΥ220 40

Τελεστές (Operators) Arithmetic + * / % Logical! && Rl Relational l < > <= >= Equality ==!= Bit wise ~ & ^ ^~ (ή ~^) Reduction & ~& ~ ^ ^~(ή ~^) Shift << >> Concatenation/Replication {A,B, } {4{A}} (πολλούς τελεστέους) Conditional * Εφαρμόζεται μόνο σε έναν τελεστέο x? y : z (3 τελεστέους) Univeristy of Crete ΗΥ220 41

Τελεστές (Operators) Arithmetic + * / % Logical! && ΠΡΟΣΟΧΗ Rl Relational l < > <= >= λ ί Equality ==!= Bit wise ~ & ^ ^~ (ή ~^) Reduction & ~& ~ ^ ^~(ή ~^) Shift << >> Concatenation/Replication {A,B, } {4{A}} (πολλούς τελεστέους) Conditional * Εφαρμόζεται μόνο σε έναν τελεστέο x? y : z (3 τελεστέους) στην υλοποίηση Univeristy of Crete ΗΥ220 42

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

Module Body declarations always blocks: Μπορεί να περιέχει πάνω από όένα initial block: Μπορεί να περιέχει ένα ή κανένα. modules/primitives instantiations module test(a, b,); input a;output b; 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 Univeristy of Crete ΗΥ220 44

Τύποι μεταβλητών στην Verilog integer wire reg tri // αριθμός // καλώδιο σύρμα // register // tristate Univeristy of Crete ΗΥ220 45

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)); Univeristy of Crete ΗΥ220 46

Σύρματα και συνδυαστική λογική module endmodule d Δήλωση εισόδων εξόδων Concurrent statements module adder(a, b, sum, cout); input a, b; output sum, cout; wire sum = a ^ b; wire cout = a & b; endmodule Univeristy of Crete ΗΥ220 47

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

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); Univeristy of Crete ΗΥ220 49

Αναθέσεις (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 Univeristy of Crete ΗΥ220 50

Αναθέσεις (Assignments) blocking = (η σειρα εχει σημασια!) always @( posedge clk) begin Z=Y; Y=X; y=x; z=y; non blocking <= η σειρα ΔΕΝ εχει σημασια always @(posedge clk) begin a <= b; c <= a; // c παίρνει παλιά τιμή του a end b a c Univeristy of Crete ΗΥ220 51

Αναθέσεις (Assignments) blocking = η σειρα εχει σημασια! always @( posedge clk) begin Z=Y; Y=X; // shift register y=x; z=y; //parallel ff. non blocking <= η σειρα ΔΕΝ εχει σημασια! always @(posedge clk) begin a <= b; c <= a; // c παίρνει παλιά τιμή του a end b a c Univeristy of Crete ΗΥ220 52

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) Univeristy of Crete ΗΥ220 53

Κανόνες Πορτών Module Τα input και inout έχουν τύπο wire μέσα στο module Ta outputs μπορεί να έχουν τύπο wire ή reg Univeristy of Crete ΗΥ220 54

Συνδέσεις μεταξύ ξύ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 Univeristy of Crete ΗΥ220 55

Buses (1/2) in1[1:0] in2[1:0] in1[1] in1[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 Univeristy of Crete ΗΥ220 56

Καμία διαφορά στη συμπεριφορά Συμβάσεις: [high : low] [msb : lsb] Προσοχή στις αναθέσεις (μήκη) και τις συνδέσεις εκτός του module Buses (2/2) module adder(a, b, sum, cout); input [7:0] a, 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 Univeristy of Crete ΗΥ220 57

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

Case Statementt t Το γνωστό case Μόνο μεσα σε blocks! Μόνο σταθερές εκφράσεις Δεν υπάρχει break! Υπάρχει default! module mux (a, b, c, d, sel, out ); input [4:0] a, b, c,d; input [1:0] sel; output [4:0] out; 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 Univeristy of Crete ΗΥ220 59

Συνθέσιμος Κώδικας Ο 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 Univeristy of Crete ΗΥ220 60

Χρήση Καθυστέρησης στην 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. Univeristy of Crete ΗΥ220 61

Ιεραρχικός Έλεγχος Κάθε module ξεχωριστά Block level simulation Testing Έλεγχος των προδιαγραφών, της λειτουργίας και των χρονισμών των σημάτων Όλο το design μαζί System level simulation Έλεγχος της συνολικής λειτουργίας και των διεπαφών Univeristy of Crete ΗΥ220 62

Έλεγχος σωστής λειτουργίας Testbench : top module που κάνει instantiate το module που τεστάρουμε, δημιουργεί τις τιμές των εισόδων του (stimulus) και ελέγχει ότι οι έξοδοί του παίρνουν σωστές τιμές. 2 προσεγγίσεις : Έλεγχος εξόδων και χρονισμού με το μάτι Έλεγχος εξόδων και χρονισμού μέσω κώδικα δλδ. αυτόματη σύγκριση των αναμενόμενων εξόδων. Univeristy of Crete ΗΥ220 63

Ένα απλό «test tbench» module tb_half_add; add; reg a, b; wire s, c; module half_add(a, b, sum, cout); input a, b; output sum, cout; half_add add0(a, b, s, c); wire sum = a ^ b; wire cout = a & b; initial begin endmodule 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: 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 Univeristy of Crete ΗΥ220 64

Simulator Univeristy of Crete ΗΥ220 65

Simulator Univeristy of Crete ΗΥ220 66

Μετρητής 8 bits (1/3) module counter(clk, reset, out); input clk, reset; output [7:0] out; wire [7:0] next_ value = out + 1; reg [7:0] out; always @(posedge clk) begin if (reset) out = #2 8 b0; else out = #2 next_value; end module clοck(out); output out; reg out; initial out = 1 b0; always out = #10 ~out; endmodule endmodule Univeristy of Crete ΗΥ220 67

Μετρητής 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 g clk); @(posedge clk); reset = #2 0; @(posedge clk); #300; $stop; end endmodule Univeristy of Crete ΗΥ220 68

Μετρητής 8 bits (3/3) clk reset count 00 01 02 03 04 05 06 counter.v clock.v test.vt Univeristy of Crete ΗΥ220 69

Backup slides Univeristy of Crete ΗΥ220 70

Mux: Dtfl Dataflow Module Module sel(a, b, sel, f); input a, b, sel; output f; endmodule a b sel f x y 0 x x y 1 y Univeristy of Crete ΗΥ220 71

Mux: Dtfl Dataflow Module Module sel(a, b, sel, f); input a, b, sel; output f; wire nsel, f1, f2; assign nsel = ~sel; assign f1 = a & nsel; assign f2 = b & sel; a b sel f x y 0 x assign f = f1 f2; endmodule x y 1 y Univeristy of Crete ΗΥ220 72

Mux: Dtfl Dataflow Module II module sel(a, b, sel, f); a b f input a, b, sel; output f; assign f = sel? a : b; sel endmodule a b sel f x y 0 x x y 1 y Univeristy of Crete ΗΥ220 73