المصفوفات
جزء من قسم الأساسيات في رحلة 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
| Vector | Array | |
|---|---|---|
| ما هو | 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` أولية خاصة
التحدي
أكمل الكود أدناه لإنشاء array يُخزّن 4 قيم اختبار.
ما يجب القيام به:
- قم بـ
Declareلـarrayيُسمىtest_data- استخدم نوع الـ
dataمن نوعreg(becauseأنهstoresالـvaluesفيtestbench) - يجب أن يكون
eachعنصر بعرض 8bits([7:0]) - يجب أن يحتوي الـ
arrayعلى 4elements([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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة