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_name | Tên module cần tạo instance |
instance_name | Tên duy nhất cho bản sao này |
connections | Cá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;
endmoduleBướ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);
endmoduleSau đâ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);
endmoduleMỗ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ắc | Lý 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ại | Phải được định nghĩa ở nơi khác |
| Truyền một tín hiệu cho mỗi cổng | Cổ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ổng | Tín hiệu đầu tiên kết nối với cổng đầu tiên, v.v. |
Thử thách
Hoàn thành code bằng cách khởi tạo module or_gate.
Cần làm:
- Khởi tạo
or_gatevới tên instance làor1 - 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)
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