import os import random random.seed(int(os.getenv("SEED"), 16)) from prjxray import util from prjxray.db import Database def gen_sites(): db = Database(util.get_db_root()) 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 != 'CFG_CENTER_MID': continue sites = {} for site_name, site_type in gridinfo.sites.items(): if site_type not in sites: sites[site_type] = [] sites[site_type].append(site_name) for site_type in sites: sites[site_type].sort() int_grid_x = loc.grid_x + 3 int_tile_type = 'INT_L' int_tile_locs = [] for dy in range(-9, 12): # Skip the VBREAK tile. if dy != 6: int_tile_locs.append((int_grid_x, loc.grid_y + dy), ) int_tiles = [] for int_tile_loc in int_tile_locs: int_gridinfo = grid.gridinfo_at_loc(int_tile_loc) assert int_gridinfo.tile_type == int_tile_type, ( int_gridinfo.tile_type, int_tile_type) int_tiles.append(grid.tilename_at_loc(int_tile_loc)) yield tile_name, sites, int_tiles def write_params(params): pinstr = 'tile,val\n' for tile, (val) in sorted(params.items()): pinstr += '%s,%s\n' % (tile, val) open('params.csv', 'w').write(pinstr) def run(): print(''' module top(); ''') sites = list(gen_sites()) # Only on CFG_CENTER_MID expected. assert len(sites) == 1 tile_name, sites, int_tiles = sites[0] assert len(sites['ICAP']) == 2, len(sites['ICAP']) # int_tiles[6]: # IMUX43 -> ICAP1_I31 = 0 # IMUX42 -> ICAP1_I30 = toggle 0/1 # int_tiles[7]: # IMUX43 -> ICAP1_I15 = 0 # IMUX42 -> ICAP1_I14 = toggle 0/1 # int_tiles[8]: # IMUX43 -> ICAP1_CSIB = 0 # IMUX42 -> ICAP1_RDWRB = toggle 0/1 ICAP1_I30 = random.randint(0, 1) ICAP1_I14 = random.randint(0, 1) ICAP1_RDWRB = random.randint(0, 1) params = {} params[int_tiles[6]] = ICAP1_I30 params[int_tiles[7]] = ICAP1_I14 params[int_tiles[8]] = ICAP1_RDWRB print( """ wire [31:0] icap_i_{site}; wire icap_rdwrd_{site}; wire icap_csib_{site}; assign icap_i_{site}[31] = 0; assign icap_i_{site}[30] = {ICAP1_I30}; assign icap_i_{site}[15] = 0; assign icap_i_{site}[14] = {ICAP1_I14}; assign icap_csib_{site} = 0; assign icap_rdwrb_{site} = {ICAP1_RDWRB}; (* KEEP, DONT_TOUCH, LOC = "{site}" *) ICAPE2 icap_{site} ( .I(icap_i_{site}), .RDWRB(icap_rdwrb_{site}), .CSIB(icap_csib_{site}) ); """.format( site=sites['ICAP'][1], ICAP1_I30=ICAP1_I30, ICAP1_I14=ICAP1_I14, ICAP1_RDWRB=ICAP1_RDWRB)) print("endmodule") write_params(params) if __name__ == '__main__': run()