您當前的位置:首頁 > 繪畫

國產RISC-V開源平臺——平頭哥SMART模擬平臺

作者:由 尹天宇 發表于 繪畫時間:2020-05-29

本專欄之前的文章中我們介紹了UC Berkeley開發的Rocket/BOOM處理器以及配套的Chipyard平臺。這篇文章給大家介紹國內知名晶片設計公司平頭哥開發的SMART平臺。

平頭哥半導體是國內開源晶片的積極引領者,其一直致力於國內特別是RISC-V架構處理器的開源工作。 SMART平臺給筆者的感受就是它真心想為使用者創造一個便於使用並且可以自由開發的的生態。透過SMART平臺使用者可以以更低的門檻使用平頭哥的開源處理器,這對於國內RISC-V的普及與推廣、激發更多同學對處理器技術的興趣起到了非常重要的作用。

SMART平臺是一個處理器模擬平臺,它具有如下功能:

使用目標處理器進行SoC整合

模擬整合的SoC執行測試程式

檢視測試報告

檢視SoC模擬訊號波形

替換模擬使用的Memory和ICG

除此之外,它還特別設計了圖形介面幫助使用者快速使用這些功能,這一點也是筆者覺得比較讚的。

SMART平臺支援平頭哥的多種處理器,本文接下來使用的SMART平臺內的處理器為業界報導的效能最強的RISC-V處理器——平頭哥C910處理器。

SMART平臺有哪些內容

拿到Smart平臺後,我們可以看到其根目錄下有如下幾個檔案和目錄:

setup。csh

是一個CShell指令碼,用來快速設定SMART平臺執行所需的環境變數;

run_smart

檔案是一個使用wish指令碼編寫的圖形化介面,用於快速呼叫SMART的各項功能,具體介紹見下文;

tools

目錄中為模擬時用到的一些工具、指令碼,值得注意的就是將hex檔案轉換為pattern檔案(用於tb中初始化儲存器)的工具就在這裡;

lib

目錄為執行程式所需的庫檔案,包括連線指令碼、程式初始化、中斷向量表和中斷服務程式等;

rtl/cpu

目錄存放著CPU的原始碼(模擬模型)及其相關的Memory等IP;

rtl/platform

目錄存放Smart平臺,主要是SoC相關的程式碼;

tb

目錄存放模擬用的testbench,包含記憶體的初始化、訊號波形儲存、模擬行為結束判定以及程式執行軌跡的檢測等功能;

case

目錄存放模擬的測試激勵,包括C程式和彙編程式兩種,包括效能、低功耗、中斷等多種測試程式;

workdir

為使用者使用的目錄,存放模擬產生的臨時檔案、測試結果和波形等。

SMART平臺有哪些功能

作為一個平頭哥處理器的整合與測試平臺,SMART具有相當多方便的功能,本節接下來給予一一介紹。

修改setup。csh

setup。csh

中主要為模擬工具選擇及其對應的環境變數的設定,剛拿到SMART平臺首次使用前,需要按照自己的實際情況修改

setup。csh

我們先選擇模擬工具。SMART平臺支援VCS和IRUN兩種模擬工具,本文中使用筆者較為常用的Synopsys VCS進行模擬。 選擇方法是在

setup。csh

的開頭選擇

set EDA_TOOL = VCS

之後設定主要的環境變數

VERDI_HOME

DEBUSSY_PLI

以及

VCS_HOME

,以及VCS的License指令碼路徑。

儲存後在命令列中執行setup。csh使其生效(以後每次新開啟命令列執行SMART平臺前均需此步驟):

source setup。csh

開啟圖形介面

為了方便使用者快速使用SMART平臺的各種功能,SMART使用wish設計了一個圖形介面。在SMART根目錄中執行如下命令,即可開啟SMART的圖形介面,SMART圖形介面上共有6組命令。

。/run_smart

國產RISC-V開源平臺——平頭哥SMART模擬平臺

SMART平臺的圖形介面

第一組命令有關環境變數設定與使用方法介紹。點選

open setup。csh

即可開啟前面提到的環境變數配置檔案;點選

open smart readme

即可開啟SMART的README檔案,該檔案中為SMART平臺以命令列方式(即非圖形介面方式)執行的使用說明。

第二組命令可以檢視程式碼和波形。點選

open_verdi

即可透過verdi檢視SMART平臺模擬使用的SoC程式碼和處理器程式碼;點選

open_wave

即可使用verdi檢視模擬最新一次生成的fsdb波形檔案。

第三組命令與整合有關。點選

open integration ref

可開啟處理器SoC整合方案示例,在無特殊需求時,使用此方案進行整合是一種比較好的選擇;點選

open clk_en ref

可以開啟處理器時鐘系統的整合例項,透過其中的

CLOCK_RATIO

引數可以配置不同的系統時鐘分頻得到

clk_en

,根據模擬結果可用於實際電路系統的設計。

第四組命令是處理器除錯功能的測試程式碼。筆者將它們理解為jtag模組的測試與使用方法示例。這些測試,透過操縱jtag訊號將處理器置於debug模式,並且透過一系列task來完成讀寫暫存器或Memory的操作。點選

