forked from tanchou/Verilog
		
	
		
			
	
	
		
			69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Coq
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Coq
		
	
	
	
	
	
|   | `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 |