| import os |
| import random |
| random.seed(int(os.getenv("SEED"), 16)) |
| from utils import util |
| from utils.db import Database |
| |
| |
| def gen_sites(): |
| db = Database(util.get_db_root(), util.get_part()) |
| grid = db.grid() |
| for tile_name in sorted(grid.tiles()): |
| loc = grid.loc_of_tilename(tile_name) |
| gridinfo = grid.gridinfo_at_loc(loc) |
| if gridinfo.tile_type in ['CLEL_L', 'CLEL_R', 'CLEM']: |
| site_name = sorted(gridinfo.sites.keys())[0] |
| yield tile_name, site_name |
| |
| |
| def write_params(params): |
| pinstr = 'tile,site\n' |
| for tile, site in sorted(params.items()): |
| pinstr += '%s,%s\n' % (tile, site) |
| open('params.csv', 'w').write(pinstr) |
| |
| |
| def run(): |
| sites_params = [] |
| sites = list(gen_sites())[0:30] |
| # One specimen can solve bits for 2 BEL types |
| # Therefore the generated netlist contains |
| # A-B LUTs/FFs or C-D, E-F or G-H LUTs/FFs |
| seedn = int(os.getenv("SEEDN")) % 4 |
| bels = ['E', 'F', 'G', 'H', 'A', 'B', 'C', 'D'] |
| for (tile_name, site_name) in sites: |
| bel = bels[seedn * 2 + random.randrange(2)] |
| params = {} |
| params['tile_name'] = tile_name |
| params['site_name'] = site_name |
| params['bel_lut6'] = bel + "6LUT" |
| params['bel_ff'] = bel + "FF" |
| sites_params.append(params) |
| print( |
| util.render_template( |
| os.path.join(os.getenv("FUZDIR"), "top.tpl"), |
| {"parameters": sites_params})) |
| write_params(params) |
| |
| |
| if __name__ == '__main__': |
| run() |