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

Sized Numbers

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

توجد طريقة لتعريف عدد بحجم محدد في Verilog. يُسمّى عددًا محدد الحجم. وهذا مفيد لأنه يمنع الالتباس بشأن عدد البتات التي يتكوّن منها العدد، ويضمن أن تتصرّف أجهزتك كما هو متوقّع تمامًا.

يتبع الرقم المحدد الحجم هذا التنسيق: [bits]'[format][value]

  • <strong>bits</strong>: عدد البتات (على سبيل المثال، 8)
  • <strong>'</strong>: فاصلة عليا تفصل الحجم عن التنسيق (مطلوبة)
  • <strong>format</strong>: أساس العدد: b للنظام الثنائي، وd للنظام العشري، وh للنظام السداسي عشري، أو o للنظام الثماني
  • <strong>value</strong>: العدد الفعلي (على سبيل المثال، 1010)

على سبيل المثال:

  • 4'b1010: ‏4 bits، binary 1010 ‏(decimal 10)
  • 8'd255: ‏8 bits، decimal 255 ‏(binary 11111111)
  • 16'hFF: ‏16 bits، hex FF ‏(binary 0000000011111111)
  • 3'b1: ‏3 bits، binary 001 ‏(تُملأ bits الموجودة على اليسار بالأصفار)

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

reg [7:0] data;

data = 8'b10101010;   // 8 bits, binary 10101010
data = 8'd170;        // 8 بت، عشري 170
data = 8'hAA;         // 8 bits, hex AA

تُسنِد all three أمثلة القيمة نفسها إلى data.

لماذا يهم الحجم

من دون تحديد الحجم:

reg [7:0] data;
data = 1;        // ماذا يعني هذا؟ 1 بت؟ 8 بتات؟

يفترض Verilog أن الأعداد الصغيرة تتكون من 32 بتًا افتراضيًا، مما قد يسبب مشكلات.

مع تحديد الحجم:

reg [7:0] data;
data = 8'b00000001;   // Clear: 8-bit value 1

الحشو بالأصفار

عندما تُسنِد قيمة أصغر إلى متجه أكبر، يملأ Verilog البتات الموجودة على اليسار بالأصفار:

reg [7:0] data;
data = 4'b1010;    // Becomes 8'b00001010
challenge icon

التحدي

أكمل الكود بكتابة الأرقام ذات الأحجام الصحيحة.

What يجب فعله:

  1. عيّن a إلى رقم binary بحجم 8-bit للقيمة decimal 170 (binary 10101010)
  2. عيّن b إلى رقم binary بحجم 4-bit للقيمة decimal 12 (binary 1100)
  3. عيّن c إلى رقم hex بحجم 16-bit للقيمة decimal 255 (hex FF)

جرّب بنفسك

module sized_challenge;
  reg [7:0] a;
  reg [3:0] b;
  reg [15:0] c;
  
  initial begin
    a = ______;   // ثنائي 8 بت لـ 170 (10101010)
    b = ______;   // ثنائي 4 بت لـ 12 (1100)
    c = ______;   // سداسي عشري 16 بت لـ 255 (FF)
    
    $display("a = %b", a);
    $display("b = %b", b);
    $display("c = %h", c);
    $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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

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