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