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

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

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

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

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

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

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

  • 4'b1010 — 4 بت، ثنائي 1010 (عشري 10)
  • 8'd255 — 8 بت، عشري 255 (ثنائي 11111111)
  • 16'hFF — 16 بت، سداسي عشر FF (ثنائي 0000000011111111)
  • 3'b1 — 3 بت، ثنائي 001 (البتات اليسرى مملوءة بالأصفار)

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

reg [7:0] data;

data = 8'b10101010;   // 8 بت، ثنائي 10101010
data = 8'd170;        // 8 بت، عشري 170
data = 8'hAA;         // 8 بت، سداسي عشري AA

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

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

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

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

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

مع الحجم:

reg [7:0] data;
data = 8'b00000001;   // مسح: قيمة 1 بحجم 8 بت

حشو الأصفار (Zero Padding)

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

reg [7:0] data;
data = 4'b1010;    // تصبح 8'b00001010
challenge icon

التحدي

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

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

  1. قم بتعيين a إلى رقم ثنائي مكون من 8 بتات للقيمة العشرية 170 (الثنائي 10101010)
  2. قم بتعيين b إلى رقم ثنائي مكون من 4 بتات للقيمة العشرية 12 (الثنائي 1100)
  3. قم بتعيين c إلى رقم سداسي عشري مكون من 16 بت للقيمة العشرية 255 (سداسي عشري FF)

ورقة مرجعية

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

  • bits — عدد البتات
  • ' — فاصل الفاصلة العليا المطلوب
  • formatb (ثنائي)، d (عشري)، h (سداسي عشري)، o (ثماني)
  • value — الرقم الفعلي
reg [7:0] data;

data = 8'b10101010;   // 8 بتات، ثنائي
data = 8'd170;        // 8 بتات، عشري
data = 8'hAA;         // 8 بتات، سداسي عشري (الثلاثة متساوية)

بدون تحديد الحجم، يفترض Verilog تلقائيًا 32 بت، مما قد يؤدي إلى سلوك غير متوقع. يتم ملء البتات اليسرى بالأصفار عندما تكون القيمة أصغر من الحجم المعلن:

reg [7:0] data;
data = 4'b1010;    // تصبح 8'b00001010

جرّب بنفسك

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اختبر نفسك

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

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