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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΣΥΓΧΡΟΝΟΙ ΜΕΤΡΗΤΕΣ

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

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

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

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

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

ΠΛΕ- 027 Μικροεπεξεργαστές 5ο μάθημα: Αρχιτεκτονική πυρήνα: υλοποίηση ενός κύκλου

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

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

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

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

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

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

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

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

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

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

Κυριάκης - Μπιτζάρος Ευστάθιος Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.

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

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

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

100 ΕΡΩΤΗΣΕΙΣ ΜΕ ΤΙΣ ΑΝΤΙΣΤΟΙΧΕΣ ΑΠΑΝΤΗΣΕΙΣ ΓΙΑ ΤΟ ΜΑΘΗΜΑ ΨΗΦΙΑΚΑ ΚΥΚΛΩΜΑΤΑ

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

ΠΕΡΙΕΧΟΜΕΝΑ. Πρόλογος...9 ΚΕΦ. 1. ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ - ΚΩΔΙΚΕΣ

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

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

Α. ΣΚΟΔΡΑΣ ΠΛΗ21 ΟΣΣ#2. 14 Δεκ 2008 ΠΑΤΡΑ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ 2008 Α. ΣΚΟΔΡΑΣ ΧΡΟΝΟΔΙΑΓΡΑΜΜΑ ΜΕΛΕΤΗΣ

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

Ενότητα ΚΑΤΑΧΩΡΗΤΕΣ ΜΕΤΡΗΤΕΣ ΜΝΗΜΕΣ RAM

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

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

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

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

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

Περιεχόµενα. Πρόλογος Εισαγωγή 21

Χ. Σωτηρίου. Σχήμα 1: Προτεινόμενο Πρόγραμμα Επαλήθευσης του ολοκληρωμένου Επεξεργαστή

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

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

Στοιχεία Μνήμης, JKκαιD (Flip-Flops) Μετρητής Ριπής (Ripple Counter)

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

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

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

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

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

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

Τέτοιες λειτουργίες γίνονται διαμέσου του

Ψηφιακά Συστήματα. 6. Σχεδίαση Συνδυαστικών Κυκλωμάτων

Χ. Σωτηρίου. 0: lw $1, 8($0) 4: lw $2, 9($0) 8: add $1, $2, $3 c: or $4, $2, $3 10: beq $4, $0, -5-20: 5 24: fffe

Περιεχόμενα. Πρώτο Κεφάλαιο. Εισαγωγή στα Ψηφιακά Συστήματα. Δεύτερο Κεφάλαιο. Αριθμητικά Συστήματα Κώδικες

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

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

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

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

Εργαστηριακή Άσκηση 4: Ιεραρχική σχεδίαση και προσχεδιασμένοι πυρήνες

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

ΑΣΚΗΣΗ 7 FLIP - FLOP

Τεχνικές σχεδιασμού μονοπατιών ολίσθησης

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ. ΜΑΘΗΜΑ 2 ο. ΑΛΓΕΒΡΑ Boole ΛΟΓΙΚΑ ΚΥΚΛΩΜΑΤΑ

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

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

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

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

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

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

8.1 Θεωρητική εισαγωγή

Πανεπιστήμιο Πατρών. Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών

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

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΑΣΥΓΧΡΟΝΟΙ ΜΕΤΡΗΤΕΣ

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

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

Transcript:

