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

المتجهات

جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 9 من 90.

المتجه (vector) هو عبارة عن wire أو reg متعدد البتات. بدلاً من بت واحد، تتيح لك المتجهات العمل مع نواقل (buses) البيانات. وهي عبارة عن مجموعة من البتات المجمعة معاً.

ملاحظة: المتجه (vector) ليس نوع بيانات منفصل. إنه ببساطة نسخة متعددة البتات من wire أو reg.

wire single;        // بت واحد
wire [7:0] bus;     // متجه 8 بت (البتات من 7 إلى 0)

للإعلان عن متجه (vector)، تستخدم الصيغة [MSB:LSB] حيث MSB هو البت الأكثر أهمية (most significant bit) و LSB هو البت الأقل أهمية (least significant bit).

wire [3:0] a;       // متجه wire مكون من 4 بتات
reg [7:0] data;     // متجه reg مكون من 8 بتات
wire [15:0] addr;   // متجه wire مكون من 16 بت

الوصول إلى البتات

عندما تصل إلى بتات فردية أو شرائح من متجه، فإنك تستخدم أرقاماً عشرية لمواقع البتات (الفهارس) وقيماً ثنائية (0 أو 1) للتعيينات.

هذا لأن موضع البت هو موقع (مثل العنوان)، والذي يتم التعبير عنه بشكل طبيعي كرقم عشري، بينما القيمة المخزنة في ذلك البت يمكن أن تكون فقط 0 أو 1 — وهو خيار ثنائي.

على سبيل المثال، data[0] تعني "البت رقم صفر"، و = 1 تعني "ضبطه على القيمة العالية". لا يمكنك تعيين رقم عشري مثل 75 لبت واحد لأن البت لا يتسع لقيم أخرى غير 0 أو 1.

reg [7:0] data;

data = 170;  
data[0] = 1;             // تعيين LSB إلى 1
data[7] = 0;             // تعيين MSB إلى 0
data[3:1] = 3'b101;      // تعيين البتات 3، 2، 1 إلى 101 (يبقى النظام الثنائي كما هو)

ترتيب البتات (Bit Order)

ترتيب البتات مهم:

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)

يمكنك الوصول إلى نطاق من البتات:

reg [15:0] word;

word[15:8] = 255;        // تعيين البايت العلوي (8'hFF = 255)
word[7:0]  = 0;          // تعيين البايت السفلي (8'h00 = 0)
word[3:1]  = 3'b101;     // تعيين شريحة 
challenge icon

التحدي

يحتاج الموديول أدناه إلى تعريفات للمتجهات (vector declarations). 

ما يجب فعله: 

  1. قم بتغيير كل input و output لتكون متجهات بحجم 8-bit.

ورقة مرجعية

الـ vector (المتجه) هو عبارة عن wire أو reg متعدد البتات، يتم تعريفه باستخدام صيغة [MSB:LSB]:

wire [7:0] bus;     // متجه wire بحجم 8 بت
reg [15:0] addr;    // متجه reg بحجم 16 بت

الوصول إلى البتات الفردية والأجزاء (slices):

reg [7:0] data;

data[0] = 1;          // تعيين LSB إلى 1
data[7] = 0;          // تعيين MSB إلى 0
data[3:1] = 3'b101;   // تعيين البتات 3، 2، 1 باستخدام النظام الثنائي

ترتيب البتات: [MSB:LSB] هو العرف القياسي (على سبيل المثال، [7:0] تعني أن البت 7 هو MSB، والبت 0 هو LSB).

جرّب بنفسك

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اختبر نفسك

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

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