module OneWire (
input wire clk,
input wire reset,
input wire data_in,
output wire data_out,
output wire crc_error,
output wire data_ready
);
// 状态定义
parameter IDLE = 2'b00;
parameter RESET = 2'b01;
parameter READ = 2'b10;
parameter CRC_CHECK = 2'b11;
reg [1:0] state;
reg [7:0] data;
reg [7:0] crc;
reg [3:0] bit_counter;
reg reset_complete;
// 时序控制
reg shift_reg;
reg shift_data;
reg shift_complete;
always @(posedge clk) begin
if (reset) begin
state <= IDLE;
data <= 8'b0;
crc <= 8'b0;
bit_counter <= 4'b0;
reset_complete <= 0;
shift_reg <= 0;
shift_data <= 0;
shift_complete <= 0;
data_ready <= 0;
crc_error <= 0;
end else begin
case (state)
IDLE: begin
if (reset_complete)
state <= RESET;