الأعداد السالبة
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 16 من 90.
في Verilog، تُمثَّل الأعداد السالبة باستخدام تنسيق متمّم الاثنين. ومتمّم الاثنين هو طريقة لتمثيل الأعداد الموجبة والسالبة بالنظام الثنائي. يشير البِت الأكثر أهمية (MSB) إلى الإشارة:
- 0 = عدد موجب
- 1 = عدد سالب
كيفية حساب المتمم الثنائي
لإيجاد المتمم الثنائي لعدد:
- اكتب العدد الموجب بالنظام الثنائي
- اقلب جميع البتات (يتحول 0 إلى 1، و1 إلى 0)
- أضف 1
مثال: تمثيل -5 باستخدام 4 بتات
| الخطوة | العملية | النتيجة |
|---|---|---|
| 1 | العدد الموجب 5 بالنظام الثنائي | 0101 |
| 2 | اقلب جميع البتات | 1010 |
| 3 | أضف 1 | 1011 |
تمثيل -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 = موجب
التحدي
أكمل الشيفرة بكتابة قيم المتمم الثنائي الصحيحة.
ما المطلوب:
- عيّن
aإلى -3 باستخدام تمثيل المتمم الثنائي ذي 4 بتات - عيّن
bإلى -8 باستخدام تمثيل المتمم الثنائي ذي 4 بتات - عيّن
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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4العوامل الجزء 1
العوامل الحسابيةعامل باقي القسمةعوامل المقارنةمراجعة - الرياضيات البسيطةالعوامل على مستوى البتات7التعيين والبوابات
التعيين المستمرالتعيين باستخدام العواملالعناصر الأساسية المدمجة للبواباتبوابات AND وOR وNOTبوابات XOR وXNORمراجعة - دائرة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الربطالمعامل الشرطيمراجعة - تحدي المعاملات11الحلقات التكرارية
حلقة Forحلقة Whileحلقة التكرارحلقة لا نهائيةتعليمة التعطيلمراجعة - أنماط الحلقات التكرارية3نظام الأعداد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ الإدخال والإخراج ثنائية الاتجاهإنشاء مثيل للوحدةربط المنافذ حسب الاسمربط المنافذ حسب الترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة الحساسيةإسناد حاجزإسناد غير حاجزمراجعة - Always مقابل Initial15متحكّم إشارات المرور
تعريف الحالاتمنطق آلة الحالاتتدرّب بنفسك: مترجم Verilog عبر الإنترنت