顯示具有 riscv 標籤的文章。 顯示所有文章
顯示具有 riscv 標籤的文章。 顯示所有文章

2023年11月10日 星期五

Chisel 學習筆記 - 環境建立

近日 Jserv 在期 2023 年度課程中仿效 UC Berkeley 的課程, 計劃透過課程 Lab 引導學生學習 Chisel 來實作 RISC-V 核心

為此他高度簡化了原本 UC Berkeley 的教程, 建立一個新的 Lab, 目標是帶領學生實作 5-stage pipeline RISC-V processor

在 Lab 3 的 Hackmd 頁面上可以看到幾個章節:

  • Install sbt
  • Chisel Tutorial
  • Chisel Bootcamp & Chisel 介紹
  • Single-cycle RISC-V CPU

這篇文章的重點是放在建立可攜式的 Scala Build Tool 環境, 由於並非每個人都想在日常使用環境與這類開發環境混在一起, 希望儘可能保持系統的單純與乾淨程度. 所以還是選擇透過 Apptainer 這個 rootless 的 container 技術來建立環境. Apptainer 的安裝相當簡單, 在官網的 Installation 頁面可以找到個別 Linux Distro 的安裝方式. 至於 Apptainer 的使用方式則可以參考個人先前的介紹文.

對於 SBT 於 Linux  上的安裝, 在官網提供了兩個方式, 分別是透過 SDKMAN 與 debian-based repository 的方裝方式, 由於使用 apptainer, 所以我們可以選擇透過 debian-based repository 的方式.

經嘗試後, 下列為建立 apptainer sandbox 的 script

#!/bin/sh export SANDBOX=chisel_env
rm -rf $SANDBOX
rm -rf $SANDBOX-overlay
apptainer build --fakeroot --sandbox $SANDBOX docker://ubuntu:latest
apptainer exec --fakeroot --writable $SANDBOX apt update
apptainer exec --fakeroot --writable $SANDBOX apt dist-upgrade -yqq
apptainer exec --fakeroot --writable $SANDBOX apt install openssh-client openjdk-11-jre-headless openjdk-11-jdk-headless ca-certificates-java apt-transport-https curl gnupg -yqq
apptainer exec --fakeroot --writable $SANDBOX sh -c "echo 'deb https://repo.scala-sbt.org/scalasbt/debian all main' | tee /etc/apt/sources.list.d/sbt.list"
apptainer exec --fakeroot --writable $SANDBOX sh -c "echo 'deb https://repo.scala-sbt.org/scalasbt/debian /' | tee /etc/apt/sources.list.d/sbt_old.list"
apptainer exec --fakeroot --writable $SANDBOX sh -c "curl -sL 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823' | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/scalasbt-release.gpg --import"
apptainer exec --fakeroot --writable $SANDBOX chmod 644 /etc/apt/trusted.gpg.d/scalasbt-release.gpg apptainer exec --fakeroot --writable $SANDBOX apt update
apptainer exec --fakeroot --writable $SANDBOX apt install sbt graphviz -yqq mkdir $SANDBOX-overlay
# testing sbt
apptainer exec --overlay $SANDBOX-overlay $SANDBOX sbt --version

完成後可以看到如下的字串

sbt version in this project: 1.9.7
sbt script version: 1.9.7

後續使用方式並不難, 只要提供 overlay 與 sandbox 的路徑即可, 所以可以宣告絕對路徑來使用, 假設 sandbox 與 overlay 的目錄為 ~/workspace/ca2023/ 下, 那麼可以如下先建立環境變數:

$ export SANDBOX_PATH=~/workspace/ca2023/chisel_env
$ export SANDBOX_OVERLAY=~/workspace/ca2023/chisel_env-overlay

如此可以透過下列指令在 chisel-tutorial 來執行 sbt run

$ apptainer exec --overlay $SANDBOX_OVERLAY $SANDBOX_PATH sbt run

當然也可以先執行下列指令, 得到建立環境的 shell 後切到 chisel-tutorial 目錄執行 sbt run

$ apptainer shell --overlay $SANDBOX_OVERLAY $SANDBOX_PATH
Apptainer> cd chisel-tutorial/
Apptainer> sbt run

