Menu
Coddy logo textTech

Przypisanie z operatorami

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

Gdy zrozumiesz przypisanie ciągłe, możesz połączyć je z operatorami, aby tworzyć przydatną logikę. Instrukcja assign może używać dowolnego operatora do sterowania przewodem.

Podstawowa składnia

assign wire_name = expression;

Wyrażenie może zawierać:

  • Operatory arytmetyczne (+, -, *, /)
  • Operatory bitowe (&, |, ^, ~)
  • Operatory logiczne (&&, ||, !)
  • Operatory porównania (>, <, ==, !=)
  • Operatory przesunięcia (<<, >>)
  • Operator warunkowy (? :)

Przykłady z różnymi operatorami

Bitowe AND:

assign out = a & b;

Dodawanie:

assign sum = a + b;

Porównanie:

assign is_greater = (a > b);

Warunkowe (multiplekser):

assign out = sel ? a : b;

Przesunięcie:

assign shifted = data << 2;

Konkatenacja:

assign bus = {high_byte, low_byte};

Przykład kodu

module assign_operators (
  input [3:0] a, b,
  input sel,
  output [3:0] and_out,
  output [4:0] sum_out,
  output is_equal,
  output mux_out
);
  
  assign and_out = a & b;           // Bitowa operacja AND
  assign sum_out = a + b;           // Dodawanie
  assign is_equal = (a == b);       // Porównanie
  assign mux_out = sel ? a : b;     // Operacja warunkowa (multiplekser)
  
endmodule

Wiele operatorów w jednym przypisaniu

Możesz łączyć operatory w jednym wyrażeniu:

assign result = (a & b) | (c ^ d);
assign final = (a + b) > (c - d);
assign parity = ^data;   // Redukcyjny XOR (nieparzysta liczba jedynek)

Kolejność operatorów

Verilog stosuje standardową kolejność operatorów. Użyj nawiasów ( ), aby jasno wyrazić swoje intencje:

// Niejasne
assign out = a & b | c;

// Jasne
assign out = (a & b) | c;
challenge icon

Wyzwanie

Dodaj brakujące instrukcje assign na podstawie zadań.

Co należy zrobić:

  1. Ustaw and_result na input_a AND input_b (bitowo)
  2. Ustaw or_result na input_a OR input_b (bitowo)
  3. Ustaw xor_result na input_a XOR input_b (bitowo)
  4. Ustaw not_result na NOT input_a (bitowo)

Spróbuj swoich sił

module assign_challenge (
  input input_a,
  input input_b,
  output and_result,
  output or_result,
  output xor_result,
  output not_result
);
  
  // TODO: Dodaj instrukcje assign dla:
  // and_result = input_a & input_b
  // or_result  = input_a | input_b
  // xor_result = input_a ^ input_b
  // not_result = ~input_a

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