專利名稱:內(nèi)存控制器及命令控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及內(nèi)存控制器(Memory Controller)技術(shù),特別涉及主要適用于第2 代雙倍數(shù)據(jù)速率(Double Data Rate2,DDR2)同步動態(tài)隨機接入存儲器(Synchronous Dynamic Random Access Memory, SDRAM)禾口第 3 代雙倍數(shù)據(jù)速率(Double Data Rate 3, DDR3) SDRAM的一種內(nèi)存控制器、以及可用于實現(xiàn)該內(nèi)存控制器的一種命令控制方法。
背景技術(shù):
在當今的計算機系統(tǒng)中,如圖1所示,CPU和1/0器件需要通過內(nèi)存控制器來訪問外部內(nèi)存系統(tǒng)中的數(shù)據(jù),其中,內(nèi)存控制器連接的外部內(nèi)存系統(tǒng)由DRAM器件實現(xiàn),目前應(yīng)用最為廣泛的是DDR2 SDRAM和DDR3SDRAM,由此,外部內(nèi)存系統(tǒng)也可稱之為外部DRAM系統(tǒng)。內(nèi)存控制器主要負責從內(nèi)存系統(tǒng)中的DRAM器件(例如DDR2 SDRAM或DDR3 SDRAM 等)讀取數(shù)據(jù),以及向內(nèi)存系統(tǒng)中的DRAM器件寫入數(shù)據(jù),在讀取和寫入數(shù)據(jù)的過程中,內(nèi)存控制器需要確保訪問DRAM器件的協(xié)議正確,同時需要滿足DRAM器件的接口電氣特性和時序特性,有時還需要具有錯誤檢測和糾正的功能。內(nèi)存控制器決定了計算機系統(tǒng)的內(nèi)存性能,從而也對計算機系統(tǒng)的整體性能產(chǎn)生較大影響,因此,絕大多數(shù)內(nèi)存控制器都是以高性能作為設(shè)計目標。由于現(xiàn)今的計算機系統(tǒng)的CPU基本上都采用多線程、多核技術(shù),各個線程和各個 CPU核會獨立的實現(xiàn)某一個特定的應(yīng)用(例如線程0在從硬盤向外部DRAM器件搬移數(shù)據(jù), 而線程1從外部DRAM系統(tǒng)讀取數(shù)據(jù)),因此會頻繁出現(xiàn)多個線程(或多個CPU核)同時通過內(nèi)存控制器訪問同一個外部DRAM器件,也就是說,對外部DRAM器件的訪問是各個線程和 CPU核交錯進行的。進而由于各線程(或CPU核)實現(xiàn)的功能完全不同,因而各線程(或 CPU核)對外部DRAM器件的訪問命令也就不會是連續(xù)地址的訪問,基于這種情況,以高性能作為設(shè)計目標的內(nèi)存控制器就需要針對隨機地址訪問進行優(yōu)化。通過內(nèi)存控制器對外部DRAM器件的隨機訪問,大致可以分為如下的兩種情況第一種情況,連續(xù)的多個訪問都發(fā)生在DRAM器件相同存儲體(Bank)的不同行 (Row)。如圖加所示,以DDR2 SDRAM為例,當連續(xù)訪問BankO中各Row時,先通過激活(ACT) 命令打開需要讀訪問的BankO中的對應(yīng)Row、然后再發(fā)送讀(RD)命令,當BankO中對應(yīng)Row 的數(shù)據(jù)DO D3讀取完成后,通過預(yù)充電(Precharge)命令關(guān)閉該Row,以便于再次發(fā)送ACT 命令打開BankO中的下一個Row、并再次發(fā)送RD命令。在圖加中,兩個RD命令之間有12 個時鐘周期的間隔,而每個RD命令所對應(yīng)的數(shù)據(jù)傳輸僅占用2個時鐘周期,從而導(dǎo)致上述讀訪問時的DRAM總線效率僅有16. 7% (2/12 = 16. 7% )0第二種情況,連續(xù)的多個訪問都發(fā)生DRAM器件不同Bank的不同Row,由于DRAM器件的各個Bank是由獨立的對應(yīng)電路進行控制的,因此連續(xù)訪問不同Bank時不會受到DRAM 器件的固有時序參數(shù)的影響。如圖2b所示,以DDR2 SDRAM為例,當連續(xù)訪問Bank0、Bankl、 Bank2、Bank3、Bank4、Bank5、Bank6 中不同 Row 時,在時鐘周期 0、2、4、6、8、10、12 依次為各 Bank產(chǎn)生ACT命令,時鐘周期1、3、5、7、9、11、13則依次為相應(yīng)Bank產(chǎn)生的讀自動預(yù)充電(Read with AutoPrecharge,RD+AP)命令,經(jīng)過讀延時周期后,時鐘周期6、7出現(xiàn)BankO讀數(shù)據(jù)DOa DOd,時鐘周期8、9出現(xiàn)Bankl讀數(shù)據(jù)Dla Did,時鐘周期10、11出現(xiàn)Bank2 讀數(shù)據(jù)Dh D2d),依此類推。各Bank的讀數(shù)據(jù)首尾連接,使時鐘周期6開始后的DRAM總線沒有空閑周期,此時DRAM總線效率為100%。如上可見,第二種情況的DRAM總線效率明顯高于第一種情況,因此,為了確保 DRAM總線的高效率,如圖3所示,當今的計算機系統(tǒng)通常會在CPU/ΙΟ設(shè)備與內(nèi)存控制器增設(shè)一命令調(diào)度器,由命令調(diào)度器中的仲裁器將調(diào)度各個CPU線程(或各個CPU核)、以及IO 設(shè)備針對不同Bank的命令分別緩存至對應(yīng)的隊列中,再由內(nèi)存控制器輪詢讀取各Bank所對應(yīng)隊列中的命令,從而避免上述的第一種情況、并滿足上述的第二種情況。然而,即便通過命令調(diào)度器能夠滿足上述第二種情況的BANK交錯訪問方式,但由于內(nèi)存控制器與外部DRAM器件分別具有各自的工作頻率,因而現(xiàn)有技術(shù)中還進一步存在由工作頻率所導(dǎo)致的其他問題。如圖4所示,以DDR2 SDRAM為例,內(nèi)存控制器的內(nèi)部工作頻率為133MHz,外部DDR2 SDRAM的總線頻率為^6MHz,故圖4中的內(nèi)存控制器可稱之為半速率內(nèi)存控制器(本文中全文出現(xiàn)的“半速率”、“單速率”、“雙速率”等均是以外部DRAM總線速率為參照)。該半速率內(nèi)存控制器主要包括運行在133MHz的控制(Ctrl)模塊、寫數(shù)據(jù)路徑(Write data path) 模塊、讀數(shù)據(jù)路徑(Read data path)模塊,該半速率內(nèi)存控制器還包括可與用戶邏輯⑴ser Logic)交互的用戶接口(User hterface)模塊,以及,連接DDR2SDRAM的外部總線、并實現(xiàn)內(nèi)部工作頻率與外部總線頻率轉(zhuǎn)換的DRAM IO接口(DRAM IO Interface)模塊,其中Ctrl模塊主要用于實現(xiàn)所有DRAM接口協(xié)議、DRAM接口時序參數(shù)的匹配、以及產(chǎn)生各類命令(Command,CMD);具體說,Ctrl模塊可依據(jù)用戶邏輯的指令,按照如圖5所示的狀態(tài)機進行狀態(tài)遷移,并在遷移至相應(yīng)的狀態(tài)時產(chǎn)生相應(yīng)的CMD,本文僅在下文對圖5所示狀態(tài)機中相關(guān)的狀態(tài)進行說明、而對于其他與本文無關(guān)的狀態(tài)則不再贅述;Write data path模塊主要用于緩存用戶邏輯的寫數(shù)據(jù)、并將寫數(shù)據(jù)以半速率寫入到DRAM IO接口模塊;Read data path模塊主要用于緩存DRAM IO接口模塊從外部DRAM 器件讀出的半速率讀數(shù)據(jù)發(fā)送給her Interface模塊;DRAM IO接口模塊中具有一半速率與單速率轉(zhuǎn)換(HDR to SDR)子模塊,其主要用于將Ctrl模塊產(chǎn)生的半速率命令轉(zhuǎn)換為單速率命令、并輸出至外部DDR2 SDRAM總線;DRAM IO接口模塊中還具有另一HDR to SDR子模塊和一單速率與雙倍數(shù)據(jù)速率轉(zhuǎn)換(SDR to DDR)子模塊,該另一 HDR to SDR子模塊用于將feite data path模塊的半速率寫數(shù)據(jù)轉(zhuǎn)換為單速率寫數(shù)據(jù)后傳遞至SDR toDDR子模塊、將來自SDR to DDR子模塊的單速率讀數(shù)據(jù)轉(zhuǎn)換為半速率讀數(shù)據(jù)后提供給Read data path模塊,SDR to DDR子模塊用于將單速率寫數(shù)據(jù)轉(zhuǎn)換為雙速率后輸出至外部DDR2 SDRAM總線、將外部DDR2 SDRAM總線的雙速率讀數(shù)據(jù)轉(zhuǎn)換為單速率讀數(shù)據(jù)后傳遞至該另一 HDR to SDR子模塊。參見圖6并結(jié)合圖4和圖5,當交錯讀訪問BankO、BankU Bank2、Bank3時,Ctrl 模塊在周期0 周期7的狀態(tài)機狀態(tài),依次針對BankO、Bankl、Bank2、Bank3進行如下狀態(tài)循環(huán)遷移空閑狀態(tài)(IDLE)—狀態(tài)激活狀態(tài)(ACTIVE) — Bank激活狀態(tài)(BANK ACTIVE)— 讀自動預(yù)充電狀態(tài)(Readwith AutoPrecharge, RDA)—預(yù)充電狀態(tài)(PRE) — IDLE。從而, Ctrl模塊即可交替產(chǎn)生針對不同Bank的ACT命令和RD+AP命令,相應(yīng)地,在DDR2SDRAM的命令總線也交替輸出針對不同Bank的ACT命令和RD+AP命令。由于半速率內(nèi)存控制器中Ctrl模塊的工作頻率為外部DDR2 SDRAM總線頻率的一半,因而Ctrl模塊交替產(chǎn)生的半速率ACT命令和半速率RD+AP命令被轉(zhuǎn)換為DDR2 SDRAM 的命令總線上交替的單速率ACT命令和單速率RD+AP命令,從而在外部DDR2 SDRAM命令總線上每兩個相鄰的單速率ACT命令和單速率RD+AP命令之間均間隔1個周期,進而使外部 DDR2SDRAM數(shù)據(jù)總線上針對每兩個Bank的讀數(shù)據(jù)之間間隔4個周期,導(dǎo)致外部DDR2 SDRAM 的總線效率僅為50%、而無法達到如圖2b中所示的100%。同理,當連續(xù)寫訪問BankO、Bankl、Bank2、Bank3中不同Row時,Ctrl模塊針對每一 Bank的寫訪問的狀態(tài)遷移可以為IDLE — ACTIVE — BANKACTIV E —寫自動預(yù)充電狀態(tài) (Write with AutoPrecharge,WRA) — PRE — IDLE,并交替產(chǎn)生半速率ACT命令和半速率寫自動預(yù)充電(Write withAutoPrecharge,WR+AP)命令,總線效率也同樣無法達到如圖2b中所示的100%。為了解決半速率內(nèi)存控制器存在的總線效率低的問題,現(xiàn)有技術(shù)中還提出了一種單速率內(nèi)存控制器。如圖7所示,以DDR2 SDRAM為例,內(nèi)存控制器的內(nèi)部工作頻率、以及外部DDR2 SDRAM的總線頻率均為^6MHz,故圖7中的內(nèi)存控制器可稱之為單速率內(nèi)存控制器。該單速率內(nèi)存控制器仍包括與半速率內(nèi)存控制器具有相同原理的Ctrl模塊(基于如圖5所示的狀態(tài)機)、Write data path模塊、Read data path模塊、以及用戶邏輯,但全速內(nèi)存控制器的DRAM IO接口模塊略有改進,具體說DRAM IO接口模塊中僅具有一 SDR to DDR子模塊,其用于將Writedata path模塊的單速率寫數(shù)據(jù)轉(zhuǎn)換后輸出至外部DDR2 SDRAM總線、將外部DDR2SDRAM總線的讀數(shù)據(jù)轉(zhuǎn)換為單速率讀數(shù)據(jù)后直接傳遞至Readdata path模塊;此外,Ctrl模塊產(chǎn)生的單速率命令可直接輸出至外部DDR2SDRAM總線。參見圖8并結(jié)合圖7,當交錯讀訪問BankO、Bankl、Bank2、Bank3時,Ctrl模塊從周期0 周期7交替產(chǎn)生針對不同Bank的ACT命令和RD+AP命令,相應(yīng)地,在DDR2SDRAM 的命令總線也交替輸出針對不同Bank的ACT命令和RD+AP命令。由于單速率內(nèi)存控制器中Ctrl模塊的工作頻率與外部DDR2 SDRAM總線頻率相同,從而在外部DDR2 SDRAM命令總線上每兩個相鄰的單速率ACT命令和單速率RD+AP命令之間不存在間隔,進而使外部DDR2 SDRAM數(shù)據(jù)總線上針對每兩個Bank的讀數(shù)據(jù)之間間隔 4個周期,確保外部DDR2SDRAM的總線效率能夠達到如圖2b中所示的100%。雖然如圖7所示的單速率內(nèi)存控制器能夠以100%的總線效率實現(xiàn)高性能的Bank 交錯訪問,但是,單速率內(nèi)存控制器中Ctrl模塊的工作頻率必須與外部DDR2 SDRAM總線工作頻率相同,當外部DDR2SDRAM總線工作在較高頻率時,Ctrl模塊也必須工作在較高頻率, 而由于Ctrl模塊的邏輯功能非常復(fù)雜,當其工作在高頻率時很難滿足邏輯寄存器間的建立時間和保持時間。例如,如果利用目前最高端的Xilinx或Altera的FPGA器件實現(xiàn)Ctrl 模塊,其IO接口可以滿足IGMHz以上的頻率、但其內(nèi)部邏輯一般只能運行在300MHz以下, 這顯然無法滿足目前流行的333MHz DDR2 SDRAM和400MHz DDR2 SDRAM的運行要求。此外, 當功能復(fù)雜的Ctrl模塊工作在很高的頻率時,會使整個內(nèi)存控制器的功耗很大,從而帶來電源和散熱問題。
6
可見,現(xiàn)有技術(shù)中無法以較低頻率確保DDR2 SDRAM的BANK交錯訪問性能。同樣地,對于DDR3 SDRAM的內(nèi)存控制器來說也存在相同的問題。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種內(nèi)存控制器、以及一種命令控制方法,使內(nèi)存控制器能夠以較低的內(nèi)部工作頻率確保BANK交錯訪問時的性能。本發(fā)明提供的一種內(nèi)存控制器,包括控制模塊,其在需要訪問外部DRAM中未激活的BANK時,針對該BANK并行產(chǎn)生第一速率的一 ACT命令和一訪問命令;DRAM IO接口模塊,其將第一速率的并行ACT命令和訪問命令,以第二速率順序串行輸出至外部DRAM的總線;其中,對應(yīng)控制模塊工作頻率的所述第一速率低于對應(yīng)外部 DRAM總線頻率的第二速率;寫數(shù)據(jù)路徑模塊,其將待寫入外部DRAM的寫數(shù)據(jù)以第一速率寫入至DRAM IO接口模塊、由DRAM IO接口模塊轉(zhuǎn)換為雙倍的第二速率后輸出至外部DRAM總線;讀數(shù)據(jù)路徑模塊,其從DRAM IO接口模塊接收第一速率的讀數(shù)據(jù),該第一速率的讀數(shù)據(jù)是由DRAM IO接口模塊讀取自外部DRAM總線的雙倍的第二速率讀數(shù)據(jù)轉(zhuǎn)換得到的。優(yōu)選地,控制模塊進一步在需要訪問外部DRAM中已激活的BANK時,針對該BANK 產(chǎn)生第一速率的一訪問命令;DRAM IO接口模塊進一步將第一速率的一訪問命令,以第二速率輸出至外部DRAM的總線。優(yōu)選地,所述訪問為讀訪問時,所述訪問命令為讀RD命令、或讀自動預(yù)充電RD+AP 命令;所述訪問為寫訪問時,所述訪問命令為寫WR命令、或?qū)懽詣宇A(yù)充電WR+AP命令。優(yōu)選地,所述外部DRAM為DDR2 SDRAM,所述第一速率為所述第二速率的一半?;蛘?,所述外部DRAM為DDR3 SDRAM,所述第一速率為所述第二速率的四分之一,以第二速率順序串行輸出的ACT命令和訪問命令之間、以及訪問命令之后,分別插入有一個空命令。本發(fā)明提供的一種命令控制方法,包括在需要訪問外部DRAM中未激活的BANK時,針對該BANK并行產(chǎn)生第一速率的一 ACT命令和一訪問命令;將第一速率的并行ACT命令和訪問命令,以第二速率順序串行輸出至外部DRAM的總線;其中,對應(yīng)控制模塊工作頻率的所述第一速率低于對應(yīng)外部DRAM總線頻率的第
二速率。優(yōu)選地,該方法進一步在需要訪問外部DRAM中已激活的BANK時,針對該BANK產(chǎn)生第一速率的一訪問命令,并進一步將第一速率的一訪問命令以第二速率輸出至外部DRAM 的總線。優(yōu)選地,所述訪問為讀訪問時,所述訪問命令為讀RD命令、或讀自動預(yù)充電RD+AP 命令;所述訪問為寫訪問時,所述訪問命令為寫WR命令、或?qū)懽詣宇A(yù)充電WR+AP命令。優(yōu)選地,所述外部DRAM為DDR2 SDRAM,所述第一速率為所述第二速率的一半。或者,所述外部DRAM為DDR3 SDRAM,所述第一速率為所述第二速率的四分之一,以第二速率順序串行輸出的ACT命令和訪問命令之間、以及訪問命令之后分別插入有一個空命令。
由上述技術(shù)方案可見,本發(fā)明在需要訪問外部DRAM中未激活的BANK時,針對該 BANK并行產(chǎn)生較低速率的一 ACT命令和一訪問命令,并將較低速率的并行ACT命令和訪問命令,以較高速率順序串行輸出至外部DRAM的總線,從而,不但能夠確保BANK交錯訪問時的較高性能,還能夠同時避免內(nèi)存控制器的內(nèi)部工作頻率過高而導(dǎo)致難以實現(xiàn)、以及電源和散熱問題。
圖1為現(xiàn)有技術(shù)中包含內(nèi)存控制器的計算機系統(tǒng)示意圖;圖加為現(xiàn)有技術(shù)中連續(xù)訪問相同Bank不同Row的讀命令在DRAM總線上的時序圖;圖2b為現(xiàn)有技術(shù)中連續(xù)訪問不同Bank不同Row的讀命令在DRAM總線上的時序圖;圖3為現(xiàn)有技術(shù)中的計算機系統(tǒng)進行命令調(diào)度的示意圖;圖4為現(xiàn)有技術(shù)中的一種半速率內(nèi)存控制器的結(jié)構(gòu)示意圖;圖5為如圖4所示半速率內(nèi)存控制器的狀態(tài)機示意圖;圖6為如圖4所示半速率內(nèi)存控制器的內(nèi)部時序以及DRAM總線上相應(yīng)時序的示意圖;圖7為現(xiàn)有技術(shù)中的一種單速率內(nèi)存控制器的結(jié)構(gòu)示意圖;圖8為如圖7所示單速率內(nèi)存控制器的內(nèi)部時序以及DRAM總線上相應(yīng)時序的示意圖;圖9為本發(fā)明中內(nèi)存控制器的狀態(tài)機示意圖;圖10為本發(fā)明實施例一中的內(nèi)存控制器的結(jié)構(gòu)示意圖;圖11為本發(fā)明實施例一中的內(nèi)存控制器的內(nèi)部時序以及DRAM總線上相應(yīng)時序的示意圖;圖12為本發(fā)明實施例二中的內(nèi)存控制器的結(jié)構(gòu)示意圖;圖13為本發(fā)明實施例二中的內(nèi)存控制器的內(nèi)部時序以及DRAM總線上相應(yīng)時序的示意圖;圖14為本發(fā)明中內(nèi)存控制器的命令控制方法的示例性流程圖。
具體實施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進一步詳細說明。本發(fā)明的各實施例中,首先使內(nèi)存控制器的內(nèi)部工作頻率低于外部DRAM總線頻率,從而避免內(nèi)存控制器的內(nèi)部工作頻率過高而導(dǎo)致難以實現(xiàn)、以及電源和散熱問題;其次,Ctrl模塊可針對某一 BANK并行產(chǎn)生低速率的ACT命令,以及,低速率的RD、RD+AP、WR、 WR+AP中的任一種訪問命令,并由DRAM IO接口模塊將Ctrl模塊產(chǎn)生的兩條低速率并行命令轉(zhuǎn)換為符合外部DRAM總線頻率的兩條串行的高速率命令,從而提高外部DRAM總線效率、 以確保BANK交錯訪問時的性能。具體說,為了使Ctrl模塊能夠針對任一 BANK并行產(chǎn)生低速率的ACT命令、以及任一種訪問命令,本發(fā)明的各實施例中改進了 Ctrl模塊的狀態(tài)機。具體參見圖9,該狀態(tài)機包括如下的狀態(tài)(為了區(qū)別于現(xiàn)有狀態(tài)機中的各狀態(tài),本發(fā)明中狀態(tài)機的各狀態(tài)之前輔以“s_”)初始化狀態(tài)(s_INIT),該狀態(tài)的作用可與現(xiàn)有如圖6所示狀態(tài)機中的INIT相同;空閑狀態(tài)(s_IDLE),該狀態(tài)的作用可與現(xiàn)有如圖6所示狀態(tài)機中的IDLE相同,該狀態(tài)下的所有Bank均已完成預(yù)充電;模式寄存器設(shè)置狀態(tài)(s_SETTING_(E)MR),該狀態(tài)的作用可與現(xiàn)有如圖6所示狀態(tài)機中的SETTING_(E)MR相同、主要用于配置各類模式寄存器;自動更新狀態(tài)(s_AUT0_REF),該狀態(tài)的作用可與現(xiàn)有如圖6所示狀態(tài)機中的REF 相同;激活寫狀態(tài)(s_ACT_WR)和激活讀狀態(tài)(s_ACT_RD),這兩種狀態(tài)不同于現(xiàn)有如圖 6所示狀態(tài)機中的任一狀態(tài),當用戶邏輯針對未激活的某BANK發(fā)送ACT+WR/WRA的指令時, Ctrl模塊可以此為轉(zhuǎn)移條件從s_IDLE或s_ACT_RD轉(zhuǎn)移至s_ACT_WR,并在s_ACT_WR時針對未激活的該BANK并行產(chǎn)生低速率的ACT命令、以及低速率的WR/WR+AP命令;當用戶邏輯針對未激活的某BANK發(fā)送ACT+RD/RDA的指令時,Ctrl模塊可以此為轉(zhuǎn)移條件從s_IDLE或 s_ACT_WR轉(zhuǎn)移至s_ACT_RD,并在s_ACT_RD時針對未激活的該BANK并行產(chǎn)生低速率的ACT 命令、以及低速率的RD/RD+AP命令;寫狀態(tài)(s_WR)和讀狀態(tài)(s_RD),這兩種狀態(tài)的作用可以分別等效于如圖6所示狀態(tài)機中的WR與WRA的結(jié)合、RD與RDA的結(jié)合,但狀態(tài)轉(zhuǎn)移過程不同于如圖6所示狀態(tài)機, 當某一 BANK已在s_ACT_WR/s_ACT_RD下被激活時,用戶邏輯可發(fā)送WR/WRA的指令、而無需再次發(fā)送ACT的指令,此時,Ctrl模塊可以WR/WRA的指令為轉(zhuǎn)移條件,從s_ACT_WR/s_ACT_ RD/s_RD轉(zhuǎn)移至s_WR,并在s_WR時針對該BANK產(chǎn)生低速率的WR/WR+AP命令、以便于繼續(xù)對已被激活的BANK寫訪問;當某一 BANK已在s_ACT_WR/s_ACT_RD下被激活時,用戶邏輯還可發(fā)送RD/RDA的指令、而無需再次發(fā)送ACT的指令,此時,Ctrl模塊可以RD/RDA的指令為轉(zhuǎn)移條件,從s_ACT_WR/s_WR/s_ACT_RD轉(zhuǎn)移至s_RD,并在s_RD時針對該BANK產(chǎn)生低速率的RD/RD+AP命令、以便于繼續(xù)對已被激活的BANK讀訪問;預(yù)充電狀態(tài)(s_PRE),該狀態(tài)的作用可與現(xiàn)有如圖6所示狀態(tài)機中的PRE相同、主要用于對已完成讀/寫訪問的Bank進行預(yù)充電,Ctr 1模塊可在完成訪問后從s_ACT_WR/s_ WR/s_ACT_RD/s_RD轉(zhuǎn)移至s_PRE,并在預(yù)充電結(jié)束后再轉(zhuǎn)移回s_IDLE。如上可見,如圖9所示的狀態(tài)機相比于如圖6所示狀態(tài)機最大的區(qū)別就在于增加了用于并行產(chǎn)生低速率命令的s_ACT_WR和s_ACT_RD ;而且,如圖9所示的狀態(tài)機中的s_WR 和s_RD、以及s_WR和s_RD的轉(zhuǎn)移條件,也不同于現(xiàn)有的WR/WRA、RD/RDA,這主要是為了配合s_ACT_WR和s_ACT_RD實現(xiàn)激活后的訪問。此外,由于圖6中示出的激活電源關(guān)閉狀態(tài)(ACT Power Down)、自更新狀態(tài)(SELF REF)、預(yù)充電電源關(guān)閉狀態(tài)(PRE Power Down)等狀態(tài)所對應(yīng)的功能相對獨立,且與本發(fā)明無太大關(guān)聯(lián),故在圖9所示的狀態(tài)機中予以省略。下面,結(jié)合不同的DRAM器件進行詳細說明。實施例一本實施例以DDR2 SDRAM為例。
如圖10所示,本實施例中針對DDR2 SDRAM的內(nèi)存控制器包括運行在133MHz這一內(nèi)部工作頻率的Ctrl模塊、feite data path模塊、Read datapath模塊,該內(nèi)存控制器還包括可與用戶邏輯交互的用戶接口模塊,以及,連接DDR2 SDRAM的外部總線、并實現(xiàn)內(nèi)部工作頻率與外部總線頻率轉(zhuǎn)換的DRAM IO接口模塊。Ctrl模塊主要用于實現(xiàn)所有DRAM接口協(xié)議、DRAM接口時序參數(shù)的匹配、以及產(chǎn)生各類CMD ;Ctrl模塊具有兩路輸出令CMD
和CMD[1],該Ctrl模塊可依據(jù)用戶邏輯的指令,按照如圖9所示的狀態(tài)機進行狀態(tài)遷移,并在遷移至s_ACT_WR/s_ACT_RD時于CMD
和CMD [1]并行產(chǎn)生兩個133MHz所對應(yīng)的半速率的ACT命令和RD/RD+AP/WR/WR+AP。具體說Ctrl模塊可針對未激活的任意BANK,從s_IDLE/s_ACT_RD直接轉(zhuǎn)移至s_ACT_WR, 且在s_ACT_WR時同時輸出ACT命令和WR/WR+AP命令,而無需再像現(xiàn)有如圖6所示的狀態(tài)機那樣先經(jīng)過BANK ACT狀態(tài)產(chǎn)生ACT命令后才能夠到達WR/WRA狀態(tài);Ctrl模塊可針對未激活的任意BANK,從s_IDLE/s_ACT_WR直接轉(zhuǎn)移至s_ACT_RD, 且在s_ACT_RD時同時輸出ACT命令和WR/WR+AP命令,而無需再像現(xiàn)有如圖6所示的狀態(tài)機那樣先經(jīng)過BANK ACT狀態(tài)產(chǎn)生ACT命令后才能夠到達RD/RDA狀態(tài);Ctrl模塊可針對已激活的任意BANK,從s_ACT_RD/s_ACT_WR/s_RD直接轉(zhuǎn)移至s_ WR,且在s_WR時僅輸出WR/WR+AP命令;Ctrl模塊可針對已激活的任意BANK,從s_ACT_RD/s_ACT_WR/s_WR直接轉(zhuǎn)移至s_ RD,且在s_RD時僅輸出RD/RD+AP命令。DRAM IO接口模塊中具有一雙路半速率與單速率轉(zhuǎn)換(Dual HDR toSDR)子模塊, 其主要用于將Ctrl模塊產(chǎn)生的兩個半速率命令CMD
和CMD[1]轉(zhuǎn)換成連續(xù)的兩個串行單速率命令,具體說,Dual HDR to SDR子模塊將Ctrl模塊產(chǎn)生的半速率的并行ACT命令和WR/WR+AP/RD/RD+AP命令,以外部DDR2 SDRAM總線頻率^6MHz所對應(yīng)的單速率,順序串行輸出至外部DDR2 SDRAM總線。Write data path模塊主要用于緩存用戶邏輯待寫入外部DRAM的寫數(shù)據(jù)、并將待寫入外部DRAM的寫數(shù)據(jù)以半速率寫入到DRAM IO接口模塊;Read data path模塊主要用于從DRAM IO接口模塊接收半速率的讀數(shù)據(jù)并緩存、 以待用戶邏輯獲取。此外,DRAM IO接口模塊中還具有一 HDR to SDR子模塊和一 SDR toDDR子模塊, 其中HDR to SDR子模塊用于將feite data path模塊的半速率寫數(shù)據(jù)轉(zhuǎn)換為單速率寫數(shù)據(jù)后傳遞至SDR to DDR子模塊、將來自SDR to DDR子模塊的單速率讀數(shù)據(jù)轉(zhuǎn)換為半速率讀數(shù)據(jù)后提供給Read data path模塊;SDR to DDR子模塊用于將單速率寫數(shù)據(jù)轉(zhuǎn)換為雙速率后輸出至外部DDR2 SDRAM 總線、將外部DDR2 SDRAM總線的雙速率讀數(shù)據(jù)轉(zhuǎn)換為單速率讀數(shù)據(jù)后傳遞至該另一HDR to SDR子模塊。上述Write data path 模塊和 Read data path 模塊、以及 HDR to SDR 子模塊和 SDR to DDR子模塊的基本原理相比于現(xiàn)有技術(shù)未做改進,故此處不再詳細說明。參見圖11并結(jié)合圖10
10
當交錯讀訪問 BankO、Bankl、Bank2、Bank3 時,BankO、Bankl、Bank2、Bank3 均屬于未激活的BANK,Ctrl模塊在其內(nèi)部工作頻率的周期0 周期3時,其內(nèi)部狀態(tài)機狀態(tài)遷移順序為s_ACT_RD — s_ACT_RD — s_ACT_RD — s_ACT_RD,在每個時鐘周期分別在CMD
上發(fā)送ACT命令、CMD [1]上發(fā)送RD命令;由于Ctrl模塊輸出的命令經(jīng)過Dual HDR to SDR子模塊后,CMD
上的ACT命令轉(zhuǎn)換成外部DDR2 SDRAM總線前一個周期的命令、CMD[1]上的RD命令轉(zhuǎn)換成外部DDR2 SDRAM總線后一個周期命令,因此,外部DDR2 SDRAM的命令總線上,在其外部總線頻率的時鐘周期0 時鐘周期7連續(xù)輸出ACT命令一RD命令一ACT命令一RD命令......經(jīng)過讀延時周期后,外部DDR2 SDRAM的數(shù)據(jù)總線上,其外部總線頻率的時鐘周期 6、7出現(xiàn)BankO讀數(shù)據(jù)DOa DOd,周期8、9出現(xiàn)Bankl讀數(shù)據(jù)Dla Did,如此類推,每兩個 Bank的讀數(shù)據(jù)之間首尾連接、無空閑時鐘周期,此時外部DDR2 SDRAM的總線效率為100%。在實際實現(xiàn)本實施例時,需要配置DDR2 SDRAM的內(nèi)存顆粒的附加延時(Posted CAS additive latency, AL)參數(shù),使其等于激活至讀寫延時(act-> read/write delay, tRCD,通常約為15納秒)參數(shù)的最小值與1倍的外部DDR2 SDRAM總線的單位時鐘周期tCK 之差,具體可以表示為函數(shù)式AL = tR⑶(MIN)-IX tCK,這樣可以保證ACT命令后緊跟WR/ WR+AP/RD/RD+AP 命令。實施例二本實施例以DDR3 SDRAM為例。DDR3 SDRAM與DDR2 SDRAM的內(nèi)部結(jié)構(gòu)基本相同、接口協(xié)議也基本相同,因此本實施例中針對DDR3SDRAM的內(nèi)存控制器與實施例一中針對DDR2 SDRAM內(nèi)存控制器的實現(xiàn)方式基本相同。如圖12所示,本實施例中針對DDR3 SDRAM的內(nèi)存控制器包括運行在167MHz這一內(nèi)部工作頻率的Ctrl模塊、feite data path模塊、Read datapath模塊,該內(nèi)存控制器還包括可與用戶邏輯交互的用戶接口模塊,以及,連接DDR3 SDRAM的外部總線、并實現(xiàn)內(nèi)部工作頻率與外部總線頻率轉(zhuǎn)換的DRAM IO接口模塊。Ctrl模塊主要用于實現(xiàn)所有DRAM接口協(xié)議、DRAM接口時序參數(shù)的匹配、以及產(chǎn)生各類CMD ;Ctrl模塊具有兩路輸出令CMD
和CMD[1],該Ctrl模塊可依據(jù)用戶邏輯的指令,按照如圖9所示的狀態(tài)機進行狀態(tài)遷移,并在遷移至s_ACT_WR/s_ACT_RD時于CMD
和CMD [1]并行產(chǎn)生兩個133MHz所對應(yīng)的四分之一速率的ACT命令和RD/RD+AP/WR/WR+AP。具體說Ctrl模塊可針對未激活的任意BANK,從s_IDLE/s_ACT_RD直接轉(zhuǎn)移至s_ACT_WR, 且在s_ACT_WR時同時輸出ACT命令和WR/WR+AP命令,而無需再像現(xiàn)有如圖6所示的狀態(tài)機那樣先經(jīng)過BANK ACT狀態(tài)產(chǎn)生ACT命令后才能夠到達WR/WRA狀態(tài);Ctrl模塊可針對未激活的任意BANK,從s_IDLE/s_ACT_WR直接轉(zhuǎn)移至s_ACT_RD, 且在s_ACT_RD時同時輸出ACT命令和WR/WR+AP命令,而無需再像現(xiàn)有如圖6所示的狀態(tài)機那樣先經(jīng)過BANK ACT狀態(tài)產(chǎn)生ACT命令后才能夠到達RD/RDA狀態(tài);Ctrl模塊可針對已激活的任意BANK,從s_ACT_RD/s_ACT_WR/s_RD直接轉(zhuǎn)移至s_ WR,且在s_WR時僅輸出WR/WR+AP命令; Ctrl模塊可針對已激活的任意BANK,從s_ACT_RD/s_ACT_WR/s_WR直接轉(zhuǎn)移至s_ RD,且在s_RD時僅輸出RD/RD+AP命令。
DRAM IO接口模塊中具有一雙路四分之一速率與單速率轉(zhuǎn)換(DualQDR to SDR)子模塊,其主要用于將Ctrl模塊產(chǎn)生的兩個四分之一速率命令CMD
和CMD[1]轉(zhuǎn)換成連續(xù)的“CMD
— NOP —CMD[1] — NOP”,即,兩個串行單速率命令之間、以及后一個單速率命令之后分別插入有一個空命令;具體說,Dual QDR to SDR子模塊將Ctrl模塊產(chǎn)生的四分之一速率的并行ACT命令和WR/WR+AP/RD/RD+AP命令,以外部DDR3 SDRAM總線頻率667MHz 所對應(yīng)的單速率,順序串行輸出至外部DDR3 SDRAM總線。Write data path模塊主要用于緩存用戶邏輯待寫入外部DRAM的寫數(shù)據(jù)、并將待寫入外部DRAM的寫數(shù)據(jù)以四分之一速率寫入到DRAM IO接口模塊;Read data path模塊主要用于從DRAM IO接口模塊接收四分之一速率的讀數(shù)據(jù)并緩存、以待用戶邏輯獲取。此外,DRAM IO接口模塊中還具有一四分之一速率與單速率轉(zhuǎn)換(QDRto SDR)子模塊和一 SDR to DDR子模塊,其中QDR to SDR子模塊用于將feite data path模塊的四分之一速率寫數(shù)據(jù)轉(zhuǎn)換為單速率寫數(shù)據(jù)后傳遞至SDR to DDR子模塊、將來自SDR to DDR子模塊的單速率讀數(shù)據(jù)轉(zhuǎn)換為四分之一速率讀數(shù)據(jù)后提供給Read data path模塊;SDR to DDR子模塊用于將單速率寫數(shù)據(jù)轉(zhuǎn)換為雙速率后輸出至外部DDR3 SDRAM 總線、將外部DDR3 SDRAM總線的雙速率讀數(shù)據(jù)轉(zhuǎn)換為單速率讀數(shù)據(jù)后傳遞至該另一HDR to SDR子模塊。上述Write data path 模塊和 Read data path 模塊、以及 HDR to SDR 子模塊和 SDR to DDR子模塊的基本原理相比于現(xiàn)有技術(shù)未做改進,故此處不再詳細說明。參見圖13并結(jié)合圖12:當交錯讀訪問 BankO、Bankl、Bank2、Bank3 時,BankO、Bankl、Bank2、Bank3 均屬于未激活的BANK,Ctrl模塊在其內(nèi)部工作頻率的周期0 周期3時,其內(nèi)部狀態(tài)機狀態(tài)遷移順序為s_ACT_RD — s_ACT_RD — s_ACT_RD — s_ACT_RD,在每個時鐘周期分別在CMD
上發(fā)送ACT命令、CMD [1]上發(fā)送RD命令;由于Ctrl模塊輸出的命令經(jīng)過Dual QDR to SDR子模塊后,CMD
上的ACT命令轉(zhuǎn)換成外部DDR3 SDRAM總線前一個周期的命令、CMD[1]上的RD命令轉(zhuǎn)換成外部DDR3 SDRAM總線后一個周期命令、且前一個周期的命令與后一個周期命令之間還間隔有一個空命令Ν0Ρ,因此,外部DDR3SDRAM的命令總線上,在其外部總線頻率的時鐘周期0 時鐘周期 15,以一個時鐘周期為間隔地連續(xù)輸出ACT命令一RD命令一ACT命令一RD命令......經(jīng)過讀延時周期后,外部DDR3SDRAM的數(shù)據(jù)總線上,其外部總線頻率的時鐘周期 20 23出現(xiàn)BankO讀數(shù)據(jù)DOa D0h,從周期M開始出現(xiàn)Bankl讀數(shù)據(jù)Dla Dlh,如此類推,每兩個Bank的讀數(shù)據(jù)之間首尾連接、無空閑時鐘周期,此時外部DDR3 SDRAM的總線效率為100%。在實際實現(xiàn)本實施例時,需要配置DDR3 SDRAM的內(nèi)存顆粒的AL參數(shù),使其等于 tRCD參數(shù)的最小值與2倍的外部DDR3 SDRAM總線的單位時鐘周期tCK之差,具體可以表示為函數(shù)式AL = tRCD (MIN)-2 X tCK,這樣可以保證ACT命令后緊跟WR/WR+AP/RD/RD+AP命令。本實施例中針對DDR3 SDRAM的內(nèi)存控制器,Ctrl模塊的工作頻率為外部DDR3SDRAM總線頻率的四分之一,因而當DDR3 SDRAM外部總線頻率運行在最高的800MHz時, Ctrl模塊的工作頻率可以只為200MHz,這使內(nèi)存控制器非常易于實現(xiàn)。基于上述兩個實施例中的內(nèi)存控制器的基本原理,本發(fā)明還提供了一種內(nèi)存控制器的命令控制方法,如圖14所示,該命令控制方法可以針對外部DRAM的任意BANK執(zhí)行如下的步驟步驟1401,需要訪問外部DRAM中的BANK尚未激活,針對該BANK并行產(chǎn)生低速率的ACT命令和訪問命令,該低速命令對應(yīng)內(nèi)存控制器內(nèi)部的工作頻率;當讀訪問時,本步驟中的訪問命令為RD命令、或RD+AP命令;當寫訪問時,本步驟中的訪問命令為寫WR命令、或WR+AP命令。步驟1402,將低速率的并行ACT命令和訪問命令,以高速率順序串行輸出至外部 DRAM的總線,該高速率對應(yīng)外部DRAM器件的總線頻率。如果外部DRAM為DDR2 SDRAM,則低速率為高速率的一半;如果外部DRAM為DDR3 SDRAM,則低速率為高速率的四分之一,此時,本步驟中就需要在高速率順序串行輸出的ACT命令和訪問命令之間、以及訪問命令之后分別插入一個空命令。步驟1403,需要訪問外部DRAM中的BANK已被激活,針對該BANK產(chǎn)生低速率的一訪問命令。步驟1404,將低率的一訪問命令以高速率輸出至外部DRAM的總線。至此,對一個BANK的處理過程結(jié)束。在完成對一個BANK的上述處理過程之后,即可參照內(nèi)存控制器的基本原理,對該 BANK執(zhí)行讀/寫數(shù)據(jù)的傳輸。以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種內(nèi)存控制器,其特征在于,包括控制模塊,其在需要訪問外部DRAM中未激活的BANK時,針對該BANK并行產(chǎn)生第一速率的一 ACT命令和一訪問命令;DRAM IO接口模塊,其將第一速率的并行ACT命令和訪問命令,以第二速率順序串行輸出至外部DRAM的總線;其中,對應(yīng)控制模塊工作頻率的所述第一速率低于對應(yīng)外部DRAM總線頻率的第二速率;寫數(shù)據(jù)路徑模塊,其將待寫入外部DRAM的寫數(shù)據(jù)以第一速率寫入至DRAM IO接口模塊、由DRAM IO接口模塊轉(zhuǎn)換為雙倍的第二速率后輸出至外部DRAM總線;讀數(shù)據(jù)路徑模塊,其從DRAM IO接口模塊接收第一速率的讀數(shù)據(jù),該第一速率的讀數(shù)據(jù)是由DRAM IO接口模塊讀取自外部DRAM總線的雙倍的第二速率讀數(shù)據(jù)轉(zhuǎn)換得到的。
2.如權(quán)利要求1所述的內(nèi)存控制器,其特征在于,控制模塊進一步在需要訪問外部 DRAM中已激活的BANK時,針對該BANK產(chǎn)生第一速率的一訪問命令;DRAM IO接口模塊進一步將第一速率的一訪問命令,以第二速率輸出至外部DRAM的總線。
3.如權(quán)利要求1或2所述的內(nèi)存控制器,其特征在于,所述訪問為讀訪問時,所述訪問命令為讀RD命令、或讀自動預(yù)充電RD+AP命令; 所述訪問為寫訪問時,所述訪問命令為寫WR命令、或?qū)懽詣宇A(yù)充電WR+AP命令。
4.如權(quán)利要求1或2所述的內(nèi)存控制器,其特征在于,所述外部DRAM為DDR2SDRAM, 所述第一速率為所述第二速率的一半。
5.如權(quán)利要求1或2所述的內(nèi)存控制器,其特征在于,所述外部DRAM為DDR3SDRAM, 所述第一速率為所述第二速率的四分之一;且,以第二速率順序串行輸出的ACT命令和訪問命令之間、以及訪問命令之后,分別插入有一個空命令。
6.一種內(nèi)存控制器的命令控制方法,其特征在于,包括在需要訪問外部DRAM中未激活的BANK時,針對該BANK并行產(chǎn)生第一速率的一 ACT命令和一訪問命令;將第一速率的并行ACT命令和訪問命令,以第二速率順序串行輸出至外部DRAM的總線.一入 ,其中,對應(yīng)控制模塊工作頻率的所述第一速率低于對應(yīng)外部DRAM總線頻率的第二速率。
7.如權(quán)利要求6所述的命令控制方法,其特征在于,該方法進一步在需要訪問外部 DRAM中已激活的BANK時,針對該BANK產(chǎn)生第一速率的一訪問命令,并進一步將第一速率的一訪問命令以第二速率輸出至外部DRAM的總線。
8.如權(quán)利要求6或7所述的內(nèi)存控制器,其特征在于,所述訪問為讀訪問時,所述訪問命令為讀RD命令、或讀自動預(yù)充電RD+AP命令; 所述訪問為寫訪問時,所述訪問命令為寫WR命令、或?qū)懽詣宇A(yù)充電WR+AP命令。
9.如權(quán)利要求6所述的命令控制方法,其特征在于,所述外部DRAM為DDR2SDRAM,所述第一速率為所述第二速率的一半。
10.如權(quán)利要求6所述的命令控制方法,其特征在于,所述外部DRAM為DDR3SDRAM,所述第一速率為所述第二速率的四分之一;且,以第二速率順序串行輸出的ACT命令和訪問命令之間、以及訪問命令之后,分別插入有一個空命令。
全文摘要
本發(fā)明公開了一種內(nèi)存控制器及命令控制方法。本發(fā)明在需要訪問外部DRAM中未激活的BANK時,針對該BANK并行產(chǎn)生較低速率的一ACT命令和一訪問命令,并將較低速率的并行ACT命令和訪問命令,以較高速率順序串行輸出至外部DRAM的總線,從而,不但能夠確保BANK交錯訪問時的較高性能,還能夠同時避免內(nèi)存控制器的內(nèi)部工作頻率過高而導(dǎo)致難以實現(xiàn)、以及電源和散熱問題。
文檔編號G06F13/16GK102411982SQ20101029155
公開日2012年4月11日 申請日期2010年9月25日 優(yōu)先權(quán)日2010年9月25日
發(fā)明者任凱 申請人:杭州華三通信技術(shù)有限公司