Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

معامل الدمج

جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 27 من 90.

يقوم عامل التسلسل { } بدمج إشارات أو ثوابت أو تعبيرات متعددة في متجه واحد أكبر. ويُستخدم كلما احتجت إلى دمج البتات معاً لتكوين قيم أوسع.

ما هي القيم التي تدعم عملية الدمج (Concatenation)

يمكنك دمج:

  • Wires و regs — أي إشارة
  • الثوابت — أرقام مثل 4'b1010 أو 8'hFF
  • التعبيرات — نتائج العمليات مثل a + b
  • التكرارات — تكرار قيمة عدة مرات

يجب أن يكون لجميع القيم المتسلسلة عروض ثابتة ومعروفة.

الصيغة الأساسية:  {value1, value2, value3, ...} عرض النتيجة هو مجموع كل العروض الفردية.

أمثلة

دمج قيمتين بحجم 4 بت في 8 بت:

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

word = {high, low};     // تصبح high هي الـ 4 بتات العليا، و low هي الـ 4 بتات السفلى

الدمج مع الثوابت:

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

دمج أكثر من اثنين:

full = {a, b, c, d};   // جميع العروض تُجمع

التكرار

يمكنك تكرار قيمة عدة مرات باستخدام {n{value}}:

repeat = {4{4'b1010}};   // 16'b1010101010101010 (تكرار 4 مرات)

هذا مفيد لتوسيع الإشارة (sign extension):

signed_8bit = {4{sign_bit}, value_4bit};

مثال على الكود

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

المخرجات:

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

ملاحظات هامة

  • الترتيب مهم: {a, b} يختلف عن {b, a}
  • يجب أن يكون لجميع الأجزاء عروض ثابتة (لا توجد أرقام غير محددة الحجم)
  • يمكن استخدام التسلسل على كلا الجانبين الأيسر والأيمن من عمليات التعيين
challenge icon

التحدي

اكتب تعبيرات الدمج (concatenation) الصحيحة لكل مهمة.

ما يجب القيام به:

  1. قم بدمج a و b في نتيجة بحجم 8 بت وقم بتخزينها في combine1
  2. قم بدمج c و d و e في نتيجة بحجم 12 بت وقم بتخزينها في combine2
  3. قم بدمج f ونسختين من g في نتيجة بحجم 12 بت وقم بتخزينها في combine3

ورقة مرجعية

يقوم عامل الدمج { } بجمع البتات معاً في متجه أوسع. عرض النتيجة = مجموع كل العروض الفردية.

// أساسي: {value1, value2, ...}
reg [3:0] high, low;
reg [7:0] word;
word = {high, low};  // high = البتات العليا، low = البتات السفلى

// مع الثوابت
data = {4'b1010, 4'b0000};  // 8'b10100000

التكرار {n{value}} يكرر قيمة n من المرات:

repeated = {3{4'b1010}};              // 12'b101010101010
signed_8bit = {4{sign_bit}, val_4b};  // تمديد الإشارة (sign extension)

القواعد الأساسية:

  • الترتيب مهم: {a, b}{b, a}
  • يجب أن يكون لجميع الأجزاء عروض ثابتة ومعروفة
  • يمكن استخدامه على كلا جانبي عمليات التعيين (assignments)

جرّب بنفسك

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 iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات