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

معاملات الإزاحة

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

تنقل عوامل الإزاحة bits إلى اليسار أو اليمين داخل متجه.

عوامل الإزاحة المتاحة

العاملالعمليةالوصف
<<إزاحة منطقية إلى اليسارتنقل bits إلى اليسار، وتملأ بالأصفار
>>إزاحة منطقية إلى اليمينتنقل bits إلى اليمين، وتملأ بالأصفار
<<<إزاحة حسابية إلى اليسارمثل الإزاحة المنطقية إلى اليسار
>>>إزاحة حسابية إلى اليمينتنقل إلى اليمين، وتحافظ على sign

كيفية عملها

Shift إلى اليسار (<strong><<</strong>):

8'b00001010 << 2 = 8'b00101000

تتحرك Bits إلى اليسار. تملأ الأصفار الجانب right.

الإزاحة إلى اليمين (<strong>>></strong>):

8'b00001010 >> 2 = 8'b00000010

bits تتحرك إلى اليمين. تملأ الأصفار الجانب الأيسر.

مثال على الشيفرة

module shift_demo;
  reg [7:0] original, left_shift, right_shift;
  
  initial begin
    original = 8'b00001010;
    
    left_shift  = original << 2;   // 00001010 → 00101000
    right_shift = original >> 2;   // 00001010 → 00000010
    
    $display("original   = %b", original);
    $display("<< 2       = %b", left_shift);
    $display(">> 2       = %b", right_shift);
    $finish;
  end
endmodule

الناتج:

original   = 00001010
<< 2       = 00101000
>> 2       = 00000010

الإزاحة الحسابية إلى اليمين (>>>)

بالنسبة إلى الأعداد ذات الإشارة، تحافظ الإزاحة الحسابية إلى اليمين على بت الإشارة:

reg signed [7:0] a;
a = -5;                // 11111011
a >>> 2 = 11111110     // ما زال سالبًا

الإزاحة المنطقية (>>) ستملأ بالقيم الصفرية وتفقد الإشارة.

الاستخدامات الشائعة

الضرب في قوة للعدد 2 (الإزاحة إلى اليسار):

x << 1    // اضرب في 2
x << 2    // اضرب في 4
x << 3    // اضرب في 8

القسمة على قوة من 2 (الإزاحة إلى اليمين):

x >> 1    // اقسم على 2
x >> 2    // اقسم على 4
x >> 3    // اقسم على 8

Extract field:

// احصل على البتات 5-2 من قيمة 8 بت
field = (data >> 2) & 4'b1111;
challenge icon

التحدي

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

ما يجب فعله:

  1. أزِح a إلى اليسار بمقدار 3 bits وخزّن النتيجة في left_result
  2. أزِح a إلى اليمين بمقدار 1 bit وخزّن النتيجة في right_result
  3. أزِح b إلى اليمين بمقدار 2 bits (حسابيًا) وخزّن النتيجة في arith_result

جرّب بنفسك

module shift_challenge;
  reg [7:0] a;
  reg signed [7:0] b;
  reg [7:0] left_result, right_result;
  reg signed [7:0] arith_result;
  
  initial begin
    a = 8'b00010001;
    b = -8'sd16;       // 11110000 في النظام الثنائي
    
    left_result  = ______;   // إزاحة a لليسار بمقدار 3 بتات
    right_result = ______;   // إزاحة a لليمين بمقدار 1 بت
    arith_result = ______;   // إزاحة b لليمين بمقدار 2 بت (حسابية)
    
    $display("a = %b", a);
    $display("a << 3 = %b", left_result);
    $display("a >> 1 = %b", right_result);
    $display("b = %b", b);
    $display("b >>> 2 = %b", arith_result);
    $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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

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