#!/usr/bin/env python3 import random import argparse def main(): description = """ Generate random access pattern for LiteDRAM Pattern Generator/Checker. Each address in range [base, base+length) will be accessed only once, but in random order. This ensures that no data will be overwritten. """ parser = argparse.ArgumentParser(description=description) parser.add_argument("base", help="Base address") parser.add_argument("length", help="Number of (address, data) pairs") parser.add_argument("data_width", help="Width of data (used to determine max value)") parser.add_argument("--seed", help="Use given random seed (int)") args = parser.parse_args() if args.seed: random.seed(int(args.seed, 0)) base = int(args.base, 0) length = int(args.length, 0) data_width = int(args.data_width, 0) address = list(range(length)) random.shuffle(address) data = [random.randrange(0, 2**data_width) for _ in range(length)] for a, d in zip(address, data): print("0x{:08x}, 0x{:08x}".format(a, d)) if __name__ == "__main__": main()