HY430 Εργαστήριο Ψηφιακών Κυκλωμάτων Διδάσκων: Χ. Σωτηρίου, Βοηθός: (θα ανακοινωθεί) http://inf-server.inf.uth.gr/courses/ce430/ Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Πολυπλέκτες Καμπύλη Παρέτο Κωδικοποιητές/Από-κωδικοποιητές D FF Κωδικοποίηση με Προτεραιότητες Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) 2

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 3 Τύποι Μοντελοποίησης Verilog Δομική module_name instance_name [instance_array_range] (signal, signal,... ); (Structural) Ροή Δεδομένων (Dataflow) Συμπεριφοράς ή Διαδικαστική (Behavioural, Procedural) 4 module_name instance_name [instance_array_range] (.port_name(signal), (.port_name(signal),...); counter counter_( clk, enable, count_out); dff u2 (.clk(clock),.q(q[]),.data(d[])); gate_type #(delay) instance_name [instance_array_range] (terminal, terminal, ); wire = (a & b) (c & d); initial always @ (sensitivity list) -- always @(a or b or ci) sum = a + b + ci; initial bus = 6'h0000; #0 bus = 6'hC5A5; #20 bus = 6'hFFAA; 2

Περιγραφή Συμπεριφοράς Χρήση Διαδικασιών always ή initial Διαθέσιμες προτάσεις for while Συναρτήσεις Διεργασίες fork join Διαθέσιμοι Τύποι 5 reg και πίνακες reg integer real initial // reset everything always @(posedge clk) case (opcode) 8 hab: RegFile[dst] = #2 in; 8 hef: dst = #2 in0 + in; 8 h02: Memory[addr] = #2 data; case if (branch) dst = #2 br_addr; Περιγραφή Συμπεριφοράς Απεικόνιση στο υλικό;;; Το εργαλείο σύνθεσης κάνει αντιστοιχία Μπορεί να ελαχιστοποιήσει την δυαδική λογική Υπακούει όμως την δομική συμπεριφορά της περιγραφής! integer sum, i; integer opcodes [3:0]; real average; initial for (i=0; i<32; i=i+) opcodes[i] = 0; always @(posedge clk) sum = sum + ; average = average + (c / sum); opcodes[d] = sum; $display( sum: %d, avg: %f, sum, average); 6 3

Επιρροή Δομής module COMB_LOGIC_STRUCT(a, b, c, d, a2, b2, c2, d2, y, y2); input [8:0] a, b, c, d, a2, b2, c2, d2; output [0:0] y, y2; reg [0:0] y, y; always @(a or b or c or d or a2 or b2 or c2 or d2) y = a + b + c + d; y2 = (a2 + b2) + (c2 + d2); module a[8:0] b[8:0] c[8:0] d[8:0] + + + y[0:0] a[8:0] b[8:0] c[8:0] d[8:0] + + + y2[0:0] 7 Παραδείγματα Περιγραφής Συμπεριφοράς module test; task ShowValues; input [7:0] data; $display(..., data); task... always @(posedge clk) ShowValues(counter);... module define period 20 initial reset_ = b0; reset_ = #(2*`period + 5) b; @(branch); reset_ = b0; reset_ = #(2*`period + 5) b; always @(negedge reset_) fork a = #2 8 h44; b = #(4*`period + 2) b0; c = #(6*`period + 2) 8 h44; join 8 4

Περιγραφή RTL (Register Transfer Level Μεταβίβασης μεταξύ Καταχωρητών) Το κάθε τμήμα always κάνει αναθέσεις από καταχωρητές σε καταχωρητές Σχεδιάζουμε Κύκλο προς κύκλο Με οδηγό το ρολόι ος κύκλος:... 2 ος κύκλος: Συνδυαστική Λογική 9 Δομική Περιγραφή Μόνο εμφανίσεις τμημάτων Μορφή Πλαισίου Δοκιμής Μορφή μετά από Σύνθεση module top; wire clk, reset; wire [3:0] d_data, I_data; wire [9:0] d_adr; wire [5:0] i_adr; clock clk0(clk); processor pr0(clk, reset, d_adr, d_data, i_adr, i_data,...); memory mem0(d_adr, d_data); memory mem(i_adr, i_data) ; tester tst0(reset,...); module 0 5

Καλές Πρακτικές Ονόματα Συνοχή Νόημα Ευανάγνωστα Συνδυαστική Λογική Δομή Ευανάγνωστη Φυσική και όχι Λογική Ιεράρχηση του σχεδίου Συνδεσμολογία Κατά όνομα αντί Κατά θέση Χρήση κενών/tabs για ευθυγράμμιση του κώδικα wire a, memory_data_write_enable; wire mem_wr_en, if (~req && ((flag & prv_ack) ~set) && (count-2 == 0))... Καλές Πρακτικές Σχόλια Κώδικας υλικού γενικά πιο δύσκολος στην κατανόηση Ακόμα και ο ίδιος ο σχεδιαστής σε 2 εβδομάδες δεν θυμάται απόλυτα την λειτουργία του κώδικα Αν δεν χρησιμοποιηθούν εν γένει δεν θα μπουν αργότερα Καλή πρακτική Σε κάθε μονάδα Σε κάθε τμήμα always /*************************** * Comments on module test: * Module test comprises of * the following components **************************/ module test; // Line comment 2 6

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 3 Verilog και Λογική Σύνθεση Η διαδικασία Σύνθεσης μετατρέπει την περιγραφή Verilog σε:. Περιγραφή σε επίπεδο πυλών 2. Απεικόνιση σε βιβλιοθήκη πυλών επιλογή μεγεθών Η διαδικασία ακολουθεί μια καμπύλη Παρέτο Πολλαπλά σημεία (Εμβαδού, Καθυστέρησης) ανάλογα με τους περιορισμούς Εμβαδό (μm 2 ) Καμπύλη Παρέτο (Pareto) Μη ΒέλτιστηΛύση Βέλτιστες Λύσεις Καθυστέρηση (ns) 4 7

Συνθέσιμο Υποσύνολο της Verilog Εκφράσεις Λέξεις Κλειδιά Σχόλια Ορισμός θυρών Παράμετροι Ορισμός Μονάδων Σήματα και Μεταβλητές Εμφανίσεις input, output, inout parameter module -- module wire, reg Εμφανίσεις Μονάδων, Θεμελιώδεις Πύλες Προτάσεις Διαδικασιών always, if, else, case Όχι initial Τμήματα Διαδικασιών -- mymux(sel, a, b, out); nand nand4_i (out, a, b, c, d); Ροή Δεδομένων assign Αγνοούνται οι Καθυστερήσεις Τελεστές +, -, ~, &, ^, ==,!= Προσοχή: *, /, % Συναρτήσεις, Διαδικασίες function, task Μόνο Συνδυαστική Λογική Βρόχοι for, while Μόνο για αναθέσεις, 5 εμφανίσεις Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 6 8

Καταχωρητές module Reg(Q, D, Clk); parameter N = 6; input Clk; input [N-:0] D; output [N-:0] Q; reg [N-:0] Q; D[N-:0] D Q Q[N-:0] always @(posedge Clk) Q <= D; module Clk 7 Καταχωρητές module RegRst(Q, D, CLR, Clk); parameter N = 6; input CLR, Clk; input [N-:0] D; output [N-:0] Q; reg [N-:0] Q; always @(posedge Clk or posedge CLR) if (CLR) Q <= 0; else Q <= D; module D[N-:0] D Q RST CLR Clk Q[N-:0] 8 9

Καταχωρητές module Reg(Q, D, CLK, Clk); parameter N = 6; input Clk; input [N-:0] D; output [N-:0] Q; reg [N-:0] Q; always @(posedge Clk) if (CLR) Q <= 0; else Q <= D; module D[N-:0] N b0 CLR 0 D Clk Q Q[N-:0] 9 Καταχωρητές module RegLd(Q, D, CE, Clk); parameter N = 6; input CE, Clk; input [N-:0] D; output [N-:0] Q; reg [N-:0] Q; always @(posedge Clk) if (CE) Q <= D; module CE 0 D[N-:0] D Q Clk Q[N-:0] 20 0

Καταχωρητές module RegLd(Q, D, CE, Clk); parameter N = 6; input CE, Clk; input [N-:0] D; output [N-:0] Q; reg [N-:0] Q; always @(posedge Clk) if (CE) Q <= D; module D[N-:0] D Q CE EN Clk Q[N-:0] 2 Καταχωρητές module Reg(Q, D, CLK, SET, Clk); parameter N = 6; input Clk; input [N-:0] D; output [N-:0] Q; reg [N-:0] Q; always @(posedge Clk) if (CLR) Q <= 0; else if (SET) Q <= ; else Q <= D; module 22 D[N-:0] N b N b0 SET 0 CLR 0 Q[N-:0] D Q Clk

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 23 Καταχωρητές module Tff(Out, Toggle, Clk); output Out; input Toggle, Clk; reg Out; always @(posedge Clk or posedge reset) if (reset) Out <= 0; else if (Toggle) Out <= ~Out; module TOGGLE reset D Q RST Clk Out 24 2

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Πολυπλέκτες Καμπύλη Παρέτο Κωδικοποιητές/Από-κωδικοποιητές D FF Κωδικοποίηση με Προτεραιότητες Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) 25 Μετρητής module counter (C, CLR, Q); input C, CLR; output [3:0] Q; reg [3:0] tmp; always @(posedge C) if (CLR) tmp <= 4'b0000; else tmp <= tmp + 'b; 4 b 4 b0 + CLR 0 D Q Q[3:0] assign Q = tmp; module 4 26 3

