def test_one_line_feature(self): result = list(fasm.parse_fasm_filename(example('feature_only.fasm'))) self.assertEqual(result, [ fasm.FasmLine( set_feature=fasm.SetFasmFeature( feature='EXAMPLE_FEATURE.X0.Y0.BLAH', start=None, end=None, value=1, value_format=None, ), annotations=None, comment=None, ) ]) self.assertEqual(fasm.fasm_tuple_to_string(result), 'EXAMPLE_FEATURE.X0.Y0.BLAH\n') check_round_trip(self, result)
def mk_fasm(tile_name, feature): """ Convert matches tile and feature to FasmLine tuple. """ # Seperate addressing of multi-bit features: # TILE.ALUT[0] -> ('TILE', 'ALUT', '0') # TILE.ALUT.SMALL -> ('TILE', 'ALUT.SMALL', None) m = re.match(r'([A-Za-z0-9_]+).([^\[]+)(\[[0-9]+\])?', feature) tag_post = m.group(2) address = None if m.group(3) is not None: address = int(m.group(3)[1:-1]) feature = '{}.{}'.format(tile_name, tag_post) return fasm.FasmLine(set_feature=fasm.SetFasmFeature( feature=feature, start=address, end=None, value=1, value_format=None, ), annotations=None, comment=None)