| #!/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 json | |
| import random | |
| random.seed(int(os.getenv("SEED"), 16)) | |
| from prjxray import util | |
| def gen_sites(): | |
| for tile_name, site_name, _site_type in sorted(util.get_roi().gen_sites( | |
| ['RAMB18E1', 'FIFO18E1'])): | |
| yield tile_name, site_name | |
| BITS_PER_PARAM = 256 | |
| NUM_INITP_PARAMS = 8 | |
| NUM_INIT_PARAMS = 0x40 | |
| BITS_PER_SITE = BITS_PER_PARAM * (NUM_INITP_PARAMS + NUM_INIT_PARAMS) | |
| def main(): | |
| print("module top();") | |
| list_of_params = [] | |
| for tile_name, site in gen_sites(): | |
| params = {} | |
| params['tile'] = tile_name | |
| params['site'] = site | |
| p = [] | |
| for initp_idx in range(NUM_INITP_PARAMS): | |
| param = 'INITP_{:02X}'.format(initp_idx) | |
| params[param] = random.randint(0, 2**BITS_PER_PARAM - 1) | |
| p.append( | |
| ".{param}(256'h{val:x})".format( | |
| param=param, val=params[param])) | |
| for init_idx in range(NUM_INIT_PARAMS): | |
| param = 'INIT_{:02X}'.format(init_idx) | |
| params[param] = random.randint(0, 2**BITS_PER_PARAM - 1) | |
| p.append( | |
| ".{param}(256'h{val:x})".format( | |
| param=param, val=params[param])) | |
| params['params'] = ','.join(p) | |
| print( | |
| """ | |
| (* KEEP, DONT_TOUCH, LOC = "{site}" *) | |
| RAMB18E1 #( | |
| .READ_WIDTH_A(1), | |
| .READ_WIDTH_B(1), | |
| .RAM_MODE("TDP"), | |
| {params} | |
| ) bram_{site} ( | |
| ); | |
| """.format(**params)) | |
| list_of_params.append(params) | |
| print("endmodule") | |
| with open('params.json', 'w') as f: | |
| json.dump(list_of_params, f, indent=2) | |
| if __name__ == "__main__": | |
| main() |