用中檔FPGA實現高速DDR3存儲器控制器
引言
由于系統帶寬不斷的增加,因此針對更高的速度和性能,設計人員對存儲技術進行了優化。下一代雙數據速率(DDR)SDRAM芯片是DDR3 SDRAM。 DDR3 SDRAM具有比DDR2更多的優勢。這些器件的功耗更低,能以更高的速度工作,有更高的性能(2倍的帶寬),并有更大的密度。與DDR2相比,DDR3器件的功耗降低了30%,主要是由于小的芯片尺寸和更低的電源電壓(DDR3 1.5V而DDR2 1.8V)。 DDR3器件還提供其他的節約資源模式,如局部刷新。與DDR2相比,DDR3的另一個顯著優點是更高的性能/帶寬,這是由于有更寬的預取緩沖(與4位的DDR2相比,DDR3為8位寬),以及更高的工作時鐘頻率。然而,設計至DDR3的接口也變得更具挑戰性。在FPGA中實現高速、高效率的DDR3控制器是一項艱巨的任務。直到最近,只有少數高端(昂貴)的FPGA有支持與高速的DDR3存儲器可靠接口的塊。然而,現在新一代中檔的FPGA提供這些塊、高速FPGA架構、時鐘管理資源和需要實現下一代DDR3控制器的I/O結構。本文探討設計所遇到的挑戰,以及如何用一個特定的FPGA系列LatticeECP3實現DDR3存儲器控制器。
DDR3存儲器控制器的挑戰
針對存儲器控制器,DDR3器件面臨一系列的挑戰。DDR3的工作頻率起始于DDR2的更高的工作頻率,然后趨于更高的頻率。 DDR3接口需要的時鐘速度超過400 MHz。這是對FPGA架構的一個重大挑戰。針對DDR3存儲器控制器的架構,fly-by結構和讀寫調整變得更加復雜。
不同于DDR2的T型分支拓撲結構,DDR3采用了fly-by拓撲結構,以更高的速度提供更好的信號完整性。fly-by信號是命令、地址,控制和時鐘信號。如圖1所示,源于存儲器控制器的這些信號以串行的方式連接到每個DRAM器件。通過減少分支的數量和分支的長度改進了信號完整性。然而,這引起了另一個問題,因為每一個存儲器元件的延遲是不同的,取決于它處于時序的位置。通過按照DDR3規范的定義,采用讀調整和寫調整技術來補償這種延遲的差異。fly-by拓撲結構在電源開啟時校正存儲器系統。這就要求在DDR3控制器中有額外的信息,允許校準工作在啟動時自動完成。

圖1 針對DDR3的Fly-by結構
讀和寫調整
在寫調整期間,存儲器控制器需要補償額外的跨越時間偏移(對每個存儲器器件,信號延遲是不同的),這是由于fly-by拓撲結構及選通和時鐘引入的。如圖2所示,源CK和DQS信號到達目的地有延遲。對于存儲器模塊的每個存儲器元件,這種延遲是不同的,必須逐個芯片進行調整,如果芯片有多于一個字節的數據,甚至要根據字節來進行調整。該圖說明了一個存儲器元件。存儲器控制器延遲了DQS,一次一步,直到檢測到CK信號從0過渡到到1。這將再次對齊DQS和CK,以便DQ總線上的目標數據可以可靠地被捕獲。由于這是由DDR3存儲器控制器自動做的,電路板設計人員無須擔心實施的細節。設計人員會從額外的裕度中得到好處,這是由DDR3存儲器控制器中的寫調整的特性所創建的。

圖2 寫調整的時序圖
DDR3存儲器時鐘資源和接口模塊
LatticeECP3 FPGA的I/O有專門的電路支持高速存儲器接口,包括DDR、DDR2和DDR3 SDRAM存儲器接口。如圖3所示,ECP3系列還有專用的時鐘資源,以支持下一代DDR3高速存儲器控制器。邊緣時鐘(ECLK1,ECLK2)是高速,低相偏的時鐘,用于時鐘控制數據高速地進出器件。在DQS的通道提供時鐘輸入(DQS)和與該時鐘相關的多達10個輸入數據位。DQSBUF服務于每個DQS通道,以控制時鐘訪問和延遲。DQSDLL支持DQS通道(每個器件的左側和右側都有一個)。DQSDLL是專門用于構建90度時鐘延遲的DLL。
圖3 LatticeECP3 DDR存儲器時鐘資源
萊迪思的DQS電路包括一個自動時鐘轉換電路,簡化了存儲器接口設計,并確保了可靠的操作。此外,DQS的延遲塊提供了針對DDR存儲器接口所需的時鐘對齊。通過DQS的延遲單元至專用的DQS布線資源,向PAD提供DQS信號。溫度,電壓和工藝變化對專用DQS延遲塊產生的差異由設置的校準信號來補償(7位延遲控制),校準信號源于器件對邊的兩個DQSDLL。在器件的一半,每個DQSDLL彌補各自邊的DQS延遲。通過系統時鐘和專用反饋環路,對DLL環進行了補償。
LatticeECP3 FPGA的鎖相環用于生成針對DDR3存儲器接口時鐘。例如,對于一個400 MHz的DDR3接口,通用鎖相環用于生成三個時鐘:400 MHz的時鐘,有90 °相移的400 MHz時鐘和200 MHz時鐘。有90 °相移的400 MHz時鐘用于生成DQ和DQS輸出。沒有相移的400 MHz時鐘用于產生時鐘(CLKP和CLKN)到DDR3存儲器。200 MHz時鐘用于生成地址和命令(ADDR/CMD)信號。該時鐘的實現對客戶是透明的,可用萊迪思的設計工具自動地實現。 <-- 2010/1/23 19:24:08-->