All (modern) PC memory is SDRAM (Synchronous Dynamic RAM). DRAM, the predecessor, responded to requests as soon as it could after the control voltages changed, SDRAM replies according to a clock cycle (which synchronises it with the system bus).
Pretty much all modern PC memory is also DDR, Double Data Rate. With Single Data Rate RAM, data is only sent when the timing signal is high1. The clock signal is high for some period of time, then low for another period of time of the same length. One cycle consists of one high period and one low period. Single Data Rate RAM can only transmit at one of these, DDR at both.
DDR is then further subdivided into DDR, DDR2 and DDR3. Though the voltages are different (2.5v, 1.8v, 1.5v respectively), the big difference in practical terms is the socket shape:
While we’re here, it’s worth noting that the most commonly-used difference between DDR and DDR2 RAM, the notch position, is frightfully difficult to identify without an example of the other type against which to compare. More obvious is the gap between the contacts and the notch on the DDR stick (to the right of the notch in the above pic), which is absent on the DDR2 stick.
There are two ways people refer to DDR RAM, as a DDR-XXX or PC-XXXX. For example, DDR200 is also PC1600.
The 200 in DDR200 is the clock rate of the memory modules (the chips on the memory stick). It is double the clock speed of the system it’s plugged into, since it is DDR (and so operates twice per cycle).
The 1600 in the PC1600 is the maximum number of bytes per second that the RAM allows, and is not achievable in the real world.
To calculate one from the other, we do
TransferRate = SystemClockRate x DataRate x NumberOfBytesTransferred / NumberOfBitsPerByte TransferRate = SystemClockRate x 2 x 64 / 8 TransferRate = SystemClockRate x 16
Since we’re concerned with Dual Data Rate memory, the data rate is equal to two. It transfers 64 bytes per cycle, and each of those bytes is 8 bits long.
The SystemClockRate is the frequency of the system bus, not of the memory itself – DDR200 operates at a frequency of 200MHz, but requires a system with a clock of 100MHz. In order to find the TransferRate given the MemoryFrequency we need to do
TransferRate = SystemClockRate x 16 but SystemClockRate = MemoryFrequency x 0.5 TransferRate = MemoryFrequency x 0.5 x 16 TransferRate = MemoryFrequency x 8
Hence 200 x 8 = 1600 means we’d expect DDR200 to give a theoretical maximum of 1600Bps, and so be PC1600.
The above are all maxima – DDR can operate at lower frequencies than its maximum. DDR266, while expecting a 133MHz system bus, can run satisfactorily in a 100MHz system, but it will only operate as DDR200.
Below are the combinations implemented in the real world:
The above is basically an aggregation and condensation of what is in the following articles. If you want more detail, go there:
- or low. I don’t actually know, but It’s mostly immaterial. The important bit is that it’s an ‘or’ not an ‘and’. [↩]