12个数进行排序后输出
'''verilog
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
'''