Menu
CoddyTech

Toán tử so sánh

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

Các toán tử so sánh so sánh hai giá trị và trả về 1 (đúng) hoặc 0 (sai).

Các toán tử so sánh có sẵn

Toán tửÝ nghĩa
==Bằng
!=Không bằng
>Lớn hơn
<Nhỏ hơn
>=Lớn hơn hoặc bằng
<=Nhỏ hơn hoặc bằng

Ví dụ code

module comparison_demo;
  reg [3:0] a, b;
  reg result;
  
  initial begin
    a = 5;
    b = 3;
    
    result = (a == b);
    $display("5 == 3 : %d", result);  // 0 (sai)
    
    result = (a != b);
    $display("5 != 3 : %d", result);  // 1 (đúng)
    
    result = (a > b);
    $display("5 > 3  : %d", result);  // 1 (đúng)
    
    result = (a < b);
    $display("5 < 3  : %d", result);  // 0 (sai)
    
    result = (a >= 5);
    $display("5 >= 5 : %d", result);  // 1 (đúng)
    
    result = (a <= 3);
    $display("5 <= 3 : %d", result);  // 0 (sai)
    $finish;
  end
endmodule

Đầu ra:

5 == 3 : 0
5 != 3 : 1
5 > 3  : 1
5 < 3  : 0
5 >= 5 : 1
5 <= 3 : 0

Sử dụng phép so sánh trong điều kiện

Phép so sánh thường được dùng trong câu lệnh if:

if (count == 10)
  $display("Reached maximum");

if (value > threshold)
  $display("Value is too high");

Ghi chú quan trọng

  • Kết quả so sánh là giá trị 1 bit (0 hoặc 1)
  • Phép so sánh hoạt động với mọi độ rộng bit
  • Hãy cẩn thận với == và != khi tín hiệu chứa X hoặc Z (chúng trả về X nếu các bit chưa xác định có thể làm thay đổi kết quả)
challenge icon

Thử thách

Viết các biểu thức so sánh đúng cho từng yêu cầu.

Cần làm:

  1. Kiểm tra xem a có bằng b không và lưu kết quả vào eq
  2. Kiểm tra xem a có lớn hơn b không và lưu kết quả vào gt
  3. Kiểm tra xem a có nhỏ hơn hoặc bằng b không và lưu kết quả vào le

Tự làm thử

module comparison_challenge;
  reg [3:0] a, b;
  reg eq, gt, le;
  
  initial begin
    a = 4'd7;
    b = 4'd7;
    
    eq = ______;   // a bằng b
    gt = ______;   // a lớn hơn b
    le = ______;   // a nhỏ hơn hoặc bằng b
    
    $display("a = %d, b = %d", a, b);
    $display("a == b : %d", eq);
    $display("a > b  : %d", gt);
    $display("a <= b : %d", le);
    $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