always @(posedge clk or posedge reset) begin
if (reset) begin
buffer_index <= 0;
decimal_index <= 0;
integer_part <= 0;
fractional_part <= 0;
fixedpoint_out <= 0;
end else if (ascii_in != 8'h00) begin
num_buffer[buffer_index] <= ascii_in;
buffer_index <= buffer_index + 1;
end else begin
if (num_buffer[decimal_index] == 8'h2E) begin // Check for decimal point
decimal_index <= decimal_index + 1;
end else if (decimal_index < 4) begin // Integer part
integer_part <= integer_part * 10 + (num_buffer[decimal_index] - 8'h30);
decimal_index <= decimal_index + 1;
end else begin // Fractional part
fractional_part <= fractional_part + ((num_buffer[decimal_index] - 8'h30) << (16 - decimal_index));
decimal_index <= decimal_index + 1;
end
end
end
always @(posedge clk or posedge reset) begin
if (reset) begin
fixedpoint_out <= 0;
end else if (decimal_index == 12) begin
fixedpoint_out <= integer_part + fractional_part;
end
end