module SIN_OP( clk, rstn, pha_map, // pha_indx_msb, sin_op_o ); input clk; input rstn; input[18:0] pha_map; //output [2:0] pha_indx_msb; output [14:0] sin_op_o; wire [2:0] pha_indx_msb_w; assign pha_indx_msb_w=pha_map[18:16]; wire [15:0] pha_indx_lsb; assign pha_indx_lsb=pha_map[15:0]; wire [15:0] pha_op; assign pha_op=pha_indx_msb_w[0]?(~pha_indx_lsb):pha_indx_lsb; wire [4:0] indx; assign indx=pha_op[15:11]; wire [10:0] x_w; assign x_w=pha_op[10:0]; wire [17:0] c0; wire [11:0] c1; wire [4:0] c2; COEF_S coef_s_inst1( .index(indx) , .C0_S(c0) , .C1_S(c1) , .C2_S(c2) ); reg[17:0] c0_r1; reg[17:0] c0_r2; reg[17:0] c0_r3; reg[17:0] c0_r4; reg[17:0] c0_r5; reg[17:0] c0_r6; always@(posedge clk) begin c0_r1<=c0; c0_r2<=c0_r1; c0_r3<=c0_r2; c0_r4<=c0_r3; c0_r5<=c0_r4; c0_r6<=c0_r5; end reg [11:0] c1_r1; reg [11:0] c1_r2; reg [11:0] c1_r3; always@(posedge clk) begin c1_r1<=c1; c1_r2<=c1_r1; c1_r3<=c1_r2; end reg [4:0] c2_r1; always@(posedge clk) c2_r1<=c2; reg[10:0] x_r1; reg[10:0] x_r2; reg[10:0] x_r3; reg[10:0] x_r4; always@(posedge clk) begin x_r1<=x_w; x_r2<=x_r1; x_r3<=x_r2; x_r4<=x_r3; end wire [15:0] c2x; DW_mult_pipe #(11,5,2,0,1) inst_mult_0( .clk (clk ), .rst_n (rstn ), .en (1'b1 ), .a (x_r1 ), .b (c2_r1 ), .tc (1'b0 ), .product (c2x ) ); wire [4:0] c2x_w; assign c2x_w=c2x[10]?(c2x[15:11]+5'd1):c2x[15:11]; reg [11:0] c2xc1; always@(posedge clk) c2xc1<=c1_r2-c2x_w; wire [22:0] c2xc1x; DW_mult_pipe #(11,12,3,0,1) inst_mult_1( .clk (clk ), .rst_n (rstn ), .en (1'b1 ), .a (x_r3 ), .b (c2xc1 ), .tc (1'b0 ), .product (c2xc1x ) ); wire [12:0] c2xc1x_w; assign c2xc1x_w=c2xc1x[9]?(c2xc1x[22:10]+13'd1):c2xc1x[22:10]; reg [12:0] c2xc1x_r; always@(posedge clk) c2xc1x_r<=c2xc1x_w; wire[17:0] c2xc1xc0; assign c2xc1xc0=c0_r6+c2xc1x_r; wire [14:0] c2xc1xc0_w; assign c2xc1xc0_w=c2xc1xc0[2]?(c2xc1xc0[17:3]+13'd1):c2xc1xc0[17:3]; reg [14:0] c2xc1xc0_r; always@(posedge clk) c2xc1xc0_r<=c2xc1xc0_w; assign sin_op_o=c2xc1xc0_r; /* reg[2:0] pha_indx_msb_r1; reg[2:0] pha_indx_msb_r2; reg[2:0] pha_indx_msb_r3; reg[2:0] pha_indx_msb_r4; reg[2:0] pha_indx_msb_r5; reg[2:0] pha_indx_msb_r6; reg[2:0] pha_indx_msb_r7; always@(posedge clk) begin pha_indx_msb_r1<=pha_indx_msb_w; pha_indx_msb_r2<=pha_indx_msb_r1; pha_indx_msb_r3<=pha_indx_msb_r2; pha_indx_msb_r4<=pha_indx_msb_r3; pha_indx_msb_r5<=pha_indx_msb_r4; pha_indx_msb_r6<=pha_indx_msb_r5; pha_indx_msb_r7<=pha_indx_msb_r6; end end assign pha_indx_msb=pha_indx_msb_r7; */ endmodule