本發(fā)明涉及電子技術(shù)領(lǐng)域,尤其涉及指令延時控制方法、控制器以及存儲器。
背景技術(shù):
根據(jù)DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory,雙倍速率同步動態(tài)隨機(jī)存儲器)協(xié)議(JESD79-3E,JESD79-2C,JESD209B)規(guī)定,數(shù)據(jù)的傳輸是通過對DDR SDRAM發(fā)出讀寫命令以及收發(fā)相應(yīng)的數(shù)據(jù)來完成的。用戶對DDR SDRAM的操作,通常都是通過DDR controller(DDR控制器)進(jìn)行。
DDR controller與PHY(物理層)之間通過工業(yè)標(biāo)準(zhǔn)協(xié)議DFI接口(DDR PHY Interface,雙倍速率同步動態(tài)隨機(jī)存儲器物理層接口)(DFI3.0,DFI3.1,DFI4.0)進(jìn)行命令的傳遞和數(shù)據(jù)的交換。PHY的工作頻率一般是DDR controller的2倍或4倍,也即,DDR controller的一個時鐘周期對應(yīng)于PHY的2個或者4個時鐘周期。由于DDR SDRAM自身的構(gòu)造限制,在正常讀寫模式下,大部分命令之間都存在最小延時要求,而且讀寫命令與相應(yīng)的數(shù)據(jù)之間也有延時要求。例如,DDR controller接收到用戶連續(xù)下發(fā)的命令A(yù)和命令B后,在將命令A(yù)通過DFI傳輸?shù)絇HY之后,并不立即將命令B傳輸?shù)絇HY,而是先對命令B進(jìn)行時延處理,使命令B與其前一命令A(yù)之間的時延達(dá)到最小時延之后再將命令B通過DFI接口傳輸給PHY。又例如,DDR controller接收到用戶將數(shù)據(jù)“a1,a2,a3”寫入存儲器的請求之后,并不是將寫入請求與待寫入數(shù)據(jù)一起傳送給PHY,而是先發(fā)送寫入請求,然后在經(jīng)過一定的時延之后再將待寫入數(shù)據(jù)傳輸?shù)絇HY。命令與命令間、命令與數(shù)據(jù)之間需要一定的時延主要是數(shù)據(jù)存儲器側(cè)通過硬件電路處理用戶命令需要花費(fèi)一定的時間,因此時延是必須的。
精確控制命令與命令或命令與數(shù)據(jù)之間的時延,使時延保持為滿足要求的最小時延對提高DDR SDRAM的帶寬利用率極為關(guān)鍵。而為了精確控制這些時延,一般是通過多個計時器來進(jìn)行延時處理,計時器的啟動與結(jié)束需要由大量的組合邏輯電路控制,這些組合邏輯間甚至還存在反饋。例如有兩個連續(xù)的命令A(yù)、B,在DDR controller將命令A(yù)傳輸?shù)絇HY時,DDR controller需要啟動與命令A(yù)、B間時延對應(yīng)的各計時器計時,使各計時器同時開始計時。這個控制過程需要大量的組合邏輯電路在精準(zhǔn)的時刻工作,達(dá)到各計時器同步開啟計時的效果,但由于組合邏輯電路本身因素,很難在較短的時間內(nèi)使各計時器達(dá)到同步啟動的效果,因此,DDR controller需要給予充足的時間,保證各計時器均準(zhǔn)備完成后再開始計時。這嚴(yán)重影響到DDR controller的時序,導(dǎo)致DDR controller工作最高頻率受到極大限制。而根據(jù)DFI的協(xié)議規(guī)定,DDR controller的頻率與PHY頻率有固定的倍數(shù)關(guān)系的,降低controller的頻率將導(dǎo)致DDR SDRAM的帶寬利用率成倍下降。
技術(shù)實現(xiàn)要素:
本發(fā)明提供的指令延時控制方法、控制器以及存儲器,主要解決的技術(shù)問題是:提供一種延時控制方案,用以解決現(xiàn)有技術(shù)中因控制命令與命令間時延對應(yīng)的組合邏輯電路復(fù)雜,在進(jìn)行延時處理時需要花費(fèi)額外的等待時間,進(jìn)而降低DDR controller工作頻率的問題。
為解決上述技術(shù)問題,本發(fā)明提供一種指令延時控制方法,包括:
確定接收到的當(dāng)前請求指令是否滿足預(yù)設(shè)條件,所述預(yù)設(shè)條件包括所述當(dāng)前請求指令與前一請求指令之間的最小時延大于0;
所述當(dāng)前請求指令滿足預(yù)設(shè)條件時,在所述當(dāng)前請求指令之前插入至少一個周期的空白指令;
對所述當(dāng)前請求指令進(jìn)行延時處理,使所述當(dāng)前請求指令與所述前一請求指令之間的時延滿足對應(yīng)的最小時延的要求;
將所述當(dāng)前請求指令分配到數(shù)據(jù)命令接口的通道上以將其傳輸至物理層傳輸通道。
進(jìn)一步,若所述數(shù)據(jù)命令接口通道包括4個通道,將所述當(dāng)前請求指令分配到數(shù)據(jù)命令接口的通道之前包括:
從所述4個通道中指定一個作為第一通道以供激活指令、自刷新指令以及全部預(yù)充電指令共用,并從所述4個通道中指定兩個第二通道以供讀指令/帶預(yù)充電的讀指令、寫指令/帶預(yù)充電的寫指令以及預(yù)充電指令共用,所述兩個第二通道之間間隔有一個通道;
將所述當(dāng)前請求指令分配到數(shù)據(jù)命令接口的通道包括:將所述當(dāng)前請求指令分配到預(yù)先為其指定的數(shù)據(jù)命令接口通道上。
進(jìn)一步,若所述數(shù)據(jù)命令接口通道包括2個通道,將所述當(dāng)前請求指令分配到數(shù)據(jù)命令接口的通道之前包括:
從所述2個通道中指定一個作為第一通道以供激活指令、自刷新指令以及全部預(yù)充電指令共用,并將所述兩個通道均作為第二通道以供讀指令/帶預(yù)充電的讀指令、寫指令/帶預(yù)充電的寫指令以及預(yù)充電指令共用;
將所述當(dāng)前請求指令分配到數(shù)據(jù)命令接口的通道包括:將所述當(dāng)前請求指令分配到預(yù)先為其指定的數(shù)據(jù)命令接口通道上。
進(jìn)一步,插入的所述空白指令所占用的時長小于等于所述當(dāng)前請求指令與所述前一請求指令之間的最小時延。
進(jìn)一步,所述預(yù)設(shè)條件還包括:接收到所述當(dāng)前請求指令的概率大于等于預(yù)設(shè)閾值。
進(jìn)一步,當(dāng)接收到所述當(dāng)前請求指令的概率小于預(yù)設(shè)閾值時,按照第一預(yù)設(shè)時延的要求控制所述當(dāng)前請求指令與所述前一請求指令之間的時延,所述第一預(yù)設(shè)時延大于等于所述當(dāng)前請求指令與所述前一請求指令之間的最小時延。
進(jìn)一步,對所述當(dāng)前請求指令進(jìn)行延時處理之前包括:
自所述前一請求指令分配到預(yù)先為其指定的數(shù)據(jù)命令接口通道起,在處理插入空白指令期間完成對所述當(dāng)前請求指令進(jìn)行延時計時的各計時器的計時準(zhǔn)備;
對所述當(dāng)前請求指令進(jìn)行延時處理包括:通過所述各計時器的計時控制對所述當(dāng)前請求指令進(jìn)行延時。
本發(fā)明還提供一種控制器,包括:
條件判斷模塊,用于確定接收到的當(dāng)前請求指令是否滿足預(yù)設(shè)條件,所述預(yù)設(shè)條件包括所述當(dāng)前請求指令與前一請求指令之間的最小時延大于0;
指令插入模塊,用于所述當(dāng)前請求指令滿足預(yù)設(shè)條件時,在所述當(dāng)前請求指令之前插入至少一個周期的空白指令;
延時處理模塊,用于對所述當(dāng)前請求指令進(jìn)行延時處理,使所述當(dāng)前請求指令與所述前一請求指令之間的時延滿足對應(yīng)的最小時延的要求;
通道分配模塊,用于將所述當(dāng)前請求指令分配到數(shù)據(jù)命令接口的通道上以將其傳輸至物理層傳輸通道。
進(jìn)一步,條件判斷模塊用于判斷所述當(dāng)前請求指令與前一請求指令之間的最小時延是否大于0,并確定接收到所述當(dāng)前請求指令的概率是否大于等于預(yù)設(shè)閾值;在所述當(dāng)前請求指令與前一請求指令之間的最小時延大于0,且接收到所述當(dāng)前請求指令的概率大于等于預(yù)設(shè)閾值時,判斷所述當(dāng)前請求指令滿足預(yù)設(shè)條件。
本發(fā)明還提供一種存儲器器,包括用戶接口、數(shù)據(jù)命令接口、物理層傳輸通道、數(shù)據(jù)存儲器以及如上所述的控制器;所述數(shù)據(jù)存儲器與所述控制器通過所述物理層傳輸通道連接。
本發(fā)明的有益效果是:
本發(fā)明提供的指令延時控制方法、控制器以及存儲器,通過對接收到的當(dāng)前請求指令進(jìn)行判斷,確定當(dāng)前請求指令是否滿足包括與前一請求指令之間存在時延的預(yù)設(shè)要求,當(dāng)確定當(dāng)前請求指令滿足預(yù)設(shè)條件時,在當(dāng)前請求指令之前插入至少一個周期的空白指令。插入空白指令之后再對當(dāng)前請求指令進(jìn)行延時處理,使當(dāng)前請求指令與插入空白指令之前的“前一請求指令”之間的時延滿足對應(yīng)的最小時延要求,然后將當(dāng)前請求指令分配到數(shù)據(jù)命令接口的通道上以將其傳輸至物理層傳輸通道。在本發(fā)明當(dāng)中,利用了滿足預(yù)設(shè)條件的當(dāng)前請求指令與其前一請求指令之間本來就存在時延的特點(diǎn),在對當(dāng)前請求指令進(jìn)行延時處理之前,先插入空白指令,使得當(dāng)前請求指令與前一請求指令之間不再連續(xù)。而且由于空白指令與任何指令之間均不存在延時要求,因此,在對空白指令進(jìn)行傳輸?shù)钠陂g,當(dāng)前請求指令與前一請求指令間時延對應(yīng)計時器的組合邏輯電路可以做好計時準(zhǔn)備,當(dāng)空白指令傳輸完成之后,控制器不需要等待,就可以直接開始工作。因此控制器的工作頻率得到了提升,進(jìn)而提升了帶寬利用率。另一方面,由于部分命令間插入了不需要組合邏輯電路工作的空白指令,因此組合邏輯電路不需要隨時保持高速切換,這提升了控制器的魯棒性。
附圖說明
圖1為本發(fā)明實施例一提供的指令延時控制方法的一種流程圖;
圖2為本發(fā)明各實施例種存儲器的一種硬件結(jié)構(gòu)示意圖;
圖3為插入空白指令之前指令幀格式的一種結(jié)構(gòu)示意圖;
圖4為插入空白指令之后指令幀格式的一種結(jié)構(gòu)示意圖;
圖5為本發(fā)明實施例二提供的控制器的一種結(jié)構(gòu)示意圖;
圖6為本發(fā)明實施例二中部署控制器的終端的一種硬件結(jié)構(gòu)示意圖;
圖7為本發(fā)明實施例三提供的控制器的一種架構(gòu)圖。
具體實施方式
下面通過具體實施方式結(jié)合附圖對本發(fā)明實施例作進(jìn)一步詳細(xì)說明。
實施例一:
為了解決現(xiàn)有技術(shù)中因控制命令與命令間時延對應(yīng)的組合邏輯電路復(fù)雜,在進(jìn)行延時處理時需要花費(fèi)額外的等待時間,進(jìn)而使得DDR controller工作頻率降低的問題,本實施例提供一種指令延時控制方法,請參見圖1:
S102、確定接收到的當(dāng)前請求指令是否滿足預(yù)設(shè)條件。
圖2示出的是一種存儲器的結(jié)構(gòu)示意圖,存儲器2包括控制器20、用戶接口21、數(shù)據(jù)命令接口22、數(shù)據(jù)存儲器23,其中數(shù)據(jù)存儲器23與數(shù)據(jù)命令接口22之間通過物理層傳輸通道24連接。用戶可以通過用戶接口21下發(fā)請求指令或與請求指令對應(yīng)的數(shù)據(jù)等??刂破?0在通過用戶接口21接收到請求指令或數(shù)據(jù)之后,可以對請求指令或數(shù)據(jù)進(jìn)行處理,這其中自然也包括指令間或指令與數(shù)據(jù)間的延時處理。處理完成之后,通過數(shù)據(jù)命令接口22傳輸?shù)轿锢韺觽鬏斖ǖ?4上,由物理層傳輸通道24將指令傳輸?shù)綌?shù)據(jù)存儲器23中,進(jìn)行數(shù)據(jù)讀?。换蛘呖刂破?0通過數(shù)據(jù)命令接口22依次將用戶下發(fā)的請求指令與待寫入數(shù)據(jù)發(fā)送到物理層傳輸通道24上,進(jìn)而完成待寫入數(shù)據(jù)在數(shù)據(jù)存儲器23上的寫入。
在本實施例中,存儲器可以是DDR存儲器,DDR存儲器又可以是DDR SDRAM、DDR2SDRAM、DDR3SDRAM以及DDR4SDRAM、LPDDR(Low Power Double Data Rate SDRAM,低功率雙倍速率同步動態(tài)隨機(jī)存儲器)、LPDDR2、LPDDR3等類型。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解的是,DDR存儲器中,DDR controller不參與PHY的初始化(Initialization)、寫入校準(zhǔn)(write leveling)以及讀取校準(zhǔn)(read leveling)等過程,只有PHY工作正常以后,DDR controller與PHY之間才存在正常的數(shù)據(jù)與命令傳遞。因此,本實施例中提供的指令延時控制方法僅僅針對有控制器參與的過程,對于上述初始化命令、寫入校準(zhǔn)以及讀取校準(zhǔn)等,則可以不進(jìn)行控制。
與數(shù)據(jù)存儲器23上的數(shù)據(jù)讀寫相關(guān)的請求指令包括rd(讀指令)、wr(寫指令)、act(激活指令)等。由于DDR的讀寫尋址的具有獨(dú)占性,因此在讀寫操作后,若對同一bank的另一行進(jìn)行尋址,就要將原來的有效工作行關(guān)閉,這一操作稱為pre(Precharge,預(yù)充電)。除了單獨(dú)的PRE請求指令以外,DDR中也提供也wra(帶預(yù)充電的寫指令)和rda(帶預(yù)充電的讀指令)。
控制器發(fā)送到PHY的命令,除了數(shù)據(jù)讀寫相關(guān)的命令以外,還包括:控制使DDR SDRAM進(jìn)入低功耗的掉電(Power Down)模式或自刷新(Self-Refresh)模式的命令,掉電模式或自刷新模式能夠在很大程度上降低DDR SDRAM功耗;對DDR3SDRAM內(nèi)部的寄存器中的讀寫時序參數(shù)進(jìn)行修改的命令,以滿足不同頻率讀寫的需求;刷新(Refresh)命令,用于定期對DDR SDRAM進(jìn)行數(shù)據(jù)刷新,防止DDR SDRAM保存的數(shù)據(jù)丟失。
若當(dāng)前請求指令滿足預(yù)設(shè)條件,則控制器將會在當(dāng)前請求指令與前一請求指令之間插入至少一個周期的空白指令。而本實施例中,控制器對指令間的時延控制本來就是利用了指令之間的固有時延,因此,在本實施例中預(yù)設(shè)條件包括當(dāng)前請求指令與前一請求指令之間的最小時延大于0,也就是說當(dāng)前請求指令與前一請求指令之間本來存在固有時延。
在本實施例的另外一些示例當(dāng)中,預(yù)設(shè)條件還包括接收到當(dāng)前請求指令的概率大于等于預(yù)設(shè)閾值。這一條件是為了篩除不常用的請求指令,例如MRS(狀態(tài)傳送指令)、SRE(自刷新進(jìn)入指令)/SRX(自刷新退出指令)以及PDE(掉電進(jìn)入指令)/PDX(掉電退出指令)等,這些請求指令并不常用,所以并不需要對這些請求指令的時延進(jìn)行精確控制,為了保證僅將控制器有限的處理資源運(yùn)用于常見請求指令時延的控制,以達(dá)到更好的時延控制效果,因此,在本實施例中通過接收到當(dāng)前請求指令的概率大于等于預(yù)設(shè)閾值這一預(yù)設(shè)條件排除一些不常見的指令。
預(yù)設(shè)閾值可以由用戶設(shè)定,預(yù)設(shè)閾值的大小將會決定出哪些請求指令會被進(jìn)行精確時延控制,而哪些請求指令則不會。用戶設(shè)定預(yù)設(shè)閾值的時候可以基于一段較長時間的統(tǒng)計結(jié)果進(jìn)行,例如統(tǒng)計用戶在一個月的時間內(nèi)輸入各請求指令的頻率,計算出接收各請求指令的概率,然后根據(jù)用戶的指令時延控制要求確定將預(yù)設(shè)閾值設(shè)置為多大。
對于經(jīng)過預(yù)設(shè)條件篩選后,不滿足預(yù)設(shè)條件的請求指令,可以直接按照現(xiàn)有方式進(jìn)行時延控制,也可以進(jìn)一步進(jìn)行分類控制,例如:當(dāng)前請求指令與前一請求指令之間的最小時延等于0,也即當(dāng)前指令與前一請求指令之間并不存在固有時延,這時候,可以將直接對當(dāng)前請求指令按照現(xiàn)有時延控制方式進(jìn)行控制。若接收到當(dāng)前請求指令的概率低于預(yù)設(shè)閾值,控制器可以直接按照現(xiàn)有方式進(jìn)行控制。也可以按照第一預(yù)設(shè)時延的要求控制當(dāng)前請求指令與前一請求指令之間的時延,第一預(yù)設(shè)時延大于等于當(dāng)前請求指令與前一請求指令之間的最小時延。也就是說,將當(dāng)前請求指令與前一請求指令間的時延設(shè)置得大一些,因為對不常用請求指令的時延控制精確與否并不會大程度的影響控制器的整體帶寬利用率。
S104、當(dāng)前請求指令滿足預(yù)設(shè)條件時,在當(dāng)前請求指令之前插入一個周期的空白指令。
當(dāng)控制器確定當(dāng)前請求指令滿足預(yù)設(shè)條件時,將會在當(dāng)前請求指令之前插入空白指令(DES指令)。插入空白指令的周期數(shù)通常為一個,但可以理解的是,如果當(dāng)前請求指令與前一請求指令之間的最小時延大于兩個指令周期,則插入空白指令的周期數(shù)也可以隨之增加,只要保證插入的空白指令所占用的時間小于等于當(dāng)前請求指令與前一請求指令之間的最小時延即可。
前面已經(jīng)介紹過了,請求指令間存在時延要求主要是由于DDR中硬件電路在處理前一請求指令的時候需要花費(fèi)一定的時間,為了避免控制器將當(dāng)前請求指令發(fā)送給PHY之后,前一請求指令的處理還未完成,會限定請求指令之間存在時延。本實施例中就是利用了請求指令間的最小時延,先利用空白指令對當(dāng)前請求指令進(jìn)行一個“時延預(yù)處理”,在“時延預(yù)處理”過程中,通過空白指令的插入,使得當(dāng)前請求指令與前一請求指令之間已經(jīng)存在一個時延,只是這個時延暫且不滿足最小時延的要求,需要后續(xù)過程進(jìn)行進(jìn)一步處理。更重要的是,通過空白指令的插入,使得當(dāng)前請求指令與前一請求指令之間不再緊鄰、不再連續(xù),這解除了當(dāng)前請求指令與前一請求指令間的耦合,使得當(dāng)前請求指令與前一請求指令之間由組合邏輯變成了時序邏輯。圖3和圖4分別示出了插入空白指令之前和插入空白指令之后的指令幀格式。
S106、對當(dāng)前請求指令進(jìn)行延時處理。
自前一請求指令分配到預(yù)先為其指定的數(shù)據(jù)命令接口通道起,在處理插入空白指令期間控制器需要完成對當(dāng)前請求指令進(jìn)行延時計時的各計時器的計時準(zhǔn)備,將各計時器的電平從無效狀態(tài)拉到有效狀態(tài)。當(dāng)空白指令到物理層傳輸通道的傳輸完成之后,控制器可以控制各計時器開始計時以實現(xiàn)延時處理。計時長度應(yīng)當(dāng)大于等于當(dāng)前請求指令與前一請求指令間的最小時延與插入的空白指令所占用時間之差。例如,當(dāng)前請求指令與前一請求指令之間最小時延為4個周期,而在此之前已經(jīng)插入了一個周期的空白指令,這時候的計時長度只要大于等于3個周期即可。為了實現(xiàn)時延的精確控制,計時長度最好等于使當(dāng)前請求指令與前一請求指令之間的時延滿足對應(yīng)的最小時延的要求。
S108、將當(dāng)前請求指令分配到數(shù)據(jù)命令接口的通道上以將其傳輸至物理層傳輸通道。
當(dāng)計時完成之后,控制器可以將當(dāng)前請求指令分配到數(shù)據(jù)命令接口的通道上,以便經(jīng)由物理層傳輸通道傳給數(shù)據(jù)存儲器,傳輸當(dāng)前請求指令所使用的通道可以是由用戶預(yù)先指定確定的。
在本實施例中,由于PHY的工作頻率是DDR controller的2倍或4倍,因此,控制器的一個時鐘周期對應(yīng)于PHY的2個或者4個時鐘周期,這就相當(dāng)于PHY具有2條或4條通道,而數(shù)據(jù)命令接口的工作頻率與PHY的相同,也就是說,數(shù)據(jù)命令接口也有2條或4條與PHY相連的通道。在本實施例中,數(shù)據(jù)命令接口包括但不限于DFI接口,其可以實現(xiàn)數(shù)據(jù)信息、命令信息、狀態(tài)信息、Debug(調(diào)試)信息、Training(訓(xùn)練)信息等的傳輸。
當(dāng)數(shù)據(jù)命令接口具有兩個通道時,控制器可以根據(jù)用戶的指示從2個通道中指定一個作為第一通道以供激活act、ref,prea指令共用,并將兩個通道均作為第二通道以供rd/rda,wr/wra以及pre指令共用。在這種情況下,rd/rda,wr/wra以及pre指令無論在哪個通道上都可以進(jìn)行傳輸。也就是說,當(dāng)這些請求指令傳輸?shù)綌?shù)據(jù)命令接口時,數(shù)據(jù)命令接口的兩個通道中,當(dāng)前哪一個處于有效工作狀態(tài)就使用哪一個進(jìn)行傳輸,完全不需要等待。而prea,ref和act指令的時延誤差嚴(yán)格控制在1個PHY時鐘誤差,因為,如果prea,ref和act指令傳輸?shù)綌?shù)據(jù)命令接口時,數(shù)據(jù)命令接口的兩個通道中處于有效工作狀態(tài)的通道不是預(yù)先指定的通道,則控制器將等待PHY的另一個通道有效工作的時候再傳輸這些請求指令,這需要等待一個PHY時鐘周期;否則,若prea,ref和act指令傳輸?shù)綌?shù)據(jù)命令接口時,數(shù)據(jù)命令接口的兩個通道中處于有效工作狀態(tài)的通道恰好是預(yù)先指定的通道,則控制器不需要等待就可以直接將請求指令傳輸出去。
當(dāng)數(shù)據(jù)命令接口具有4個通道時,控制器可以根據(jù)用戶的指示從4個通道中指定一個作為第一通道以供激活act、ref,prea指令共用,并從4個通道中指定兩個第二通道以供rd/rda,wr/wra以及pre指令共用,且指定出的兩個第二通道之間間隔有一個通道。與兩個通道的情況類似,在這種情況下,控制器可以將rd/rda,wr/wra,pre請求指令的時延誤差嚴(yán)格控制在1個PHY時鐘周期,而對于prea,ref和act的請求指令的時延誤差約束在3個PHY時鐘周期。
本發(fā)明實施例提供的指令延時控制方法,控制器通過在本來就具有時延的指令間插入空白指令,使得兩個相鄰的請求指令不隔離開,不再相鄰,從而使得連續(xù)的請求指令得以“解耦”,從組合邏輯控制變成時序邏輯控制。在對空白指令進(jìn)行傳輸?shù)钠陂g,當(dāng)前請求指令與前一請求指令間時延對應(yīng)計時器的組合邏輯電路可以做好計時準(zhǔn)備,當(dāng)空白指令傳輸完成之后,控制器不需要等待,就可以直接開始工作。最終使得控制器的工作頻率得到了提升,進(jìn)而提升了帶寬利用率。另一方面,由于部分命令間插入了不需要組合邏輯電路工作的空白指令,因此組合邏輯電路不需要隨時保持高速切換,這提升了控制器的魯棒性。
實施例二:
本實施例先提供一種控制器,下面請參見圖5所示出的控制器的一種結(jié)構(gòu)示意圖:
控制器20包括條件判斷模塊202、指令插入模塊204、延時處理模塊206以及通道分配模塊208,條件判斷模塊202用于確定接收到的當(dāng)前請求指令是否滿足預(yù)設(shè)條件,指令插入模塊204用于在條件判斷模塊202的判斷結(jié)果為是時,在當(dāng)前請求指令之前插入至少一個周期的空白指令,延時處理模塊206用于對當(dāng)前請求指令進(jìn)行延時處理,使當(dāng)前請求指令與前一請求指令之間的時延滿足對應(yīng)的最小時延的要求;而通道分配模塊208則在對當(dāng)前請求指令的延時處理完成之后,將當(dāng)前請求指令分配到數(shù)據(jù)命令接口的通道上以將其傳輸至物理層傳輸通道。
本實施例中還提供一種存儲器,圖2示出的是該存儲器的結(jié)構(gòu)示意圖,存儲器2包括控制器20、用戶接口21、數(shù)據(jù)命令接口22、數(shù)據(jù)存儲器23,其中數(shù)據(jù)存儲器23與數(shù)據(jù)命令接口22之間通過物理層傳輸通道24連接。用戶可以通過用戶接口21下發(fā)請求指令或與請求指令對應(yīng)的數(shù)據(jù)等??刂破?0在通過用戶接口21接收到請求指令或數(shù)據(jù)之后,可以對請求指令或數(shù)據(jù)進(jìn)行處理,這其中自然也包括指令間或指令與數(shù)據(jù)間的延時處理。處理完成之后,通過數(shù)據(jù)命令接口22傳輸?shù)轿锢韺觽鬏斖ǖ?4上,由物理層傳輸通道24將指令傳輸?shù)綌?shù)據(jù)存儲器23中,進(jìn)行數(shù)據(jù)讀取;或者控制器20通過數(shù)據(jù)命令接口22依次將用戶下發(fā)的請求指令與待寫入數(shù)據(jù)發(fā)送到物理層傳輸通道24上,進(jìn)而完成待寫入數(shù)據(jù)在數(shù)據(jù)存儲器23上的寫入。
在本實施例中,以DDR作為上述存儲器,DDR存儲器又可以是DDR SDRAM、DDR2SDRAM、DDR3SDRAM以及DDR4SDRAM、LPDDR、LPDDR2、LPDDR3等類型。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解的是,DDR存儲器中,DDR controller不參與PHY的初始化、寫入校準(zhǔn)以及讀取校準(zhǔn)等過程,只有PHY工作正常以后,DDR controller與PHY之間才存在正常的數(shù)據(jù)與命令傳遞。因此,本實施例中控制器可以不對上述初始化命令、寫入校準(zhǔn)以及讀取校準(zhǔn)指令等進(jìn)行控制。
與數(shù)據(jù)存儲器23上的數(shù)據(jù)讀寫相關(guān)的請求指令包括rd、wr、act等。由于DDR的讀寫尋址的具有獨(dú)占性,因此在讀寫操作后,若對同一bank的另一行進(jìn)行尋址,就要將原來的有效工作行關(guān)閉,這一操作稱為pre。除了單獨(dú)的PRE請求指令以外,DDR中也提供也帶預(yù)充電的寫指令和帶預(yù)充電的讀指令。
通道分配模塊208發(fā)送到PHY的命令,除了數(shù)據(jù)讀寫相關(guān)的命令以外,還包括:控制使DDR SDRAM進(jìn)入低功耗的掉電模式或自刷新模式的命令,掉電模式或自刷新模式能夠在很大程度上降低DDR SDRAM功耗;對DDR3SDRAM內(nèi)部的寄存器中的讀寫時序參數(shù)進(jìn)行修改的命令,以滿足不同頻率讀寫的需求;刷新命令,用于定期對DDR SDRAM進(jìn)行數(shù)據(jù)刷新,防止DDR SDRAM保存的數(shù)據(jù)丟失。
若當(dāng)前請求指令滿足預(yù)設(shè)條件,則指令插入模塊204將會在當(dāng)前請求指令與前一請求指令之間插入至少一個周期的空白指令。而本實施例中,控制器20對指令間的時延控制本來就是利用了指令之間的固有時延,因此,在本實施例中,條件判斷模塊202用于判斷的預(yù)設(shè)條件包括當(dāng)前請求指令與前一請求指令之間的最小時延大于0,也就是說當(dāng)前請求指令與前一請求指令之間本來存在固有時延。
在本實施例的另外一些示例當(dāng)中,預(yù)設(shè)條件還包括接收到當(dāng)前請求指令的概率大于等于預(yù)設(shè)閾值。這一條件是為了篩除不常用的請求指令,例如MRS、SRE/SRX以及PDE/PDX等,這些請求指令并不常用,所以并不需要對這些請求指令的時延進(jìn)行精確控制,為了保證僅將控制器20有限的處理資源運(yùn)用于常見請求指令時延的控制,以達(dá)到更好的時延控制效果,因此,在本實施例中條件判斷模塊202通過接收到當(dāng)前請求指令的概率大于等于預(yù)設(shè)閾值這一預(yù)設(shè)條件排除一些不常見的指令。
預(yù)設(shè)閾值可以由用戶設(shè)定,預(yù)設(shè)閾值的大小將會決定出哪些請求指令會被進(jìn)行精確時延控制,而哪些請求指令不會。用戶設(shè)定預(yù)設(shè)閾值的時候可以基于一段較長時間的統(tǒng)計結(jié)果進(jìn)行,例如統(tǒng)計用戶在一個月的時間內(nèi)輸入各請求指令的頻率,計算出接收各請求指令的概率,然后根據(jù)用戶的指令時延控制要求確定將預(yù)設(shè)閾值設(shè)置為多大。
對于經(jīng)過條件判斷模塊202基于預(yù)設(shè)條件的篩選后,不滿足預(yù)設(shè)條件的請求指令,可以直接按照現(xiàn)有方式進(jìn)行時延控制,也可以進(jìn)一步進(jìn)行分類控制,例如:當(dāng)前請求指令與前一請求指令之間的最小時延等于0,也即當(dāng)前指令與前一請求指令之間并不存在固有時延,這時候,可以將直接對當(dāng)前請求指令按照現(xiàn)有時延控制方式進(jìn)行控制。若接收到當(dāng)前請求指令的概率低于預(yù)設(shè)閾值,控制器20可以直接按照現(xiàn)有方式進(jìn)行控制。也可以按照第一預(yù)設(shè)時延的要求控制當(dāng)前請求指令與前一請求指令之間的時延,第一預(yù)設(shè)時延大于等于當(dāng)前請求指令與前一請求指令之間的最小時延。也就是說,將當(dāng)前請求指令與前一請求指令間的時延設(shè)置得大一些,因為對不常用請求指令的時延控制精確與否并不會大程度的影響控制器20的整體工作頻率。
當(dāng)條件判斷模塊202確定當(dāng)前請求指令滿足預(yù)設(shè)條件時,指令插入模塊204將會在當(dāng)前請求指令之前插入空白指令。插入空白指令的周期數(shù)通常為一個,但可以理解的是,如果當(dāng)前請求指令與前一請求指令之間的最小時延大于兩個指令周期,則指令插入模塊204插入空白指令的周期數(shù)也可以隨之增加,只要保證插入的空白指令所占用的時間小于等于當(dāng)前請求指令與前一請求指令之間的最小時延即可。
前面已經(jīng)介紹過了,請求指令間存在時延要求主要是由于DDR中硬件電路在處理前一請求指令的時候需要花費(fèi)一定的時間,為了避免通道分配模塊208將當(dāng)前請求指令發(fā)送給PHY之后,前一請求指令的處理還未完成,會限定請求指令之間存在時延。本實施例中就是利用了請求指令間的最小時延,指令插入模塊204先利用空白指令對當(dāng)前請求指令進(jìn)行一個“時延預(yù)處理”,在“時延預(yù)處理”過程中,通過空白指令的插入,使得當(dāng)前請求指令與前一請求指令之間已經(jīng)存在一個時延,只是這個時延暫且不滿足最小時延的要求,需要后續(xù)過程延時處理模塊206進(jìn)行進(jìn)一步處理。更重要的是,通過空白指令的插入,使得當(dāng)前請求指令與前一請求指令之間不再緊鄰、不再連續(xù),這解除了當(dāng)前請求指令與前一請求指令間的耦合,使得當(dāng)前請求指令與前一請求指令之間由組合邏輯變成了時序邏輯。圖3和圖4分別示出了插入空白指令之前和插入空白指令之后的指令幀格式。
自前一請求指令分配到預(yù)先為其指定的數(shù)據(jù)命令接口通道起,在處理插入空白指令期間延時處理模塊206需要完成對當(dāng)前請求指令進(jìn)行延時計時的各計時器的計時準(zhǔn)備,將各計時器的電平從無效狀態(tài)拉到有效狀態(tài)。當(dāng)空白指令到物理層傳輸通道的傳輸完成之后,延時處理模塊206可以控制各計時器開始計時以實現(xiàn)延時處理。計時長度應(yīng)當(dāng)大于等于當(dāng)前請求指令與前一請求指令間的最小時延與插入的空白指令所占用時間之差。例如,當(dāng)前請求指令與前一請求指令之間最小時延為4個周期,而在此之前已經(jīng)插入了一個周期的空白指令,這時候的計時長度只要大于等于3個周期即可。為了實現(xiàn)時延的精確控制,計時長度最好等于使當(dāng)前請求指令與前一請求指令之間的時延滿足對應(yīng)的最小時延的要求。
當(dāng)延時處理模塊206計時完成之后,通道分配模塊208可以將當(dāng)前請求指令分配到數(shù)據(jù)命令接口的通道上,以便經(jīng)由物理層傳輸通道傳給數(shù)據(jù)存儲器,傳輸當(dāng)前請求指令所使用的通道可以是由用戶預(yù)先指定確定的。
在本實施例中,由于PHY的工作頻率是DDR controller的2倍或4倍,因此,控制器20的一個時鐘周期對應(yīng)于PHY的2個或者4個時鐘周期,而數(shù)據(jù)命令接口的工作頻率與PHY的相同,也就是說,數(shù)據(jù)命令接口也有2條或4條與PHY相連的通道。在本實施例中,數(shù)據(jù)命令接口包括但不限于DFI接口,其可以實現(xiàn)數(shù)據(jù)信息、命令信息、狀態(tài)信息、Debug信息、Training信息等的傳輸。
當(dāng)數(shù)據(jù)命令接口具有兩個通道時,控制器20可以根據(jù)用戶的指示從2個通道中指定一個作為第一通道以供激活act、ref,prea指令共用,并將兩個通道均作為第二通道以供rd/rda,wr/wra以及pre指令共用。在這種情況下,rd/rda,wr/wra以及pre指令無論在哪個通道上都可以進(jìn)行傳輸。也就是說,當(dāng)這些請求指令傳輸?shù)綌?shù)據(jù)命令接口時,數(shù)據(jù)命令接口的兩個通道中,當(dāng)前哪一個處于有效工作狀態(tài)就使用哪一個進(jìn)行傳輸,完全不需要等待。而prea,ref和act指令的時延誤差嚴(yán)格控制在1個PHY時鐘誤差,因為,如果prea,ref和act指令傳輸?shù)綌?shù)據(jù)命令接口時,數(shù)據(jù)命令接口的兩個通道中處于有效工作狀態(tài)的通道不是預(yù)先指定的通道,則通道分配模塊208將等待PHY的另一個通道有效工作的時候再傳輸這些請求指令,這需要等待一個PHY時鐘周期;否則,若prea,ref和act指令傳輸?shù)綌?shù)據(jù)命令接口時,數(shù)據(jù)命令接口的兩個通道中處于有效工作狀態(tài)的通道恰好是預(yù)先指定的通道,則通道分配模塊208不需要等待就可以直接將請求指令傳輸出去。
當(dāng)數(shù)據(jù)命令接口具有4個通道時,控制器20可以根據(jù)用戶的指示從4個通道中指定一個作為第一通道以供激活act、ref,prea指令共用,并從4個通道中指定兩個第二通道以供rd/rda,wr/wra以及pre指令共用,且指定出的兩個第二通道之間間隔有一個通道。與兩個通道的情況類似,在這種情況下,通道分配模塊208可以將rd/rda,wr/wra,pre請求指令的時延誤差嚴(yán)格控制在1個PHY時鐘周期,而對于prea,ref和act的請求指令的時延誤差約束在3個PHY時鐘周期。
本實施例中的控制器可以部署在與存儲器連接的中終端處理器上,如圖6所示,終端60包括處理器6與存儲器2、輸入單元7,控制器中條件判斷模塊、指令插入模塊、延時處理模塊以及通道分配模塊的功能均可以通過處理器6實現(xiàn),當(dāng)處理器6通過輸入單元7接收到用戶輸入的當(dāng)前請求指令,并確定當(dāng)前請求指令滿足預(yù)設(shè)條件之后,會將當(dāng)前請求指令存儲到緩沖區(qū)中,當(dāng)空白指令的傳輸完成后再提取當(dāng)前請求指令進(jìn)行延時處理,然后為之分配到數(shù)據(jù)命令接口的通道上以將其傳輸至物理層傳輸通道。
本發(fā)明實施例提供的控制器,通過在本來就具有時延的指令間插入空白指令,使得兩個相鄰的請求指令不隔離開,不再相鄰,從而使得連續(xù)的請求指令得以“解耦”,從組合邏輯控制變成時序邏輯控制。在對空白指令進(jìn)行傳輸?shù)钠陂g,當(dāng)前請求指令與前一請求指令間時延對應(yīng)計時器的組合邏輯電路可以做好計時準(zhǔn)備,當(dāng)空白指令傳輸完成之后,控制器不需要等待,就可以直接開始工作。最終使得控制器的工作頻率得到了提升,進(jìn)而提升了帶寬利用率。另一方面,由于部分命令間插入了不需要組合邏輯電路工作的空白指令,因此組合邏輯電路不需要隨時保持高速切換,這提升了控制器的魯棒性。
實施例三:
圖7示出的是本實施例提供的控制器70的架構(gòu)圖,控制器70通過用戶接口71接收到當(dāng)前請求指令,進(jìn)而判斷當(dāng)前請求指令是否是常見指令,如否,例如當(dāng)前請求指令是MRS,SRE/SRX,PDE/PDX中的任意一個,則直接可以根據(jù)預(yù)先為這些指令設(shè)置的比較寬裕的第一時延進(jìn)行延時控制。如果當(dāng)前請求指令是rd/rda,wr/wra,act,pre/prea,ref這些常見請求指令中的任意一個,則進(jìn)一步確定其與前一請求指令之間是否具有大于0的最小時延。表1中示出了兩個相鄰請求指令間的時延要求以供參考:
表1
當(dāng)根據(jù)表1確定當(dāng)前請求指令與前一請求指令之間不存在時延時,即二者之間可無縫操作時,控制器70直接將當(dāng)前請求指令發(fā)送到預(yù)取隊列73,由預(yù)取隊列將其發(fā)送給DFI接口74。如果控制器70確定當(dāng)前請求指令與前一請求指令間存在時延要求時,控制器70將當(dāng)前請求指令存儲到緩沖區(qū)72當(dāng)中,同時將至少一個周期的空白指令傳輸?shù)筋A(yù)取隊列73中;當(dāng)空白指令傳輸?shù)紻FI接口74后,控制器70控制將緩沖區(qū)72中存儲的當(dāng)前請求指令傳輸至預(yù)取隊列73中,利用計時器對當(dāng)前請求指令進(jìn)行延時處理之后,再從預(yù)取隊列73中按照先入先出原則提取當(dāng)前請求指令將其傳輸給DFI接口74并按照預(yù)先指定的通道傳輸至物理層傳輸通道。
本實施例中提供的控制器,針對出現(xiàn)概率較小的請求指令,不會花費(fèi)大量的資源對其時延進(jìn)行精確控制,從而節(jié)省了處理資源以更好地對出現(xiàn)概率較大的請求指令進(jìn)行精確時延控制,優(yōu)化了資源配置。另外控制器通過插入空白指令對于前一請求指令存在時延的當(dāng)前請求指令進(jìn)行“時延預(yù)處理”,使得當(dāng)前請求指令與前一請求指令之間不再緊鄰、不再連續(xù),解除了當(dāng)前請求指令與前一請求指令間的耦合,使得當(dāng)前請求指令與前一請求指令之間由組合邏輯變成了時序邏輯。并且給了后續(xù)需要參與計時的各計時器足夠的時間進(jìn)行計時準(zhǔn)備,使得組合邏輯電路不需要隨時保持高速切換,這提升了控制器的魯棒性。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述本發(fā)明實施例的各模塊或各步驟可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在計算機(jī)存儲介質(zhì)(ROM/RAM、磁碟、光盤)中由計算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。所以,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上內(nèi)容是結(jié)合具體的實施方式對本發(fā)明實施例所作的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實施只局限于這些說明。對于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。