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

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

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

الـ unsized number هو عدد يُكتب دون تحديد عدد الـ bits الخاصة به. عندما تكتب عدداً دون تحديد البادئة الحجمية، فإن Verilog يفترض أنه 32 bits افتراضياً.

a = 'b1010;        // Unsized: Verilog treats this as 32 bits
a = 32'b1010;    // نفس ما سبق، ولكن بشكل صريح

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

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

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

  • 'b1010 — `binary` بعرض 32-`bit` للقيمة 1010
  • 'd255 — `decimal` بعرض 32-`bit` للقيمة 255
  • 'hFF — `hex` بعرض 32-`bit` للقيمة FF
  • 'b1 — `binary` بعرض 32-`bit` للقيمة 1 (مع 31 أصفار بادئة)

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

reg [7:0] data;

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

Unsized مقابل Sized

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

مشكلة محتملة

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

reg [3:0] small;
small = 'b1111;      // 32-bit value, but fits in 4 bits (fine)
small = 'b10000;     // قيمة 32 بت، لكنها كبيرة جدًا! (تحذير)

المثال الثاني يخصص قيمة 32-bit وهي 10000 لسجل بحجم 4-bit. يتم الاحتفاظ فقط بـ 4 bits السفلى (0000)، وهو ما قد لا يكون ما تتوقعه.

متى تستخدم Unsized Numbers

تعتبر Unsized numbers مريحة بالنسبة لـ:

  • الأرقام البسيطة في testbenches
  • عدادات الحلقات (Loop counters)
  • تعليمات $display

بالنسبة لعمليات التعيين الفعلية في الأجهزة، استخدم sized numbers لتبدو صريحًا ولتتجنب التحذيرات.

challenge icon

التحدي

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

ما يجب فعله:

  1. Change a إلى رقم binary بحجم 8 bits للقيمة 1010
  2. Change b إلى رقم decimal بحجم 8 bits للقيمة 255
  3. Change c إلى رقم hex بحجم 8 bits للقيمة FF

جرّب بنفسك

module unsized_challenge;
  reg [7:0] a, b, c;
  
  initial begin
    a = 'b1010;      // Change to sized (8-bit binary)
    b = 'd255;     // غيّر إلى محدد الحجم (عشري 8 بت)
    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اختبر نفسك

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

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