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

ما هو الـ Testbench

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

تُعد testbench وحدة Verilog خاصة تُستخدم لاختبار وحدة أخرى. فهي توفر مدخلات لتصميمك وتتحقق مما إذا كانت المخرجات صحيحة.

لماذا نحتاج إلى منصة اختبار (Testbench)؟

عندما تقوم ببناء وحدة (module)، يجب عليك التأكد من أنها تعمل بشكل صحيح. تتيح لك منصة الاختبار (testbench) القيام بما يلي:

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

Testbench مقابل Design Module

 وحدة التصميم (Design Module)بيئة الاختبار (Testbench)
الغرضتنفيذ العتاد (Hardware)اختبار وحدة التصميم
هل تحتوي على منافذ؟نعم (مدخلات ومخرجات)لا (مستقلة بذاتها)
قابلة للتوليف (Synthesizable)؟نعملا (للمحاكاة فقط)

مثال بسيط لمنصة اختبار (Testbench)

module testbench;              // لا توجد منافذ!

  // تأتي المدخلات والمخرجات من الوحدة التي نختبرها (الـ DUT).
  reg a, b;                    // reg للمدخلات
  wire c;                      // wire للمخرجات
  

  // هذا هو استنساخ الوحدة (module instantiation) — حيث ينشئ نسخة من وحدة and_gate ويسميها dut
  and_gate dut (               // استنساخ الـ DUT
    .a(a),
    .b(b),
    .c(c)
  );

  // هذه كتلة initial التي تطبق قيم الاختبار على مدخلات الوحدة التي يتم اختبارها.
  initial begin                // تطبيق قيم الاختبار
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    $finish;
  end
endmodule

النقاط الرئيسية

  • لا يحتوي الـ Testbench على منافذ (ports)
  • يُستخدم reg للإشارات التي تتغير (المدخلات إلى DUT)
  • يُستخدم wire للإشارات القادمة من DUT (المخرجات)
  • يُسمى النموذج الذي يتم اختباره DUT (تصميم قيد الاختبار)
  • $finish ينهي المحاكاة

سنغطي إنشاء المحفزات (stimulus)، وعرض النتائج، وميزات منصة الاختبار (testbench) الأخرى في الدروس التالية.

challenge icon

التحدي

لقد تم تزويدك بوحدة بوابة AND. مهمتك هي إضافة الأجزاء المفقودة إلى منصة الاختبار (testbench) الخاصة بها.

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

أضف الأجزاء التالية إلى منصة الاختبار (testbench):

  1. قم بالتصريح عن reg للمدخلات a و b
  2. قم بالتصريح عن wire للمخرج c
  3. قم بإنشاء مثيل (Instantiate) لـ and_gate بالاسم dut وقم بتوصيل المنافذ

ورقة مرجعية

تعد منصة الاختبار (testbench) وحدة Verilog تُستخدم لاختبار وحدة أخرى (تسمى DUT - التصميم قيد الاختبار). وهي لا تحتوي على منافذ وتُستخدم للمحاكاة فقط.

module testbench;              // لا توجد منافذ!

  reg a, b;                    // reg للمدخلات (الإشارات التي تتغير)
  wire c;                      // wire لمخرجات الـ DUT

  and_gate dut (               // إنشاء نسخة من الـ DUT
    .a(a),
    .b(b),
    .c(c)
  );

  initial begin                // تطبيق قيم الاختبار
    a = 0; b = 0; #10;
    a = 1; b = 1; #10;
    $finish;                   // إنهاء المحاكاة
  end
endmodule
  • استخدم reg للإشارات التي يتم التحكم بها داخل كتل initial (مدخلات الـ DUT)
  • استخدم wire للإشارات القادمة من الـ DUT (المخرجات)
  • $finish ينهي عملية المحاكاة

جرّب بنفسك

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

module testbench;
  
  // المهمة 1: التصريح عن reg للمدخلات a و b
  
  
  // المهمة 2: التصريح عن wire للمخرج c
  

  // المهمة 3: إنشاء نسخة من and_gate باسم dut
  // توصيل .a(a), .b(b), .c(c)


  initial begin
    a = 0; b = 0; #10 $display("%d & %d = %d", a, b, c);
    a = 0; b = 1; #10 $display("%d & %d = %d", a, b, c);
    a = 1; b = 0; #10 $display("%d & %d = %d", a, b, c);
    a = 1; b = 1; #10 $display("%d & %d = %d", a, b, c);
    $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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