A method for performing memory diagnostics using a programmable diagnostic
memory module provides enhanced testability of memory controller and
memory subsystem design. The programmable diagnostic memory module
includes an interface for communicating with an external diagnostic
system, and the interface is used to transfer commands to the memory
module to alter various behaviors of the memory module. The altered
behaviors may be changing data streams that are written to the memory
module to simulate errors, altering the timing and/or loading of the
memory module signals, downloading programs for execution by a processor
core within the memory module, changing driver strengths of output
signals of the memory module, and manipulating in an analog domain,
signals at terminals of the memory module such as injecting noise on
power supply connections to the memory module. The memory module may
emulate multiple selectable memory module types, and may include a
complete storage array to provide standard memory module operation.