sort_network_8x4 - EDA Playground
Warning! This exercise has been opened in another tab; autosave has been disabled. Close this tab or refresh to reactivate.

 Languages & Libraries

 Tools & Simulators

 Examples

208


52
 
1
// Code your testbench here
2
// or browse Examples
3
module tb_sort_network_8x4 ();
4
  
5
  reg [3:0] data_in [0:7];
6
  
7
  wire [3:0] data_sort [0:7];
8
  
9
  sort_network_8x4 u1 (data_in, data_sort);
10
  
11
  initial begin
12
    
13
    #5; 
14
    data_in[0] = 7; 
15
    data_in[1] = 6; 
16
    data_in[2] = 15; 
17
    data_in[3] = 14; 
18
    data_in[4] = 3; 
19
    data_in[5] = 2;
20
    data_in[6] = 1; 
21
    data_in[7] = 13;
22
    
23
    #5;
24
    data_in[0] = 8; 
25
    data_in[1] = 7; 
26
    data_in[2] = 6; 
27
    data_in[3] = 5; 
28
    data_in[4] = 4; 
29
    data_in[5] = 3;
30
    data_in[6] = 2; 
31
    data_in[7] = 1;
32
    
33
    #5;
34
    data_in[0] = 3; 
35
    data_in[1] = 4; 
36
    data_in[2] = 10; 
37
    data_in[3] = 11; 
38
    data_in[4] = 14; 
39
    data_in[5] = 13;
40
    data_in[6] = 4; 
41
    data_in[7] = 3;
42
    
43
    #80 $stop;
44
    
45
  end
46
  
47
  initial begin
48
    $dumpfile("dump.vcd");
49
    $dumpvars(0);
50
  end
51
  
52
endmodule
78
 
1
// Code your design here
2
3
module comapre_and_swap(input [3:0] data1, data2,
4
                        output [3:0] max, min);
5
  
6
  // Comparator output declaration
7
  wire data1_greater_than_data2;
8
  
9
  // Comparator output = 1 if data1 > data2
10
  // Comparator output = 0 if data1 <= data2
11
  assign data1_greater_than_data2 = data1 > data2;
12
  
13
  // max data 
14
  assign max = (data1_greater_than_data2 == 1'b1) ? data1 : data2;
15
  
16
  // min data 
17
  assign min = (data1_greater_than_data2 == 1'b1) ? data2 : data1;
18
  
19
endmodule
20
21
22
module sort_network_8x4 (input [3:0] data_in [0:7],
23
                         output [3:0] data_sort [0:7]);
24
  
25
  // wire declarations for all the sorting intermediaries
26
  wire [3:0] stage1 [0:7];
27
  
28
  wire [3:0] stage2_0 [0:7];
29
  wire [3:0] stage2_1 [0:7];
30
  
31
  wire [3:0] stage3_0 [0:7];
32
  wire [3:0] stage3_1 [0:7];
33
  wire [3:0] stage3_2 [0:7];
34
  
35
  
36
  //------------------------------------------------------------------------
37
  // Stage 0 has only one level of sorting
38
  //------------------------------------------------------------------------
39
  comapre_and_swap u1 (data_in[0], data_in[1], stage1[1], stage1[0]);
40
  comapre_and_swap u2 (data_in[2], data_in[3], stage1[2], stage1[3]);
41
  comapre_and_swap u3 (data_in[4], data_in[5], stage1[5], stage1[4]);
42
  comapre_and_swap u4 (data_in[6], data_in[7], stage1[6], stage1[7]);
43
  
44
  //------------------------------------------------------------------------
45
  //Stage 1 has 2 levels of sorting
46
  //------------------------------------------------------------------------
47
  comapre_and_swap u5 (stage1[0], stage1[2], stage2_0[2], stage2_0[0]);
48
  comapre_and_swap u6 (stage1[1], stage1[3], stage2_0[3], stage2_0[1]);
49
  comapre_and_swap u7 (stage1[4], stage1[6], stage2_0[4], stage2_0[6]);
50
  comapre_and_swap u8 (stage1[5], stage1[7], stage2_0[5], stage2_0[7]);
51
  
52
  comapre_and_swap u9 (stage2_0[0], stage2_0[2], stage2_1[2], stage2_1[0]);
53
  comapre_and_swap u10 (stage2_0[1], stage2_0[3], stage2_1[3], stage2_1[1]);
54
  comapre_and_swap u11 (stage2_0[4], stage2_0[6], stage2_1[4], stage2_1[6]);
55
  comapre_and_swap u12 (stage2_0[5], stage2_0[7], stage2_1[5], stage2_1[7]);
56
  
57
  //------------------------------------------------------------------------
58
  // Stage 2 has 3 levels of sorting
59
  //------------------------------------------------------------------------
60
  comapre_and_swap u13 (stage2_1[0], stage2_1[4], stage3_0[4], stage3_0[0]);
61
  comapre_and_swap u14 (stage2_1[1], stage2_1[5], stage3_0[5], stage3_0[1]);
62
  comapre_and_swap u15 (stage2_1[2], stage2_1[6], stage3_0[6], stage3_0[2]);
63
  comapre_and_swap u16 (stage2_1[3], stage2_1[7], stage3_0[7], stage3_0[3]);
64
  
65
  comapre_and_swap u17 (stage3_0[0], stage3_0[2], stage3_1[2], stage3_1[0]);
66
  comapre_and_swap u18 (stage3_0[1], stage3_0[3], stage3_1[3], stage3_1[1]);
67
  comapre_and_swap u19 (stage3_0[4], stage3_0[6], stage3_1[6], stage3_1[4]);
68
  comapre_and_swap u20 (stage3_0[5], stage3_0[7], stage3_1[7], stage3_1[5]);
69
  
70
  comapre_and_swap u21 (stage3_1[0], stage3_1[1], stage3_2[1], stage3_2[0]);
71
  comapre_and_swap u22 (stage3_1[2], stage3_1[3], stage3_2[3], stage3_2[2]);
72
  comapre_and_swap u23 (stage3_1[4], stage3_1[5], stage3_2[5], stage3_2[4]);
73
  comapre_and_swap u24 (stage3_1[6], stage3_1[7], stage3_2[7], stage3_2[6]);
74
  
75
  // Sorted data is assigned to output
76
  assign data_sort = stage3_2;
77
  
78
endmodule
78 views and 0 likes     
A short description will be helpful for you to remember your playground's details
 
100:0