Amir_yazd :
Hi,
I am trying to get a better understanding about memory timing. There is a timing constraint in GDDR5 called tccdl. It defines the number of clock cycles between read/write from bank A to read/write from bank B in the same bankgroup.
(1) Does this timing means that after tccdl all the data from bank A is sent to memory controller?
(2) How come tccdl is more than tccd?
(3) If I add a special buffer (size of global IOs) to the global IO which read the whole data every cycle, can I reduce the tccdl to one cycle? Can I issue one read request to a bank every cycle?
I appreciate any help.
Thanks
- Amir
Hi Amir,
Tccd is the number of cycles that must be allowed to elapse between successive column commands, specifically from one read command to another read command or from one write command to another write command. On DDR, DDR2, and DDR3 Tccd is a function of the prefetch depth. Since DDR3 has aprefetch depth of 8 words, and 2 words are transferred per cycle, no less than 4 cycles must elapse between successive column commands made to any bank to prevent data from getting clobbered.
On SDR, DDR, DDR2, and DDR3 each memory bank is fully independent. As long as Tccd is respected, no issues will occur regardless of which bank a command is sent to. GDDR5 introduces a concept called "bank groups", this same concept was adopted by DDR4 so my explanation applies equally to that architecture as well.
In GDDR5, each bank group is independent of all other bank groups but banks within each bank group are not independent from eachother. There are four bank groups with each bank group containing four banks for a total of sixteen banks.
Tccd_short is the number of cycles that must elapse between column commands between banks in different bank groups
Tccd_long is the number of cycles that must elapse between column commands between banks in the same bank group.
The impact of this arrangement is that it is no longer possible to tightly pipeline column commands between any two arbitrary banks, only between arbitrary bank groups.
To answer your specific questions:
1. No. The memory controller will have all of the data from the read request after Tcl + Tburst cycles. A write will be complete after Tburst + Tcwl cycles.
2. Explained above, it's due to an architectural change. It's too difficult to have 16 independent banks; bank grouping is necessary to keep power consumption down, conserve on-chip realestate, and keep the IO interface fast.
3. No. At most, one column command can be issued every Tccd_short cycles. They need not be aligned, commands simply cannot overlap without causing data corruption. Other commands such as Row Active and Precharge can be issued whenever as long as their respective timings are met.