المصفوفات
جزء من قسم الأساسيات في رحلة 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) |
المتجه هو قيمة واحدة تتكون من عدة بتات.
المصفوفة هي قيم متعددة، لكل منها بتاتها الخاصة.
ملاحظات مهمة
- المصفوفات غير قابلة للتوليف في العديد من الأدوات عند استخدامها بأحجام كبيرة
- تُستخدم المصفوفات غالبًا في بيئات اختبار
- بالنسبة إلى ذاكرة العتاد، استخدم بدائيات ذاكرة خاصة
التحدي
أكمل الشيفرة أدناه لإنشاء مصفوفة تخزّن 4 قيم اختبار.
ما يجب فعله:
- صرّح عن مصفوفة باسم
test_data- استخدم نوع البيانات
reg(لأنه يخزّن القيم في منصة اختبار) - يجب أن يكون عرض كل عنصر 8 بتات (
[7:0]) - يجب أن تحتوي المصفوفة على 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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4العوامل الجزء 1
العوامل الحسابيةعامل باقي القسمةعوامل المقارنةمراجعة - الرياضيات البسيطةالعوامل على مستوى البتات7التعيين والبوابات
التعيين المستمرالتعيين باستخدام العواملالعناصر الأساسية المدمجة للبواباتبوابات AND وOR وNOTبوابات XOR وXNORمراجعة - دائرة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الربطالمعامل الشرطيمراجعة - تحدي المعاملات11الحلقات التكرارية
حلقة Forحلقة Whileحلقة التكرارحلقة لا نهائيةتعليمة التعطيلمراجعة - أنماط الحلقات التكرارية3نظام الأعداد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ الإدخال والإخراج ثنائية الاتجاهإنشاء مثيل للوحدةربط المنافذ حسب الاسمربط المنافذ حسب الترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة الحساسيةإسناد حاجزإسناد غير حاجزمراجعة - Always مقابل Initial15متحكّم إشارات المرور
تعريف الحالاتمنطق آلة الحالاتتدرّب بنفسك: مترجم Verilog عبر الإنترنت