| #!/usr/bin/env python3 | 
 | # -*- coding: utf-8 -*- | 
 | # | 
 | # Copyright (C) 2017-2020  The Project X-Ray Authors. | 
 | # | 
 | # Use of this source code is governed by a ISC-style | 
 | # license that can be found in the LICENSE file or at | 
 | # https://opensource.org/licenses/ISC | 
 | # | 
 | # SPDX-License-Identifier: ISC | 
 | 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(), 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) | 
 |  | 
 |         for site_name, site_type in gridinfo.sites.items(): | 
 |             if site_type in ['FIFO18E1']: | 
 |                 yield tile_name, site_name | 
 |  | 
 |  | 
 | def write_params(params): | 
 |     pinstr = 'tile,val,site\n' | 
 |     for tile, (site, val) in sorted(params.items()): | 
 |         pinstr += '%s,%s,%s\n' % (tile, val, site) | 
 |     open('params.csv', 'w').write(pinstr) | 
 |  | 
 |  | 
 | def run(): | 
 |     print(''' | 
 | module top(); | 
 |     ''') | 
 |  | 
 |     params = {} | 
 |  | 
 |     sites = list(gen_sites()) | 
 |     for (tile_name, site_name), isone in zip(sites, | 
 |                                              util.gen_fuzz_states(len(sites))): | 
 |         params[tile_name] = (site_name, isone) | 
 |  | 
 |         print( | 
 |             ''' | 
 |             (* KEEP, DONT_TOUCH, LOC = "{site_name}" *) | 
 |             RAMB18E1 #( | 
 |                     .INIT_00(256'b{isone}) | 
 |                 ) bram_{site_name} ();'''.format( | 
 |                 site_name=site_name, | 
 |                 isone=isone, | 
 |             )) | 
 |  | 
 |     print("endmodule") | 
 |     write_params(params) | 
 |  | 
 |  | 
 | if __name__ == '__main__': | 
 |     run() |