Á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;
endmoduleKhở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ấtin1 - Tín hiệu thứ hai
input_b→ cổng thứ haiin2 - Tín hiệu thứ ba
output_y→ cổng thứ baresult
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ểm | Theo tên | Theo thứ tự |
|---|---|---|
| Cú pháp | .port(signal) | signal1, signal2 |
| Thứ tự có quan trọng không? | Không | Có |
| Có tự giải thích không? | Có | Không |
| Nguy cơ mắc lỗi | Thấp | Cao |
| Được khuyên dùng cho | Hầ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.
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):
input en(tín hiệu cho phép)input [7:0] d(đầu vào dữ liệu)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ớiendata_input→ kết nối vớiddata_output→ kết nối vớiq
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)
endmoduleBà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
1Giới thiệu
Verilog là gìPhần cứng và phần mềmModule đầu tiênChú thíchCác mức trừu tượng hóa thiết kế4Toán tử phần 1
Toán tử số họcToán tử moduloToán tử so sánhÔn tập: phép tính đơn giảnToán tử thao tác bit7Gán và cổng logic
Gán liên tụcGán bằng toán tửCác cổng nguyên thủy tích hợp sẵnCổng AND, OR, NOTCổng XOR, XNORÔn tập: mạch cổng logic10Ra quyết định
Câu lệnh ifIf và elseÔn tập: Bộ so sánh đơn giảnCâu lệnh caseCasex và casezÔn tập: Thiết kế ALU5Các toán tử, phần 2
Toán tử logicToán tử rút gọnToán tử dịch bitToán tử nốiToán tử điều kiệnÔn tập: thử thách về toán tử11Vòng lặp
Vòng lặp forVòng lặp whileVòng lặp repeatVòng lặp vô hạnCâu lệnh vô hiệu hóaÔn tập: các mẫu vòng lặp3Hệ thống số
Biểu diễn nhị phânSố có kích thướcSố không có kích thướcSố âmCác giá trị đặc biệt X và ZÔn tập: định dạng số6Module
Cấu trúc moduleCổng đầu vào và đầu raCổng vào ra hai chiềuKhởi tạo moduleÁnh xạ cổng theo tênÁnh xạ cổng theo thứ tựÔn tập: xây dựng module9Khối thủ tục
Khối alwaysKhối initialDanh sách độ nhạyPhép gán chặnPhép gán không chặnÔn tập: always và initial12Dự án bộ ghép kênh
Thiết kế bộ ghép kênh 2 thành 1Thiết kế bộ ghép kênh 4 thành 115Bộ điều khiển đèn giao thông
Xác định các trạng tháiLogic máy trạng tháiTự luyện tập: Trình biên dịch Verilog online