def test_get_total_number_of_records(self):
        self.som.initialize_root()
        root = self.som.get_root()
        url = sdbc.create_repo_url_record("http://www.geocities.com")
        synthesis = sdbc.create_synthesis_record("Synthesis Name", 123, "cool tool", 1.0, "jeff")
        intr = sdbc.create_integration_record("Integration Data", vendor_id=0x800BEAF15DEADC03, device_id=0x00000000)

        peripheral = self.som.insert_bus()
        peripheral.set_name("peripheral")
        memory = self.som.insert_bus()
        memory.set_name("memory")
        self.som.insert_component(root, url)
        self.som.insert_component(root, synthesis)
        d1 = sdbc.create_device_record(name="device 1", size=0x100)
        d2 = sdbc.create_device_record(name="device 2", size=0x100)
        m1 = sdbc.create_device_record(name="memory 1", size=0x10000)
        m2 = sdbc.create_device_record(name="memory 2", size=0x20000)
        peripheral.set_child_spacing(0x0100000000)
        self.som.insert_component(peripheral, d1)
        self.som.insert_component(peripheral, d2)
        self.som.insert_component(peripheral, intr)
        self.som.insert_component(memory, m1)
        self.som.insert_component(memory, m2)
        count = get_total_number_of_records(self.som)
        print "count: %d" % count
    def test_get_total_number_of_records(self):
        self.som.initialize_root()
        root = self.som.get_root()
        url = sdbc.create_repo_url_record("http://www.geocities.com")
        synthesis = sdbc.create_synthesis_record("Synthesis Name", 123,
                                                 "cool tool", 1.0, "jeff")
        intr = sdbc.create_integration_record("Integration Data",
                                              vendor_id=0x800BEAF15DEADC03,
                                              device_id=0x00000000)

        peripheral = self.som.insert_bus()
        peripheral.set_name("peripheral")
        memory = self.som.insert_bus()
        memory.set_name("memory")
        self.som.insert_component(root, url)
        self.som.insert_component(root, synthesis)
        d1 = sdbc.create_device_record(name="device 1", size=0x100)
        d2 = sdbc.create_device_record(name="device 2", size=0x100)
        m1 = sdbc.create_device_record(name="memory 1", size=0x10000)
        m2 = sdbc.create_device_record(name="memory 2", size=0x20000)
        peripheral.set_child_spacing(0x0100000000)
        self.som.insert_component(peripheral, d1)
        self.som.insert_component(peripheral, d2)
        self.som.insert_component(peripheral, intr)
        self.som.insert_component(memory, m1)
        self.som.insert_component(memory, m2)
        count = get_total_number_of_records(self.som)
        print "count: %d" % count
Example #3
0
    def test_full_bus_with_integration(self):
        sm = som.SOM()
        sm.initialize_root()
        root = sm.get_root()
        peripheral = sm.insert_bus()
        peripheral.set_name("peripheral")
        memory = sm.insert_bus()
        memory.set_name("memory")
        d1 = sdbc.create_device_record(name = "device 1", size = 0x100)
        d2 = sdbc.create_device_record(name = "device 2", size = 0x100)
        m1 = sdbc.create_device_record(name = "memory 1", size = 0x10000)
        m2 = sdbc.create_device_record(name = "memory 2", size = 0x20000)
        intr = sdbc.create_integration_record("Integration Data",
                                                vendor_id = 0x800BEAF15DEADC03,
                                                device_id = 0x00000000)

        peripheral.set_child_spacing(0x0100000000)
        sm.insert_component(peripheral, intr)
        sm.insert_component(peripheral, d1)
        sm.insert_component(peripheral, d2)
        sm.insert_component(memory, m1)
        sm.insert_component(memory, m2)
        rom = generate_rom_image(sm)
        rom_in = sdbc.convert_rom_to_32bit_buffer(rom)
 
        #rom_in = ROM2
        #print_sdb_rom(rom_in)
        sm = parse_rom_image(rom_in)
        rom_out = generate_rom_image(sm)
        rom_out = sdbc.convert_rom_to_32bit_buffer(rom_out)
        #print_sdb_rom(rom_out)
        #compare_roms(rom_in, rom_out)
        self.assertEqual(rom_in, rom_out)
