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

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

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

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

يقوم بتوصيل الإشارات بمنافذ الوحدة (module) بناءً على الترتيب الذي تظهر به في تعريف الوحدة. ما عليك سوى سرد الإشارات بين قوسين، وسيقوم Verilog بمطابقتها واحدة تلو الأخرى.

الصيغة:

module_name instance_name (signal1, signal2, signal3);

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

مثال

تعريف الوحدة:

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

إنشاء مثيل مع ربط المنافذ حسب الترتيب:

or_gate or1 (input_a, input_b, output_y);

هذا يربط:

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

الترتيب مهم

مع تعيين المنافذ حسب الترتيب، يكون التسلسل أمراً بالغ الأهمية:

// الترتيب الصحيح
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);

إذا أخطأت في الترتيب، فستذهب الاتصالات إلى المنافذ الخاطئة. قد يكون من الصعب تصحيح هذا الخطأ لأن الكود يبدو صحيحاً للوهلة الأولى.

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

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

متى يتم استخدام تعيين المنافذ حسب الترتيب

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

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

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

challenge icon

التحدي

أكمل عملية الاستنساخ (instantiation) من خلال سرد الإشارات في الترتيب الصحيح باستخدام تعيين المنافذ حسب الترتيب.

ما يجب فعله:

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

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

الإشارات المراد توصيلها:

  • enable_signal ← قم بتوصيله بـ en
  • data_input ← قم بتوصيله بـ d
  • data_output ← قم بتوصيله بـ q

ورقة مرجعية

ربط المنافذ حسب الترتيب يربط الإشارات بناءً على موقعها المطابق لترتيب تعريف منافذ الوحدة:

module_name instance_name (signal1, signal2, signal3);

مثال مع وحدة or_gate (المنافذ: in1، in2، result):

or_gate or1 (input_a, input_b, output_y);

الترتيب أمر بالغ الأهمية — تبديل الإشارات يؤدي إلى توصيلات خاطئة يصعب تصحيحها.

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

جرّب بنفسك

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: قم بإنشاء مثيل للمسجل باسم reg1 باستخدام تعيين الترتيب (ORDER mapping)
  // أدرج الإشارات بالترتيب الصحيح: enable_signal، data_input، data_output
  // لا تستخدم صيغة .port(signal)

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

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

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