Menu
CoddyTech

Câu lệnh if

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

Câu lệnh if là một khối lệnh đưa ra quyết định, chỉ chạy code khi điều kiện đúng. Câu lệnh if kiểm tra một điều kiện.

Nếu điều kiện là true (1), code bên trong sẽ chạy. Nếu điều kiện là false (0), code sẽ bị bỏ qua.

Cú pháp:

if (condition) begin
  // Đoạn code chạy khi condition có giá trị true
end

Ví dụ đơn giản

if (reset) begin
  count = 0;
end

Trong ví dụ này:

  • begin và end dùng để đánh dấu bắt đầu và kết thúc khối lệnh
  • Nếu reset là 1 (đúng), đoạn code bên trong begin và end sẽ chạy → count trở thành 0
  • Nếu reset là 0 (sai), đoạn code bên trong sẽ bị bỏ qua → không có gì xảy ra

begin và end hoạt động giống như dấu ngoặc nhọn { } trong các ngôn ngữ lập trình khác. Chúng nhóm các câu lệnh lại với nhau để Verilog biết đoạn code nào thuộc điều kiện if. Dù ở đây chỉ có một câu lệnh, dùng begin và end vẫn là cách làm tốt để giữ tính nhất quán.

Câu lệnh if trong khối always

always @(posedge clk) begin
  if (reset)
    count <= 0;
end

Lưu ý: Với một câu lệnh đơn, begin và end là tùy chọn. Ví dụ, trong khối always ở trên, không cần begin/end sau if vì khối này chỉ có một câu lệnh.

Điều kiện có thể là bất kỳ biểu thức nào

if (a > b) begin
  max = a;
end

if (a && b) begin
  out = 1;
end

if (data == 8'hFF) begin
  match = 1;
end

Các quy tắc quan trọng

Quy tắcGiải thích
Điều kiện có thể là bất kỳ biểu thức nàoCác giá trị khác không (và đã biết) được xem là đúng, giá trị không được xem là sai
Cần có begin / end khi có nhiều câu lệnhGiống như { } trong các ngôn ngữ khác
Nếu không có begin/end, chỉ có một câu lệnh theo sauChỉ câu lệnh tiếp theo thuộc về if
challenge icon

Thử thách

Cần làm gì:

  1. Thêm câu lệnh if còn thiếu để đoạn code hoạt động.
  • Khi enable là 1, out phải bằng a & b
  • Khi enable là 0, out phải giữ nguyên 0 (không thay đổi)

Code khởi đầu khởi tạo out = 0 và kiểm tra cả hai trường hợp.

Tự làm thử

module if_challenge;
  reg a, b, enable;
  reg out = 0;
  
  initial begin
    a = 1;
    b = 1;
    
    // Test case 1: enable = 1
    enable = 1;
    // TODO: Thêm câu lệnh if (out = a & b)
    $display("enable=1: out = %d (should be 1)", out);
    
    // Test case 2: enable = 0
    enable = 0;
    out = 0; 
    // TODO: out cần giữ nguyên giá trị 0
    $display("enable=0: out = %d (should be 0)", out);
    
    $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