Example #4
0
    def test_full_bus_with_integration(self):
        sm = som.SOM()
        sm.initialize_root()
        root = sm.get_root()
        peripheral = sm.insert_bus()
        peripheral.set_name("peripheral")
        memory = sm.insert_bus()
        memory.set_name("memory")
        d1 = sdbc.create_device_record(name="device 1", size=0x100)
        d2 = sdbc.create_device_record(name="device 2", size=0x100)
        m1 = sdbc.create_device_record(name="memory 1", size=0x10000)
        m2 = sdbc.create_device_record(name="memory 2", size=0x20000)
        intr = sdbc.create_integration_record("Integration Data",
                                              vendor_id=0x800BEAF15DEADC03,
                                              device_id=0x00000000)

        peripheral.set_child_spacing(0x0100000000)
        sm.insert_component(peripheral, intr)
        sm.insert_component(peripheral, d1)
        sm.insert_component(peripheral, d2)
        sm.insert_component(memory, m1)
        sm.insert_component(memory, m2)
        rom = generate_rom_image(sm)
        rom_in = sdbc.convert_rom_to_32bit_buffer(rom)

        #rom_in = ROM2
        #print_sdb_rom(rom_in)
        sm = parse_rom_image(rom_in)
        rom_out = generate_rom_image(sm)
        rom_out = sdbc.convert_rom_to_32bit_buffer(rom_out)
        #print_sdb_rom(rom_out)
        #compare_roms(rom_in, rom_out)
        self.assertEqual(rom_in, rom_out)
    def test_update_method_at_root(self):
        self.som.initialize_root()
        root = self.som.get_root()
        din1 = sdbc.create_device_record(name = "Test 1", size = 0x10)
        din2 = sdbc.create_device_record(name = "Test 2", size = 0x20)
        self.som.insert_component(root, din1)
        self.som.insert_component(root, din2)
        dout = self.som.get_component(root, 0)
        self.assertEqual(din1, dout)

        dout = self.som.get_component(root, 1)
        self.assertEqual(dout.get_start_address_as_int(), 0x10)
    def test_move_device(self):
        self.som.initialize_root()
        root = self.som.get_root()
        din1 = sdbc.create_device_record(name = "t0", size = 0x10)
        din2 = sdbc.create_device_record(name = "t1", size = 0x10)
        din3 = sdbc.create_device_record(name = "t3", size = 0x10)

        self.som.insert_component(root, din1)
        self.som.insert_component(root, din2)
        self.som.insert_component(root, din3)

        self.som.move_component(root, 2, root, 0)
        component = self.som.get_component(root, 0)
        self.assertEqual(din3, component)
    def test_insert_url(self):
        self.som.initialize_root()
        root = self.som.get_root()
        din1 = sdbc.create_device_record(name = "t0", size = 0x10)
        din2 = sdbc.create_device_record(name = "t1", size = 0x10)
        din3 = sdbc.create_device_record(name = "t3", size = 0x10)

        self.som.insert_component(root, din1)
        self.som.insert_component(root, din2)
        self.som.insert_component(root, din3)

        url = sdbc.create_repo_url_record(   "http://www.geocities.com")
        self.som.insert_component(root, url, 1)
        record = self.som.get_component(root, 3)
        self.assertEqual(record, url)
 def test_insert_component(self):
     self.som.initialize_root()
     root = self.som.get_root()
     din = sdbc.create_device_record()
     self.som.insert_component(root, din)
     dout = self.som.get_component(root, 0)
     self.assertEqual(din, dout)
 def test_generate_one_sub_bus_rom(self):
     self.som.initialize_root()
     root = self.som.get_root()
     bus = self.som.insert_bus()
     d = sdbc.create_device_record(name="device 1", size=0x100)
     self.som.insert_component(bus, d)
     rom = generate_rom_image(self.som)
 def test_generate_one_sub_bus_rom(self):
     self.som.initialize_root()
     root = self.som.get_root()
     bus = self.som.insert_bus()
     d = sdbc.create_device_record(name="device 1", size=0x100)
     self.som.insert_component(bus, d)
     rom = generate_rom_image(self.som)
 def test_generate_simple_rom(self):
     self.som.initialize_root()
     root = self.som.get_root()
     d = sdbc.create_device_record(name="device 1", size=0x100)
     self.som.insert_component(root, d)
     rom = generate_rom_image(self.som)
     # rom = generate_rom_image(self.som)
     write_to_file(rom, "/home/cospan/sandbox/simple_rom.txt")
    def test_insert_component(self):
        self.som.initialize_root()
        root = self.som.get_root()
        din1 = sdbc.create_device_record(name = "t", size = 0x10)
        self.som.insert_component(root = root, component = din1)

        comp = self.som.get_component(root, 0)
        self.assertEqual(din1, comp)
    def test_insert_integration_record(self):
        self.som.initialize_root()
        root = self.som.get_root()
        din1 = sdbc.create_device_record(name = "t0", size = 0x10)
        din2 = sdbc.create_device_record(name = "t1", size = 0x10)
        din3 = sdbc.create_device_record(name = "t3", size = 0x10)

        self.som.insert_component(root, din1)
        self.som.insert_component(root, din2)
        self.som.insert_component(root, din3)
        irec = sdbc.create_integration_record( "integration test",
                                                vendor_id = 0x00,
                                                device_id = 0x00)

        self.som.insert_component(root, irec, 0)
        record = self.som.get_component(root, 3)
        self.assertEqual(record, irec)
 def test_generate_simple_rom(self):
     self.som.initialize_root()
     root = self.som.get_root()
     d = sdbc.create_device_record(name="device 1", size=0x100)
     self.som.insert_component(root, d)
     rom = generate_rom_image(self.som)
     #rom = generate_rom_image(self.som)
     write_to_file(rom, "/home/cospan/sandbox/simple_rom.txt")
 def test_generate_two_sub_buses(self):
     self.som.initialize_root()
     root = self.som.get_root()
     peripheral = self.som.insert_bus()
     peripheral.set_name("peripheral")
     memory = self.som.insert_bus()
     memory.set_name("memory")
     d1 = sdbc.create_device_record(name="device 1", size=0x100)
     d2 = sdbc.create_device_record(name="device 2", size=0x100)
     m1 = sdbc.create_device_record(name="memory 1", size=0x10000)
     m2 = sdbc.create_device_record(name="memory 2", size=0x20000)
     peripheral.set_child_spacing(0x0100000000)
     self.som.insert_component(peripheral, d1)
     self.som.insert_component(peripheral, d2)
     self.som.insert_component(memory, m1)
     self.som.insert_component(memory, m2)
     rom = generate_rom_image(self.som)
     write_to_file(rom, "/home/cospan/sandbox/two_bus_rom.txt")
 def test_generate_two_sub_buses(self):
     self.som.initialize_root()
     root = self.som.get_root()
     peripheral = self.som.insert_bus()
     peripheral.set_name("peripheral")
     memory = self.som.insert_bus()
     memory.set_name("memory")
     d1 = sdbc.create_device_record(name="device 1", size=0x100)
     d2 = sdbc.create_device_record(name="device 2", size=0x100)
     m1 = sdbc.create_device_record(name="memory 1", size=0x10000)
     m2 = sdbc.create_device_record(name="memory 2", size=0x20000)
     peripheral.set_child_spacing(0x0100000000)
     self.som.insert_component(peripheral, d1)
     self.som.insert_component(peripheral, d2)
     self.som.insert_component(memory, m1)
     self.som.insert_component(memory, m2)
     rom = generate_rom_image(self.som)
     write_to_file(rom, "/home/cospan/sandbox/two_bus_rom.txt")
 def test_generate_one_sub_bus_with_url(self):
     self.som.initialize_root()
     root = self.som.get_root()
     bus = self.som.insert_bus()
     url = sdbc.create_repo_url_record("http://www.geocities.com")
     d = sdbc.create_device_record(name="device 1", size=0x100)
     self.som.insert_component(bus, d)
     self.som.insert_component(root, url)
     rom = generate_rom_image(self.som)
 def test_generate_one_sub_bus_with_url(self):
     self.som.initialize_root()
     root = self.som.get_root()
     bus = self.som.insert_bus()
     url = sdbc.create_repo_url_record("http://www.geocities.com")
     d = sdbc.create_device_record(name="device 1", size=0x100)
     self.som.insert_component(bus, d)
     self.som.insert_component(root, url)
     rom = generate_rom_image(self.som)
 def test_generate_one_sub_bus_integration_record(self):
     self.som.initialize_root()
     root = self.som.get_root()
     bus = self.som.insert_bus()
     intr = sdbc.create_integration_record("Integration Data", vendor_id=0x800BEAF15DEADC03, device_id=0x00000000)
     d = sdbc.create_device_record(name="device 1", size=0x100)
     self.som.insert_component(bus, d)
     self.som.insert_component(bus, intr)
     rom = generate_rom_image(self.som)
