| 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() |