• 
    

    
    

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

      ?

      改進OR1200 CPU流水線的設(shè)計①

      2018-01-08 03:12:56曹凱寧沈興浩姬夢飛常玉春
      計算機系統(tǒng)應(yīng)用 2017年12期
      關(guān)鍵詞:流水線旁路寄存器

      曹凱寧,沈興浩,姬夢飛,常玉春

      (吉林大學(xué) 電子科學(xué)與工程學(xué)院,長春 130012)

      改進OR1200 CPU流水線的設(shè)計①

      曹凱寧,沈興浩,姬夢飛,常玉春

      (吉林大學(xué) 電子科學(xué)與工程學(xué)院,長春 130012)

      流水線是制造高性能CPU的關(guān)鍵技術(shù),目前被廣泛研究的OR1200是一款帶有四級流水線的免費開源CPU. 為了提高流水線的效率,針對OR1200沒有設(shè)計訪存流水段,流水線會暫停等待加載存儲類指令這個問題,在LSU操作即訪存操作模塊,為OR1200增加了訪存流水段,設(shè)計了冒險檢測和旁路單元,因此CPU在訪存階段不需要暫停,從而使OR1200變?yōu)檎嬲奈寮壛魉€CPU; 另一方面,當需要用加載指令加載數(shù)據(jù)的時候,會導(dǎo)致加載類數(shù)據(jù)冒險問題,為了解決此類冒險,設(shè)計了數(shù)據(jù)有效信號Tag,用來控制流水線暫停,對乘法計算、訪存階段以及其他不能在執(zhí)行階段得到結(jié)果的運算作流水線暫停判斷,以等待數(shù)據(jù)的獲取. 通過實驗仿真證明,Tag信號暫停流水線一個時鐘后會把數(shù)據(jù)反饋回去,成功解決了必須暫停數(shù)據(jù)相關(guān)問題的暫停判斷問題.

      OR1200; 流水線; 數(shù)據(jù)冒險; 數(shù)據(jù)旁路

      隨著計算機系統(tǒng)和微電子技術(shù)的不斷發(fā)展,將整個電子應(yīng)用系統(tǒng)集成在單一的芯片上,構(gòu)成功能強大的完整片上系統(tǒng)(SoC),是IC產(chǎn)業(yè)發(fā)展的必然趨勢,也是技術(shù)發(fā)展的必然要求. 而作為SoC運算核心和控制核心的CPU核,其性能直接影響系統(tǒng)的整體性能,因此設(shè)計實現(xiàn)高性能的CPU核已成為SoC最重要的環(huán)節(jié).

      目前,國內(nèi)雖然已經(jīng)有了設(shè)計CPU的能力,但大多采用了國際主流CPU系列的兼容指令集與架構(gòu),比如“龍芯”和海思公司分別取得了MIPS與ARM的授權(quán),以及去年海光獲得了x86的授權(quán). 其中的一個重要原因是這些主流架構(gòu)都擁有完整或比較完整的商業(yè)生態(tài)圈,避免了因指令集不兼容而導(dǎo)致CPU沒有市場的尷尬局面. 近年來,采用ARM授權(quán)方式的國內(nèi)CPU廠商可以借助圍繞ARM架構(gòu)的生態(tài)環(huán)境獲得較好的發(fā)展,這該模式是以犧牲了巨大的商業(yè)利益和產(chǎn)品安全性為代價. 因此,這種方式很大程度上限制了我國自主CPU的設(shè)計與發(fā)展. 通過對CPU設(shè)計發(fā)展進行充分的橫向(各研究機構(gòu)、廠商)及縱向(時間上)研究,我們從頭設(shè)計了擁有全新的指令集架構(gòu)、完善的編譯器/軟件開發(fā)環(huán)境的高性能、通用性JearCore開源CPU.Jear Core基于在學(xué)術(shù)界廣泛流行的OpenRISC架構(gòu),利用其先進的、開放性的底層架構(gòu)體系,所具備的完整的開發(fā)、編譯工具鏈,從底層做起,重新改寫流水線,徹底優(yōu)化現(xiàn)有代碼,增添輔助模塊,不斷完善和發(fā)展這種應(yīng)用前景巨大的32位、高性能RISC(精簡指令集計算機)[1,2]CPU設(shè)計,并無償提供給企業(yè)進行產(chǎn)業(yè)化.

      本文憑借JearCore CPU設(shè)計理念,以Xilinx公司的FPGA為目標器件,用Verilog語言描述了32位 的流水線CPU. CPU流水線技術(shù)是一種將指令分解為多步,并讓不同指令的各步操作重疊,從而實現(xiàn)幾條指令并行處理,以加速程序運行過程的技術(shù). 每個子過程對應(yīng)一個時鐘,稱為流水級或者流水段[3]. 流水線的引入提高了各個流水段的利用率,同時也產(chǎn)生了數(shù)據(jù)冒險的情形. 此次我們研究的 OR1200 是由 OpenCores 組織[4]開發(fā)的一個32位標量RISC. 雖然OR1200手冊[5]聲稱OR1200是五級流水線,但是由于它并沒有設(shè)計訪存流水段,因而被認為是四級流水線的CPU. 針對以上問題,我們?yōu)镺R1200設(shè)計的訪存流水段,并且針對增加流水段而引起的數(shù)據(jù)冒險進行了分析和解決.

      1 OR1200 的流水線以及改進

      五級流水線[6]的CPU一般分為五步進行,分別是“取指”、“譯碼”、“執(zhí)行”、“訪存”、“寫回”.OR1200將“執(zhí)行”階段的計算得到的地址送給總線,而控制訪存階段的控制信號依然用的是執(zhí)行階段的控制信號,因而造成了在訪存階段必暫停的問題[7,8],如圖1所示. 圖中ex_insn為執(zhí)行階段的指令,其中“d4031000”為存儲指令 l.sw 0x0(r3),r2 的機器碼,“84830000”為加載指令 l.lwz r4,0x0(r3)的機器碼.OR1200執(zhí)行訪存指令的時候通過lsu_stall判斷暫停,當總線dcpu_ack_i為1的時候訪存結(jié)束繼續(xù)執(zhí)行下一條指令.

      圖1 OR1200 訪存操作仿真圖

      通過對OR1200改進的時候增加了訪存階段的控制信號,使得CPU在訪存階段沒有出現(xiàn)cache miss情形下不需要暫停[9],如圖2所示. 圖中虛線表示流水線之間的寄存器. 我們將OR1200訪存操作從執(zhí)行流水段中分離出來,來解決OR1200遇到訪存操作暫停的問題. 這樣一方面提高了系統(tǒng)主頻; 另一方面提高了硬件模塊的利用率和吞吐量.

      圖2 改進后 CPU 流水線結(jié)構(gòu)圖

      向改進后的CPU中輸入圖1中相同的指令,得到的仿真結(jié)果如圖3所示. 可知在執(zhí)行存儲指令l.sw 0x0(r3),r2 和加載指令 l.lwz r4,0x0(r3)流水線均未暫停. lsudata為加載指令的加載結(jié)果.

      圖3 改進后 CPU 訪存操作的仿真圖

      2 數(shù)據(jù)相關(guān)以及旁路技術(shù)

      引入流水線提高CPU效率的同時,我們會遇到流水線冒險的問題,稱之為流水線相關(guān). 流水線相關(guān)分為:結(jié)構(gòu)相關(guān)、數(shù)據(jù)相關(guān)和控制相關(guān). 由于OR1200采用的是內(nèi)部哈佛結(jié)構(gòu)即分開的指令數(shù)據(jù)緩存,所以不存在結(jié)構(gòu)相關(guān). OR1200在處理分支跳轉(zhuǎn)的時候,通過暫停等待跳轉(zhuǎn)信息的到來,所以O(shè)R1200已經(jīng)解決了控制相關(guān)的問題. 在增加訪存流水段以后,OR1200對于數(shù)據(jù)相關(guān)的處理電路已經(jīng)不再適用了,因此我們需要重新考慮.

      數(shù)據(jù)相關(guān)主要包括三種: RAW(read after write)、WAW(write after read)和 WAR(write after write). 對于五級流水線CPU而言,只有在流水線回寫階段才會寫寄存器,因此不存在WAW相關(guān). 又因為只能在流水線譯碼階段讀寄存器、回寫階段寫寄存器,不存在WAR相關(guān),所以五級流水線CPU一般只存在RAW相關(guān).RAW相關(guān)有以下三種情況:

      (1) 相鄰指令健存在數(shù)據(jù)相關(guān),舉例如下:

      l.ori r1,r0,0x1

      l.ori r2,r1,0x0

      (2) 相隔1條指令的指令間存在數(shù)據(jù)相關(guān),舉例如下:

      l.ori r1,r0,0x1

      l.ori r3,r0,0x0

      l.ori r2,r1,0x0

      (3) 相隔2條指令的指令間存在數(shù)據(jù)相關(guān),舉例如下:

      l.ori r1,r0,0x1

      l.ori r3,r0,0x0

      l.ori r4,r0,0x0

      l.ori r2,r1,0x0

      為了解決數(shù)據(jù)相關(guān)[9,10]的問題,我們引入了旁路技術(shù)[11]來解決這個問題,如圖4所示. 我們將旁路技術(shù)分為兩個部分設(shè)計,一是操作數(shù)選通器中的設(shè)計,二是在寫入寄存器堆之前使寄存器堆完成對數(shù)據(jù)的前推.

      圖中第一條指令的結(jié)果需要在CC5這個時鐘寫回到寄存器堆. 而接下來的4條指令都需求這個結(jié)果.因此如果此時直接選取寄存器堆里的指令結(jié)果一定是不對的,所以在設(shè)計的操作數(shù)選通器使用旁路技術(shù)將結(jié)果前推. 這樣第二條指令可以直接從ALU計算得出的結(jié)果中得到所需的操作數(shù),而不需要等待CPU將結(jié)果寫回寄存器. 而第三條指令則可以從MEM階段的前推數(shù)據(jù)中獲取. 第四條指令可以從WB階段的前推數(shù)據(jù)中獲取. 將指令計算的結(jié)果通過數(shù)據(jù)前推給操作數(shù)選通器,這樣便解決了RAW的問題.

      圖4 旁路技術(shù)對數(shù)據(jù)相關(guān)問題的解決

      3 數(shù)據(jù)相關(guān)暫停機制設(shè)計

      在討論數(shù)據(jù)相關(guān)問題的時候,還得考慮一個問題,就是如果第二條指令需要第一條指令的結(jié)果,但是第一條指令是一條加載指令,并不能在執(zhí)行階段給出結(jié)果,必須在訪存階段才會得到結(jié)果. 而此時運行在譯碼階段的指令并不能通過將執(zhí)行階段的結(jié)果前推來得到對應(yīng)的操作數(shù). 如圖5 所示. l.lwz r4,0x0(r3)的結(jié)果在CC4才能得出,而在CC3就需要這個結(jié)果,所以此時需要暫停流水線[12].

      因此設(shè)計了數(shù)據(jù)有效信號tag來解決這個問題. 如圖6 所示. 在 CC3 這個時鐘,指令 l.sfeq r2,r4 的 a 操作數(shù)地址和指令l.lwz r4,0x0(r3)寫寄存器地址相同.指令l.sfeq需求指令l.lwz的結(jié)果,而此時數(shù)據(jù)是無效的,所以數(shù)據(jù)Tag為0,這時就會發(fā)出流水線暫停的請求,暫停流水線. 在 CC4 這個時鐘的時候,指令 l.lwz 獲取到了結(jié)果,這時Tag變?yōu)?,同時將結(jié)果送給指令l.sfeq,流水線解除暫停.

      為此設(shè)計了匯編指令對此進行仿真,匯編指令如下:

      l.movhi r2,0x8483

      l.ori r2,r2,0x8281

      l.ori r3,r0,0x50

      l.sw 0x0(r3),r2

      l.lwz r4,0x0(r3)

      l.sfeq r4,r2

      將匯編指令通過OR1200模擬器[13]進行仿真,得到的結(jié)果如圖7所示,l.sw將數(shù)據(jù)“r2=84838281”存儲在地址為0x50的內(nèi)存地址上,然后通過加載指令l.lwz加載相同內(nèi)存地址的數(shù)據(jù)保存到r4中,之后由l.sfeq比較r2和r4的結(jié)果是否相等,比較的結(jié)果為相等,因此flag信號變成1.

      圖5 使用加載指令存在的數(shù)據(jù)相關(guān)

      圖6 數(shù)據(jù)有效信號Tag在暫停判斷中的作用

      圖7 OR1200 模擬器仿真結(jié)果

      將以上指令通過modelsim仿真得到圖8. 由圖可知,指令 l.sfeq r4,r2 在解碼階段操作數(shù) a 的地址為0x4與上一條指令 l.lwz r4,0x0(3)執(zhí)行階段的地址相同,而此時 ex_wdatatag 為 0,顯示此時指令 l.lwz r4,0x0(3)并未在執(zhí)行階段得到結(jié)果. 所以這時候if_freeze和id_freeze變成1,流水線的取指和解碼工作暫停一個時鐘. 當指令 l.lwz r4,0x0(3)進行到訪存階段,此時mem_wdatatag信號已經(jīng)為1,表示指令得到了結(jié)果.reg1將此時mem_wdata的結(jié)果作為輸入傳遞給操作數(shù)寄存器a. 再經(jīng)過一個時鐘比較指令 l.sfeq r4,r2到達訪存階段的時候flag被置為1.

      圖8 數(shù)據(jù)相關(guān)暫停機制的modelsim仿真

      4 結(jié)語

      流水線是現(xiàn)代CPU中普遍采用的一種技術(shù),它只需要增加很少的硬件就能使CPU的速度提高很多. 本文通過修改OR1200的流水線解決了OR1200通過暫停等待訪存結(jié)束的問題,針對流水線數(shù)據(jù)相關(guān)的問題重新設(shè)計了旁路判斷電路. 遇到加載類指令數(shù)據(jù)相關(guān)的時候,我們通過設(shè)計的寫寄存器數(shù)據(jù)有效信號Tag來進行寫數(shù)據(jù)有效性判斷,Tag變?yōu)?的同時將結(jié)果送給指令l.sfeq,流水線暫 停會被解除. 最終通過匯編指令對數(shù)據(jù)相關(guān)暫停機制仿真,仿真結(jié)果符合設(shè)計要求.

      1Bhavsar DK. An algorithm for row-column self-repair of RAMs and its implementation in the Alpha 21264. Proc. of the 1999 IEEE International Test Conference. Washington,DC,USA. 1999. 311–318.

      2Smith JE,Weiss S. Power PC 601 and Alpha 21064: A tale of two RISCs. Computer,1994,27(6): 46–58. [doi: 10.1109/2.294853]

      3Hennessy JL,Patterson DA. 計算機系統(tǒng)結(jié)構(gòu): 量化研究方法. 鄭緯民譯. 北京: 電子工業(yè)出版社,2004.

      4OpenCores.org. Home page. http://www.opencores.org.

      5OR1200 OpenRISC Processo. http://opencores.org/or1k/OR1200_OpenRISC_Processo.

      6王紹坤. 基于FPGA的五級流水線CPU. 計算機系統(tǒng)應(yīng)用,2015,24(3): 18–23.

      7金鵬,楊剛,胡耀. 基于 OR1200 的批處理協(xié)處理器設(shè)計.微電子學(xué)與計算機,2014,(10): 39–42.

      8姚永斌. 超標量處理器設(shè)計. 北京: 清華大學(xué)出版社,2014.

      9Patterson DA,Hennessy JL. Computer organization and design: The hardware/software interface. Amsterdam,Boston,USA: Morgan Kaufmann,2005.

      10Gautham P,Parthasarathy R,Balasubramanian K. Lowpower pipelined MIPS processor design. Proc. of the 12th International Symposium on Integrated Circuits. Suntec,Singapore. 2009. 462–465.

      11張德學(xué),張小軍,郭華. FPGA 現(xiàn)代數(shù)字系統(tǒng)設(shè)計及應(yīng)用.北京: 清華大學(xué)出版社,2015.

      12甄建勇. 深入理解 OpenRISC 體系結(jié)構(gòu). 北京: 機械工業(yè)出版社,2015.

      13張望亨. 基于OpenRISC1200 32位CPU的miniSoC系統(tǒng)設(shè)計和軟硬件驗證[碩士學(xué)位論文]. 成都: 電子科技大學(xué),2013.

      Improved Design of Pipeline CPU Based on OR1200

      CAO Kai-Ning,SHEN Xing-Hao,JI Meng-Fei,CHANG Yu-Chun

      (College of Electronic Science and Engineering,Jilin University,Changchun 130012,China)

      The pipeline is the key technology of manufacturing high-performance CPU. The OR1200,which has been widely studied currently,is a 4-stage pipeline CPU with a free open source. Without MEM stage which should be designed in OR1200,the pipeline will be stalled to wait for load or store instruction. In this research,we design a MEM stage for OR1200 in LSU. Hazard detection and data forwarding units have been included for efficient implementation of the pipeline. On the other hand,when a data requested by a load instruction has not yet become available,it leads to loaduse hazards. To resolve this hazard problem,we design a data valid signal Tag to control stalling of pipeline. The pipeline is stalled by the Tag signal for one stage and then continues with the forwarding of data,as the simulation result shows.

      OR1200; pipeline; data hazard; data forwarding

      常玉春,E-mail: changyc@jlu.edu.cn

      曹凱寧,沈興浩,姬夢飛,常玉春.改進 OR1200 CPU 流水線的設(shè)計.計算機系統(tǒng)應(yīng)用,2017,26(12):268–271. http://www.c-s-a.org.cn/1003-3254/5938.html

      吉林省省級經(jīng)濟結(jié)構(gòu)戰(zhàn)略調(diào)整引導(dǎo)資金專項項目(2015Y041); 吉林省重點科技攻關(guān)項目(20160204042GX)

      2016-12-06; 修改時間: 2016-12-19; 采用時間: 2017-01-16

      猜你喜歡
      流水線旁路寄存器
      Gen Z Migrant Workers Are Leaving the Assembly Line
      旁路放風效果理論計算
      Lite寄存器模型的設(shè)計與實現(xiàn)
      流水線
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      急診不停跳冠狀動脈旁路移植術(shù)在冠心病介入失敗后的應(yīng)用
      報廢汽車拆解半自動流水線研究
      IVPN業(yè)務(wù)旁路解決方案
      SIMATIC IPC3000 SMART在汽車流水線領(lǐng)域的應(yīng)用
      自動化博覽(2014年6期)2014-02-28 22:32:05
      曲美他嗪在非體外循環(huán)下冠狀動脈旁路移植術(shù)中的心肌保護作用
      海阳市| 龙胜| 灌南县| 海林市| 石狮市| 本溪市| 福海县| 九江县| 远安县| 贵州省| 蒙自县| 友谊县| 中西区| 会东县| 沙洋县| 醴陵市| 岗巴县| 滁州市| 河北区| 双牌县| 万载县| 江北区| 宝坻区| 曲沃县| 长宁县| 嘉鱼县| 上高县| 盐池县| 额敏县| 望谟县| 石楼县| 大洼县| 古田县| 噶尔县| 灌南县| 井研县| 秀山| 揭西县| 芜湖市| 丽水市| 宽城|