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

Unsized Numbers

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

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

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

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

  • <strong>format</strong>: أساس الرقم: b للنظام binary، وd للنظام decimal، و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;     // Unsized: 32-bit decimal 255
  data = 'hFF;      // غير محدد الحجم: سداسي عشري 32 بت FF
end

Unsized مقابل Sized

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

مشكلة محتملة

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

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

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

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

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

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

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

challenge icon

التحدي

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

ما يجب فعله:

  1. غيّر a إلى رقم Change ثنائي بحجم 8 bits من أجل 1010
  2. غيّر b إلى رقم Change عشري بحجم 8 bits من أجل 255
  3. غيّر c إلى رقم Change سداسي عشري بحجم 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اختبر نفسك

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

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

تدرّب بنفسك: مترجم Verilog عبر الإنترنت