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

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

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; clk) a = b + 1; clk) b = c + 1; always clk = #(`period / 2) ~clk; clk) a = b + 1; clk) b = c + 1; t 0 + period t0t0 !

3 ΗΥ-220 – Μαυροειδής Ιάκωβος3 Events Κάθε έκφραση συνδέεται με έναν αρχικό χρόνο Initial και always: εσωτερικά σειριακά initial begin a = 0; b = 0; end always begin clk = #10 1; clk = #10 0; end wire comb = a + b; clk) a = b + 1; clk) b = c + 1; clk) c = #5 c + 1; initial begin a = 0; b = 0; end always begin clk = #10 1; clk = #10 0; end wire comb = a + b; clk) a = b + 1; clk) b = c + 1; clk) c = #5 c + 1; 0 10, 30 15, 35 10, 20, 30, 40, , 30 +

4 ΗΥ-220 – Μαυροειδής Ιάκωβος4 Case … το γνωστό case Μόνο με σταθερές εκφράσεις Δεν χρειάζεται break Καλός κώδικας: –Μοναδικό αριστερό μέρος 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 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}; 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]; 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]; clk) begin if (we) memory[addr] = word_in; else word_out = memory[addr]; end reset_n) $readmemh(“memory.dat”, memory); reset_n) $readmemh(“memory.dat”, memory);

7 ΗΥ-220 – Μαυροειδής Ιάκωβος7 Τιμές σημάτων –Χ –1 και 0 – Ζ –… και άλλα Αρχικά όλα Χ Προσοχή στην αρχικοποίηση clk) if (reset)... else... 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; 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; 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; parameter dh = 2; input [N-1:0] Q; output [N-1:0] D; input load, clk; reg [N-1:0] D; clk) if (load) D = #dh Q; endmodule module RegLd(Q, D, load, clk); parameter N = 8; parameter dh = 2; input [N-1:0] Q; output [N-1:0] D; input load, clk; reg [N-1:0] D; clk) if (load) D = #dh Q; endmodule RegLd reg0(q0, d0, l, clk); RegLd #(16,2) reg1(q1, d1, l, clk); RegLd reg2(q2, d2, l, clk); defparam reg2.N = 4; defparam reg2.dh = 4; RegLd reg0(q0, d0, l, clk); RegLd #(16,2) reg1(q1, d1, l, clk); RegLd reg2(q2, d2, l, clk); defparam reg2.N = 4; defparam reg2.dh = 4;

10 ΗΥ-220 – Μαυροειδής Ιάκωβος10 Sensitivity lists Λογικές εκφράσεις με or, and posedge και negedge –Ρολόγια Προσοχή στο hardware που θέλουμε να περιγράψουμε… clk or negedge rst_)... or b or c) if (opcode == 32’h52A0234E) a = b ^ (~c); a or posedge b)... clk or negedge rst_)... or b or c) if (opcode == 32’h52A0234E) a = b ^ (~c); 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 or b); rst_);


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

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


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