国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        大道至簡——RISC-V架構之魂(中)

        2020-06-06 12:21
        TXP嵌入式
        關注

        本文為《RISC-V CPU設計》專欄和《RISC-V嵌入式軟件開發》專欄系列文章之一。

        注:本文節選自“硅農亞歷山大”所著國內第一本系統介紹CPU與RISC-V設計的中文書籍《手把手教你設計CPU:RISC-V處理器篇》(預計將于2018年3~4月上市)。

        “大道至簡——RISC-V架構之魂”——分成上中下三篇,本文是中篇。關注文末公眾號后可查詢上中下三篇的內容。

        本文上接《大道至簡——RISC-V架構之魂(上)》

        2.3 規整的指令編碼

        在流水線中能夠盡早盡快的讀取通用寄存器組,往往是處理器流水線設計的期望之一,這樣可以提高處理器性能和優化時序。這個看似簡單的道理在很多現存的商用RISC架構中都難以實現,因為經過多年反復修改不斷添加新指令后,其指令編碼中的寄存器索引位置變得非常的凌亂,給譯碼器造成了負擔。

        得益于后發優勢和總結了多年來處理器發展的教訓,RISC-V的指令集編碼非常的規整,指令所需的通用寄存器的索引(Index)都被放在固定的位置,如圖2所示。因此指令譯碼器(Instruction Decoder)可以非常便捷的譯碼出寄存器索引然后讀取通用寄存器組(Register File,Regfile)。

        圖2 RV32I規整的指令編碼格式

        2.4 簡潔的存儲器訪問指令

        與所有的RISC處理器架構一樣,RISC-V架構使用專用的存儲器讀(Load)指令和存儲器寫(Store)指令訪問存儲器(Memory),其他的普通指令無法訪問存儲器,這種架構是RISC架構的常用的一個基本策略,這種策略使得處理器核的硬件設計變得簡單。

        存儲器訪問的基本單位是字節(Byte)。RISC-V的存儲器讀和存儲器寫指令支持一個字節(8位),半字(16位),單字(32位)為單位的存儲器讀寫操作,如果是64位架構還可以支持一個雙字(64位)為單位的存儲器讀寫操作。

        RISC-V架構的存儲器訪問指令還有如下顯著特點:

        為了提高存儲器讀寫的性能,RISC-V架構推薦使用地址對齊的存儲器讀寫操作,但是地址非對齊的存儲器操作RISC-V架構也支持,處理器可以選擇用硬件來支持,也可以選擇用軟件來支持。

        由于現在的主流應用是小端格式(Little-Endian),RISC-V架構僅支持小端格式。有關小端格式和大端格式的定義和區別,本文在此不做過多介紹,若對此不甚了解的初學者可以自行查閱學習。

        很多的RISC處理器都支持地址自增或者自減模式,這種自增或者自減的模式雖然能夠提高處理器訪問連續存儲器地址區間的性能,但是也增加了設計處理器的難度。RISC-V架構的存儲器讀和存儲器寫指令不支持地址自增自減的模式。

        RISC-V架構采用松散存儲器模型(Relaxed Memory Model),松散存儲器模型對于訪問不同地址的存儲器讀寫指令的執行順序不作要求,除非使用明確的存儲器屏障(Fence)指令加以屏蔽。

        這些選擇都清楚地反映了RISC-V架構力圖簡化基本指令集,從而簡化硬件設計的哲學。RISC-V架構如此定義非常合理,能夠達到能屈能伸的效果。譬如:對于低功耗的簡單CPU,可以使用非常簡單的硬件電路即可完成設計;而對于追求高性能的超標量處理器則可以通過復雜設計的動態硬件調度能力來提高性能。

        2.5 高效的分支跳轉指令

        RISC-V架構有兩條無條件跳轉指令(Unconditional Jump),jal與jalr指令。跳轉鏈接(Jump and Link)指令jal可用于進行子程序調用,同時將子程序返回地址存在鏈接寄存器(Link Register:由某一個通用整數寄存器擔任)中。跳轉鏈接寄存器(Jump and Link-Register)指令jalr指令能夠用于子程序返回指令,通過將jal指令(跳轉進入子程序)保存的鏈接寄存器用于jalr指令的基地址寄存器,則可以從子程序返回。

        RISC-V架構有6條帶條件跳轉指令(Conditional Branch),這種帶條件的跳轉指令跟普通的運算指令一樣直接使用2個整數操作數,然后對其進行比較,如果比較的條件滿足時,則進行跳轉。因此,此類指令將比較與跳轉兩個操作放到了一條指令里完成。

        作為比較,很多的其他RISC架構的處理器需要使用兩條獨立的指令。第一條指令先使用比較指令,比較的結果被保存到狀態寄存器之中;第二條指令使用跳轉指令,判斷前一條指令保存在狀態寄存器當中的比較結果為真時則進行跳轉。相比而言RISC-V的這種帶條件跳轉指令不僅減少了指令的條數,同時硬件設計上更加簡單。

        對于沒有配備硬件分支預測器的低端CPU,為了保證其性能,RISC-V的架構明確要求其采用默認的靜態分支預測機制,即:如果是向后跳轉的條件跳轉指令,則預測為“跳”;如果是向前跳轉的條件跳轉指令,則預測為“不跳”,并且RISC-V架構要求編譯器也按照這種默認的靜態分支預測機制來編譯生成匯編代碼,從而讓低端的CPU也能得到不錯的性能。

        為了使硬件設計盡量簡單,RISC-V架構特地定義了所有的帶條件跳轉指令跳轉目標的偏移量(相對于當前指令的地址)都是有符號數,并且其符號位被編碼在固定的位置。因此,這種靜態預測機制在硬件上非常容易實現,硬件譯碼器可以輕松的找到這個固定的位置,并判斷其是0還是1來判斷其是正數還是負數,如果是負數則表示跳轉的目標地址為當前地址減去偏移量,也就是向后跳轉,則預測為“跳”。當然對于配備有硬件分支預測器的高端CPU,則可以采用高級的動態分支預測機制來保證性能。

        2.6 簡潔的子程序調用

        為了理解此節,需先對一般RISC架構中程序調用子函數的過程予以介紹,其過程如下:

        進入子函數之后需要用存儲器寫(Store)指令來將當前的上下文(通用寄存器等的值)保存到系統存儲器的堆棧區內,這個過程通常稱為“保存現場”。

        在退出子程序之時,需要用存儲器讀(Load)指令來將之前保存的上下文(通用寄存器等的值)從系統存儲器的堆棧區讀出來,這個過程通常稱為“恢復現場”。

        “保存現場”和“恢復現場”的過程通常由編譯器編譯生成的指令來完成,使用高層語言(譬如C或者C++)開發的開發者對此可以不用太關心。高層語言的程序中直接寫上一個子函數調用即可,但是這個底層發生的“保存現場”和“恢復現場”的過程卻是實實在在地發生著(可以從編譯出的匯編語言里面看到那些“保存現場”和“恢復現場”的匯編指令),并且還需要消耗若干的CPU執行時間。

        為了加速這個“保存現場”和“恢復現場”的過程,有的RISC架構發明了一次寫多個寄存器到存儲器中(Store Multiple),或者一次從存儲器中讀多個寄存器出來(Load Multiple)的指令,此類指令的好處是一條指令就可以完成很多事情,從而減少匯編指令的代碼量,節省代碼的空間大小。但是此種“Load Multiple”和“Store Multiple”的弊端是會讓CPU的硬件設計變得復雜,增加硬件的開銷,也可能損傷時序使得CPU的主頻無法提高,筆者在曾經設計此類處理器時便深受其苦。

        RISC-V架構則放棄使用這種“Load Multiple”和“Store Multiple”指令。并解釋,如果有的場合比較介意這種“保存現場”和“恢復現場”的指令條數,那么可以使用公用的程序庫(專門用于保存和恢復現場)來進行,這樣就可以省掉在每個子函數調用的過程中都放置數目不等的“保存現場”和“恢復現場”的指令。

        此選擇再次印證了RISC-V追求硬件簡單的哲學,因為放棄“Load Multiple”和“Store Multiple”指令可以大幅簡化CPU的硬件設計,對于低功耗小面積的CPU可以選擇非常簡單的電路進行實現,而高性能超標量處理器由于硬件動態調度能力很強,可以有強大的分支預測電路保證CPU能夠快速的跳轉執行,從而可以選擇使用公用的程序庫(專門用于保存和恢復現場)的方式減少代碼量,但是同時達到高性能。

        1  2  下一頁>  
        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          人工智能 獵頭職位 更多
          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 九九熟女| 沁水县| 国产九九在线视频| 龙川县| 久草网址| 影音先锋资源| 美女福利导航| 亚洲色偷偷| wwwww黄| 色婷婷Av| 久久精品| 南涧| 亚洲自拍另类| 三级片久久| 仁化县| 日韩1级| 97大香| 烟台市| 久久久精品一区| 在线观看亚洲天堂| 安阳县| 99啪啪| 熟女制服丝袜,中文字幕| 熟女人妻AV| AV黄色| 楚雄市| 国产尻逼| 91日韩在线| 92自拍视频| jizz日本大全| 东明县| 久久久久久亚洲AV成人无码激情| 巫山县| 额敏县| 538av| 熟女网址| 亚洲最大三级网站| 赤峰市| 超碰91在线| 久艹AV| 青青AV|