Menu
Coddy logo textTech

Birleştirme Operatörü

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

Birleştirme operatörü { } birden fazla sinyali, sabiti veya ifadeyi tek bir daha büyük vektörde birleştirir. Daha geniş değerler oluşturmak için bitleri birbirine eklemeniz gerektiğinde kullanılır.

Birleştirme ile Hangi Değerler Çalışır

Şunları birleştirebilirsiniz:

  • Wire ve reg'ler — herhangi bir sinyal
  • Sabitler4'b1010 veya 8'hFF gibi sayılar
  • İfadelera + b gibi işlemlerin sonuçları
  • Çoğaltmalar — bir değerin birden çok kez tekrarlanması

Tüm birleştirilmiş değerler sabit, bilinen genişliklere sahip olmalıdır.

Temel Sözdizimi:  {value1, value2, value3, ...} Sonuç genişliği, tüm bireysel genişliklerin toplamıdır.

Örnekler

İki adet 4 bitlik değeri 8 bitlik bir değerde birleştirin:

reg [3:0] high, low;
reg [7:0] word;

word = {high, low};     // high üst 4 bit, low ise alt 4 bit olur

Sabitlerle birleştirin:

data = {4'b1010, 4'b0000};   // 8'b10100000

İkiden fazlasını birleştirin:

full = {a, b, c, d};   // Tüm genişlikler toplanır

Replikasyon

Bir değeri {n{value}} kullanarak birden çok kez tekrarlayabilirsiniz:

repeat = {4{4'b1010}};   // 16'b1010101010101010 (4 kez tekrarla)

Bu, işaret genişletme için kullanışlıdır:

signed_8bit = {4{sign_bit}, value_4bit};

Kod Örneği

module concatenation_demo;
  reg [3:0] upper, lower;
  reg [7:0] combined;
  reg [11:0] repeated;
  
  initial begin
    upper = 4'b1010;
    lower = 4'b1100;
    
    combined = {upper, lower};        // 10101100
    repeated = {3{4'b1010}};          // 101010101010
    
    $display("{upper, lower} = %b", combined);
    $display("{3{4'b1010}} = %b", repeated);
    $finish;
  end
endmodule

Çıktı:

{upper, lower} = 10101100
{3{4'b1010}} = 101010101010

Önemli Notlar

  • Sıralama önemlidir: {a, b}, {b, a} ifadesinden farklıdır
  • Tüm parçalar sabit genişliklere sahip olmalıdır (boyutlandırılmamış sayılar olamaz)
  • Birleştirme, atamaların hem sol hem de sağ tarafında kullanılabilir
challenge icon

Görev

Her görev için doğru birleştirme (concatenation) ifadelerini yazın.

Ne yapmalı:

  1. a ve b değişkenlerini 8 bitlik bir sonuç oluşturacak şekilde birleştirin ve combine1 içinde saklayın
  2. c, d ve e değişkenlerini 12 bitlik bir sonuç oluşturacak şekilde birleştirin ve combine2 içinde saklayın
  3. f ve g değişkeninin iki kopyasını 12 bitlik bir sonuç oluşturacak şekilde birleştirin ve combine3 içinde saklayın

Kopya kağıdı

Birleştirme operatörü { } bitleri bir araya getirerek daha geniş bir vektör oluşturur. Sonuç genişliği = tüm bireysel genişliklerin toplamı.

// Temel: {value1, value2, ...}
reg [3:0] high, low;
reg [7:0] word;
word = {high, low};  // high = üst bitler, low = alt bitler

// Sabitlerle
data = {4'b1010, 4'b0000};  // 8'b10100000

Yineleme {n{value}} bir değeri n kez tekrarlar:

repeated = {3{4'b1010}};              // 12'b101010101010
signed_8bit = {4{sign_bit}, val_4b};  // işaret genişletme (sign extension)

Temel kurallar:

  • Sıralama önemlidir: {a, b}{b, a}
  • Tüm parçaların sabit ve bilinen genişlikleri olmalıdır
  • Atamaların her iki tarafında da kullanılabilir

Kendin dene

module concatenation_challenge;
  reg [3:0] a, b;
  reg [3:0] c, d, e;
  reg [3:0] f, g;
  reg [7:0] combine1;
  reg [11:0] combine2, combine3;
  
  initial begin
    a = 4'b1010;
    b = 4'b0101;
    c = 4'b1111;
    d = 4'b0000;
    e = 4'b1100;
    f = 4'b1001;
    g = 4'b0110;
    
    combine1 = ______;   // Combine a and b into an 8-bit result 
    combine2 = ______;   // Combine c, d, and e into a 12-bit result 
    combine3 = ______;   // Combine f and two copies of g into a 12-bit result 
    
    $display("{a, b} = %b", combine1);
    $display("{c, d, e} = %b", combine2);
    $display("{f, g, g} = %b", combine3);
    $finish;
  end
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