|  | #!/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 import verilog | 
|  | from prjxray.verilog import vrandbit, vrandbits | 
|  | import sys | 
|  | import json | 
|  |  | 
|  |  | 
|  | def gen_sites(): | 
|  | for _tile_name, site_name, _site_type in sorted(util.get_roi().gen_sites( | 
|  | ["XADC"])): | 
|  | yield site_name | 
|  |  | 
|  |  | 
|  | sites = list(gen_sites()) | 
|  | DUTN = len(sites) | 
|  | DIN_N = DUTN * 8 | 
|  | DOUT_N = DUTN * 8 | 
|  |  | 
|  | verilog.top_harness(DIN_N, DOUT_N) | 
|  |  | 
|  | f = open('params.jl', 'w') | 
|  | f.write('module,loc,params\n') | 
|  | print( | 
|  | 'module roi(input clk, input [%d:0] din, output [%d:0] dout);' % | 
|  | (DIN_N - 1, DOUT_N - 1)) | 
|  |  | 
|  | for loci, site in enumerate(sites): | 
|  |  | 
|  | ports = { | 
|  | 'clk': 'clk', | 
|  | 'din': 'din[  %d +: 8]' % (8 * loci, ), | 
|  | 'dout': 'dout[  %d +: 8]' % (8 * loci, ), | 
|  | } | 
|  |  | 
|  | params = { | 
|  | "INIT_43": random.randint(0x000, 0xFFFF), | 
|  | } | 
|  |  | 
|  | modname = "my_XADC" | 
|  | verilog.instance(modname, "inst_%u" % loci, ports, params=params) | 
|  | # LOC isn't support | 
|  | params["LOC"] = verilog.quote(site) | 
|  |  | 
|  | j = {'module': modname, 'i': loci, 'params': params} | 
|  | f.write('%s\n' % (json.dumps(j))) | 
|  | print('') | 
|  |  | 
|  | f.close() | 
|  | print( | 
|  | '''endmodule | 
|  |  | 
|  | // --------------------------------------------------------------------- | 
|  |  | 
|  | ''') | 
|  |  | 
|  | print( | 
|  | ''' | 
|  | module my_XADC (input clk, input [7:0] din, output [7:0] dout); | 
|  | parameter INIT_43 = 16'h0000; | 
|  |  | 
|  | (* KEEP, DONT_TOUCH *) | 
|  | XADC #( | 
|  | .INIT_43(INIT_43) | 
|  | ) dut ( | 
|  | .BUSY(), | 
|  | .DRDY(), | 
|  | .EOC(), | 
|  | .EOS(), | 
|  | .JTAGBUSY(), | 
|  | .JTAGLOCKED(), | 
|  | .JTAGMODIFIED(), | 
|  | .OT(), | 
|  | .DO(), | 
|  | .ALM(), | 
|  | .CHANNEL(), | 
|  | .MUXADDR(), | 
|  | .CONVST(), | 
|  | .CONVSTCLK(clk), | 
|  | .DCLK(clk), | 
|  | .DEN(), | 
|  | .DWE(), | 
|  | .RESET(), | 
|  | .VN(), | 
|  | .VP(), | 
|  | .DI(), | 
|  | .VAUXN(), | 
|  | .VAUXP(), | 
|  | .DADDR()); | 
|  | endmodule | 
|  | ''') |