Example #20
0
 def test_create_device_record(self):
     device = sdb_component.create_device_record(name            = "test device",
                                                 vendor_id       = 0x1000000000000000,
                                                 device_id       = 0x00000000,
                                                 core_version    = "1.0",
                                                 abi_class       = 0,
                                                 version_major   = 1,
                                                 version_minor   = 0)
     self.assertTrue(device.is_device())
    def test_remove_component(self):
        self.som.initialize_root()
        root = self.som.get_root()
        din1 = sdbc.create_device_record(name = "t", size = 0x10)
        self.som.insert_component(root = root, component = din1)

        self.som.remove_component_by_index(root, 0)
        count = self.som.get_child_count(root)
        self.assertEqual(count, 0)
Example #22
0
 def test_create_device_record(self):
     device = sdb_component.create_device_record(
         name="test device",
         vendor_id=0x1000000000000000,
         device_id=0x00000000,
         core_version="1.0",
         abi_class=0,
         version_major=1,
         version_minor=0)
     self.assertTrue(device.is_device())
    def test_insert_synthesis_record(self):
        self.som.initialize_root()
        root = self.som.get_root()
        din1 = sdbc.create_device_record(name = "t0", size = 0x10)
        din2 = sdbc.create_device_record(name = "t1", size = 0x10)
        din3 = sdbc.create_device_record(name = "t3", size = 0x10)

        self.som.insert_component(root, din1)
        self.som.insert_component(root, din2)
        self.som.insert_component(root, din3)

        synthesis = sdbc.create_synthesis_record(   synthesis_name = "image.bit",
                                                    commit_id = 01234567,
                                                    tool_name = "xilinx xst",
                                                    tool_version = 14.1,
                                                    user_name = "*****@*****.**")
        self.som.insert_component(root, synthesis, 1)
        record = self.som.get_component(root, 3)
        self.assertEqual(record, synthesis)
    def test_remove_component_bad_index(self):
        self.som.initialize_root()
        root = self.som.get_root()
        din1 = sdbc.create_device_record(name = "t", size = 0x10)
        self.som.insert_component(root = root, component = din1)

        self.assertRaises(  IndexError,
                            self.som.remove_component_by_index,
                            root,
                            3)
 def test_generate_one_sub_bus_with_synthesis(self):
     self.som.initialize_root()
     root = self.som.get_root()
     bus = self.som.insert_bus()
     url = sdbc.create_repo_url_record("http://www.geocities.com")
     synthesis = sdbc.create_synthesis_record("Synthesis Name", 123, "cool tool", 1.0, "jeff")
     d = sdbc.create_device_record(name="device 1", size=0x100)
     self.som.insert_component(bus, d)
     self.som.insert_component(root, synthesis)
     rom = generate_rom_image(self.som)
 def test_generate_one_sub_bus_integration_record(self):
     self.som.initialize_root()
     root = self.som.get_root()
     bus = self.som.insert_bus()
     intr = sdbc.create_integration_record("Integration Data",
                                           vendor_id=0x800BEAF15DEADC03,
                                           device_id=0x00000000)
     d = sdbc.create_device_record(name="device 1", size=0x100)
     self.som.insert_component(bus, d)
     self.som.insert_component(bus, intr)
     rom = generate_rom_image(self.som)
 def test_generate_one_sub_bus_with_synthesis(self):
     self.som.initialize_root()
     root = self.som.get_root()
     bus = self.som.insert_bus()
     url = sdbc.create_repo_url_record("http://www.geocities.com")
     synthesis = sdbc.create_synthesis_record("Synthesis Name", 123,
                                              "cool tool", 1.0, "jeff")
     d = sdbc.create_device_record(name="device 1", size=0x100)
     self.som.insert_component(bus, d)
     self.som.insert_component(root, synthesis)
     rom = generate_rom_image(self.som)
    def test_update_method_after_remove(self):
        self.som.initialize_root()
        root = self.som.get_root()
        din1 = sdbc.create_device_record(name = "Test 1", size = 0x10)
        din2 = sdbc.create_device_record(name = "Test 2", size = 0x20)
        din3 = sdbc.create_device_record(name = "Test 3", size = 0x30)

        bus = self.som.insert_bus()

        self.som.insert_component(root = bus, component = din1)
        self.som.insert_component(root = bus, component = din2)
        self.som.insert_component(root = bus, component = din3)

        self.som.remove_component_by_index(bus, 0)

        dout = self.som.get_component(bus, 0)
        self.assertEqual(din2, dout)

        dout = self.som.get_component(bus, 1)
        self.assertEqual(dout.get_start_address_as_int(), 0x20)
    def test_iterate_bus(self):
        self.som.initialize_root()
        root = self.som.get_root()
        din1 = sdbc.create_device_record(name = "Sub Item 1", size = 0x10)
        din2 = sdbc.create_device_record(name = "Sub Item 2", size = 0x20)

        bus = self.som.insert_bus()
        bus.set_name("test bus")

        self.som.insert_component(root = bus, component = din1)
        self.som.insert_component(root = bus, component = din2)

        dout = self.som.get_component(bus, 0)
        self.assertEqual(din1, dout)
        #print "in bus: %s" % bus.get_name()
        #for entity in bus:
        #    print "\t%s" % entity.get_name()
        count = 0
        for entity in bus:
            count += 1

        self.assertEqual(count, 2)
