---
# System prepended metadata

title: Rocket-Chip 環境與編譯
tags: [Rocket]

---


## Rocket Chip Verilog 編譯流程紀錄

0. **前置作業：**
   須完成[官方Chisel環境建置](https://www.chisel-lang.org/docs/installation)，包括 `mill，verilator`，或者參考[建構Chisel環境使用VSCode](https://hackmd.io/wcXabDrsQzebdk9qq8ho9A)。
2. **下載 Rocket Chip 程式碼：**
   首先，從 GitHub 儲存庫克隆 Rocket Chip 的程式碼：
   ```bash
   git clone https://github.com/chipsalliance/rocket-chip.git
   cd rocket-chip
   git submodule update --init
   ```
   下載主要的 Rocket Chip 程式碼並初始化所有子模組。

2. **下載並建置 Rocket Tools：**
   Rocket Tools 提供了支援 Rocket Chip 的必要工具，如 GNU 工具鏈和 ISA 模擬器。 按照以下步驟下載並建置：
   ```bash
   git clone https://github.com/chipsalliance/rocket-tools.git
   cd rocket-tools
   git submodule update --init --recursive
   
   # 設定環境變量
    export RISCV=/path/to/install/riscv/toolchain
    或者
   # 1. 編輯 .bashrc
    nano ~/.bashrc
   # 2. 在檔案結尾加入
    export RISCV=/home/ethan2339/riscv/toolchain
   # 3. 重新載入 .bashrc 使變更生效
    source ~/.bashrc   
   # 4.執行 build.sh
   ./build.sh
   ```
   將 `/path/to/install/riscv/toolchain` 替換為安裝工具鏈的路徑。 這些步驟為下載並建置支援 Rocket Chip 的工具。

3. **安裝必要的相關套件：**
   作業系統《Ubuntu》，需要安裝一些額外的套件。 使用以下命令安裝所需的套件。[更詳細的請參閱官方網站](https://github.com/chipsalliance/rocket-tools/blob/master/README.md)。
   ```bash
   cd rocket-chip
   sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev libusb-1.0-0-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev device-tree-compiler pkg-config libexpat-dev libfl-dev
   ```
4. **安裝Firtool:**
   目前 `1.42版本` 測試成功，[下載網址。](https://github.com/llvm/circt/releases/tag/firtool-1.42.0)
    ```bash
    wget https://github.com/llvm/circt/releases/download/firtool-1.42.0/firrtl-bin-ubuntu-20.04.tar.gz
    ``` 
    ```bash
    tar -xvf firrtl-bin-ubuntu-20.04.tar.gz
    sudo mv firtool /usr/local/bin/
    sudo chmod +x /usr/local/bin/firtool
    ```
   <span style="color:#B22222">註</span>：firtool位置在解壓縮後檔案的 `bin` 裡，或者在目前目錄樹中搜尋 firtool。 
 


    ```bash
    find . -name firtool
    ```
    **驗證安裝**
   ```bash
   firtool --version
   ```

6. **安裝 nix :**
     - 步驟一，首先進入 rocket-chip 目錄：
    ```bash
    cd ~/projects/rocket-chip
    ``` 
    - 步驟二，安裝 nix：

    ```bash
    curl -L https://nixos.org/nix/install | sh
    ```

     - 步驟三，重新加載 shell 或重啟終端，然後執行：
    ```bash
    . ~/.nix-profile/etc/profile.d/nix.sh
    ```

      - 步驟四，在 rocket-chip 目錄中生成 BSP 配置：
    ```bash
    mill mill.bsp.BSP/install
    ```

      - 步驟五，修改 BSP 配置文件：
    ```bash
    #如果找不到.bsp再創建檔案
    mkdir -p .bsp
    echo '{
      "name": "mill-bsp",
      "argv": ["/usr/bin/nix", "develop", "-c", "mill", "--bsp", "--disable-ticker=false"]
    }' > .bsp/mill-bsp.json
    ```

6. **建置 Rocket Chip 專案：**
   安裝完所有依賴項並建置 Rocket Tools 後，回到 Rocket Chip 目錄生成 Verilog：
   ```bash
   cd rocket-chip
   make verilog
   ```
   為特定的配置生成 Verilog：
   ```bash
   make verilog CONFIG=DefaultSmallConfig
   ```
7. **完成後檢查檔案是否成功生成**

    ```bash =
    cd out/emulator/freechips.rocketchip.system.TestHarness/freechips.rocketchip.system.DefaultConfig/mfccompiler/compile.dest/
    ls
    ```
    
    結果：
    ![image](https://hackmd.io/_uploads/B11Spe1Myl.png)


   

 如需更多詳細資訊，請參閱 [Rocket Chip 的 README 文件](https://github.com/chipsalliance/rocket-chip/blob/master/README.md) 和 [Rocket Tools 的 README 文件](https://github.com/chipsalliance/rocket-tools/blob/master/README.md)。 
 
 ---
### 版本紀錄
1. Ubuntu 24.04
![image](https://hackmd.io/_uploads/SkoVrSgMyx.png =40%x)
3. Java 11 or 17
![螢幕快照 2024-11-12 10-49-49](https://hackmd.io/_uploads/S1bI7reM1l.png)
1. Mill 0.11.12，Millw (wrapper) [下載網址](https://github.com/lefou/millw/releases/tag/0.4.12)。
![螢幕快照 2024-11-12 10-51-01](https://hackmd.io/_uploads/ryoUQSlfye.png)
1. Firtool 1.42.0
![螢幕快照 2024-11-12 10-51-23](https://hackmd.io/_uploads/SyAUXBxGke.png =55%x)
1. Verilator 5.0.20
![螢幕快照 2024-11-12 10-51-50](https://hackmd.io/_uploads/SkKdXBeGkx.png =75%x)
1. Scala : VSCode Metal 
---
**Mill 注意事項&備忘**
安裝：
```bash
curl -L https://raw.githubusercontent.com/com-lihaoyi/mill/master/mill > mill && chmod +x mill
chmod +x mill
sudo mv mill /usr/local/bin/
```
第一次安裝使用 `mill version`，然後創建 `.mill version`指定版本(或使用預設版本)。


---
其他注意事項 ：Scala語言須要在程式最後一行 空一行空白行，否則會出錯。

實用指令：find。
```bash
#在目前目錄及子目錄找檔名
find . -name "檔案名稱"

#在特定目錄找檔名
find /home/user -name "檔案名稱"

#使用萬用字元
find . -name "*.c"    # 找所有 .c 檔案
find . -name "test*"  # 找所有以 test 開頭的檔案

#只找目錄
find . -type d -name "目錄名稱"

#只找檔案
find . -type f -name "檔案名稱"
```
