亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

Ddr2sdram控制器的制作方法

文檔序號:6399373閱讀:415來源:國知局
專利名稱:Ddr2 sdram控制器的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種DDR2 SDRAM控制器。
背景技術(shù)
目前,DDR2 SDRAM用途廣泛,很多應(yīng)用系統(tǒng)都會用到DDR2 SDRAM作為存儲器,相比DDR SDRAM,DDR2 SDRAM具有功耗小、可利用帶寬高的特點,所以尤其適合在視頻編解碼、圖像處理等需要大數(shù)據(jù)吞吐率的應(yīng)用場合。首先,DDR2 SDRAM所能提供的數(shù)據(jù)帶寬由下面的式I決定:數(shù)據(jù)帶寬=數(shù)據(jù)線位寬*2*時鐘頻率*利用率(式I)由于DDR2 SDRAM天然的屬性,在進(jìn)行傳輸數(shù)據(jù)過程中有許多的附加操作,比如根據(jù)地址激活相應(yīng)的BANK,還有定時的刷新(REF)操作等等,所以DDR2 SDRAM并不是每個時鐘周期都能傳輸數(shù)據(jù),如何最大化地利用DDR2 SDRAM所提供的理論帶寬成為使用DDR2SDRAM的一個問題。利用率可以用下面的式2來表示:利用率=實際傳輸數(shù)據(jù)的時鐘周期數(shù)/總的時鐘周期數(shù)(式2)對于一個應(yīng)用系統(tǒng)來說,數(shù)據(jù)線位寬和時鐘頻率相對固定,而利用率的大小是與系統(tǒng)內(nèi)的DDR2 SDRAM控制器相關(guān)。所以,DDR2 SDRAM控制器性能的高低直接影響了整個DDR2 SDRAM實際所能提供數(shù)據(jù)帶寬的大小。現(xiàn)有的一些設(shè)計主要存在以下方面的不足:(I)使用全同步設(shè)計方案。如果整個系統(tǒng)需要的數(shù)據(jù)帶寬需求較大,那么DDR2SDRAM控制器就要工作在較高的時鐘頻率上,這樣對于需要訪問外部DDR2SDRAM的數(shù)據(jù)總線(Data Bus)就存在時鐘頻率的要求,至少該數(shù)據(jù)總線輸出的數(shù)據(jù)總線時鐘必須與DDR2SDRAM控制器一致,雖然全同步設(shè)計較為簡單,但是犧牲了使用的便利性。舉例,如果外部連接了 DDR2-800的SDRAM,那么該DDR2SDRAM控制器最高需要工作在400MHz的時鐘頻率上,才可能獲得最大的數(shù)據(jù)帶寬,而系統(tǒng)內(nèi)有些數(shù)據(jù)總線并不需要這么高的工作頻率,但為了訪問外部DDR2SDRAM,這些數(shù)據(jù)總線就可能做一些修改,以滿足時鐘頻率的要求。(2)較低的帶寬利用率。由于沒有實現(xiàn)讀/寫請求命令的重排序功能,所以在某些情況下,降低了帶寬利用率。如圖1所示,現(xiàn)有的DDR2SDRAM控制器會把讀/寫請求命令直接發(fā)送,所以在這樣一個命令隊列里,DDR2SDRAM控制器需要3次關(guān)閉當(dāng)前行(ROW)再打開下一行的操作,浪費(fèi)了大量時間;而如果進(jìn)行重排序之后,如圖2,DDR2SDRAM接口控制器只需要一次關(guān)閉當(dāng)前行(ROW)再打開下一行的操作,大大提高了總線帶寬利用率。圖1和圖2中twR表示寫恢復(fù)時間,tRP表示Precharge時間(即關(guān)閉當(dāng)前行),tRCD表示激活下一行到可以進(jìn)行讀寫的時間。

