2.2.2. 預充電與有效化
圖 2.8 未涵蓋整個週期。它只顯示出存取 DRAM 的完整循環的一部分。在能夠發送新的 訊號之前,必須無效化(deactivate)目前鎖上的列,並對新的列預充電(precharge)。這裡我們僅聚焦在藉由明確命令來執行的情況。有些協定上的改進 ── 在某些情況下 ── 能夠避免這個額外步驟。不過由預充電引入的延遲仍然會影響操作。
圖 2.9 示意從 訊號開始、到另一列的 訊號為止的活動。與先前一樣,經過 CL 週期後,便能夠取得以第一個 訊號請求的資料。在這個例子中,請求二個字組,其 ── 在一個簡易的 SDRAM 上 ── 花了二個週期來傳輸。也可以想像成是在一張 DDR 晶片上傳輸四個字組。
即使在命令速率為 1 的 DRAM 模組上,也無法立即發出預充電命令。它必須等待與傳輸資料一樣長的時間。在這個例子中,它花了二個循環。雖然與 CL 相同,但這只是巧合。預充電訊號沒有專用的線路;有些實作是藉由同時降低允寫(Write Enable,)與 的電位來發出這個命令。這個組合本身沒什麼特別意義(編碼細節見 [18])。
一旦發出預充電命令,它會花費 tRP(列預充電時間)個週期,直到列能被選取為止。在圖 2.9 中,大部分的時間(以紫色標示)與記憶體傳輸時間(淺藍)重疊。這滿好的!但 tRP 比傳輸時間還長,所以下一個 訊號會被延誤一個週期。
假使我們延伸圖表的時間軸,我們會發現下一次資料傳輸發生在前一次停止的 5 個週期之後。這表示在七個週期中,只有二個週期有用到資料匯流排。將這乘上 FSB 的速度,對 800MHz 匯流排而言,理論上的 6.4GB/s 就變成 1.8GB/s。這太糟,而且必須避免。在第六節描述的技術能幫忙提升這個數字。程式開發者通常也得盡一份力。
對於 SDRAM 模組,還有一些沒有討論過的時間值。在圖 2.9 中,預充電命令受限於資料傳輸時間。另一個限制是,在 訊號之後,SDRAM 模組需要一些時間才能夠為另一列預充電(記作 tRAS)。這個數字通常非常大,為 tRP 值的二到三倍。假如 ── 在 訊號之後 ── 只有一個 訊號,並且資料傳輸在少數幾個週期內就完成,這就是問題。假設在圖 2.9 中,起始的 訊號是直接接在 訊號之後,並且 tRAS 為 8 個週期。預充電命令就必須要延遲一個額外的週期,因為 tRCD、CL、與 tRP(因為它比資料傳輸時間還長)的總和只有 7 個週期。
DDR 模組經常以一種特殊的標記法描述:w-x-y-z-T。舉例來說:2-3-2-8-T1。這代表:
w | 2 | 等待時間(CL) |
x | 3 | 至 等待時間(tRCD) |
y | 2 | 預充電(tRP) |
z | 8 | 有效化至預充電延遲(tRAS) |
T | T1 | 命令速率 |