Example #30
0
    def test_generate_one_sub_bus_with_url(self):
        sm = som.SOM()
        sm.initialize_root()
        root = sm.get_root()
        peripheral = sm.insert_bus()
        peripheral.set_name("peripheral")
        memory = sm.insert_bus()
        memory.set_name("memory")
        d1 = sdbc.create_device_record(name="device 1", size=0x100)
        d2 = sdbc.create_device_record(name="device 2", size=0x100)
        m1 = sdbc.create_device_record(name="memory 1", size=0x10000)
        m2 = sdbc.create_device_record(name="memory 2", size=0x20000)
        intr = sdbc.create_integration_record("Integration Data",
                                              vendor_id=0x800BEAF15DEADC03,
                                              device_id=0x00000000)
        url = sdbc.create_repo_url_record("http://www.geocities.com")
        synthesis = sdbc.create_synthesis_record("Synthesis Name", 123,
                                                 "cool tool", 1.0, "jeff")
        sm.insert_component(root, url)
        sm.insert_component(root, synthesis)

        peripheral.set_child_spacing(0x0100000000)
        sm.insert_component(peripheral, intr)
        sm.insert_component(peripheral, d1)
        sm.insert_component(peripheral, d2)
        sm.insert_component(memory, m1)
        sm.insert_component(memory, m2)
        rom = generate_rom_image(sm)
        rom_in = sdbc.convert_rom_to_32bit_buffer(rom)

        #print_sdb(rom)
        sm = parse_rom_image(rom_in)
        rom_out = generate_rom_image(sm)
        rom_out = sdbc.convert_rom_to_32bit_buffer(rom_out)
        #print_sdb_rom(rom_out)
        #compare_roms(rom_in, rom_out)
        self.assertEqual(rom_in, rom_out)