發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種DDR2SDRAM控制器,能夠提高DDR2SDRAM接口的利用率。
為解決上述問題,本發(fā)明提供一種DDR2SDRAM控制器,包括:包括系統(tǒng)配置總線接口、一個或多個系統(tǒng)數(shù)據(jù)總線接口、控制寄存器、命令仲裁器、命令隊列及重排序模塊、讀標(biāo)志先進(jìn)先出模塊和DDR2SDRAM接口,其中,所述系統(tǒng)配置總線接口使用異步設(shè)計,用于接收系統(tǒng)配置信息并存入控制寄存器內(nèi),并隔離系統(tǒng)配置總線時鐘和DDR2SDRAM控制器時鐘;所述控制寄存器,用于根據(jù)所述系統(tǒng)配置信息輸出工作參數(shù);所述一個或多個系統(tǒng)數(shù)據(jù)總線接口使用異步設(shè)計,用于接收來自一個或多個系統(tǒng)數(shù)據(jù)總線的讀/寫請求命令并發(fā)送給所述命令仲裁器,隔離系統(tǒng)數(shù)據(jù)總線時鐘和DDR2SDRAM控制器時鐘,及從所述命令仲裁器獲取讀數(shù)據(jù)并輸出至一個或多個系統(tǒng)數(shù)據(jù)總線.
所述命令仲裁器,用于接收來自一個或多個系統(tǒng)數(shù)據(jù)總線接口輸出的讀/寫請求命令,通過預(yù)設(shè)的仲裁算法,使得同一時刻只響應(yīng)其中一路請求命令,把該命令中的請求地址映射成Bank/Row/Column地址后并輸出至所述命令隊列及重排序模塊,而且根據(jù)所述讀標(biāo)志先進(jìn)先出模塊中的讀標(biāo)志把DDR2SDRAM接口返回的讀數(shù)據(jù)分發(fā)給對應(yīng)的系統(tǒng)數(shù)據(jù)總線接口 ;所述讀標(biāo)志先進(jìn)先出模塊,用于存儲從所述命令隊列及重排序模塊輸出的讀標(biāo)志,并按先進(jìn)先出的次序?qū)⑺鲎x標(biāo)志輸出給所述命令仲裁器;所述命令隊列及重排序模塊,用來所述存儲命令仲裁器輸出的經(jīng)過所述請求地址映射的讀/寫請求命令,并且根據(jù)所述Bank/Row/Column地址的相關(guān)性來對讀/寫請求命令進(jìn)行重排序,重排序后輸出的讀/寫請求命令中,如果是讀請求命令,則把相應(yīng)系統(tǒng)數(shù)據(jù)總線接口的編號以及數(shù)據(jù)請求長度作為所述讀標(biāo)志存入所述讀標(biāo)志先進(jìn)先出模塊;DDR2SDRAM接口,用于每次接收一個重排序后的讀/寫請求命令,并把所述重排序后的讀/寫請求命令解析成標(biāo)準(zhǔn)接口信號輸出至外部的DDR2SDRAM,同時接收DDR2SDRAM返回的讀數(shù)據(jù)并發(fā)送給所述命令仲裁器。進(jìn)一步的,在上述控制器中,所述DDR2SDRAM接口,還用于對DDR2SDRAM的初始化以及刷新操作。進(jìn)一步的,在上述控制器中,所述命令仲裁器、命令隊列及重排序模塊和DDR2SDRAM接口共用一個工作時鐘。進(jìn)一步的,在上述控制器中,所述控制寄存器根據(jù)所述系統(tǒng)配置信息輸出的工作參數(shù)包括:向所述DDR2SDRAM接口輸出讀/寫操作的突發(fā)長度和延時參數(shù)、向所述命令仲裁器輸出優(yōu)先級設(shè)置參數(shù)和向所述命令隊列及重排序模塊輸出排序使能信號。進(jìn)一步的,在上述控制器中,每個系統(tǒng)數(shù)據(jù)總線接口包括總線橋、第一寫數(shù)據(jù)先進(jìn)先出模塊、讀數(shù)據(jù)先進(jìn)先出模塊、第一命令先進(jìn)先出模塊和命令輸出模塊,其中,所述總線橋,用于接收來自系統(tǒng)數(shù)據(jù)總線的讀/寫請求命令,并將讀/寫請求命令轉(zhuǎn)化成統(tǒng)一的命令格式存入所述第一命令先進(jìn)先出模塊,及從所述讀數(shù)據(jù)先進(jìn)先出模塊獲取所述讀數(shù)據(jù)并輸出至系統(tǒng)數(shù)據(jù)總線;第一寫數(shù)據(jù)先進(jìn)先出模塊,用于從所述總線橋獲取寫請求命令對應(yīng)的寫數(shù)據(jù),并按先進(jìn)先出的次序?qū)⑺鰧憯?shù)據(jù)輸出給所述命令仲裁器;
讀數(shù)據(jù)先進(jìn)先出模塊,用于存儲從所述DDR2SDRAM接口返回的讀數(shù)據(jù),并按先進(jìn)先出的次序?qū)⑺鲎x數(shù)據(jù)輸出給所述總線橋;所述第一命令先進(jìn)先出模塊,用于存儲轉(zhuǎn)化成統(tǒng)一的命令格式的讀/寫請求命令,并隔離系統(tǒng)總線時鐘與DDR2SDRAM控制器時鐘;命令輸出模塊,用于向所述命令仲裁器發(fā)起訪問申請,在得到所述命令仲裁器的響應(yīng)后,把所述命令先進(jìn)先出模塊中的讀/寫請求命令發(fā)送給所述命令仲裁器。進(jìn)一步的,在上述控制器中,所述命令隊列及重排序模塊包括N個寄存器組、重排序單元和命令輸出單元,N為自然數(shù),其中,每個寄存器組用于存儲一個格式命令,所述格式命令包括經(jīng)過所述請求地址映射的讀/寫請求命令以及與該讀/寫請求命令對應(yīng)的系統(tǒng)數(shù)據(jù)總線接口的編號,每個寄存器組具有一個序號,如果某個寄存器組存儲了有效的讀/寫請求命令,該寄存器組對應(yīng)的序號的范圍為0至N-1,如果某個寄存器組沒有存儲有效的讀/寫請求命令,該寄存器組對應(yīng)的序號為-1,所有格式命令按照在寄存器組的序號排序形成命令隊列,所述序號與存儲在具有該序號的寄存器組上的經(jīng)過所述請求地址映射的讀/寫請求命令對應(yīng);所述重排序單元,用于根據(jù)控制寄存器輸出的排序使能信號的電平高低,將從所述命令仲裁器接收到的新進(jìn)的讀/寫請求命令插入所述命令隊列中的相應(yīng)位置,并更新相應(yīng)寄存器組的序號;所述命令輸出單元,用于將序號為零的寄存器組中的讀/寫請求命令輸出給所述DDR2SDRAM接口,并將該寄存器組的序號設(shè)置為-1,同時更新其它寄存器組的序號。進(jìn)一步的,在上述控制器中,當(dāng)所述排序使能信號為高電平時,所述重排序單元根據(jù)預(yù)設(shè)的重排序方法將新進(jìn)的讀/寫請求命令插入所述命令隊列中的相應(yīng)位置,同時更新從插入位置到命令隊列的末尾的對應(yīng)的所有寄存器組的序號;當(dāng)所述排序使能信號為低電平時,所述重排序單元將新進(jìn)的讀/寫請求命令按照先后順序存入所述命令隊列的末尾,同時更新存入位置對應(yīng)的寄存器組的序號。進(jìn)一步的,在上述控制器中,所述重排序方法包括:訪問相同的Bank/Row地址,不在同一個Bank中頻繁切換Row地址;配合DDR2SDRAM的Additive Latency特性,使用交錯的Bank地址;使用連續(xù)的讀請求命令或者寫請求命令,不要在讀/寫請求命令之間頻繁切換;使用auto precharge命令,而不是單獨發(fā)送precharge命令;需要注意的是:新進(jìn)的讀/寫請求命令,只能插入在相同系統(tǒng)數(shù)據(jù)總線接口的編號和Bank/Row/Column的讀/寫請求命令之后。進(jìn)一步的,在上述控制器中,所述重排序方法包括:步驟一,判斷所述命令隊列是否存在與新進(jìn)的讀/寫請求命令相同系統(tǒng)數(shù)據(jù)總線接口的編號和Bank/Row/Column地址的讀/寫請求命令,若存在,則執(zhí)行步驟二,若不存在,則將整個命令隊列作為第一查找范圍,并轉(zhuǎn)到步驟三;步驟二,從所述相同系統(tǒng)數(shù)據(jù)總線接口的編號以及Bank/Row/Column地址的讀/寫請求命令中獲取對應(yīng)的最大的序號,將從具有所述最大的序號的讀/寫請求命令至命令隊列的末尾的范圍作為所述第一查找范圍,并轉(zhuǎn)到步驟三;步驟三,判斷所述第一查找范圍中是否存在與新進(jìn)的讀/寫請求命令同為讀或?qū)?,且具有相同Bank/Row地址的讀/寫請求命令,若具有,則執(zhí)行步驟四,若不具有,則執(zhí)行步驟五;步驟四,將所述第一查找范圍中與新進(jìn)的讀/寫請求命令同為讀或?qū)懀揖哂邢嗤珺ank/Row地址的所有讀/寫請求命令作為第二查找范圍,并將新進(jìn)的讀/寫請求命令插入所述第二查找范圍中具有最大的序號的讀/寫請求命令之后并結(jié)束;步驟五,判斷所述命令隊列中是否存在與新進(jìn)的讀/寫請求命令同為讀或?qū)?,且具有不同Bank地址的讀/寫請求命令,若具有,則執(zhí)行步驟六,若不具有,則執(zhí)行步驟十六;步驟六,從所述與新進(jìn)的讀/寫請求命令同為讀或?qū)懀揖哂胁煌珺ank地址的讀/寫請求命令中獲取對應(yīng)的最小的序號,將從具有所述最小序號的讀/寫請求命令至命令隊列的末尾的范圍作為所述第三查找范圍,并將所述第三查找范圍中的讀/寫請求命令的對應(yīng)的最小的序號作為次佳位置值,然后轉(zhuǎn)到步驟七;步驟七,判斷具有次佳位置值的讀/寫請求命令與緊排在其后的下一個讀/寫請求命令是否同為讀或?qū)懙淖x/寫請求命令,若是,則轉(zhuǎn)到步驟八,若否,則轉(zhuǎn)到步驟十二 ;步驟八,判斷具有次佳位置值的讀/寫請求命令與新進(jìn)的讀/寫請求命令的Bank地址是否相同,若是,則將所述次佳位置值加I并轉(zhuǎn)到步驟七,若否,則轉(zhuǎn)到步驟九;步驟九,判斷緊排在具有次佳位置值的讀/寫請求命令其后的下一個讀/寫請求命令與新進(jìn)的讀/寫請求命令的Bank地址是否相同,若是,則將所述次佳位置值加I并轉(zhuǎn)到步驟七,若否,則轉(zhuǎn)到步驟十;步驟十,判斷具有次佳位置值的讀/寫請求命令與緊排在其后的下一個讀/寫請求命令的Bank地址相同,且Row地址不同,若是,則轉(zhuǎn)到步驟十三,若否,則轉(zhuǎn)到步驟十一;步驟十一,將所述次佳位置值存入次佳位置記錄器中,將所述次佳位置值加I并轉(zhuǎn)到步驟七;步驟十二,判斷所述次佳位置記錄器是否為空,若為非空,則從所述次佳位置記錄器中獲取具有最大命令序號的次佳位置值并轉(zhuǎn)到步驟十三,若為空,則轉(zhuǎn)到步驟十四;步驟十三,在具有次佳位置值的讀/寫請求命令之后插入所述新進(jìn)的讀/寫請求命令,同時更新從插入位置到命令隊列的末尾的所有讀/寫請求命令的序號后轉(zhuǎn)到步驟十五;步驟十四,將所述新進(jìn)的讀/寫請求命令插入到所述第三查找范圍中與新進(jìn)命令具有相同讀/寫標(biāo)志且具有最大序號的請求命令之后,同時更新從插入位置到命令隊列的末尾的所有讀/寫請求命令的序號后,轉(zhuǎn)到步驟十五;步驟十五,清空所述次佳位置記錄器后結(jié)束;步驟十六,判斷所述命令隊列中是否存在與所述新進(jìn)的讀/寫請求命令具同為讀或?qū)懙淖x/寫請求命令,若無,則轉(zhuǎn)到步驟十七,若有,則轉(zhuǎn)到步驟十八;步驟十七,將所述新進(jìn)的讀/寫請求命令插入所述命令隊列的末尾,然后轉(zhuǎn)到步驟十五;步驟十八,將所述命令隊列中與所述新進(jìn)的讀/寫請求命令具同為讀或?qū)懙淖x/寫請求命令作為第四查找范圍,并將所述新進(jìn)的讀/寫請求命令插入在所述第四查找范圍中具有最大序號的讀/寫請求命令之后,同時更新從插入位置到命令隊列的末尾的所有讀/寫請求命令的序號后,轉(zhuǎn)到步驟十五。進(jìn)一步的,在上述控制器中,每個寄存器組還設(shè)置有一個饑餓指數(shù),所述饑餓指數(shù)的范圍為0至預(yù)設(shè)的最大限定值,當(dāng)所述重排序單元接收到所述DDR2SDRAM接口發(fā)出的更新使能信號時,判斷是否有達(dá)到所述最大限定值的饑餓指數(shù),如果有,則所述命令輸出單元把所述饑餓指數(shù)達(dá)到所述最大限定值的對應(yīng)的寄存器組中的讀/寫請求命令輸出給所述DDR2SDRAM接口,同時將該寄存器組的饑餓指數(shù)清零,并將該寄存器組的序號設(shè)置為-1,同時將其它寄存器組的饑餓指數(shù)加1,并更新其它寄存器組的序號;如果沒有,則所述命令輸出單元將序號為零的寄存器組中的讀/寫請求命令輸出給所述DDR2SDRAM接口,同時將該寄存器組的饑餓指數(shù)清零,并將該寄存器組的序號設(shè)置為-1,同時將其它寄存器組的饑餓指數(shù)加1,并更新其它寄存器組的序號。進(jìn)一步的,在上述控制器中,所述DDR2SDRAM接口包括主狀態(tài)機(jī)、第二命令先進(jìn)先出模塊、第二寫數(shù)據(jù)先進(jìn)先出模塊、預(yù)判斷模塊、預(yù)激活模塊、時序控制模塊、初始化狀態(tài)機(jī)、解析模塊、數(shù)據(jù)接口和DDR2物理層,其中,所述主狀態(tài)機(jī),用于協(xié)調(diào)第二命令先進(jìn)先出模塊、第二寫數(shù)據(jù)先進(jìn)先出模塊、預(yù)判斷模塊、預(yù)激活模塊、時序控制模塊、初始化狀態(tài)機(jī)、解析模塊、數(shù)據(jù)接口和DDR2物理層的工作并發(fā)送讀/寫請求命令;所述第二命令先進(jìn)先出模塊,用于從所述命令隊列及重排序模塊獲取并存儲讀/寫請求命令,并根據(jù)先進(jìn)先出的順序?qū)⒆x/寫請求命令發(fā)送給所述主狀態(tài)機(jī);所述第二寫數(shù)據(jù)先進(jìn)先出模塊,用于暫存寫數(shù)據(jù);所述預(yù)判斷模塊,用于根據(jù)比較當(dāng)前讀/寫請求命令與后續(xù)讀/寫請求命令的Bank/Row地址的結(jié)果來判斷是否進(jìn)行Auto Precharge操作,并將判斷結(jié)果發(fā)送給所述主狀態(tài)機(jī);所述預(yù)激活模塊,用于跟蹤DDR2SDRAM中各個讀/寫請求命令的Bank的激活狀態(tài),并根據(jù)所述第二命令先進(jìn)先出模塊中的讀/寫請求命令來判斷是否需要預(yù)先激活某個讀/寫請求命令的Bank,并將判斷結(jié)果發(fā)送給所述主狀態(tài)機(jī);時序控制模塊,用于向所述主狀態(tài)機(jī)發(fā)送所述讀/寫請求命令的延時參數(shù)以及刷新時間; 所述初始化狀態(tài)機(jī),用于進(jìn)行DDR2SDRAM的初始化操作;所述解析模塊,用于把主狀態(tài)機(jī)送出的讀/寫請求命令解析成標(biāo)準(zhǔn)的DDR2SDRAM
接口信號;所述數(shù)據(jù)接口,用于通過所述主狀態(tài)機(jī)從所述第二寫數(shù)據(jù)先進(jìn)先出模塊讀入寫數(shù)據(jù),并控制寫數(shù)據(jù)與寫命令之間的延時,同時接收DDR2SDRAM返回的讀數(shù)據(jù)并發(fā)送給所述主狀態(tài)機(jī);所述DDR2物理層,用于將DDR2SDRAM分別與所述解析模塊和所述數(shù)據(jù)接口進(jìn)行連接,并將DDR2SDRAM控制器內(nèi)的邏輯信號轉(zhuǎn)化成標(biāo)準(zhǔn)的差分信號。與現(xiàn)有技術(shù)相比,本發(fā)明通過DDR2SDRAM控制器遵循DDR2SDRAM接口協(xié)議,實現(xiàn)DDR2SDRAM控制器與外部DDR2SDRAM之間的數(shù)據(jù)傳輸,該DDR2SDRAM控制器包括:DDR2SDRAM接口,實現(xiàn)DDR2SDRAM接口協(xié)議定義的各種信號;系統(tǒng)數(shù)據(jù)總線接口,實現(xiàn)系統(tǒng)數(shù)據(jù)總線側(cè)的接口功能,該系統(tǒng)數(shù)據(jù)總線接口可以被復(fù)制,以滿足多個數(shù)據(jù)總線的連接;針對多個數(shù)據(jù)總線請求的命令仲裁器,使得同一時間內(nèi)只能有一路數(shù)據(jù)總線可以訪問外部DDR2SDRAM ;命令隊列及重排序模塊接收所述命令仲裁器輸出的讀/寫請求命令,并根據(jù)地址的相關(guān)性對讀/寫請求命令進(jìn)行重排序,從而提高所述DDR2SDRAM接口的利用率。另外,通過整個DDR2SDRAM控制器使用異步設(shè)計,其中所述命令仲裁器、命令隊列及重排序模塊以及DDR2SDRAM接口邏輯共用一個工作時鐘,而每個系統(tǒng)數(shù)據(jù)總線接口都有獨立的工作時鐘,這樣對于訪問外部DDR2SDRAM就不存在時鐘頻率的限制,方便整個DDR2SDRAM控制器集成到SoC (System on Chip系統(tǒng)級芯片)中,從而提高整個DDR2SDRAM控制器的通用性。


