forked from tanchou/Verilog
Debg compliqué
This commit is contained in:
@@ -20,16 +20,17 @@ module ultrasonic_fpga #(
|
|||||||
|
|
||||||
reg sig_int, sig_ok;
|
reg sig_int, sig_ok;
|
||||||
|
|
||||||
reg [2:0] state = IDLE;
|
|
||||||
|
|
||||||
localparam IDLE = 3'd0,
|
localparam IDLE = 3'd0,
|
||||||
TRIG_HIGH = 3'd1,
|
TRIG_HIGH = 3'd1,
|
||||||
TRIG_LOW = 3'd2,
|
TRIG_LOW = 3'd2,
|
||||||
WAIT_ECHO = 3'd3,
|
WAIT_ECHO = 3'd3,
|
||||||
MEASURE_ECHO = 3'd4,
|
MEASURE_ECHO = 3'd4,
|
||||||
COMPUTE = 3'd5,
|
COMPUTE = 3'd5,
|
||||||
DONE = 3'd6,
|
DONE = 3'd6,
|
||||||
WAIT_NEXT = 3'd7;
|
WAIT_NEXT = 3'd7;
|
||||||
|
reg [2:0] state = IDLE;
|
||||||
|
|
||||||
|
|
||||||
localparam integer TRIG_PULSE_CYCLES = CLK_FREQ / 100_000; // 10us pulse
|
localparam integer TRIG_PULSE_CYCLES = CLK_FREQ / 100_000; // 10us pulse
|
||||||
localparam integer DIST_DIVISOR = (58 * CLK_FREQ) / 1_000_000; // pour conversion us -> cm
|
localparam integer DIST_DIVISOR = (58 * CLK_FREQ) / 1_000_000; // pour conversion us -> cm
|
||||||
|
@@ -1,3 +1,3 @@
|
|||||||
@echo off
|
@echo off
|
||||||
echo === Lancement de GTKWave ===
|
echo === Lancement de GTKWave ===
|
||||||
gtkwave runs/uart_rx_fifo.vcd
|
gtkwave runs/ultrason_commands.vcd
|
||||||
|
@@ -6,7 +6,7 @@ setlocal enabledelayedexpansion
|
|||||||
set OUT=runs/sim.vvp
|
set OUT=runs/sim.vvp
|
||||||
|
|
||||||
:: Top-level testbench module
|
:: Top-level testbench module
|
||||||
set TOP=tb_uart_rx_fifo
|
set TOP=tb_ultrason_commands
|
||||||
|
|
||||||
:: Répertoires contenant des fichiers .v
|
:: Répertoires contenant des fichiers .v
|
||||||
set DIRS=src/verilog tests/verilog IP/verilog
|
set DIRS=src/verilog tests/verilog IP/verilog
|
||||||
|
@@ -65,10 +65,11 @@ module top_uart_ultrason_command (
|
|||||||
reg [1:0] mesure = STOP;
|
reg [1:0] mesure = STOP;
|
||||||
|
|
||||||
always @(posedge clk) begin
|
always @(posedge clk) begin
|
||||||
leds [5] <= rx;
|
|
||||||
leds [4] <= tx;
|
leds [4] <= tx;
|
||||||
case (rx_state)
|
case (rx_state)
|
||||||
IDLE: begin
|
IDLE: begin
|
||||||
|
leds [5] <= 0;
|
||||||
wr_en <= 0;
|
wr_en <= 0;
|
||||||
rd_en <= 0;
|
rd_en <= 0;
|
||||||
|
|
||||||
@@ -81,6 +82,7 @@ module top_uart_ultrason_command (
|
|||||||
end
|
end
|
||||||
|
|
||||||
READ: begin
|
READ: begin
|
||||||
|
leds [5] <= 1;
|
||||||
case (rd_data)
|
case (rd_data)
|
||||||
8'h01: begin // Start mesure one mesure
|
8'h01: begin // Start mesure one mesure
|
||||||
start <= 1;
|
start <= 1;
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
module tb_ultrason_commands;
|
module tb_ultrason_commands;
|
||||||
|
|
||||||
reg clk = 0;
|
reg clk = 0;
|
||||||
always #18.5 clk = ~clk; // ~27 MHz
|
always #18.5 clk = ~clk; // Génère une clock 27 MHz
|
||||||
|
|
||||||
wire tx, rx;
|
wire tx, rx;
|
||||||
wire [5:0] leds;
|
wire [5:0] leds;
|
||||||
@@ -15,6 +15,8 @@ module tb_ultrason_commands;
|
|||||||
wire [7:0] data_out;
|
wire [7:0] data_out;
|
||||||
wire rx_received;
|
wire rx_received;
|
||||||
|
|
||||||
|
reg rd_en = 0; // Lecture FIFO
|
||||||
|
|
||||||
// === PARAMÈTRES ===
|
// === PARAMÈTRES ===
|
||||||
localparam CLK_FREQ = 27_000_000;
|
localparam CLK_FREQ = 27_000_000;
|
||||||
localparam BAUD_RATE = 115_200;
|
localparam BAUD_RATE = 115_200;
|
||||||
@@ -34,19 +36,19 @@ module tb_ultrason_commands;
|
|||||||
.signal(ultrason_sig)
|
.signal(ultrason_sig)
|
||||||
);
|
);
|
||||||
|
|
||||||
// === RX : observe ce que le FPGA envoie ===
|
// === RX FIFO pour observer la sortie UART ===
|
||||||
uart_rx #(
|
uart_rx_fifo #(
|
||||||
.CLK_FREQ(CLK_FREQ),
|
.CLK_FREQ(CLK_FREQ),
|
||||||
.BAUD_RATE(BAUD_RATE)
|
.BAUD_RATE(BAUD_RATE)
|
||||||
) uart_rx_inst (
|
) uart_rx_fifo_inst (
|
||||||
.clk(clk),
|
.clk(clk),
|
||||||
.rx_pin(tx), // observe ce que le FPGA envoie
|
.rx_pin(rx), // on observe la sortie du DUT
|
||||||
.rx_data(data_out),
|
.rd_en(rd_en),
|
||||||
.rx_received(rx_received),
|
.rd_data(data_out),
|
||||||
.rx_enable(1'b1)
|
.data_available(rx_received)
|
||||||
);
|
);
|
||||||
|
|
||||||
// === TX : envoie une commande au FPGA ===
|
// === TX pour injecter une commande UART vers le DUT ===
|
||||||
uart_tx #(
|
uart_tx #(
|
||||||
.CLK_FREQ(CLK_FREQ),
|
.CLK_FREQ(CLK_FREQ),
|
||||||
.BAUD_RATE(BAUD_RATE)
|
.BAUD_RATE(BAUD_RATE)
|
||||||
@@ -55,7 +57,7 @@ module tb_ultrason_commands;
|
|||||||
.tx_enable(tx_enable),
|
.tx_enable(tx_enable),
|
||||||
.tx_ready(tx_ready),
|
.tx_ready(tx_ready),
|
||||||
.data(data_in),
|
.data(data_in),
|
||||||
.tx(rx), // vers le FPGA
|
.tx(tx), // va dans le DUT
|
||||||
.rst_p(1'b0)
|
.rst_p(1'b0)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -66,26 +68,29 @@ module tb_ultrason_commands;
|
|||||||
|
|
||||||
$display("==== Start UART Ultrasonic Test ====");
|
$display("==== Start UART Ultrasonic Test ====");
|
||||||
|
|
||||||
// Attendre que le tx soit prêt
|
// Attendre que le TX soit prêt
|
||||||
wait(tx_ready);
|
wait(tx_ready);
|
||||||
#100;
|
#100;
|
||||||
|
|
||||||
// Envoyer la commande "ONE" (1)
|
// Envoyer la commande "ONE" (1)
|
||||||
data_in <= 8'd1; // ONE
|
data_in <= 8'd1;
|
||||||
tx_enable <= 1;
|
tx_enable <= 1;
|
||||||
#20;
|
#20;
|
||||||
tx_enable <= 0;
|
tx_enable <= 0;
|
||||||
|
|
||||||
// Attendre la réponse
|
// Lire 2 octets de réponse : LSB et MSB de la distance
|
||||||
wait(rx_received);
|
repeat (2) begin
|
||||||
$display(">> Distance LSB: %d", data_out);
|
wait(rx_received);
|
||||||
|
#10; // Laisse le temps de valider le drapeau
|
||||||
wait(rx_received);
|
rd_en <= 1; // Lecture de la FIFO
|
||||||
$display(">> Distance MSB: %d", data_out);
|
#20;
|
||||||
|
rd_en <= 0;
|
||||||
|
$display(">> Distance octet: %d", data_out);
|
||||||
|
end
|
||||||
|
|
||||||
$display("==== End UART Ultrasonic Test ====");
|
$display("==== End UART Ultrasonic Test ====");
|
||||||
#1000;
|
#1000;
|
||||||
$stop;
|
$stop;
|
||||||
end
|
end
|
||||||
|
|
||||||
endmodule
|
endmodule
|
Reference in New Issue
Block a user