1. A method of designing a digital memory system, said method comprising: receiving a set of desired memory system performance characteristics from a circuit designer; generating a plurality of possible memory designs that meet said desired memory system performance characteristics, at least one of said plurality of possible memory designs comprising at least one intelligent memory controller, said intelligent memory controller implementing a memory algorithm to select a storage location, and at least one fundamental memory circuit, said fundamental memory circuit for storing data; selecting a subset of said plurality of possible memory designs, said subset of said plurality of possible memory designs optimized for a set of optimization parameters; and outputting said subset of said plurality of possible memory designs.