Menu
CoddyTech

Vòng lặp for

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

Vòng lặp trong Verilog cho phép bạn thực thi một khối code nhiều lần. Chúng đặc biệt hữu ích trong các testbench để tạo mẫu kiểm thử lặp lại, khởi tạo bộ nhớ và duyệt qua các mảng. Khác với các mô tả phần cứng chạy song song, vòng lặp thực thi tuần tự, rất phù hợp cho việc mô phỏng và kiểm thử.

Vòng lặp thường dùng nhất là for, vòng lặp for, lặp lại một số lần cụ thể. Vòng lặp for chạy lặp đi lặp lại một khối code, với một biến vòng lặp thay đổi sau mỗi lần lặp. Bạn kiểm soát chính xác số lần vòng lặp chạy.

Cú pháp:

for (initialization; condition; increment) begin
  // Đoạn code cần lặp lại
end
PhầnCông dụngVí dụ
initializationĐặt giá trị bắt đầui = 0
conditionKhi nào cần dừngi < 10
incrementThay đổi sau mỗi vòng lặpi = i + 1

Ví dụ đơn giản

integer i;

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

Đầu ra:

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

Vòng lặp chạy 5 lần (i = 0, 1, 2, 3, 4).

Vòng lặp for trong testbench

Vòng lặp for thường được dùng để kiểm tra mọi tổ hợp đầu vào:

integer test_value;

for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
  $display("test_value = %d", test_value);
end

Cách này kiểm tra cả 16 giá trị có thể có của tín hiệu 4 bit.

Vòng lặp for với mảng

reg [7:0] memory [0:9];
integer i;

initial begin
  for (i = 0; i < 10; i = i + 1) begin
    memory[i] = i * 8;
  end
end

Lệnh này khởi tạo 10 vị trí bộ nhớ.

Quy tắc quan trọng

Quy tắcGiải thích
Biến vòng lặp phải là integer hoặc reg Không thể là wire
Dùng begin/end cho nhiều câu lệnhBắt buộc khi có hơn một dòng
Tránh vòng lặp vô hạnĐảm bảo điều kiện cuối cùng trở thành sai
Dùng giới hạn hằng số trong code có thể tổng hợpQuá trình tổng hợp trải vòng lặp thành một bản sao của logic cho mỗi lần lặp
challenge icon

Thử thách

Cần làm gì:

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

Tự làm thử

module for_challenge;
  integer i;
  
  initial begin
    $display("Printing 0 to 3:");
    
    // TODO: Thêm vòng lặp for
    // Khởi tạo i = 0
    // Lặp khi i < 4
    // Tăng i = i + 1
    // Trong vòng lặp, in ra bằng: $display("i = %d", i);
    
    $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