韓 笑 ,閆永立 ,2,李勇彬 ,馬嘉莉 ,2,吳 斌 ,2
(1.中國科學院大學,北京 100049;2.中國科學院微電子研究所,北京 100029;3.湖南大學,湖南 長沙 410082)
隨著現代社會數字化的高速發展,大容量數據存儲系統作為各個系統中的核心子部分,其重要性不言而喻,對數據處理的速度、實時性、穩定性以及功耗等要求也越來越重要。市面上可供選的主流存儲器有FLASH,DRAM,SRAM等,而由于JEDEC標準的DDR SRAM系列存儲器相較于FLASH、DRAM,可以在時鐘雙沿工作,數據傳輸速率高,帶寬大,并且存儲相同數據量信息消耗更少晶體管,因此也有容量大、功耗低等優點,特別適合對海量數據存儲的場景。鑒于DDR接口讀寫時序不是特別容易簡單實現,這就推動了商家研發對用戶使用友好的存儲器控制器。控制器可以完成自動刷新、存儲器掉電重啟、讀寫時序控制等底層基本功能,使用者基于簡單控制器接口進行二次開發,就可以向存儲器正確讀寫數據。這樣可以縮短開發周期,減少設計人員的工作量,簡化系統設計。考慮到DDR系列存儲器性價比等實際因素,設計選用DDR2作為緩存存儲器,使用Synopysy公司設計的DDR2 Controller商用IP[1]。在驗證硬件平臺方面,選用Altera公司StraixIII開發板外接DDR2 SDRAM內存條。此外,因為產品接口標準不統一,為了在信號時序方面將Synopysy與Altera兩家廠商的存儲器控制器模塊與PHY模塊匹配,設計了專門接口轉換模塊。
綜合上述分析,文中在Stratix系列FPGA開發板上借助硬件描述語言設計了一套控制器用戶接口設計方案。
系統使用Altera公司開發的EDA軟件Quartus II例化的Uniphy IP[2]模塊作為PHY(Physical Layer Interface,物理層接口)層,整體架構如圖1所示。

圖1 整體架構圖
整體模塊一共包括四大模塊:
1)用戶接口模塊:上位機數據的接收、緩存,通過AXI 3.0協議[3]接口將配置信息、待存數據及相關控制命令發送給DDR2控制器模塊。
2)DDR2控制器模塊:上電后對存儲器進行一系列配置,完成初始化操作;在使用者進行數據讀寫任務時,將用戶單沿操作的數據鏈路通過電路轉換成符合存儲器雙沿數據的傳輸要求。在寫操作時將用戶發送過來的待發送數據以及數據寫傳輸控制信息,編碼成符合存儲器接口標準制定的寫操作指令,在讀操作時先將用戶側發來的讀地址、讀數據長度編碼成讀指令發送給存儲器,控制存儲器讀出相應數據,然后從存儲器反饋回的信息中解析出讀出的數據發送給用戶端。控制器每隔一段時間都會啟動自動刷新命令,用于保證存儲器內數據不丟失。
3)橋接模塊:主要負責Synopysy控制器IP與Altera Uniphy硬核IP接口信號轉換,實現不同時序要求的IP間信號正常交互。
4)PHY:使用Quartus II軟件提供Uniphy硬核IP作為PHY層,發送控制器信號和接收來自物理通路的信號[5-6]。
作為數據緩存系統的核心模塊之一,用戶接口模塊細分成控制邏輯模塊Cu、配置模塊、數據發送接收模塊等3個小模塊。
通過異步FIFO進行時鐘域隔離并將上位機指令信息緩存,控制邏輯模塊Cu負責協調配置模塊Configure和數據發送接收模塊Host的工作,分別啟動兩個模塊通過AXI 3.0協議接口與控制器模塊交互,交互內容包括上位機提供的配置、控制命令及緩存數據等。
cal_success為Uniphy IP發出的校準信號[7],為高電平時表示已完成PHY層校準,可以與存儲器進行數據傳輸。init為控制器IP模塊反饋的信號,為低電平時指DDR2 SDRAM與控制器已經完成初始化操作。在控制器上電初始化期間根據用戶端配置指令安排,完成控制器工作模式設置、存儲器時序參數設定等任務[8]。
在完成PHY校準和初始化操作以后,數據發送接收模塊Host就可以根據用戶端讀寫指令,在需要存入數據時發出寫操作指令,同時將要寫入存儲器的地址與待寫數據一并發出,與之類似,需要讀取數據時發送給控制器讀操作指令并將要讀取存儲器的地址信息一并發出。
由于DDR2操作流程復雜,因此要想正確地讀寫數據,就需要遵循相應JEDEC標準設計存儲器工作流程,圖2介紹了DDR2存儲器在工作時完整的狀態轉換[9-10],由該圖可以清楚地看到各狀態跳轉所需要的命令或者需滿足的條件。
狀態機描述了DDR2各個狀態的轉換以及轉換時所涉及的一些命令。DDR2控制器的設計實質上是圍繞著該狀態機的設計進行的,以確保進行正常工作。
正如圖2所示,在用戶端發起讀寫操作前,需要存儲器在上電狀態下進行校準和若干初始化過程。在這期間,根據用戶端配置要求,將控制器中對工作模式寄存器(MR)等多個配置寄存器進行設定。為了配置這些寄存器,用戶端需要提供CAS指令延遲、DRAM大小、DRAM數量、自刷新的周期等配置信息。只有在控制器初始化完成后,用戶端才可以對DDR2存儲器進行正式的讀寫任務,并且由于DDR2的結構特點,需先選定Bank以及該Bank下所在行(Bank地址和行地址同時發出)后,再選定列地址及發出讀寫指令。

