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

What Is A Testbench

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

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

لماذا نحتاج إلى testbench؟

عندما تبني وحدة، تحتاج إلى التأكد من أنها تعمل بشكل صحيح. يتيح لك testbench ما يلي:

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

Testbench مقابل module التصميم

 module التصميمTestbench
الغرضينفّذ العتاديختبر module التصميم
هل يحتوي على ports؟نعم (inputs و outputs)لا (مستقل بذاته)
قابل للتوليف؟نعملا (simulation فقط)

مثال بسيط لـ testbench

module testbench;              // لا منافذ!

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

  // هذا هو إنشاء مثيل للوحدة — ينشئ نسخة من وحدة 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 مع signals التي يحدث لها change (inputs إلى DUT)
  • يُستخدم wire مع signals القادمة من DUT (outputs)
  • تُسمّى الوحدة التي يتم اختبارها DUT (التصميم قيد الاختبار)
  • ينهي $finish المحاكاة

سنتناول إنشاء المحفزات وعرض النتائج وميزات testbench الأخرى في الدروس التالية.

challenge icon

التحدي

أُعطيت وحدة بوابة AND. مهمتك هي إضافة الأجزاء المفقودة إلى testbench الخاص بها.

ما يجب فعله:

أضف الأجزاء التالية إلى testbench:

  1. صرّح عن reg للمدخلين a وb
  2. صرّح عن wire للمخرج c
  3. أنشئ مثيلًا من and_gate بالاسم dut وصِل المنافذ

التنسيق المطلوب للإخراج:

[المحتوى المترجم هنا]

جرّب بنفسك

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اختبر نفسك

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

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

تدرّب بنفسك: مترجم Verilog عبر الإنترنت