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

ربط المنافذ بالترتيب

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

في الدرس السابق، تعلمت عن ربط المنافذ بالاسم (port mapping by name)، حيث قمت بتسمية كل توصيلة صراحة باستخدام .port(signal). الآن سنغطي الطريقة البديلة: ربط المنافذ بالترتيب (port mapping by order).

يقوم بتوصيل الـ `signals` بـ `ports` الموديول بناءً على **الترتيب** (`order`) الذي تظهر به في تعريف الموديول. كل ما عليك فعله هو إدراج الـ `signals` بين أقواس، وسيقوم Verilog بالمطابقة بينها واحداً تلو الآخر.

Syntax:

module_name instance_name (signal1, signal2, signal3);

يتصل الإشارة الأولية بالمنفذ الأول، والثانية بالمنفذ الثاني، وهكذا.

مثال

تعريف الـ module:

module or_gate (
  input in1,      // المنفذ الأول
  input in2,      // المنفذ الثاني
  output result   // المنفذ الثالث
);
  assign result = in1 | in2;
endmodule

Instantiation مع port mapping حسب order:

or_gate or1 (input_a, input_b, output_y);

هذا يقوم بتوصيل:

  • الإشارة الأولى (input_a) ← المنفذ الأول in1
  • الإشارة الثانية (input_b) ← المنفذ الثاني in2
  • الإشارة الثالثة (output_y) ← المنفذ الثالث result

Order Matters

مع تعيين `port` حسب `order` (الترتيب)، الترتيب أمر حاسم:

// الترتيب الصحيح
or_gate or1 (input_a, input_b, output_y);

// ترتيب خاطئ - الإشارات متصلة بالمنافذ الخاطئة!
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);

إذا قمت بالخلط في الـ `order`، فإن الـ `connections` ستنتقل إلى الـ `ports` الـ `wrong`. قد يكون من الصعب تصحيح أخطاء هذا الأمر لأن الكود يبدو `correct` للوهلة الأولى.

تعيين المنافذ بالحجم (By Name) مقابل الترتيب (By Order)

الميزةبالاسم (By Name)بالترتيب (By Order)
الـ Syntax.port(signal)signal1, signal2
هل الترتيب مهم؟لانعم
توضيح ذاتي؟نعملا
خطر الأخطاءمنخفضعالي
موصى به لـمعظم التصاميمالحالات البسيطة فقط

متى تستخدم ربط المنافذ حسب الترتيب (Port Mapping By Order)

يكون ربط المنافذ حسب الترتيب مقبولاً عندما:

  • يحتوي الـ module على عدد قليل جداً من الـ ports (2-3)
  • يكون ترتيب المنافذ واضحاً ومن غير المرجح أن يتغير
  • تكون بصدد كتابة بيئات اختبار (testbenches) سريعة

بالنسبة لمُعظم التصاميم، يُفضّل ربط المنافذ (port mapping) بالاسم لأنه أكثر وضوحًا وأقل عرضة للأخطاء.

challenge icon

التحدي

أكمل عملية التعيين (instantiation) بسرد إشارات الـ signals بالترتيب الصحيح correct order باستخدام التعيين حسب الترتيب (port mapping by order).

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

منافذ وحدة الـ Module (بهذا الترتيب):

  1. input en (التفعيل)
  2. input [7:0] d (إدخال البيانات)
  3. output [7:0] q (إخراج البيانات)

الإشارات للربط:

  • enable_signal ← ربط بـ en
  • data_input ← ربط بـ d
  • data_output ← ربط بـ q

جرّب بنفسك

module register (
  input en,
  input [7:0] d,
  output [7:0] q
);
  assign q = en ? d : q;
endmodule

module top (
  input enable_signal,
  input [7:0] data_input,
  output [7:0] data_output
);
  
  // TODO: أنشئ مثيلاً لـ register باسم reg1 باستخدام ORDER mapping
  // اسرد الإشارات بالترتيب الصحيح: enable_signal, data_input, data_output
  // لا تستخدم صيغة .port(signal)

endmodule
quiz iconاختبر نفسك

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

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