Menu
Coddy logo textTech

Operatörlerle Atama

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 38 / 90.

Sürekli atamayı (continuous assignment) anladığınızda, faydalı mantıklar oluşturmak için bunu operatörlerle birleştirebilirsiniz. assign ifadesi, bir kabloyu (wire) sürmek için herhangi bir operatörü kullanabilir.

Temel Sözdizimi

assign wire_name = expression;

İfade şunları içerebilir:

  • Aritmetik operatörler (+, -, *, /)
  • Bit düzeyinde operatörler (&, |, ^, ~)
  • Mantıksal operatörler (&&, ||, !)
  • Karşılaştırma operatörleri (>, <, ==, !=)
  • Kaydırma operatörleri (<<, >>)
  • Koşullu operatör (? :)

Farklı Operatörlerle Örnekler

Bit Düzeyinde VE (Bitwise AND):

assign out = a & b;

Toplama:

assign sum = a + b;

Karşılaştırma:

assign is_greater = (a > b);

Koşullu (çoklayıcı):

assign out = sel ? a : b;

Kaydırma:

assign shifted = data << 2;

Birleştirme:

assign bus = {high_byte, low_byte};

Kod Örneği

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;           // Bit düzeyinde VE (Bitwise AND)
  assign sum_out = a + b;           // Toplama
  assign is_equal = (a == b);       // Karşılaştırma
  assign mux_out = sel ? a : b;     // Koşullu (çoklayıcı)
  
endmodule

Tek Bir Atamada Birden Fazla Operatör

Operatörleri tek bir ifadede birleştirebilirsiniz:

assign result = (a & b) | (c ^ d);
assign final = (a + b) > (c - d);
assign parity = ^data;   // İndirgeme XOR (tek sayıda 1)

Operatör Önceliği

Verilog standart operatör önceliğini takip eder. Amacınızı netleştirmek için parantez ( ) kullanın:

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

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

Görev

Görevlere göre eksik assign ifadelerini ekleyin.

Yapılması gerekenler:

  1. and_result değişkenini input_a AND input_b değerine eşit yapın (bit düzeyinde)
  2. or_result değişkenini input_a OR input_b değerine eşit yapın (bit düzeyinde)
  3. xor_result değişkenini input_a XOR input_b değerine eşit yapın (bit düzeyinde)
  4. not_result değişkenini NOT input_a değerine eşit yapın (bit düzeyinde)

Kopya kağıdı

assign ifadesi, kombinasyonel mantık için çeşitli operatörleri destekler:

assign wire_name = expression;

Operatör türleri:

  • Bit düzeyinde (Bitwise): &, |, ^, ~
  • Aritmetik: +, -, *, /
  • Mantıksal: &&, ||, !
  • Karşılaştırma: >, <, ==, !=
  • Kaydırma (Shift): <<, >>
  • Koşullu: ? :
  • Birleştirme (Concatenation): { }
assign and_out  = a & b;          // Bitwise AND
assign sum_out  = a + b;          // Addition
assign is_equal = (a == b);       // Comparison
assign mux_out  = sel ? a : b;    // Multiplexer
assign bus      = {high, low};    // Concatenation
assign parity   = ^data;          // Reduction XOR

İşlem önceliğini netleştirmek için parantez kullanın:

assign out = (a & b) | c;

Kendin dene

module assign_challenge (
  input input_a,
  input input_b,
  output and_result,
  output or_result,
  output xor_result,
  output not_result
);
  
  // YAPILACAK: Aşağıdakiler için atama (assign) ifadelerini ekleyin:
  // and_result = input_a & input_b
  // or_result  = input_a | input_b
  // xor_result = input_a ^ input_b
  // not_result = ~input_a

endmodule
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler