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

المصفوفات

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

تتيح لك المصفوفة تخزين قيم متعددة في متغير واحد. يمكن الوصول إلى كل عنصر في المصفوفة باستخدام فهرسه.

ملاحظة: المصفوفة ليست نوع بيانات منفصلًا. إنها مجموعة من أنواع wire أو reg أو integer أو real.

تعريف المصفوفات

الصياغة: <data_type> <name> [<size>];

reg [7:0] memory [0:255];   // 256 بايت من الذاكرة (كل منها 8 بت)
reg data [0:7];              // 8 سجلات أحادية البت
wire [3:0] bus [0:3];       // 4 ناقلات، كل منها بعرض 4 بت
integer counters [0:9];      // 10 أعداد صحيحة

الرقم الموجود بين القوسين [ ] هو حجم المصفوفة، وليس عرض البِتّات.

الوصول إلى عناصر المصفوفة

reg [7:0] memory [0:3];
memory[0] = 165;        // عشري 165
memory[1] = 90;         // عشري 90
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]);  // يطبع: 255

تُعدّ المصفوفات مفيدة جدًا في بيئات الاختبار لتخزين بيانات الاختبار.

المصفوفات متعددة الأبعاد

يمكنك إنشاء مصفوفات ذات أبعاد متعددة:

reg [7:0] matrix [0:3][0:3];   // مصفوفة 4x4 من قيم 8-بت
matrix[0][0] = 255;            // 8'hFF = 255 عشري
matrix[2][1] = 85;             // 8'h55 = 85 عشري

المصفوفة مقابل المتجه

 المتجهالمصفوفة
ماهيتهسلك أو reg متعدد البتاتمجموعة من قيم متعددة
بناء الجملة[MSB:LSB][size]
مثالreg [7:0] data;reg [7:0] mem [0:255];
الوصولdata[3] (البت 3)mem[3] (العنصر 3)

المتجه هو قيمة واحدة تتكون من عدة بتات.
المصفوفة هي قيم متعددة، لكل منها بتاتها الخاصة.

ملاحظات مهمة

  • المصفوفات غير قابلة للتوليف في العديد من الأدوات عند استخدامها بأحجام كبيرة
  • تُستخدم المصفوفات غالبًا في بيئات اختبار
  • بالنسبة إلى ذاكرة العتاد، استخدم بدائيات ذاكرة خاصة
challenge icon

التحدي

أكمل الشيفرة أدناه لإنشاء مصفوفة تخزّن 4 قيم اختبار.

ما يجب فعله: 

  1. صرّح عن مصفوفة باسم test_data
    1. استخدم نوع البيانات reg (لأنه يخزّن القيم في منصة اختبار)
    2. يجب أن يكون عرض كل عنصر 8 بتات ([7:0])
    3. يجب أن تحتوي المصفوفة على 4 عناصر ([0:3])

جرّب بنفسك

module arrays;
  
  // أعلن عن مصفوفة تسمى test_data
  // يجب أن تحتوي على 4 عناصر، كل منها بعرض 8 بت
  // استخدم نوع البيانات reg (لأنه يخزن القيم في testbench)

  
  integer i;
  
  initial begin
    test_data[0] = 170;   
    test_data[1] = 240;    
    test_data[2] = 204;    
    test_data[3] = 15;   
    
    for (i = 0; i < 4; i = i + 1) begin
      $display("test_data[%0d] = %b", i, test_data[i]);
    end
    $finish;
  end
  
endmodule
quiz iconاختبر نفسك

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

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

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