الأعداد السالبة
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 16 من 90.
في Verilog، يتم تمثيل الأرقام السلبية باستخدام صيغة two's complement (المتمم إلى اثنين). المتمم إلى اثنين هو طريقة لتمثيل كل من الأرقام الموجبة والسالبة بالنظام الثنائي. تشير الخانة الأكثر أهمية (MSB) إلى الإشارة:
- 0 = عدد موجب
- 1 = عدد سالب
كيفية حساب المتمم للزوج (Two's Complement)
لإيجاد المتمم للزوج لرقم ما:
- اكتب الرقم الموجب بالظام الثنائي (binary)
- اعكس جميع البتات (0 يصبح 1، و 1 يصبح 0)
- أضف 1
مثال: تمثيل -5 في 4 bit
| الخطوة | العملية | النتيجة |
|---|---|---|
| 1 | 5 positive بالثنائي | 0101 |
| 2 | قلب جميع الـ bit | 1010 |
| 3 | إضافة 1 | 1011 |
-5 في 4-bit two's complement هو <strong>4'b1011</strong>
كتابة الأرقام السالبة في Verilog
يمكنك كتابة الأرقام السالبة مباشرة باستخدام التنسيق العشري (decimal):
reg signed [3:0] a;
a = -5; // Verilog يستخدم تلقائيًا المتمم الثنائيبالنسبة للأرقام الثنائية المحددة الحجم (sized binary numbers)، يجب عليك كتابة قيمة المتمم إلى اثنين (two's complement):
a = 4'b1011; // This is -5 in 4-bit two's complementUnsigned مقابل Signed
بشكل افتراضي، يتعامل Verilog مع الأرقام على أنها unsigned. للعمل مع الأعداد السالبة، قم بالإعلان عن الإشارات كـ signed:
reg signed [3:0] negative; // يمكنه تخزين من -8 إلى 7
reg [3:0] positive; // يمكنه تخزين من 0 إلى 15نطاق الأعداد الموقّعة (Signed)
بالنسبة لـ N من الـ bits، يمكن للعدد الـ signed أن يمثل:
- الحد الأدنى: -2^(N-1)
- الحد الأقصى: 2^(N-1) - 1
| Bits | النطاق |
|---|---|
| 4 bits | -8 إلى 7 |
| 8 bits | -128 إلى 127 |
| 16 bits | -32768 إلى 32767 |
ملاحظات هامة
- استخدم الكلمة المفتاحية
signedللتمكين من التعامل مع الأعداد السالبة (negative) - من دون
signed، يتعاملVerilogمع جميع القيم على أنها موجبة (positive)
- يعمل حساب المتمم للثنائين تلقائيًا عند استخدام
signed - يحدد البت الأكثر أهمية (MSB) الإشارة: 1 = سالب (negative)، 0 = موجب (positive)
التحدي
أكمل الكود بكتابة قيم M2's complement (المتمم إلى اثنين) الصحيحة.
ما يجب عليك فعله:
- عين
aإلى -3 باستخدام النظام الثنائي 4-bit two's complement - عين
bإلى -8 باستخدام النظام الثنائي 4-bit two's complement - عين
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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة