| #!/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 json |
| import os |
| import random |
| random.seed(int(os.getenv("SEED"), 16)) |
| from prjxray import util |
| from prjxray import verilog |
| from prjxray.db import Database |
| |
| BIN = "BIN" |
| BOOL = "BOOL" |
| |
| |
| 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 not in ["PCIE_BOT"]: |
| continue |
| |
| for site_name, site_type in gridinfo.sites.items(): |
| |
| return site_name, site_type |
| |
| |
| def main(): |
| print(''' |
| module top(); |
| ''') |
| |
| lines = [] |
| |
| site_name, site_type = gen_sites() |
| |
| params = dict() |
| params['site'] = site_name |
| |
| verilog_attr = "" |
| |
| verilog_attr = "#(" |
| |
| fuz_dir = os.getenv("FUZDIR", None) |
| assert fuz_dir |
| with open(os.path.join(fuz_dir, "attrs.json"), "r") as attrs_file: |
| attrs = json.load(attrs_file) |
| |
| for param, param_info in attrs.items(): |
| param_type = param_info["type"] |
| param_values = param_info["values"] |
| param_digits = param_info["digits"] |
| |
| if param_type == BOOL: |
| value = random.choice(param_values) |
| value_str = verilog.quote(value) |
| elif param_type == BIN: |
| if type(param_values) is int: |
| value = param_values |
| elif type(param_values) is list: |
| if len(param_values) > 1: |
| value = random.choice(param_values) |
| else: |
| value = random.randint(0, param_values[0]) |
| value_str = "{digits}'b{value:0{digits}b}".format( |
| value=value, digits=param_digits) |
| params[param] = value |
| |
| verilog_attr += """ |
| .{}({}),""".format(param, value_str) |
| |
| verilog_attr = verilog_attr.rstrip(",") |
| verilog_attr += "\n)" |
| |
| print("PCIE_2_1 {} pcie ();".format(verilog_attr)) |
| print("endmodule") |
| |
| with open('params.json', 'w') as f: |
| json.dump(params, f, indent=2) |
| |
| |
| if __name__ == '__main__': |
| main() |