12个数排序

12个数进行排序后输出

module new_12 #(

     parameter DATA_WIDTH = 8,
     parameter DATA_NUM = 12

)(

          input wire [DATA_WIDTH-1:0] data_in [DATA_NUM-1:0]

         ,output wire [DATA_WIDTH-1:0] data_out[DATA_NUM-1:0]

);

genvar i;

reg [DATA_NUM-1:0] cnt [DATA_NUM-1:0];
generate

for(i=0;i<DATA_NUM;i=i+1) begin: SEL_12
   sel_l_func lnst(

      .data     (data_in[i]   )

     ,.data_ln  (data_in     )

     ,.cnt_res  (cnt[i]      )

     );

end

endgenerate

wire[DATA_WIDTH-1:0] data_o [DATA_NUM-1:0];
reg [DATA_WIDTH-1:0] data_o_d[DATA_NUM-1:0];
generate

for(i=0;i<DATA_NUM;i=i+1) begin: DATA_OUT

   assign data_o[i] = (cnt[0 ]      == 1) ? data_in[0 ] :

                        ((cnt[1 ]   == 1) ? data_in[1 ] :

                        ((cnt[2 ]   == 1) ? data_in[2 ] :

                        ((cnt[3 ]   == 1) ? data_in[3 ] :

                        ((cnt[4 ]   == 1) ? data_in[4 ] :

                        ((cnt[5 ]   == 1) ? data_in[5 ] :

                        ((cnt[6 ]   == 1) ? data_in[6 ] :

                        ((cnt[7 ]   == 1) ? data_in[7 ] :

                        ((cnt[8 ]   == 1) ? data_in[8 ] :

                        ((cnt[9 ]   == 1) ? data_in[9 ] :

                        ((cnt[10] == 1) ? data_in[10] : data_in[11]))))))))));

end

endgenerate

endmodule

module sei_1_func #(

     parameter DATA_WIDTH = 8,
     parameter DATA_NUM = 12

)(

          input wire [DATA_WIDTH-1:0] data
         ,input wire [DATA_WIDTH-1:0] data_in [DATA_NUM-1:0]

         ,output wire [DATA_NUM-1 :0] cnt_res

);

wire [DATA_NUM-1:0] cnt;

genvar i;

generate

for(i=0;i<DATA_NUM;i=i+1) begin: SEL_1

     assign cnt[i] = data > data_in[i] ? 'd1 : 'd0;

end

endgenerate

assign cnt_res = cnt[0] + cnt[1] + cnt[2] + cnt[3] + cnt[4] + cnt[5] + cnt[6] + cnt[7] + cnt[8] + cnt[9] + cnt[10] + cnt[11];
endmodule
posted @ 2024-10-29 15:07  xswnb  阅读(1)  评论(0编辑  收藏  举报