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

المتجهات

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

التحدي

الموديل (module) أدناه يحتاج إلى تصريحات المتجهات (vector). 

ما يجب القيام به: 

  1. قم بتغيير كل 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
quiz iconاختبر نفسك

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

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