module diff_p ( input rstn ,input clk ,input en ,input vldi ,input signed [15:0] din0 ,input signed [15:0] din1 ,input signed [15:0] din2 ,input signed [15:0] din3 ,output reg vldo ,output signed [15:0] dout_p0 ,output signed [15:0] dout_p1 ,output signed [15:0] dout_p2 ,output signed [15:0] dout_p3 ,output signed [15:0] dout_p4 ,output signed [15:0] dout_p5 ,output signed [15:0] dout_p6 ,output signed [15:0] dout_p7 ,output signed [15:0] diff_p0 ,output signed [15:0] diff_p1 ,output signed [15:0] diff_p2 ,output signed [15:0] diff_p3 ,output signed [15:0] diff_p4 ,output signed [15:0] diff_p5 ,output signed [15:0] diff_p6 ,output signed [15:0] diff_p7 ); wire signed [15:0] din_p0_r0; wire signed [15:0] din_p1_r0; wire signed [15:0] din_p2_r0; wire signed [15:0] din_p3_r0; wire signed [15:0] din_p4_r0; wire signed [15:0] din_p5_r0; wire signed [15:0] din_p6_r0; wire signed [15:0] din_p7_r0; wire vldo_0; wire vldo_1; wire vldo_2; wire vldo_3; wire vldo_r0; assign vldo_r0 = vldo_0 || vldo_1 || vldo_2 || vldo_3; sirv_gnrl_dffr #(1) dff_vldo_1(vldo_r0, vldo ,clk,rstn); s2p_2 inst1_s2p_2 ( .clk (clk), .rst_n (rstn), .din (din0), .en (vldi), .dout0 (din_p0_r0), .dout1 (din_p4_r0) ,.vldo( vldo_0) ); s2p_2 inst2_s2p_2 ( .clk (clk), .rst_n (rstn), .din (din1), .en (vldi), .dout0 (din_p1_r0), .dout1 (din_p5_r0) ,.vldo( vldo_1) ); s2p_2 inst3_s2p_2 ( .clk (clk), .rst_n (rstn), .din (din2), .en (vldi), .dout0 (din_p2_r0), .dout1 (din_p6_r0) ,.vldo( vldo_2) ); s2p_2 inst4_s2p_2 ( .clk (clk), .rst_n (rstn), .din (din3), .en (vldi), .dout0 (din_p3_r0), .dout1 (din_p7_r0) ,.vldo( vldo_3) ); reg signed [15:0] din_p0_r1; reg signed [15:0] din_p1_r1; reg signed [15:0] din_p2_r1; reg signed [15:0] din_p3_r1; reg signed [15:0] din_p4_r1; reg signed [15:0] din_p5_r1; reg signed [15:0] din_p6_r1; reg signed [15:0] din_p7_r1; sirv_gnrl_dfflr #(16) din_p7_1(en,din_p7_r0, din_p7_r1 ,clk,rstn); assign dout_p0 = din_p0_r0; assign dout_p1 = din_p1_r0; assign dout_p2 = din_p2_r0; assign dout_p3 = din_p3_r0; assign dout_p4 = din_p4_r0; assign dout_p5 = din_p5_r0; assign dout_p6 = din_p6_r0; assign dout_p7 = din_p7_r0; reg signed [15:0] diff_p0_r1; reg signed [15:0] diff_p1_r1; reg signed [15:0] diff_p2_r1; reg signed [15:0] diff_p3_r1; reg signed [15:0] diff_p4_r1; reg signed [15:0] diff_p5_r1; reg signed [15:0] diff_p6_r1; reg signed [15:0] diff_p7_r1; always @(posedge clk or negedge rstn)begin if(rstn==1'b0)begin diff_p0_r1 <= 0; diff_p1_r1 <= 0; diff_p2_r1 <= 0; diff_p3_r1 <= 0; diff_p4_r1 <= 0; diff_p5_r1 <= 0; diff_p6_r1 <= 0; diff_p7_r1 <= 0; end else if(en)begin diff_p0_r1 <= din_p0_r0 - din_p7_r1; diff_p1_r1 <= din_p1_r0 - din_p0_r0; diff_p2_r1 <= din_p2_r0 - din_p1_r0; diff_p3_r1 <= din_p3_r0 - din_p2_r0; diff_p4_r1 <= din_p4_r0 - din_p3_r0; diff_p5_r1 <= din_p5_r0 - din_p4_r0; diff_p6_r1 <= din_p6_r0 - din_p5_r0; diff_p7_r1 <= din_p7_r0 - din_p6_r0; end else begin diff_p0_r1 <= diff_p0_r1; diff_p1_r1 <= diff_p1_r1; diff_p2_r1 <= diff_p2_r1; diff_p3_r1 <= diff_p3_r1; diff_p4_r1 <= diff_p4_r1; diff_p5_r1 <= diff_p5_r1; diff_p6_r1 <= diff_p6_r1; diff_p7_r1 <= diff_p7_r1; end end assign diff_p0 = diff_p0_r1; assign diff_p1 = diff_p1_r1; assign diff_p2 = diff_p2_r1; assign diff_p3 = diff_p3_r1; assign diff_p4 = diff_p4_r1; assign diff_p5 = diff_p5_r1; assign diff_p6 = diff_p6_r1; assign diff_p7 = diff_p7_r1; endmodule