在Ubuntu 18.04 上執行riscv-torture (run riscv-torture on Ubuntu 18.04)
riscv-torture介紹
基本上就是一個個產生類隨機組合語言的RISCV測試工具。主要流程為產生random test 組合語言程式,接下來透過riscv-isa-sim先執行過取得signature(general purpose register的結果),然後與待測核心(DUT)的general purpose register執行結果做比較來驗證核心的正確性。
riscv-torture在riscv發展史上算是偏早期的工具,因此他的相依性有時會遇到點問題。他master上的sbt版本還是0.3.8版,現在sbt已經出到1.3.x版了,此外他的執行方式相依於java,這算是意料之內,因為他是透過scala寫成的。
在Ubuntu 18.04執行riscv-torture
首先先安裝openjdk-8-jdk和openjdk-8-jre用以執行sbt。
$ sudo apt install openjdk-8-jre openjdk-8-jdk
若有版本多個java版本可以透過以下指令選擇到openjdk-8:
$ sudo update-alternatives --config java
若有java key的問題,可以更新ca:
sudo update-ca-certificates -f
接下來下載riscv-torture
$ git clone https://github.com/ucb-bar/riscv-torture --recursive
在執行後可能會遇到一些問題,例如:
java -Xmx1G -Xss8M -XX:MaxPermSize=128M -jar sbt-launch.jar 'generator/run '
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0
Getting org.scala-sbt sbt 0.13.8 ...
:: problems summary ::
:::: WARNINGS
module not found: org.scala-sbt#sbt;0.13.8
==== local: tried
/home/user/.ivy2/local/org.scala-sbt/sbt/0.13.8/ivys/ivy.xml
==== typesafe-ivy-releases: tried
http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.13.8/ivys/ivy.xml
==== Maven Central: tried
http://repo1.maven.org/maven2/org/scala-sbt/sbt/0.13.8/sbt-0.13.8.pom
::::::::::::::::::::::::::::::::::::::::::::::
:: UNRESOLVED DEPENDENCIES ::
::::::::::::::::::::::::::::::::::::::::::::::
:: org.scala-sbt#sbt;0.13.8: not found
::::::::::::::::::::::::::::::::::::::::::::::
:::: ERRORS
Server access Error: Connection refused (Connection refused) url=http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.13.8/ivys/ivy.xml
SERVER ERROR: HTTPS Required url=http://repo1.maven.org/maven2/org/scala-sbt/sbt/0.13.8/sbt-0.13.8.pom
:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
unresolved dependency: org.scala-sbt#sbt;0.13.8: not found
Error during sbt execution: Error retrieving required libraries
(see /home/user/.sbt/boot/update.log for complete log)
Error: Could not retrieve sbt 0.13.8
Makefile:23: recipe for target 'gen' failed
make: *** [gen] Error 1
這是因為他會去http://repo1.maven.org/maven2找sbt來下載,但是riscv-torture的sbt版本太舊,http://repo1.maven.org/maven2這個repo沒有(只有0.99版以上),因此無法取得。此外這個repo現在只接受https,因此會有問題(https是世界潮流阿)。這時需要在家目錄下的.sbt
資料夾中新增repositories檔案如下:
[repositories]
typesafe-ivy-releases: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
maven-central: https://repo1.maven.org/maven2/
sonatype-snapshots: https://oss.sonatype.org/content/repositories/snapshots
這樣可以讓他下載相依性時去找https://repo.typesafe.com/typesafe/ivy-releases 這repo下載較舊版本的sbt。 接下來在riscv-torture 資料夾下make產生測試資料:
$ make gen
或是產生完整的測試資料與對應正解,此target必須先安裝riscv64-unknown-elf-gcc:
$ make igentest
產生riscv32的測試資料
由於riscv-torture預設只支援riscv64,因此要使用其產生riscv32的測試資料必須修改原始碼,這部份可以參考picorv32的patch來修改,patch在此連結:https://github.com/cliffordwolf/picorv32/blob/master/scripts/torture/riscv-torture-rv32.diff,若是對內容有興趣也可以參考picorv32作者cliffordwolf與ucb-bar的團隊討論:https://github.com/ucb-bar/riscv-torture/issues/6
Arch Linux上安裝
基本上裝完java和jdk後就可以直接跑了,不會有什麼問題,如果有問題也可以按照以上方法更改repositories。
Reference
https://www.scala-sbt.org/1.x/docs/Launcher-Configuration.html#Example