Menu
CoddyTech

Toán tử logic

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

Các toán tử logic hoạt động trên toàn bộ giá trị và trả về một kết quả duy nhất: 1 (đúng) hoặc 0 (sai). Khác với các toán tử theo bit hoạt động trên từng bit, toán tử logic xem toàn bộ giá trị là đúng (khác không) hoặc sai (bằng không).

LoạiVí dụKết quả
AND theo bit4'b1010 & 4'b11004'b1000 (nhiều bit)
AND logic(4'b1010 && 4'b1100)1 (một bit)

Các toán tử logic có sẵn

Toán tửÝ nghĩaMô tả
&&AND logicĐúng nếu cả hai toán hạng đều đúng (khác không)
||OR logicĐúng nếu ít nhất một toán hạng đúng
!NOT logicĐúng nếu toán hạng sai (bằng không)

Cách chúng hoạt động

Phép AND logic (&&):

(5 && 3)   // 1 (cả hai đều khác 0)
(5 && 0)   // 0 (số thứ hai bằng 0)
(0 && 0)   // 0 (cả hai đều bằng 0)

OR logic (||):

(5 || 3)   // 1 (ít nhất một số khác 0)
(5 || 0)   // 1 (số đầu tiên khác 0)
(0 || 0)   // 0 (cả hai đều bằng 0)

Phủ định logic (!):

!5         // 0 (số khác 0 trở thành false)
!0         // 1 (số 0 trở thành true)

Ví dụ code

module logical_demo;
  reg [3:0] a, b;
  reg and_res, or_res, not_res;
  
  initial begin
    a = 5;
    b = 0;
    
    and_res = (a && b);   // 5 && 0 = 0
    or_res  = (a || b);   // 5 || 0 = 1
    not_res = !a;         // !5 = 0
    
    $display("5 && 0 = %d", and_res);
    $display("5 || 0 = %d", or_res);
    $display("!5     = %d", not_res);
    $finish;
  end
endmodule

Đầu ra:

5 && 0 = 0
5 || 0 = 1
!5     = 0

Cách dùng phổ biến

Toán tử logic được dùng trong câu lệnh if và các điều kiện:

if (a && b)           // Đúng nếu cả a và b đều khác 0
  $display("Both true");

if (a || b)           // Đúng nếu ít nhất một trong hai khác 0
  $display("At least one true");

if (!reset)           // Đúng khi reset bằng 0
  $display("Reset is inactive");
challenge icon

Thử thách

Viết các biểu thức logic chính xác cho từng nhiệm vụ.

Cần làm:

  1. Kiểm tra xem cả value1 VÀ value2 đều đúng hay không, rồi lưu vào and_out
  2. Kiểm tra xem value1 HOẶC value2 đúng hay không, rồi lưu vào or_out
  3. Kiểm tra xem value1 có sai hay không, rồi lưu vào not_out

Tự làm thử

module logical_challenge;
  reg [3:0] value1, value2;
  reg and_out, or_out, not_out;
  
  initial begin
    value1 = 4'd12;
    value2 = 4'd5;
    
    and_out = ______;   // value1 && value2
    or_out  = ______;   // value1 || value2
    not_out = ______;   // !value1
    
    $display("%d && %d = %d", value1, value2, and_out);
    $display("%d || %d = %d", value1, value2, or_out);
    $display("!%d     = %d", value1, not_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