| #!/usr/bin/env python3 | 
 | import argparse | 
 |  | 
 | # ============================================================================ | 
 |  | 
 |  | 
 | def main(): | 
 |  | 
 |     # Parse args | 
 |     parser = argparse.ArgumentParser( | 
 |         description="Generates top-level verilog for scalable processing test" | 
 |     ) | 
 |     parser.add_argument('--top-name', type=str, default=None) | 
 |     parser.add_argument( | 
 |         '--num-processing-units', type=int, default=1, required=True | 
 |     ) | 
 |     parser.add_argument('--template', type=str, default="basys3_top.v") | 
 |  | 
 |     args = parser.parse_args() | 
 |  | 
 |     # Read template | 
 |     with open(args.template, "r") as fp: | 
 |         template = fp.readlines() | 
 |  | 
 |     # Find a line with "NUM_PROCESSING_UNITS" and change it | 
 |     verilog = [] | 
 |     for line in template: | 
 |         line = line.strip() | 
 |  | 
 |         if "NUM_PROCESSING_UNITS" in line: | 
 |             verilog.append( | 
 |                 ".NUM_PROCESSING_UNITS   (%d)," % args.num_processing_units | 
 |             ) | 
 |         elif args.top_name is not None and "module top" in line: | 
 |             verilog.append("module %s" % args.top_name) | 
 |         else: | 
 |             verilog.append(line) | 
 |  | 
 |     # Spit out the code | 
 |     for line in verilog: | 
 |         print(line) | 
 |  | 
 |  | 
 | # ============================================================================ | 
 |  | 
 | if __name__ == '__main__': | 
 |     main() |