예제 #1
0
 def test_in_fifo_emptied(self):
     self.in_fifo = tree_sim.FIFO(3)
     self.out_fifo = tree_sim.FIFO(3)
     self.coupler = tree_sim.Coupler(4, self.in_fifo, self.out_fifo)
     self.in_fifo.push(tree_sim.Tuple([1, 2, 3, 4]))
     self.in_fifo.push(tree_sim.Tuple([5, 6, 7, 8]))
     self.coupler.simulate()
     self.assertEqual(self.in_fifo.read().data, [5, 6, 7, 8])
     self.coupler.simulate()
     self.assertTrue(self.in_fifo.empty())
예제 #2
0
 def test_second_input_zero(self):
     self.in_fifo = tree_sim.FIFO(3)
     self.out_fifo = tree_sim.FIFO(3)
     self.coupler = tree_sim.Coupler(4, self.in_fifo, self.out_fifo)
     self.in_fifo.push(tree_sim.Tuple([1, 2, 3, 4]))
     self.in_fifo.push(tree_sim.Tuple([0, 0, 0, 0]))
     self.coupler.simulate()
     self.coupler.simulate()
     self.assertFalse(self.out_fifo.empty())
     self.assertEqual(self.out_fifo.pop().data, [1, 2, 3, 4, 0, 0, 0, 0])
     self.assertTrue(self.coupler.internal_fifo.empty())
예제 #3
0
 def test_nominal_behavior(self):
     self.in_fifo = tree_sim.FIFO(3)
     self.out_fifo = tree_sim.FIFO(3)
     self.coupler = tree_sim.Coupler(4, self.in_fifo, self.out_fifo)
     self.in_fifo.push(tree_sim.Tuple([1, 2, 3, 4]))
     self.coupler.simulate()
     self.coupler.simulate()
     self.assertTrue(self.out_fifo.empty())
     self.in_fifo.push(tree_sim.Tuple([5, 6, 7, 8]))
     self.coupler.simulate()
     self.assertFalse(self.out_fifo.empty())
     self.assertEqual([1, 2, 3, 4, 5, 6, 7, 8], self.out_fifo.pop().data)
     self.coupler.simulate()
     self.assertTrue(self.out_fifo.empty())
예제 #4
0
    def test_selector_logic_on_B_lt(self):
        in_fifo_1 = tree_sim.FIFO(2)
        in_fifo_2 = tree_sim.FIFO(2)
        out_fifo = tree_sim.FIFO(1)
        throughput = 4
        merger = tree_sim.Merger(throughput, in_fifo_1, in_fifo_2, out_fifo)

        merger.internal_fifo_a = tree_sim.FIFO(1)
        merger.internal_fifo_b = tree_sim.FIFO(1)
        merger.internal_fifo_a.push(tree_sim.Tuple([2, 2, 3, 4]))
        merger.internal_fifo_b.push(tree_sim.Tuple([1, 2, 2, 2]))
        merger.select_A = False
        merger.selector_logic()
        self.assertFalse(merger.select_A)
예제 #5
0
    def test_merger_basic_reverse_input(self):
        in_fifo_1 = tree_sim.FIFO(3)
        in_fifo_1.push(tree_sim.Tuple([1, 3, 5, 7]))
        in_fifo_1.push(tree_sim.Tuple([9, 11, 13, 15]))
        in_fifo_1.push(tree_sim.Tuple([0, 0, 0, 0]))

        in_fifo_2 = tree_sim.FIFO(3)
        in_fifo_2.push(tree_sim.Tuple([2, 4, 6, 8]))
        in_fifo_2.push(tree_sim.Tuple([10, 12, 14, 16]))
        in_fifo_2.push(tree_sim.Tuple([0, 0, 0, 0]))

        out_fifo = tree_sim.FIFO(1)

        throughput = 4

        merger = tree_sim.Merger(throughput, in_fifo_2, in_fifo_1, out_fifo)
        result = []
        for i in range(0, 109):
            merger.simulate()
            if not out_fifo.empty():
                result += out_fifo.pop().data
        self.assertEqual([0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          1,2,3,4, \
                          5,6,7,8, \
                          9,10,11,12, \
                          13,14,15,16, \
                          0, 0, 0, 0, \
                          0, 0, 0, 0], result)
