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

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

V ERILOG 2. Μια πιο κοντινή ματιά. ΗΥ-220 - Παπαευσταθίου Γιάννης2 Δομή της γλώσσας Μοιάζει πολύ με τη C –Preprocessor –Keywords –Τελεστές Γλώσσα «event.

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


Παρουσίαση με θέμα: "V ERILOG 2. Μια πιο κοντινή ματιά. ΗΥ-220 - Παπαευσταθίου Γιάννης2 Δομή της γλώσσας Μοιάζει πολύ με τη C –Preprocessor –Keywords –Τελεστές Γλώσσα «event."— Μεταγράφημα παρουσίασης:

1 V ERILOG 2. Μια πιο κοντινή ματιά

2 ΗΥ-220 - Παπαευσταθίου Γιάννης2 Δομή της γλώσσας Μοιάζει πολύ με τη C –Preprocessor –Keywords –Τελεστές Γλώσσα «event driven» `timescale 1ns / 1ns `define dh 2 `include “cwaves.h” `timescale 1ns / 1ns `define dh 2 `include “cwaves.h” & and | or ~ not ^ xor & and | or ~ not ^ xor = ==, !=, = && || ? : = ==, !=, = && || ? : always clk = #(`period / 2) ~clk; always @(posedge clk) a = b + 1; always @(posedge clk) b = c + 1; always clk = #(`period / 2) ~clk; always @(posedge clk) a = b + 1; always @(posedge clk) b = c + 1; t 0 + period t0t0 !

3 ΗΥ-220 - Παπαευσταθίου Γιάννης3 Events Κάθε έκφραση συνδέεται με έναν αρχικό χρόνο Initial και always: εσωτερικά σειριακά 0 10 2030 4050 initial begin a = 0; b = 0; clk = 0; end always clk = #10 ~clk; wire comb = a + b; always @(posedge clk) a = b + 1; always @(posedge clk) b = c + 1; always @(posedge clk) c = #5 c + 1; initial begin a = 0; b = 0; clk = 0; end always clk = #10 ~clk; wire comb = a + b; always @(posedge clk) a = b + 1; always @(posedge clk) b = c + 1; always @(posedge clk) c = #5 c + 1; 0 10, 30 15, 35 10, 20, 30, 40, 50 10 +, 30 +

4 ΗΥ-220 - Παπαευσταθίου Γιάννης4 Case … το γνωστό case Μόνο με σταθερές εκφράσεις Δεν χρειάζεται break Καλός κώδικας: –Μοναδικό αριστερό μέρος always @(posedge clk) begin case (opcode) 8’h0A: dstreg = #`dh inreg0; 8’h22: begin dstreg = #`dh a + 1; if (a | (b ^ (~c))) dstreg = #`dh inreg1; end 8’hFF: dstreg = #`dh inreg2; default: dstreg = #`dh 8’h00; endcase end always @(posedge clk) begin case (opcode) 8’h0A: dstreg = #`dh inreg0; 8’h22: begin dstreg = #`dh a + 1; if (a | (b ^ (~c))) dstreg = #`dh inreg1; end 8’hFF: dstreg = #`dh inreg2; default: dstreg = #`dh 8’h00; endcase end

5 ΗΥ-220 - Παπαευσταθίου Γιάννης5 Concatenation «Hardwired» πράξεις… … απαραίτητες σε μια HDL wire [2:0] a; wire [4:0] b; wire [7:0] c = {a, b}; wire [2:0] a; wire [4:0] b; wire [7:0] c = {a, b}; 3 5 8 a b c wire [7:0] unsigned; wire [15:0] sign_extend = { (unsigned[7] ? 8’hFF : 8’h0), unsigned }; wire [7:0] unsigned; wire [15:0] sign_extend = { (unsigned[7] ? 8’hFF : 8’h0), unsigned };

