Verilog冒泡法排序


 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM