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 Thiết kế mạch số với vhdl & verilog pps (Trang 74 - 77)

Chương3 Loại dữ liệu trong Verilog 3.1Khái quát

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) cho các tham số mà không cần có giá trị mới.

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 không ñược xem như là một phần thứ tụ của danh sách cho phép gán giá trị

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 Thiết kế mạch số với vhdl & verilog pps (Trang 74 - 77)

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

(86 trang)