[info] Loading project definition from /home/champ/workspace/ca2023/chisel-tutorial/project
[info] Loading settings for project chisel-tutorial from build.sbt ...
[info] Set current project to chisel-tutorial (in build file:/home/champ/workspace/ca2023/chisel-tutorial/)
[info] running hello.Hello
[info] [0.001] Elaborating design...
[info] [0.054] Done elaborating.
Computed transform order in: 208.3 ms
Total FIRRTL Compile Time: 261.5 ms
End of dependency graph
Circuit state created
[info] [0.000] SEED 1699679987261
test Hello Success: 1 tests passed in 6 cycles taking 0.008084 seconds
[info] [0.002] RAN 1 CYCLES PASSED
[success] Total time: 2 s, completed Nov 11, 2023, 5:19:48 AM
Apptainer>

如此就建立好可以使用的 container, 需要清除也很簡單, 刪除 chisel_env 與 chisel_env-overlay 即可


最後對於 Chisel 語言的學習提供的材料是 Chisel Bootcamp, Lab 3 中提供的是 GitHub 上面的兩個方式 - Docker 與 Local Install. 

然而 Chisel Bootcamp 的安裝設定, 並不是 Lab 的主要重點, 個人最建議的方式是直接使用在其 GitHub 主頁面上的 Get Started 一段中提供的 "Try it out HERE! No local installation required!", 如此可以省下安裝設置 Docker 或是 local 安裝 jupyter 碰到各種問題的時間.

2018年7月11日 星期三

開源陣營對 ARM 的回應 - www.arm-basics.com

延續上一篇文章 ARM 對 RISC-V 發起的攻擊
朋友稍早傳來一個網址 - https://www.arm-basics.com/
裏面有著針對 ARM 提出的攻擊的回覆, 簡譯如下:
  • Cost
像是 ARM 這種專屬指令集架構有著 License fee 以及 royalty 模式可能有著高達數千萬美元的支出. 此外 ARM ISA License fee 至少佔了銷售額 1%. 此外, 一整年的 ARM architecture license fee 支出就足以負擔數個 RISC-V 設計團隊. 
  • Fragmentation Risk
ARM 就碎片化他們自己的 ISAs (ARM v6/7/8, Thumb 1, Thumb2, ThumbEE, Jazelle, ARM v8, v8-M, NVIC/VIC/GICv2/3/4, multiple hypervisor variants/…, DSP/NEON/VFP/SVE).
ARM 並不允許使用者去客製, 強迫他們去買第二顆核心, 或是更聰明地轉移到 RISC-V.
  • Improvements
ARM 指令集並不允許開源開發者貢獻. 這表示你受到原始供應商和可能有的後門所支配. 這限制使得人們更難以信任你的晶片並且阻止社群免費針對你的系統無償地帶來增進.
  • Design Assurance
處理器設計的 verification 與 validation 可能佔 75% 的總設計時間. 然而讓其開源表示自願者夠參與創建你的設計, 並無償地帶來他們獨到領域的專業. 如此減少了設計成本.
擴充是選擇性的, 你能夠購買已驗證後的核心. 事實上, 8x 較少的指令以及簡單的特權架構帶來簡單的驗證過程.
  • Large, Supportive Community
一個架構良好地被活躍的社群接受是重要的, 因此能夠幫助你移植一個更加多元的軟體圈, 服務以及設計到你的處理器架構. 這保證了市場選擇, 產品品質與一個最佳到市場的時間. 專有的生態系並沒有著這樣層次的信任與開放.
RISC-V 目前弱於 ARM 現在是事實, 但是它成長的速度更快.
  • Security
Cyberthreats 表示安全性不能是選擇性的. 專有產品能是嚴重不安全的, 因為他們無法受惠於開源開發者與業界專家多年的審查, Spectre 與 Meltdown 可能會對其發生. ARM 並不關心大眾期望的安全議題. 他們長時間忽略了 ret2usr for a very long period of time, 當百萬計的 ARM 使用者暴露在這個龐大漏洞,  直到一些安全特性 (domain, PXN) 加到了 ARMv7 中. 第一個 PXN 實作是 PaX/Grsecurity 所完成, 當第一個 implementation of domain 是 PaX's UDEREF 所完成. 至今 ARM 都沒有歸功於他們. RISC-V 將有機會在一開始做正確的事情, 而那是安全子團隊以及來自 RISC-V 基金會的 Security Standing Committee 從開始就已經在進行的.

==
ARM 已於先前撤下了 riscv-basics.com 網站, 以下為重點備份截圖



在 ARM 平台上使用 Function Multi-Versioning (FMV) - 以使用 Android NDK 為例

Function Multi-Versioning (FMV) 過往的 CPU 發展歷程中, x86 平台由於因應各種應用需求的提出, 而陸陸續續加入了不同的指令集, 此外也可能因為針對市場做等級區隔, 支援的數量與種類也不等. 在 Linux 平台上這些 CPU 資訊可以透過...