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

معامل الدمج

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

يجمع عامل التجميع (concatenation operator) { } بين العديد من الإشارات أو الثوابت (constants) أو التعبيرات في موجه (vector) واحد أكبر. ويُستخدم كلما احتجت إلى ربط البتات (bits) معًا لتشكيل قيم أوسع.

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

يمكنك تجميع:

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

يجب أن تكون لجميع القيم المتسلسلة (concatenated) أطوال ثابتة ومعروفة.

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

أمثلة

دمج قيمتين بـ 4-bit إلى 8 bits:

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

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

Combine مع constants:

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

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

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

Replication

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

repeated = {4{4'b1010}};   // 16'b1010101010101010 (repeat 4 times)

هذا مفيد للتمديد مع الإشارة (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}
  • يجب أن تكون لجميع الأجزاء أحجام ثابتة (لا تُستخدم أرقام غير محددة الحجم)
  • يمكن استخدام الدمج (Concatenation) على كلا الجانبين الأيسر والأيمن لعمليات التعيين
challenge icon

التحدي

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

ما يجب فعله:

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

جرّب بنفسك

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

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

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