// 分形维数估算器 - 用盒计数法估算图案的分形维数
module fractal_estimator #(
    parameter WIDTH = 256,
    parameter HEIGHT = 256,
    parameter MAX_BOX = 8
)(
    input  wire                     clk,
    input  wire                     rst_n,
    input  wire [WIDTH*HEIGHT-1:0]  pattern,
    output reg  [15:0]              box_counts [0:MAX_BOX-1],
    output reg  [15:0]              fractal_dim,
    output reg                      estimation_done
);
    integer scale, bx, by, count;
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            estimation_done <= 1'b0;
            fractal_dim <= 16'd0;
        end else begin
            for (scale = 0; scale < MAX_BOX; scale = scale + 1) begin
                count = 0;
                for (by = 0; by < HEIGHT; by = by + (1 << scale)) begin
                    for (bx = 0; bx < WIDTH; bx = bx + (1 << scale)) begin
                        // 检查这个盒子中是否有活元胞
                        reg has_active;
                        has_active = 1'b0;
                        for (integer dy = 0; dy < (1<<scale) && !has_active; dy = dy + 1)
                            for (integer dx = 0; dx < (1<<scale) && !has_active; dx = dx + 1)
                                if (pattern[(by+dy)*WIDTH+bx+dx]) has_active = 1'b1;
                        if (has_active) count = count + 1;
                    end
                end
                box_counts[scale] <= count;
            end
            estimation_done <= 1'b1;
        end
    end
endmodule