Menu
Coddy logo textTech

Operatory logiczne

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 24 z 90.

Operatory logiczne działają na całych wartościach i zwracają pojedynczy wynik: 1 (prawda) lub 0 (fałsz). W przeciwieństwie do operatorów bitowych, które działają bit po bicie, operatory logiczne traktują całą wartość jako prawdziwą (niezerową) lub fałszywą (zerową).

TypPrzykładWynik
Bitowe AND4'b1010 & 4'b11004'b1000 (wiele bitów)
Logiczne AND(4'b1010 && 4'b1100)1 (pojedynczy bit)

Dostępne operatory logiczne

OperatorZnaczenieOpis
&&Logiczne ANDPrawda, jeśli oba operandy są prawdziwe (różne od zera)
||Logiczne ORPrawda, jeśli co najmniej jeden operand jest prawdziwy
!Logiczne NOTPrawda, jeśli operand jest fałszywy (równy zero)

Jak działają

Logiczne AND (<strong>&&</strong>):

(5 && 3)   // 1 (obie wartości są różne od zera)
(5 && 0)   // 0 (druga wartość jest równa zeru)
(0 && 0)   // 0 (obie wartości są równe zeru)

Logiczne LUB (<strong>||</strong>):

(5 || 3)   // 1 (co najmniej jedna wartość niezerowa)
(5 || 0)   // 1 (pierwsza wartość niezerowa)
(0 || 0)   // 0 (obie wartości równe zeru)

Logiczne NOT (<strong>!</strong>):

!5         // 0 (wartość różna od zera staje się false)
!0         // 1 (zero staje się true)

Przykład kodu

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

Wynik:

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

Typowe zastosowanie

Operatory logiczne są używane w instrukcjach if i warunkach:

if (a && b)           // Prawda, jeśli zarówno a, jak i b są różne od zera
  $display("Both true");

if (a || b)           // Prawda, jeśli co najmniej jedna wartość jest różna od zera
  $display("At least one true");

if (!reset)           // Prawda, gdy reset ma wartość 0
  $display("Reset is inactive");
challenge icon

Wyzwanie

Zapisz poprawne wyrażenia logiczne dla każdego zadania.

Co zrobić:

  1. Sprawdź, czy zarówno value1, jak i value2 są prawdziwe, i zapisz wynik w and_out
  2. Sprawdź, czy value1 LUB value2 jest prawdziwe, i zapisz wynik w or_out
  3. Sprawdź, czy value1 jest fałszywe, i zapisz wynik w not_out

Spróbuj swoich sił

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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online