基于VIM的嵌入式存儲控制器的研究與實(shí)現
1 引言
本文引用地址:http://dyxdggzs.com/article/90328.htm隨著(zhù)VLSI技術(shù)的迅猛發(fā)展,微處理器主頻日益提高、性能飛速增長(cháng),盡管與此同時(shí)存儲器集成度也越來(lái)越高、存取延時(shí)也在不斷下降,但是處理器性能的年增長(cháng)速度為50%~60%,而存儲器性能每年提高的幅度只有5%~7%,DRAM存儲器的低帶寬和高延遲使高性能處理器無(wú)法充分發(fā)揮其性能,處理器和存儲器之間速度的差距越來(lái)越成為制約整個(gè)系統性能的瓶頸。眾多的研究者從微體系結構出發(fā),采取亂序執行、多線(xiàn)程、預取、分支預測、推斷執行等技術(shù),或多級Cache的層次式存儲結構來(lái)彌補微處理器與存儲器性能差距,但是這些技術(shù)存在多種問(wèn)題:復雜、占用面積大、資源利用率低、造價(jià)高、耗盡存儲帶寬等,并不能真正解決存儲瓶頸問(wèn)題。即使一些新的存儲器產(chǎn)品的出現,如DDR存儲器,Rambus存儲器等,雖然一定程度上提高了存儲器的頻率,但處理器和存儲器之間的性能差距還是在進(jìn)一步拉大。如何才能真正消除存儲器性能瓶頸呢?PIM技術(shù)(Processing in Memory),即把處理器和存儲器緊密集成到一塊芯片上,半導體制造工藝的進(jìn)步使CMOS邏輯單元可以和SRAM或DRAM集成在一個(gè)硅片上,這樣可以突破芯片間引腳的限制,充分發(fā)揮存儲器的隱藏帶寬,同時(shí)降低訪(fǎng)問(wèn)延時(shí)(將片間訪(fǎng)問(wèn)延時(shí)轉換成片內訪(fǎng)問(wèn)延時(shí)遲)。以PIM技術(shù)為基礎,用向量部件作為協(xié)處理器構成的Vector In Memory(VIM)體系結構,可充分發(fā)揮PIM高帶寬、低延遲、低功耗的特點(diǎn),開(kāi)發(fā)數據級并行,是解決存儲系統性能瓶頸的有效途徑。本文具體闡述VIM體系結構中影響存儲系統性能的關(guān)鍵部件嵌入式存儲控制器的設計與實(shí)現。
2 VIM體系結構
VIM是一種面向流式數據處理的向量體系結構,其微體系結構的處理器部分由1個(gè)標量核和1個(gè)向量協(xié)處理器構成,嵌入式存儲控制器和存儲器構成片上DRAM存儲系統,處理器部分和存儲系統之間由高速存儲交叉開(kāi)關(guān)互連。VIM體系結構最重要的特征就是向量處理器和嵌入式存儲器的結合。圖1中給出了VIM系統結構的典型框架結構。
2.1 RISC標量核
VIM標量核為可綜合、高集成度的32位RISC處理核,其指令集與SPARC V8兼容;標量核包括整數部件、浮點(diǎn)部件,支持用戶(hù)態(tài)和超級用戶(hù)態(tài)(管態(tài))2種工作模式;主要功能是執行標量指令(SPARC指令集),處理異常和中斷,為向量部件輸送向量指令,完成標量核與向量部件之間的數據傳遞,并與主機進(jìn)行通信完成取指、譯碼工作。
2.2 向量部件
向量部件作為標量核的協(xié)處理器,執行擴展的向量指令,與標量部件并行執行。由向量指令隊列、向量控制器、向量核寄存器文件、向量Lane等部分構成。向量指令隊列VIQ,為異步FIFO隊列。標量核通過(guò)部分譯碼將識別出的向量指令寫(xiě)入VIQ,由向量取指單元從中順序取出指令交由譯碼部分再次譯碼。向量控制器保證向量指令的正確執行,完成向量流水線(xiàn)控制。向量核寄存器文件由向量寄存器文件、標量寄存器文件、控制寄存器文件和標志寄存器文件構成,包括32個(gè)32位寄存器。向量Lane由并行的向量流水線(xiàn)構成,包括完全流水的LSU,ALU,FPU等部件。每個(gè)Lane可以看成一條數據通路,完成對特定寬度數據的處理,多個(gè)Lane之間可以并行執行。
2.3 嵌入式存儲系統及I/O
嵌入式存儲系統由存儲互連交叉開(kāi)關(guān)、嵌人式存儲控制器和存儲器構成,存儲互連交叉開(kāi)關(guān)用于片內運算部件訪(fǎng)存時(shí)的地址翻譯、訪(fǎng)存指令的路由以及讀取數據的返回,其將標量訪(fǎng)存部件、向量Lane訪(fǎng)存部件和嵌入式存儲器互連起來(lái),具有多端口、高帶寬、低延時(shí)的特點(diǎn)。嵌入式存儲控制器接收從存儲交叉開(kāi)關(guān)傳送過(guò)來(lái)的訪(fǎng)存指令,實(shí)現對DRAM的數據存取。存儲器是由4個(gè)獨立的存儲體組成的一個(gè)多體交叉存儲器,每個(gè)存儲體都有自己獨立的存取控制接口,體內又分成4個(gè)子體。采用多體存儲器可使映射到不同存儲體的訪(fǎng)存指令可以同時(shí)執行,并行對多個(gè)向量元素進(jìn)行操作,同時(shí)每個(gè)存儲體都對應各自的存儲控制器,相對于集中式存儲控制而言訪(fǎng)問(wèn)延時(shí)更低、功耗更小。I/O接口用于實(shí)現多個(gè)VIM節點(diǎn)間互連和掛接一些I/O設備。
嵌入式存儲控制器實(shí)現對DRAM存儲體的初始化、激活、行選、列選、自動(dòng)充電、定時(shí)刷新、讀延遲、寫(xiě)恢復等功能控制,支持4種突發(fā)讀寫(xiě)模式、兩種行選延時(shí)選擇,具有嚴格的時(shí)序。下面將詳細闡述嵌入式存儲控制器的設計方案,設計思想以及具體實(shí)現。
3 嵌入式存儲控制器設計與實(shí)現
3.1 嵌入式存儲控制器模塊結構
存儲控制器是系統總線(xiàn)和DRAM之間的控制接口,在VIM的存儲系統中,嵌入式存儲控制器的作用就是將存儲交叉開(kāi)關(guān)所傳輸過(guò)來(lái)的讀寫(xiě)控制命令轉換成DRAM的控制信號實(shí)現對DRAM的讀寫(xiě)、刷新等控制;將存儲交叉開(kāi)關(guān)傳輸過(guò)來(lái)的地址分解成Bank地址、行地址和列地址,在特定的時(shí)候傳輸到DRAM地址線(xiàn)上;以及控制數據總線(xiàn)和DRAM數據線(xiàn)的數據輸入輸出。
實(shí)現VIM-1嵌入式存儲控制器,圖2所示為其模塊結構,存儲控制器由主控制模塊、信號產(chǎn)生模塊、刷新模塊和數據通路構成。
下面具體對每個(gè)模塊的功能進(jìn)行闡述:
3.1.1 主控制模塊
主控制模塊實(shí)現對DRAM各種功能的控制,由初始化狀態(tài)機子模塊、命令狀態(tài)機子模塊和計數器子模塊構成。
初始化狀態(tài)機子模塊 在計時(shí)子模塊的時(shí)序控制下,產(chǎn)生DRAM初始化過(guò)程中所需的各種狀態(tài),通過(guò)狀態(tài)轉換控制DRAM模塊的初始化,并將其狀態(tài)信號iState同時(shí)傳送到命令狀態(tài)機子模塊、信號產(chǎn)生模塊、計時(shí)器子模塊和數據通路中。
命令狀態(tài)機子模塊 在計時(shí)子模塊的時(shí)序控制下,產(chǎn)生DRAM讀寫(xiě)周期和刷新周期過(guò)程中所需的各種狀態(tài),控制對DRAM模塊的讀寫(xiě)訪(fǎng)問(wèn)及刷新操作,并將其狀態(tài)信號cState傳送到數據通路模塊、計時(shí)器子模塊和信號產(chǎn)生模塊中。
計時(shí)器子模塊 根據DRAM模塊的時(shí)序標準,對DRAM模塊內部操作進(jìn)行時(shí)序控制,主要通過(guò)控制初始化狀態(tài)機和命令狀態(tài)機中的狀態(tài)轉化時(shí)序,達到控制DRAM內部操作時(shí)序的目的。
3.1.2 刷新模塊
產(chǎn)生對DRAM模塊的刷新請求操作:通過(guò)內部的計數器控制,每隔一定的時(shí)鐘周期(具體時(shí)鐘周期數按照DRAM模塊參數而定)向命令狀態(tài)機發(fā)送刷新請求,直到命令狀態(tài)機回復刷新請求應答。
3.1.3 信號產(chǎn)生模塊
信號產(chǎn)生模塊將初始化狀態(tài)機發(fā)送的狀態(tài)iState、命令狀態(tài)發(fā)送的狀態(tài)cState轉換成DRAM所對應的內部命令信號,主要包括sdr_CKE(時(shí)鐘使能信號)、sdr_CSn(片選信號)、sdr_RASn(行選信號)、sdr_CASn(列選信號)、sdr_WEn(讀寫(xiě)信號)。同時(shí)在規定的時(shí)序下,將地址總線(xiàn)上傳輸過(guò)來(lái)的地址信號轉換成DRAM內部所對應的Bank地址和行列地址。
3.1.4 數據通路
數據通路模塊主要功能是在計時(shí)器子模塊的時(shí)序控制下,根據命令狀態(tài)信號,在相應狀態(tài)時(shí)將數據總線(xiàn)上的數據寫(xiě)入DRAM存儲體;以及將DRAM數據線(xiàn)sdr_DQ上的數據輸出到系統總線(xiàn)上,同時(shí)在數據輸出的過(guò)程中將數據有效信號sys_D_Valid置1。
3.2 DRAM初始化
通常在DRAM正常工作,能夠執行存儲訪(fǎng)問(wèn)前,需要對DRAM進(jìn)行初始化。主控制模塊中的初始化狀態(tài)機子模塊實(shí)現對DRAM的初始化操作。如圖3所示。
圖3為初始化狀態(tài)機狀態(tài)轉換圖,初始化過(guò)程如下:系統復位時(shí),DRAM空操作,初始化狀態(tài)機處于i_NOP狀態(tài),系統復位完成且電源和時(shí)鐘處于穩定狀態(tài)時(shí),DRAM初始化序列開(kāi)始執行,經(jīng)1次充電、2次刷新和載入工作模式操作,最后進(jìn)入就緒狀態(tài),初始化序列完成。
初始化狀態(tài)機中的載入模式狀態(tài)啟動(dòng)DRAM內部載人工作模式命令,將地址總線(xiàn)上的數據加載到DRAM的模式寄存器中,配置用戶(hù)所需要的工作模式。模式寄存器的內容定義了猝發(fā)長(cháng)度、猝發(fā)類(lèi)型及CAS延遲等,只要DRAM模塊處于空操作狀態(tài),模式寄存器可以載入不同的值,繼而改變DRAM的工作模式。
另外,由于DRAM的延遲周期根據實(shí)際DRAM速度級別的不同而不同,在延遲狀態(tài)中等待的時(shí)鐘周期數與時(shí)鐘周期tCK相關(guān),當時(shí)鐘周期tCK大于延遲時(shí)間時(shí)(這里延遲時(shí)間指:充電周期、刷新周期和載入延遲),實(shí)際上就不需要等待,在初始化過(guò)程中,充電、刷新和載入工作模式到最后就緒狀態(tài)之間的轉換為圖3中虛線(xiàn)表示的轉換過(guò)程。
3.3 讀寫(xiě)周期
圖4為VIM-1嵌入式存儲控制器命令狀態(tài)機狀態(tài)轉換圖,通過(guò)狀態(tài)轉換控制對DRAM的讀、寫(xiě)訪(fǎng)問(wèn)和刷新操作。
系統復位時(shí),DRAM空操作,命令狀態(tài)機處于空閑狀態(tài),DRAM初始化完成后,命令狀態(tài)機對總線(xiàn)地址選通信號sys_ADSn(低電平有效,表示總線(xiàn)請求)和刷新請求信號sys_REF_REQ進(jìn)行檢測,如果有刷新請求,那么命令狀態(tài)機模塊控制DRAM進(jìn)入刷新周期,否則,若總線(xiàn)地址選通信號sys_ADSn有效,命令狀態(tài)機轉入激活狀態(tài),則DRAM進(jìn)入讀寫(xiě)周期。
命令狀態(tài)機從激活狀態(tài)無(wú)條件轉入激活延遲狀態(tài),在激活延遲狀態(tài)對系統控制總線(xiàn)上的讀寫(xiě)命令信號進(jìn)行檢測,若信號為高電平(表示讀訪(fǎng)問(wèn))則命令狀態(tài)機轉入讀操作狀態(tài),繼而進(jìn)行對DRAM讀取數據操作;否則狀態(tài)機轉人寫(xiě)操作狀態(tài),執行寫(xiě)訪(fǎng)問(wèn)。
對DRAM一個(gè)完整的讀訪(fǎng)問(wèn)周期需要經(jīng)過(guò)的狀態(tài)轉換過(guò)程為空閑-激活-激活延遲-讀操作-CAS延遲-數據輸出,最后回到空閑狀態(tài)。而對DRAM一個(gè)完整的寫(xiě)訪(fǎng)問(wèn)周期則需要經(jīng)過(guò)空閑-激活-激活延遲-寫(xiě)操作-數據寫(xiě)入-寫(xiě)恢復-空閑的狀態(tài)轉換過(guò)程。
在所實(shí)現的VIM-1嵌入式存儲控制器中,將DRAM地址位A[10]恒置高電平,設置為自動(dòng)充電模式,所以對DRAM的充電隱藏在DRAM讀寫(xiě)命令操作中。命令狀態(tài)機轉換過(guò)程中所涉及到的延遲等待時(shí)間,由DRAM模塊速度和延遲參數確定。從c_ACTIVE到c_WRITE或c_READ狀態(tài)之間的虛線(xiàn)表示,在激活延遲小于1個(gè)時(shí)鐘周期的情況下,DRAM從激活狀態(tài)直接轉換到讀/寫(xiě)操作狀態(tài),延遲實(shí)際上隱藏在狀態(tài)轉換的時(shí)鐘周期中。
3.4 刷新周期
DRAM存儲器需要進(jìn)行定時(shí)刷新,刷新周期描述如下:
(1)刷新模塊每經(jīng)過(guò)1個(gè)刷新請求周期,向控制模塊發(fā)出刷新請求信號sys_REF_REQ;
(2)存儲控制器的控制模塊發(fā)出應答信號sys_REFACK對請求信號進(jìn)行確認;
(3)應答信號在整個(gè)刷新階段有效,sys_REF_REQ信號發(fā)出后必須得到sys_REF_ACK的確認,否則一直保持為高;
(4)在sys_REF_ACK有效期間,不能允許進(jìn)行讀寫(xiě)訪(fǎng)問(wèn),直到刷新周期完畢,在刷新期間系統接口所有命令將被忽略;
(5)接收刷新請求后,命令狀態(tài)機經(jīng)過(guò)c_AR刷新?tīng)顟B(tài)-c_tRFC刷新等待狀態(tài)-c_idle空閑狀態(tài)的轉換過(guò)程完成對DRAM的刷新控制。并等待接收系統訪(fǎng)存指令,完成下一輪的讀/寫(xiě)周期。
3.5 時(shí)序控制
時(shí)序控制是存儲控制器實(shí)現中的關(guān)鍵部件,在VIM-1嵌入式存儲控制器中用1個(gè)計時(shí)器子模塊來(lái)實(shí)現對存控內狀態(tài)機的時(shí)序控制。計時(shí)器子模塊中包括1個(gè)時(shí)鐘周期數鎖存器ClkCNT和1個(gè)計時(shí)復位信號Reset_ClkCNT,具體時(shí)序控制描述如下:
(1)鎖存器ClkCNT按時(shí)鐘周期遞增,每時(shí)鐘周期ClkCNT的值加1,直到Reset_ClkCNT復位信號置1,ClkCNT清0;
(2)狀態(tài)機轉換到某個(gè)需要延遲操作的狀態(tài)時(shí),Reset ClkCNT復位信號置1,此時(shí)CIkCNT清0;
(3)狀態(tài)機進(jìn)入延遲等待狀態(tài),同時(shí)將Reset_ClkCNT復位信號置0,計時(shí)器從0開(kāi)始計數,ClkCNT按時(shí)鐘周期遞增1;
(4)ClkCNT值到達指定延遲時(shí)間,相關(guān)狀態(tài)機子模塊控制狀態(tài)發(fā)生轉換,同時(shí)將Reset_ClkCNT置1,ClkCNT清0,進(jìn)入下一個(gè)狀態(tài)的時(shí)序控制。
4 功能模擬及綜合驗證
4.1 存儲控制器功能模擬
在modelsim 5.7中對VIM-1嵌入式存儲器進(jìn)行了功能模擬,下面分別給出讀寫(xiě)訪(fǎng)問(wèn)功能模擬結果。圖5為存儲控制器寫(xiě)周期時(shí)序波形圖。該時(shí)序波形圖反映了存儲控制器將數據總線(xiàn)上的數據00000009H(H表示16進(jìn)制)寫(xiě)入DRAM的過(guò)程。從圖5中可以看到存儲控制器在狀態(tài)機cstate處于0110狀態(tài)時(shí)240 ns,將數據送到輸出數據線(xiàn)sdr_odq上,數據值為00000009H;完成數據的寫(xiě)入后,狀態(tài)機轉到寫(xiě)恢復狀態(tài)0111(260 ns),經(jīng)過(guò)兩個(gè)周期后在280 ns回到空閑狀態(tài)0000,寫(xiě)周期完成。
圖6為存儲控制器讀周期時(shí)序波形圖。同寫(xiě)周期時(shí)序波形圖一樣,圖中正確反映了命令狀態(tài)機在檢測到控制總線(xiàn)上讀命令后的狀態(tài)轉換過(guò)程,狀態(tài)轉換之間的延遲周期,每種狀態(tài)所對應的DRAM命令信號,系統地址和數據總線(xiàn)上的值,DRAM地址線(xiàn)和數據線(xiàn)上的值。通過(guò)一系列的狀態(tài)轉換,在狀態(tài)機cstate轉換到1010數據輸出狀態(tài)(350 ns)時(shí),存儲控制器將前面存入DRAM存儲單元中的數據00000009H,讀取出來(lái)并傳送到系統數據總線(xiàn)sys_odata上。
4.2 FPGA綜合驗證
在QuartusⅡ環(huán)境中采用Altera的Stratix FPGA系列中的EPlS80對VIM-1嵌入式存儲控制器進(jìn)行了綜合,下面是存儲控制器綜合結果。
5 結語(yǔ)
在PIM中嵌入向量處理邏輯的VIM系統結構,能充分發(fā)揮PIM高帶寬、低延遲、低功耗的特點(diǎn),可以有效解決存儲性能瓶頸問(wèn)題?;赩IM的嵌入式存儲控制器是VIM系統的方存控制部件,是影響系統性能的發(fā)揮的關(guān)鍵,本文實(shí)現的VIM-1嵌入式存儲控制器支持多種讀寫(xiě)模式,具有嚴格的時(shí)序控制,每個(gè)存儲控制器對應單獨的存儲模塊,和VIM的存儲交叉開(kāi)關(guān)接口,使得多個(gè)方存部件可以同時(shí)訪(fǎng)問(wèn)多個(gè)存儲體,具有較強的研究和應用價(jià)值。
評論