Testbench Top (Gün 6)

Gün 6: Bitirme Projesi - Bölüm 1 | Gün 6 sonunda oluşturulan altyapı testi

Kaynak Kod

// =============================================================================
// GUN 6 - Konu 5: Top-Level Testbench (Altyapi)
// =============================================================================
// Bu dosya Gun 6'nin sonunda elde edilen mimaridir.
// Gun 7'de Monitor, Scoreboard ve Environment eklenecektir.
// =============================================================================

// Dosya dahil etme (include)
`include "6_2_transaction.sv"
`include "6_3_generator.sv"
`include "6_4_driver.sv"

module tb_top_day6;

  // Saat uretimi
  logic clk = 0;
  always #5 clk = ~clk;  // 100MHz

  // Interface
  alu_if aif(clk);

  // DUT baglantisi
  alu dut (
    .clk       (aif.clk),
    .rst_n     (aif.rst_n),
    .in_valid  (aif.in_valid),
    .operand_a (aif.operand_a),
    .operand_b (aif.operand_b),
    .opcode    (aif.opcode),
    .out_valid (aif.out_valid),
    .result    (aif.result),
    .flags     (aif.flags)
  );

  // Mailbox'lar
  mailbox #(ALU_Transaction) gen2drv_mbx;
  mailbox #(ALU_Transaction) drv2scb_mbx;

  // Bilesenler
  ALU_Generator gen;
  ALU_Driver    drv;

  initial begin
    $display("============================================================");
    $display("  GUN 6: ALU Testbench - Altyapi Testi");
    $display("============================================================\n");

    // Mailbox olustur
    gen2drv_mbx = new();
    drv2scb_mbx = new();

    // Bilesenleri olustur
    gen = new(gen2drv_mbx, 20);
    drv = new(aif, gen2drv_mbx, drv2scb_mbx);

    // Reset
    drv.reset();

    // Calistir
    fork
      gen.run();
      drv.run();
    join_any

    // Generator bitene kadar bekle
    wait(gen.done.triggered);
    #200;

    $display("\n  --- Gun 6 Istatistikler ---");
    $display("  Uretilen : %0d", gen.num_transactions);
    $display("  Surulen  : %0d", drv.driven_count);

    $display("\n============================================================");
    $display("  GUN 6 TAMAMLANDI");
    $display("  (Gun 7'de Monitor, Scoreboard ve Coverage eklenecek)");
    $display("============================================================");
    $finish;
  end

  // Dalga formu kaydi
  initial begin
    $dumpfile("alu_tb.vcd");
    $dumpvars(0, tb_top_day6);
  end

endmodule