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