圖2 DDR2簡單狀態轉換圖
橋接模塊處理Synopsys的Controller信號,根據不同的類別做處理(分成控制通路信號、寫數據通路、讀數據通路)以匹配UniPHY接口連接與時序[12],并增加UniPHY所需要的控制信號處理。兩家公司在PHY-Controller之間存在接口時序和連接的差別。
2.3.1 接口對比
Altera的UniPHY與controller之間的接口有自己定義的AFI接口規范,接口分類為SDR系列、MEM接口、時鐘及復位。
SynPHY的接口信號包括DLL的配置、IO的配置及控制、SDR系列(和Altera的部分相似,還有一些時序上不同)、PHY的配置部分、MEM接口。
2.3.2 工作模式對比
Altera controller工作方式主要有Half rate與Full rate模式,在Full rate模式時,和Synopsys的模式相似,即Local側、Controller側與Memory側工作時鐘相同,單沿觸發(均在上升沿工作),數據位寬是Memory側的兩倍。
2.3.3 時鐘域對比
從時鐘域看(full rate前提下)[13],Altera UniPHY提供給Memory和Local、Controller側的時鐘同頻同相,而SynPHY的是同頻不同相,Memory側的時鐘要滯后 90°。
2.3.4 接口時序對比
1)指令與地址不同,Synopsys指令持續時間為兩個clock,而Altera相同功能指令只維持一個clock,指令格式相同,連續的寫指令之間Synopsys夾的是nop指令,Altera的是 deselect device指令[14]。
2)都是通過數據有效信號標志輸入數據有效及維持的時間。
3)Synopsys中沒有類似的afi_dqs_burst信號,UniPHY中afi_dqs_burst必須比afi_wdata_valid信號提前一個周期到達。
4)Memory側,Altera的 UniPHY命令和SynPHY的一致。
5)對于寫數據和寫數據有效信號的延遲,UniPHY中根據afi_wlat需要調整數據相對于指令的延遲,范圍為0~63。
Synopsys中的數據與指令的時序關系是固定的,相當于Altera的afi_wlat=0情況。
PHY指的是DDR2控制器和DDR2存儲芯片之間的電路部分,保證讀寫過程中DQS信號能夠以精確的相位偏移發送和采集數據[15],目的是實現數據高速穩定地傳輸。
文中基于Intel的EP3SL150F1152C2器件進行了設計實現,并在Intel FPGA Stratix III開發板上進行功能驗證。
Modelsim仿真AXI突發長度為1,大小為4 kB數據的測試案例,讀寫命令正確寫入,讀出數據結果正確,如圖3所示。

圖3 仿真測試
多組測試案例如表1所示。

表1 測試案例
利用Quartus II 13.1 EDA工具進行了綜合、時序約束、生成網表等。處理后綜合結果如圖4所示,報告表明,系統可以達到200 MHz頻率設計要求。
在進行系統硬件功能驗證時,使用ROM IP預先存入待存數據代替上位機指令緩存FIFO,使用SignalTap導出讀出數據文件,并與寫入數據文件對比,結果正確。
針對現代數據緩存系統的要求,文中在Stratix系列FPGA開發板上借助硬件描述語言設計了一套控制器用戶接口設計方案。保證數據實時緩存。使用硬件語言實現了用戶接口模塊和橋接模塊的設計,解決了控制器與PHY層的接口匹配問題,達到了大批量連續數據讀寫存儲的目的。最后通過FPGA完成了對系統整體的功能驗證。

圖4 綜合報告