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

Concatenation Operator

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

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

ما القيم التي تعمل مع التسلسل

يمكنك إجراء تسلسل لـ:

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

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

Basic Syntax:  {value1, value2, value3, ...} عرض النتيجة هو مجموع عروض جميع القيم الفردية.

أمثلة

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

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};   // جميع العروض تتجمع

التكرار

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

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

هذا مفيد لتمديد الإشارة:

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

التحدي

اكتب تعبيرات التسلسل الصحيحة لكل مهمة.

ما يجب فعله:

  1. Combine بين a وb في result بحجم 8-bit وخزّنه في combine1
  2. Combine بين c وd وe في result بحجم 12-bit وخزّنه في combine2
  3. Combine بين f ونسختين من g في result بحجم 12-bit وخزّنه في 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اختبر نفسك

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

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

تدرّب بنفسك: مترجم Verilog عبر الإنترنت