Example #31
0
    def test_generate_one_sub_bus_with_url(self):
        sm = som.SOM()
        sm.initialize_root()
        root = sm.get_root()
        peripheral = sm.insert_bus()
        peripheral.set_name("peripheral")
        memory = sm.insert_bus()
        memory.set_name("memory")
        d1 = sdbc.create_device_record(name = "device 1", size = 0x100)
        d2 = sdbc.create_device_record(name = "device 2", size = 0x100)
        m1 = sdbc.create_device_record(name = "memory 1", size = 0x10000)
        m2 = sdbc.create_device_record(name = "memory 2", size = 0x20000)
        intr = sdbc.create_integration_record("Integration Data",
                                                vendor_id = 0x800BEAF15DEADC03,
                                                device_id = 0x00000000)
        url = sdbc.create_repo_url_record("http://www.geocities.com")
        synthesis = sdbc.create_synthesis_record("Synthesis Name", 123, "cool tool", 1.0, "jeff")
        sm.insert_component(root, url)
        sm.insert_component(root, synthesis)

        peripheral.set_child_spacing(0x0100000000)
        sm.insert_component(peripheral, intr)
        sm.insert_component(peripheral, d1)
        sm.insert_component(peripheral, d2)
        sm.insert_component(memory, m1)
        sm.insert_component(memory, m2)
        rom = generate_rom_image(sm)
        rom_in = sdbc.convert_rom_to_32bit_buffer(rom)
 
        #print_sdb(rom)
        sm = parse_rom_image(rom_in)
        rom_out = generate_rom_image(sm)
        rom_out = sdbc.convert_rom_to_32bit_buffer(rom_out)
        #print_sdb_rom(rom_out)
        #compare_roms(rom_in, rom_out)
        self.assertEqual(rom_in, rom_out)
    def test_set_spacing(self):
        self.som.initialize_root()
        root = self.som.get_root()
        spacing = 0x100
        root.set_child_spacing(spacing)
        bus = self.som.insert_bus()
        dev = sdbc.create_device_record(name = "test 1",
                                        size = 0x10)
        self.som.insert_component(bus, dev)

        self.som.insert_bus()

        #print "Number of components: %d" % self.som.get_child_count(root)
        bus = self.som.get_buses()[1]

        #self.som.set_bus_start_address(bus, start_address)
        #print "bus start address: 0x%08X" % bus.c.get_start_address_as_int()
        self.assertEqual(bus.c.get_start_address_as_int(), spacing)
