From c8f108e01d433227754487b41b4c7ad2fc99e95c Mon Sep 17 00:00:00 2001 From: Gamenight77 Date: Wed, 16 Apr 2025 13:30:41 +0200 Subject: [PATCH] Add Ultrasonic FPGA module and simulation testbench - Implemented the ultrasonic_fpga module to handle ultrasonic sensor operations including triggering and measuring distance. - Added a simulation testbench (ultrasonic_sim) to validate the functionality of the ultrasonic_fpga module. - The module includes state management for triggering the sensor and measuring the echo duration to calculate distance. - Simulation includes initialization, triggering the sensor, and checking the output distance. --- README.md | 8 +- Semaine 1/Ultrasonic/tb_ultrasonic_fpga.v | 73 + Semaine 1/Ultrasonic/ultrasonic.vcd | 2328 +++++++++++++++++++++ Semaine 1/Ultrasonic/ultrasonic_fpga.v | 71 + Semaine 1/Ultrasonic/ultrasonic_sim | 265 +++ 5 files changed, 2744 insertions(+), 1 deletion(-) create mode 100644 Semaine 1/Ultrasonic/tb_ultrasonic_fpga.v create mode 100644 Semaine 1/Ultrasonic/ultrasonic.vcd create mode 100644 Semaine 1/Ultrasonic/ultrasonic_fpga.v create mode 100644 Semaine 1/Ultrasonic/ultrasonic_sim diff --git a/README.md b/README.md index 6c022dc..245caeb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # Verilog -## Command + + +## Commands +Compile code +iverilog -o Nom_de_sortie.vvp .\source1.v .\tb_1.v + + ### Upload on fpga yosys -p "synth_ecp5 -json design.json" counter.v nextpnr-gowin --chip GW2AR-LV18QN88C8/I7 --json design.json --asc design.asc diff --git a/Semaine 1/Ultrasonic/tb_ultrasonic_fpga.v b/Semaine 1/Ultrasonic/tb_ultrasonic_fpga.v new file mode 100644 index 0000000..bea169f --- /dev/null +++ b/Semaine 1/Ultrasonic/tb_ultrasonic_fpga.v @@ -0,0 +1,73 @@ +`timescale 1ns/1ps + +module tb_ultrasonic_fpga; + + reg clk = 0; + reg rst = 1; + reg start = 0; + reg echo = 0; + wire trig_out; + wire [15:0] distance; + + time t_start, t_end; + + // Clock 27MHz => periode = 37.037ns + always #18 clk = ~clk; + + ultrasonic_fpga uut ( + .clk(clk), + .rst(rst), + .start(start), + .echo(echo), + .trig_out(trig_out), + .distance(distance) + ); + + initial begin + $dumpfile("ultrasonic.vcd"); + $dumpvars(0, tb_ultrasonic_fpga); + + // Reset + #100; + rst = 0; + + // Start + #100; + start = 1; + #40; + start = 0; + + wait (trig_out == 1); + t_start = $time; + + // Attendre qu'il redescende + wait (trig_out == 0); + t_end = $time; + + $display("Trig HIGH duration: %0dns", t_end - t_start); + + if ((t_end - t_start) >= 9500 && (t_end - t_start) <= 10500) begin + $display("Trigger signal is high for 10us."); + + #10; + echo = 1; + + #5800;// Echo dure 5800ns (≈ 100 cycles @ 27MHz => ≈ 100 cm aller-retour) + echo = 0; + end else begin + $display("Trigger signal is NOT high for 10us."); + end + + #500; + + // Affiche la distance + if (distance > 0) begin + $display("Distance measured: %d cm", distance); + end else begin + $display("No distance measured."); + end + + $finish; + end + +endmodule diff --git a/Semaine 1/Ultrasonic/ultrasonic.vcd b/Semaine 1/Ultrasonic/ultrasonic.vcd new file mode 100644 index 0000000..31507f4 --- /dev/null +++ b/Semaine 1/Ultrasonic/ultrasonic.vcd @@ -0,0 +1,2328 @@ +$date + Wed Apr 16 13:26:52 2025 +$end +$version + Icarus Verilog +$end +$timescale + 1ps +$end +$scope module tb_ultrasonic_fpga $end +$var wire 1 ! trig_out $end +$var wire 16 " distance [15:0] $end +$var reg 1 # clk $end +$var reg 1 $ echo $end +$var reg 1 % rst $end +$var reg 1 & start $end +$var reg 64 ' t_end [63:0] $end +$var reg 64 ( t_start [63:0] $end +$scope module uut $end +$var wire 1 # clk $end +$var wire 1 $ echo $end +$var wire 1 % rst $end +$var wire 1 & start $end +$var parameter 32 ) CLK_FREQ $end +$var parameter 32 * DIST_DIVISOR $end +$var parameter 32 + DONE $end +$var parameter 32 , IDLE $end +$var parameter 32 - MEASURE_ECHO $end +$var parameter 32 . TRIG $end +$var parameter 32 / TRIG_DURATION_CYCLES $end +$var parameter 32 0 WAIT_ECHO $end +$var reg 16 1 distance [15:0] $end +$var reg 16 2 echo_counter [15:0] $end +$var reg 3 3 state [2:0] $end +$var reg 9 4 trig_counter [8:0] $end +$var reg 1 ! trig_out $end +$upscope $end +$upscope $end +$enddefinitions $end +$comment Show the parameter values. $end +$dumpall +b10 0 +b100001110 / +b1 . +b11 - +b0 , +b100 + +b1 * +b1100110111111110011000000 ) +$end +#0 +$dumpvars +b0 4 +b0 3 +b0 2 +b0 1 +bx ( +bx ' +0& +1% +0$ +0# +b0 " +0! +$end +#18000 +1# +#36000 +0# +#54000 +1# +#72000 +0# +#90000 +1# +#100000 +0% +#108000 +0# +#126000 +1# +#144000 +0# +#162000 +1# +#180000 +0# +#198000 +1# +#200000 +1& +#216000 +0# +#234000 +b1 3 +1# +#240000 +0& +#252000 +0# +#270000 +b100001110 ( +b1 4 +1! +1# +#288000 +0# +#306000 +b10 4 +1# +#324000 +0# +#342000 +b11 4 +1# +#360000 +0# +#378000 +b100 4 +1# +#396000 +0# +#414000 +b101 4 +1# +#432000 +0# +#450000 +b110 4 +1# +#468000 +0# +#486000 +b111 4 +1# +#504000 +0# +#522000 +b1000 4 +1# +#540000 +0# +#558000 +b1001 4 +1# +#576000 +0# +#594000 +b1010 4 +1# +#612000 +0# +#630000 +b1011 4 +1# +#648000 +0# +#666000 +b1100 4 +1# +#684000 +0# +#702000 +b1101 4 +1# +#720000 +0# +#738000 +b1110 4 +1# +#756000 +0# +#774000 +b1111 4 +1# +#792000 +0# +#810000 +b10000 4 +1# +#828000 +0# +#846000 +b10001 4 +1# +#864000 +0# +#882000 +b10010 4 +1# +#900000 +0# +#918000 +b10011 4 +1# +#936000 +0# +#954000 +b10100 4 +1# +#972000 +0# +#990000 +b10101 4 +1# +#1008000 +0# +#1026000 +b10110 4 +1# +#1044000 +0# +#1062000 +b10111 4 +1# +#1080000 +0# +#1098000 +b11000 4 +1# +#1116000 +0# +#1134000 +b11001 4 +1# +#1152000 +0# +#1170000 +b11010 4 +1# +#1188000 +0# +#1206000 +b11011 4 +1# +#1224000 +0# +#1242000 +b11100 4 +1# +#1260000 +0# +#1278000 +b11101 4 +1# +#1296000 +0# +#1314000 +b11110 4 +1# +#1332000 +0# +#1350000 +b11111 4 +1# +#1368000 +0# +#1386000 +b100000 4 +1# +#1404000 +0# +#1422000 +b100001 4 +1# +#1440000 +0# +#1458000 +b100010 4 +1# +#1476000 +0# +#1494000 +b100011 4 +1# +#1512000 +0# +#1530000 +b100100 4 +1# +#1548000 +0# +#1566000 +b100101 4 +1# +#1584000 +0# +#1602000 +b100110 4 +1# +#1620000 +0# +#1638000 +b100111 4 +1# +#1656000 +0# +#1674000 +b101000 4 +1# +#1692000 +0# +#1710000 +b101001 4 +1# +#1728000 +0# +#1746000 +b101010 4 +1# +#1764000 +0# +#1782000 +b101011 4 +1# +#1800000 +0# +#1818000 +b101100 4 +1# +#1836000 +0# +#1854000 +b101101 4 +1# +#1872000 +0# +#1890000 +b101110 4 +1# +#1908000 +0# +#1926000 +b101111 4 +1# +#1944000 +0# +#1962000 +b110000 4 +1# +#1980000 +0# +#1998000 +b110001 4 +1# +#2016000 +0# +#2034000 +b110010 4 +1# +#2052000 +0# +#2070000 +b110011 4 +1# +#2088000 +0# +#2106000 +b110100 4 +1# +#2124000 +0# +#2142000 +b110101 4 +1# +#2160000 +0# +#2178000 +b110110 4 +1# +#2196000 +0# +#2214000 +b110111 4 +1# +#2232000 +0# +#2250000 +b111000 4 +1# +#2268000 +0# +#2286000 +b111001 4 +1# +#2304000 +0# +#2322000 +b111010 4 +1# +#2340000 +0# +#2358000 +b111011 4 +1# +#2376000 +0# +#2394000 +b111100 4 +1# +#2412000 +0# +#2430000 +b111101 4 +1# +#2448000 +0# +#2466000 +b111110 4 +1# +#2484000 +0# +#2502000 +b111111 4 +1# +#2520000 +0# +#2538000 +b1000000 4 +1# +#2556000 +0# +#2574000 +b1000001 4 +1# +#2592000 +0# +#2610000 +b1000010 4 +1# +#2628000 +0# +#2646000 +b1000011 4 +1# +#2664000 +0# +#2682000 +b1000100 4 +1# +#2700000 +0# +#2718000 +b1000101 4 +1# +#2736000 +0# +#2754000 +b1000110 4 +1# +#2772000 +0# +#2790000 +b1000111 4 +1# +#2808000 +0# +#2826000 +b1001000 4 +1# +#2844000 +0# +#2862000 +b1001001 4 +1# +#2880000 +0# +#2898000 +b1001010 4 +1# +#2916000 +0# +#2934000 +b1001011 4 +1# +#2952000 +0# +#2970000 +b1001100 4 +1# +#2988000 +0# +#3006000 +b1001101 4 +1# +#3024000 +0# +#3042000 +b1001110 4 +1# +#3060000 +0# +#3078000 +b1001111 4 +1# +#3096000 +0# +#3114000 +b1010000 4 +1# +#3132000 +0# +#3150000 +b1010001 4 +1# +#3168000 +0# +#3186000 +b1010010 4 +1# +#3204000 +0# +#3222000 +b1010011 4 +1# +#3240000 +0# +#3258000 +b1010100 4 +1# +#3276000 +0# +#3294000 +b1010101 4 +1# +#3312000 +0# +#3330000 +b1010110 4 +1# +#3348000 +0# +#3366000 +b1010111 4 +1# +#3384000 +0# +#3402000 +b1011000 4 +1# +#3420000 +0# +#3438000 +b1011001 4 +1# +#3456000 +0# +#3474000 +b1011010 4 +1# +#3492000 +0# +#3510000 +b1011011 4 +1# +#3528000 +0# +#3546000 +b1011100 4 +1# +#3564000 +0# +#3582000 +b1011101 4 +1# +#3600000 +0# +#3618000 +b1011110 4 +1# +#3636000 +0# +#3654000 +b1011111 4 +1# +#3672000 +0# +#3690000 +b1100000 4 +1# +#3708000 +0# +#3726000 +b1100001 4 +1# +#3744000 +0# +#3762000 +b1100010 4 +1# +#3780000 +0# +#3798000 +b1100011 4 +1# +#3816000 +0# +#3834000 +b1100100 4 +1# +#3852000 +0# +#3870000 +b1100101 4 +1# +#3888000 +0# +#3906000 +b1100110 4 +1# +#3924000 +0# +#3942000 +b1100111 4 +1# +#3960000 +0# +#3978000 +b1101000 4 +1# +#3996000 +0# +#4014000 +b1101001 4 +1# +#4032000 +0# +#4050000 +b1101010 4 +1# +#4068000 +0# +#4086000 +b1101011 4 +1# +#4104000 +0# +#4122000 +b1101100 4 +1# +#4140000 +0# +#4158000 +b1101101 4 +1# +#4176000 +0# +#4194000 +b1101110 4 +1# +#4212000 +0# +#4230000 +b1101111 4 +1# +#4248000 +0# +#4266000 +b1110000 4 +1# +#4284000 +0# +#4302000 +b1110001 4 +1# +#4320000 +0# +#4338000 +b1110010 4 +1# +#4356000 +0# +#4374000 +b1110011 4 +1# +#4392000 +0# +#4410000 +b1110100 4 +1# +#4428000 +0# +#4446000 +b1110101 4 +1# +#4464000 +0# +#4482000 +b1110110 4 +1# +#4500000 +0# +#4518000 +b1110111 4 +1# +#4536000 +0# +#4554000 +b1111000 4 +1# +#4572000 +0# +#4590000 +b1111001 4 +1# +#4608000 +0# +#4626000 +b1111010 4 +1# +#4644000 +0# +#4662000 +b1111011 4 +1# +#4680000 +0# +#4698000 +b1111100 4 +1# +#4716000 +0# +#4734000 +b1111101 4 +1# +#4752000 +0# +#4770000 +b1111110 4 +1# +#4788000 +0# +#4806000 +b1111111 4 +1# +#4824000 +0# +#4842000 +b10000000 4 +1# +#4860000 +0# +#4878000 +b10000001 4 +1# +#4896000 +0# +#4914000 +b10000010 4 +1# +#4932000 +0# +#4950000 +b10000011 4 +1# +#4968000 +0# +#4986000 +b10000100 4 +1# +#5004000 +0# +#5022000 +b10000101 4 +1# +#5040000 +0# +#5058000 +b10000110 4 +1# +#5076000 +0# +#5094000 +b10000111 4 +1# +#5112000 +0# +#5130000 +b10001000 4 +1# +#5148000 +0# +#5166000 +b10001001 4 +1# +#5184000 +0# +#5202000 +b10001010 4 +1# +#5220000 +0# +#5238000 +b10001011 4 +1# +#5256000 +0# +#5274000 +b10001100 4 +1# +#5292000 +0# +#5310000 +b10001101 4 +1# +#5328000 +0# +#5346000 +b10001110 4 +1# +#5364000 +0# +#5382000 +b10001111 4 +1# +#5400000 +0# +#5418000 +b10010000 4 +1# +#5436000 +0# +#5454000 +b10010001 4 +1# +#5472000 +0# +#5490000 +b10010010 4 +1# +#5508000 +0# +#5526000 +b10010011 4 +1# +#5544000 +0# +#5562000 +b10010100 4 +1# +#5580000 +0# +#5598000 +b10010101 4 +1# +#5616000 +0# +#5634000 +b10010110 4 +1# +#5652000 +0# +#5670000 +b10010111 4 +1# +#5688000 +0# +#5706000 +b10011000 4 +1# +#5724000 +0# +#5742000 +b10011001 4 +1# +#5760000 +0# +#5778000 +b10011010 4 +1# +#5796000 +0# +#5814000 +b10011011 4 +1# +#5832000 +0# +#5850000 +b10011100 4 +1# +#5868000 +0# +#5886000 +b10011101 4 +1# +#5904000 +0# +#5922000 +b10011110 4 +1# +#5940000 +0# +#5958000 +b10011111 4 +1# +#5976000 +0# +#5994000 +b10100000 4 +1# +#6012000 +0# +#6030000 +b10100001 4 +1# +#6048000 +0# +#6066000 +b10100010 4 +1# +#6084000 +0# +#6102000 +b10100011 4 +1# +#6120000 +0# +#6138000 +b10100100 4 +1# +#6156000 +0# +#6174000 +b10100101 4 +1# +#6192000 +0# +#6210000 +b10100110 4 +1# +#6228000 +0# +#6246000 +b10100111 4 +1# +#6264000 +0# +#6282000 +b10101000 4 +1# +#6300000 +0# +#6318000 +b10101001 4 +1# +#6336000 +0# +#6354000 +b10101010 4 +1# +#6372000 +0# +#6390000 +b10101011 4 +1# +#6408000 +0# +#6426000 +b10101100 4 +1# +#6444000 +0# +#6462000 +b10101101 4 +1# +#6480000 +0# +#6498000 +b10101110 4 +1# +#6516000 +0# +#6534000 +b10101111 4 +1# +#6552000 +0# +#6570000 +b10110000 4 +1# +#6588000 +0# +#6606000 +b10110001 4 +1# +#6624000 +0# +#6642000 +b10110010 4 +1# +#6660000 +0# +#6678000 +b10110011 4 +1# +#6696000 +0# +#6714000 +b10110100 4 +1# +#6732000 +0# +#6750000 +b10110101 4 +1# +#6768000 +0# +#6786000 +b10110110 4 +1# +#6804000 +0# +#6822000 +b10110111 4 +1# +#6840000 +0# +#6858000 +b10111000 4 +1# +#6876000 +0# +#6894000 +b10111001 4 +1# +#6912000 +0# +#6930000 +b10111010 4 +1# +#6948000 +0# +#6966000 +b10111011 4 +1# +#6984000 +0# +#7002000 +b10111100 4 +1# +#7020000 +0# +#7038000 +b10111101 4 +1# +#7056000 +0# +#7074000 +b10111110 4 +1# +#7092000 +0# +#7110000 +b10111111 4 +1# +#7128000 +0# +#7146000 +b11000000 4 +1# +#7164000 +0# +#7182000 +b11000001 4 +1# +#7200000 +0# +#7218000 +b11000010 4 +1# +#7236000 +0# +#7254000 +b11000011 4 +1# +#7272000 +0# +#7290000 +b11000100 4 +1# +#7308000 +0# +#7326000 +b11000101 4 +1# +#7344000 +0# +#7362000 +b11000110 4 +1# +#7380000 +0# +#7398000 +b11000111 4 +1# +#7416000 +0# +#7434000 +b11001000 4 +1# +#7452000 +0# +#7470000 +b11001001 4 +1# +#7488000 +0# +#7506000 +b11001010 4 +1# +#7524000 +0# +#7542000 +b11001011 4 +1# +#7560000 +0# +#7578000 +b11001100 4 +1# +#7596000 +0# +#7614000 +b11001101 4 +1# +#7632000 +0# +#7650000 +b11001110 4 +1# +#7668000 +0# +#7686000 +b11001111 4 +1# +#7704000 +0# +#7722000 +b11010000 4 +1# +#7740000 +0# +#7758000 +b11010001 4 +1# +#7776000 +0# +#7794000 +b11010010 4 +1# +#7812000 +0# +#7830000 +b11010011 4 +1# +#7848000 +0# +#7866000 +b11010100 4 +1# +#7884000 +0# +#7902000 +b11010101 4 +1# +#7920000 +0# +#7938000 +b11010110 4 +1# +#7956000 +0# +#7974000 +b11010111 4 +1# +#7992000 +0# +#8010000 +b11011000 4 +1# +#8028000 +0# +#8046000 +b11011001 4 +1# +#8064000 +0# +#8082000 +b11011010 4 +1# +#8100000 +0# +#8118000 +b11011011 4 +1# +#8136000 +0# +#8154000 +b11011100 4 +1# +#8172000 +0# +#8190000 +b11011101 4 +1# +#8208000 +0# +#8226000 +b11011110 4 +1# +#8244000 +0# +#8262000 +b11011111 4 +1# +#8280000 +0# +#8298000 +b11100000 4 +1# +#8316000 +0# +#8334000 +b11100001 4 +1# +#8352000 +0# +#8370000 +b11100010 4 +1# +#8388000 +0# +#8406000 +b11100011 4 +1# +#8424000 +0# +#8442000 +b11100100 4 +1# +#8460000 +0# +#8478000 +b11100101 4 +1# +#8496000 +0# +#8514000 +b11100110 4 +1# +#8532000 +0# +#8550000 +b11100111 4 +1# +#8568000 +0# +#8586000 +b11101000 4 +1# +#8604000 +0# +#8622000 +b11101001 4 +1# +#8640000 +0# +#8658000 +b11101010 4 +1# +#8676000 +0# +#8694000 +b11101011 4 +1# +#8712000 +0# +#8730000 +b11101100 4 +1# +#8748000 +0# +#8766000 +b11101101 4 +1# +#8784000 +0# +#8802000 +b11101110 4 +1# +#8820000 +0# +#8838000 +b11101111 4 +1# +#8856000 +0# +#8874000 +b11110000 4 +1# +#8892000 +0# +#8910000 +b11110001 4 +1# +#8928000 +0# +#8946000 +b11110010 4 +1# +#8964000 +0# +#8982000 +b11110011 4 +1# +#9000000 +0# +#9018000 +b11110100 4 +1# +#9036000 +0# +#9054000 +b11110101 4 +1# +#9072000 +0# +#9090000 +b11110110 4 +1# +#9108000 +0# +#9126000 +b11110111 4 +1# +#9144000 +0# +#9162000 +b11111000 4 +1# +#9180000 +0# +#9198000 +b11111001 4 +1# +#9216000 +0# +#9234000 +b11111010 4 +1# +#9252000 +0# +#9270000 +b11111011 4 +1# +#9288000 +0# +#9306000 +b11111100 4 +1# +#9324000 +0# +#9342000 +b11111101 4 +1# +#9360000 +0# +#9378000 +b11111110 4 +1# +#9396000 +0# +#9414000 +b11111111 4 +1# +#9432000 +0# +#9450000 +b100000000 4 +1# +#9468000 +0# +#9486000 +b100000001 4 +1# +#9504000 +0# +#9522000 +b100000010 4 +1# +#9540000 +0# +#9558000 +b100000011 4 +1# +#9576000 +0# +#9594000 +b100000100 4 +1# +#9612000 +0# +#9630000 +b100000101 4 +1# +#9648000 +0# +#9666000 +b100000110 4 +1# +#9684000 +0# +#9702000 +b100000111 4 +1# +#9720000 +0# +#9738000 +b100001000 4 +1# +#9756000 +0# +#9774000 +b100001001 4 +1# +#9792000 +0# +#9810000 +b100001010 4 +1# +#9828000 +0# +#9846000 +b100001011 4 +1# +#9864000 +0# +#9882000 +b100001100 4 +1# +#9900000 +0# +#9918000 +b100001101 4 +1# +#9936000 +0# +#9954000 +b100001110 4 +1# +#9972000 +0# +#9990000 +b10011100000110 ' +b10 3 +b0 4 +0! +1# +#10000000 +1$ +#10008000 +0# +#10026000 +b11 3 +1# +#10044000 +0# +#10062000 +b1 2 +1# +#10080000 +0# +#10098000 +b10 2 +1# +#10116000 +0# +#10134000 +b11 2 +1# +#10152000 +0# +#10170000 +b100 2 +1# +#10188000 +0# +#10206000 +b101 2 +1# +#10224000 +0# +#10242000 +b110 2 +1# +#10260000 +0# +#10278000 +b111 2 +1# +#10296000 +0# +#10314000 +b1000 2 +1# +#10332000 +0# +#10350000 +b1001 2 +1# +#10368000 +0# +#10386000 +b1010 2 +1# +#10404000 +0# +#10422000 +b1011 2 +1# +#10440000 +0# +#10458000 +b1100 2 +1# +#10476000 +0# +#10494000 +b1101 2 +1# +#10512000 +0# +#10530000 +b1110 2 +1# +#10548000 +0# +#10566000 +b1111 2 +1# +#10584000 +0# +#10602000 +b10000 2 +1# +#10620000 +0# +#10638000 +b10001 2 +1# +#10656000 +0# +#10674000 +b10010 2 +1# +#10692000 +0# +#10710000 +b10011 2 +1# +#10728000 +0# +#10746000 +b10100 2 +1# +#10764000 +0# +#10782000 +b10101 2 +1# +#10800000 +0# +#10818000 +b10110 2 +1# +#10836000 +0# +#10854000 +b10111 2 +1# +#10872000 +0# +#10890000 +b11000 2 +1# +#10908000 +0# +#10926000 +b11001 2 +1# +#10944000 +0# +#10962000 +b11010 2 +1# +#10980000 +0# +#10998000 +b11011 2 +1# +#11016000 +0# +#11034000 +b11100 2 +1# +#11052000 +0# +#11070000 +b11101 2 +1# +#11088000 +0# +#11106000 +b11110 2 +1# +#11124000 +0# +#11142000 +b11111 2 +1# +#11160000 +0# +#11178000 +b100000 2 +1# +#11196000 +0# +#11214000 +b100001 2 +1# +#11232000 +0# +#11250000 +b100010 2 +1# +#11268000 +0# +#11286000 +b100011 2 +1# +#11304000 +0# +#11322000 +b100100 2 +1# +#11340000 +0# +#11358000 +b100101 2 +1# +#11376000 +0# +#11394000 +b100110 2 +1# +#11412000 +0# +#11430000 +b100111 2 +1# +#11448000 +0# +#11466000 +b101000 2 +1# +#11484000 +0# +#11502000 +b101001 2 +1# +#11520000 +0# +#11538000 +b101010 2 +1# +#11556000 +0# +#11574000 +b101011 2 +1# +#11592000 +0# +#11610000 +b101100 2 +1# +#11628000 +0# +#11646000 +b101101 2 +1# +#11664000 +0# +#11682000 +b101110 2 +1# +#11700000 +0# +#11718000 +b101111 2 +1# +#11736000 +0# +#11754000 +b110000 2 +1# +#11772000 +0# +#11790000 +b110001 2 +1# +#11808000 +0# +#11826000 +b110010 2 +1# +#11844000 +0# +#11862000 +b110011 2 +1# +#11880000 +0# +#11898000 +b110100 2 +1# +#11916000 +0# +#11934000 +b110101 2 +1# +#11952000 +0# +#11970000 +b110110 2 +1# +#11988000 +0# +#12006000 +b110111 2 +1# +#12024000 +0# +#12042000 +b111000 2 +1# +#12060000 +0# +#12078000 +b111001 2 +1# +#12096000 +0# +#12114000 +b111010 2 +1# +#12132000 +0# +#12150000 +b111011 2 +1# +#12168000 +0# +#12186000 +b111100 2 +1# +#12204000 +0# +#12222000 +b111101 2 +1# +#12240000 +0# +#12258000 +b111110 2 +1# +#12276000 +0# +#12294000 +b111111 2 +1# +#12312000 +0# +#12330000 +b1000000 2 +1# +#12348000 +0# +#12366000 +b1000001 2 +1# +#12384000 +0# +#12402000 +b1000010 2 +1# +#12420000 +0# +#12438000 +b1000011 2 +1# +#12456000 +0# +#12474000 +b1000100 2 +1# +#12492000 +0# +#12510000 +b1000101 2 +1# +#12528000 +0# +#12546000 +b1000110 2 +1# +#12564000 +0# +#12582000 +b1000111 2 +1# +#12600000 +0# +#12618000 +b1001000 2 +1# +#12636000 +0# +#12654000 +b1001001 2 +1# +#12672000 +0# +#12690000 +b1001010 2 +1# +#12708000 +0# +#12726000 +b1001011 2 +1# +#12744000 +0# +#12762000 +b1001100 2 +1# +#12780000 +0# +#12798000 +b1001101 2 +1# +#12816000 +0# +#12834000 +b1001110 2 +1# +#12852000 +0# +#12870000 +b1001111 2 +1# +#12888000 +0# +#12906000 +b1010000 2 +1# +#12924000 +0# +#12942000 +b1010001 2 +1# +#12960000 +0# +#12978000 +b1010010 2 +1# +#12996000 +0# +#13014000 +b1010011 2 +1# +#13032000 +0# +#13050000 +b1010100 2 +1# +#13068000 +0# +#13086000 +b1010101 2 +1# +#13104000 +0# +#13122000 +b1010110 2 +1# +#13140000 +0# +#13158000 +b1010111 2 +1# +#13176000 +0# +#13194000 +b1011000 2 +1# +#13212000 +0# +#13230000 +b1011001 2 +1# +#13248000 +0# +#13266000 +b1011010 2 +1# +#13284000 +0# +#13302000 +b1011011 2 +1# +#13320000 +0# +#13338000 +b1011100 2 +1# +#13356000 +0# +#13374000 +b1011101 2 +1# +#13392000 +0# +#13410000 +b1011110 2 +1# +#13428000 +0# +#13446000 +b1011111 2 +1# +#13464000 +0# +#13482000 +b1100000 2 +1# +#13500000 +0# +#13518000 +b1100001 2 +1# +#13536000 +0# +#13554000 +b1100010 2 +1# +#13572000 +0# +#13590000 +b1100011 2 +1# +#13608000 +0# +#13626000 +b1100100 2 +1# +#13644000 +0# +#13662000 +b1100101 2 +1# +#13680000 +0# +#13698000 +b1100110 2 +1# +#13716000 +0# +#13734000 +b1100111 2 +1# +#13752000 +0# +#13770000 +b1101000 2 +1# +#13788000 +0# +#13806000 +b1101001 2 +1# +#13824000 +0# +#13842000 +b1101010 2 +1# +#13860000 +0# +#13878000 +b1101011 2 +1# +#13896000 +0# +#13914000 +b1101100 2 +1# +#13932000 +0# +#13950000 +b1101101 2 +1# +#13968000 +0# +#13986000 +b1101110 2 +1# +#14004000 +0# +#14022000 +b1101111 2 +1# +#14040000 +0# +#14058000 +b1110000 2 +1# +#14076000 +0# +#14094000 +b1110001 2 +1# +#14112000 +0# +#14130000 +b1110010 2 +1# +#14148000 +0# +#14166000 +b1110011 2 +1# +#14184000 +0# +#14202000 +b1110100 2 +1# +#14220000 +0# +#14238000 +b1110101 2 +1# +#14256000 +0# +#14274000 +b1110110 2 +1# +#14292000 +0# +#14310000 +b1110111 2 +1# +#14328000 +0# +#14346000 +b1111000 2 +1# +#14364000 +0# +#14382000 +b1111001 2 +1# +#14400000 +0# +#14418000 +b1111010 2 +1# +#14436000 +0# +#14454000 +b1111011 2 +1# +#14472000 +0# +#14490000 +b1111100 2 +1# +#14508000 +0# +#14526000 +b1111101 2 +1# +#14544000 +0# +#14562000 +b1111110 2 +1# +#14580000 +0# +#14598000 +b1111111 2 +1# +#14616000 +0# +#14634000 +b10000000 2 +1# +#14652000 +0# +#14670000 +b10000001 2 +1# +#14688000 +0# +#14706000 +b10000010 2 +1# +#14724000 +0# +#14742000 +b10000011 2 +1# +#14760000 +0# +#14778000 +b10000100 2 +1# +#14796000 +0# +#14814000 +b10000101 2 +1# +#14832000 +0# +#14850000 +b10000110 2 +1# +#14868000 +0# +#14886000 +b10000111 2 +1# +#14904000 +0# +#14922000 +b10001000 2 +1# +#14940000 +0# +#14958000 +b10001001 2 +1# +#14976000 +0# +#14994000 +b10001010 2 +1# +#15012000 +0# +#15030000 +b10001011 2 +1# +#15048000 +0# +#15066000 +b10001100 2 +1# +#15084000 +0# +#15102000 +b10001101 2 +1# +#15120000 +0# +#15138000 +b10001110 2 +1# +#15156000 +0# +#15174000 +b10001111 2 +1# +#15192000 +0# +#15210000 +b10010000 2 +1# +#15228000 +0# +#15246000 +b10010001 2 +1# +#15264000 +0# +#15282000 +b10010010 2 +1# +#15300000 +0# +#15318000 +b10010011 2 +1# +#15336000 +0# +#15354000 +b10010100 2 +1# +#15372000 +0# +#15390000 +b10010101 2 +1# +#15408000 +0# +#15426000 +b10010110 2 +1# +#15444000 +0# +#15462000 +b10010111 2 +1# +#15480000 +0# +#15498000 +b10011000 2 +1# +#15516000 +0# +#15534000 +b10011001 2 +1# +#15552000 +0# +#15570000 +b10011010 2 +1# +#15588000 +0# +#15606000 +b10011011 2 +1# +#15624000 +0# +#15642000 +b10011100 2 +1# +#15660000 +0# +#15678000 +b10011101 2 +1# +#15696000 +0# +#15714000 +b10011110 2 +1# +#15732000 +0# +#15750000 +b10011111 2 +1# +#15768000 +0# +#15786000 +b10100000 2 +1# +#15800000 +0$ +#15804000 +0# +#15822000 +b100 3 +b10100000 " +b10100000 1 +1# +#15840000 +0# +#15858000 +b0 3 +1# +#15876000 +0# +#15894000 +1# +#15912000 +0# +#15930000 +1# +#15948000 +0# +#15966000 +1# +#15984000 +0# +#16002000 +1# +#16020000 +0# +#16038000 +1# +#16056000 +0# +#16074000 +1# +#16092000 +0# +#16110000 +1# +#16128000 +0# +#16146000 +1# +#16164000 +0# +#16182000 +1# +#16200000 +0# +#16218000 +1# +#16236000 +0# +#16254000 +1# +#16272000 +0# +#16290000 +1# +#16300000 diff --git a/Semaine 1/Ultrasonic/ultrasonic_fpga.v b/Semaine 1/Ultrasonic/ultrasonic_fpga.v new file mode 100644 index 0000000..d854a42 --- /dev/null +++ b/Semaine 1/Ultrasonic/ultrasonic_fpga.v @@ -0,0 +1,71 @@ +module ultrasonic_fpga #( + parameter integer CLK_FREQ = 27_000_000 // frequence de clk en Hz +)( + input wire clk, + input wire rst, + input wire start, // signal de declenchement + input wire echo, // retour du capteur + output reg trig_out, // signal envoye au capteur + output reg [15:0] distance // distance mesuree +); + + reg [2:0] state; + reg [8:0] trig_counter; + reg [15:0] echo_counter; + + localparam IDLE = 0, TRIG = 1, WAIT_ECHO = 2, MEASURE_ECHO = 3, DONE = 4; + + // Constantes dépendantes de CLK_FREQ + localparam integer TRIG_DURATION_CYCLES = CLK_FREQ / 100_000; // 10us + localparam integer DIST_DIVISOR = (58 * CLK_FREQ) / 1_000_000; // pour conversion µs -> cm + + always @(posedge clk or posedge rst) begin + if (rst) begin + state <= IDLE; + trig_out <= 0; + trig_counter <= 0; + echo_counter <= 0; + distance <= 0; + end else begin + case (state) + IDLE: begin + if (start) begin + state <= TRIG; + end + end + + TRIG: begin + if (trig_counter < TRIG_DURATION_CYCLES) begin + trig_out <= 1; + trig_counter <= trig_counter + 1; + end else begin + trig_out <= 0; + trig_counter <= 0; + state <= WAIT_ECHO; + end + end + + WAIT_ECHO: begin + if (echo) begin + echo_counter <= 0; + state <= MEASURE_ECHO; + end + end + + MEASURE_ECHO: begin + if (echo) begin + echo_counter <= echo_counter + 1; + end else begin + distance <= (echo_counter*1000) / DIST_DIVISOR; + state <= DONE; + end + end + + DONE: begin + state <= IDLE; + end + endcase + end + end + +endmodule diff --git a/Semaine 1/Ultrasonic/ultrasonic_sim b/Semaine 1/Ultrasonic/ultrasonic_sim new file mode 100644 index 0000000..0101618 --- /dev/null +++ b/Semaine 1/Ultrasonic/ultrasonic_sim @@ -0,0 +1,265 @@ +#! +:ivl_version "13.0 (devel)" "(s20250103-31-g7e238e7ca-dirty)"; +:ivl_delay_selection "TYPICAL"; +:vpi_time_precision - 12; +:vpi_module "C:\Users\louis\BUT2\Verilog\OSS-CA~1\lib\ivl\system.vpi"; +:vpi_module "C:\Users\louis\BUT2\Verilog\OSS-CA~1\lib\ivl\vhdl_sys.vpi"; +:vpi_module "C:\Users\louis\BUT2\Verilog\OSS-CA~1\lib\ivl\vhdl_textio.vpi"; +:vpi_module "C:\Users\louis\BUT2\Verilog\OSS-CA~1\lib\ivl\v2005_math.vpi"; +:vpi_module "C:\Users\louis\BUT2\Verilog\OSS-CA~1\lib\ivl\va_math.vpi"; +S_000002569854ec30 .scope module, "tb_ultrasonic_fpga" "tb_ultrasonic_fpga" 2 3; + .timescale -9 -12; +v00000256985b7a50_0 .var "clk", 0 0; +v00000256985b72d0_0 .net "distance", 15 0, v000002569854e7f0_0; 1 drivers +v00000256985b7870_0 .var "echo", 0 0; +v00000256985b7cd0_0 .var "rst", 0 0; +v00000256985b7f50_0 .var "start", 0 0; +v00000256985b7910_0 .var "t_end", 63 0; +v00000256985b7af0_0 .var "t_start", 63 0; +v00000256985b7d70_0 .net "trig_out", 0 0, v00000256985b7370_0; 1 drivers +E_000002569854ae50 .event anyedge, v00000256985b7370_0; +S_000002569854edc0 .scope module, "uut" "ultrasonic_fpga" 2 17, 3 1 0, S_000002569854ec30; + .timescale 0 0; + .port_info 0 /INPUT 1 "clk"; + .port_info 1 /INPUT 1 "rst"; + .port_info 2 /INPUT 1 "start"; + .port_info 3 /INPUT 1 "echo"; + .port_info 4 /OUTPUT 1 "trig_out"; + .port_info 5 /OUTPUT 16 "distance"; +P_0000025698560660 .param/l "CLK_FREQ" 0 3 2, +C4<00000001100110111111110011000000>; +P_0000025698560698 .param/l "DIST_DIVISOR" 1 3 20, +C4<00000000000000000000000000000001>; +P_00000256985606d0 .param/l "DONE" 1 3 16, +C4<00000000000000000000000000000100>; +P_0000025698560708 .param/l "IDLE" 1 3 16, +C4<00000000000000000000000000000000>; +P_0000025698560740 .param/l "MEASURE_ECHO" 1 3 16, +C4<00000000000000000000000000000011>; +P_0000025698560778 .param/l "TRIG" 1 3 16, +C4<00000000000000000000000000000001>; +P_00000256985607b0 .param/l "TRIG_DURATION_CYCLES" 1 3 19, +C4<00000000000000000000000100001110>; +P_00000256985607e8 .param/l "WAIT_ECHO" 1 3 16, +C4<00000000000000000000000000000010>; +v000002569854ef50_0 .net "clk", 0 0, v00000256985b7a50_0; 1 drivers +v000002569854e7f0_0 .var "distance", 15 0; +v000002569854c1a0_0 .net "echo", 0 0, v00000256985b7870_0; 1 drivers +v00000256985b74b0_0 .var "echo_counter", 15 0; +v00000256985b7b90_0 .net "rst", 0 0, v00000256985b7cd0_0; 1 drivers +v00000256985b7c30_0 .net "start", 0 0, v00000256985b7f50_0; 1 drivers +v00000256985b7050_0 .var "state", 2 0; +v00000256985b77d0_0 .var "trig_counter", 8 0; +v00000256985b7370_0 .var "trig_out", 0 0; +E_000002569854af10 .event posedge, v00000256985b7b90_0, v000002569854ef50_0; + .scope S_000002569854edc0; +T_0 ; + %wait E_000002569854af10; + %load/vec4 v00000256985b7b90_0; + %flag_set/vec4 8; + %jmp/0xz T_0.0, 8; + %pushi/vec4 0, 0, 3; + %assign/vec4 v00000256985b7050_0, 0; + %pushi/vec4 0, 0, 1; + %assign/vec4 v00000256985b7370_0, 0; + %pushi/vec4 0, 0, 9; + %assign/vec4 v00000256985b77d0_0, 0; + %pushi/vec4 0, 0, 16; + %assign/vec4 v00000256985b74b0_0, 0; + %pushi/vec4 0, 0, 16; + %assign/vec4 v000002569854e7f0_0, 0; + %jmp T_0.1; +T_0.0 ; + %load/vec4 v00000256985b7050_0; + %dup/vec4; + %pushi/vec4 0, 0, 3; + %cmp/u; + %jmp/1 T_0.2, 6; + %dup/vec4; + %pushi/vec4 1, 0, 3; + %cmp/u; + %jmp/1 T_0.3, 6; + %dup/vec4; + %pushi/vec4 2, 0, 3; + %cmp/u; + %jmp/1 T_0.4, 6; + %dup/vec4; + %pushi/vec4 3, 0, 3; + %cmp/u; + %jmp/1 T_0.5, 6; + %dup/vec4; + %pushi/vec4 4, 0, 3; + %cmp/u; + %jmp/1 T_0.6, 6; + %jmp T_0.7; +T_0.2 ; + %load/vec4 v00000256985b7c30_0; + %flag_set/vec4 8; + %jmp/0xz T_0.8, 8; + %pushi/vec4 1, 0, 3; + %assign/vec4 v00000256985b7050_0, 0; +T_0.8 ; + %jmp T_0.7; +T_0.3 ; + %load/vec4 v00000256985b77d0_0; + %pad/u 32; + %cmpi/u 270, 0, 32; + %jmp/0xz T_0.10, 5; + %pushi/vec4 1, 0, 1; + %assign/vec4 v00000256985b7370_0, 0; + %load/vec4 v00000256985b77d0_0; + %addi 1, 0, 9; + %assign/vec4 v00000256985b77d0_0, 0; + %jmp T_0.11; +T_0.10 ; + %pushi/vec4 0, 0, 1; + %assign/vec4 v00000256985b7370_0, 0; + %pushi/vec4 0, 0, 9; + %assign/vec4 v00000256985b77d0_0, 0; + %pushi/vec4 2, 0, 3; + %assign/vec4 v00000256985b7050_0, 0; +T_0.11 ; + %jmp T_0.7; +T_0.4 ; + %load/vec4 v000002569854c1a0_0; + %flag_set/vec4 8; + %jmp/0xz T_0.12, 8; + %pushi/vec4 0, 0, 16; + %assign/vec4 v00000256985b74b0_0, 0; + %pushi/vec4 3, 0, 3; + %assign/vec4 v00000256985b7050_0, 0; +T_0.12 ; + %jmp T_0.7; +T_0.5 ; + %load/vec4 v000002569854c1a0_0; + %flag_set/vec4 8; + %jmp/0xz T_0.14, 8; + %load/vec4 v00000256985b74b0_0; + %addi 1, 0, 16; + %assign/vec4 v00000256985b74b0_0, 0; + %jmp T_0.15; +T_0.14 ; + %load/vec4 v00000256985b74b0_0; + %pad/u 32; + %pushi/vec4 1, 0, 32; + %div; + %pad/u 16; + %assign/vec4 v000002569854e7f0_0, 0; + %pushi/vec4 4, 0, 3; + %assign/vec4 v00000256985b7050_0, 0; +T_0.15 ; + %jmp T_0.7; +T_0.6 ; + %pushi/vec4 0, 0, 3; + %assign/vec4 v00000256985b7050_0, 0; + %jmp T_0.7; +T_0.7 ; + %pop/vec4 1; +T_0.1 ; + %jmp T_0; + .thread T_0; + .scope S_000002569854ec30; +T_1 ; + %pushi/vec4 0, 0, 1; + %store/vec4 v00000256985b7a50_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v00000256985b7cd0_0, 0, 1; + %pushi/vec4 0, 0, 1; + %store/vec4 v00000256985b7f50_0, 0, 1; + %pushi/vec4 0, 0, 1; + %store/vec4 v00000256985b7870_0, 0, 1; + %end; + .thread T_1; + .scope S_000002569854ec30; +T_2 ; + %delay 18000, 0; + %load/vec4 v00000256985b7a50_0; + %inv; + %store/vec4 v00000256985b7a50_0, 0, 1; + %jmp T_2; + .thread T_2; + .scope S_000002569854ec30; +T_3 ; + %vpi_call 2 27 "$dumpfile", "ultrasonic.vcd" {0 0 0}; + %vpi_call 2 28 "$dumpvars", 32'sb00000000000000000000000000000000, S_000002569854ec30 {0 0 0}; + %delay 100000, 0; + %pushi/vec4 0, 0, 1; + %store/vec4 v00000256985b7cd0_0, 0, 1; + %delay 100000, 0; + %pushi/vec4 1, 0, 1; + %store/vec4 v00000256985b7f50_0, 0, 1; + %delay 40000, 0; + %pushi/vec4 0, 0, 1; + %store/vec4 v00000256985b7f50_0, 0, 1; +T_3.0 ; + %load/vec4 v00000256985b7d70_0; + %pad/u 32; + %pushi/vec4 1, 0, 32; + %cmp/e; + %flag_get/vec4 4; + %cmpi/ne 1, 0, 1; + %jmp/0xz T_3.1, 6; + %wait E_000002569854ae50; + %jmp T_3.0; +T_3.1 ; + %vpi_func 2 41 "$time" 64 {0 0 0}; + %store/vec4 v00000256985b7af0_0, 0, 64; +T_3.2 ; + %load/vec4 v00000256985b7d70_0; + %pad/u 32; + %pushi/vec4 0, 0, 32; + %cmp/e; + %flag_get/vec4 4; + %cmpi/ne 1, 0, 1; + %jmp/0xz T_3.3, 6; + %wait E_000002569854ae50; + %jmp T_3.2; +T_3.3 ; + %vpi_func 2 45 "$time" 64 {0 0 0}; + %store/vec4 v00000256985b7910_0, 0, 64; + %load/vec4 v00000256985b7910_0; + %load/vec4 v00000256985b7af0_0; + %sub; + %vpi_call 2 47 "$display", "Trig HIGH duration: %0dns", S<0,vec4,u64> {1 0 0}; + %load/vec4 v00000256985b7910_0; + %load/vec4 v00000256985b7af0_0; + %sub; + %cmpi/u 9500, 0, 64; + %flag_inv 5; GE is !LT + %flag_get/vec4 5; + %jmp/0 T_3.6, 5; + %load/vec4 v00000256985b7910_0; + %load/vec4 v00000256985b7af0_0; + %sub; + %cmpi/u 10500, 0, 64; + %flag_get/vec4 4; + %flag_get/vec4 5; + %or; + %and; +T_3.6; + %flag_set/vec4 8; + %jmp/0xz T_3.4, 8; + %vpi_call 2 50 "$display", "Trigger signal is high for 10us." {0 0 0}; + %delay 10000, 0; + %pushi/vec4 1, 0, 1; + %store/vec4 v00000256985b7870_0, 0, 1; + %delay 5800000, 0; + %pushi/vec4 0, 0, 1; + %store/vec4 v00000256985b7870_0, 0, 1; + %jmp T_3.5; +T_3.4 ; + %vpi_call 2 58 "$display", "Trigger signal is NOT high for 10us." {0 0 0}; +T_3.5 ; + %delay 500000, 0; + %load/vec4 v00000256985b72d0_0; + %pad/u 32; + %cmpi/u 0, 0, 32; + %flag_or 5, 4; GT is !LE + %flag_inv 5; + %jmp/0xz T_3.7, 5; + %vpi_call 2 65 "$display", "Distance measured: %d cm", v00000256985b72d0_0 {0 0 0}; + %jmp T_3.8; +T_3.7 ; + %vpi_call 2 67 "$display", "No distance measured." {0 0 0}; +T_3.8 ; + %vpi_call 2 70 "$finish" {0 0 0}; + %end; + .thread T_3; +# The file index is used to find the file name in the following table. +:file_names 4; + "N/A"; + ""; + "tb_ultrasonic_fpga.v"; + "ultrasonic_fpga.v";