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

Arrays

جزء من قسم الأساسيات في رحلة 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 أعداد صحيحة

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

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

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 عشري

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

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

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

ملاحظات مهمة

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

التحدي

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

ما يجب فعله: 

  1. Declare array تُسمّى test_data
    1. استخدم reg data type (because تُخزّن values في testbench)
    2. كل عنصر should يكون 8 bits wide ([7:0])
    3. يجب أن يحتوي array على 4 elements ([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 عبر الإنترنت