Phép gán giá trị tham số theo thứ tự danh sách tham số

Một phần của tài liệu gtverilog (Trang 75 - 78)

Chương3 Loại dữ liệu trong Verilog

3.9.2.1.4.2.1 Phép gán giá trị tham số theo thứ tự danh sách tham số

Thứ tự của những phép gán trong phép gán giá trị tham số theo thứ tự danh sách tham số instance của module sẽ theo thứ tự tham số lúc khai báo bên trong module. Nó khơng cần thiết phai gán giá trị cho tất cả các tham số có bên trong module khi dùng phương pháp này. Tuy nhiên, ta không thể nhảy qua một tham số. Do đó, để gán những giá trị cho một phần những tham số trong tất cả các tham số ñã khai báo trong module thì những phép gán để thay thế giá trị của một phần những tham số đó sẽ đứng trước những khai báo của những tham số còn lại. Một phương pháp khác đó là

phải gán giá trị cho tất cả các tham số nhưng dùng giá trị mặc định (cùng có giá trị như được gán trong khai báo tham số trong ñịnh nghĩa module)

Lâm Đức Khải University of Information Technology Page 75 Ví dụ:

Xét ví dụ sau, trong ví dụ này những tham số bên trong instance của những module mod_a, mod_c, và mod_d ñược thay ñổi trong khi gọi

instance.

module tb1;

wire [9:0] out_a, out_d; wire [4:0] out_b, out_c; reg [9:0] in_a, in_d; reg [4:0] in_b, in_c; reg clk;

// Tạo testbench clock và stimulus.

// Bốn instance của module vdff với phép gán giá trị tham số theo thứ tự danh sách tham số

// mod_a có hai giá trị tham số mới size=10 và delay=15 // mod_b có giá trị tham số mặc định là (size=5, delay=1)

// mod_c có một giá trị tham số mặc ñịnh là size=5 và một giá trị mới là delay=12

// Để thay ñổi giá trị của tham số delay, ta cũng cần phải mơ tả giá trị mặc định của tham số size

Lâm Đức Khải University of Information Technology Page 76 // mod_d có một giá trị tham số mới là size=10, và giá trị tham số delay vẫn giữ giá trị mặc định của nó.

vdff #(10,15) mod_a (.out(out_a), .in(in_a), .clk(clk)); vdff mod_b (.out(out_b), .in(in_b), .clk(clk));

vdff #( 5,12) mod_c (.out(out_c), .in(in_c), .clk(clk)); vdff #(10) mod_d (.out(out_d), .in(in_d), .clk(clk));

endmodule

module vdff (out, in, clk); parameter size=5, delay=1; output [size-1:0] out;

input [size-1:0] in; input clk;

reg [size-1:0] out;

always @(posedge clk) #delay out = in;

endmodule

Những giá trị của tham số cục bộ khơng thể bị đè lên, do đó chúng

Lâm Đức Khải University of Information Technology Page 77 tham số. Trong ví dụ này, addr_width sẽ ñược gán giá trị 12, và data_width sẽ ñược gán giá trị 16. Mem_size sẽ khơng được gán giá trị một cách tường minh do thứ tự danh sách, nhưng nó sẽ có giá trị 4096 do biểu thức khai báo của nó.

module my_mem (addr, data); parameter addr_width = 16;

localparam mem_size = 1 << addr_width; parameter data_width = 8; ... endmodule module top; ... my_mem #(12, 16) m(addr,data); endmodule

Một phần của tài liệu gtverilog (Trang 75 - 78)

Tải bản đầy đủ (PDF)

(87 trang)