專利名稱:一種高性能dsp處理器中的指令多發(fā)射方法
技術(shù)領(lǐng)域:
本發(fā)明涉及DSP處理器內(nèi)核的設(shè)計,具體是一種高性能DSP處理器中的指令多發(fā)
射方法。
背景技術(shù):
數(shù)字信號處理器DSP (Digital Signal Processor)是一種專門用于數(shù)字信號處理的微處理器,它能夠?qū)崟r快速完成各種數(shù)字信號的算法處理。由于DSP具有快速響應(yīng)和高速運(yùn)算的特點,因此它在消費(fèi)類電子、通信、航空航天以及國防安全等領(lǐng)域得到了廣泛的應(yīng)用。DSP微處理器的飛速發(fā)展對國防安全以及人們的日常生活都產(chǎn)生了巨大的影響。高性能DSP處理器的研發(fā)是世界上各個國家科技實力競爭的一個至高點,我國現(xiàn)在也非常重視在微處理器研發(fā)這一領(lǐng)域,目前有許多高校以及科研機(jī)構(gòu)都對微處理器展開了研究和設(shè)計工作,并且也取得了一定的成果,如“龍芯”、“方舟”、“銀河飛騰”相繼問世。但是由于我們國家在這一領(lǐng)域起步較晚,所研制出的處理器無論是在性能上還是在具體的實際應(yīng)用上都還無法與國外的芯片進(jìn)行競爭,在一些核心的關(guān)鍵技術(shù)上依然受制于人。因此研制具有我國自主知識產(chǎn)權(quán)的高性能處理器對我國經(jīng)濟(jì)發(fā)展和國防安全均具有重大意義。先進(jìn)的半導(dǎo)體加工工藝讓同等面積的硅片上面集成更多數(shù)量的晶體管成為可能,這為更高復(fù)雜度處理器芯片的實現(xiàn)提供了強(qiáng)有力的保障。與此同時,先進(jìn)的設(shè)計技術(shù)進(jìn)一步推動了高性能處理器的發(fā)展。比如指令的多發(fā)射技術(shù),使微處理器能夠在同一個時鐘周期發(fā)射和執(zhí)行多條指令,進(jìn)一步提高了處理器運(yùn)行指令的并行度,減少了各個路徑中每級流水線運(yùn)行所需的時間。指令的多發(fā)射技術(shù)極大促進(jìn)了處理器的性能提升。
發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有技術(shù)中存在的不足,提供一種高性能DSP處理器中的指令多發(fā)射方法,來提高整個DSP處理器性能。按照本發(fā)明提供的技術(shù)方案,一種高性能DSP處理器中的指令多發(fā)射方法,包括以下步驟
a.CPU取指單元發(fā)出取指地址,從指令緩存中取出所需的指令;如果指令緩存發(fā)生缺失,則從外部存儲單元中取指令,并更新相應(yīng)的緩存行;
b.將取到的指令對齊后放入預(yù)取緩沖器中,預(yù)取緩沖器根據(jù)CPU取指地址的偏移位將指令進(jìn)行排列對齊,將取值單元首次取到的指令對齊后放入預(yù)取緩沖器的低4位,將取值單元第2次取到的指令對齊后放入預(yù)取緩沖器的高4位,最后預(yù)取緩沖器將排列對齊好的指令放入取指緩沖器中等待發(fā)射到相對應(yīng)的流水線中;
c.取指緩沖器是一個堆棧結(jié)構(gòu),取指緩沖器低4位的指令通過發(fā)射寄存器發(fā)射出去后,取指緩沖器就將高4位中的指令開始下壓到取指緩沖器低4位,準(zhǔn)備下一次開始發(fā)射,并騰出高位的空間來存放來自預(yù)取緩沖器中的指令,等待發(fā)射;
d.指令的發(fā)射通過兩個發(fā)射寄存器第零發(fā)射寄存器和第一發(fā)射寄存器來實現(xiàn)指令的多發(fā)射,第零發(fā)射寄存器始終取取指緩沖器低位中的指令,第一發(fā)射寄存器取接下來的指令,并根據(jù)所取的指令的類型與大小,分別將指令發(fā)送到不同流水線中去。所述指令緩存的組織結(jié)構(gòu)采用兩路組相聯(lián)結(jié)構(gòu),行大小為256位,能夠支持取多條指令;對于不可緩存的地址,專門添加大小為256位行緩沖器作為單行緩存行。將指令從指令緩存中取到預(yù)取緩沖器中后,根據(jù)CPU取指地址的偏移位進(jìn)行排列對齊,并將排列對齊好的指令放入取指緩沖器中等待發(fā)射到相對應(yīng)的流水線中;取指緩沖器為一堆棧結(jié)構(gòu),每次取指時都是取取指緩沖器低位中的指令;當(dāng)取指緩沖器低位中的指令發(fā)送出去后,取指緩沖器中高位的指令就開始下壓到低位,并騰出高位的空間來存放來自指令緩存中的指令。第零發(fā)射寄存器與第一發(fā)射寄存器相互配合,負(fù)責(zé)從取指緩沖器中取指,并根據(jù)指令的大小與類型,將指令安排到不同的流水線中去;第零發(fā)射寄存器根據(jù)所取指令的類型,將指令發(fā)射到相應(yīng)流水線中,第一發(fā)射寄存器根據(jù)第零發(fā)射寄存器所取指令的大小,取取指緩沖器中接下來的指令,并判斷指令的類型,如果與第零發(fā)射寄存器所取指令類型相 同,則交給第零發(fā)射寄存器等待發(fā)射,避免流水線阻塞,如果與第零發(fā)射寄存器所取指令類型不同,則直接發(fā)送到另一流水線中;一旦發(fā)射寄存器中指令發(fā)送出去后,立即填入取指緩沖器中的指令。本發(fā)明的優(yōu)點是1.片外存儲單元地址的分為可Cache部分與不可Cache部分,對于不可Cache部分的這段地址空間來說,添加Line Buffer作為單行Cache,大大提高了這部分地址的取指效率。2.專門設(shè)計了兩個發(fā)射寄存器,來實現(xiàn)指令類型與大小的判斷,特別是第一發(fā)射寄存器,根據(jù)第零發(fā)射寄存器所取指令的類型與大小,確定接下來所取指令的大小,并且還要根據(jù)所取指令的類型,判斷出發(fā)送到哪一條流水線。用兩個發(fā)射寄存器來發(fā)送指令,大大提高了指令性的發(fā)射效率,提高了 DSP處理器的性能。
圖I為指令緩存(Cache)的組織結(jié)構(gòu)圖。圖2為行緩沖器(Line Buffer)結(jié)構(gòu)圖。圖3預(yù)取緩沖器(prefetch buffer)經(jīng)過對齊操作后存入取指緩沖器中(fetchbuffer)的示意圖。圖4指令的多發(fā)射原理圖。
具體實施例方式下面結(jié)合附圖和實施例對本發(fā)明作進(jìn)一步說明。本發(fā)明所述的高性能DSP處理器中的指令多發(fā)射方法,步驟如下
a.CPU取指單元發(fā)出取指地址,從指令緩存中取出所需的指令;如果指令緩存發(fā)生缺失,則從外部存儲單元中取指令,并更新相應(yīng)的緩存行;CPU取指單元每次取64位大小的指令;
b.將取到的指令對齊后放入預(yù)取緩沖器中,預(yù)取緩沖器總大小為128位,由8個16位預(yù)取緩沖器組成預(yù)取緩沖器0,預(yù)取緩沖器1,…預(yù)取緩沖器7。預(yù)取緩沖器根據(jù)CPU取指地址的偏移位將指令進(jìn)行排列對齊,將取值單元首次取到的指令對齊后放入預(yù)取緩沖器低4位預(yù)取緩沖器O、預(yù)取緩沖器I、預(yù)取緩沖器2、預(yù)取緩沖器3。將取值單元第2次取到的指令對齊后放入預(yù)取緩沖器高4位預(yù)取緩沖器4、預(yù)取緩沖器5、預(yù)取緩沖器6、預(yù)取緩沖器7。最后預(yù)取緩沖器將指令送到取指緩沖器中,等待發(fā)射到相對應(yīng)的流水線中;
c.取指緩沖器是一個大小為128位的堆棧結(jié)構(gòu),由8個16位取指緩沖器組成取指緩沖器O,取指緩沖器1,…取指緩沖器7。其中取指緩沖器低4位取指緩沖器O,取指緩沖器1,取指緩沖器2,取指緩沖器3中的指令首先通過發(fā)射寄存器發(fā)射出去后。取指緩沖器高4位取指緩沖器4,取指緩沖器5,取指緩沖器6,取指緩沖器7中的指令開始下壓到取指緩沖器0、1、2、3,準(zhǔn)備下一次開始發(fā)射,并騰出空間來存放來自預(yù)取緩沖器中的指令,等待發(fā)射;
d.指令的發(fā)射通過兩個發(fā)射寄存器第零發(fā)射寄存器和第一發(fā)射寄存器來實現(xiàn)指令的多發(fā)射,第零發(fā)射寄存器始終取取指緩沖器低位中的指令,第一發(fā)射寄存器取接下來的指令,并根據(jù)所取的指令的類型與大小,分別將指令發(fā)送到不同流水線中去。 DSP處理器的指令Cache的組織結(jié)構(gòu),如行大小、組相聯(lián)度,能夠支持多條指令的取指。所述指令Cache的組織結(jié)構(gòu)采用兩路組相聯(lián)結(jié)構(gòu),行大小為256位,能夠支持取多條指令;對于不可Cache的地址,專門添加大小為256位行緩沖器(Line Buffer)作為單行緩存行(Cache Line)。本發(fā)明在指令Cache與CPU取指單兀之間添加了大小為256位LineBuffer。對于可Cache的地址,Line Buffer就作為一個指令流的緩沖器;對于不可Cache的地址,Line Buffer作為單行Cache Line。在絕大多數(shù)的應(yīng)用程序中都含有相當(dāng)一部分的循環(huán)指令與子程序段,(PU對這部分的地址的程序會頻繁訪問,而對這部分地址范圍之外的程序訪問很少。添加Line Buffer對于不可Cache地址部分來說,能夠大大提高取這部分地址中的指令的效率,有效減少了 CPU與片外存儲單元之間的通信次數(shù)。指令的預(yù)取與對齊從指令Cache中取出的指令放入預(yù)取緩沖器(prefetchbuffer)后,根據(jù)CPU取指地址進(jìn)行對齊。指令Cache中每一行緩存行(Cache Line)存儲體由四個32位大小的存儲單元pmemO、pmeml、pmem2、pmem3組成。取指單元每次從指令Cache取的指令由高到低依次為pmem3、pmem2、pmeml、pmemO中的指令,將指令放入預(yù)取緩沖器后,根據(jù)CPU取指地址的偏移位再進(jìn)行進(jìn)一步的排列對齊,最后將排列對齊好的指令放入取指緩沖器(fetch buffer)中等待發(fā)射到相對應(yīng)的流水線中。DSP處理器總共有4條流水線IP流水線,LS流水線,MAC流水線和SMD流水線。在不存在數(shù)據(jù)冒險的情況下,每個時鐘周期能運(yùn)行4條指令。指令的發(fā)射通過兩個發(fā)射寄存器第零發(fā)射寄存器issue_stream_instO和第一發(fā)射寄存器issue_stream_instl。第零發(fā)射寄存器issue_stream_instO始終取第零位取指緩沖器fetch bufferO (如果是16位指令)或者是第零位取指緩沖器fetch bufferO與第一位取指緩沖器fetch bufferl中的指令(如果是32位指令)。第一發(fā)射寄存器issue_stream_instl所取的指令并不一定與第零發(fā)射寄存器issue_stream_instO所取的指令是不同類型的,而是要根據(jù)第零發(fā)射寄存器issue_stream_instO所取指令的類型與大小等情況而定,并將所取的指令分配到各個流水線上去。取指緩沖器為一堆棧結(jié)構(gòu),每次取指時都是取取指緩沖器低4位中的指令;當(dāng)取指緩沖器中的指令發(fā)送出去后,取指緩沖器中高4位的指令就開始下壓到低位,并騰出高位的空間來存放來自指令Cache中的指令。如圖I所示,指令Cache采用兩路組相聯(lián)結(jié)構(gòu),取指地址分為標(biāo)簽位tag、索引位index和偏移位byte,主要用于指令的快速定位和命中情況的判斷。指令Cache分為標(biāo)簽(tag)部分與數(shù)據(jù)(data)部分,并在每一行緩存行中設(shè)計了有效位valid bit用來指示當(dāng)前緩存行中的數(shù)據(jù)是否有效。當(dāng)取指地址中的標(biāo)簽位與指令Cache中的標(biāo)簽位比較匹配并且有效位有效,則指令Cache發(fā)生命中。當(dāng)標(biāo)簽位比較不匹配或者是當(dāng)前指令Cache中的數(shù)據(jù)無效,則指令Cache發(fā)生缺失。當(dāng)指令Cache命中時,指令Cache的輸出來自于命中的那一路,每一行緩存行(Cache Line)存儲體由四個32位大小的存儲單元pmem0、pmeml、pmem2、pmem3組成。這四個存儲單元的高16位構(gòu)成指令Cache的第I路,低16位構(gòu)成指令Cache的第O路。兩路的標(biāo)簽(Tag)的比較與Cache存儲體中64位指令的定位是在同一個時鐘周期內(nèi)并行執(zhí)行的,一旦標(biāo)簽完成比較,指令Cache就將命中的那一路中的指令發(fā)送出去。例如命中邏輯單元標(biāo)簽比較的結(jié)果是I路命中,那么CPU取指單元取到的64位指令為pmem3存儲單元中高16位指令,pmem2存儲單元中高16位指令,pmeml存儲單元中高16位指令,pmemO存儲單元中高16位指令。指令Cache根據(jù)取指地址定位到指令Cache存儲體中首個16位的指令,然后以此 為基址,取接下來的三個16位指令。該設(shè)計還存在著一種特殊情況當(dāng)CPU取指請求發(fā)生在行末尾時,這時指令Cache的4個存儲體的偏移值也定位到了最后一行,在這種情況下CPU不能一次取64位的指令,而是需要分兩次,進(jìn)行跨行取指。行緩沖器(Line Buffer)存儲體的設(shè)計如圖2所示,行緩沖器大小定為256位,與緩存行的大小相同,可以存放8條32位的指令,并支持關(guān)鍵雙字優(yōu)先技術(shù)。為了便于CPU取指時能夠快速定位到所需的指令,把行緩沖器分為4個64位的存儲體,每個存儲體又以16位為單位分成4行,CPU每次取指時分別取4個存儲體中的I行。如圖2所示,其4個存儲體組織結(jié)構(gòu)根據(jù)CPU取指地址4到I位進(jìn)行編碼劃分,其中第3、4位作為行偏移用來確定選擇哪一行,第1、2位作為列偏移用來確定選擇哪一列。將指令從指令Cache中取出后,接下來就的操作就要根據(jù)CPU取指地址的偏移位進(jìn)行對齊操作。如圖3所示,Cache存儲體中4個存儲單元中指令的最高16位為pmem3存儲單元中的指令,最低16位為pmemO存儲單元中的指令。因為總共有4個存儲單元,所以只要在CPU取指地址中設(shè)置2個偏移位就能實現(xiàn)其對齊。指令的對齊我們按如下方式進(jìn)行,當(dāng)取指地址的偏移位為 “00” 時,prefetch buffer3=pmem3, prefetch buffer2=pmem2,prefetch bufferl=pmeml, prefetch bufferO=pmemO ;當(dāng)取指地址的偏移位為 “01”時,prefetch buffer3=pmem0, prefetch buffer2=pmem3, prefetch bufferI=pmem2,prefetch bufferO=pmeml ;當(dāng)取指地址的偏移位為 “ 10” 時,prefetch buffer3=pmeml,prefetch buffer2=pmem0, prefetch buffer I =pmem3, prefetch buff er0=pmem2 ;當(dāng)取指地址的偏移位為 “11” 時,prefetch buffer3=pmem2, prefetch buffer2=pmeml, prefetchbufferl=pmemO,prefetch buffer0=pmem3o等號表示左邊預(yù)取緩沖器取右邊對應(yīng)存儲單元的指令。與前述預(yù)取緩沖器低4位部分相同,預(yù)取緩沖器高4位部分prefetch buffer7,prefetch buffer6, prefetch buffer5, prefetch buffer4 也按同種對齊方式取接下來 64位指令。指令對齊完成后,再將對齊后的指令放入取指緩沖器(fetch buffer)中,指令發(fā)射時,按照由低到高的順序進(jìn)行發(fā)射,即先取取指緩沖器低4位fetch bufferO, fetchbufferl, fetch buffer2, fetch buffer3中的指令。取指緩沖器實際是一個堆棧結(jié)構(gòu),指令取出后,取指緩沖器高 4 位fetch buffer4, fetch buffer5, fetch buffer6 和 fetchbuffed中的指令開始下壓,準(zhǔn)備下一次開始發(fā)射。并騰出高位的空間來存放來自預(yù)取緩沖器中的指令,等待發(fā)射。第零發(fā)射寄存器issue_stream_instO與第一發(fā)射寄存器issue_stream_instl是指令發(fā)射階段的兩個發(fā)射寄存器,負(fù)責(zé)從取指緩沖器中取指,如圖4所示。第零發(fā)射寄存器issue_stream_instO始終取第零位取指緩沖器fetch bufferO (如果是16位指令)或者是第零位取指緩沖器fetch bufferO與第一位取指緩沖器fetch bufferl中的指令(如果是32位指令)。第一發(fā)射寄存器issue_stream_instl所取的指令并不一定就是與第零發(fā)射寄存器issue_stream_instO同種類型的指令,而是要根據(jù)issue_stream_instO所取指令的類型與大小等情況而定,總共有以下3種情況
I. 當(dāng)?shù)谝粭l指令為16-bit的整數(shù)運(yùn)算類(IP)指令,那么issue_stream_instl取fetch bufferl 和 fetch buffer2 中的指令。 2. 當(dāng)之前的指令為 32-bit 的 IP 指令,那么 issue_stream_instl 取 fetchbuffer2 和 fetch buffer3 中的指令。3.當(dāng)之前的指令為 LS 指令,那 issue_stream_instl 取 fetch bufferO 和 fetchbufferl中的指令。如果第一發(fā)射寄存器issue_stream_instl所取的指令為存取(LS)類的指令,那么就直接發(fā)送到LS流水線,如果第一發(fā)射寄存器issue_stream_instl所取的指令為單指令多數(shù)據(jù)(SMD)類的指令,那么就直接發(fā)送到SMD流水線,如果第一發(fā)射寄存器issue_stream_instl所取的指令為乘累加(MAC)類的指令,那么就直接發(fā)送到MAC流水線。一種比較常見的情況是之前發(fā)射的指令與現(xiàn)在所取的指令為同一種類型,即這兩條指令要分配到同一條流水線中。由于同種類型的指令只有一組執(zhí)行單元,為了避免流水線阻塞,第一發(fā)射寄存器issue_stream_instl就會將所取的指令交給第零發(fā)射寄存器issue_stream_instO等待發(fā)射,同時第一發(fā)射寄存器issue_stream_instl取接下來的指令發(fā)射到流水線中去。
權(quán)利要求
1.一種高性能DSP處理器中的指令多發(fā)射方法,其特征是 a.CPU取指單元發(fā)出取指地址,從指令緩存中取出所需的指令;如果指令緩存發(fā)生缺失,則從外部存儲單元中取指令,并更新相應(yīng)的緩存行; b.將取到的指令對齊后放入預(yù)取緩沖器中,預(yù)取緩沖器根據(jù)CPU取指地址的偏移位將指令進(jìn)行排列對齊,將取值單元首次取到的指令對齊后放入預(yù)取緩沖器的低4位,將取值單元第2次取到的指令對齊后放入預(yù)取緩沖器的高4位,最后預(yù)取緩沖器將排列對齊好的指令放入取指緩沖器中等待發(fā)射到相對應(yīng)的流水線中; c.取指緩沖器是一個堆棧結(jié)構(gòu),取指緩沖器低4位的指令通過發(fā)射寄存器發(fā)射出去后,取指緩沖器就將高4位中的指令開始下壓到取指緩沖器低4位,準(zhǔn)備下一次開始發(fā)射,并騰出高位的空間來存放來自預(yù)取緩沖器中的指令,等待發(fā)射; d.指令的發(fā)射通過兩個發(fā)射寄存器第零發(fā)射寄存器和第一發(fā)射寄存器來實現(xiàn)指令的多發(fā)射,第零發(fā)射寄存器始終取取指緩沖器低位中的指令,第一發(fā)射寄存器取接下來的指令,并根據(jù)所取的指令的類型與大小,分別將指令發(fā)送到不同流水線中去。
2.如權(quán)利要求I所述的高性能DSP處理器中的指令多發(fā)射方法,其特征是,所述指令緩存的組織結(jié)構(gòu)采用兩路組相聯(lián)結(jié)構(gòu),行大小為256位,能夠支持取多條指令;對于不可緩存的地址,專門添加大小為256位行緩沖器作為單行緩存行。
3.如權(quán)利要求I所述的高性能DSP處理器中的指令多發(fā)射方法,其特征是,將指令從指令緩存中取到預(yù)取緩沖器中后,根據(jù)CPU取指地址的偏移位進(jìn)行排列對齊,并將排列對齊好的指令放入取指緩沖器中等待發(fā)射到相對應(yīng)的流水線中;取指緩沖器為一堆棧結(jié)構(gòu),每次取指時都是取取指緩沖器低位中的指令;當(dāng)取指緩沖器低位中的指令發(fā)送出去后,取指緩沖器中高位的指令就開始下壓到低位,并騰出高位的空間來存放來自指令緩存中的指令。
4.如權(quán)利要求I所述的高性能DSP處理器中的指令多發(fā)射方法,其特征是,第零發(fā)射寄存器與第一發(fā)射寄存器相互配合,負(fù)責(zé)從取指緩沖器中取指,并根據(jù)指令的大小與類型,將指令安排到不同的流水線中去;第零發(fā)射寄存器根據(jù)所取指令的類型,將指令發(fā)射到相應(yīng)流水線中,第一發(fā)射寄存器根據(jù)第零發(fā)射寄存器所取指令的大小,取取指緩沖器中接下來的指令,并判斷指令的類型,如果與第零發(fā)射寄存器所取指令類型相同,則交給第零發(fā)射寄存器等待發(fā)射,避免流水線阻塞,如果與第零發(fā)射寄存器所取指令類型不同,則直接發(fā)送到另一條流水線中;一旦發(fā)射寄存器中指令發(fā)送出去后,立即填入取指緩沖器中的指令。
全文摘要
本發(fā)明公開了一種高性能DSP處理器中的指令多發(fā)射方法。這種多發(fā)射機(jī)制的實現(xiàn)包括指令Cache的組織結(jié)構(gòu),能夠支持多條指令的取指;指令的對齊與預(yù)取,能夠根據(jù)CPU發(fā)送的取指地址快速定位到所需的指令;指令的多發(fā)射裝置,能夠根據(jù)指令的類型,將指令發(fā)送到相應(yīng)的流水線中。其優(yōu)點是本發(fā)明能夠提高取指與指令發(fā)射的效率,從而提高DSP處理器整體性能。
文檔編號G06F9/38GK102779026SQ20121022266
公開日2012年11月14日 申請日期2012年6月29日 優(yōu)先權(quán)日2012年6月29日
發(fā)明者屈凌翔, 張慶文, 楊曉剛, 黃嵩人 申請人:中國電子科技集團(tuán)公司第五十八研究所