Menu
CoddyTech

Vòng lặp while

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

Vòng lặp while lặp lại một khối code chừng nào điều kiện còn đúng. Khác với vòng lặp for, nó không có bộ đếm tích hợp sẵn. Bạn phải tự cập nhật biến vòng lặp.

Vòng lặp while kiểm tra điều kiện trước mỗi lần lặp. Nếu điều kiện đúng, vòng lặp sẽ chạy. Nếu sai, vòng lặp sẽ dừng.

Cú pháp:

while (condition) begin
  // Đoạn code cần lặp lại
end

Ví dụ đơn giản

integer i = 0;

while (i < 5) begin
  $display("i = %d", i);
  i = i + 1;
end

Đầu ra:

i = 0
i = 1
i = 2
i = 3
i = 4

Vòng lặp chạy chừng nào i < 5.

Vòng lặp while và for

 Vòng lặp forVòng lặp while
Bộ đếmCó sẵnBạn tự quản lý
Khi nào nên dùngĐã biết số lần lặpChưa biết khi nào vòng lặp sẽ dừng
Cú phápfor (i=0; i<5; i=i+1)while (i < 5)

Vòng lặp while trong testbench

Vòng lặp while hữu ích khi bạn chưa biết chính xác mình cần bao nhiêu lần lặp:

integer i = 0;

while (i < 16) begin
  $display("Testing value %d", i);
  i = i + 1;
end

Tìm một giá trị cụ thể

integer i = 0;
reg [7:0] data;

while (data[i] != 1) begin
  i = i + 1;
end
$display("First 1 found at position %d", i);

Quy tắc quan trọng

Quy tắcGiải thích
Điều kiện phải trở thành falseNếu không, sẽ xảy ra vòng lặp vô hạn
Cập nhật biến vòng lặp bên trong vòng lặpNếu không, vòng lặp sẽ không bao giờ kết thúc
Biến vòng lặp phải là integer hoặc regKhông thể là wire
Dùng begin/end cho nhiều câu lệnhBắt buộc khi có nhiều hơn một dòng
challenge icon

Thử thách

Cần làm gì:

Thêm vòng lặp while còn thiếu để in ra các số từ 0 đến 2.

Tự làm thử

module while_challenge;
  integer i;
  
  initial begin
    i = 0;
    $display("Printing 0 to 2:");
    
    // TODO: Thêm vòng lặp while
    // Lặp khi i < 3
    // Trong vòng lặp, in ra i
    // Tăng i thêm 1
    
    $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