As processors evolve, there is a need for memories which can accommodate the increasingly high performance requirements of the processors. Some common types of memories include a hard disk drive (HDD), a dynamic random access memory (DRAM), a static random access memory (SRAM), and a Flash memory. HDDs and flash memories are non-volatile (i.e., retain data when the power is removed), whereas DRAM and SRAM are volatile (i.e., do not retain data when the power is removed). A HDD is a magnetic memory with rotating media, whereas DRAM, SRAM, and FLASH are semiconductor memories. The other salient features of these memory types are following:                (a) HDD is a very cost effective memory, but HDD suffer from very long access latencies (e.g. of the order of milliseconds).        (b) DRAM has a good read and write performance. While DRAM does require a periodic refresh to retain data, the performance impact due to a refresh can be minimized in an optimized system design.        (c) SRAM is more expensive than DRAM, and is used when a very fast access performance is required.        (d) FLASH memory started with a NOR-FLASH architecture but has now evolved to a NAND-FLASH as the popular architecture. NAND-FLASH with MLC (multi level cell i.e. multiple bits/cell) provides an effective cell size about four times smaller than DRAM, and thus a significant cost advantage over DRAM. The FLASH can match DRAM in a read performance, while the FLASH write performance is slower than a DRAM.        
System designers continue to explore ways to combine two or more memory types to meet the cost and performance requirements. However, existing memory solutions have not been able to meet the performance requirements of high bandwidth processors.