| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  | module uart_top( | 
					
						
							|  |  |  |     input  wire       clk, | 
					
						
							|  |  |  |     input  wire       rst, | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     input  wire       uart_rx, | 
					
						
							|  |  |  |     output wire       uart_tx, | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |     // Interfaces RX  | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  |     output wire [7:0] rx_data, | 
					
						
							|  |  |  |     output wire       rx_data_valid, | 
					
						
							|  |  |  |     input  wire       rx_data_ready, | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |     input  wire       read_fifo, | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |     // Interfaces TX  | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  |     input  wire [7:0] tx_data, | 
					
						
							|  |  |  |     input  wire       tx_data_valid, | 
					
						
							|  |  |  |     output wire       tx_data_ready | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     parameter CLK_FRE  = 27_000_000; // Hz | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |     parameter BAUD_RATE = 115200;     // Baudrate | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // === Signaux internes === | 
					
						
							|  |  |  |     wire [7:0] uart_rx_data; | 
					
						
							|  |  |  |     wire       uart_rx_data_valid; | 
					
						
							|  |  |  |     wire       uart_rx_data_ready; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     wire [7:0] uart_tx_data; | 
					
						
							|  |  |  |     wire       uart_tx_data_valid; | 
					
						
							|  |  |  |     wire       uart_tx_data_ready; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |     wire       tx_fifo_empty; | 
					
						
							|  |  |  |     wire       tx_fifo_full; | 
					
						
							|  |  |  |     wire       rx_fifo_empty; | 
					
						
							|  |  |  |     wire       rx_fifo_full; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  |     // === FIFO RX === | 
					
						
							|  |  |  |     rx_fifo #( | 
					
						
							|  |  |  |         .WIDTH(8), | 
					
						
							|  |  |  |         .DEPTH(16) | 
					
						
							|  |  |  |     ) rx_fifo_inst ( | 
					
						
							|  |  |  |         .clk            (clk), | 
					
						
							|  |  |  |         .rst_p          (rst), | 
					
						
							|  |  |  |         .rx_data_in     (uart_rx_data), | 
					
						
							|  |  |  |         .rx_data_valid  (uart_rx_data_valid), | 
					
						
							|  |  |  |         .rx_data_out    (rx_data), | 
					
						
							|  |  |  |         .rx_data_ready  (rx_data_ready), | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |         .fifo_empty     (rx_fifo_empty),  | 
					
						
							|  |  |  |         .fifo_full      (rx_fifo_full), | 
					
						
							|  |  |  |         .read_fifo      (read_fifo) | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // === FIFO TX === | 
					
						
							|  |  |  |     tx_fifo #( | 
					
						
							|  |  |  |         .WIDTH(8), | 
					
						
							|  |  |  |         .DEPTH(16) | 
					
						
							|  |  |  |     ) tx_fifo_inst ( | 
					
						
							|  |  |  |         .clk            (clk), | 
					
						
							|  |  |  |         .rst_p          (rst), | 
					
						
							|  |  |  |         .tx_data_in     (tx_data), | 
					
						
							|  |  |  |         .tx_data_valid  (tx_data_valid), | 
					
						
							|  |  |  |         .tx_data_ready  (tx_data_ready), | 
					
						
							|  |  |  |         .tx_data_out    (uart_tx_data), | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |         .uart_tx_ready  (uart_tx_data_ready), | 
					
						
							|  |  |  |         .fifo_empty     (tx_fifo_empty), | 
					
						
							|  |  |  |         .fifo_full      (tx_fifo_full) | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // === Instanciation RX UART === | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |     uart_rx uart_rx_inst ( | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  |         .clk           (clk), | 
					
						
							|  |  |  |         .rst_p         (rst), | 
					
						
							|  |  |  |         .rx_data       (uart_rx_data), | 
					
						
							|  |  |  |         .rx_data_valid (uart_rx_data_valid), | 
					
						
							|  |  |  |         .rx_data_ready (uart_rx_data_ready), | 
					
						
							|  |  |  |         .rx_pin        (uart_rx) | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // === Instanciation TX UART === | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |     uart_tx uart_tx_inst ( | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  |         .clk           (clk), | 
					
						
							|  |  |  |         .rst_p         (rst), | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |         .data       (uart_tx_data), | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  |         .tx_data_valid (uart_tx_data_valid), | 
					
						
							|  |  |  |         .tx_data_ready (uart_tx_data_ready), | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |         .tx        (uart_tx) | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-02 11:03:14 +02:00
										 |  |  |     assign uart_tx_data_valid = (!tx_fifo_empty && uart_tx_data_ready) ? 1'b1 : 1'b0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-28 17:13:39 +02:00
										 |  |  | endmodule |