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

Negative Numbers

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

في Verilog، تُمثَّل الأعداد negative باستخدام تنسيق two's complement. يُعد two's complement طريقة لتمثيل كلٍّ من الأعداد positive وnegative بالنظام الثنائي. تشير البتة الأكثر أهمية (MSB) إلى الإشارة:

  • 0 = عدد positive
  • 1 = عدد negative

كيفية حساب two's complement

لإيجاد two's complement لعدد:

  1. اكتب العدد positive بالنظام الثنائي
  2. اعكس كل bit (يصبح 0 هو 1، ويصبح 1 هو 0)
  3. أضف 1

مثال: تمثيل -5 باستخدام 4 bit

الخطوةالعمليةالنتيجة
1Positive 5 بالنظام الثنائي0101
2قلب جميع bit1010
3إضافة 11011

-5 في متمم two's complement ذي 4 bit هو <strong>4'b1011</strong>

كتابة الأرقام السالبة في Verilog

يمكنك كتابة الأرقام السالبة مباشرةً باستخدام التنسيق العشري:

reg signed [3:0] a;
a = -5;        // Verilog يستخدم تلقائيًا المتمم الثنائي

بالنسبة للأعداد الثنائية محددة الحجم، يجب أن تكتب قيمة two's complement:

a = 4'b1011;   // This is -5 in 4-bit two's complement

موقّعة مقابل غير موقّعة

بشكل افتراضي، يتعامل Verilog مع الأرقام على أنها غير موقّعة. للعمل مع الأرقام السالبة، صرّح عن الإشارات على أنها signed:

reg signed [3:0] negative;   // يمكنه تخزين من -8 إلى 7
reg [3:0] positive;          // يمكنه تخزين من 0 إلى 15

نطاق الأعداد ذات الإشارة

بالنسبة إلى N بت، يمكن لعدد ذي إشارة أن يمثل:

  • الحد الأدنى: -2^(N-1)
  • الحد الأقصى: 2^(N-1) - 1
البتاتالنطاق
4 بتات-8 إلى 7
8 بتات-128 إلى 127
16 بتًا-32768 إلى 32767

ملاحظات مهمة

  • استخدم الكلمة المفتاحية signed لتمكين التعامل مع الأعداد السالبة
  • من دون signed، يتعامل Verilog مع جميع القيم على أنها موجبة
  • تعمل حسابات two's complement automatically عند استخدام signed
  • يحدد MSB الإشارة: 1 = negative، 0 = positive
challenge icon

التحدي

أكمل الكود بكتابة قيم two's complement الصحيحة.

ما يجب فعله:

  1. عيّن a إلى -3 باستخدام التمثيل الثنائي لـ 4-bit two's complement
  2. عيّن b إلى -8 باستخدام التمثيل الثنائي لـ 4-bit two's complement
  3. عيّن c إلى -1 باستخدام التمثيل الثنائي لـ 4-bit two's complement

جرّب بنفسك

module negative_challenge;
  reg signed [3:0] a, b, c;
  
  initial begin
    a = 4'b______;   // -3 in 4-bit two's complement
    b = 4'b______;   // -8 in 4-bit two's complement
    c = 4'b______;   // -1 in 4-bit two's complement
    
    $display("a = %d", a);
    $display("b = %d", b);
    $display("c = %d", c);
    $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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

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