1
0
forked from tanchou/Verilog
Files
Verilog_Louis/Semaine_4/UART/src/verilog/top_uart_loopback.v

84 lines
1.9 KiB
Verilog
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

module top_uart_loopback (
input wire clk, // 27 MHz
input wire rx,
output wire tx,
output reg [5:0] leds
);
wire rx_received;
wire [7:0] rx_data;
reg [7:0] tx_data;
reg tx_enable;
wire tx_ready;
initial begin
leds = 6'b111111;
end
// === UART RX ===
rxuartlite uart_rx_inst (
.i_clk(clk),
.i_reset(1'b0),
.i_uart_rx(rx),
.o_wr(rx_received),
.o_data(rx_data)
);
// === UART TX ===
uart_tx uart_tx_inst (
.clk(clk),
.rst_p(1'b0),
.data(data_const),
.tx_enable(tx_enable),
.tx_ready(tx_ready),
.tx(tx)
);
// === FSM avec délai ===
localparam IDLE = 0, WAIT = 1, SEND = 2;
reg [1:0] state = IDLE;
reg [8:0] delay_counter = 0;
always @(posedge clk) begin
leds[5] <= rx;
leds[4] <= tx;
case (state)
IDLE: begin
tx_enable <= 0;
delay_counter <= 0;
if (rx_received && tx_ready) begin
tx_data <= 8'h31; // Valeur à envoyer
state <= WAIT;
leds[0] <= 0;
leds[1] <= 1;
end
end
WAIT: begin
if (tx_ready) begin
tx_enable <= 1;
state <= SEND;
end else begin
tx_enable <= 0;
end
end
SEND: begin
if (!tx_ready) begin // Attendre que la transmission commence
tx_enable <= 0;
end else if (tx_ready && tx_enable == 0) begin
state <= IDLE; // Transmission terminée, retour à lattente
end
leds[0] <= 0;
leds[1] <= 0;
end
endcase
end
endmodule