module fm_3d_interp_s (
    clk_core,
    rst_x,
    i_en,
    i_a,
    i_b,
    i_t,
    i_w,
    o_c
);

////////////////////////////
// I/O definition
////////////////////////////
    input         clk_core;
    input         rst_x;
    input         i_en;
    input  [21:0] i_a;
    input  [21:0] i_b;
    input  [21:0] i_t;
    input  [21:0] i_w;
    output [21:0] o_c;          // result


///////////////////////////////////////////
//  wire 
///////////////////////////////////////////
    wire [21:0]  w_wd;

    wire [21:0]  w_io;
////////////////////////////
// module instance
////////////////////////////

    // stage1-9 (interpolate)

    fm_3d_interp interp (
        .clk_core(clk_core),
        .i_en(i_en),
        .i_a(i_a),
        .i_b(i_b),
        .i_t(i_t),
        .o_c(w_io)
    );

    fm_3d_delay #(22,9) delay_wd (
        .clk_core(clk_core),
        .i_en(i_en),
        .i_data(i_w),
        .o_data(w_wd)
    );

    // stage 10-12
    fm_3d_fmul mul_w (
        .clk_core(clk_core),
        .i_en(i_en),
        .i_a(w_io),
        .i_b(w_wd),
        .o_c(o_c)
    );

endmodule