// 帧率控制器 - 自适应帧率
module frame_rate_ctrl #(
    parameter TARGET_FPS = 60
)(
    input  wire        clk,
    input  wire        rst_n,
    input  wire        ca_done,     // CA一步完成
    output wire        display_en,  // 显示使能
    output wire        ca_step,     // CA步进信号
    output wire [31:0] actual_fps   // 实际帧率
);
    localparam CLK_PER_FRAME = 100_000_000 / TARGET_FPS;
    reg [31:0] frame_timer;
    reg [31:0] fps_counter;
    reg [31:0] fps_timer;
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            frame_timer <= 32'd0;
            fps_counter <= 32'd0;
            fps_timer   <= 32'd0;
        end else begin
            frame_timer <= frame_timer + 32'd1;
            fps_timer   <= fps_timer + 32'd1;
            if (frame_timer >= CLK_PER_FRAME) begin
                frame_timer <= 32'd0;
                fps_counter <= fps_counter + 32'd1;
            end
            if (fps_timer >= 100_000_000) begin
                fps_timer <= 32'd0;
            end
        end
    end
    assign display_en = (frame_timer < CLK_PER_FRAME);
    assign ca_step = ca_done;
    assign actual_fps = fps_counter;
endmodule