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

استدعاء الوحدات

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

تضمين النموذج (Module instantiation) هو عملية إنشاء نسخة من `module` داخل `module` آخر. وهي الطريقة التي تبني بها تصميمات أكبر عن طريق ربط المكونات الأصغر معًا.

بمجرد تحديد مودويل (module)، يمكنك استخدامه داخل مودويل آخر. يُطلق على ذلك اسم التجسيد (instantiation). ينشئ كل تجسيد نسخة (instance) منفصلة من ذلك المودويل. فكر في الأمر كاستخدام مخطط هندسي لبناء نسخ متعددة من المكون نفسه.

الصياغة الأساسية (Basic Syntax)

module_name instance_name (connections);
الجزئيةالمعنى
module_nameاسم الوحدة (module) المراد إنشاء نسخة منها (instantiate)
instance_nameاسم فريد لهذه النسخة
connectionsالإشارات المتصلة بمنافذ (ports) الوحدة

مثال بسيط

الخطوة 1: تعريف module

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

الخطوة 2: إنشاء نموذج مصغر (Instantiate) منه في وحدة أخرى

module top (
  input x,
  input y,
  output z
);
  and_gate gate1 (x, y, z);
endmodule

إليك ما يحدث في هذا الكود:

  • and_gate — اسم وحدة الموديول (module) التي نريد استخدامها (يجب أن تكون موجودة في مكان ما)
  • gate1 — اسم فريد نمنحه لهذا المقتطع المحدد (instance)
  • (x, y, z) — الإشارات التي نربطها بمنافذ (ports) الموديول (بنفس الترتيب الذي تظهر به في تعريف الموديول)

تتصل الإشارة الأولى x بالمنفذ الأول a. وتتصل الإشارة الثانية y بالمنفذ الثاني b. وتتصل الإشارة الثالثة z بالمنفذ الثالث c.

يجب عليك تمرير إشارات إلى الموديول. لا يمكن أن تكون الأقواس فارغة. يجب أن يتطابق عدد الإشارات مع عدد المنافذ.

نسخ متعددة (Multiple Instances)

يمكنك إنشاء نسخ متعددة من نفس الـ module:

module top;
  wire out1, out2;
  wire sig1, sig2, sig3, sig4;
  
  and_gate gate1 (sig1, sig2, out1);
  and_gate gate2 (sig3, sig4, out2);
endmodule

لكل مَثِيل (instance) اسمه الخاص (gate1، gate2) وتوصيلاته الخاصة. وهي تعمل بشكل مستقل.

ماذا يحدث أثناء عملية الإثبات (Instantiation)

  • يتم إنشاء نسخة من العتاد البرمجي (hardware)
  • لكل مثيل (instance) مجموعته الخاصة من الإشارات (signals)
  • تعملالمثيلات على التوازي (في وقت واحد)
  • تحدد الإشارات التي تقوم بتمريرها كيفية اتصال العناصر (instances) ببقية تصميمك

قواعد الـ Instantiation

القاعدةالسبب
يجب أن يكون اسم الـ instance فريدًاللتمييز بين النسخ
يجب أن يكون اسم الـ module موجودًايجب أن يكون معرّفًا في مكان آخر
يجب أن يتطابق عدد الـ connections مع عدد الـ portsوإلا فلن يعرف Verilog ما الذي يتصل بأين
يجب أن يتطابق ترتيب الـ connection (الـ order) مع ترتيب الـ portيتصل أول signal بأول port، وهكذا.
challenge icon

التحدي

أكمل الكود عن طريق إنشاء نسخة (instantiating) من وحدة or_gate.

ما يجب فعله:

  1. قم بإنشاء نسخة من or_gate باسم النسخة or1
  2. قم بتمرير الإشارات بالترتيب الصحيح: input_a، input_b، output_y

جرّب بنفسك

module or_gate (
  input in1,
  input in2,
  output result
);
  assign result = in1 | in2;
endmodule

module top (
  input input_a,
  input input_b,
  output output_y
);
  
  // TODO: أنشئ مثيلاً لـ or_gate بالاسم or1
  // مرر الإشارات بالترتيب: input_a, input_b, output_y
  // لا تستخدم صيغة .port(signal)
  

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

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

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