圖1是本未經(jīng)排序的命令序列執(zhí)行示意圖;圖2是重排序后的命令序列的示意圖;圖3是本發(fā)明一實施例的DDR2SDRAM控制器的頂層框圖;圖4是本發(fā)明一實施例的系統(tǒng)數(shù)據(jù)總線接口框圖;圖5是本發(fā)明一實施例的讀/寫請求命令的格式示意圖;圖6是本發(fā)明一實施例的命令隊列與重排序模塊框圖;圖7是本發(fā)明一實施例的交錯的Bank地址并配合Additive Latency功能執(zhí)行示意圖;圖8是本發(fā)明一實施例的寫操作之后的讀操作執(zhí)行示意圖;圖9是本發(fā)明一實施例的重排序方法流程圖;圖10是本發(fā)明一實施例的DDR2SDRAM接口框圖。
具體實施例方式為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實施方式
對本發(fā)明作進(jìn)一步詳細(xì)的說明。如圖3所示,本發(fā)明提供一種DDR2SDRAM控制器,包括系統(tǒng)配置總線接口 1、一個或多個系統(tǒng)數(shù)據(jù)總線接口 2、控制寄存器3、命令仲裁器4、命令隊列及重排序模塊5、讀標(biāo)志先進(jìn)先出模塊6和DDR2SDRAM接口 7。所述系統(tǒng)配置總線接口 I使用異步設(shè)計,用于接收配置總線(Config Bus)系統(tǒng)配置信息并存入控制寄存器3內(nèi),并隔離系統(tǒng)配置總線時鐘和DDR2SDRAM控制器時鐘。所述控制寄存器3,用于根據(jù)所述系統(tǒng)配置信息輸出工作參數(shù)。具體的,所述控制寄存器根據(jù)所述系統(tǒng)配置信息輸出的工作參數(shù)包括:向所述DDR2SDRAM接口 7輸出讀/寫操作的突發(fā)長度(Burst Length)和DDR2SDRAM各種延時參數(shù)、向所述命令仲裁器4輸出優(yōu)先級設(shè)置參數(shù)和向所述命令隊列及重排序模塊5輸出排序使能信號。所述一個或多個系統(tǒng)數(shù)據(jù)總線接口 2使用異步設(shè)計,用于接收來自一個或多個系統(tǒng)數(shù)據(jù)總線(Data Bus)的讀/寫請求命令并發(fā)送給所述命令仲裁器4,隔離系統(tǒng)數(shù)據(jù)總線時鐘和DDR2SDRAM控制器時鐘,及從所述命令仲裁器4獲取讀數(shù)據(jù)并輸出至一個或多個系統(tǒng)數(shù)據(jù)總線。具體的,如果需要連接多個的系統(tǒng)數(shù)據(jù)總線,那么該系統(tǒng)數(shù)據(jù)總線接口 2可以被復(fù)制。優(yōu)選的,如圖4所示,每個系統(tǒng)數(shù)據(jù)總線接口 2包括總線橋21、第一寫數(shù)據(jù)先進(jìn)先出模塊22、讀數(shù)據(jù)先進(jìn)先出模塊23、第一命令先進(jìn)先出模塊24和命令輸出模塊25。所述總線橋21(Bus Bridge),用于接收來自系統(tǒng)數(shù)據(jù)總線(Data Bus)的讀/寫請求命令,并將讀/寫請求命令轉(zhuǎn)化成統(tǒng)一的命令格式存入所述第一命令先進(jìn)先出模塊24(異步FIFO),及從所述讀數(shù)據(jù)先進(jìn)先出模塊23獲取所述讀數(shù)據(jù)并輸出至系統(tǒng)數(shù)據(jù)總線。具體的,系統(tǒng)數(shù)據(jù)總線接口 2負(fù)責(zé)連接系統(tǒng)內(nèi)各種形式的系統(tǒng)數(shù)據(jù)總線,通過總線橋21可把讀/寫請求命令轉(zhuǎn)化成如圖5所示的統(tǒng)一的命令格式并存入所述第一命令先進(jìn)先出模塊24(異步FIFO),使用異步FIFO是為了隔離系統(tǒng)數(shù)據(jù)總線時鐘與DDR2SDRAM控制器時鐘,理論上,讀/寫請求命令的數(shù)據(jù)長度可以無限大,而訪問外部的DDR2SDRAM的突發(fā)長度是有規(guī)定的,即讀/寫請求命令的突發(fā)長度(Burst length)為4或者8筆(beat)數(shù)據(jù),所以需要把讀/寫請求命令按照突發(fā)長度進(jìn)行切割,直到剩下的請求數(shù)據(jù)長度小于Burst length,因此,一個系統(tǒng)數(shù)據(jù)總線請求可能會產(chǎn)生多個內(nèi)部請求命令。圖5中,req_rw_flag表示本次數(shù)據(jù)請求是讀還是寫,長度為lbits ;req_length表示(實際數(shù)據(jù)請求長度減I),由于訪問外部DDR2SDRAM的突發(fā)長度為4或8,所以為了節(jié)約存儲單元,該(實際數(shù)據(jù)請求長度減I)可以用3bits表示,req_address表示請求地址(Address),長度可以為n bits, n為正整數(shù)。所述第一寫數(shù)據(jù)先進(jìn)先出模塊(Write Data FIFO)22,用于從所述總線橋21獲取寫請求命令對應(yīng)的寫數(shù)據(jù)(Write Data),并按先進(jìn)先出的次序?qū)⑺鰧憯?shù)據(jù)輸出給所述命令仲裁器4。所述讀數(shù)據(jù)先進(jìn)先出模塊(Read Data FIFO) 23,用于存儲從所述DDR2SDRAM接口7返回的讀數(shù)據(jù),并按先進(jìn)先出的次序?qū)⑺鲎x數(shù)據(jù)輸出給所述總線橋21。所述第一命令先進(jìn)先出模塊(Co_and FIFO)24,用于存儲轉(zhuǎn)化成統(tǒng)一的命令格式的讀/寫請求命令,并隔離系統(tǒng)總線時鐘與DDR2SDRAM控制器時鐘。命令輸出模塊25(CMD OUT),用于向所述命令仲裁器4發(fā)起訪問申請(port_req),在得到所述命令仲裁器4的響應(yīng)(port_grant)后,把所述命令先進(jìn)先出模塊24中的讀/寫請求命令(port_cmd)發(fā)送給所述命令仲裁器4。所述命令仲裁器4,用于接收來自一個或多個系統(tǒng)數(shù)據(jù)總線接口 2輸出的讀/寫請求命令,通過預(yù)設(shè)的仲裁算法,使得同一時刻只響應(yīng)其中一路請求命令,把該命令中的請求地址映射成Bank/Row/Column地址后并輸出至所述命令隊列及重排序模塊5,而且根據(jù)所述讀標(biāo)志先進(jìn)先出模塊6中的讀標(biāo)志(Read Flag)把DDR2SDRAM接口 7返回的讀數(shù)據(jù)分發(fā)給對應(yīng)的系統(tǒng)數(shù)據(jù)總線接口 2。具體的,命令仲裁器4接收來自多個系統(tǒng)數(shù)據(jù)總線接口 2輸出的讀/寫請求命令,通過預(yù)設(shè)的仲裁算法,使得只有一路讀/寫請求命令輸出,同時把讀/寫請求命令中的請求地址映射成Bank/Row/Column的地址形式,并且把DDR2SDRAM接口 7返回的讀數(shù)據(jù)(Read Data)根據(jù)據(jù)所述讀標(biāo)志先進(jìn)先出模塊6中的讀標(biāo)志分發(fā)給各個系統(tǒng)數(shù)據(jù)總線接口 2的Port端口。所述讀標(biāo)志先進(jìn)先出模塊(Read Flag FIFO) 6,用于存儲從所述命令隊列及重排序模塊5輸出的讀標(biāo)志,并按先進(jìn)先出的次序?qū)⑺鲎x標(biāo)志(Read Flag)輸出給所述命令仲裁器4。
所述命令隊列及重排序模塊5,用來存儲所述命令仲裁器4輸出的經(jīng)過所述請求地址映射的讀/寫請求命令,并且根據(jù)所述Bank/Row/Column地址的相關(guān)性來對讀/寫請求命令進(jìn)行重排序,重排序后輸出的讀/寫請求命令中,如果是讀請求命令,則把相應(yīng)系統(tǒng)數(shù)據(jù)總線接口 2的編號以及數(shù)據(jù)請求長度作為所述讀標(biāo)志存入所述讀標(biāo)志先進(jìn)先出模塊
6。具體的,讀/寫請求命令經(jīng)過重排序,可以提高DDR2SDRAM接口的帶寬利用率。重排序后輸出的讀/寫請求命令中,如果是讀命令,那么就要把相應(yīng)系統(tǒng)數(shù)據(jù)總線接口 2的Port端口的編號以及數(shù)據(jù)請求長度存入Read Flag FIFO中,這樣仲裁器才能根據(jù)Read Flag把返回的Read Data分發(fā)給各個Port端口。優(yōu)選的,如圖6所示,所述命令隊列及重排序模塊5包括N個寄存器組51、重排序單元52和命令輸出單元53,N為自然數(shù)。每個寄存器組51用于存儲一個格式命令,所述格式命令包括經(jīng)過所述請求地址映射的讀/寫請求命令以及與該讀/寫請求命令對應(yīng)的系統(tǒng)數(shù)據(jù)總線接口的編號(端口編號,即Port ID),每個寄存器組51具有一個序號(標(biāo)簽,tag), tag的值的范圍可以為_1,0,1,...N-1,如果某個寄存器組51存儲了有效的讀/寫請求命令,該寄存器組對應(yīng)的序號的范圍為0至N-1,如果某個寄存器組51沒有存儲有效的讀/寫請求命令,該寄存器組51對應(yīng)的序號為-1,如果用8bit表不序號,那該序號為FF,所有格式命令按照在寄存器組51的序號排序形成命令隊列,所述序號與存儲在具有該序號的寄存器組51上的經(jīng)過所述請求地址映射的讀/寫請求命令對應(yīng)。命令隊列的長度理論是越長越好,因為越長的隊列長度可以增強(qiáng)所發(fā)送命令之間的相關(guān)性,進(jìn)而提升帶寬利用率,但是付出的代價就是芯片面積的增加,所以在具體實現(xiàn)時要權(quán)衡性能與芯片面積之間的關(guān)系。根據(jù)仿真分析,隊列長度為8組命令是比較合適的,該長度兼顧了對面積的考量,同時也較大地提升了帶寬利用率。如果可以適當(dāng)增加面積,同時又想要得到更高的帶寬利用率,那么隊列長度為16組命令是不錯的選擇。而當(dāng)隊列長度大于16時,增加的命令隊列長度對于提升帶寬利用率已經(jīng)貢獻(xiàn)不大了。所述命令輸出單元53,用于將序號為零的寄存器組中的讀/寫請求命令輸出給所述DDR2SDRAM接口,并將該寄存器組的序號設(shè)置為_1,同時更新其它寄存器組的序號。優(yōu)選的,為了避免某些讀/寫請求命令一直在命令隊列里等待,每個寄存器組51還設(shè)置有一個饑餓指數(shù)(starvation level),所述饑餓指數(shù)的范圍為0至預(yù)設(shè)的最大限定值,當(dāng)所述重排序單元52接收到所述DDR2SDRAM接口 7發(fā)出的更新使能信號(update_en)時,判斷是否有達(dá)到所述最大限定值(starvation limitation)的饑餓指數(shù),如果有,貝1J所述命令輸出單元53把所述饑餓指數(shù)達(dá)到所述最大限定值的對應(yīng)的寄存器組中的讀/寫請求命令輸出給所述DDR2SDRAM接口 7,同時將該寄存器組51的饑餓指數(shù)清零,并將該寄存器組51的序號設(shè)置為-1,同時將其它寄存器組51的饑餓指數(shù)加1,并更新其它寄存器組51的序號;如果沒有,則所述命令輸出單元53將序號為零(tag=0)的寄存器組51中的讀/寫請求命令輸出給所述DDR2SDRAM接口 7,同時將該寄存器組51的饑餓指數(shù)清零,并將該寄存器組51的序號設(shè)置為-1,同時將其它寄存器組51的饑餓指數(shù)加1,并更新其它寄存器組51的序號。饑餓指數(shù)(Starvation limitation)可以通過控制寄存器4去設(shè)置,而且該值的大小關(guān)系到命令隊列里低優(yōu)先級(即Tag值較大)命令的等待時間,如果不希望這些命令等待的時間太長,那么Starvation limitation的值應(yīng)該小一些,但是這樣會影響到帶寬利用率。根據(jù)仿真分析,Starvation limitation的值一般應(yīng)該大于命令隊列的長度。例如,如果隊列長度為8組命令,那么Starvation limitation應(yīng)設(shè)為10會比較合適。所述重排序單元52 (Reordering單元),用于根據(jù)控制寄存器3輸出的排序使能信號(reorder_en)的電平高低,將從所述命令仲裁器4接收到的新進(jìn)的讀/寫請求命令(新命令,new_command)插入所述命令隊列(舊命令,old_command)中的相應(yīng)位置,并更新相應(yīng)寄存器組51的序號。具體的,所述重排序單元52根據(jù)新進(jìn)的讀/寫請求命令的地址以及隊列里存儲的讀/寫請求命令的地址,并通過一些預(yù)設(shè)的重排序的方法或規(guī)則把新進(jìn)的讀/寫請求命令插入隊列中,同時更新所有寄存器組的序號(tag)值。優(yōu)選的,當(dāng)所述排序使能信號(reorder_en)為高電平時,所述重排序單元52根據(jù)預(yù)設(shè)的重排序方法將新進(jìn)的讀/寫請求命令插入所述命令隊列中的相應(yīng)位置,同時更新從插入位置到命令隊列的末尾的對應(yīng)的所有寄存器組51的序號;當(dāng)所述排序使能信號為低電平時,所述重排序單元52將新進(jìn)的讀/寫請求命令按照先后順序存入所述命令隊列的末尾,即把新進(jìn)的讀/寫請求命令按照先后順序存入命令隊列中,同時更新存入位置對應(yīng)的寄存器組51的序號,以滿足不需要高帶寬利用率,但是要保證所述命令仲裁器4輸出讀/寫請求命令的執(zhí)行順序。較佳的,為了提高DDR2SDRAM接口 7帶寬利用率而把讀/寫請求命令進(jìn)行重新排序,所依據(jù)的重排序方法或規(guī)則就是要盡量滿足下面可以改善帶寬利用率的操作:如圖1和圖2對比顯示,訪問相同的Bank/Row地址,不在同一個Bank中頻繁切換Row地址;如圖7所示,配合DDR2SDRAM的Additive Latency特性,使用交錯的Bank地址,具體的,AdditiveLatency (AL)是DDR2SDRAM新增加的一項特性,它的優(yōu)點在于=Bank激活命令(ACT)之后不必等待tRCD延時就可以發(fā)送讀/寫命令,因此DDR2SDRAM控制器有更多的“時間間隙”去自由地發(fā)送命令,圖7中,由于Bank的地址是交錯的,所以在等待讀數(shù)據(jù)的時候,可以去激活其他Bank而進(jìn)行讀操作,只要這兩個激活命令(ACT)之間的延時滿足tRRD要求即可,CKfl代表負(fù)時鐘,CK代表正時鐘,Command代表命令,DQS代表數(shù)據(jù)有效,DQ代表返回數(shù)據(jù),tRRD、AL、CL為延時參數(shù);如圖8所示,使用連續(xù)的讀請求命令或者寫請求命令,不要在讀/寫請求命令之間頻繁切換,圖8中,寫操作之后,在對同一 DDR2SDRAM進(jìn)行讀操作之前需要一個等待時間,即tWTR,WL為延時參數(shù);使用auto precharge命令,而不是單獨發(fā)送precharge命令;新進(jìn)的讀/寫請求命令,只能插入在相同系統(tǒng)數(shù)據(jù)總線接口的編號和相同Bank/Row/Column地址的讀/寫請求命令之后,即為了避免讀/寫錯誤,具有相同系統(tǒng)數(shù)據(jù)總線接口的編號(Port ID)以及相同地址的命令之間的順序不能被打亂。優(yōu)選的,如圖9所示,所述重排序方法包括:步驟SI,判斷所述命令隊列是否存在與新進(jìn)的讀/寫請求命令相同系統(tǒng)數(shù)據(jù)總線接口的編號和Bank/Row/Column地址的讀/寫請求命令,若存在,則執(zhí)行步驟S2,若不存在,則將整個命令隊列作為第一查找范圍,并轉(zhuǎn)到步驟S3,具體的,如果Burst Length=4,相同Bank/Row/Column地址是指相同的Bank地址,相同的Row地址,Column地址除低兩位外相同,如果Burst Length=8,相同Bank/Row/Column地址是指相同的Bank地址,相同的Row地址,Column地址除低三位外相同;步驟S2,從所述相同系統(tǒng)數(shù)據(jù)總線接口的編號以及Bank/Row/Column地址的讀/寫請求命令中獲取對應(yīng)的最大的序號,將從具有所述最大的序號的讀/寫請求命令至命令隊列的末尾的范圍作為所述第一查找范圍,并轉(zhuǎn)到步驟S3 ;步驟S3,判斷所述第一查找范圍中是否存在與新進(jìn)的讀/寫請求命令同為讀或?qū)?,且具有相同Bank/Row地址的讀/寫請求命令,若具有,則執(zhí)行步驟S4,若不具有,則執(zhí)行步驟S5;步驟S4,將所述第一查找范圍中與新進(jìn)的讀/寫請求命令同為讀或?qū)懀揖哂邢嗤珺ank/Row地址的所有讀/寫請求命令作為第二查找范圍,將新進(jìn)的讀/寫請求命令插入所述第二查找范圍中具有最大的序號的讀/寫請求命令之后并結(jié)束;步驟S5,判斷所述命令隊列中是否存在與新進(jìn)的讀/寫請求命令同為讀或?qū)?,且具有不同Bank地址的讀/寫請求命令,若具有,則執(zhí)行步驟S6,若不具有,則執(zhí)行步驟S16 ;步驟S6,從所述與新進(jìn)的讀/寫請求命令同為讀或?qū)?,且具有不同Bank地址的讀/寫請求命令中獲取對應(yīng)的最小的序號,將從具有所述最小序號的讀/寫請求命令至命令隊列末尾的范圍作為所述第三查找范圍,并將所述第三查找范圍中的讀/寫請求命令的對應(yīng)的最小的序號作為次佳位置值,然后執(zhí)行步驟S7 ;步驟S7,判斷具有次佳位置值的讀/寫請求命令與緊排在其后的下一個讀/寫請求命令是否同為讀或?qū)懙淖x/寫請求命令,若是,則轉(zhuǎn)到步驟S8,若否,則轉(zhuǎn)到步驟S12 ;步驟S8,判斷具有次佳位置值的讀/寫請求命令與新進(jìn)的讀/寫請求命令的Bank地址是否相同,若是,則將所述次佳位置值加I并轉(zhuǎn)到步驟S7,若否,則轉(zhuǎn)到步驟S9 ;步驟S9,判斷緊排在具有次佳位置值的讀/寫請求命令其后的下一個讀/寫請求命令與新進(jìn)的讀/寫請求命令的Bank地址是否相同,若是,則將所述次佳位置值加I并轉(zhuǎn)到步驟S7,若否,則轉(zhuǎn)到步驟SlO ;步驟S10,判斷具有次佳位置值的讀/寫請求命令與緊排在其后的下一個讀/寫請求命令的Bank地址相同,且Row地址不同,若是,則轉(zhuǎn)到步驟S13,若否,則轉(zhuǎn)到步驟Sll ;步驟Sll,將所述次佳位置值存入次佳位置記錄器中,并將所述次佳位置值加I并轉(zhuǎn)到步驟S7 ;步驟S12,判斷所述次佳位置記錄器是否為空,若為非空,則從所述次佳位置記錄器中獲取具有最大命令序號的次佳位置值并轉(zhuǎn)到步驟S13,若為空,則轉(zhuǎn)到步驟S14 ;步驟S13,在具有次佳位置值的讀/寫請求命令之后插入所述新進(jìn)的讀/寫請求命令,同時更新從插入位置到命令隊列的末尾的所有讀/寫請求命令的序號后轉(zhuǎn)到步驟S15 ;步驟S14,將所述新進(jìn)的讀/寫請求命令插入到所述第三查找范圍中與新進(jìn)命令具有相同讀/寫標(biāo)志且具有最大序號的請求命令之后,同時更新從插入位置到命令隊列的末尾的所有讀/寫請求命令的序號后,轉(zhuǎn)到步驟S15 ;步驟S15,清空所述次佳位置記錄器后結(jié)束;步驟S16,判斷所述命令隊列中是否存在與所述新進(jìn)的讀/寫請求命令具同為讀或?qū)懙淖x/寫請求命令,若無,則轉(zhuǎn)到步驟S17,若有,則轉(zhuǎn)到步驟S18 ;步驟S17,將所述新進(jìn)的讀/寫請求命令插入所述命令隊列的末尾,然后轉(zhuǎn)到步驟S15 ;步驟S18,將所述命令隊列中與所述新進(jìn)的讀/寫請求命令具同為讀或?qū)懙淖x/寫請求命令作為第四查找范圍,并將所述新進(jìn)的讀/寫請求命令插入在所述第四查找范圍中具有最大序號的讀/寫請求命令之后,同時更新從插入位置到命令隊列的末尾的所有讀/寫請求命令的序號后,轉(zhuǎn)到步驟S15。DDR2SDRAM接口 7,用于每次接收一個重排序后的讀/寫請求命令,并把所述重排序后的讀/寫請求命令解析成標(biāo)準(zhǔn)接口信號(DDR2Signal)輸出至外部的DDR2SDRAM,同時接收DDR2SDRAM返回的讀數(shù)據(jù)(Read Data)并發(fā)送給所述命令仲裁器4。具體的,DDR2SDRAM接口 7還可用于完成其他輔助功能,例如DDR2SDRAM的初始化以及刷新操作。優(yōu)選的,所述命令仲裁器4、命令隊列及重排序模塊5和DDR2SDRAM接口 7共用一個工作時鐘。較佳的,如圖10所示,所述DDR2SDRAM接口 7包括主狀態(tài)機(jī)71、第二命令先進(jìn)先出模塊72、第二寫數(shù)據(jù)先進(jìn)先出模塊73、預(yù)判斷模塊74、預(yù)激活模塊75、時序控制模塊76、初始化狀態(tài)機(jī)77、解析模塊78、數(shù)據(jù)接口 79和DDR2物理層80。所述主狀態(tài)機(jī)(Main State Machine) 71,用于協(xié)調(diào)第二命令先進(jìn)先出模塊72、第二寫數(shù)據(jù)先進(jìn)先出模塊73、預(yù)判斷模塊74、預(yù)激活模塊75、時序控制模塊76、初始化狀態(tài)機(jī)77、解析模塊78、數(shù)據(jù)接口 79和DDR2物理層80的工作并發(fā)送讀/寫請求命令。所述第二命令先進(jìn)先出模塊(CMD FIFO模塊)72,用于從所述命令隊列及重排序模塊5獲取并存儲讀/寫請求命令(Command),并根據(jù)先進(jìn)先出的順序?qū)⒆x/寫請求命令發(fā)送給所述主狀態(tài)機(jī)71。具體的,可以根據(jù)命令隊列的非空標(biāo)志(empty_f lag)以及CMD FIFO的非滿標(biāo)志(fifo_full_flag)讀入新命令并存入所述第二命令先進(jìn)先出模塊72中。DDR2SDRAM接口 7中CMD FIFO模塊72的深度越深,那么模塊Look-aheadAuto-precharge以及模塊Look-ahead Bank Management可以回溯的命令數(shù)就越多,這對提升帶寬利用率是有益的,但是較深的CMD FIFO會影響到前面命令隊列的重排序,因為有些命令還沒有經(jīng)過重排序就被讀入CMD FIFO中,這又影響了帶寬利用率,所以CMD FIFO的深度需要折衷考慮。根據(jù)仿真分析,CMD FIFO的深度要小于命令隊列長度的一半,一般來講深度為4組命令比較合適。所述第二寫數(shù)據(jù)先進(jìn)先出(Write Data FIFO)模塊73,用于暫存寫數(shù)據(jù)。所述預(yù)判斷模塊(Look-ahead Auto-precharge模塊)74,用于根據(jù)比較當(dāng)前讀/寫請求命令(current_cmd)與后續(xù)讀/寫請求命令的Bank/Row地址的結(jié)果來判斷是否進(jìn)行Auto Precharge操作,并將判斷結(jié)果發(fā)送給所述主狀態(tài)機(jī)71,具體的,即比較CMD FIFO模塊中最先送出的命令(即當(dāng)前命令)與之后命令的Bank和Row地址,如果沒有相同的Bank/Row地址,那么產(chǎn)生的圖10所示的auto_prechg_en信號為高電平。另外,即便有相同Bank/Row地址的命令,如果該同地址命令與當(dāng)前命令之間存在一個相同Bank但不同Row地址的命令,則auto_prechg_en信號也應(yīng)該為高電平,指示當(dāng)前命令結(jié)束后需要關(guān)閉對應(yīng)的Bank和Row,至于檢查后面幾個命令則可由控制寄存器3輸出的配置參數(shù)look_ahead_depth_a決定。這里預(yù)先判斷是否執(zhí)行auto precharge操作,有利于提高DDR2SDRAM接口的帶寬利用率。所述預(yù)激活模塊(Look-aheadBank Management 模塊)75,用于跟蹤 DDR2SDRAM 中各個讀/寫請求命令的Bank的激活狀態(tài),并根據(jù)所述第二命令先進(jìn)先出模塊(CMD FIF0)72中的讀/寫請求命令來判斷是否需要預(yù)先激活某個讀/寫請求命令的Bank,并將判斷結(jié)果發(fā)送給所述主狀態(tài)機(jī)71。具體的,所述預(yù)激活模塊75可以記錄各個Bank的激活狀態(tài),并且根據(jù)CMD FIFO中的命令來判斷是否需要預(yù)先激活某個Bank。同樣地,該模塊檢查幾個命令則由控制寄存器3輸出的配置參數(shù)l00k_ahead_d印th_b來決定。預(yù)先激活后續(xù)命令需要訪問的Bank也能提高DDR2SDRAM接口的帶寬利用率。時序控制模塊(Timing Control) 76,用于向所述主狀態(tài)機(jī)71發(fā)送所述讀/寫請求命令的延時參數(shù)以及刷新時間。所述初始化狀態(tài)機(jī)(InitializationState 1\^(:11;[116)77,用于進(jìn)行001 230狀]\1的初始化操作。所述解析模塊(Address and Command Parsing)78,用于把主狀態(tài)機(jī)71送出的讀/寫請求命令解析成標(biāo)準(zhǔn)的DDR2SDRAM接口信號。所述數(shù)據(jù)接口(Data Interface) 79,用于通過所述主狀態(tài)機(jī)71從所述第二寫數(shù)據(jù)先進(jìn)先出模塊73讀入寫數(shù)據(jù),并控制寫數(shù)據(jù)與寫命令之間的延時,同時接收DDR2SDRAM返回的讀數(shù)據(jù)(Read Data)并發(fā)送給所述主狀態(tài)機(jī)71。所述DDR2物理層80,用于將DDR2SDRAM分別與所述解析模塊78和所述數(shù)據(jù)接口79進(jìn)行連接,并將DDR2SDRAM控制器內(nèi)的邏輯信號轉(zhuǎn)化成標(biāo)準(zhǔn)的差分信號。更詳細(xì)的,下面通過舉例說明采用本實施例的DDR2SDRAM控制器對讀/寫請求命令進(jìn)行重排序?qū)τ谔嵘龓捓寐实淖饔?。假設(shè)AL=2,CAS Latency (CL,列地址脈沖選通潛伏期)=3, Burst Length=8,命令仲裁器輸出的命令序列如下:Read BankO RowO — Read BankO Rowl — Read BankO RowO — Read BanklRowl,如果不經(jīng)過重排序,那么該命令序列執(zhí)行情況如表-1:
權(quán)利要求
1.一種DDR2 SDRAM控制器,其特征在于,包括系統(tǒng)配置總線接口、一個或多個系統(tǒng)數(shù)據(jù)總線接口、控制寄存器、命令仲裁器、命令隊列及重排序模塊、讀標(biāo)志先進(jìn)先出模塊和DDR2 SDRAM 接口,其中, 所述系統(tǒng)配置總線接口使用異步設(shè)計,用于接收系統(tǒng)配置信息并存入控制寄存器內(nèi),并隔離系統(tǒng)配置總線時鐘和DDR2 SDRAM控制器時鐘; 所述控制寄存器,用于根據(jù)所述系統(tǒng)配置信息輸出工作參數(shù); 所述一個或多個系統(tǒng)數(shù)據(jù)總線接口使用異步設(shè)計,用于接收來自一個或多個系統(tǒng)數(shù)據(jù)總線的讀/寫請求命令并發(fā)送給所述命令仲裁器,隔離系統(tǒng)數(shù)據(jù)總線時鐘和DDR2 SDRAM控制器時鐘,及從所述命令仲裁器獲取讀數(shù)據(jù)并輸出至一個或多個系統(tǒng)數(shù)據(jù)總線; 所述命令仲裁器,用于接收來自一個或多個系統(tǒng)數(shù)據(jù)總線接口輸出的讀/寫請求命令,通過預(yù)設(shè)的仲裁算法,使得同一時刻只響應(yīng)其中一路請求命令,把該命令中的請求地址映射成Bank/Row/Column地址后并輸出至所述命令隊列及重排序模塊,而且根據(jù)所述讀標(biāo)志先進(jìn)先出模塊中的讀標(biāo)志把DDR2 SDRAM接口返回的讀數(shù)據(jù)分發(fā)給對應(yīng)的系統(tǒng)數(shù)據(jù)總線接口 ; 所述讀標(biāo)志先進(jìn)先出模塊,用于存儲從所述命令隊列及重排序模塊輸出的讀標(biāo)志,并按先進(jìn)先出的次序?qū)⑺鲎x標(biāo)志輸出給所述命令仲裁器; 所述命令隊列及重排序模塊,用來存儲所述命令仲裁器輸出的且經(jīng)過所述請求地址映射的讀/寫請求命令,并且根據(jù)所述Bank/Row/Column地址的相關(guān)性來對讀/寫請求命令進(jìn)行重排序,重排序后輸出的讀/寫請求命令中,如果是讀請求命令,則把相應(yīng)系統(tǒng)數(shù)據(jù)總線接口的編號以及數(shù)據(jù)請求長度作為所述讀標(biāo)志存入所述讀標(biāo)志先進(jìn)先出模塊; DDR2 SDRAM 接口,用于每次接收一個重排序后的讀/寫請求命令,并把所述重排序后的讀/寫請求命令解析成標(biāo)準(zhǔn)接口信號輸出至外部的DDR2 SDRAM,同時接收DDR2 SDRAM返回的讀數(shù)據(jù)并發(fā)送給所述命令仲裁器。
2.按權(quán)利要求1所述的DDR2SDRAM控制器,其特征在于,所述DDR2 SDRAM接口,還用于對DDR2 SDRAM的初始化以及刷新操作。
3.按權(quán)利要求1所述的DDR2SDRAM控制器,其特征在于,所述命令仲裁器、命令隊列及重排序模塊和DDR2 SDRAM接口共用一個工作時鐘。
4.按權(quán)利要求1所述的DDR2SDRAM控制器,其特征在于,所述控制寄存器根據(jù)所述系統(tǒng)配置信息輸出的工作參數(shù)包括: 向所述DDR2 SDRAM接口輸出讀/寫操作的突發(fā)長度和延時參數(shù)、向所述命令仲裁器輸出優(yōu)先級設(shè)置參數(shù)和向所述命令隊列及重排序模塊輸出排序使能信號。
5.按權(quán)利要求1所述的DDR2SDRAM控制器,其特征在于,每個系統(tǒng)數(shù)據(jù)總線接口包括總線橋、第一寫數(shù)據(jù)先進(jìn)先出模塊、讀數(shù)據(jù)先進(jìn)先出模塊、第一命令先進(jìn)先出模塊和命令輸出模塊,其中, 所述總線橋,用于接收來自系統(tǒng)數(shù)據(jù)總線的讀/寫請求命令,并將讀/寫請求命令轉(zhuǎn)化成統(tǒng)一的命令格式存入所述第一命令先進(jìn)先出模塊,及從所述讀數(shù)據(jù)先進(jìn)先出模塊獲取所述讀數(shù)據(jù)并輸出至系統(tǒng)數(shù)據(jù)總線; 第一寫數(shù)據(jù)先進(jìn)先出模塊,用于從所述總線橋獲取寫請求命令對應(yīng)的寫數(shù)據(jù),并按先進(jìn)先出的次序?qū)⑺鰧憯?shù)據(jù)輸出給所述命令仲裁器;讀數(shù)據(jù)先進(jìn)先出模塊,用于存儲從所述DDR2 SDRAM接口返回的讀數(shù)據(jù),并按先進(jìn)先出的次序?qū)⑺鲎x數(shù)據(jù)輸出給所述總線橋; 所述第一命令先進(jìn)先出模塊,用于存儲轉(zhuǎn)化成統(tǒng)一的命令格式的讀/寫請求命令,并隔離系統(tǒng)總線時鐘與DDR2 SDRAM控制器時鐘; 命令輸出模塊,用于向所述命令仲裁器發(fā)起訪問申請,在得到所述命令仲裁器的響應(yīng)后,把所述命令先進(jìn)先出模塊中的讀/寫請求命令發(fā)送給所述命令仲裁器。
6.按權(quán)利要求1所述的DDR2SDRAM控制器,其特征在于,所述命令隊列及重排序模塊包括N個寄存器組、重排序單元和命令輸出單元,N為自然數(shù),其中, 每個寄存器組用于存儲一個格式命令,所述格式命令包括經(jīng)過所述請求地址映射的讀/寫請求命令以及與該讀/寫請求命令對應(yīng)的系統(tǒng)數(shù)據(jù)總線接口的編號,每個寄存器組具有一個序號,如果某個寄存器組存儲了有效的讀/寫請求命令,該寄存器組對應(yīng)的序號的范圍為O至N-1,如果某個寄存器組沒有存儲有效的讀/寫請求命令,該寄存器組對應(yīng)的序號為-1,所有格式命令按照在寄存器組的序號排序形成命令隊列,所述序號與存儲在具有該序號的寄存器組上的經(jīng)過所述請求地址映射的讀/寫請求命令對應(yīng); 所述重排序單元,用于根據(jù)控制寄存器輸出的排序使能信號的電平高低,將從所述命令仲裁器接收到的新進(jìn)的讀/寫請求命令插入所述命令隊列中的相應(yīng)位置,并更新相應(yīng)寄存器組的序號; 所述命令輸出單元,用于將序號為零的寄存器組中的讀/寫請求命令輸出給所述DDR2SDRAM接口,并將該寄存器組的序號設(shè)置為-1,同時更新其它寄存器組的序號。
7.按權(quán)利要求6所述的DDR2SDRAM控制器,其特征在于,當(dāng)所述排序使能信號為高電平時,所述重排序單元根據(jù)預(yù)設(shè)的重排序方法將新進(jìn)的讀/寫請求命令插入所述命令隊列中的相應(yīng)位置,同時更新從插入位置到命令隊列的末尾的對應(yīng)的所有寄存器組的序號; 當(dāng)所述排序使能信號為低電平時,所述重排序單元將新進(jìn)的讀/寫請求命令按照先后順序存入所述命令隊列的末尾,同時更新存入位置對應(yīng)的寄存器組的序號。
8.按權(quán)利要求7所述的DDR2SDRAM控制器,其特征在于,所述重排序方法包括: 訪問相同的Bank/Row地址,不在同一個Bank中頻繁切換Row地址; 配合DDR2 SDRAM的Additive Latency特性,使用交錯的Bank地址; 使用連續(xù)的讀請求命令或者寫請求命令,不要在讀/寫請求命令之間頻繁切換; 使用auto precharge命令,而不是單獨發(fā)送precharge命令; 新進(jìn)的讀/寫請求命令,只能插入在相同系統(tǒng)數(shù)據(jù)總線接口的編號和相同Bank/Row/Column地址的讀/寫請求命令之后。
9.按權(quán)利要求8所述的DDR2SDRAM控制器,其特征在于,所述重排序方法包括: 步驟一,判斷所述命令隊列是否存在與新進(jìn)的讀/寫請求命令相同系統(tǒng)數(shù)據(jù)總線接口的編號和Bank/Row/Column地址的讀/寫請求命令,若存在,則執(zhí)行步驟二,若不存在,則將整個命令隊列作為第一查找范圍,并轉(zhuǎn)到步驟三; 步驟二,從所述相同系統(tǒng)數(shù)據(jù)總線接口的編號以及Bank/Row/Column地址的讀/寫請求命令中獲取對應(yīng)的最大的序號,將從具有所述最大的序號的讀/寫請求命令至命令隊列的末尾的范圍作為所述第一查找范圍,并轉(zhuǎn)到步驟三; 步驟三,判斷所述第一查找范圍中是否存在與新進(jìn)的讀/寫請求命令同為讀或?qū)?,且具有相同Bank/Row地址的讀/寫請求命令,若具有,則執(zhí)行步驟四,若不具有,則執(zhí)行步驟五; 步驟四,將所述第一查找范圍中與新進(jìn)的讀/寫請求命令同為讀或?qū)?,且具有相同Bank/Row地址的所有讀/寫請求命令作為第二查找范圍,并將新進(jìn)的讀/寫請求命令插入所述第二查找范圍中具有最大的序號的讀/寫請求命令之后并結(jié)束; 步驟五,判斷所述命令隊列中是否存在與新進(jìn)的讀/寫請求命令同為讀或?qū)?,且具有不同Bank地址的讀/寫請求命令,若具有,則執(zhí)行步驟六,若不具有,則執(zhí)行步驟十六; 步驟六,從所述與新進(jìn)的讀/寫請求命令同為讀或?qū)?,且具有不同Bank地址的讀/寫請求命令中獲取對應(yīng)的最小的序號,將從具有所述最小序號的讀/寫請求命令至命令隊列的末尾的范圍作為所述第三查找范圍,并將所述第三查找范圍中的讀/寫請求命令的對應(yīng)的最小的序號作為次佳位置值,然后轉(zhuǎn)到步驟七; 步驟七,判斷具有次佳位置值的讀/寫請求命令與緊排在其后的下一個讀/寫請求命令是否同為讀或?qū)懙淖x/寫請求命令,若是,則轉(zhuǎn)到步驟八,若否,則轉(zhuǎn)到步驟十二 ; 步驟八,判斷具有次佳位置值的讀/寫請求命令與新進(jìn)的讀/寫請求命令的Bank地址是否相同,若是,則將所述次佳位置值加I并轉(zhuǎn)到步驟七,若否,則轉(zhuǎn)到步驟九; 步驟九,判斷緊排在具有次佳位置值的讀/寫請求命令其后的下一個讀/寫請求命令與新進(jìn)的讀/寫請求命令的Bank地址是否相同,若是,則將所述次佳位置值加I并轉(zhuǎn)到步驟七,若否,則轉(zhuǎn)到步驟十; 步驟十,判斷具有次佳位置值的讀/寫請求命令與緊排在其后的下一個讀/寫請求命令的Bank地址相同,且Row地址不同,若是,則轉(zhuǎn)到步驟十三,若否,則轉(zhuǎn)到步驟十一; 步驟十一,將所述次佳 位置值存入次佳位置記錄器中,將所述次佳位置值加I并轉(zhuǎn)到步驟七; 步驟十二,判斷所述次佳位置記錄器是否為空,若為非空,則從所述次佳位置記錄器中獲取具有最大命令序號的次佳位置值并轉(zhuǎn)到步驟十三,若為空,則轉(zhuǎn)到步驟十四; 步驟十三,在具有次佳位置值的讀/寫請求命令之后插入所述新進(jìn)的讀/寫請求命令,同時更新從插入位置到命令隊列的末尾的所有讀/寫請求命令的序號后轉(zhuǎn)到步驟十五; 步驟十四,將所述新進(jìn)的讀/寫請求命令插入到所述第三查找范圍中與新進(jìn)命令具有相同讀/寫標(biāo)志且具有最大序號的請求命令之后,同時更新從插入位置到命令隊列的末尾的所有讀/寫請求命令的序號后,轉(zhuǎn)到步驟十五; 步驟十五,清空所述次佳位置記錄器后結(jié)束; 步驟十六,判斷所述命令隊列中是否存在與所述新進(jìn)的讀/寫請求命令具同為讀或?qū)懙淖x/寫請求命令,若無,則轉(zhuǎn)到步驟十七,若有,則轉(zhuǎn)到步驟十八; 步驟十七,將所述新進(jìn)的讀/寫請求命令插入所述命令隊列的末尾,然后轉(zhuǎn)到步驟十五; 步驟十八,將所述命令隊列中與所述新進(jìn)的讀/寫請求命令具同為讀或?qū)懙淖x/寫請求命令作為第四查找范圍,并將所述新進(jìn)的讀/寫請求命令插入在所述第四查找范圍中具有最大序號的讀/寫請求命令之后,同時更新從插入位置到命令隊列的末尾的所有讀/寫請求命令的序號后,轉(zhuǎn)到步驟十五。
10.按權(quán)利要求6所述的DDR2 SDRAM控制器,其特征在于,每個寄存器組還設(shè)置有一個饑餓指數(shù),所述饑餓指數(shù)的范圍為O至預(yù)設(shè)的最大限定值,當(dāng)所述重排序單元接收到所述DDR2 SDRAM接口發(fā)出的更新使能信號時,判斷是否有達(dá)到所述最大限定值的饑餓指數(shù),如果有,則所述命令輸出單元把所述饑餓指數(shù)達(dá)到所述最大限定值的對應(yīng)的寄存器組中的讀/寫請求命令輸出給所述DDR2 SDRAM接口,同時將該寄存器組的饑餓指數(shù)清零,并將該寄存器組的序號設(shè)置為-1,同時將其它寄存器組的饑餓指數(shù)加1,并更新其它寄存器組的序號; 如果沒有,則所述命令輸出單元將序號為零的寄存器組中的讀/寫請求命令輸出給所述DDR2 SDRAM接口,同時將該寄存器組的饑餓指數(shù)清零,并將該寄存器組的序號設(shè)置為-1,同時將其它寄存器組的饑餓指數(shù)加1,并更新其它寄存器組的序號。
11.按權(quán)利要求1所述的DDR2 SDRAM控制器,其特征在于,所述DDR2 SDRAM接口包括主狀態(tài)機(jī)、第二命令先進(jìn)先出模塊、第二寫數(shù)據(jù)先進(jìn)先出模塊、預(yù)判斷模塊、預(yù)激活模塊、時序控制模塊、初始化狀態(tài)機(jī)、解析模塊、數(shù)據(jù)接口和DDR2物理層,其中, 所述主狀態(tài)機(jī),用于協(xié)調(diào)第二命令先進(jìn)先出模塊、第二寫數(shù)據(jù)先進(jìn)先出模塊、預(yù)判斷模塊、預(yù)激活模塊、時序控制模塊、初始化狀態(tài)機(jī)、解析模塊、數(shù)據(jù)接口和DDR2物理層的工作并發(fā)送讀/寫請求命令; 所述第二命令先進(jìn)先出模塊,用于從所述命令隊列及重排序模塊獲取并存儲讀/寫請求命令,并根據(jù)先進(jìn)先出的順序?qū)⒆x/寫請求命令發(fā)送給所述主狀態(tài)機(jī); 所述第二寫數(shù)據(jù)先進(jìn)先出模塊,用于暫存寫數(shù)據(jù); 所述預(yù)判斷模塊,用于根據(jù)比較當(dāng)前讀/寫請求命令與后續(xù)讀/寫請求命令的Bank/Row地址的結(jié)果來判斷是否進(jìn)行Auto Precharge操作,并將判斷結(jié)果發(fā)送給所述主狀態(tài)機(jī); 所述預(yù)激活模塊,用于跟蹤DDR2 SDRAM中各個讀/寫請求命令的Bank的激活狀態(tài),并根據(jù)所述第二命令先進(jìn)先出模塊中的讀/寫請求命令來判斷是否需要預(yù)先激活某個讀/寫請求命令的Bank,并將判斷結(jié)果發(fā)送給所述主狀態(tài)機(jī); 時序控制模塊,用于向所述主狀態(tài)機(jī)發(fā)送所述讀/寫請求命令的延時參數(shù)以及刷新時間; 所述初始化狀態(tài)機(jī),用于進(jìn)行DDR2 SDRAM的初始化操作; 所述解析模塊,用于把主狀態(tài)機(jī)送出的讀/寫請求命令解析成標(biāo)準(zhǔn)的DDR2 SDRAM接口信號; 所述數(shù)據(jù)接口,用于通過所述主狀態(tài)機(jī)從所述第二寫數(shù)據(jù)先進(jìn)先出模塊讀入寫數(shù)據(jù),并控制寫數(shù)據(jù)與寫命令之間的延時,同時接收DDR2 SDRAM返回的讀數(shù)據(jù)并發(fā)送給所述主狀態(tài)機(jī); 所述DDR2物理層,用 于將DDR2 SDRAM分別與所述解析模塊和所述數(shù)據(jù)接口進(jìn)行連接,并將DDR2 SDRAM控制器內(nèi)的邏輯信號轉(zhuǎn)化成標(biāo)準(zhǔn)的差分信號。
全文摘要
本發(fā)明涉及一種DDR2SDRAM控制器,通過DDR2SDRAM控制器遵循DDR2SDRAM接口協(xié)議,實現(xiàn)DDR2SDRAM控制器與外部DDR2SDRAM之間的數(shù)據(jù)傳輸,該DDR2SDRAM控制器包括DDR2SDRAM接口,實現(xiàn)DDR2SDRAM接口協(xié)議定義的各種信號;系統(tǒng)數(shù)據(jù)總線接口,實現(xiàn)系統(tǒng)數(shù)據(jù)總線側(cè)的接口功能,該系統(tǒng)數(shù)據(jù)總線接口可以被復(fù)制,以滿足多個數(shù)據(jù)總線的連接;針對多個數(shù)據(jù)總線請求的命令仲裁器,使得同一時間內(nèi)只能有一路數(shù)據(jù)總線可以訪問外部DDR2SDRAM;命令隊列及重排序模塊接收命令仲裁器輸出的讀/寫請求命令,并根據(jù)地址的相關(guān)性對讀/寫請求命令進(jìn)行重排序,從而提高所述DDR2SDRAM接口的利用率。
文檔編號G06F13/16GK103092785SQ201310050849
公開日2013年5月8日 申請日期2013年2月8日 優(yōu)先權(quán)日2013年2月8日
發(fā)明者鄭宇馳 申請人:豪威科技(上海)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1