استدعاء الوحدات
جزء من قسم الأساسيات في رحلة 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، وهكذا. |
التحدي
أكمل الكود عن طريق إنشاء نسخة (instantiating) من وحدة or_gate.
ما يجب فعله:
- قم بإنشاء نسخة من
or_gateباسم النسخةor1 - قم بتمرير الإشارات بالترتيب الصحيح:
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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة