Ejemplo n.º 1
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)
Ejemplo n.º 2
0
 def test_in_fifo_empty(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.coupler.simulate()
     self.coupler.simulate()
     self.coupler.simulate()
     self.assertTrue(self.coupler.internal_fifo.empty())
     self.assertTrue(self.out_fifo.empty())
Ejemplo n.º 3
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())
Ejemplo n.º 4
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())
Ejemplo n.º 5
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())
Ejemplo n.º 6
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)
Ejemplo n.º 7
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])
Ejemplo n.º 8
0
 def test_read(self):
     fifo = tree_sim.FIFO(2)
     with self.assertRaises(Exception):
         fifo.read()
     fifo.push(1)
     self.assertEqual(fifo.read(), 1)
     self.assertEqual(fifo.data, [1])
Ejemplo n.º 9
0
 def test_full(self):
     fifo = tree_sim.FIFO(1)
     self.assertFalse(fifo.full())
     fifo.push(1)
     self.assertTrue(fifo.full())
     fifo.pop()
     self.assertFalse(fifo.full())
Ejemplo n.º 10
0
 def test_empty(self):
     fifo = tree_sim.FIFO(1)
     self.assertTrue(fifo.empty())
     fifo.push(1)
     self.assertFalse(fifo.empty())
     fifo.pop()
     self.assertTrue(fifo.empty())
Ejemplo n.º 11
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)
Ejemplo n.º 12
0
 def test_push_pop(self):
     fifo = tree_sim.FIFO(2)
     self.assertEqual(fifo.data, [])
     fifo.push(1)
     self.assertEqual(fifo.data, [1])
     fifo.push(2)
     self.assertEqual(fifo.data, [2, 1])
     fifo.pop()
     self.assertEqual(fifo.data, [2])
     fifo.pop()
     self.assertEqual(fifo.data, [])
Ejemplo n.º 13
0
 def setUp(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)
Ejemplo n.º 14
0
 def test_pop_empty(self):
     fifo = tree_sim.FIFO(0)
     with self.assertRaises(Exception):
         fifo.pop()
Ejemplo n.º 15
0
 def test_push_full_2(self):
     fifo = tree_sim.FIFO(2)
     fifo.push(1)
     fifo.push(2)
     with self.assertRaises(Exception):
         fifo.push(3)
Ejemplo n.º 16
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)