open mem/gpr test code

可以檢視這些測試程式碼,點選

run debug mem/gpr test

可以執行測試。

第五組命令是測試用例相關。點選

run_dhry

可以模擬執行Dhrystone程式(和本專欄前面使用Rocket/BOOM模擬執行的Dhrystone程式相同,本文下面也會使用Dhrystone程式測試平頭哥C910處理器的效能); 點選

run_int_case

可以執行中斷相關的測試用例,其中

ct_plic_int_smoke。s

為軟體中斷的測試程式,

ct_plic_int_smoke_hw。s

為硬體中斷的測試程式,使用者也可以參考這些測試程式,進行自定義中斷服務函式設計、中斷配置、中斷觸發等;

open_case_list

可以檢視當前SMART平臺支援的所有測試用例,而點選

run_all_function_case

則一鍵執行上面看到的這些用例,之後可以透過

case_report_check

檢視測試報告,部分典型測試用例介紹見下文。

第六組中的

Exit

命令則可退出SMART圖形介面。

SMART平臺中的測試用例

為了更廣地覆蓋處理器測試的各個方面,平頭哥SMART平臺包括了二十多個測試用例,包括整數/浮點計算、向量指令、中斷與異常、CSR讀寫以及Cache相關測試等。下面舉幾個測試用例等典型例子:

ct_imac_smoke。s:覆蓋RV64IMAC指令集指令

ct_cskyee_smoke。s:覆蓋RV64平頭哥拓展指令集指令

ct_vdsp_smoke。s:覆蓋RV64V定義的Vector整形運算指令,包括VALU、 VMISC、VMASK、VMULT、VSHIFT、VDIV等指令

ct_csr_operate。s:覆蓋CSR的暫存器讀寫,立即數讀寫和位操作

ct_lsu_amo_basic_smart。s:對每條amo指令功能進行功能測試

ct_lsu_dcache_clr_64k_smart。s:測試在64Kcache配置下的dcache。cva,dcache。csw,dcache。call指令的功能

ct_lsu_prefetch_prf_basic_va_smar。s:測試L1、L2預取功能開啟,以及不同的預取長度設定下的預取功能

使用SMART平臺模擬C910處理器執行Dhrystone程式

本文接下來使用SMART平臺模擬C910處理器執行Dhrystone程式,一方面是給大家展示一下使用SMART平臺執行模擬、檢視結果、檢視波形的流程,另一方面也與Rocket/BOOM比較一下效能。

之前的文章中沒有介紹Dhrystone是什麼,導致許多讀者反映不太理解,那本文在這裡簡要介紹一下Dhrystone程式。

Dhrystone是由Reinhold P。 Weicker在1984年提出來的一個基準測試程式,其主要目的是測試處理器的整數運算和邏輯運算的效能。其測試方法很簡單,就是單位時間內跑了多少次Dhrystone程式,其指標單位為DMIPS/MHz。 歷史的原因我們把在VAX-11/780機器上的測試結果1757 Dhrystones/s定義為1 DMIPS,在其他平臺測試到的每秒Dhrystones數應除以1757,才是真正的DMIPS數值,故DMIPS其實表示的是一個相對值。

執行Dhrystone程式

在SMART平臺上執行Dhrystone程式非常容易,只要在圖形介面上點選

run_dhry

,或者在命令列中執行如下命令即可。

cd workdir # 進入工作目錄

run 。。/case/dhry/Main。c # 執行模擬

之後即可在命令列中看到程式執行結果,如下圖所示:

國產RISC-V開源平臺——平頭哥SMART模擬平臺

SMART上用C910執行Dhrystone程式

圖中的結果為6。32222 dmips/MHz。 和上篇文章中一樣,假定時鐘頻率為1MHz,換算成Dhrystone per Second約為11108。14,可以發現相比BOOM和Rocket有顯著地提高。

檢視波形

模擬程式結束之後,可以看到workdir中已經產生了fsdb檔案,我們可以透過點選圖形介面中的

open_verdi

,開啟verdi並檢視該波形。

我們可以選擇具體訊號檢視波形,透過波形我們一方面可以看處理器的行為(尤其是看處理器指令退休的監測訊號,可以得知當前處理器執行完了哪些指令,如下圖所示),另一方面也可以看整個平臺各個部分的訊號,這一點尤其在SMART平臺上構建自己的SoC時特別有用。

國產RISC-V開源平臺——平頭哥SMART模擬平臺

使用Verdi檢視C910的指令退休訊號波形

本文小節

本文首先介紹了平頭哥SMART平臺的特點和功能,它是平頭哥為方便使用者使用平頭哥處理器構建SoC而設計的模擬平臺。之後我們在SMART平臺中模擬平頭哥C910處理器執行Dhrytstone程式,並與前文中的Rocket/BOOM進行對比,看出C910的效能確實遠高於BOOM。最後我們透過觀察波形來觀察處理器的行為。

標簽: Smart  處理器  模擬  平臺  Dhrystone