專利名稱:內存控制器的制作方法
技術領域:
本發明涉及計算機領域,并且特別地,涉及一種內存控制器。
背景技術:
內存是計算機上重要的存儲設備之一,在計算機的運行過程中,通常會頻繁地對內存進行訪問。
為了保證計算機的正常運行,通常需要設置內存控制器對內存進行控制。具體的控制主要包括對內存設備進行初始化、根據內存的狀態向內存發送各種命令,從而對內存的運行狀態進行控制并實現內存的訪問等。
在實際應用中,內存控制器決定了計算機系統所能使用的最大內存容量、內存bank數、內存類型、內存速度和數據寬度等重要參數。在內存控制器參數確定的情況下,考慮到成本、技術等方面的原因,內存控制器可支持的內存條數目是有限的,通常情況下,一個內存控制器只能控制一根或兩根內存條。為了支持更多內存的并行訪問,目前主要的實現方式是對每個內存均設置一個相應的內存控制器。
在大容量、高帶寬訪問的存儲環境中,所需求的內存容量很大,通常會使內存的容量成為系統運行的瓶頸。此時就需要對內存進行擴容。但是,原有的內存控制器已經固化集成,無法滿足內存的擴容需求,如果對內存進行擴容就需要重新設計系統,添加或更換新的內存控制器,這樣才能達到提高存儲容量的目的。由于內存控制器是固化集成的,所以這種方式不僅設計靈活性很差,而且會增加內存擴容的成本。
針對相關技術中內存控制器配置不夠靈活導致內存更新成本高的問題,目前尚未提出有效的解決方案。
發明內容
考慮到相關技術中內存控制器配置不夠靈活導致內存更新成本高的問題,本發明的目的在于提供一種內存控制器,以解決上述問題。
根據本發明的內存控制器基于現場可編程門陣列實現,該內存控制器包括 數據通道接口模塊,用于根據內存所選用的顆粒規格將來自內存讀引擎和/或內存寫引擎的訪問請求的線性地址轉換為段地址形式的地址,并控制訪問請求、待寫入數據的存儲; 地址存儲模塊,用于在數據通道接口模塊的控制下存儲由數據通道接口模塊轉換后的訪問請求; 數據存儲模塊,用于在數據通道接口模塊的控制下存儲來自內存寫引擎的待寫入數據; 狀態機模塊,用于根據內存的內部狀態發送內存操作命令以及地址存儲模塊中存儲的訪問請求,其中,在發送的訪問請求為寫請求的情況下,狀態機模塊進一步控制數據存儲模塊中存儲的待寫入數據的調度; 物理接口模塊,用于根據內存的數據要求對狀態機模塊發送的訪問請求和待寫入數據進行轉換處理并發送至內存,并且用于根據內存控制器的數據要求對來自內存的數據進行轉換并發送至數據通道接口模塊。
其中,數據通道接口模塊還可用于根據內存的突發長度要求,對來自自內存讀引擎和/或內存寫引擎的訪問請求進行分解。
并且,數據通道接口模塊還可用于對地址存儲模塊和數據存儲模塊的存儲狀態進行監控。
此外,狀態機模塊還可用于在內存啟動之前,根據內存的參數對內存進行初始化,并在內存啟動后對內存進行周期性刷新。
此外,狀態機模塊還可用于保持內存中指定數目的bank處于活動狀態。
此外,狀態機模塊還可用于對地址存儲模塊中存儲的訪問請求的地址進行譯碼,并發送譯碼后的訪問請求。
優選地,數據存儲模塊和地址存儲模塊均可以為先入先出存儲器。
另外,上述段地址形式的地址可包括以下信息內存的bank地址、行地址、列地址、以及片選信號。
借助于本發明的技術方案,通過現場可編程門陣列實現了內存控制器,不僅降低了內存控制器本身的實現成本,而且能夠借助現場可編程門陣列的特性提高系統設計的靈活度,以簡單的方式對內存實現一對多的管理,有效降低了內存擴容所需的成本。
圖1是根據本發明實施例的內存控制器的結構框圖; 圖2是根據本發明實施例的內存控制器對多條內存進行管理的示意圖。
具體實施例方式 針對相關技術中相關技術中內存控制器配置不夠靈活導致內存更新成本高的問題,本發明提出通過現場可編程門陣列(Field Programmable GateArray,簡稱為FPGA)實現內存控制器,從而對內存進行控制,由于FPGA本身具有很強的可配置性,因此能夠適應內存的配置更新,并且還能夠同時管理多個內存條,有效提高設計的靈活性。
下面將結合附圖詳細描述本發明的實施例。
在本發明實施例中,提供了一種內存控制器。根據本發明的內存控制器可基于FPGA實現。
如圖1所示,根據本發明實施例的內存控制器包括 數據通道接口模塊(可稱為DDR2Controller DCI(Data ChannelInterface))1,用于根據內存所選用的顆粒規格將來自內存讀引擎和/或內存寫引擎的訪問請求的線性地址轉換為(DDR2SDRAM的)段地址形式的地址,并控制訪問請求、待寫入數據的存儲;具體地,在內存寫引擎需要訪問內存的情況下,數據通道接口模塊1可以對訪問請求進行地址轉換,并將轉換后的訪問請求存儲在地址存儲模塊2中,在來自內存寫引擎的訪問請求為寫請求時情況下,該數據通道接口模塊1還需要向數據存儲模塊3發送寫使能信號,從而將來自內存寫引擎的待寫入數據寫入數據存儲模塊3中;此外,數據通道接口模塊1還可用于對地址存儲模塊2和數據存儲模塊3的存儲狀態進行監控,在地址存儲模塊2和數據存儲模塊3沒有空余存儲空間時則停止向地址存儲模塊2和數據存儲模塊3繼續進行數據的寫入。
地址存儲模塊2,連接至數據通道接口模塊1,用于在數據通道接口模塊1的控制下存儲由數據通道接口模塊1轉換后的訪問請求; 數據存儲模塊3,連接至數據通道接口模塊1,用于在數據通道接口模塊1的控制下存儲來自內存寫引擎的待寫入數據; 狀態機模塊4(可稱為DDR2Controller FSM),連接至地址存儲模塊2和數據存儲模塊3,用于根據內存的內部狀態發送各種內存操作命令以及地址存儲模塊2中存儲的訪問請求,其中,在發送的訪問請求為寫請求的情況下,狀態機模塊4需要進一步控制數據存儲模塊3中存儲的待寫入數據的調度;具體地,對于來自地址存儲模塊2的訪問請求,在狀態機模塊4檢測到這些操作請求以后,狀態機需要根據內存芯片內部的狀態發出適當的命令,具體地,狀態機模塊4可以向地址存儲模塊2和數據存儲模塊3發送訪問命令,可以將地址存儲模塊2中的請求以及地址讀出并發送至內存,其中,在需要對內存進行數據寫入時,狀態機模塊4需要向數據存儲模塊3發送讀請求,將待寫入數據讀出,之后就可以發送讀出的待寫入數據,達到對待寫入數據進行調度的目的,并且,待寫入數據的傳輸不經過狀態機模塊; 物理接口模塊5(可稱為DDR2Interface),連接至狀態機模塊4、地址存儲模塊2、和數據存儲模塊3,用于根據內存的數據要求對狀態機模塊4發送的操作命令及寫入數據進行轉換以滿足DDR2的信號時序,并對從DDR2讀回的數據進行轉換。也就是說,由于內存控制器與內存對數據的要求不同,物理接口模塊5能夠根據內存的數據要求對狀態機模塊4發送的訪問請求和待寫入數據進行轉換處理并發送至內存(使得內存控制器發送至內存的數據符合內存的數據要求),并且用于根據內存控制器的數據要求對來自內存的數據進行轉換并發送至數據通道接口模塊1(使得內存發送至內存控制器的數據符合內存控制器的數據要求)。
對于由內存發送出來的數據,物理接口模塊5對該數據進行轉換后可以直接發送至數據通道接口模塊1,數據通道接口模塊1對該數據進行簡單處理后就能發送給內存讀引擎。
在根據本發明的內存控制器中,地址存儲模塊2和數據存儲模塊3均可以是先入先出(First In First Out,簡稱為FIFO)存儲器。
根據本發明的內存控制器可以對第二代雙倍數據速率同步動態隨機訪問存儲器(Double Data Rate Two Synchronous Dynamic Random AccessMemory,簡稱為DDR2 SDRAM)進行控制,根據本發明的內存控制器能夠響應外部對DDR2小型雙列直插內存模塊(Small Outline Dual In-lineMemory Module,簡稱為SODIMM)大容量、多內存、高帶寬內存條模組的讀、寫請求,根據讀、寫請求的地址向地址命中的內存條發出相應的操作命令,完成對內存條數據的正確讀寫。
本發明可以通過多種FPGA作為載體。例如,考慮到Virtex5系列FPGA芯片XC5VLX50T的驅動能力,8根內存條可以用兩個控制器進行控制,每個控制器分別控制其中4根內存條,每個內存條容量為512MB(也可以為其他數值,并且可擴展至4GB或更大),控制器模塊在發出操作命令之前需要對地址命中的內存條的工作狀態進行查詢(可以由狀態機模塊實現查詢),再根據該內存條當前bank的工作狀態進行跳轉,完成相應的操作。
下面將詳細描述上述各個模塊的功能。
(1)數據通道接口模塊 數據通道接口模塊用來與DDR2 Read Engine、DDR2 Write Engine兩個功能模塊的數據接口進行交互,同時根據用戶指定的配置方式將內部數據通道的訪問請求的線性訪問地址轉換成內存(即,DDR2 SDRAM)的段地址形式。基于DDR2 SDRAM的數據突發(猝發)長度(Burst Length,簡稱為BL)不同,數據通道接口模塊可以將數據通道操作分解成多個DDR2SDRAM訪問請求,這些請求會保存到專用地址FIFO(即,上述的地址存儲模塊)中,每次寫請求的數據保存在專用數據FIFO(即,上述的數據存儲模塊)中,在請求和數據都存儲完成后,其他模塊就可以從相應的存儲模塊中進行調用。此外,數據通道接口模塊還可以用于控制數據FIFO,并向數據FIFO發送控制信號。
其中,在數據通道接口模塊對讀/寫請求的地址進行轉換后,通過譯碼得到內存中正確的bank號(bank Address)、行地址(Row Address)、列地址(Column Address)、以及片選信號。數據通道接口模塊還能夠監視和處理地址存儲模塊和數據存儲模塊存儲空間的滿和空狀態。
(2)狀態機模塊 狀態機模塊負責根據DDR2SDRAM芯片內部的狀態向DDR2SDRAM發出相應的命令,并且能夠根據讀、寫請求向地址FIFO取址進行譯碼處理。
具體地,根據本發明的內存控制器內部其它功能模塊的DDR2SDRAM訪問操作請求都保存在地址FIFO中,狀態機模塊需要將這些訪問請求發送給DDR2SDRAM器件。如果是寫請求,還需要讀取數據存儲器中的數據,并且將這些數據發送到DDR2SDRAM器件。
為了提高內存總線數據傳輸的效率,同時降低流水線設計的難度,在設計時可以將Burst Length確定為8,并且不支持Burst操作被打斷的操作模式,這樣狀態機模塊就能夠在4個時鐘周期進行譯碼,保證譯碼時間充足。
此外,在使用DDR2SDRAM器件之前,狀態機模塊還需要根據DDR2SDRAM器件的參數進行初始化。并且,根據DDR2SDRAM器件的物理機制,在使用的過程中,狀態機模塊還需要對DDR2SDRAM器件進行周期性的刷新,以避免內存斷電后數據丟失。
在本發明實施例中的內存控制器支持DDR2SDRAM器件4bank及8bank設計,因此可以將DDR2SDRAM器件內部存儲空間被分割成4/8個bank,外界對DDR2SDRAM器件的訪問基于bank進行。根據bank當前所處狀態的不同,允許接收的命令不同。
狀態機模塊需要對8根DDR2SODIMM內存條進行讀寫控制,每個內存條SDRAM顆粒有4個bank,操作時需要記錄總共32個bank的工作狀態,每次接收到讀寫請求時都需要比較本次請求地址和當前活動bank的地址,根據不同的比較結果發送相應的命令。根據FPGA的驅動能力,通常可以用2個控制器來管理這8根內存條,每個控制器管理其中的4根內存條,即,如圖2所示的管理方式。如圖2所示,一個FPGA中實現了兩個內存控制器,每個內存控制器分別管理4個DIMM內存條,此時,可以8條內存地址進行統一編址,按照內存條的地址組織方式對讀寫訪問地址進行譯碼,根據譯碼結果進行片選,發送操作命令完成相應操作。
可選地,也可以采用兩個FPGA管理8個內存條,每個FPGA管理其中的4個內存條。
根據DDR2SDRAM的數據手冊,為了降低本發明的內存控制器的設計難度,在內存控制器中可以只記錄4個活動bank的狀態,如果所尋址的bank與當前活動bank地址一致,則可以直接尋址,若地址未命中活動bank地址,則需要判斷當前有幾個bank已打開,若不足4個bank被打開,則可以繼續打開新的bank,若已有4個bank被打開,則需要關閉掉其中的某個活動bank,用新的bank地址將其替換,激活新bank,再發出操作命令。
對于打開bank、關閉bank、讀取、寫入等操作的實現可以參照下面的表1所示。
表1
如表1所示,在進行內存控制時主要需要以下命令加載模式(LOADMODE)、刷新(REPRESH)、自刷新開始(SELF REPRESH entry)、自刷新結束(SELF REPRESH exit)、單個bank預充電(Single bankPRECHARGE)、所有bank預充電(All bank PRECHARGE)、bank激活(bank activate)、寫(WRITE)、讀(READ)、通過自動預充電寫(WRITEwith auto PRECHARGE)、通過自動預充電讀(READ with autoPRECHARGE)、不操作(NO OPERATION)、設備去選擇(DeviceDESELECT)、斷電開始(Power-down entry)、斷電結束(Power-down exit);此外,表1中BA表示bank地址,H表示高電平,L表示低電平,X表示未定義(各個廠商可以根據實際需求自行配置)。
由于根據本發明實施例的內存控制器能夠對內存設備進行刷新、充電、預充電、斷電(關閉bank)等操作,因此,根據本發明的內存控制器可以不支持自刷新開始(SELF REPRESH entry)、自刷新結束(SELF REPRESHexit)、通過自動預充電寫(WRITE with auto PRECHARGE)、通過自動預充電讀(READ with auto PRECHARGE)、斷電開始(Power-down entry)、斷電結束(Power-down exit)等命令,可選地,對于設備去選擇(DeviceDESELECT),由于其作用和不操作(NO OPERATION)類似,所以既可以支持也可以不支持。
DDR2控制器需要完成初始化和任務調度,在狀態機模塊的具體設計中可以采用三個有限狀態機來實現,即,主狀態機,初始化狀態機、和譯碼狀態機。
其中,主狀態機主要用于根據命令請求和當前bank所處的狀態產生相應的操作命令,包括讀命令、寫命令,刷新、預充電等操作命令。由于DDR2訪問的時序比較復雜,每次命令的時序要求嚴格,因此需要嚴格按照數據手冊的要求設計主狀態機對給出的參數進行訪問,避免數據出錯。
初始化狀態機主要用于在系統復位后進入初始化部分時對DDR2內存條進行初始化和參數配置,在初始化完成后DDR2內存將進入InitRst狀態并等待發送命令。初始化部分由13個狀態依次構成并順序執行,實現時可以另外組成一個小的狀態機。本發明的初始化狀態機可以按照內存技術手冊中規定的初始化方式對內存進行初始化,其具體處理過程類似,這里不再重復。
譯碼狀態機主要用于實現命令譯碼,并根據譯碼的結果確定發送相應內存操作指令的時間。具體地,譯碼狀態機需要根據地址FIFO取址對地址進行譯碼,例如,在對DDR2 SODIMM內存進行管理時,可以將每次讀寫請求的線性地址轉換為DDR2 SODIMM的段地址形式,并將當前訪問的bank號以及行地址與記錄的bank號和行地址進行比較,判斷是否一致,并根據比較結果發送相應的操作請求。
(3)地址存儲模塊和數據存儲模塊 地址存儲模塊和數據存儲模塊可以統稱為存儲模塊,其中包含若干專用緩沖區,用來保存操作的DDR2 SDRAM地址以及寫數據。
其中,地址存儲模塊用于保存每次DDR2 SDRAM訪問的地址及命令(例如,讀/寫命令)。數據FIFO用于保存對DDR2 SDRAM寫訪問的數據,而讀訪問的數據則無需緩存。該存儲模塊模塊必須記錄FIFO的空、滿等狀態信息供其他模塊查詢,而對數據存儲模塊、地址存儲模塊的寫控制信號需要由數據通道接口模塊產生,讀信號由狀態機模塊產生。
(4)物理接口模塊 物理接口模塊負責將內存控制的內部信號轉換成DDR2SDRAM的接口信號形式,并且還需要轉換來自內存設備的信號和數據。為了對不同數據線延時分別進行補償,在正式啟動數據傳輸之前,物理接口模塊首先需要進行訓練。
具體地,根據本發明實施例的內存控制器的接口數據可以設計為128位寬(位寬也可以是其他值),而通常DDR2 SDRAM的每次訪問是64bit、上下沿輸出,因此,在物理接口模塊向DDR2 SDRAM寫入訪問的地址(例如,包括bank號、行地址、和列地址)、訪問的命令、訪問的數據及相應的選通信號時,均需要根據DDR2 SDRAM的要求進行轉換。
此外,在物理接口模塊的電路部分需要考慮各信號間的時序問題,具體地,需要使內存控制內部時鐘、接口伴隨時鐘、以及DDR2 SDRAM的時鐘一致,接口上命令用內部時鐘下降沿輸出,DQ采用270度相移時鐘輸出,以滿足伴隨時鐘在與命令的寫對齊要求。并且,物理接口模塊的電路部分需要滿足DQS信號的preamble和postamble,以及實現所有雙向信號的三態使能信號生成。
應當注意,本發明的內存控制器可用于對各種類型的內存進行控制,具體的控制方式與上述方式類似,本文不再一一描述。
此外,如何對FPGA進行編程使其能夠具有上述模塊的功能、如何根據FPGA的性能選擇FPGA作為內存控制器、以及如何根據內存控制器的性能將相應數量的內存條分配給各個控制器,均是本領域技術人員所公知的,本文不一一詳述。
綜上所述,借助于本發明的技術方案,通過FPGA實現了內存控制器,從而對內存進行控制,由于FPGA本身具有很強的可配置性,因此使內存控制器能夠適應內存的配置更新,并且還能夠同時管理多個內存條,有效提高設計的靈活性,降低了成本。
顯然,本領域的技術人員應該明白,上述的本發明的各模塊或各步驟可以用通用的計算裝置來實現,它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網絡上,可選地,它們可以用計算裝置可執行的程序代碼來實現,從而,可以將它們存儲在存儲裝置中由計算裝置來執行,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現。這樣,本發明不限制于任何特定的硬件和軟件結合。
以上所述僅為本發明的優選實施例而已,并不用于限制本發明,對于本領域的技術人員來說,本發明可以有各種更改和變化。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
權利要求
1.一種內存控制器,其特征在于,所述內存控制器基于現場可編程門陣列實現,所述內存控制器包括
數據通道接口模塊,用于根據內存所選用的顆粒規格將來自內存讀引擎和/或內存寫引擎的訪問請求的線性地址轉換為段地址形式的地址,并控制所述訪問請求、所述待寫入數據的存儲;
地址存儲模塊,用于在所述數據通道接口模塊的控制下存儲由所述數據通道接口模塊轉換后的所述訪問請求;
數據存儲模塊,用于在所述數據通道接口模塊的控制下存儲來自所述內存寫引擎的待寫入數據;
狀態機模塊,用于根據所述內存的內部狀態發送內存操作命令以及所述地址存儲模塊中存儲的所述訪問請求,其中,在發送的所述訪問請求為寫請求的情況下,所述狀態機模塊進一步控制所述數據存儲模塊中存儲的所述待寫入數據的調度;
物理接口模塊,用于根據所述內存的數據要求對所述狀態機模塊發送的所述訪問請求和所述待寫入數據進行轉換處理并發送至所述內存,并且用于根據所述內存控制器的數據要求對來自所述內存的數據進行轉換并發送至所述數據通道接口模塊。
2.根據權利要求1所述的內存控制器,其特征在于,所述數據通道接口模塊還用于根據所述內存的突發長度要求,對來自所述自內存讀引擎和/或所述內存寫引擎的所述訪問請求進行分解。
3.據權利要求1所述的內存控制器,其特征在于,所述數據通道接口模塊還用于對所述地址存儲模塊和所述數據存儲模塊的存儲狀態進行監控。
4.根據權利要求1所述的內存控制器,其特征在于,所述段地址形式的地址包括以下信息所述內存的bank地址、行地址、列地址、以及片選信號。
5.根據權利要求1所述的內存控制器,其特征在于,所述狀態機模塊還用于在所述內存啟動之前,根據所述內存的參數對所述內存進行初始化,并在所述內存啟動后對所述內存進行周期性刷新。
6.根據權利要求1所述的內存控制器,其特征在于,所述狀態機模塊還用于保持所述內存中指定數目的bank處于活動狀態。
7.根據權利要求1所述的內存控制器,其特征在于,所述狀態機模塊還用于對所述地址存儲模塊中存儲的訪問請求的地址進行譯碼,并發送譯碼后的所述訪問請求。
8.根據權利要求1至7中任一項所述的內存控制器,其特征在于,
所述數據存儲模塊和所述地址存儲模塊均為先入先出存儲器。
全文摘要
一種內存控制器,包括數據通道接口模塊,用于根據內存所選用的顆粒規格將來自內存讀引擎和/或內存寫引擎的訪問請求的線性地址轉換為段地址形式的地址,并控制訪問請求、待寫入數據的存儲;地址存儲模塊,用于存儲由數據通道接口模塊轉換后的訪問請求;數據存儲模塊,用于存儲來自內存寫引擎的待寫入數據;狀態機模塊,用于根據內存的內部狀態發送內存操作命令以及地址存儲模塊存儲的訪問請求,且能夠控制數據存儲模塊中存儲的待寫入數據的調度;物理接口模塊,用于根據內存的數據要求對狀態機模塊發送的訪問請求和待寫入數據進行轉換處理并發送至內存,并且用于根據內存控制器的數據要求對來自內存的數據進行轉換并發送至數據通道接口模塊。
文檔編號G11C7/10GK101702326SQ20091023680
公開日2010年5月5日 申請日期2009年10月30日 優先權日2009年10月30日
發明者聶華, 邵宗有, 歷軍, 李靜, 劉新春, 竇曉光 申請人:曙光信息產業(北京)有限公司