Menu
CoddyTech

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

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

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

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

  • bits: عدد البِتّات (على سبيل المثال، 8)
  • ': فاصلة عليا تفصل الحجم عن التنسيق (مطلوبة)
  • format: أساس العدد: b للثنائي، وd للعشري، وh للسداسي عشري، أو o للثماني
  • value: العدد الفعلي (على سبيل المثال، 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 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 بت افتراضيًا، وقد يسبب ذلك مشكلات.

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

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

التحدي

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

ما المطلوب:

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

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

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

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

تحقق من التحويل: محوّل أنظمة الأعداد