Μετρητής module counter(c, D, LOAD, Q); input C, D, LOAD; output [3:0] Q; reg [3:0] tmp; always @(posedge C or posedge CLR) if (LOAD) tmp <= D; else tmp <= tmp + 'b; D 4 b + LOAD 0 CLR 4 D RST Q Q[3:0] assign Q = tmp; module 27 Μετρητής module counter(c, D, LOAD, CLR, Q); input C, D, LOAD; output [3:0] Q; reg [3:0] tmp; always @(posedge C) if (CLR) tmp = 4 b0; else if (LOAD) tmp <= D; else tmp <= tmp + 'b; assign Q = tmp; module D 4 b + 4 b0 LOAD 0 CLR 0 4 D Q Q[3:0] 28 4

Μετρητής module counter(c, D, UP, CLR, Q); input C, D, LOAD; output [3:0] Q; reg [3:0] tmp; always @(posedge C) if (CLR) tmp = 4 b0; else if (UP) tmp <= tmp + b; else tmp <= tmp - 'b; assign Q = tmp; Endmodule 4 b- 4 b + + CLR 4 b0 0 0 UP 4 D Q Q[3:0] 29 Μετρητής module Cnt(Out, Zero, En, Clear, Clk); parameter N = 32; parameter MaxCnt = 00; input En, Clear, Clk; output Zero; output [N-:0] Out; reg [N-:0] Out; reg Zero; always @(posedge Clk) if(clear) Out <= 0; Zero <= 0; else if (En) if (Out == MaxCnt) Out <= 0; Zero <= ; else Out <= Out + ; Zero <= 0; module 30 Τι λειτουργία έχει αυτό το κύκλωμα; Τι κυκλωματική μορφή; 5

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Πολυπλέκτες Καμπύλη Παρέτο Κωδικοποιητές/Από-κωδικοποιητές D FF Κωδικοποίηση με Προτεραιότητες Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) 3 module counters (C, CLR, Q); input C, CLR; output [3:0] Q; reg [3:0] tmp; always @(posedge C) if (CLR) tmp <= 4'b0000; else tmp <= tmp + d; d 4 b0 + CLR 0 D Q Q[3:0] assign Q = tmp; module 4 32 6

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 33 Ολισθητής module shift(clk, SI, SO); input C, SI; output SO; reg [7:0] tmp; always @(posedge CLK) tmp = {tmp[6:0], SI}; assign SO = tmp[7]; module tmp[7] SO tmp[0] SI 34 7

