1. A method for programming a controller of a memory unit comprising: inputting a plurality of initialization parameters of the memory unit; calculating a clock delay and a command delay for each initialization parameter; calculating a set of read command parameters for each pair of clock delays and command delays; calculating a set of write command parameters for each pair of clock delays and command delays; calculating a system performance for each pair of clock delays and command delays; selecting the initialization parameter that offers the optimum system performance.