예제 #6
0
    def test_merger_unbalanced_input(self):
        in_fifo_1 = tree_sim.FIFO(10)

        in_fifo_1.push(tree_sim.Tuple([1, 2, 3, 4]))
        in_fifo_1.push(tree_sim.Tuple([5, 6, 7, 8]))
        in_fifo_1.push(tree_sim.Tuple([13, 14, 15, 16]))
        in_fifo_1.push(tree_sim.Tuple([17, 18, 19, 20]))
        in_fifo_1.push(tree_sim.Tuple([21, 22, 23, 24]))

        # terminating zero padding
        in_fifo_1.push(tree_sim.Tuple([0, 0, 0, 0]))

        in_fifo_2 = tree_sim.FIFO(10)
        in_fifo_2.push(tree_sim.Tuple([9, 10, 11, 12]))
        in_fifo_2.push(tree_sim.Tuple([0, 0, 0, 0]))
        out_fifo = tree_sim.FIFO(1)

        throughput = 4

        merger = tree_sim.Merger(throughput, in_fifo_1, in_fifo_2, out_fifo)
        result = []
        for i in range(0, 109):
            merger.simulate()
            if not out_fifo.empty():
                result += out_fifo.pop().data

        self.assertEqual([0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          1,2,3,4, \
                          5,6,7,8, \
                          9,10,11,12, \
                          13,14,15,16, \
                          17,18,19,20, \
                          21,22,23,24, \
                          0, 0, 0, 0, \
                          0, 0, 0, 0], result)
