46 lines
1.1 KiB
Verilog

`timescale 1ns/1ns
module Sort3 (
input clk,
input rst_n,
input [7:0] data1, data2, data3,
output reg [7:0] max_data, mid_data, min_data
);
//-----------------------------------
//Sort of 3 datas
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin
max_data <= 0;
mid_data <= 0;
min_data <= 0;
end
else begin
//get the max value
if(data1 >= data2 && data1 >= data3)
max_data <= data1;
else if(data2 >= data1 && data2 >= data3)
max_data <= data2;
else//(data3 >= data1 && data3 >= data2)
max_data <= data3;
//get the mid value
if((data1 >= data2 && data1 <= data3) || (data1 >= data3 && data1 <= data2))
mid_data <= data1;
else if((data2 >= data1 && data2 <= data3) || (data2 >= data3 && data2 <= data1))
mid_data <= data2;
else//((data3 >= data1 && data3 <= data2) || (data3 >= data2 && data3 <= data1))
mid_data <= data3;
//ge the min value
if(data1 <= data2 && data1 <= data3)
min_data <= data1;
else if(data2 <= data1 && data2 <= data3)
min_data <= data2;
else//(data3 <= data1 && data3 <= data2)
min_data <= data3;
end
end
endmodule