forked from tanchou/Verilog
Création de la structure du uart fifo
This commit is contained in:
3
Semaine_4/UART/README.md
Normal file
3
Semaine_4/UART/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# UART
|
||||
|
||||
Faire deux modules : un pour l'émetteur et un pour le récepteur. Le module émetteur doit être capable d'envoyer des données sur le port série, tandis que le module récepteur doit être capable de recevoir des données sur le port série. Les deux modules doivent être capables de communiquer entre eux.
|
@@ -13,7 +13,7 @@ module top_uart_loopback (
|
||||
wire tx_ready;
|
||||
|
||||
initial begin
|
||||
leds = 6'b000000; // Initialiser les LEDs à 0
|
||||
leds = 6'b111111;
|
||||
end
|
||||
|
||||
// === UART RX ===
|
||||
@@ -36,32 +36,51 @@ module top_uart_loopback (
|
||||
.tx(tx)
|
||||
);
|
||||
|
||||
// === FSM pour déclencher la transmission ===
|
||||
localparam IDLE = 0, SEND = 1;
|
||||
reg state = IDLE;
|
||||
// === 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 <= rx_data;
|
||||
tx_enable <= 1;
|
||||
state <= SEND;
|
||||
leds[0] <= 1;
|
||||
leds[5:1] <= 0;
|
||||
state <= WAIT;
|
||||
leds[0] <= 0;
|
||||
leds[1] <= 1;
|
||||
end
|
||||
end
|
||||
|
||||
WAIT: begin
|
||||
delay_counter <= delay_counter + 1;
|
||||
|
||||
if (delay_counter == 8'd400 && tx_ready) begin
|
||||
tx_enable <= 1;
|
||||
state <= SEND;
|
||||
end else begin
|
||||
tx_enable <= 0;
|
||||
end
|
||||
|
||||
leds[0] <= 1;
|
||||
leds[1] <= 0;
|
||||
end
|
||||
|
||||
|
||||
SEND: begin
|
||||
tx_enable <= 0;
|
||||
state <= IDLE;
|
||||
|
||||
leds[0] <= 0; // LED 0 allumée pour indiquer la réception
|
||||
leds[1] <= 1; // LED 1 éteinte pour indiquer l'attente de transmission
|
||||
leds[0] <= 0;
|
||||
leds[1] <= 0; // Envoi terminé
|
||||
end
|
||||
endcase
|
||||
end
|
||||
|
||||
endmodule
|
||||
endmodule
|
@@ -84,7 +84,7 @@ module uart_tx #(
|
||||
if(rst_p == 1'b1) begin
|
||||
tx_data_latch <= 8'd0;
|
||||
end else if(state == IDLE && tx_enable == 1'b1) begin
|
||||
tx_data_latch <= data; // Charger les données de `data` dans `tx_data_latch`
|
||||
tx_data_latch <= data; // Charger les données de data dans tx_data_latch
|
||||
end
|
||||
end
|
||||
|
||||
|
Reference in New Issue
Block a user