Ολισθητής module SIPO(CLK, SI, PO); input C, SI; output SO; reg [7:0] tmp; always @(posedge CLK) tmp = {tmp[6:0], SI}; assign PO = temp; module tmp[7] PO[7:0] tmp[0] SI 35 Ολισθητής module PISO(CLK, D, LOAD, SI, SO); input C, LOAD; input [7:0] D; output SO; reg [7:0] tmp; always @(posedge CLK) if (LOAD) tmp = D; else tmp = {tmp[6:0], SI}; assign SO = temp[7]; module LOAD LOAD tmp[7] SO tmp[0] SI PI[7:0] 36 8

Ολισθητής Περιγραφή με συνένωση module SHIFT2(CLK, MULT, LOAD, D, F); input C, MULT, LOAD; input [7:0] D; output [7:0] F; reg [7:0] tmp; always @(posedge CLK) if (LOAD) tmp = D; else if (MULT) tmp = {tmp[5:0], 2 b00}; else tmp = {2 b00, tmp[7:2]}; assign F = tmp; module 37 Περιγραφή με τελεστή ολίσθησης module SHIFT2(CLK, MULT, LOAD, D, F); input C, MULT, LOAD; input [7:0] D; output [7:0] F; reg [7:0] tmp; always @(posedge CLK) if (LOAD) tmp = D; else if (MULT) tmp = tmp << 2; else tmp = tmp >> 2; assign F = tmp; module Ολισθητής module SHIFT(DI, SEL, SO); input [7:0] DI; output [:0] SEL; reg [7:0] SO; always @(DI or SEL) case (SEL) 2 b00 : SO = DI; 2 b0 : SO = DI << ; 2 b0 : SO = DI << 2; default : SO = DI << 3; case module DI[0] DI[] DI[2] DI[7] SEL[:0] SO[0] SO[] SO[2] SO[3] SO[7] 38 9

