| 
									
										
										
										
											2025-04-17 13:02:47 +02:00
										 |  |  | module top_ultrason_uart( | 
					
						
							|  |  |  |     input wire clk, | 
					
						
							|  |  |  |     input wire start, | 
					
						
							|  |  |  |     inout wire sig, | 
					
						
							| 
									
										
										
										
											2025-04-17 18:00:54 +02:00
										 |  |  |     output wire tx | 
					
						
							| 
									
										
										
										
											2025-04-17 13:02:47 +02:00
										 |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     parameter CLK_FREQ = 27_000_000; | 
					
						
							|  |  |  |     parameter BAUD_RATE = 115_200; | 
					
						
							|  |  |  |     localparam BIT_PERIOD = CLK_FREQ / BAUD_RATE; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Paramètres pour le capteur à ultrasons | 
					
						
							|  |  |  |     wire [15:0] distance; | 
					
						
							|  |  |  |     wire [2:0] state_sensor; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Signaux pour l'UART TX | 
					
						
							|  |  |  |     reg [15:0] tx_data; | 
					
						
							|  |  |  |     reg tx_start = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Instance du capteur à ultrasons | 
					
						
							|  |  |  |     ultrasonic_fpga #( | 
					
						
							|  |  |  |         .CLK_FREQ(CLK_FREQ) | 
					
						
							|  |  |  |     ) sensor_inst ( | 
					
						
							|  |  |  |         .clk(clk), | 
					
						
							|  |  |  |         .start(start), | 
					
						
							|  |  |  |         .sig(sig), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .distance(distance), | 
					
						
							|  |  |  |         .state(state_sensor) | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Instance de l'UART TX | 
					
						
							|  |  |  |     uart_tx #( | 
					
						
							|  |  |  |         .CLK_FREQ(CLK_FREQ), | 
					
						
							|  |  |  |         .BAUD_RATE(BAUD_RATE) | 
					
						
							|  |  |  |     ) tx_instance ( | 
					
						
							|  |  |  |         .clk(clk), | 
					
						
							|  |  |  |         .start(tx_start), | 
					
						
							|  |  |  |         .data(tx_data[7:0]), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .tx(tx) | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-17 18:00:54 +02:00
										 |  |  |     reg [31:0] wait_counter; | 
					
						
							|  |  |  |     reg [1:0] state; | 
					
						
							|  |  |  |     localparam WAIT_NEXT_CYCLES = (CLK_FREQ / 1000) * 100; // 60 ms | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     localparam START    = 2'd0; | 
					
						
							|  |  |  |     localparam WAIT     = 2'd1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-17 13:02:47 +02:00
										 |  |  |     always @(posedge clk) begin | 
					
						
							| 
									
										
										
										
											2025-04-17 18:00:54 +02:00
										 |  |  |         case(state) | 
					
						
							|  |  |  |             START:begin | 
					
						
							|  |  |  |                 if (state_sensor == 3'd6) begin // Lorsque la mesure est terminée, préparer les données | 
					
						
							| 
									
										
										
										
											2025-04-17 13:02:47 +02:00
										 |  |  |              | 
					
						
							| 
									
										
										
										
											2025-04-17 18:00:54 +02:00
										 |  |  |                     tx_data <= distance; | 
					
						
							|  |  |  |                     tx_start <= 1; | 
					
						
							|  |  |  |                      | 
					
						
							|  |  |  |                     state <= WAIT; | 
					
						
							|  |  |  |                 end                    | 
					
						
							|  |  |  |             end | 
					
						
							| 
									
										
										
										
											2025-04-17 13:02:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-17 18:00:54 +02:00
										 |  |  |             WAIT:begin | 
					
						
							|  |  |  |                 tx_start <= 0; | 
					
						
							|  |  |  |                 wait_counter <= wait_counter + 1; | 
					
						
							|  |  |  |                 if (wait_counter >= WAIT_NEXT_CYCLES) begin | 
					
						
							|  |  |  |                     state <= START; | 
					
						
							|  |  |  |                     wait_counter <= 0; | 
					
						
							|  |  |  |                 end | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |         endcase | 
					
						
							| 
									
										
										
										
											2025-04-17 13:02:47 +02:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | endmodule |