الأعداد السالبة
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 16 من 90.
في لغة Verilog، يتم تمثيل الأرقام السالبة باستخدام تنسيق المتمم الثنائي (two's complement). المتمم الثنائي هو طريقة لتمثيل كل من الأرقام الموجبة والسالبة في النظام الثنائي. تشير الخانة الأكثر أهمية (MSB) إلى الإشارة:
- 0 = رقم موجب
- 1 = رقم سالب
كيفية حساب المتمم لاثنين
لإيجاد المتمم لاثنين لعدد ما:
- اكتب العدد الموجب بالنظام الثنائي
- اقلب جميع البتات (0 يصبح 1، و1 يصبح 0)
- أضف 1
مثال: تمثيل -5 في 4 بتات
| الخطوة | العملية | النتيجة |
|---|---|---|
| 1 | العدد 5 الموجب بالثنائي | 0101 |
| 2 | قلب جميع البتات | 1010 |
| 3 | إضافة 1 | 1011 |
-5 في متمم الاثنين بـ 4 بتات هو <strong>4'b1011</strong>
كتابة الأرقام السالبة في Verilog
يمكنك كتابة الأرقام السالبة مباشرة باستخدام التنسيق العشري:
reg signed [3:0] a;
a = -5; // تستخدم Verilog تلقائياً متمم الاثنين (two's complement)بالنسبة للأرقام الثنائية ذات الحجم المحدد، يجب عليك كتابة قيمة المتمم الثنائي (two's complement):
a = 4'b1011; // هذا هو -5 في المتمم الثنائي المكون من 4 بتاتالموقعة مقابل غير الموقعة (Signed vs Unsigned)
بشكل افتراضي، يعامل Verilog الأرقام على أنها غير موقعة (unsigned). للعمل مع الأرقام السالبة، قم بالتصريح عن الإشارات كـ 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 جميع القيم على أنها موجبة
- الحساب بنظام المتمم الثنائي يعمل تلقائياً عند استخدام
signed - البت الأكثر أهمية (MSB) يحدد الإشارة: 1 = سالب، 0 = موجب
التحدي
أكمل الكود بكتابة قيم المتمم الثنائي (two's complement) الصحيحة.
ما يجب فعله:
- قم بتعيين
aإلى -3 باستخدام نظام المتمم الثنائي المكون من 4 بت - قم بتعيين
bإلى -8 باستخدام نظام المتمم الثنائي المكون من 4 بت - قم بتعيين
cإلى -1 باستخدام نظام المتمم الثنائي المكون من 4 بت
ورقة مرجعية
في لغة Verilog، تستخدم الأرقام السالبة تنسيق المتمم الثنائي (two's complement). تشير الخانة الأكثر أهمية (MSB) إلى الإشارة: 0 = موجب، 1 = سالب.
حساب المتمم الثنائي:
- اكتب الرقم الموجب بالنظام الثنائي
- اقلب جميع الخانات (bits)
- أضف 1
مثال: -5 في 4 خانات ← 0101 ← 1010 ← 1011 = 4'b1011
قم بتعريف الإشارات كـ signed للتعامل مع الأرقام السالبة:
reg signed [3:0] negative; // يمكنه تخزين من -8 إلى 7
reg [3:0] positive; // يمكنه تخزين من 0 إلى 15قم بتعيين القيم السالبة مباشرة أو عبر المتمم الثنائي:
reg signed [3:0] a;
a = -5; // تقوم Verilog تلقائياً باستخدام المتمم الثنائي
a = 4'b1011; // مكافئ: -5 بنظام المتمم الثنائي المكون من 4 خاناتالنطاق لـ N-بت الموقعة (signed): -2^(N-1) إلى 2^(N-1) - 1 (على سبيل المثال، 4 خانات: -8 إلى 7).
جرّب بنفسك
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استدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة