module fm_3d_ru_outline_edge_update (
    clk_core,
    rst_x,
    i_en,
    i_cur_p,
    i_step_p,
    i_delta_a,
    i_aa_mode,
    o_cur_p
);

////////////////////////////
// I/O definition
////////////////////////////
    input         clk_core;
    input         rst_x;
    input         i_en;
    input  [21:0] i_cur_p;
    input  [21:0] i_step_p;
    input  [21:0] i_delta_a;
    input         i_aa_mode;
    output [21:0] o_cur_p;
////////////////////////////
// wire
////////////////////////////
    wire  [21:0]  w_step_p;
    wire  [21:0]  w_cur_p;
    wire  [21:0]  w_step_pp;
    wire  [21:0]  w_cur_pp;
////////////////////////////
// assign
////////////////////////////
    assign w_step_pp = (i_aa_mode) ? w_step_p : i_step_p;
    assign w_cur_pp  = (i_aa_mode) ? w_cur_p : i_cur_p;
////////////////////////////
// module instance
////////////////////////////

    // step * delta
    fm_3d_fmul mul_delta (
        .clk_core(clk_core),
        .i_en(i_en),
        .i_a(i_step_p),
        .i_b(i_delta_a),
        .o_c(w_step_p)
    );

    // delay adjust for delta
    fm_3d_delay #(22,3) delay_p (
        .clk_core(clk_core),
        .i_en(i_en),
        .i_data(i_cur_p),
        .o_data(w_cur_p)
    );

    // adder (end_p - start_p)
    fm_3d_fadd fadd (
        .clk_core(clk_core),
        .i_en(i_en),
        .i_a(w_cur_pp),
        .i_b(w_step_pp),
        .i_adsb(1'b0),
        .o_c(o_cur_p)
    );



endmodule