Περιστροφικός Ολισθητής (Barrel Shift) module BARRELSHIFT(CLK, D, LOAD, SI, SO); input C, LOAD; input [7:0] D; output SO; reg [7:0] tmp; always @(posedge CLK or posedge reset) if (reset) tmp = 8 b0; else if (LOAD) tmp = D; else tmp = {tmp[6:0], temp[7]}; module LOAD tmp[7] LOAD tmp[0] PI[7:0] 39 Παραμετρικός Περιστροφικός Ολισθητής module BarShiftReg(Out, In, Ld, Shift, Clk, Reset); parameter N = 32; input Ld, Shift, Clk, Reset; input [N-:0] In; output [N-:0] Out; reg [N-:0] Out; always @(posedge Clk) if (~Reset) Out <= 0; else if (Ld) Out <= In; else if (Shift) Out <= {Out[N-2:0],Out[N-]}; Endmodule 40 20

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 4 Πολυπλέκτης module mux2(out, In, In0, Sel); parameter N = 6; output [N-:0] Out; input [N-:0] In, In0; input Sel; wire [N-:0] Out = Sel? In : In0; In[N:0] In2[N:0} Sel 0 Out[N:0] module 42 2

Πολυπλέκτης module mux4(out, In3, In2, In, In0, Sel); parameter N = 32; input [ :0] Sel; input [N-:0] In3, In2, In, In0; output [N-:0] Out; reg [N-:0] Out; always @(In0 or In or In2 or In3 or Sel) case ( Sel ) 2'b00 : Out <= In0; 2'b0 : Out <= In; 2'b0 : Out <= In2; 2'b : Out <= In3; case module In0[N:0] In[N:0} In2[N:0} In3[N:0} Sel 00 0 0 Out[N:0] 43 Πολυπλέκτης module mux4(out, In3, In2, In, In0, Sel); parameter N = 32; input [ :0] Sel; input [N-:0] In3, In2, In, In0; output [N-:0] Out; reg [N-:0] Out; always @(In0 or In or In2 or In3 or Sel) case ( Sel ) 2'b00 : Out <= In0; 2'b0 : Out <= In; default : Out <= In2; case module Sel In0[N:0] In[N:0} 00 In2[N:0} 0 In2[N:0} 0 Out[N:0] 44 22

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 45 Κωδικοποιητής module encoder (sel, res); input [7:0] res; output [2:0] sel; reg [7:0] sel; always @(res) case (res) 8'b0000000 : sel = 3'b000; 8'b0000000 : sel = 3'b00; 8'b0000000 : sel = 3'b00; 8'b0000000 : sel = 3'b0; 8'b0000000 : sel = 3'b00; 8'b0000000 : sel = 3'b0; 8'b0000000 : sel = 3'b0; default case module : sel = 3'b; res == 0000000 000 res == 0000000 00 res == 0000000 00 res == 0000000 0 3 3 3 3 sel 46 23

Από-κωδικοποιητής module decoder (sel, res); input [2:0] sel; output [7:0] res; reg [7:0] res; always @(sel) case (sel) 3'b000 : res = 8'b0000000; 3'b00 : res = 8'b0000000; 3'b00 : res = 8'b0000000; 3'b0 : res = 8'b0000000; 3'b00 : res = 8'b0000000; 3'b0 : res = 8'b0000000; 3'b0 : res = 8'b0000000; default : res = 8'b0000000; case module res == 000 0000000 res == 00 0000000 res == 00 0000000 res == 0 0000000 000000 8 8 8 8 sel 47 Κωδικοποιητής Υλοποίηση με case module encoder (sel, res); input [7:0] res; output [2:0] sel; reg [7:0] sel; always @(res) case (res) 8'b0000000 : sel = 3'b000; 8'b0000000 : sel = 3'b00; 8'b0000000 : sel = 3'b00; 8'b0000000 : sel = 3'b0; 8'b0000000 : sel = 3'b00; 8'b0000000 : sel = 3'b0; 8'b0000000 : sel = 3'b0; default case module : sel = 3'b; Υλοποίηση με for module encoder(in, Out); input [7:0] In; output [2:0] Out; reg [2:0] Out; integer i; always @(In) Out = 0; for (i=0; i<8; i=i+) if (In[i]) Out=i; module 48 24

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 49 Από-κωδικοποιητής Υλοποίηση με case module decoder (sel, res); input [2:0] sel; output [7:0] res; reg [7:0] res; always @(sel) case (sel) 3'b000 : res = 8'b0000000; 3'b00 : res = 8'b0000000; 3'b00 : res = 8'b0000000; 3'b0 : res = 8'b0000000; 3'b00 : res = 8'b0000000; 3'b0 : res = 8'b0000000; 3'b0 : res = 8'b0000000; default : res = 8'b0000000; case module Υλοποίηση με for module decoder(in, Out); input [2:0] In; output [7:0] Out; reg [7:0] Out; reg [7:0] tmp; integer i; always @(In) tmp = 0; for (i=0; i<8; i=i+) if (In == i) tmp[i]=; Out = tmp; module 50 25

