Menu
CoddyTech

Ánh xạ cổng theo thứ tự

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 35 trên 90.

Trong bài học trước, bạn đã tìm hiểu về ánh xạ cổng theo tên, trong đó bạn gắn nhãn rõ ràng cho từng kết nối bằng .port(signal). Bây giờ, mình sẽ giới thiệu phương pháp thay thế: ánh xạ cổng theo thứ tự.

Nó kết nối các tín hiệu với các cổng của module dựa trên thứ tự chúng xuất hiện trong định nghĩa module. Bạn chỉ cần liệt kê các tín hiệu trong dấu ngoặc đơn, rồi Verilog sẽ ghép từng tín hiệu theo thứ tự.

Cú pháp:

module_name instance_name (signal1, signal2, signal3);

Tín hiệu đầu tiên kết nối với cổng đầu tiên, tín hiệu thứ hai kết nối với cổng thứ hai, và cứ tiếp tục như vậy.

Ví dụ

Định nghĩa module:

module or_gate (
  input in1,      // Cổng thứ nhất
  input in2,      // Cổng thứ hai
  output result   // Cổng thứ ba
);
  assign result = in1 | in2;
endmodule

Khởi tạo với ánh xạ cổng theo thứ tự:

or_gate or1 (input_a, input_b, output_y);

Phần này kết nối:

  • Tín hiệu thứ nhất input_a → cổng thứ nhất in1
  • Tín hiệu thứ hai input_b → cổng thứ hai in2
  • Tín hiệu thứ ba output_y → cổng thứ ba result

Thứ tự rất quan trọng

Khi ánh xạ cổng theo thứ tự, trình tự rất quan trọng:

// Đúng thứ tự
or_gate or1 (input_a, input_b, output_y);

// Sai thứ tự, các tín hiệu nối vào sai cổng!
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);

Nếu bạn nhầm thứ tự, các kết nối sẽ đi đến sai cổng. Lỗi này có thể khó gỡ vì thoạt nhìn, code có vẻ đúng.

Kết nối cổng theo tên và theo thứ tự

Đặc điểmTheo tênTheo thứ tự
Cú pháp.port(signal)signal1, signal2
Thứ tự có quan trọng không?KhôngCó
Có tự giải thích không?CóKhông
Nguy cơ mắc lỗiThấpCao
Được khuyên dùng choHầu hết thiết kếChỉ các trường hợp đơn giản

Khi nào nên dùng cách ánh xạ cổng theo thứ tự

Cách ánh xạ cổng theo thứ tự phù hợp khi:

  • Module có rất ít cổng (2-3)
  • Thứ tự cổng rõ ràng và khó thay đổi
  • Bạn đang viết các testbench nhanh

Với hầu hết các thiết kế, ánh xạ cổng theo tên thường được ưu tiên vì cách này rõ ràng hơn và ít mắc lỗi hơn.

challenge icon

Thử thách

Hoàn thành việc khởi tạo bằng cách liệt kê các tín hiệu theo đúng thứ tự, sử dụng cách ánh xạ cổng theo thứ tự.

Cần làm:

Các cổng của module (theo thứ tự này):

  1. input en (tín hiệu cho phép)
  2. input [7:0] d (đầu vào dữ liệu)
  3. output [7:0] q (đầu ra dữ liệu)

Các tín hiệu cần kết nối:

  • enable_signal → kết nối với en
  • data_input → kết nối với d
  • data_output → kết nối với q

Tự làm thử

module register (
  input en,
  input [7:0] d,
  output [7:0] q
);
  assign q = en ? d : q;
endmodule

module top (
  input enable_signal,
  input [7:0] data_input,
  output [7:0] data_output
);
  
  // TODO: Tạo instance của register tên reg1 bằng cách ánh xạ theo thứ tự ORDER
  // Liệt kê các tín hiệu theo đúng thứ tự: enable_signal, data_input, data_output
  // Không dùng cú pháp (syntax) .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