Menu
CoddyTech

Độ 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 đíchChờ trước khi thực thiMô 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 gian

Quy tắc quan trọng

Quy tắcGiải thích
Độ trễ đặt sau tên cổngand #5 (out, a, b)
Giá trị độ trễ tính theo đơn vị thời gianDựa trên chỉ thị timescale
Tất cả đầu vào đều ảnh hưởng đến đầu raMộ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
challenge icon

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:

  1. Cổng AND: độ trễ 5 đơn vị thời gian
  2. Cổng OR: độ trễ 3 đơn vị thời gian
  3. 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
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