Example #33
0
    def gen_som(self, tags = {}, buf = "", user_paths = [], debug = False):
        tags = copy.deepcopy(tags)
        self.rom_element_count = 0
        if "MEMORY" not in tags:
            tags["MEMORY"] = {}

        self.user_paths = user_paths
        board_name = tags["board"].lower()

        if not utils.board_exists(board_name):
            try:
                utils.install_remote_board_package(board_name)
            except IBuilderError as e:
                raise IBuilderError(                                            \
                                "Board %s could not be found, Attempted to "    \
                                "find it in the remote table and failed. If "   \
                                "this is a local board make sure to run the "   \
                                "local install" % (board_name))
                
        image_id = 0
        for key in tags.keys():
            if key.lower() == "image_id":
                image_id = tags[key]

        sm = som.SOM()
        sm.initialize_root()
        root = sm.get_root()
        #Add 1 for Root
        self.rom_element_count += 1

        peripheral = sm.insert_bus(root,
                                    name = "peripheral")
        memory = sm.insert_bus(     root,
                                    name = "memory")

        #Add one for SDB ROM
        self.rom_element_count += 1
        self.rom_element_count += 1
        version_major = device_manager.get_device_id_from_name("SDB")
        sdb_rom = sdbc.create_device_record(name = "SDB",
                                            version_major = version_major)

        #Add two for bridge and one extra for empty
        self.rom_element_count += 3

        #Peripheral Bus
        #Add one for interconnect
        self.rom_element_count += 1



        '''
        #Move all the platform peripherals to the front of the SDB Bus
        temp_unordered_platform_tags = {}
        temp_platform_tags = OrderedDict()
        temp_periph_tags = OrderedDict()
        minor_dict = {}
        peripheral_id = device_manager.get_device_id_from_name("platform")

        for key in tags["SLAVES"]:
            filename = tags["SLAVES"][key]["filename"]
            absfilename = utils.find_rtl_file_location(filename, self.user_paths)
            f = open(absfilename, 'r')
            slave_buffer = f.read()
            f.close()

            per = sdbc.create_device_record(name = key)
            per.parse_buffer(slave_buffer)

            if per.get_abi_version_major_as_int() == peripheral_id:
                minor = per.get_abi_version_minor_as_int()
                minor_dict[minor] = key
                temp_unordered_platform_tags[key] = tags["SLAVES"][key]
            else:
                temp_periph_tags[key] = tags["SLAVES"][key]

        if len(minor_dict.keys()) > 0:
            #Order the platforms in terms of their minor numbers
            ordered_keys = sorted(minor_dict.keys(), key=int)
            for okey in ordered_keys:
                key = minor_dict[okey]
                temp_platform_tags[key] = temp_unordered_platform_tags[key]
            
            #Add all the peripheral slaves
            for key in temp_periph_tags:
                temp_platform_tags[key] = temp_periph_tags[key]
            
            #Put the slaves back in the original dictionary
            tags["SLAVES"] = temp_platform_tags
        '''


        #Add one per peripheral
        for i in range (0, len(tags["SLAVES"])):
            key = tags["SLAVES"].keys()[i]

            if is_integration_required(tags["SLAVES"][key]):
                ir = generate_integration_record(tags["SLAVES"], key)
                #print "Inserting Integration record for: %s" % key
                sm.insert_component(peripheral, ir)

            filename = tags["SLAVES"][key]["filename"]
            absfilename = utils.find_rtl_file_location(filename, self.user_paths)
            f = open(absfilename, 'r')
            slave_buffer = f.read()
            f.close()

            per = sdbc.create_device_record(name = key)
            per.parse_buffer(slave_buffer)
            per.set_name(str(key))
            sm.insert_component(peripheral, per)
            self.rom_element_count += 1

        #Add one for empty
        self.rom_element_count += 1

        #Memory Bus
        #Add one for interconnect
        self.rom_element_count += 1

        #Add one per memory peripheral
        for i in range (0, len(tags["MEMORY"])):
            key = tags["MEMORY"].keys()[i]
            name = tags["MEMORY"][key]["filename"]
            absfilename = utils.find_rtl_file_location(name, self.user_paths)
            f = open(absfilename, 'r')
            memory_buffer = f.read()
            f.close()

            mem = sdbc.create_device_record(name = key)
            mem.parse_buffer(memory_buffer)
            mem.set_name(str(key))
            sm.insert_component(memory, mem)
            self.rom_element_count += 1

        #add one for empty
        self.rom_element_count += 1

        #TODO: add Add one for URL of repo ?? Maybe
        #TODO: add Add one for Synthesis Record
        self.rom_element_count += 1

        sdb_rom.set_size(self.rom_element_count * sdbc.SDB_ROM_RECORD_LENGTH)
        sm.insert_component(peripheral, sdb_rom, 0)

        #Generate the ROM image
        sm.set_child_spacing(root,       0x0100000000)
        sm.set_child_spacing(peripheral, 0x0001000000)
        return sm
