`timescale 1ns/1ps

module tb_top_ultrasonic_led;

    reg clk = 0;
    reg start = 0;
    wire sig;
    wire [5:0] leds;

    // Simulation du comportement du capteur (via tri-state)
    reg sig_driver = 0;
    reg sig_drive_enable = 0;
    assign sig = sig_drive_enable ? sig_driver : 1'bz;

    // Instance du module top
    top_ultrasonic_led uut (
        .clk(clk),
        .start(start),
        .sig(sig),
        .leds(leds)
    );

    // Clock à 27 MHz ≈ 18.5 ns période
    always #18.5 clk = ~clk;

    initial begin
        // Initialisation
        $dumpfile("top_ultrasonic_led.vcd");
        $dumpvars(0, tb_top_ultrasonic_led);

        #100;
        start = 1;
        #50;
        start = 0;

        // Attente du front montant TRIG
        wait (sig === 1);
        $display("TRIG HIGH at %t", $time);

        wait (sig === 0);
        $display("TRIG LOW at %t", $time);

        // Attente avant d'envoyer un echo simulé
        #3000;

        // Simuler ECHO HIGH pendant un certain temps
        sig_driver = 1;
        sig_drive_enable = 1;
        #11600;  // durée d'echo (ex : 10 cm -> ~580us => 580 * 27 clk = ~15660)
        sig_driver = 0;
        sig_drive_enable = 0;

        // Attente que la mesure soit faite
        #200_000;

        $display("Distance mesurée : %d", uut.ultrasonic_inst.distance);
        $display("LEDs affichées    : %b", leds);

        $finish;
    end

endmodule