module sort(clk,rst,datain,dataout,over);
parameter length=8; // the bits number of data
parameter weikuan=256; // the length of the memory
input clk,rst;
input[length-1:0] datain;
output[length-1:0] dataout;
output over;
reg over;
reg [length-1:0] dataout;
reg [length-1:0] memo[weikuan-1:0];
integer i,j,m;
//**************数据交换任务模块************//
task exchange;
inout[length-1:0] x,y;
reg[length-1:0] temp;
begin
if(x<y)
begin
temp=x;
x=y;
y=temp;
end
end
endtask
//***********************************************
always@(negedge clk or posedge rst)
if(!rst)
begin
i=0;
j=0;
m=0;
over=0;
end
else
if(m==weikuan-1) //the memory is full
begin
m=weikuan-1;
if(i==weikuan) //arrangement is over, set over to be "1"
begin
i=weikuan;
over=1;
end
if(i<weikuan)
for(i=0;i<weikuan;i=i+1) //then put the datas in order
begin
for(j=0;j<weikuan-1-i;j=j+1) //note the range of 'j'
exchange(memo[j+1],memo[j]); //if 'memo[j+1]<memo[j]', exchange them.
end
end
else //input the data first
begin
memo[m]=datain;
m=m+1;
end
endmodule