以下文章來源于北京開源芯片研究院,作者賈志杰、安旭
本次資源包升級內容
升級了Docker,注意下載鏈接已更新
增加了香山仿真演示
增加了本次使用的香山工具AM、NEMU、difftest的詳細解說
本次整合包適合以下人群使用
零基礎入門,沒有芯片設計經驗的人
不想在本地搭建運行環境
想要一步到位,快速上手的心急派
特別說明
整合包基于高性能開源處理器香山制作,是香山團隊傾情打造手把手教學。
這個整合包發布經過“一生一芯”同學們的實戰檢測。歡迎加入QQ群793255484,與小伙伴們一起探討香山使用經驗。
資源包在通過Docker形式提供了運行香山必須的Linux操作系統、香山開發環境、香山和仿真相關工具的代碼,會大大降低自己部署環境和工具的難度,理論上比自己部署要方便。如果想自己配置,可以參看本地使用香山的文檔自行安裝。
電腦配置需求(筆者電腦配置參考)
操作系統:Windows 11
CPU:不做強制性要求,但是性能越高越好
內存:推薦32G+
整合包推薦放在固態硬盤中
壹
通過Docker使用香山第一部分:
準備工作
1. XS-Docker提供了啥、如何下載以及Docker使用學習
a. docker提供:Linux操作系統Ubuntu 20.04、香山開發環境(軟件包和編譯工具鏈)、香山和仿真相關工具的代碼
b. 下載XS-Docker鏈接
提取碼:bv9t
c. Docker安裝使用幫助
(Docker的使用說明非常多,此處是同學自己的學習記錄,歡迎大家交流分享)
2. 運行XS-Docker的命令
注:以下命令中:#符號表示之后文字為注釋,使用時不必復制;<>符號表示變量,需要替換為用戶看到的實際值,符號本身不要保留
最后一步如果成功,命令行界面會變為:
這樣就成功進入docker鏡像提供的ubuntu界面。
貳
通過Docker使用香山第二部分:
香山仿真演示
我們在 docker 鏡像里提供了預先編譯好的香山仿真模擬程序,可以用它來運行 coremark、linux_hello 等程序。
此處我們暫不解釋各項參數的含義,只先熟悉一下仿真運行程序的整個過程。
從第一部分的最后,進入 ubuntu 界面開始:
運行成功可以看到類似下圖的輸出:
如果電腦性能較差,可能在中間卡住較長時間。本人電腦(i5-1240P)小于5分鐘完成。
#給大家展示下機主 CPU 狂燒的樣子,嘎嘎O(∩_∩)O
如果電腦性能較好,可以嘗試運行更復雜的 linux_hello 程序。
運行成功可以看到如下輸出:
叁
通過Docker使用香山第三部分:
本次使用的香山工具解說
1. AM
仿真時用到的 .bin 文件,是測試程序鏡像,將其輸入給 EMU 就可以模擬香山核運行該程序的過程。
獲取 .bin 的方式有多種,最常用是通過 AM 來生成。
AM 是一個裸機運行時環境,我們可以使用 AM 來編譯在香山裸機上運行的程序。
在 AM 的 apps 目錄下提供了一些預置的程序源代碼,比如 coremark、hello、microbench 等。下面以 coremark 為例,演示利用AM編譯生成測試程序鏡像的過程。
按 riscv64-xs 架構進行編譯
編譯完成后,可以看到新生成的文件夾 build
其中 riscv64-xs 目錄為編譯中間文件,其他三個是編譯產物。
txt 是程序的反匯編文件
bin 是仿真所需的程序鏡像
2. NEMU
NEMU 是一個解釋型的指令集模擬器,在仿真過程中它同樣執行程序,為香山提供一個作為對照的正確結果。
第一步:make riscv64-xs-ref_defconfig
第二步:make -j
完成這兩步,才是完成“給香山對照的 nemu”的編譯
編譯生成的結果,在 build 目錄的如下位置
3. difftest(差分測試)
difftest 是一個協同仿真框架,它在仿真運行時負責將香山核的輸出與 NEMU 的輸出進行對比,判斷香山是否按照指令集定義的那樣正確運行。
difftest 是驗證香山功能正確性的重要工具,也對我們定位 bug 和解決 bug 提供了極大幫助。
difftest 與香山代碼有較高的耦合,目前是作為一個子模塊放在香山目錄下,在編譯仿真程序 emu 時將自動使用。
在仿真運行(執行 emu 時),通過 --diff 參數指定 nemu 來開啟對比功能,如果不需要對比可以使用 --no-diff 關閉該功能,這時將只進行香山核的仿真。
4. 編譯香山核的仿真程序 EMU
有了前面部分的基礎,這里我們嘗試自行編譯前面仿真演示中使用的香山仿真程序EMU。
這一過程中使用 mill 將香山的 chisel 語言代碼編譯為 Verilog 語言代碼,然后通過 verilator 將 Verilog 代碼編譯為 c++ 語言的仿真模擬程序。
這些步驟已經在香山的 Makefile 里預先配置好了,我們可以通過如下命令直接編譯
解釋參數
emu,表示編譯預設為 emu,目標是編譯仿真程序 EMU。香山還有生成可綜合 Verilog 的預設,具體可見Makefile。
-j32 ,是 make 編譯命令的參數,表示編譯時使用 32 個線程。
后面大寫的參數是對EMU的設置,其中:
CONFIG 指定香山配置,MinimalConfig 是簡化版香山配置,為雙發射,其余內部參數也相應縮減;DefaultConfig 是完整版香山配置,為6發射,需要的編譯時間較長,并且對機器性能有較高要求。不指定 CONFIG 時默認為 DefaultConfig 配置。
EMU_THREADS 指定之后運行 EMU 時可用到的線程
EMU_TRACE=1 指定之后運行 EMU 時候可以打印波形
編譯 MinimalConfig 至少需要 40GB 內存,編譯 DefaultConfig 則推薦 80GB 內存以上。
這一步時間會比較久,需要耐心等待,生成結束后,可以在 ./build/ 目錄下看到一個名為 emu 的仿真程序。
(如果你已經做到這里了,可以在 gitlink 的 howtouseissue 提交截圖獲得獎勵~)
利用 emu 仿真程序,可以讓香山核運行指定的測試程序,進而驗證功能或者測試性能。
emu 的基本用法是:
其中:
-i 指定測試程序鏡像
--diff 指定用于給 difftest 提供對照的 nemu 動態鏈接庫
2> 是 shell 操作,把 std error 的數據(性能計數器的數據)打印到文件,之后可以通過該文件查看性能計數器的結果。這樣避免性能計數器結果和emu執行結果混在一起難以觀察。
emu 還可以打印出波形
可以使用 --dump-wave 參數打開波形,并使用 -b 和 -e 參數設置生成波形的開始和結束周期,例如想要生成 10000 ~ 11000 周期的波形,可以使用如下命令:
其中 -b 和 -e 的默認值為 0,注意僅當 -e 參數大于 -b 時才會真正記錄波形;波形文件將會生成在 ./build/ 目錄下,波形格式默認為 vcd。
emu 的更多功能可以使用 help 查看
歡迎大家來開源芯片社區查看更多香山使用文檔。
-
處理器
+關注
關注
68文章
19286瀏覽量
229854 -
操作系統
+關注
關注
37文章
6827瀏覽量
123333 -
開源
+關注
關注
3文章
3349瀏覽量
42501 -
命令
+關注
關注
5文章
684瀏覽量
22027 -
Docker
+關注
關注
0文章
458瀏覽量
11857
原文標題:如何通過Docker使用香山
文章出處:【微信號:中國開放指令生態RISCV聯盟,微信公眾號:中國開放指令生態RISCV聯盟】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論