module compare_1(
data_a ,
data_b ,
data_c ,
data_max ,
data_min ,
data_med
);
input [5:0] data_a ;
input [5:0] data_b ;
input [5:0] data_c ;
output [5:0] data_max;
output [5:0] data_min;
output [5:0] data_med;
wire [5:0] data_max;
wire [5:0] data_min;
wire [5:0] data_med;
wire [5:0] a,b,c;//a,b,c代替三个输入,方便代码书写
assign a=data_a;
assign b=data_b;
assign c=data_c;
assign data_med = (a<b)?(b<c)?b:(a>c)?a:c : (b>c)?b:(a<c)?a:c;
assign data_min = (a<b)?(a<c)?a:c : (b>c)?c:b ;
assign data_max = (a>b)?(a>c)?a:c : (b>c)?b:c ;
endmodule
module compare_2 (
dat_1 ,
dat_2 ,
dat_max ,
dat_min
);
input [5:0] dat_1 ;
input [5:0] dat_2 ;
output [5:0] dat_max;
output [5:0] dat_min;
wire [5:0] dat_max;
wire [5:0] dat_min;
assign dat_max=(dat_1>dat_2)? dat_1:dat_2;
assign dat_min=(dat_1>dat_2)? dat_2:dat_1;
endmodule
//---------------------------------------------------------------------- 第一阶段
// 第一阶段 max11 第一阶段1
compare u11_compare(
.data_a (p_11) , // 3*3矩阵第一行第一个数
.data_b (p_12) , // 第二个
.data_c (p_13), // 第三个
.data_max (max11),
.data_min (min11),
.data_med (med11)
);
//求第二行的最大值,最小值,中间值
compare u12_compare(
.data_a (p_21), //3*3矩阵第二行
.data_b (p_22),//
.data_c (p_23),//
.data_max(max12),
.data_min(min12),
.data_med(med12));
//求第三行的最大值,最小值,中间值
compare u13_compare(
.data_a (p_31) , //3*3矩阵第三行
.data_b (p_32) ,//
.data_c (p_33) ,//
.data_max(max13) ,
.data_min(min13) ,
.data_med(med13)
);
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
max_p1_1<=0; //第一行的最大数
max_p1_2<=0; // 中间数
max_p1_3<=0; // 最小数
min_p1_1<=0; //第二行的最大数
min_p1_2<=0; // 中间数
min_p1_3<=0; // 最小数
med_p1_1<=0; //第三行
med_p1_2<=0;
med_p1_3<=0;
end
else if(per_href_ff1==1&&flag_do==1)begin
max_p1_1<=max11;
max_p1_2<=max12;
max_p1_3<=max13;
min_p1_1<=min11;
min_p1_2<=min12;
min_p1_3<=min13;
med_p1_1<=med11;
med_p1_2<=med12;
med_p1_3<=med13;
e