Menu
CoddyTech

المصفوفات

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

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

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

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

ملاحظات مهمة

  • مصفوفة reg قابلة للتوليف: تنشئ أدوات التوليف ذواكر مثل RAM وملفات المسجلات من مصفوفات مثل reg [7:0] mem [0:255];
  • تُستخدم المصفوفات أيضًا في مقاعد الاختبار لتخزين بيانات الاختبار
challenge icon

التحدي

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

ما المطلوب: 

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

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

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

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