Menu
CoddyTech

Khởi tạo module

Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 33 trên 90.

Khởi tạo module là quá trình tạo một bản sao của một module bên trong module khác. Đây là cách bạn xây dựng các thiết kế lớn hơn bằng cách kết nối các thành phần nhỏ hơn với nhau.

Sau khi định nghĩa một module, bạn có thể sử dụng nó bên trong một module khác. Việc này gọi là khởi tạo. Mỗi lần khởi tạo sẽ tạo ra một instance riêng của module đó. Hãy hình dung việc này giống như dùng bản thiết kế để tạo nhiều bản sao của cùng một thành phần.

Cú pháp cơ bản

module_name instance_name (connections);
PhầnÝ nghĩa
module_nameTên module cần tạo instance
instance_nameTên duy nhất cho bản sao này
connectionsCác tín hiệu được kết nối với các cổng của module

Ví dụ đơn giản

Bước 1: Định nghĩa một module

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

Bước 2: Tạo một instance trong module khác

module top (
  input x,
  input y,
  output z
);
  and_gate gate1 (x, y, z);
endmodule

Sau đây là những gì xảy ra trong đoạn code này:

  • and_gate: tên module mà ta muốn dùng, module này phải tồn tại ở đâu đó
  • gate1: tên riêng mà ta đặt cho instance cụ thể này
  • (x, y, z): các tín hiệu mà ta kết nối với các cổng của module, theo đúng thứ tự chúng xuất hiện trong định nghĩa module

Tín hiệu đầu tiên x kết nối với cổng đầu tiên a. Tín hiệu thứ hai y kết nối với cổng thứ hai b. Tín hiệu thứ ba z kết nối với cổng thứ ba c.

Truyền một tín hiệu cho mỗi cổng. Verilog cũng chấp nhận ít tín hiệu hơn, kể cả dấu ngoặc đơn trống, nhưng khi đó, mỗi cổng không có tín hiệu sẽ không được kết nối với bất cứ thứ gì trong thiết kế của bạn. Truyền nhiều tín hiệu hơn số cổng của module sẽ gây ra lỗi.

Nhiều instance

Bạn có thể tạo nhiều bản sao của cùng một module:

module top;
  wire out1, out2;
  wire sig1, sig2, sig3, sig4;
  
  and_gate gate1 (sig1, sig2, out1);
  and_gate gate2 (sig3, sig4, out2);
endmodule

Mỗi instance có tên riêng (gate1, gate2) và các kết nối riêng. Chúng hoạt động độc lập.

Điều gì xảy ra khi khởi tạo

  • Một bản sao của phần cứng được tạo ra
  • Mỗi instance có bộ tín hiệu riêng
  • Các instance chạy song song (đồng thời)
  • Các tín hiệu bạn truyền vào quyết định cách các instance kết nối với phần còn lại của thiết kế

Quy tắc khởi tạo đối tượng

Quy tắcLý do
Tên instance phải là duy nhấtĐể phân biệt các bản sao
Tên module phải tồn tạiPhải được định nghĩa ở nơi khác
Truyền một tín hiệu cho mỗi cổngCổng không có tín hiệu sẽ không được kết nối, còn số tín hiệu nhiều hơn số cổng sẽ gây lỗi
Thứ tự kết nối phải khớp với thứ tự cổngTín hiệu đầu tiên kết nối với cổng đầu tiên, v.v.
challenge icon

Thử thách

Hoàn thành code bằng cách khởi tạo module or_gate.

Cần làm:

  1. Khởi tạo or_gate với tên instance là or1
  2. Truyền các tín hiệu theo đúng thứ tự: input_a, input_b, output_y

Tự làm thử

module or_gate (
  input in1,
  input in2,
  output result
);
  assign result = in1 | in2;
endmodule

module top (
  input input_a,
  input input_b,
  output output_y
);
  
  // TODO: Tạo instance của or_gate với tên or1
  // Truyền các tín hiệu theo thứ tự: input_a, input_b, output_y
  // Không dùng cú pháp .port(signal)
  

endmodule
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Verilog online