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

الأعداد محددة الحجم

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

هناك طريقة للإعلان عن رقم بحجم محدد في Verilog. وتسمى sized number (رقماً محدد الحجم). وهي مفيدة لأنها تمنع التلبيس بشأن عدد الـ bits التي يمتلكها رقمك وتضمن تصرف العتاد (hardware) الخاص بك تماماً كما هو متوقع.

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

  • <strong>bits</strong> — عدد الـ bits (على سبيل المثال، 8)
  • <strong>'</strong> — فاصلة عليا تفصل بين الحجم والتنسيق (مطلوبة)
  • <strong>format</strong> — أساس الرقم: b للثنائي (binary)، أو d للعشري (decimal)، أو h للست عشري (hexadecimal)، أو 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 (الخانات جهة اليسار تُملأ بالأصفار)

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

reg [7:0] data;

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

تعين جميع الأمثلة الثلاثة نفس القيمة لـ data.

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

بدون حجم:

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

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

مع الحجم:

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

Zero Padding

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

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

التحدي

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

ما يجب فعله:

  1. قم بضبط a على رقم ثنائي ذي 8 bits للمقدار العشري 170 (الثنائي 10101010)
  2. قم بضبط b على رقم ثنائي ذي 4 bits للمقدار العشري 12 (الثنائي 1100)
  3. قم بضبط c على رقم سداسي عشر ذي 16 bit للمقدار العشري 255 (السداسي عشر 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اختبر نفسك

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

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