forked from tanchou/Verilog
36 lines
1.0 KiB
Coq
36 lines
1.0 KiB
Coq
|
|
module dht11_interface (
|
||
|
|
input wire i_clk, // 27 MHz
|
||
|
|
inout wire io_dht11_sig,
|
||
|
|
output wire o_dht11_data_ready,
|
||
|
|
output wire [7:0] o_temp_data,
|
||
|
|
output wire [7:0] o_hum_data,
|
||
|
|
output wire o_dht11_error
|
||
|
|
);
|
||
|
|
|
||
|
|
// === DHT11 INTERFACE ===
|
||
|
|
// Le module DHT11 est connecté à la broche io_dht11_sig.
|
||
|
|
// La communication se fait en mode bidirectionnel.
|
||
|
|
|
||
|
|
wire sig_dir;
|
||
|
|
wire sig_out;
|
||
|
|
|
||
|
|
assign io_dht11_sig = sig_dir ? sig_out : 1'bz;
|
||
|
|
|
||
|
|
|
||
|
|
// === FSM ===
|
||
|
|
localparam IDLE = 3'd0, // Pull up la ligne
|
||
|
|
|
||
|
|
START = 3'd1, // Pull low 18ms
|
||
|
|
WAIT_RESPONSE = 3'd2, // Release la ligne (entre 20 et 40us)
|
||
|
|
|
||
|
|
READ_HUM_INT = 3'd3,
|
||
|
|
READ_HUM_DEC = 3'd4;
|
||
|
|
READ_TEMP_INT = 3'd5,
|
||
|
|
READ_TEMP_DEC = 3'd6,
|
||
|
|
READ_CHECKSUM = 3'd7, // Last 8 bits of {1st Byte + 2nd Byte + 3rd Byte+ 4th Byte}
|
||
|
|
|
||
|
|
DONE = 3'd8;
|
||
|
|
|
||
|
|
|
||
|
|
endmodule
|