예제 #7
0
    def test_init_4_4_balanced(self):
        merger_tree = tree_sim.MergerTree(4, 4)

        merger_tree.fifos[2][0][0].push(tree_sim.Tuple([1, 3]))
        merger_tree.fifos[2][0][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[2][1][0].push(tree_sim.Tuple([2, 4]))
        merger_tree.fifos[2][1][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[2][2][0].push(tree_sim.Tuple([6, 8]))
        merger_tree.fifos[2][2][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[2][3][0].push(tree_sim.Tuple([5, 7]))
        merger_tree.fifos[2][3][0].push(tree_sim.Tuple([0, 0]))

        result = []
        for i in range(0, 100):
            merger_tree.simulate()
            if not merger_tree.fifos[0][0][1].empty():
                result += merger_tree.fifos[0][0][1].pop().data

        self.assertEqual(result, [0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0, \
                                  1, 2, 3, 4, \
                                  5, 6, 7, 8, \
                                  0, 0, 0, 0, \
                                  0, 0, 0, 0])
예제 #8
0
 def test_out_fifo_full(self):
     self.in_fifo = tree_sim.FIFO(3)
     self.out_fifo = tree_sim.FIFO(3)
     self.coupler = tree_sim.Coupler(4, self.in_fifo, self.out_fifo)
     self.in_fifo.push(tree_sim.Tuple([1, 2, 3, 4]))
     self.in_fifo.push(tree_sim.Tuple([5, 6, 7, 8]))
     self.in_fifo.push(tree_sim.Tuple([9, 10, 11, 12]))
     self.out_fifo.push(tree_sim.Tuple([5, 6, 7, 8]))
     self.out_fifo.push(tree_sim.Tuple([5, 6, 7, 8]))
     self.out_fifo.push(tree_sim.Tuple([5, 6, 7, 8]))
     self.coupler.simulate()
     self.coupler.simulate()
     self.coupler.simulate()
     self.assertTrue(self.coupler.internal_fifo.pop().data, [1, 2, 3, 4])
     self.assertTrue(self.coupler.internal_fifo.pop().data, [5, 6, 7, 8])
예제 #9
0
    def test_init_2_2_proper_input(self):
        merger_tree = tree_sim.MergerTree(2, 2)

        self.assertEqual(merger_tree.mergers[0][0].in_fifo_1,
                         merger_tree.fifos[1][0][1])
        self.assertEqual(merger_tree.mergers[0][0].in_fifo_2,
                         merger_tree.fifos[1][1][1])
        self.assertEqual(merger_tree.mergers[0][0].out_fifo,
                         merger_tree.fifos[0][0][0])
        self.assertEqual(merger_tree.fifos[1][0][0],
                         merger_tree.fifos[1][0][1], str(merger_tree.fifos))
        self.assertEqual(merger_tree.fifos[1][1][0],
                         merger_tree.fifos[1][1][1])
        self.assertEqual(merger_tree.fifos[0][0][0],
                         merger_tree.fifos[0][0][1])
        self.assertNotEqual(merger_tree.mergers[0][0].out_fifo,
                            merger_tree.fifos[1][1][1], str(merger_tree.fifos))
        self.assertNotEqual(merger_tree.mergers[0][0].out_fifo,
                            merger_tree.fifos[1][0][1])

        merger_tree.fifos[1][0][0].push(tree_sim.Tuple([1, 3]))
        merger_tree.fifos[1][0][0].push(tree_sim.Tuple([5, 7]))
        merger_tree.fifos[1][0][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[1][1][0].push(tree_sim.Tuple([2, 4]))
        merger_tree.fifos[1][1][0].push(tree_sim.Tuple([6, 8]))
        merger_tree.fifos[1][1][0].push(tree_sim.Tuple([0, 0]))

        result = []
        for i in range(0, 100):
            merger_tree.simulate()
            if not merger_tree.fifos[0][0][1].empty():
                result += merger_tree.fifos[0][0][1].pop().data
        self.assertEqual(result, [0, 0,\
                                  0, 0,\
                                  0, 0,\
                                  0, 0,\
                                  0, 0,\
                                  0, 0,\
                                  0, 0,\
                                  0, 0,\
                                  1, 2,\
                                  3, 4,\
                                  5, 6,\
                                  7, 8,\
                                  0, 0,\
                                  0, 0])
예제 #10
0
    def test_init_16_16_proper_input(self):
        merger_tree = tree_sim.MergerTree(16, 16)

        self.assertEqual(merger_tree.mergers[1][0].in_fifo_1,
                         merger_tree.fifos[2][0][1])
        self.assertEqual(merger_tree.mergers[1][0].in_fifo_2,
                         merger_tree.fifos[2][1][1])
        self.assertEqual(merger_tree.mergers[1][0].out_fifo,
                         merger_tree.fifos[1][0][0])

        self.assertEqual(merger_tree.mergers[1][1].in_fifo_1,
                         merger_tree.fifos[2][2][1])
        self.assertEqual(merger_tree.mergers[1][1].in_fifo_2,
                         merger_tree.fifos[2][3][1])
        self.assertEqual(merger_tree.mergers[1][1].out_fifo,
                         merger_tree.fifos[1][1][0])

        self.assertEqual(merger_tree.mergers[0][0].in_fifo_1,
                         merger_tree.fifos[1][0][1])
        self.assertEqual(merger_tree.mergers[0][0].in_fifo_2,
                         merger_tree.fifos[1][1][1])
        self.assertEqual(merger_tree.mergers[0][0].out_fifo,
                         merger_tree.fifos[0][0][0])

        merger_tree.fifos[4][0][0].push(tree_sim.Tuple([1, 3]))
        merger_tree.fifos[4][0][0].push(tree_sim.Tuple([9, 10]))
        merger_tree.fifos[4][0][0].push(tree_sim.Tuple([29, 30]))
        merger_tree.fifos[4][0][0].push(tree_sim.Tuple([31, 32]))
        merger_tree.fifos[4][0][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][1][0].push(tree_sim.Tuple([2, 4]))
        merger_tree.fifos[4][1][0].push(tree_sim.Tuple([11, 15]))
        merger_tree.fifos[4][1][0].push(tree_sim.Tuple([17, 19]))
        merger_tree.fifos[4][1][0].push(tree_sim.Tuple([21, 23]))
        merger_tree.fifos[4][1][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][2][0].push(tree_sim.Tuple([6, 8]))
        merger_tree.fifos[4][2][0].push(tree_sim.Tuple([12, 14]))
        merger_tree.fifos[4][2][0].push(tree_sim.Tuple([18, 24]))
        merger_tree.fifos[4][2][0].push(tree_sim.Tuple([26, 27]))
        merger_tree.fifos[4][2][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][3][0].push(tree_sim.Tuple([5, 7]))
        merger_tree.fifos[4][3][0].push(tree_sim.Tuple([13, 16]))
        merger_tree.fifos[4][3][0].push(tree_sim.Tuple([20, 22]))
        merger_tree.fifos[4][3][0].push(tree_sim.Tuple([25, 28]))
        merger_tree.fifos[4][3][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][4][0].push(tree_sim.Tuple([33, 37]))
        merger_tree.fifos[4][4][0].push(tree_sim.Tuple([41, 50]))
        merger_tree.fifos[4][4][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][5][0].push(tree_sim.Tuple([34, 36]))
        merger_tree.fifos[4][5][0].push(tree_sim.Tuple([49, 51]))
        merger_tree.fifos[4][5][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][6][0].push(tree_sim.Tuple([35, 38]))
        merger_tree.fifos[4][6][0].push(tree_sim.Tuple([42, 44]))
        merger_tree.fifos[4][6][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][7][0].push(tree_sim.Tuple([39, 40]))
        merger_tree.fifos[4][7][0].push(tree_sim.Tuple([43, 45]))
        merger_tree.fifos[4][7][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][8][0].push(tree_sim.Tuple([61, 62]))
        merger_tree.fifos[4][8][0].push(tree_sim.Tuple([63, 64]))
        merger_tree.fifos[4][8][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][9][0].push(tree_sim.Tuple([46, 48]))
        merger_tree.fifos[4][9][0].push(tree_sim.Tuple([56, 80]))
        merger_tree.fifos[4][9][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][10][0].push(tree_sim.Tuple([47, 53]))
        merger_tree.fifos[4][10][0].push(tree_sim.Tuple([58, 76]))
        merger_tree.fifos[4][10][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][11][0].push(tree_sim.Tuple([52, 68]))
        merger_tree.fifos[4][11][0].push(tree_sim.Tuple([70, 71]))
        merger_tree.fifos[4][11][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][12][0].push(tree_sim.Tuple([54, 60]))
        merger_tree.fifos[4][12][0].push(tree_sim.Tuple([69, 72]))
        merger_tree.fifos[4][12][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][13][0].push(tree_sim.Tuple([55, 57]))
        merger_tree.fifos[4][13][0].push(tree_sim.Tuple([73, 74]))
        merger_tree.fifos[4][13][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][14][0].push(tree_sim.Tuple([59, 65]))
        merger_tree.fifos[4][14][0].push(tree_sim.Tuple([66, 75]))
        merger_tree.fifos[4][14][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[4][15][0].push(tree_sim.Tuple([67, 77]))
        merger_tree.fifos[4][15][0].push(tree_sim.Tuple([78, 79]))
        merger_tree.fifos[4][15][0].push(tree_sim.Tuple([0, 0]))

        result = []
        for i in range(0, 500):
            merger_tree.simulate()
            if not merger_tree.fifos[0][0][1].empty():
                result += merger_tree.fifos[0][0][1].pop().data
        # print("result test_init_16_16_proper_input: " + str(result))
        self.assertEqual(result, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, \
                                  17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, \
                                  33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \
                                  49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, \
                                  65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
                                  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
예제 #11
0
 def test_min_elem(self):
     tuple = tree_sim.Tuple([1, 2, 3, 4, 5])
     self.assertEqual(tuple.min_elem(), 1)
예제 #12
0
    def test_init_4_2_proper_input(self):
        merger_tree = tree_sim.MergerTree(2, 4)

        self.assertEqual(merger_tree.mergers[0][0].in_fifo_1,
                         merger_tree.fifos[1][0][1])
        self.assertEqual(merger_tree.mergers[0][0].in_fifo_2,
                         merger_tree.fifos[1][1][1])
        self.assertEqual(merger_tree.mergers[0][0].out_fifo,
                         merger_tree.fifos[0][0][0])
        self.assertEqual(merger_tree.fifos[1][0][0],
                         merger_tree.fifos[1][0][1], str(merger_tree.fifos))
        self.assertEqual(merger_tree.fifos[1][1][0],
                         merger_tree.fifos[1][1][1])
        self.assertEqual(merger_tree.fifos[0][0][0],
                         merger_tree.fifos[0][0][1])
        self.assertNotEqual(merger_tree.mergers[0][0].out_fifo,
                            merger_tree.fifos[1][1][1], str(merger_tree.fifos))
        self.assertNotEqual(merger_tree.mergers[0][0].out_fifo,
                            merger_tree.fifos[1][0][1])

        merger_tree.fifos[2][0][0].push(tree_sim.Tuple([1, 3]))
        merger_tree.fifos[2][0][0].push(tree_sim.Tuple([5, 7]))
        merger_tree.fifos[2][0][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[2][1][0].push(tree_sim.Tuple([2, 4]))
        merger_tree.fifos[2][1][0].push(tree_sim.Tuple([6, 8]))
        merger_tree.fifos[2][1][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[2][2][0].push(tree_sim.Tuple([2, 4]))
        merger_tree.fifos[2][2][0].push(tree_sim.Tuple([6, 8]))
        merger_tree.fifos[2][2][0].push(tree_sim.Tuple([0, 0]))

        merger_tree.fifos[2][3][0].push(tree_sim.Tuple([2, 4]))
        merger_tree.fifos[2][3][0].push(tree_sim.Tuple([6, 8]))
        merger_tree.fifos[2][3][0].push(tree_sim.Tuple([0, 0]))

        result = []
        for i in range(0, 100):
            merger_tree.simulate()
            # print(merger_tree.mergers[0][0])
            if not merger_tree.fifos[0][0][1].empty():
                # print("NEW TUPLE: " + str(merger_tree.fifos[0][0][1].read().data))
                result += merger_tree.fifos[0][0][1].pop().data
        # print(result)
        self.assertEqual(result, [0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  1, 2, \
                                  2, 2, \
                                  3, 4, \
                                  4, 4, \
                                  5, 6, \
                                  6, 6, \
                                  7, 8, \
                                  8, 8, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0, \
                                  0, 0])
예제 #13
0
    def random_proper_input_global_reset_test(self,
                                              P,
                                              array_size,
                                              num_tests,
                                              num_arrays=2,
                                              L=-1):
        if L == -1:
            L = P
        assert (array_size % (2 * P) == 0)
        assert (array_size > 2 * P * L)
        out_prefix_zeros = [0] * int(P * (8 * math.log(P, 2) - 1) + 2 * 7 * L -
                                     2 * 7 * P + L + P + L - 2 * P)
        out_suffix_zeros = [0] * (2 * L)
        out_array = [x for x in range(1, array_size + 1)]

        for test in range(0, num_tests):
            # print test
            random.seed(test)
            in_array = [x for x in range(1, array_size + 1)]
            random.shuffle(in_array)
            split_array = []
            accu = 0
            while True:
                split_array = []
                accu = 0
                try:
                    for array_indx in range(0, num_arrays):
                        split_array.append([0])
                        accu = 0
                        for i in range(0, L - 1):
                            new_num = random.randrange(
                                accu + 1,
                                min(array_size / (2 * P),
                                    accu + array_size / (2 * P) / L * 2))
                            assert (new_num - accu > 0)
                            split_array[array_indx].append(new_num)
                            accu = new_num
                        assert (array_size / (2 * P) > accu)
                        split_array[array_indx].append(array_size / (2 * P))
                        # print(split_array[array_indx])
                    break
                except:
                    print "Another one!"

            input_list = []

            for i in range(0, L):
                input_array = []
                for array_indx in range(0, num_arrays):
                    input_array += (sorted(in_array[ split_array[array_indx][i]*(2*P):split_array[array_indx][i+1]*(2*P) ]) \
                                    + [0, 0])
                input_list += [input_array]

            # print(input_list)
            input_tuples = [[]]
            for i in range(0, L):
                # print(input_list[i])
                # print("-------------------------------------------------")
                for tuple_index in range(0, len(input_list[i]) / 2):
                    input_tuples[i].append(
                        tree_sim.Tuple(input_list[i][tuple_index *
                                                     2:tuple_index * 2 + 2]))
                input_tuples.append([])

            merger_tree = tree_sim.MergerTree(P, L)
            for i in range(0, L):
                for tuple_index in range(0, len(input_list[i]) / 2):
                    merger_tree.fifos[int(math.log(L, 2))][i][0].push(
                        input_tuples[i][tuple_index])

            result = []
            stall_counter = 0
            while stall_counter < 50:
                merger_tree.simulate()
                # print("merger_tree.mergers[0][0]")
                # print(merger_tree.mergers[2][3])
                # if not merger_tree.mergers[2][3].out_fifo.empty():
                #    print("NEW OUTPUT: " + str(merger_tree.mergers[2][3].out_fifo.read().data))
                '''                                
                print("merger_tree.mergers[1][0]")                                
                print(merger_tree.mergers[1][0])
                print("merger_tree.mergers[1][1]")                                
                print(merger_tree.mergers[1][1])
                print("merger_tree.mergers[2][0]")                                
                print(merger_tree.mergers[2][0])
                print("merger_tree.mergers[2][1]")                                
                print(merger_tree.mergers[2][1])
                print("merger_tree.mergers[2][2]")                                
                print(merger_tree.mergers[2][2])
                print("merger_tree.mergers[2][3]")                                                                               
                '''
                if not merger_tree.fifos[0][0][1].empty():
                    new_tuple = merger_tree.fifos[0][0][1].pop().data
                    # print("NEW TUPLE: " + str(new_tuple))
                    stall_counter = 0
                    result += new_tuple
                else:
                    stall_counter += 1

            # print(result)
            # print(test)
            # print(out_prefix_zeros + num_arrays * (out_array + out_suffix_zeros))
            self.assertEqual(
                result,
                out_prefix_zeros + num_arrays * (out_array + out_suffix_zeros))
예제 #14
0
    def test_merger_basic_global_reset(self):
        in_fifo_1 = tree_sim.FIFO(10)

        # first array
        in_fifo_1.push(tree_sim.Tuple([21, 23, 25, 27]))
        in_fifo_1.push(tree_sim.Tuple([29, 31, 33, 35]))

        # global reset
        in_fifo_1.push(tree_sim.Tuple([0, 0, 0, 0]))

        # second array
        in_fifo_1.push(tree_sim.Tuple([1, 3, 5, 7]))
        in_fifo_1.push(tree_sim.Tuple([9, 11, 13, 15]))

        # terminating zero padding
        in_fifo_1.push(tree_sim.Tuple([0, 0, 0, 0]))

        in_fifo_2 = tree_sim.FIFO(10)

        # first array
        in_fifo_2.push(tree_sim.Tuple([22, 24, 26, 28]))
        in_fifo_2.push(tree_sim.Tuple([30, 32, 34, 36]))

        # global reset
        in_fifo_2.push(tree_sim.Tuple([0, 0, 0, 0]))

        # second array
        in_fifo_2.push(tree_sim.Tuple([2, 4, 6, 8]))
        in_fifo_2.push(tree_sim.Tuple([10, 12, 14, 16]))

        # terminating zero padding
        in_fifo_2.push(tree_sim.Tuple([0, 0, 0, 0]))

        out_fifo = tree_sim.FIFO(1)

        throughput = 4

        merger = tree_sim.Merger(throughput, in_fifo_1, in_fifo_2, out_fifo)
        result = []
        for i in range(0, 109):
            merger.simulate()
            if not out_fifo.empty():
                result += out_fifo.pop().data

        self.assertEqual([0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          0,0,0,0, \
                          21,22,23,24, \
                          25,26,27,28, \
                          29,30,31,32, \
                          33,34,35,36, \
                          0,0,0,0, \
                          0,0,0,0, \
                          1,2,3,4, \
                          5,6,7,8, \
                          9,10,11,12, \
                          13,14,15,16, \
                          0, 0, 0, 0, \
                          0, 0, 0, 0], result)