Menu
CoddyTech

Câu lệnh vô hiệu hóa

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

Câu lệnh disable dừng việc thực thi một khối lệnh có tên (như vòng lặp forever, khối lệnh begin-end hoặc tác vụ). Câu lệnh này hữu ích để thoát khỏi các vòng lặp vốn sẽ chạy mãi.

Cú pháp:

disable block_name;

Khối lệnh phải có nhãn là một tên.

Vô hiệu hóa bằng vòng lặp vô hạn

initial begin : counter // counter đặt tên counter cho khối lệnh (block).
  forever begin
    #10 count = count + 1;
    if (count == 5) begin
      disable counter;   // disable counter dừng toàn bộ khối lệnh đã đặt tên đó.
    end
  end
end

Vòng lặp forever nằm trong khối lệnh có tên counter. Câu lệnh disable counter được đặt bên trong vòng lặp. Khi count đạt đến 5, disable counter chạy và dừng toàn bộ khối lệnh counter, đồng thời dừng ngay vòng lặp forever.

Vô hiệu hóa trong một khối riêng

initial begin : counter
  forever begin
    #10 count = count + 1;
  end
end

initial begin
  #50;
  disable counter;   // Dừng khối lệnh counter từ bên ngoài
end

Ở đây, vòng lặp forever chạy liên tục bên trong khối có tên counter. Câu lệnh disable counter nằm trong một khối initial riêng biệt. Sau 50 đơn vị thời gian, disable counter chạy và dừng khối counter, từ bên ngoài kết thúc vòng lặp forever.

Quy tắc quan trọng

Quy tắcGiải thích
Khối lệnh phải có tênbegin : block_name
Disable dừng chương trình ngay lập tứcCode dừng tại thời điểm đó
Có thể dùng ở bất cứ đâuTrong mọi khối lệnh của module
Hữu ích để dừng vòng lặp foreverNếu không, chúng sẽ không bao giờ dừng
challenge icon

Thử thách

Bạn được cung cấp một module có bộ đếm chạy vô hạn. 

Cần làm:

Hoàn thành khối lệnh còn trống bằng cách thay mỗi chú thích bằng code phù hợp:

  1. Thêm #50; để chờ 50 đơn vị thời gian
  2. Thêm disable counter; để dừng khối bộ đếm
  3. Thêm $display("Counter stopped"); để in ra thông báo
  4. Thêm $finish; để kết thúc mô phỏng

Tự làm thử

module disable_challenge;
  integer count;
  
  initial begin
    count = 0;
    fork
      begin : counter
        forever begin
          #10 count = count + 1;
          $display("count = %d", count);
        end
      end
      
      begin
        // Bước 1: Chờ 50 đơn vị thời gian
        
        // Bước 2: Vô hiệu hóa khối lệnh counter
        
        // Bước 3: In ra "Counter stopped"
        
        // Bước 4: Kết thúc mô phỏng
        
      end
    join
  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