Menu
CoddyTech

الأعداد السالبة

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

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

  • 0 = عدد موجب
  • 1 = عدد سالب

كيفية حساب المتمم الثنائي

لإيجاد المتمم الثنائي لعدد:

  1. اكتب العدد الموجب بالنظام الثنائي
  2. اقلب جميع البتات (يتحول 0 إلى 1، و1 إلى 0)
  3. أضف 1

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

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

تمثيل -5 بمتمم 2 باستخدام 4 بتات هو 4'b1011

كتابة الأعداد السالبة في Verilog

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

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

بالنسبة إلى الأعداد الثنائية محددة الحجم، يجب كتابة قيمة المتمم الثنائي:

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

ذو إشارة مقابل غير ذي إشارة

افتراضيًا، تكون إشارات reg وwire غير موقعة. للتعامل مع الأعداد السالبة، صرّح عن الإشارات على أنها 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، يتعامل reg أو wire مع كل قيمة على أنها موجبة
  • تعمل حسابات متمّم الاثنين تلقائيًا عند استخدام signed
  • يحدد البت الأكثر أهمية الإشارة: 1 = سالب، 0 = موجب
challenge icon

التحدي

أكمل الشيفرة بكتابة قيم المتمم الثنائي الصحيحة.

ما المطلوب:

  1. عيّن a إلى -3 باستخدام تمثيل المتمم الثنائي ذي 4 بتات
  2. عيّن b إلى -8 باستخدام تمثيل المتمم الثنائي ذي 4 بتات
  3. عيّن c إلى -1 باستخدام تمثيل المتمم الثنائي ذي 4 بتات

جرّب بنفسك

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 عبر الإنترنت