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

المصفوفات

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

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

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

الإعلان عن الـ arrays

الصياغة: <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 أعداد صحيحة

الرقم الموجود بين القوسين [ ] هو حجم الـ array، وليس اتساع الـ bit.

الوصول إلى عناصر Array

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

تُعد المصفوفات (arrays) مفيدة جداً في بيئات الاختبار (testbench) لتخزين بيانات الاختبار (test_data).

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

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

reg [7:0] matrix [0:3][0:3];   // مصفوفة 4x4 من قيم 8-بت

matrix[0][0] = 255;            // 8'hFF = 255 عشري
matrix[2][1] = 85;             // 8'h55 = 85 عشري

Array مقابل Vector

 VectorArray
ما هوwire أو reg متعدد الـ bitsمجموعة من القيم المتعددة
الصياغة (Syntax)[MSB:LSB][size]
مثالreg [7:0] data;reg [7:0] mem [0:255];
الوصولdata[3] (bit 3)mem[3] (العنصر 3)

المتجه (vector) هو قيمة واحدة ذات عدة bits.
المصفوفة (array) هي قيم متعددة، لكل منها bits الخاصة بها.

ملاحظات مهمة

  • الـ `arrays` غير قابلة للتجميع (non-synthesizable) في العديد من الأدوات عند استخدامها بأحجام كبيرة
  • تُستخدم الـ `arrays` غالبًا في الـ `testbench`
  • بالنسبة لـ `memory` العتاد البرمجي (hardware)، استخدم عناصر `memory` أولية خاصة
challenge icon

التحدي

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

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

  1. قم بـ Declare لـ array يُسمى test_data
    1. استخدم نوع الـ data من نوع reg (because أنه stores الـ values في testbench)
    2. يجب أن يكون each عنصر بعرض 8 bits ([7:0])
    3. يجب أن يحتوي الـ array على 4 elements ([0:3])

جرّب بنفسك

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

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

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

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