1
0
forked from tanchou/Verilog
Files
Verilog_Louis/Semaine_3/UARTV2/rx_fifo.v
Gamenight77 96c234de6d Add UART communication modules and testbenches
- Implemented rx_fifo module for receiving data with FIFO management.
- Created tb_top_uart_rx_tx testbench for testing UART transmission and reception.
- Developed tb_uart_rx testbench for validating UART receiver functionality.
- Added tb_uart_tx testbench for testing UART transmitter behavior.
- Designed top_led_uart module to interface UART with LED outputs.
- Integrated top_uart_ultrasonic module for ultrasonic sensor data transmission via UART.
- Implemented tx_fifo module for transmitting data with FIFO management.
- Developed uart_rx module for receiving serial data with state machine control.
- Created uart_top module to connect RX and TX functionalities with FIFO buffers.
- Implemented uart_tx module for transmitting serial data with state machine control.
2025-04-28 17:13:39 +02:00

50 lines
1.6 KiB
Verilog

module rx_fifo #(
parameter WIDTH = 8, // Taille des données (8 bits)
parameter DEPTH = 16 // Taille de la FIFO
)(
input clk,
input rst_p,
input [WIDTH-1:0] rx_data_in,
input rx_data_valid, // Indique que les données reçues sont valides
output reg [WIDTH-1:0] rx_data_out,
output reg rx_data_ready, // Indique que les données peuvent être lues
output reg fifo_empty, // FIFO vide
output reg fifo_full // FIFO pleine
);
reg [WIDTH-1:0] fifo_mem [DEPTH-1:0]; // Mémoire FIFO
reg [4:0] wr_ptr = 0; // Pointeur d'écriture
reg [4:0] rd_ptr = 0; // Pointeur de lecture
reg [4:0] fifo_count = 0; // Compteur d'éléments dans la FIFO
always @(posedge clk or posedge rst_p) begin
if (rst_p) begin
wr_ptr <= 0;
rd_ptr <= 0;
fifo_count <= 0;
rx_data_ready <= 0;
fifo_empty <= 1;
fifo_full <= 0;
end else begin
// Écriture dans la FIFO
if (rx_data_valid && !fifo_full) begin
fifo_mem[wr_ptr] <= rx_data_in;
wr_ptr <= wr_ptr + 1;
fifo_count <= fifo_count + 1;
end
// Lecture de la FIFO
if (!fifo_empty) begin
rx_data_out <= fifo_mem[rd_ptr];
rd_ptr <= rd_ptr + 1;
fifo_count <= fifo_count - 1;
end
// Mise à jour des indicateurs de vide et de plein
fifo_empty <= (fifo_count == 0);
fifo_full <= (fifo_count == DEPTH);
rx_data_ready <= !fifo_empty;
end
end
endmodule