Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

1. Τα απολύτως απαραίτητα

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "1. Τα απολύτως απαραίτητα"— Μεταγράφημα παρουσίασης:

1 1. Τα απολύτως απαραίτητα
ΗΥ-220 1. Τα απολύτως απαραίτητα

2 ΗΥ-220 - Παπαευσταθίου Γιάννης
Τα πολύ Βασικά Προαπαιτούμενο : ΗΥ-120 (Ψηφιακή Σχεδίαση) Διδάσκοντες : Παπαευσταθίου Γιάννης Καλοκαιρινός Γιώργος Βοηθοί : Δημήτρης Μεϊντάνης Νίκος Χρυσός Βαθμολογία : 40% Βαθμοί εργασιών 15% Βαθμος προόδου (υποχρεωτική, δεν προσμετράται στη Β’ Εξεταστική) 45% Βαθμός τελικής εξέτασης (60% στη Β’ Εξεταστική) ΗΥ Παπαευσταθίου Γιάννης

3 ΗΥ-220 - Παπαευσταθίου Γιάννης
Verilog- Γιατί; Σχεδίαση επικεντρωμένη στην αρχιτεκτονική Διαδικασία σύνθεσης Εύκολη συντήρηση κώδικα Είναι καθιερωμένο if (sel == 0) c = ~(a or b); else c = ~d; clk) begin R[1] <= #`dh 1; R[2] <= #`dh 2’b0; end ΗΥ Παπαευσταθίου Γιάννης

4 ΗΥ-220 - Παπαευσταθίου Γιάννης
Βασική δομή Modules… … τουλάχιστον 2 Top level Test bench Είσοδος και αποτελέσματα ΗΥ Παπαευσταθίου Γιάννης

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

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

7 ΗΥ-220 - Παπαευσταθίου Γιάννης
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)); ΗΥ Παπαευσταθίου Γιάννης

8 ΗΥ-220 - Παπαευσταθίου Γιάννης
Regs reg a; initial begin a = 0; #5; a = 1; end Στοιχεία μνήμης … κάτι ανάλογο με μεταβλητές στη C Synthesizable code: Αναθέσεις «κοντά» Εξαίρεση: test bench Hold time reg q; clk) begin if (load) q = #2 d; end ΗΥ Παπαευσταθίου Γιάννης

9 ΗΥ-220 - Παπαευσταθίου Γιάννης
Buses Καμία διαφορά στη συμπεριφορά Συμβάσεις: [high : low] [msb : lsb] Προσοχή στις συνδέσεις εκτός του module… 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 ΗΥ Παπαευσταθίου Γιάννης

10 Ανακεφαλαίωση: Μετρητής 8 bits
module counter(clk, reset, out); input clk, reset; output [7:0] out; wire [7:0] next_value = out + 1; reg [7:0] out; clk) begin if (reset) out = #2 8’b0; else out = #2 next_value; end endmodule module clk(out); output out; reg out; initial out = 1’b0; always out = #25 ~out; endmodule ! ΗΥ Παπαευσταθίου Γιάννης

11 ΗΥ-220 - Παπαευσταθίου Γιάννης
Μετρητής 8 bits (2) initial begin begin_graphics; reset = 1; @(posedge clk); reset = #2 0; #300; end_graphics; $stop; end endmodule module test; wire clk; reg reset; wire [7:0] count; clock clk0(clk); counter cnt0(clk, reset, count); `include "cwaves.h” ! ΗΥ Παπαευσταθίου Γιάννης

12 ΗΥ-220 - Παπαευσταθίου Γιάννης
Μετρητής 8 bits (3) 00 01 06 04 02 03 05 clk reset count counter.v clock.v test.v cwaves.h > rlogin zefyros > set path = ($path /vlsi/tools/bin) > setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH\:/vlsi/tools/lib > verilog -f files.cv +define+GR_CWAVES > cwaves & ΗΥ Παπαευσταθίου Γιάννης

13 ΗΥ-220 - Παπαευσταθίου Γιάννης
Τέλος! Συνδυαστική λογική: wire Ακολουθιακή λογική: reg Buses: [high:low] Καθυστερήσεις: #t @(posedge …) Δύο τύποι statements: initial always Είσοδος - έξοδος: input, output Αποτελέσματα: $display Cadence waves ΗΥ Παπαευσταθίου Γιάννης

14 ΗΥ-220 - Παπαευσταθίου Γιάννης
Full Custom VLSI Design ΗΥ Παπαευσταθίου Γιάννης

15 ΗΥ-220 - Παπαευσταθίου Γιάννης
Verilog Code // // Single Seven Segment Display Driver module DisplayS(SevenSegment, DisplaySelect, SW); input [7:0] SW; output [3:0] DisplaySelect; output [7:0] SevenSegment; assign DisplaySelect = ~SW[3:0]; wire [3:0] SSSel = SW[7:4]; reg [7:0] SevenSegment; begin case (SSSel) 4'b0000 : SevenSegment = 8'h3f; 4'b0001 : SevenSegment = 8'h06; 4'b0010 : SevenSegment = 8'h5b; ΗΥ Παπαευσταθίου Γιάννης

16 ΗΥ-220 - Παπαευσταθίου Γιάννης
Verilog Code (cont) 4'b0011 : SevenSegment = 8'h4f; 4'b0100 : SevenSegment = 8'h66; 4'b0101 : SevenSegment = 8'h6d; 4'b0110 : SevenSegment = 8'h7d; 4'b0111 : SevenSegment = 8'h27; 4'b1000 : SevenSegment = 8'h7f; 4'b1001 : SevenSegment = 8'h6f; 4'b1010 : SevenSegment = 8'h77; 4'b1011 : SevenSegment = 8'h7C; 4'b1100 : SevenSegment = 8'h39; 4'b1101 : SevenSegment = 8'h5E; 4'b1110 : SevenSegment = 8'h79; 4'b1111 : SevenSegment = 8'h71; endcase end // endmodule ΗΥ Παπαευσταθίου Γιάννης

17 ΗΥ-220 - Παπαευσταθίου Γιάννης
Verilog Code (Test bench) module test; // reg [7:0] SW; wire [7:0] SevenSegment; wire [3:0] DisplaySelect; DisplayS mDisplayS(SevenSegment, DisplaySelect, SW); initial begin #10 $stop; #10 SW = 8'h01; #10 SW = 8'h11; #10 SW = 8'h21; #10 SW = 8'h31; #10 SW = 8'h41; #10 SW = 8'h51; #10 SW = 8'h61; #10 SW = 8'h71; #10 SW = 8'h81; #10 SW = 8'h91; #10 SW = 8'ha1; #10 SW = 8'hb1; #10 SW = 8'hc1; #10 SW = 8'hd1; #10 SW = 8'he1; #10 SW = 8'hf1; #100 $stop; end endmodule ΗΥ Παπαευσταθίου Γιάννης

18 ΗΥ-220 - Παπαευσταθίου Γιάννης
7 Segment Display ΗΥ Παπαευσταθίου Γιάννης

19 ΗΥ-220 - Παπαευσταθίου Γιάννης
Display Driver ΗΥ Παπαευσταθίου Γιάννης


Κατέβασμα ppt "1. Τα απολύτως απαραίτητα"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google