Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الأعداد غير محددة الحجم

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

الرقم غير محدد الحجم (unsized number) هو رقم يُكتب دون تحديد عدد البتات التي يحتوي عليها. عندما تكتب رقماً بدون بادئة حجم، يفترض Verilog أنه 32 بت بشكل افتراضي.

a = 'b1010;        // غير محدد الحجم: يعامل Verilog هذا على أنه 32 بت
a = 32'b1010;    // نفس ما ورد أعلاه، ولكن بشكل صريح

تستخدم الأرقام غير محددة الحجم التنسيق والقيمة فقط: [format][value]

  • <strong>format</strong> — أساس الرقم: b للثنائي، d للعشري، h للست عشري، أو o للثماني
  • <strong>value</strong> — الرقم الفعلي (على سبيل المثال، 1010)

لا تزال الفاصلة العليا ' مطلوبة بين التنسيق والقيمة، ولكن لا يوجد عدد بتات قبلها.

  • 'b1010 — ثنائي 1010 بحجم 32 بت
  • 'd255 — عشري 255 بحجم 32 بت
  • 'hFF — سداسي عشري FF بحجم 32 بت
  • 'b1 — ثنائي 1 بحجم 32 بت (مع 31 صفراً بادئاً)

مثال على الكود:

reg [7:0] data;

initial begin
  data = 1010;      // غير محدد الحجم: قيمة 32 بت (قد يتسبب في تحذير)
  data = 'd255;     // غير محدد الحجم: عشري 32 بت 255
  data = 'hFF;      // غير محدد الحجم: سداسي عشري 32 بت FF
end

غير محدد الحجم مقابل محدد الحجم

 غير محدد الحجممحدد الحجم
مثال1010 أو 'd2558'b1010 أو 8'd255
عرض البتات32 بت (افتراضي)صريح (كما هو محدد)
الفاصلة العليامطلوبة مع التنسيقمطلوبة
متى يُستخدمأكواد منصة الاختبار (testbench) البسيطةتعيينات العتاد (Hardware assignments)

مشكلة محتملة

يمكن أن تتسبب الأرقام غير المحددة الحجم في سلوك غير متوقع عند تعيينها لسجلات أصغر:

reg [3:0] small;
small = 'b1111;      // قيمة 32 بت، لكنها تناسب 4 بتات (جيد)
small = 'b10000;     // قيمة 32 بت، لكنها كبيرة جداً! (تحذير)

يقوم المثال الثاني بتعيين قيمة 32 بت 10000 إلى سجل 4 بت. يتم الاحتفاظ بالبتات الأربعة الدنيا فقط (0000)، وهو ما قد لا يكون ما تتوقعه.

متى تستخدم الأرقام غير محددة الحجم

تعتبر الأرقام غير محددة الحجم ملائمة لـ:

  • الأرقام البسيطة في منصات الاختبار (testbenches)
  • عدادات الحلقات
  • جمل $display

بالنسبة لتعيينات العتاد الفعلية، استخدم أرقاماً محددة الحجم لتكون صريحاً وتتجنب التحذيرات.

challenge icon

التحدي

في الكود أدناه، بعض الأرقام غير محددة الحجم. قم بتغييرها إلى أرقام محددة الحجم (8 بت) لتجنب التحذيرات.

ما يجب القيام به:

  1. قم بتغيير a إلى رقم ثنائي بحجم 8 بت للقيمة 1010
  2. قم بتغيير b إلى رقم عشري بحجم 8 بت للقيمة 255
  3. قم بتغيير c إلى رقم سداسي عشري بحجم 8 بت للقيمة FF

ورقة مرجعية

الأرقام غير محددة الحجم في Verilog تكون افتراضياً 32 بت. الصيغة: '[format][value]

'b1010   // ثنائي 32 بت
'd255    // عشري 32 بت
'hFF     // ستة عشري 32 بت

الأرقام محددة الحجم تستخدم [bits]'[format][value]:

8'b1010  // ثنائي 8 بت
8'd255   // عشري 8 بت
8'hFF    // ستة عشري 8 بت

تخصيص رقم غير محدد الحجم لسجل (register) أصغر يحتفظ فقط بالبتات الدنيا — استخدم الأرقام محددة الحجم لتخصيصات العتاد لتجنب التحذيرات والاقتطاع غير المتوقع.

جرّب بنفسك

module unsized_challenge;
  reg [7:0] a, b, c;
  
  initial begin
    a = 'b1010;      // Change to sized (8-bit binary)
    b = 'd255;     // تغيير إلى محدد الحجم (8-bit decimal)
    c = 'hFF;      // Change to sized (8-bit hex)
    
    $display("a = %b", a);
    $display("b = %b", b);
    $display("c = %b", c);
    $finish;
  end
endmodule
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات