`timescale 1ns / 1ps module tb_top_uart_rx_tx; parameter CLK_FREQ = 27_000_000; parameter BAUD_RATE = 115200; // Signaux reg clk = 0; reg start = 0; reg [7:0] data_in = 0; wire [7:0] data_out; wire valid; wire tx; wire rx; // On connecte tx directement à rx pour le test // Instance du module à tester top_uart_rx_tx #( .CLK_FREQ(CLK_FREQ), .BAUD_RATE(BAUD_RATE) ) uut ( .clk(clk), .start(start), .data_in(data_in), .rx(rx), .data_out(data_out), .valid(valid), .tx(tx) ); // Boucle le tx sur rx assign rx = tx; // Clock à 50 MHz (20 ns période) always #10 clk = ~clk; // Simulation principale initial begin $display("Début de la simulation"); $dumpfile("uart_loopback.vcd"); // Pour GTKWave $dumpvars(0, tb_top_uart_rx_tx); // Attendre un peu #(20 * 10); // Envoi d'une valeur data_in = 8'hA5; // Exemple de data start = 1; #20; start = 0; // Attendre la réception (valeur valid = 1) wait(valid == 1); // Affichage des résultats $display("Data envoyee : 0x%h", data_in); $display("Data recue : 0x%h", data_out); if (data_out == data_in) $display("Test reussi !"); else $display("Test echoue..."); // Fin de simulation #(20 * 10); $finish; end endmodule