Example #1
0
File: test_dl.py Project: Lodek/pdd
 def test_merge(self):
     a = Bus(1)
     b = Bus(1, 1)
     buses = [a, b]
     merged = Bus.merge(buses)
     for a, b in zip(buses, merged):
         self.assertEqual(a, b)
Example #2
0
File: tools.py Project: Lodek/pdd
    def sweep(cls, buses):
        """From dict of buses, generate list of signals that sweep over all 
        possible value for buses. Return instance of SignalGen with the list of
        dictionaries as signals"""
        labels = list(buses.keys())
        listed_buses = [buses[label] for label in labels]
        super_bus = Bus.merge(listed_buses)
        #tuple of slices that will enable isolating the signal value for a bus at each time
        #tuple consists of a right bitshift value and a mask to isolate the value of the signal
        #for that particular bus
        bus_slices = [(0, 2**len(listed_buses[0]) - 1)]
        bus_slices += [(len(Bus.merge(listed_buses[:i + 1])), 2**len(bus) - 1)
                       for i, bus in enumerate(listed_buses[1:])]

        values = range(2**len(super_bus))
        signals = []
        for value in values:
            d = {
                label: (value >> slice[0]) & (slice[1])
                for label, slice in zip(labels, bus_slices)
            }
            signals.append(d)
        return cls(buses, signals)
Example #3
0
 def make(self):
     i = self.get_inputs()
     word_size = self.sizes['a']
     adders = [FullAdder(size=1) for _ in range(word_size)]
     a_split = i.a.split()
     b_split = i.b.split()
     #set input for adders
     for a, b, adder in zip(a_split, b_split, adders):
         adder.connect(a=a, b=b)
     #set cins
     adders[0].connect(cin=i.cin)
     for i, adder in enumerate(adders[1:]):
         adder.connect(cin=adders[i].cout)
     s = Bus.merge([adder.s for adder in adders])
     self.set_outputs(s=s, cout=adders[-1].cout)
Example #4
0
 def y(self):
     return Bus.merge(self.get_buses(self.output_labels))