المتجهات
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 9 من 90.
الـ vector هو wire أو reg متعدد الـ bits. بدلاً من single bit، تتيح لك الـ vectors التعامل مع buses من الـ data. وهو عبارة عن مجموعة من الـ bits المجمعة معاً.
ملاحظة: المتجه (vector) ليس نوع بيانات منفصل. إنه ببساطة نسخة متعددة البتات (multi-bit) من wire أو reg.
wire single; // بت واحد
wire [7:0] bus; // متجه 8 بت (بتات 7 نزولاً إلى 0)من أجل الإعلان عن vector، تُستخدم الصيغة [MSB:LSB] حيث MSB هو الـ bit الأكثر أهمية (most significant bit) و LSB هو الأقل أهمية (least significant).
wire [3:0] a; // متجه wire بـ 4 بت
reg [7:0] data; // متجه reg بـ 8 بت
wire [15:0] addr; // متجه wire بـ 16 بتالوصول إلى الـ bits
عندما تصل إلى bits فردية أو شرائح من vector، فإنك تستخدم أعدادًا عشرية لمواضع الـ bit (الفهارس) وقيمًا binary (0 أو 1) لعمليات التعيين (assignments).
هذا لأن موضع الـ bit هو موقع (مثل العنوان)، والذي يتم التعبير عنه بطبيعته كعدد عشري، بينما القيمة المخزنة في ذلك الـ bit يمكن أن تكون 0 أو 1 فقط — وهو خيار binary.
على سبيل المثال، data[0] تعني "بت رقم صفر"، و = 1 تعني "اجعله عاليًا (high)." إسناد عدد عشري مثل 75 إلى bit واحد لا يقوم بتخزين 75 — حيث يُبقي Verilog ضمنيًا على البت الأدنى فقط — لذا اكتب دائمًا 0 أو 1 بشكل صريح.
reg [7:0] data;
data = 170;
data[0] = 1; // تعيين LSB إلى 1
data[7] = 0; // تعيين MSB إلى 0
data[3:1] = 3'b101; // Set bits 3,2,1 to 101 (binary remains)ترتيب الـ bit
ترتيب الـ bits مهم:
wire [3:0] a; // a[3] هو MSB، a[0] هو LSB
wire [0:3] b; // b[0] هو MSB، b[3] هو LSB (أقل شيوعًا)يستخدم معظم المصممين تنسيق [MSB:LSB] حيث يكون MSB على اليسار.
تعيين القيم
reg [3:0] a;
a = 10;
a = 5;
a = 3; Vector Slices
يمكنك الوصول إلى نطاق من الـ bits:
reg [15:0] word;
word[15:8] = 255; // تعيين البايت العلوي (8'hFF = 255)
word[7:0] = 0; // تعيين البايت السفلي (8'h00 = 0)
word[3:1] = 3'b101; // Assign a slice التحدي
الموديل (module) أدناه يحتاج إلى تصريحات المتجهات (vector).
ما يجب القيام به:
- قم بتغيير كل input و output لتكون متجهات (vector) بعرض 8-bit.
جرّب بنفسك
module vector_example(
input a, // غيّر إلى متجه 8-بت [7:0]
input b, // غيّر إلى متجه 8-بت [7:0]
output c // غيّر إلى متجه 8-بت [7:0]
);
assign c = a & b;
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة