def test_logical_netlist(self): logical_netlist = example_logical_netlist() interchange = Interchange( schema_directory=os.environ['INTERCHANGE_SCHEMA_PATH']) with tempfile.NamedTemporaryFile('w+b') as f: netlist_capnp = logical_netlist.convert_to_capnp(interchange) write_capnp_file(netlist_capnp, f) f.seek(0) read_logical_netlist = LogicalNetlist.read_from_capnp( f, interchange) self.assertEqual(read_logical_netlist.name, logical_netlist.name) self.assertEqual(read_logical_netlist.top_instance, logical_netlist.top_instance) self.assertEqual(read_logical_netlist.libraries.keys(), logical_netlist.libraries.keys()) for library_name, library in logical_netlist.libraries.items(): read_library = read_logical_netlist.libraries[library_name] self.assertEqual(library.cells.keys(), read_library.cells.keys()) for cell_name, cell in library.cells.items(): read_cell = read_library.cells[cell_name] self.assertEqual(cell.name, read_cell.name) self.assertEqual(cell.property_map, read_cell.property_map) self.assertEqual(cell.view, read_cell.view) self.assertEqual(cell.nets.keys(), read_cell.nets.keys()) self.assertEqual(cell.ports.keys(), read_cell.ports.keys()) self.assertEqual(cell.cell_instances.keys(), read_cell.cell_instances.keys())
def test_logical_netlist_convert(self): logical_netlist = example_logical_netlist() interchange = Interchange( schema_directory=os.environ['INTERCHANGE_SCHEMA_PATH']) netlist_capnp = logical_netlist.convert_to_capnp(interchange) self.round_read_write_message('logical', netlist_capnp)
def test_logical_netlist_rapidyaml(self): logical_netlist = example_logical_netlist() interchange = Interchange( schema_directory=os.environ['INTERCHANGE_SCHEMA_PATH']) netlist_capnp = logical_netlist.convert_to_capnp(interchange) self.round_trip_rapidyaml('log', netlist_capnp)
def test_simple_placement(self): netlist = example_logical_netlist() cells = create_constraint_cells_from_netlist( netlist, filtered_out={'GND', 'VCC'}) phys_netlist = example_physical_netlist() interchange = Interchange( schema_directory=os.environ['INTERCHANGE_SCHEMA_PATH']) with open( os.path.join(os.environ['DEVICE_RESOURCE_PATH'], phys_netlist.part + '.device'), 'rb') as f: dev_message = interchange.read_device_resources_raw(f) dev_message = dev_message.as_builder() path = os.path.join(__dir__, 'data', 'series7_constraints.yaml') with open(path, 'rb') as f: patch_capnp(dev_message, ['constraints'], 'yaml', f) device = DeviceResources(dev_message) allowed_sites = { 'IOB_X0Y0', 'IOB_X0Y1', 'IOB_X0Y2', 'SLICE_X0Y0', 'BUFGCTRL_X0Y0', } model, placement_oracle, placements = make_problem_from_device( device, allowed_sites) solver = model.build_sat(placements, cells, placement_oracle) clauses = solver.prepare_for_sat() with Solver() as sat: for clause in clauses: sat.add_clause(clause) solved = sat.solve() self.assertTrue(solved)
def test_capnp_modes(self): logical_netlist = example_logical_netlist() interchange = Interchange( schema_directory=os.environ['INTERCHANGE_SCHEMA_PATH']) for compression_format in [ CompressionFormat.UNCOMPRESSED, CompressionFormat.GZIP ]: for packed in [True, False]: with tempfile.NamedTemporaryFile('w+b') as f: netlist_capnp = logical_netlist.convert_to_capnp( interchange) write_capnp_file(netlist_capnp, f, compression_format=compression_format, is_packed=packed) f.seek(0) _ = LogicalNetlist.read_from_capnp( f, interchange, compression_format=compression_format, is_packed=packed)