Độ trễ cổng
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 68 trên 90.
Trong bài học trước, chúng ta đã tìm hiểu về độ trễ chung, được dùng như trong #10 a = b;. Chúng chờ trước khi thực thi một câu lệnh.
Trong bài học này, chúng ta tìm hiểu về độ trễ cổng, chỉ áp dụng cho các cổng nguyên thủy tích hợp sẵn như and, or và not. Độ trễ cổng mô phỏng khoảng thời gian một cổng phần cứng cần để tạo đầu ra sau khi đầu vào thay đổi.
Trong phần cứng thực tế, các cổng không phản hồi ngay lập tức. Chúng có một độ trễ nhỏ. Khi dùng các cổng nguyên thủy tích hợp sẵn, bạn có thể thêm độ trễ để mô phỏng thời gian truyền tín hiệu của cổng. Đầu ra chỉ thay đổi sau khoảng thời gian trễ đã chỉ định.
Sự khác biệt giữa độ trễ chung và độ trễ cổng
| Độ trễ chung | Độ trễ cổng | |
|---|---|---|
| Cú pháp | #10 a = b; | and #5 (out, a, b); |
| Vị trí | # trước câu lệnh | # bên trong phần tử cổng nguyên thủy |
| Mục đích | Chờ trước khi thực thi | Mô hình hóa thời gian truyền qua cổng |
Cú pháp:
gate_type #(delay) (output, input1, input2, ...);#(delay) chỉ định cổng mất bao nhiêu đơn vị thời gian để phản hồi.
Ví dụ đơn giản
and #5 (out, a, b);Cổng AND này mất 5 đơn vị thời gian để thay đổi đầu ra sau khi a hoặc b thay đổi.
Độ trễ cổng với nhiều đầu vào
nand #8 (out, a, b, c, d); // Cổng NAND 4 đầu vào có độ trễ 8 đơn vị thời gianQuy tắc quan trọng
| Quy tắc | Giải thích |
|---|---|
| Độ trễ đặt sau tên cổng | and #5 (out, a, b) |
| Giá trị độ trễ tính theo đơn vị thời gian | Dựa trên chỉ thị timescale |
| Tất cả đầu vào đều ảnh hưởng đến đầu ra | Một thay đổi ở bất kỳ đầu vào nào cũng có thể làm thay đổi đầu ra, nhưng chỉ sau khi có độ trễ |
| Không thể tổng hợp | Độ trễ cổng chỉ dùng cho mô phỏng |
Thử thách
Thêm độ trễ còn thiếu cho các cổng trong module này. Dùng độ trễ khác nhau cho mỗi cổng.
Cần làm:
- Cổng AND: độ trễ 5 đơn vị thời gian
- Cổng OR: độ trễ 3 đơn vị thời gian
- Cổng NOT: độ trễ 2 đơn vị thời gian
Tự làm thử
module gate_delay_challenge;
reg a, b;
wire and_out, or_out, not_out;
// TODO: Thêm cổng AND có độ trễ 5 đơn vị thời gian (đầu vào a, b)
// TODO: Thêm cổng OR có độ trễ 3 đơn vị thời gian (đầu vào a, b)
// TODO: Thêm cổng NOT có độ trễ 2 đơn vị thời gian (đầu vào a)
initial begin
$monitor("Time %0t: a=%b, b=%b | and=%b, or=%b, not=%b",
$time, a, b, and_out, or_out, not_out);
a = 1; b = 1;
#10 $finish;
end
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ế ALU13Thời gian và độ trễ
Độ trễ là gìĐộ trễ cổngĐộ trễ phép gánChỉ thị timescaleTạo xung nhịpÔn tập về điều khiển thời gian5Cá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