思路:1、把六个数看成是两组的3个数
2、对每组的三个数进行从大到小的排序
3、找出有序的两组数中最大、次最大和第三最大值
//模块1:对三个数按照从大到小排序
//例:若 i_t_1st_max=20 i_t_2nd_max=5 i_t_3th_max=30
i_Num_t_1st_max=1 i_Num_t_2nd_max=2 i_Num_t_3th_max=3
则 o_all_1st_max=30 o_all_2nd _max=20 o_all_3th_max=5
o_index_1stmax=3 o_index_2ndmax=1 o_index_3thmax=2
module rank3data(
input i_rst_n,
i_start
//输入的三个数
input signed[`EXTENDWORDSIZE:0] i_t_1st_max,
i_t_2nd_max,
i_t_3th_max,
//输入的三个数对应的序列号
input [`INDEX:0] i_Num_t_1st_max,
i_Num_t_2nd_max,
i_Num_t_3th_max,
//排序后输出的三个数对应的序号
output reg [`INDEX:0] o_index_1stmax,
o_index_2ndmax,
o_index_3thmax,
//排序后输出的三个数
output reg signed[`EXTENDWORDSIZE:0] o_all_1st_max,
o_all_2nd_max,
o_all_3th_max
);
always @(i_rst_n or i_start or i_t_1st_max or i_t_2nd_max or i_t_3th_max or i_Num_t_1st_max or i_Num_t_2nd_max or i_Num_t_3th_max) begin
if(!i_rst_n)begin
o_all_1st_max=0;
o_all_2nd_max=0;
o_all_3th_max=0;
o_index_1stmax=0;
o_index_2ndmax=0;
o_index_3thmax=0;
end
else if(i_start)begin
if(i_t_1st_max>=i_t_2nd_max)begin
if(i_t_1st_max>=i_t_3th_max) begin
if(i_t_2nd_max>=i_t_3th_max) begin
o_all_1st_max=i_t_1st_max;
o_all_2nd_max=i_t_2nd_max;
o_all_3th_max=i_t_3th_max;
o_index_1stmax=i_Num_t_1st_max;
o_index_2ndmax=i_Num_t_2nd_max;
o_index_3thmax=i_Num_t_3th_max;
end
else begin
o_all_1st_max=i_t_1st_max;
o_all_2nd_max=i_t_3th_max;
o_all_3th_max=i_t_2nd_max;
o_index_1stmax=i_Num_t_1st_max;
o_index_2ndmax=i_Num_t_3th_max;
o_index_3thmax=i_Num_t_2nd_max;
end
end
else begin
o_all_1st_max=i_t_3th_max;
o_all_2nd_max=i_t_1st_max;
o_all_3th_max=i_t_2nd_max;
o_index_1stmax=i_Num_t_3th_max;
o_index_2ndmax=i_Num_t_1st_max;
o_index_3thmax=i_Num_t_2nd_max;
end
end
else begin
if(i_t_1st_max<i_t_3th_max)begin
if(i_t_2nd_max>=i_t_3th_max) begin
o_all_1st_max=i_t_2nd_max;
o_all_2nd_max=i_t_3th_max;
o_all_3th_max=i_t_1st_max;
o_index_1stmax=i_Num_t_2nd_max;
o_index_2ndmax=i_Num_t_3th_max;
o_index_3thmax=i_Num_t_1st_max;
end
else begin </