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 لعدد:
- اكتب العدد positive بالنظام الثنائي
- اعكس كل bit (يصبح 0 هو 1، ويصبح 1 هو 0)
- أضف 1
مثال: تمثيل -5 باستخدام 4 bit
| الخطوة | العملية | النتيجة |
|---|---|---|
| 1 | Positive 5 بالنظام الثنائي | 0101 |
| 2 | قلب جميع bit | 1010 |
| 3 | إضافة 1 | 1011 |
-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
التحدي
أكمل الكود بكتابة قيم two'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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logicتدرّب بنفسك: مترجم Verilog عبر الإنترنت