Example #34
0
    def gen_som(self, tags={}, buf="", user_paths=[], debug=False):
        tags = copy.deepcopy(tags)
        self.rom_element_count = 0
        if "MEMORY" not in tags:
            tags["MEMORY"] = {}

        self.user_paths = user_paths
        board_name = tags["board"].lower()

        if not utils.board_exists(board_name):
            try:
                utils.install_remote_board_package(board_name)
            except IBuilderError as e:
                raise IBuilderError(                                            \
                                "Board %s could not be found, Attempted to "    \
                                "find it in the remote table and failed. If "   \
                                "this is a local board make sure to run the "   \
                                "local install" % (board_name))

        image_id = 0
        for key in tags.keys():
            if key.lower() == "image_id":
                image_id = tags[key]

        sm = som.SOM()
        sm.initialize_root()
        root = sm.get_root()
        #Add 1 for Root
        self.rom_element_count += 1

        peripheral = sm.insert_bus(root, name="peripheral")
        memory = sm.insert_bus(root, name="memory")

        #Add one for SDB ROM
        self.rom_element_count += 1
        self.rom_element_count += 1
        version_major = device_manager.get_device_id_from_name("SDB")
        sdb_rom = sdbc.create_device_record(name="SDB",
                                            version_major=version_major)

        #Add two for bridge and one extra for empty
        self.rom_element_count += 3

        #Peripheral Bus
        #Add one for interconnect
        self.rom_element_count += 1
        '''
        #Move all the platform peripherals to the front of the SDB Bus
        temp_unordered_platform_tags = {}
        temp_platform_tags = OrderedDict()
        temp_periph_tags = OrderedDict()
        minor_dict = {}
        peripheral_id = device_manager.get_device_id_from_name("platform")

        for key in tags["SLAVES"]:
            filename = tags["SLAVES"][key]["filename"]
            absfilename = utils.find_rtl_file_location(filename, self.user_paths)
            f = open(absfilename, 'r')
            slave_buffer = f.read()
            f.close()

            per = sdbc.create_device_record(name = key)
            per.parse_buffer(slave_buffer)

            if per.get_abi_version_major_as_int() == peripheral_id:
                minor = per.get_abi_version_minor_as_int()
                minor_dict[minor] = key
                temp_unordered_platform_tags[key] = tags["SLAVES"][key]
            else:
                temp_periph_tags[key] = tags["SLAVES"][key]

        if len(minor_dict.keys()) > 0:
            #Order the platforms in terms of their minor numbers
            ordered_keys = sorted(minor_dict.keys(), key=int)
            for okey in ordered_keys:
                key = minor_dict[okey]
                temp_platform_tags[key] = temp_unordered_platform_tags[key]
            
            #Add all the peripheral slaves
            for key in temp_periph_tags:
                temp_platform_tags[key] = temp_periph_tags[key]
            
            #Put the slaves back in the original dictionary
            tags["SLAVES"] = temp_platform_tags
        '''

        #Add one per peripheral
        for i in range(0, len(tags["SLAVES"])):
            key = tags["SLAVES"].keys()[i]

            if is_integration_required(tags["SLAVES"][key]):
                ir = generate_integration_record(tags["SLAVES"], key)
                #print "Inserting Integration record for: %s" % key
                sm.insert_component(peripheral, ir)

            filename = tags["SLAVES"][key]["filename"]
            absfilename = utils.find_rtl_file_location(filename,
                                                       self.user_paths)
            f = open(absfilename, 'r')
            slave_buffer = f.read()
            f.close()

            per = sdbc.create_device_record(name=key)
            per.parse_buffer(slave_buffer)
            per.set_name(str(key))
            sm.insert_component(peripheral, per)
            self.rom_element_count += 1

        #Add one for empty
        self.rom_element_count += 1

        #Memory Bus
        #Add one for interconnect
        self.rom_element_count += 1

        #Add one per memory peripheral
        for i in range(0, len(tags["MEMORY"])):
            key = tags["MEMORY"].keys()[i]
            name = tags["MEMORY"][key]["filename"]
            absfilename = utils.find_rtl_file_location(name, self.user_paths)
            f = open(absfilename, 'r')
            memory_buffer = f.read()
            f.close()

            mem = sdbc.create_device_record(name=key)
            mem.parse_buffer(memory_buffer)
            mem.set_name(str(key))
            sm.insert_component(memory, mem)
            self.rom_element_count += 1

        #add one for empty
        self.rom_element_count += 1

        #TODO: add Add one for URL of repo ?? Maybe
        #TODO: add Add one for Synthesis Record
        self.rom_element_count += 1

        sdb_rom.set_size(self.rom_element_count * sdbc.SDB_ROM_RECORD_LENGTH)
        sm.insert_component(peripheral, sdb_rom, 0)

        #Generate the ROM image
        sm.set_child_spacing(root, 0x0100000000)
        sm.set_child_spacing(peripheral, 0x0001000000)
        return sm