|  | import argparse | 
|  |  | 
|  | CARRY_TEMPLATE = r"""module top ( | 
|  | input clk, | 
|  | input carry_fabric, | 
|  | output out | 
|  | ); | 
|  | wire [{depth}-1:0] a; | 
|  | wire [{depth}-1:0] b; | 
|  | wire [{depth}-1:0] c; | 
|  |  | 
|  | LFSR #(.POLY(5)) a_src( | 
|  | .clk(clk), | 
|  | .out(a) | 
|  | ); | 
|  |  | 
|  | LFSR #(.POLY(9)) b_src( | 
|  | .clk(clk), | 
|  | .out(b) | 
|  | ); | 
|  |  | 
|  | assign carry = {carry}; | 
|  | assign c = a + b + carry; | 
|  | assign out = c[{depth}-1]; | 
|  | endmodule | 
|  |  | 
|  | module LFSR ( | 
|  | input clk, | 
|  | output [{depth}-1:0] out | 
|  | ); | 
|  | parameter POLY = 1; | 
|  |  | 
|  | reg [{depth}-1:0] r = 1; | 
|  | assign out = r; | 
|  | wire f; | 
|  | assign f = ^(POLY & ~r); | 
|  | always @( posedge clk) | 
|  | r <= {{r[{depth}-2:0], ~f}}; | 
|  | endmodule""" | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | parser = argparse.ArgumentParser( | 
|  | description="Generates top.v for carry stress test." | 
|  | ) | 
|  |  | 
|  | parser.add_argument('--init', choices=['0', '1', 'fabric'], required=True) | 
|  | parser.add_argument('--carry_depth', type=int, required=True) | 
|  |  | 
|  | args = parser.parse_args() | 
|  |  | 
|  | carry = args.init | 
|  | if args.init == 'fabric': | 
|  | carry = 'carry_fabric' | 
|  |  | 
|  | print(CARRY_TEMPLATE.format( | 
|  | carry=carry, | 
|  | depth=args.carry_depth, | 
|  | )) | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | main() |