使用任務設計四個並行輸入數的排序組合邏輯

1、使用冒泡排序算法,編寫一個任務,完成四個8位2進制輸入數據的

(1)、冒泡排序思想:(如下圖)



(2)、從上面的算法思想中可以看出,在排序過程中,我們需要設定一個計數器,以判斷在第i輪排序中,要排序到多少位;


(3)、建模

`define data_length 8

module sort3(a,b,c,d,ra,rb,rc,rd);
  input [`data_length-1:0]a,b,c,d;
  output [`data_length-1:0]ra,rb,rc,rd;
  
  reg [`data_length-1:0]ra,rb,rc,rd;
  reg [`data_length-1:0]va,vb,vc,vd;
  
  always @(a,b,c,d)
  begin
    {va,vb,vc,vd}={a,b,c,d};
    sort3(va,vb);
    sort3(vb,vc);
    sort3(vc,vd);
    sort3(va,vb);
    sort3(vb,vc);
    sort3(va,vb);
    
    {ra,rb,rc,rd}={va,vb,vc,vd};
    
  end
  
  
  task sort3;
    inout [`data_length-1:0]x,y;
    reg [`data_length-1:0]tmp;
    
    if(x>y)
      begin
        tmp=x;
        x=y;
        y=tmp;
      end
  endtask
  
  //assign r[`data_number-1:0]=v[`data_number-1:0];
endmodule
    
(3)仿真:

`include "sort3.v"
//`timescale 1ns/100ps


module sort3_stimulus;
  reg [7:0]a,b,c,d;
  wire [7:0]ra,rb,rc,rd;
  
  sort3  sm(a,b,c,d,ra,rb,rc,rd);
  
  initial
  begin
    a=0;b=0;c=0;d=0;
    repeat(50)
    begin
      #100 a={$random}%256;
           b={$random}%256;
           c={$random}%256;
           d={$random}%256;
      //#100 $stop;
    end
    /*#100 a=8'd15;b=8'd8;c=8'd13;d=8'd4;
    #100 a=8'd15;b=8'd13;c=8'd8;d=8'd4;
    #100 a=8'd7;b=8'd8;c=8'd2;d=8'd1;
    #100 a=8'd14;b=8'd8;c=8'd13;d=8'd4;
   */
 end
endmodule   







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章