• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于RISC-V參數(shù)化超標(biāo)量處理器的優(yōu)化設(shè)計(jì)

      2022-04-09 07:02:28劉有耀潘宇晨
      關(guān)鍵詞:流水線寄存器分支

      劉有耀,潘宇晨

      西安郵電大學(xué) 電子工程學(xué)院,西安 710121

      目前嵌入式領(lǐng)域市場(chǎng)具有很大的發(fā)展前景,但一直以來基本被ARM系列處理器占據(jù)。RISC-V是由加州大學(xué)伯克利分校(UCB)提出的一種開源精簡(jiǎn)指令集架構(gòu)[1-4],作為一個(gè)新生的開源指令集架構(gòu),具有精簡(jiǎn)、模塊化設(shè)計(jì)、開源等優(yōu)點(diǎn),可以根據(jù)需求定制自定義customer指令[5],大大簡(jiǎn)化了處理器的設(shè)計(jì),也因此涌現(xiàn)了很多優(yōu)秀的開源設(shè)計(jì)[6]。目前開源的RISC-V處理器大多偏向于低功耗的嵌入式設(shè)計(jì),例如E203、SCR1、PicoRV32和RI5CY等內(nèi)核均為標(biāo)量處理器。其設(shè)計(jì)的流水線階段相對(duì)較短,專注于低功耗嵌入式區(qū)域。PicoRV32是一個(gè)精簡(jiǎn)的緊湊型內(nèi)核,能夠順序地處理每條指令,因此其平均IPC為0.25。在高性能開源處理器中,代表性設(shè)計(jì)有BOOM處理器[7],能夠參數(shù)化地定制各級(jí)流水線以及緩存的配置。但是其語言編寫采用了較為激進(jìn)的Chisel[8]語言進(jìn)行編寫,編譯生成所得,因此屬于機(jī)器生成代碼,具有更好的可擴(kuò)展性與可重用性。但是其人工可讀性比較差,學(xué)習(xí)曲線又非常陡峭,學(xué)習(xí)成本比較大。

      在嵌入式微處理器設(shè)計(jì),低功耗處理器一般采用簡(jiǎn)單的單發(fā)射、順序執(zhí)行、寫回的策略進(jìn)行成本和性能的壓制。在較高性能處理器中,其主要的核心思想是通過指令級(jí)并行(instruction level parallelism,ILP)[9]來提升處理器的執(zhí)行多條指令的性能。在多發(fā)射時(shí),采用分組式保留站對(duì)待發(fā)射指令進(jìn)行暫存,再進(jìn)行運(yùn)算。執(zhí)行完提交相應(yīng)的提交請(qǐng)求進(jìn)入重排序中緩存[10],其亂序處理的機(jī)制可以大大提高處理器的性能[11]。

      緩存和執(zhí)行單元的配置可以在一定程度上能夠代表處理器的性能。充足的緩存與運(yùn)算單元可以保證流水線不被大量氣泡操作占用,最大程度上發(fā)揮多發(fā)射和亂序?qū)懟氐男阅堋?/p>

      可執(zhí)行單元是由算術(shù)邏輯單元(ALU)、乘除法單元(MDU)等其他專用運(yùn)算單元構(gòu)成,單元的數(shù)目可以直接提高處理器的性能,但也同時(shí)會(huì)帶來功耗收益的遞減。在處理器設(shè)計(jì)中,不同運(yùn)算單元是處在同一級(jí)流水線上并行運(yùn)算,向后級(jí)緩存寫入數(shù)據(jù)。對(duì)于不同單元的不同指令來說,需要為其分配不同的保留站進(jìn)行數(shù)據(jù)相關(guān)性檢測(cè),且長(zhǎng)周期執(zhí)行單元會(huì)阻塞短周期執(zhí)行單元的提交,造成處理器執(zhí)行單元的空閑操作。

      緩存在超標(biāo)量處理器中充當(dāng)著保證發(fā)射和寫回的順序嚴(yán)格按照程序本意的指令順序執(zhí)行。一些處理器的指令分派的機(jī)制采用了一種物理寄存器文件,重命名表和重排序提交緩沖區(qū)的數(shù)據(jù)結(jié)構(gòu)。將傳統(tǒng)的重命名寄存器堆合并到提交緩沖區(qū)中,并使重命名表分離。在配置的6個(gè)保留站(reservation stations,RS)中,獲取用于每一個(gè)功能單元在下一執(zhí)行階段獲得的基本操作數(shù)和功能代碼,并通過比較調(diào)度指針識(shí)別最早發(fā)出的指令[12]。但是對(duì)于分布式保留站在指令發(fā)射時(shí)具有利用率低的特點(diǎn),且若發(fā)布4條分支指令,需要構(gòu)建五個(gè)檢查點(diǎn)來支持未命中預(yù)測(cè)恢復(fù),這會(huì)帶來復(fù)雜檢查控制機(jī)制。同時(shí),也有一種以非推測(cè)方式進(jìn)行的派遣提交被提出,從而避免了檢查點(diǎn)。用驗(yàn)證緩沖(validation buffe,VB)結(jié)構(gòu)替換了傳統(tǒng)的ROB(reorder buffer,ROB)[13]。這種結(jié)構(gòu)會(huì)保持已分派的指令,直到它們成為非推測(cè)性的或被推測(cè)性的為止。但是這種結(jié)構(gòu)并沒有區(qū)分長(zhǎng)端周期指令在寫回階段的不同,由于指令執(zhí)行時(shí)間的不確定性,該結(jié)構(gòu)只能將load/store指令單獨(dú)派遣,同時(shí)需要將不同的指令追蹤,分離為Pending_Readers、Valid_Remapping和compile這3種狀態(tài),提高了各模塊之間互聯(lián)的復(fù)雜度。和在較多運(yùn)算單元時(shí),提交給緩存的請(qǐng)求也越多。為了使在指令提交時(shí)減少阻塞的發(fā)生,在流水線訪存寫回階段將緩存劃分為指令類型、目標(biāo)和存儲(chǔ)緩存結(jié)構(gòu)。這種流水線方案,能夠?qū)LU算數(shù)邏輯指令與load/store指令進(jìn)行分類提交[14]。但是在指令的派遣時(shí)并未考慮到系統(tǒng)指令以及不定周期的指令對(duì)處理器的影響,其設(shè)計(jì)的緩存模塊大量集中于流水線的末尾階段,緩存無法匹配到各級(jí)流水線,可能導(dǎo)致處理器上限頻率降低。循環(huán)迭代的方式檢測(cè)寄存器的相關(guān)性的方式,提高了處理器的動(dòng)態(tài)功耗,且在鎖存隊(duì)列滿時(shí)測(cè)出store指令時(shí),最差情況下只能發(fā)射一條指令。

      面對(duì)嵌入式多種復(fù)雜的性能需求時(shí)[15],需要一種能夠快速可配置的流水線結(jié)構(gòu)勝任不同的需求,并解決各級(jí)流水線的吞吐匹配問題。在此問題基礎(chǔ)上設(shè)計(jì)了一種優(yōu)化后的基于RISC-V的參數(shù)化超標(biāo)量處理器。處理器中的緩存分布在處理器的各個(gè)流水線階段,既可以取代流水線寄存器,對(duì)RISC-V處理器指令分類處理,直連化各級(jí)緩存接口,降低時(shí)延,同時(shí)擴(kuò)展了可駐留指令的上限。同時(shí)采用單周期運(yùn)算單元與長(zhǎng)周期運(yùn)算單元級(jí)聯(lián),同類執(zhí)行單元并行執(zhí)行的方式,可以使數(shù)據(jù)流先通過ALU簡(jiǎn)單計(jì)算,再流入后級(jí)執(zhí)行單元,緩存結(jié)合了集中式與分布式保留站的優(yōu)點(diǎn),既可以達(dá)到前級(jí)單元的高效利用,又可以通過可配置后級(jí)[16]流水模塊,達(dá)到自由調(diào)整數(shù)據(jù)吞吐率的平衡。在對(duì)面積極端要求條件下,可僅配置一條32 bit指令的緩存容量與單個(gè)處理單元,達(dá)到對(duì)面積的折中。但是由于數(shù)據(jù)相關(guān)性的存在,以及cache位寬大小的限制,無限制地提高緩存大小與執(zhí)行單元的數(shù)量也只能帶來有限的性能提升與大量的功耗。因此,本設(shè)計(jì)更傾向于面向嵌入式領(lǐng)域的定制化CPU的優(yōu)化實(shí)現(xiàn)。

      1 處理器架構(gòu)

      本設(shè)計(jì)中設(shè)計(jì)了一種面向嵌入式的變長(zhǎng)4級(jí)流水線結(jié)構(gòu),即“取指”“派遣”“執(zhí)行”“寫回”,對(duì)派遣階段進(jìn)行了兩次派遣處理,具有可配置各級(jí)流水線、亂序執(zhí)行、亂序?qū)懟氐奶攸c(diǎn)。

      處理器緩存可分為以下幾類:指令接收來自指令存儲(chǔ)器或cache中的指令,同時(shí)承擔(dān)來自跳轉(zhuǎn)與分支指令預(yù)測(cè)后的指令拼接區(qū)域;一級(jí)派遣緩存可以直接在派遣時(shí)得出寄存器的狀態(tài),對(duì)系統(tǒng)指令采取特殊通路,對(duì)于算數(shù)類型且無相關(guān)性的指令可以立即發(fā)射;寄存器緩存在寫回階段需要考慮其提交順序[17];二級(jí)派遣緩存對(duì)乘除法與存取指令緩存后,合并其向重排序緩存的請(qǐng)求,對(duì)于多個(gè)乘除法和一個(gè)訪存模塊,可以復(fù)用一條指令提交通路。

      處理器可執(zhí)行單元可分為:ALU與乘除法單元,可以根據(jù)實(shí)際應(yīng)用做到參數(shù)化可配置。

      1.1 流水線結(jié)構(gòu)

      處理器整體數(shù)據(jù)通路如圖1所示。其中,指令緩存(instruction buffer,IB)來自指令存儲(chǔ)器中的指令,同時(shí)也是分支跳轉(zhuǎn)指令的拼接緩存區(qū)。預(yù)測(cè)單元采用局部歷史分支預(yù)測(cè)器(local history),將每條分支指令的執(zhí)行歷史結(jié)果移入歷史分支寄存器(branch history register,BHR),通過歷史執(zhí)行的情況對(duì)其進(jìn)行預(yù)測(cè)(predict)[18]。來自一級(jí)派遣緩存(dispatch buffer,DB)和二級(jí)長(zhǎng)指令派遣緩存(dispatch long instruction buffer,DLIB)共同組成長(zhǎng)短指令的派遣緩存。DLIB不僅充當(dāng)了存取指令的緩沖等待區(qū),也是乘除法指令再派遣和運(yùn)算結(jié)果的暫存。DLIB在釋放一條長(zhǎng)指令時(shí),同時(shí)可向RB與DB更新指令列表信息,同時(shí)提交多個(gè)ALU指令。更新指令列表信息和當(dāng)前退休指令數(shù)量有關(guān),提交指令的數(shù)量與當(dāng)前無數(shù)據(jù)相關(guān)的指令條數(shù)有關(guān)。

      圖1 整體架構(gòu)設(shè)計(jì)圖Fig.1 Total frame

      設(shè)計(jì)中采用了多個(gè)參數(shù)化的緩沖模塊來處理流水線中的各階段的數(shù)據(jù)的緩沖問題??稍O(shè)置每一級(jí)緩存的接口數(shù)量和大小,面向不同的設(shè)計(jì)選擇性能與面積的折中。同時(shí)對(duì)(MUL/DIV unit,MDU)模塊采用級(jí)并聯(lián)復(fù)用長(zhǎng)指令提交緩存的方式,進(jìn)行多級(jí)派遣??商峁┒鄠€(gè)MDU單元同時(shí)運(yùn)算,減少端口的復(fù)雜度,降低流水線阻塞的概率,而面積開銷可以依據(jù)需求的MDU模塊以及特定的程序優(yōu)化,并不會(huì)很大。

      本設(shè)計(jì)將RISC-V指令分為分支跳轉(zhuǎn)、ALU指令、系統(tǒng)指令、長(zhǎng)周期指令等,利用對(duì)應(yīng)的控制與緩存模塊進(jìn)行緩存處理。在取指階段可適應(yīng)CPU外部存儲(chǔ)位寬進(jìn)行指令緩存,同時(shí)對(duì)緩存的指令調(diào)用預(yù)譯碼模塊和分支預(yù)測(cè)模塊對(duì)指令進(jìn)行預(yù)測(cè)合并緩存。在派遣階段將指令劃分為ALU指令、特殊指令(分支跳轉(zhuǎn)、環(huán)境調(diào)用、非法指令等)和長(zhǎng)指令進(jìn)行相關(guān)性檢測(cè)后進(jìn)行分派處理,送入不同的執(zhí)行模塊。在執(zhí)行階段,長(zhǎng)、短兩類指令分別在不同級(jí)流水線內(nèi)處理。普通的ALU指令結(jié)果,提交給寄存器緩存(regfile buffer,RB)處理。存儲(chǔ)指令和乘除法等指令,提交給二級(jí)長(zhǎng)指令派遣緩存(dispatch long instruction buffer,DLIB)進(jìn)行再派遣處理。對(duì)于DLIB,采用分離派遣的方式與乘除法進(jìn)行數(shù)據(jù)交換,屬于兩類指令混合的多級(jí)派遣機(jī)制,以提高并行性。

      1.2 超標(biāo)量實(shí)現(xiàn)

      RISC-V指令集相較于ARM和MIPS指令集更為精簡(jiǎn),可以大大簡(jiǎn)化硬件架構(gòu)的設(shè)計(jì)。

      為確保每一級(jí)指令能夠源源不斷送入后級(jí),將每一級(jí)的流水線寄存器替換為對(duì)應(yīng)的緩存,如取指譯碼階段為指令緩存(IB),譯碼執(zhí)行階段為派遣緩存(DB),執(zhí)行和訪存階段為長(zhǎng)指令派遣緩存(DLIB),寫回階段為寄存器緩存(RB)。

      在取指階段,根據(jù)RAM或Cache總線位寬,進(jìn)行配置。在緩沖器的剩余空間大于讀數(shù)據(jù)的位寬時(shí),會(huì)自動(dòng)發(fā)起讀指令的操作,以求填滿緩存。緩沖器的輸出為已成型的指令。由于本設(shè)計(jì)支持RISC-V壓縮指令集,指令長(zhǎng)度可能是16 bit或32 bit,指令數(shù)目也不固定。因此輸出的比特?cái)?shù)是16的倍數(shù)。每次取指時(shí),將已保存在緩沖器的比特和剛從指令存儲(chǔ)器進(jìn)入的比特,這兩者按照前后順序連接在一起,作為譯碼的對(duì)象。

      在譯碼派遣階段,譯碼多少條指令由下一級(jí)的需求決定。若下一級(jí)可以接受N條指令,則從IB中調(diào)用譯碼模塊盡量生成N條譯碼結(jié)果。RISC-V規(guī)整的指令格式可以通過bit[6∶0]7位操作碼(opcode)直接得出指令類型,通過功能碼(func)得到需要具體執(zhí)行的操作。對(duì)于操作數(shù)的獲取,在派遣緩存內(nèi)采用兩個(gè)黑名單,分別是Rs和Rd黑名單。讓每一條候選指令對(duì)照這兩個(gè)黑名單,當(dāng)發(fā)現(xiàn)Rs和Rd任意一個(gè)處于黑名單上,此條指令則不能進(jìn)入選中序列,應(yīng)被推移到下周期等待執(zhí)行。同時(shí)每個(gè)周期需要對(duì)Rs、Rd黑名單進(jìn)行更新,考察這條指令當(dāng)前的狀態(tài)下會(huì)影響那些操作數(shù)索引。只要當(dāng)前指令不在此黑名單,即可越級(jí)發(fā)射派遣。

      在執(zhí)行階段,ALU、乘除法和LSU(計(jì)算地址)共同寫入長(zhǎng)指令緩存(DLIB)中。此級(jí)緩存是逐步實(shí)現(xiàn)ALU指令的寫入權(quán)限的。

      以圖2留存于緩存中的指令序列舉例。其中ALU0、ALU1、ALU2、ALU3送入RB緩沖器,MUL0、MUL1和LSU0送入DLIB緩沖器。ALU0有權(quán)限寫入寄存器組,但ALU0和ALU1卻不能寫入。在MUL0指令并沒有成功執(zhí)行時(shí),寄存器組可以通過緩存器恢復(fù)到lsu0指令執(zhí)行之前的狀態(tài)。一旦LSU0指令成功執(zhí)行,寄存器緩存(RB)則允許放開此指令之后的ALU1和ALU2指令的寄存器寫入權(quán)限,和ALU0享有同等待遇。若MUL0異常,或未執(zhí)行完畢,RB則不允許其寫入寄存器,實(shí)現(xiàn)了指令的精確異常。因此RB會(huì)配合DLIB的執(zhí)行結(jié)果,退休一批ALU指令。

      圖2 緩存指令序列Fig.2 Instruction sequence

      在寫回階段,只有在外部存儲(chǔ)返回了響應(yīng)信號(hào),store指令狀態(tài)才被判決執(zhí)行完畢,同時(shí)在執(zhí)行期間記錄索引,避免load指令訪問該外部存儲(chǔ)的地址空間。

      1.3 互連線結(jié)構(gòu)

      每一級(jí)緩存的端口數(shù)目、位寬由參數(shù)決定,每一級(jí)緩存接口將必要的數(shù)據(jù)信息互聯(lián),并不需要復(fù)雜的公共數(shù)據(jù)總線,減少了握手所帶來的時(shí)序損耗。后級(jí)緩存需要向前級(jí)緩存發(fā)出自己的空滿信號(hào)[19],以確保流水線的正常運(yùn)行。在長(zhǎng)指令處理的互聯(lián)情況中,采用多級(jí)派遣方式,逐級(jí)緩存上級(jí)的譯碼包、操作數(shù)或訪存地址,因此可以提前在二級(jí)緩存DLIB剛緩存乘除法指令時(shí)即開始運(yùn)算,提高并行性。DLIB向DB與RB緩存之間提交退休的長(zhǎng)周期指令數(shù),其自身也可以同時(shí)移除多條長(zhǎng)指令,移除的指令結(jié)果直接寫入RB內(nèi)的寄存器組。ALU指令可以直接使用長(zhǎng)指令的數(shù)據(jù)通路,但只由RB進(jìn)行退休。因?yàn)锳LU指令并不能隨時(shí)寫入寄存器組。在長(zhǎng)指令出現(xiàn)異常的情況時(shí),寄存器組不能讓該條異常指令之后的指令寫入。系統(tǒng)模塊(SYS)和指令緩存器(IB)之間互聯(lián),控制系統(tǒng)指令和地址跳轉(zhuǎn)等指令的操作。處理器中緩存與運(yùn)算單元直接的互聯(lián)結(jié)構(gòu)直接的功能可以用簡(jiǎn)單的互聯(lián)圖3來表示。

      圖3 互聯(lián)數(shù)據(jù)圖Fig.3 Interconnection data graph

      1.4 可配置化

      四類緩存的基礎(chǔ)可配置參數(shù)如下,輸入位寬,輸出位寬與暫存位寬。位寬均為2n次冪。如位寬為128 bit,可容納4條32位指令與8條16位指令。

      指令緩存中可配置最小指令位寬以支持壓縮指令集,為了處理多個(gè)分支指令,支持可配的預(yù)測(cè)指令的暫存位寬,在分支預(yù)測(cè)失敗時(shí),可直接從緩存中讀取正確指令。每個(gè)分支指令在進(jìn)入分支暫存緩存后,它后續(xù)的指令也能放行進(jìn)入后級(jí)的緩沖器。

      分支預(yù)測(cè)單元的可配置參數(shù)為局部歷史分支預(yù)測(cè)器(BHR)位寬,最高可配置為5 bit。當(dāng)配置為2 bit時(shí),即為2比特飽和計(jì)數(shù)器,提供基礎(chǔ)的分支預(yù)測(cè)能力。

      可執(zhí)行單元的配置參數(shù)為級(jí)并聯(lián)單元的個(gè)數(shù)和與其連接緩存接口個(gè)數(shù)。當(dāng)配置ALU個(gè)數(shù)為3時(shí),MDU為2,指令長(zhǎng)度為32時(shí),一級(jí)派遣緩存接口位寬可以自適應(yīng)位寬配置為指令長(zhǎng)度乘以ALU單元數(shù)(XLEN×ALEN,32×3=96 bit)。同理,長(zhǎng)指令派遣緩存接口的位寬為2個(gè)MDU加上1個(gè)LSU模塊的位寬也為96 bit。

      以上參數(shù)均通過以Makefile腳本宏的方式進(jìn)行寫入編譯,以實(shí)現(xiàn)簡(jiǎn)便化的定制流程。

      2 處理機(jī)制

      2.1 兩級(jí)派遣

      指令緩存器(instruction buffer)連接譯碼模塊,將RISC-V指令劃分為長(zhǎng)周期指令、算數(shù)指令、跳轉(zhuǎn)指令、特殊/系統(tǒng)指令(CSR寄存器指令、非法指令、柵欄指令等)。對(duì)于無條件跳轉(zhuǎn)指令直接進(jìn)行拼接指令緩存;分支指令等待預(yù)測(cè)結(jié)果,Jalr指令等待Rs寄存器結(jié)果,拼接指令緩存;CSR寄存器操作指令,直接進(jìn)行寄存器操作;Fence指令暫停取指后,等待派遣模塊接收;最終只能有運(yùn)算指令可以進(jìn)入一級(jí)派遣緩存。在指令緩存器中,只能有一條跳轉(zhuǎn)指令或者特殊/系統(tǒng)指令被執(zhí)行。由于這些指令的特殊性,導(dǎo)致了必須嚴(yán)格按照指令順序,在其他指令執(zhí)行完畢后,才能交付。跳轉(zhuǎn)和分支指令,是一種具有ALU屬性的指令。跳轉(zhuǎn)之后將新指令進(jìn)行拼接并不影響后續(xù)的指令流的運(yùn)行。

      DB緩存接收上級(jí)緩存器送來的ALU、存取、乘除法指令。DB緩存會(huì)通過直接互聯(lián)監(jiān)聽寄存器的占用信息以及后級(jí)緩存、運(yùn)算單元的空閑信息。對(duì)指令進(jìn)行相關(guān)性檢測(cè),對(duì)沒有沖突的指令進(jìn)行派遣。派遣乘除法時(shí),進(jìn)入長(zhǎng)指令緩存模塊,單獨(dú)對(duì)其再派遣和結(jié)果回讀。派遣機(jī)制流程如圖4所示。

      圖4 派遣機(jī)制流程圖Fig.4 Dispatch mechanism

      2.1.1 ALU派遣執(zhí)行機(jī)制

      ALU指令派遣的條件如下:(1)RB緩存有剩余空間;(2)ALU運(yùn)算單元有空閑;(3)相關(guān)性檢測(cè)通過。

      滿足一級(jí)派遣的指令進(jìn)入ALU執(zhí)行階段,剩下的按照順序留存在一級(jí)派遣DB內(nèi)。在下一個(gè)周期到來時(shí),保存在DB緩存內(nèi)的指令優(yōu)先進(jìn)行判斷派遣。每個(gè)ALU數(shù)據(jù)通路傳送的是經(jīng)過譯碼打包后的數(shù)組,包含了指令的功能碼,操作數(shù)等信息。ALU計(jì)算后的數(shù)據(jù)分為兩種情況:(1)正常的ALU指令結(jié)果,寫回到RB中。(2)計(jì)算出MEM指令的地址,打包MDU指令送入到DLIB中。

      2.1.2 長(zhǎng)指令派遣執(zhí)行機(jī)制

      將原有與ALU同級(jí)的多周期MDU單元后移,其運(yùn)算結(jié)果與數(shù)據(jù)存放于原有的MEM指令緩存器中,合并為長(zhǎng)指令緩存器。在合并后的再派遣緩存中,存放著排序好的等待退休的存取指令和乘除法指令。當(dāng)有長(zhǎng)指令需要退休時(shí),依據(jù)序號(hào)和ALU指令一同送入RB中,由RB在進(jìn)一步的仲裁寫入結(jié)果。

      LSU/MDU指令被派遣的條件如下:(1)二級(jí)DLIB緩存有剩余空間;(2)在先前的指令周期內(nèi)有LSU/MDU在第一級(jí)派遣緩存模塊未被發(fā)射,先發(fā)射一級(jí)派遣緩存的指令。在本周期進(jìn)入的LSU/MDU指令應(yīng)保存在一級(jí)DB緩存中等待派遣。對(duì)于執(zhí)行時(shí)間不定的指令,不能有后級(jí)指令超越前級(jí)指令的行為。

      執(zhí)行分別在兩類數(shù)據(jù)通路內(nèi)處理。ALU接收從派遣模塊送來的指令,并再次將指令分成三類:算數(shù)指令、存取指令、乘除法指令。算數(shù)指令直接在ALU內(nèi)完成運(yùn)算,送給RB進(jìn)行重排序評(píng)估。MEM指令和乘除法指令混合送入二級(jí)DILB進(jìn)行緩存。

      因?yàn)檫@三種指令的執(zhí)行階段不一樣,故稱之為變長(zhǎng)流水線結(jié)構(gòu)。在執(zhí)行乘除法指令時(shí),由于DILB緩存是第二級(jí)派遣單元,已經(jīng)保存了之前存儲(chǔ)的和指令類型和操作數(shù)的緩存元素,因此可以提前在DILB緩存剛接收乘除法指令時(shí)即開始運(yùn)算。

      復(fù)用結(jié)構(gòu)執(zhí)行操作如下:(1)當(dāng)有長(zhǎng)指令進(jìn)入二級(jí)派遣緩存時(shí),通過功能碼檢測(cè)其指令類型,并根據(jù)類型進(jìn)行序號(hào)若是MEM指令交給LSU處理,若是MUL/DIV指令交給MDU處理。(2)若是MEM指令,檢測(cè)LSU單元是否被占用。占用時(shí)在Buffer中進(jìn)行等待調(diào)度,空閑時(shí)進(jìn)行內(nèi)存讀寫操作,序號(hào)(order)進(jìn)行加1。在二次派遣和指令提交時(shí),序號(hào)自減,只需提交統(tǒng)一的結(jié)果即可。(3)若是MUL/DIV指令,檢測(cè)MDU單元是否被占用。查詢送入的指令序號(hào)(md_ord=n),取出緩存中暫存的操作數(shù)和功能碼送往動(dòng)態(tài)分配的MDU。同時(shí)準(zhǔn)備下一條指令的序號(hào)(md_ord_next=N)。直到讀出下一條N為緩存的最高容量,說明無需要處理的指令。與MEM指令不同的是二級(jí)派遣緩存可以對(duì)應(yīng)多個(gè)MDU單元同時(shí)運(yùn)算。通過與運(yùn)算單元直連的簡(jiǎn)單握手信號(hào)進(jìn)行通信,存儲(chǔ)來自MDU的運(yùn)算結(jié)果,待下一個(gè)周期送入REB進(jìn)行寫入寄存器。

      兩種指令可以混合緩存來自上級(jí)模塊下發(fā)的指令。緩存的指令參數(shù)段存放指令的類型、Rd索引號(hào)、有效標(biāo)志和功能碼。若是乘除法和load指令,Rd為結(jié)果或加載的目的寄存器。若是store指令,則為全0。其中l(wèi)ong_addr來自load/store指令的地址或者是乘除法的一個(gè)操作數(shù)。long_wdata存儲(chǔ)來自store指令的Rs2或者是乘除法的另一個(gè)操作數(shù)。

      其具體行為操作如圖5所示。

      圖5 長(zhǎng)指令派遣Fig.4 Long instruction dispatch

      通過此部分二次派遣的方法,一方面減少互聯(lián)復(fù)雜度,只需發(fā)送整體的提交信息,使一級(jí)調(diào)度緩存和RB等模塊直連的信號(hào)大大縮減。同時(shí)重用了DILB的緩存空間,相當(dāng)于增加了MDU的緩存大小,使運(yùn)算單元不容易受制于緩存大小而造成流水線阻塞。對(duì)于改進(jìn)后的面積開銷,只會(huì)增大因需要存儲(chǔ)MDU返回結(jié)果的資源。

      2.1.3 長(zhǎng)指令派遣執(zhí)行機(jī)制

      特殊指令可以分為這兩類:error、illegal、sys、fencei、fence、csr系統(tǒng)非法類和branch、jalr、jal正常跳轉(zhuǎn)類。這些指令會(huì)在指令緩存中進(jìn)行處理,系統(tǒng)等指令會(huì)在下一級(jí)派遣緩存DB之前,送給SYS模塊進(jìn)行跳轉(zhuǎn)到異常程序入口或進(jìn)行csr讀寫操作。

      sys模塊會(huì)實(shí)現(xiàn)CSR寄存器的相關(guān)讀寫操作,它是處理系統(tǒng)指令和CSR指令并控制整個(gè)CPU狀態(tài)的模塊。sys模型在對(duì)CSR寄存器進(jìn)行處理時(shí)。一般會(huì)涉及到系統(tǒng)跳轉(zhuǎn),會(huì)取到一個(gè)新的PC地址進(jìn)行取指。同時(shí)會(huì)有清除所有緩存內(nèi)指令的操作。

      跳轉(zhuǎn)指令會(huì)將下一條指令直接進(jìn)行拼接,分支指令根據(jù)預(yù)測(cè)的結(jié)果覺得是否需要進(jìn)行拼接。當(dāng)分支指令的緩存清空時(shí),且下級(jí)緩存被清空時(shí)(正常指令執(zhí)行完),可以執(zhí)行系統(tǒng)指令。送往DB緩存的將只有算術(shù)存取指令的功能碼(func)和對(duì)源操作數(shù)和目的操作數(shù)的索引號(hào)(index)。

      為了管理經(jīng)過預(yù)測(cè)執(zhí)行的指令,為每一條指令設(shè)置一個(gè)預(yù)測(cè)真實(shí)梯度grade。grade表示當(dāng)前指令前有多少條分支指令未給出實(shí)際的結(jié)果。帶不同grade標(biāo)準(zhǔn)的指令允許進(jìn)入后級(jí)流水線。當(dāng)一條分支指令被確認(rèn)預(yù)測(cè)正確,那么grade等級(jí)會(huì)自動(dòng)減1。只有g(shù)rade等級(jí)為0的指令可以進(jìn)入寄存器堆或?qū)懭雖em中。如圖6所示,只有ALU0和ALU1指令允許寫入寄存器堆中。

      圖6 預(yù)測(cè)指令真實(shí)梯度Fig.6 Forecast true grade

      2.2 重排序?qū)懟?/h3>

      RB緩存主要負(fù)責(zé)存儲(chǔ)來自ALU、DLIB、CSR指令中需要的寄存器堆數(shù)據(jù)。RB緩存中內(nèi)嵌了32個(gè)RISC-V標(biāo)準(zhǔn)寄存器組,因而可以方便地對(duì)其進(jìn)行操作。同時(shí)RB也為DLIB設(shè)置了專門訪問通用寄存器的接口,方便ALU指令再排序后能夠在長(zhǎng)指令提交后同時(shí)寫入寄存器。ALU送來的數(shù)據(jù)夾雜著存取指令的地址,RB仲裁器需要仲裁出來自ALU的算數(shù)指令,將其寫入緩存并分配序號(hào)。每新來一個(gè)MEM指令時(shí),對(duì)序號(hào)加1,若是ALU指令,則不變。每個(gè)周期進(jìn)行評(píng)估,對(duì)序號(hào)等于0的數(shù)據(jù)才允許寫入寄存器堆。序號(hào)大于0的,只能保存在RB的緩存器內(nèi)。如果發(fā)生序號(hào)為1的MEM指令發(fā)生了異常(MEM指令必須嚴(yán)格順序讀寫,所以只有序號(hào)為1才能進(jìn)入讀寫序列),只需要清除包括序號(hào)為1之后的數(shù)據(jù)即可。保證了寄存器堆的數(shù)據(jù)正確,同時(shí)可以精確定位異常指令。

      若MEM指令正確執(zhí)行,則RB中的序號(hào)自動(dòng)減1,允許新數(shù)據(jù)寫入寄存器堆。這種分類隔離的方式避免了MEM指令異常而導(dǎo)致的數(shù)據(jù)錯(cuò)誤提交。同時(shí)對(duì)于后續(xù)指令取用寄存器堆內(nèi)數(shù)據(jù)時(shí),不僅要從寄存器堆內(nèi)取用,同時(shí)還要從RB緩存中取出進(jìn)行比對(duì)。對(duì)于不同的數(shù)據(jù),以RB緩存中的數(shù)據(jù)作為基準(zhǔn),這保證了運(yùn)算單元索引的寄存器中的數(shù)據(jù)是被正常提交所得的。

      3 實(shí)驗(yàn)結(jié)果及分析

      指令集驗(yàn)證采用RISC-V社區(qū)開源的指令集自測(cè)試程序。該測(cè)試程序用匯編語言編寫,屬于指令兼容性測(cè)試。該方法通過循環(huán)計(jì)數(shù),檢測(cè)寄存器的值來判斷測(cè)試是指令集架構(gòu)中定義的指令是否符合RISC-V的標(biāo)準(zhǔn)。使用自測(cè)試下,處理器通過了RISC-V的IMC(整數(shù)、乘除法、壓縮)指令集的測(cè)試。

      在128 bit的取指位寬情況下,對(duì)不同發(fā)射數(shù)的緩存進(jìn)行了匹配,評(píng)估了不同緩存接口數(shù)與大小下的性能,同時(shí)運(yùn)行了CoreMark與Dhrystones的跑分測(cè)試。Dhrystone用于衡量處理器的整數(shù)運(yùn)算處理性能,比如數(shù)據(jù)的賦值、間接指針函數(shù)調(diào)用、賦值等常見操作,有是否選擇編譯器優(yōu)化兩種情況。CoreMark程序包含了常見的矩陣運(yùn)算、鏈表操作、狀態(tài)機(jī)和循環(huán)冗余校驗(yàn)(CRC)等算法。這些測(cè)試程序都能較好地衡量處理器的性能。

      可配置性,是通過Makefile腳本中sed命令,直接修改define.v文件中相應(yīng)的定義來實(shí)現(xiàn)。在定義文件中,可定義的選項(xiàng)有指令緩存、派遣緩存、長(zhǎng)指令緩存、寄存器緩存大小、ALU單元、MDU單元和分支預(yù)測(cè)位寬。如:直接sed修改`define MDU_NUM為2。

      為了能夠更加簡(jiǎn)便化實(shí)現(xiàn)對(duì)應(yīng)測(cè)試環(huán)境的性能測(cè)試,在配置選項(xiàng)中加入了launch選項(xiàng)(編譯器優(yōu)化),分別對(duì)應(yīng)該發(fā)射數(shù)在對(duì)應(yīng)測(cè)試程序下的最優(yōu)配置。

      處理器性能主要依賴于合成基準(zhǔn)測(cè)試程序進(jìn)行評(píng)估。在不同基準(zhǔn)程序中IPC可能會(huì)有所差異。在處理前和后分別采用modelsim仿真記錄運(yùn)行程序的時(shí)間,取平均,可以得到各個(gè)配置下的IPC。

      下列配置是在Dhrystones和CoreMark測(cè)試程序?qū)Τ顺ǚ治龊筮M(jìn)行最優(yōu)配置。若目標(biāo)程序采用此類運(yùn)算較多,可直接進(jìn)行增加,所以此設(shè)計(jì)更傾向于嵌入式領(lǐng)域中運(yùn)算指令密集型的應(yīng)用處理。

      1發(fā)射:ALU:1,MDU:1,IB緩存:2,DB緩存:2,DLIB緩存:4,RB緩存:4。

      2發(fā)射:ALU:2,MDU:1,IB緩存:3,DB緩存:4,DLIB緩存:8,RB緩存:8。

      3發(fā)射:ALU:3,MDU:2,IB緩存:5,DB緩存:7,DLIB緩存:14,RB緩存:14。

      4發(fā)射:ALU:4,MDU:2,IB緩存:6,DB緩存:8,DLIB緩存:16,RB緩存:16。

      5發(fā)射:ALU:5,MDU:3,IB緩存:8,DB緩存:10,DLIB緩存:20,RB緩存:20。

      圖7測(cè)試表明,不同發(fā)射數(shù)對(duì)性能的影響是巨大的。但隨著發(fā)射數(shù)的提升,處理器的性能增益也會(huì)有所降低,這主要是由于指令的相關(guān)性約束所導(dǎo)致的[20]。在這幾種跑分場(chǎng)景中可以發(fā)現(xiàn)3發(fā)射的配置占優(yōu)。越高的取指位寬和運(yùn)算單元可以顯著提升處理器性能。

      圖7 不同發(fā)射數(shù)下IPCFig.7 IPC with different emission numbers

      為了支持取指,cache的功耗與面積代價(jià)會(huì)不可避免地增加[21],但是本設(shè)計(jì)理論上可以靈活地對(duì)接不同的存儲(chǔ)取指位寬,加上不同的運(yùn)算單元和發(fā)射數(shù)目,達(dá)到性能與面積的平衡。

      在采用三發(fā)射的配置,即ALU:3,MDU:2的基準(zhǔn),表1為在TMSC 28HPC+工藝綜合和FPGA實(shí)現(xiàn)兩種派遣指令內(nèi)核的配置,即在相同運(yùn)算單元數(shù)目下,分別采用基準(zhǔn)程序測(cè)試了在MDU與ALU同級(jí)流水線與緩存復(fù)用派遣下的性能。用不同模式下的平均跑分與邏輯單元數(shù)目的比值,Average Cells/IPC,作為一個(gè)評(píng)判依據(jù)。值越低,其單位性能下所占用的數(shù)目越少。在采用復(fù)用派遣后,因需要緩存從MDU來的指令,需要適當(dāng)增大DILB緩存提升性能而帶來一定面積開銷。

      表1 不同派遣模式參數(shù)對(duì)比Table 1 Comparison of different mode parameters

      單級(jí)派遣即是乘除法MDU單元與ALU單元處在同級(jí)流水線中的執(zhí)行階段,LSU訪存模塊處于訪存階段。這種做法在執(zhí)行乘法指令時(shí)可以快一個(gè)周期,但是此類指令為長(zhǎng)周期指令,需要為此指令類指令再增加另外的派遣緩存,在無此類指令時(shí)不工作。在訪存指令執(zhí)行時(shí),需要為所有執(zhí)行單元設(shè)計(jì)一個(gè)重排序緩沖區(qū),該緩沖區(qū)需要時(shí)刻接受來自公共數(shù)據(jù)總線的釋放信號(hào),這無疑增大了總線復(fù)雜度。

      復(fù)用派遣即為本設(shè)計(jì)所采用的方法。所有執(zhí)行和訪存指令均通過派遣緩存(DB),提高了緩存利用率。同時(shí)將乘除法單元(MDU)移至訪存階段,由于LSU和MDU指令均為長(zhǎng)周期指令,長(zhǎng)指令緩存(DLIB)能夠更加有效管理指令執(zhí)行的流向。普通指令結(jié)果即可流向寄存器緩存(RB),乘除法指令在運(yùn)算結(jié)束后也可暫存在DLIB,隨即流向RB。LSU指令,對(duì)于load指令可直接操作RB從Regfiles取操作數(shù),Store指令直接訪問外部Memory。同時(shí)僅在有需要通信的緩存之間以直接連線的方式,既可以高效完成功能,又可以降低設(shè)計(jì)復(fù)雜度。

      可以看到,由于MDU單元需要通過二級(jí)DLIB緩存,所以需要適當(dāng)增大此部分緩存的大小,總體采用的邏輯門數(shù)略有增加,這部分面積開銷由總線控制模塊,DB和DLIB共同承擔(dān)。但同時(shí)性能也有提升,同時(shí)簡(jiǎn)化了復(fù)雜的互聯(lián)機(jī)制。對(duì)于乘除法和load指令來說,其目的操作數(shù)都是RISC-V內(nèi)部規(guī)劃的32個(gè)32 bit寄存器。其數(shù)據(jù)流索引被記錄在DLIB中,可以直接寫入到RB中,當(dāng)無指令沖突時(shí),即可寫入寄存器堆,實(shí)現(xiàn)指令退休。store指令為目的操作數(shù)為外部存儲(chǔ)的空間,在store指令執(zhí)行中,DLIB可以避免load指令訪問該外部存儲(chǔ)的地址空間。

      采用TMSC 28HPC+工藝,在200 MHz頻率下對(duì)本設(shè)計(jì)進(jìn)行綜合。采用CoreMark 5 000次迭代,和Dhrystone進(jìn)行FPGA功能驗(yàn)證。通過配置發(fā)射數(shù),依據(jù)各個(gè)執(zhí)行時(shí)間結(jié)果計(jì)算出不同基準(zhǔn)測(cè)試程序下的IPC數(shù),并平均化處理,得到在不同發(fā)射數(shù)下的平均IPC。結(jié)果表明,本設(shè)計(jì)配置在2/4發(fā)射時(shí),已較為接近知名的BOOM處理器。如表2所示,相較于同類型處理器IPC分別有122.1%、122.3%和176.8%的提升。且采用復(fù)用派遣后內(nèi)核面積僅增大8.1%。

      表2 不同處理器性能對(duì)比Table 2 Performance comparison of different processors

      表3所示為在最優(yōu)配置下(ALU:3,MDU:2)各個(gè)緩存與Top模塊在TMSC 28HPC+工藝庫下綜合參數(shù)。得出所需的門電路單元的數(shù)目和面積等參數(shù)信息。緩存單元容量與總線位寬與邏輯運(yùn)算單元數(shù)量息息相關(guān)。當(dāng)取指位寬與ALU增加時(shí),IB與DB也應(yīng)增加適應(yīng)其性能。

      表3 主要模塊綜合結(jié)果Table 3 Synthesis results of main modules

      從模塊綜合結(jié)果來看,三類緩存中,派遣緩存(DB)占用資源最多。因?yàn)樗兄噶罹?jīng)過相關(guān)性檢測(cè)才能從流水線中被派遣,未滿足條件的應(yīng)當(dāng)留在此階段,等待發(fā)射。

      得益于可配置的緩存接口,不僅在較高性能的處理器中占有優(yōu)勢(shì),當(dāng)配置為單發(fā)射順序執(zhí)行時(shí),因引入了緩存,雖然面積會(huì)大于其他低功耗處理器,但仍在可接受范圍內(nèi),且性能較其他處理器仍占有優(yōu)勢(shì)。此時(shí)設(shè)計(jì)為在配置1發(fā)射時(shí),同時(shí)配置分支預(yù)測(cè)為2 bit時(shí)情況。作為通用型處理器,本設(shè)計(jì)與幾類嵌入式處理器邏輯門數(shù),跑分等性能方面進(jìn)行了對(duì)比。表4為最低配置時(shí)相較于ARM Cortex-M系列和開源RISC-V低功耗處理器的性能對(duì)比。

      表4 單發(fā)射處理器對(duì)比Table 4 Single transmitter processor comparison

      4 結(jié)束語

      本文通過對(duì)簡(jiǎn)便的參數(shù)化配置,實(shí)現(xiàn)了一種基于RISC-V開源指令集的超標(biāo)量微架構(gòu),通過分類指令的數(shù)據(jù)通路,不同周期的執(zhí)行單元采用級(jí)聯(lián)與并行的混合分布方式,將充當(dāng)排序緩存中的指令再派遣,達(dá)到指令暫存和分類執(zhí)行的目的。該方案通過定制優(yōu)化后的取指中的分支預(yù)測(cè),執(zhí)行中的混合派遣,緩存與執(zhí)行單元,直連的簡(jiǎn)潔,等CPU流水線中關(guān)鍵的性能優(yōu)化點(diǎn),改善處理器中流水線不匹配以及緩存堵塞的問題。

      最終,本設(shè)計(jì)在FPGA開發(fā)板上完成功能處理器功能驗(yàn)證,并在TSMC 28HPC+工藝上進(jìn)行了面積綜合。受益于上述描述的各級(jí)流水線的性能點(diǎn)優(yōu)化,在本設(shè)計(jì)的最佳配置中,性能相比同類型處理器IPC提升132.4%;在單發(fā)射最低配置中,性能和邏輯門數(shù)與對(duì)應(yīng)級(jí)別的低功耗處理器持平。針對(duì)嵌入式多樣化的應(yīng)有方向,下一步研究將此處理器應(yīng)用到神經(jīng)網(wǎng)絡(luò)的向量化處理中,設(shè)計(jì)特定指令集并在長(zhǎng)指令派遣單元中集成更多的專用并行處理單元,實(shí)現(xiàn)算法的并行化處理,專用領(lǐng)域的加速研究。

      猜你喜歡
      流水線寄存器分支
      Gen Z Migrant Workers Are Leaving the Assembly Line
      Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
      流水線
      巧分支與枝
      一類擬齊次多項(xiàng)式中心的極限環(huán)分支
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      報(bào)廢汽車拆解半自動(dòng)流水線研究
      SIMATIC IPC3000 SMART在汽車流水線領(lǐng)域的應(yīng)用
      生成分支q-矩陣的零流出性
      碩果累累
      哈密市| 会同县| 芮城县| 团风县| 页游| 东城区| 梅河口市| 微博| 乌鲁木齐县| 武汉市| 凤凰县| 凌源市| 甘德县| 内江市| 东丰县| 年辖:市辖区| 安陆市| 富蕴县| 鹿邑县| 榆林市| 东源县| 正安县| 同仁县| 宝清县| 兴仁县| 廉江市| 定远县| 兰溪市| 合川市| 喜德县| 成安县| 泌阳县| 朝阳区| 凤冈县| 毕节市| 于都县| 如皋市| 高尔夫| 绩溪县| 芜湖市| 德江县|