Κωδικοποιητής με if Λογική με Προτεραιότητες module encoder(i, e); input [3:0] i; output [:0] e; reg [:0] e; always @(i) if (i[0]) e = 2 b00; else if (i[]) e = 2 b0; else if (i[2]) e = 2 b0; else if (i[3]) e = 2 b; else e = 2 bxx; module 2 b00 2 b 2 b0 2 b0 2 b00 0 0 0 0 i[3] i[2] i[] i[0] e[:0] 5 Κωδικοποιητής με if Λογική με Προτεραιότητες module encoder(i, e); input [3:0] i; output [:0] e; reg [:0] e; always @(i) if (i == 4 b000) e = 2 b00; else if (i == 4 b000) e = 2 b0; else if (i == 4 b000) e = 2 b0; else if (i == 4 b000) e = 2 b; else e = 2 bxx; module i i3 i3 i2 e[0] e[] 52 26

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 53 Αθροιστής module adder(a, b, sum); input [7:0] a, b; output [7:0] sum; assign sum = a + b; module a[7:0] b[7:0] + sum[7:0] 54 27

Αθροιστής με κρατούμενο module adder(a, b, sum); input [7:0] a, b; output [7:0] sum; output co; wire [8:0] temp; a[7:0] assign temp = a + b; assign sum = temp[7:0]; assign co = temp[8]; b[7:0] + sum[7:0] co module 55 Αθροιστής με πρόσημο module adder(a, b, sum); input signed [7:0] a, b; output signed [7:0] sum; assign sum = a + b; module a[7:0] b[7:0] + sum[7:0] 56 28

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 57 Συγκριτής module comparator(a, b, cmp); input [7:0] a,b; output cmp; assign cmp = (a>b)? b : b0; module a[7:0] b[7:0] - 0 cmp 58 29

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Πολυπλέκτες Καμπύλη Παρέτο Κωδικοποιητές/Από-κωδικοποιητές D FF Κωδικοποίηση με Προτεραιότητες Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) 59 module posedgdet(out, In, Clk); input In, Clk; output Out; reg Tmp; always @(posedge Clk) Tmp <= In; In D Q Tmp Out wire Out = ~Tmp & In; module 60 30

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 6 Μανταλωτής module Latch(In, Out, Ld); parameter N = 6; input [N-:0] In; input Ld; output [N-:0] Out; In[N-:0] D Q Out[N-:0] reg [N-:0] Out; always @(In or Ld) if (Ld) Out = In; module G Ld 62 3

Περιεχόμενα Περιγραφές και Συνθέσιμες Δομές Καμπύλη Παρέτο D FF Σύγχρονη, ασύγχρονη αρχικοποίηση Με ενεργοποίηση (enable) T FF Μετρητές Με ανάθεση τιμής Πάνω/Κάτω Ολισθητές Σειριακή είσοδος, Παράλληλη έξοδος Παράλληλη είσοδος, Σειριακή έξοδος Πολλαπλασιαστής/Διαιρέτης Ολισθητής «Βαρέλι» (Barrel) Πολυπλέκτες Κωδικοποιητές/Από-κωδικοποιητές Κωδικοποίηση με Προτεραιότητες Αθροιστές Συγκριτές D Latch Σύγχρονη, Ασύγχρονη Μνήμη 63 Σύγχρονη RAM module ramsync (clk,we,addr, di, do); input clk, we, en; input [5:0] addr; input [5:0] di; output [5:0] do; reg [5:0] do; reg [5:0] RAM [63:0]; always @(posedge clk) if (we) RAM[addr]<=di; do <= RAM[addr]; module we di addr clk RAM[63:0] x [5:0] do 64 32

Ασύγχρονη RAM ως προς την ανάγνωση module ramsync (clk,we,addr, di, do); input clk, we, en; input [5:0] addr; input [5:0] di; output [5:0] do; wire [5:0] do; reg [5:0] RAM [63:0]; always @(posedge clk) if (we) RAM[addr]<=di; assign do <= RAM[addr]; module 65 we di addr clk RAM[63:0] x [5:0] do Synthesis Tool Manual Διαβάστε τι υποστηρίζει και τι όχι το synthesis tool 66 33