6 ΗΥ-220 - Παπαευσταθίου Γιάννης6 Μνήμες Αναδρομικά: array of array Συνήθως non- synthesizable Ειδική αρχικοποίηση wire [15:0] word_in; wire [15:0] word_out; wire [9:0] addr; reg [15:0] memory [1023:0]; always @(posedge clk) begin if (we) memory[addr] = word_in; else word_out = memory[addr]; end wire [15:0] word_in; wire [15:0] word_out; wire [9:0] addr; reg [15:0] memory [1023:0]; always @(posedge clk) begin if (we) memory[addr] = word_in; else word_out = memory[addr]; end always @(negedge reset_n) $readmemh(“memory.dat”, memory); always @(negedge reset_n) $readmemh(“memory.dat”, memory);

7 ΗΥ-220 - Παπαευσταθίου Γιάννης7 Δύναμη σημάτων Προτεραιότητα: –Χ –1 και 0 – Ζ –… και άλλα Αρχικά όλα Χ Προσοχή στην αρχικοποίηση always @(posedge clk) if (reset)... else... always @(posedge clk) if (reset)... else... initial...

8 ΗΥ-220 - Παπαευσταθίου Γιάννης8 Τρικατάστατοι οδηγητές Εκμετάλλευση της κατάστασης Ζ module tristate(en, clk, data); input en, clk; inout [7:0] data; wire [7:0] data = (en) ? data_out : 8’bz; always @(posedge clk) begin if (!en) case (data)... endmodule module tristate(en, clk, data); input en, clk; inout [7:0] data; wire [7:0] data = (en) ? data_out : 8’bz; always @(posedge clk) begin if (!en) case (data)... endmodule Χρήση του τύπου inout wire [7:0] bus; tristate tr0(en0, clk, bus); tristate tr1(en1, clk, bus); tristate tr2(en2, clk, bus); wire [7:0] bus; tristate tr0(en0, clk, bus); tristate tr1(en1, clk, bus); tristate tr2(en2, clk, bus);

9 ΗΥ-220 - Παπαευσταθίου Γιάννης9 Παραμετρικά modules Μπορούμε να έχουμε παραμέτρους σε ένα module Default μέγεθος … πολύ βολικό! module RegLd(Q, D, load, clk); parameter N = 8; input [N-1:0] Q; output [N-1:0] D; input load, Clk; always @(posedge clk) if (load) Q = #`dh D; endmodule module RegLd(Q, D, load, clk); parameter N = 8; input [N-1:0] Q; output [N-1:0] D; input load, Clk; always @(posedge clk) if (load) Q = #`dh D; endmodule RegLd reg0(q0, d0, l, clk); RegLd #16 reg1(q1, d1, l, clk); RegLd reg2(q2, d2, l, clk); defparam reg2.N = 4; RegLd reg0(q0, d0, l, clk); RegLd #16 reg1(q1, d1, l, clk); RegLd reg2(q2, d2, l, clk); defparam reg2.N = 4;

10 ΗΥ-220 - Παπαευσταθίου Γιάννης10 Sensitivity lists Λογικές εκφράσεις με or, and posedge και negedge –Ρολόγια Προσοχή στο hardware που θέλουμε να περιγράψουμε… always @(posedge clk or negedge rst_)... always @(a or b or c) if (opcode == 32’h52A0234E) a = b ^ (~c); always @(posedge a or posedge b)... always @(posedge clk or negedge rst_)... always @(a or b or c) if (opcode == 32’h52A0234E) a = b ^ (~c); always @(posedge a or posedge b)... !

11 ΗΥ-220 - Παπαευσταθίου Γιάννης11 Τέλος! Preprocessor –`define –`timescale –`include Concatenations –{a, b, c} Case –case … endcase –default Μνήμες –reg [15:0] rf [7:0]; Tρικατάστατοι –wire a = (en) ? 1’b1 : 1’bz; Parameters –parameter N = 16; –Reg #8 r0(…); Sensitivity lists –always @(a or b); –always @(negedge rst_);


Κατέβασμα ppt "V ERILOG 2. Μια πιο κοντινή ματιά. ΗΥ-220 - Παπαευσταθίου Γιάννης2 Δομή της γλώσσας Μοιάζει πολύ με τη C –Preprocessor –Keywords –Τελεστές Γλώσσα «event."

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


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