module uart_top( input wire clk, input wire rst, input wire uart_rx, output wire uart_tx, // Interfaces RX output wire [7:0] rx_data, output wire rx_data_valid, input wire rx_data_ready, input wire read_fifo, // Interfaces TX input wire [7:0] tx_data, input wire tx_data_valid, output wire tx_data_ready ); parameter CLK_FRE = 27_000_000; // Hz parameter BAUD_RATE = 115200; // Baudrate // === 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; wire tx_fifo_empty; wire tx_fifo_full; wire rx_fifo_empty; wire rx_fifo_full; // === 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), .fifo_empty (rx_fifo_empty), .fifo_full (rx_fifo_full), .read_fifo (read_fifo) ); // === 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), .uart_tx_ready (uart_tx_data_ready), .fifo_empty (tx_fifo_empty), .fifo_full (tx_fifo_full) ); // === Instanciation RX UART === uart_rx uart_rx_inst ( .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 === uart_tx uart_tx_inst ( .clk (clk), .rst_p (rst), .data (uart_tx_data), .tx_data_valid (uart_tx_data_valid), .tx_data_ready (uart_tx_data_ready), .tx (uart_tx) ); assign uart_tx_data_valid = (!tx_fifo_empty && uart_tx_data_ready) ? 1'b1 : 1'b0; endmodule