韓 笑 ,閆永立 ,2,李勇彬 ,馬嘉莉 ,2,吳 斌 ,2
(1.中國科學(xué)院大學(xué),北京 100049;2.中國科學(xué)院微電子研究所,北京 100029;3.湖南大學(xué),湖南 長沙 410082)
隨著現(xiàn)代社會(huì)數(shù)字化的高速發(fā)展,大容量數(shù)據(jù)存儲(chǔ)系統(tǒng)作為各個(gè)系統(tǒng)中的核心子部分,其重要性不言而喻,對(duì)數(shù)據(jù)處理的速度、實(shí)時(shí)性、穩(wěn)定性以及功耗等要求也越來越重要。市面上可供選的主流存儲(chǔ)器有FLASH,DRAM,SRAM等,而由于JEDEC標(biāo)準(zhǔn)的DDR SRAM系列存儲(chǔ)器相較于FLASH、DRAM,可以在時(shí)鐘雙沿工作,數(shù)據(jù)傳輸速率高,帶寬大,并且存儲(chǔ)相同數(shù)據(jù)量信息消耗更少晶體管,因此也有容量大、功耗低等優(yōu)點(diǎn),特別適合對(duì)海量數(shù)據(jù)存儲(chǔ)的場(chǎng)景。鑒于DDR接口讀寫時(shí)序不是特別容易簡單實(shí)現(xiàn),這就推動(dòng)了商家研發(fā)對(duì)用戶使用友好的存儲(chǔ)器控制器??刂破骺梢酝瓿勺詣?dòng)刷新、存儲(chǔ)器掉電重啟、讀寫時(shí)序控制等底層基本功能,使用者基于簡單控制器接口進(jìn)行二次開發(fā),就可以向存儲(chǔ)器正確讀寫數(shù)據(jù)。這樣可以縮短開發(fā)周期,減少設(shè)計(jì)人員的工作量,簡化系統(tǒng)設(shè)計(jì)??紤]到DDR系列存儲(chǔ)器性價(jià)比等實(shí)際因素,設(shè)計(jì)選用DDR2作為緩存存儲(chǔ)器,使用Synopysy公司設(shè)計(jì)的DDR2 Controller商用IP[1]。在驗(yàn)證硬件平臺(tái)方面,選用Altera公司StraixIII開發(fā)板外接DDR2 SDRAM內(nèi)存條。此外,因?yàn)楫a(chǎn)品接口標(biāo)準(zhǔn)不統(tǒng)一,為了在信號(hào)時(shí)序方面將Synopysy與Altera兩家廠商的存儲(chǔ)器控制器模塊與PHY模塊匹配,設(shè)計(jì)了專門接口轉(zhuǎn)換模塊。
綜合上述分析,文中在Stratix系列FPGA開發(fā)板上借助硬件描述語言設(shè)計(jì)了一套控制器用戶接口設(shè)計(jì)方案。
系統(tǒng)使用Altera公司開發(fā)的EDA軟件Quartus II例化的Uniphy IP[2]模塊作為PHY(Physical Layer Interface,物理層接口)層,整體架構(gòu)如圖1所示。
圖1 整體架構(gòu)圖
整體模塊一共包括四大模塊:
1)用戶接口模塊:上位機(jī)數(shù)據(jù)的接收、緩存,通過AXI 3.0協(xié)議[3]接口將配置信息、待存數(shù)據(jù)及相關(guān)控制命令發(fā)送給DDR2控制器模塊。
2)DDR2控制器模塊:上電后對(duì)存儲(chǔ)器進(jìn)行一系列配置,完成初始化操作;在使用者進(jìn)行數(shù)據(jù)讀寫任務(wù)時(shí),將用戶單沿操作的數(shù)據(jù)鏈路通過電路轉(zhuǎn)換成符合存儲(chǔ)器雙沿?cái)?shù)據(jù)的傳輸要求。在寫操作時(shí)將用戶發(fā)送過來的待發(fā)送數(shù)據(jù)以及數(shù)據(jù)寫傳輸控制信息,編碼成符合存儲(chǔ)器接口標(biāo)準(zhǔn)制定的寫操作指令,在讀操作時(shí)先將用戶側(cè)發(fā)來的讀地址、讀數(shù)據(jù)長度編碼成讀指令發(fā)送給存儲(chǔ)器,控制存儲(chǔ)器讀出相應(yīng)數(shù)據(jù),然后從存儲(chǔ)器反饋回的信息中解析出讀出的數(shù)據(jù)發(fā)送給用戶端??刂破髅扛粢欢螘r(shí)間都會(huì)啟動(dòng)自動(dòng)刷新命令,用于保證存儲(chǔ)器內(nèi)數(shù)據(jù)不丟失。
3)橋接模塊:主要負(fù)責(zé)Synopysy控制器IP與Altera Uniphy硬核IP接口信號(hào)轉(zhuǎn)換,實(shí)現(xiàn)不同時(shí)序要求的IP間信號(hào)正常交互。
4)PHY:使用Quartus II軟件提供Uniphy硬核IP作為PHY層,發(fā)送控制器信號(hào)和接收來自物理通路的信號(hào)[5-6]。
作為數(shù)據(jù)緩存系統(tǒng)的核心模塊之一,用戶接口模塊細(xì)分成控制邏輯模塊Cu、配置模塊、數(shù)據(jù)發(fā)送接收模塊等3個(gè)小模塊。
通過異步FIFO進(jìn)行時(shí)鐘域隔離并將上位機(jī)指令信息緩存,控制邏輯模塊Cu負(fù)責(zé)協(xié)調(diào)配置模塊Configure和數(shù)據(jù)發(fā)送接收模塊Host的工作,分別啟動(dòng)兩個(gè)模塊通過AXI 3.0協(xié)議接口與控制器模塊交互,交互內(nèi)容包括上位機(jī)提供的配置、控制命令及緩存數(shù)據(jù)等。
cal_success為Uniphy IP發(fā)出的校準(zhǔn)信號(hào)[7],為高電平時(shí)表示已完成PHY層校準(zhǔn),可以與存儲(chǔ)器進(jìn)行數(shù)據(jù)傳輸。init為控制器IP模塊反饋的信號(hào),為低電平時(shí)指DDR2 SDRAM與控制器已經(jīng)完成初始化操作。在控制器上電初始化期間根據(jù)用戶端配置指令安排,完成控制器工作模式設(shè)置、存儲(chǔ)器時(shí)序參數(shù)設(shè)定等任務(wù)[8]。
在完成PHY校準(zhǔn)和初始化操作以后,數(shù)據(jù)發(fā)送接收模塊Host就可以根據(jù)用戶端讀寫指令,在需要存入數(shù)據(jù)時(shí)發(fā)出寫操作指令,同時(shí)將要寫入存儲(chǔ)器的地址與待寫數(shù)據(jù)一并發(fā)出,與之類似,需要讀取數(shù)據(jù)時(shí)發(fā)送給控制器讀操作指令并將要讀取存儲(chǔ)器的地址信息一并發(fā)出。
由于DDR2操作流程復(fù)雜,因此要想正確地讀寫數(shù)據(jù),就需要遵循相應(yīng)JEDEC標(biāo)準(zhǔn)設(shè)計(jì)存儲(chǔ)器工作流程,圖2介紹了DDR2存儲(chǔ)器在工作時(shí)完整的狀態(tài)轉(zhuǎn)換[9-10],由該圖可以清楚地看到各狀態(tài)跳轉(zhuǎn)所需要的命令或者需滿足的條件。
狀態(tài)機(jī)描述了DDR2各個(gè)狀態(tài)的轉(zhuǎn)換以及轉(zhuǎn)換時(shí)所涉及的一些命令。DDR2控制器的設(shè)計(jì)實(shí)質(zhì)上是圍繞著該狀態(tài)機(jī)的設(shè)計(jì)進(jìn)行的,以確保進(jìn)行正常工作。
正如圖2所示,在用戶端發(fā)起讀寫操作前,需要存儲(chǔ)器在上電狀態(tài)下進(jìn)行校準(zhǔn)和若干初始化過程。在這期間,根據(jù)用戶端配置要求,將控制器中對(duì)工作模式寄存器(MR)等多個(gè)配置寄存器進(jìn)行設(shè)定。為了配置這些寄存器,用戶端需要提供CAS指令延遲、DRAM大小、DRAM數(shù)量、自刷新的周期等配置信息。只有在控制器初始化完成后,用戶端才可以對(duì)DDR2存儲(chǔ)器進(jìn)行正式的讀寫任務(wù),并且由于DDR2的結(jié)構(gòu)特點(diǎn),需先選定Bank以及該Bank下所在行(Bank地址和行地址同時(shí)發(fā)出)后,再選定列地址及發(fā)出讀寫指令。
圖2 DDR2簡單狀態(tài)轉(zhuǎn)換圖
橋接模塊處理Synopsys的Controller信號(hào),根據(jù)不同的類別做處理(分成控制通路信號(hào)、寫數(shù)據(jù)通路、讀數(shù)據(jù)通路)以匹配UniPHY接口連接與時(shí)序[12],并增加UniPHY所需要的控制信號(hào)處理。兩家公司在PHY-Controller之間存在接口時(shí)序和連接的差別。
2.3.1 接口對(duì)比
Altera的UniPHY與controller之間的接口有自己定義的AFI接口規(guī)范,接口分類為SDR系列、MEM接口、時(shí)鐘及復(fù)位。
SynPHY的接口信號(hào)包括DLL的配置、IO的配置及控制、SDR系列(和Altera的部分相似,還有一些時(shí)序上不同)、PHY的配置部分、MEM接口。
2.3.2 工作模式對(duì)比
Altera controller工作方式主要有Half rate與Full rate模式,在Full rate模式時(shí),和Synopsys的模式相似,即Local側(cè)、Controller側(cè)與Memory側(cè)工作時(shí)鐘相同,單沿觸發(fā)(均在上升沿工作),數(shù)據(jù)位寬是Memory側(cè)的兩倍。
2.3.3 時(shí)鐘域?qū)Ρ?/p>
從時(shí)鐘域看(full rate前提下)[13],Altera UniPHY提供給Memory和Local、Controller側(cè)的時(shí)鐘同頻同相,而SynPHY的是同頻不同相,Memory側(cè)的時(shí)鐘要滯后 90°。
2.3.4 接口時(shí)序?qū)Ρ?/p>
1)指令與地址不同,Synopsys指令持續(xù)時(shí)間為兩個(gè)clock,而Altera相同功能指令只維持一個(gè)clock,指令格式相同,連續(xù)的寫指令之間Synopsys夾的是nop指令,Altera的是 deselect device指令[14]。
2)都是通過數(shù)據(jù)有效信號(hào)標(biāo)志輸入數(shù)據(jù)有效及維持的時(shí)間。
3)Synopsys中沒有類似的afi_dqs_burst信號(hào),UniPHY中afi_dqs_burst必須比afi_wdata_valid信號(hào)提前一個(gè)周期到達(dá)。
4)Memory側(cè),Altera的 UniPHY命令和SynPHY的一致。
5)對(duì)于寫數(shù)據(jù)和寫數(shù)據(jù)有效信號(hào)的延遲,UniPHY中根據(jù)afi_wlat需要調(diào)整數(shù)據(jù)相對(duì)于指令的延遲,范圍為0~63。
Synopsys中的數(shù)據(jù)與指令的時(shí)序關(guān)系是固定的,相當(dāng)于Altera的afi_wlat=0情況。
PHY指的是DDR2控制器和DDR2存儲(chǔ)芯片之間的電路部分,保證讀寫過程中DQS信號(hào)能夠以精確的相位偏移發(fā)送和采集數(shù)據(jù)[15],目的是實(shí)現(xiàn)數(shù)據(jù)高速穩(wěn)定地傳輸。
文中基于Intel的EP3SL150F1152C2器件進(jìn)行了設(shè)計(jì)實(shí)現(xiàn),并在Intel FPGA Stratix III開發(fā)板上進(jìn)行功能驗(yàn)證。
Modelsim仿真AXI突發(fā)長度為1,大小為4 kB數(shù)據(jù)的測(cè)試案例,讀寫命令正確寫入,讀出數(shù)據(jù)結(jié)果正確,如圖3所示。
圖3 仿真測(cè)試
多組測(cè)試案例如表1所示。
表1 測(cè)試案例
利用Quartus II 13.1 EDA工具進(jìn)行了綜合、時(shí)序約束、生成網(wǎng)表等。處理后綜合結(jié)果如圖4所示,報(bào)告表明,系統(tǒng)可以達(dá)到200 MHz頻率設(shè)計(jì)要求。
在進(jìn)行系統(tǒng)硬件功能驗(yàn)證時(shí),使用ROM IP預(yù)先存入待存數(shù)據(jù)代替上位機(jī)指令緩存FIFO,使用SignalTap導(dǎo)出讀出數(shù)據(jù)文件,并與寫入數(shù)據(jù)文件對(duì)比,結(jié)果正確。
針對(duì)現(xiàn)代數(shù)據(jù)緩存系統(tǒng)的要求,文中在Stratix系列FPGA開發(fā)板上借助硬件描述語言設(shè)計(jì)了一套控制器用戶接口設(shè)計(jì)方案。保證數(shù)據(jù)實(shí)時(shí)緩存。使用硬件語言實(shí)現(xiàn)了用戶接口模塊和橋接模塊的設(shè)計(jì),解決了控制器與PHY層的接口匹配問題,達(dá)到了大批量連續(xù)數(shù)據(jù)讀寫存儲(chǔ)的目的。最后通過FPGA完成了對(duì)系統(tǒng)整體的功能驗(yàn)證。
圖4 綜合報(bào)告