為了結合 **[RTOS-Project-2023](https://github.com/yuyuranium/RTOS-Project-2023-riscv-freertos-on-pynq)** ,並在 PYNQ-Z2 開發板上運行 RTOS,我們可以設計一個基於兩者的方案,逐步實現以下功能: --- ### **步驟 1:確定目標與設計架構** #### **目標** - 在 PYNQ-Z2 的 **PL(可程式邏輯)側** 實現高效能的 **RISC-V 處理核心**。 - 運行 **FreeRTOS**,以提供多任務支援和更豐富的嵌入式功能。 - 利用 **PS(處理系統)側的 ARM Cortex-A9** 管理硬體配置,簡化操作和部署。 #### **架構設計** 1. **PL 側**: - 繼承 **Rocket Chip** 的高效能優勢,作為 RISC-V 核心。 - 集成 AXI 總線、BRAM 作為記憶體、UART、GPIO 和 Timer 模組。 2. **PS 側**: - 使用 Python Notebook 或 Linux Shell,配置和啟動硬體,並下載應用程式。 3. **軟體系統**: - 在 PL 側的 RISC-V 核心上運行 FreeRTOS。 - 支援 RTOS 應用和 Baremetal 程式。 --- ### **步驟 2:選擇硬體設計工具** 1. 使用 **FuseSoC** 作為硬體設計管理工具(來自 RTOS-Project-2023),簡化 IP 模組整合。 2. 從 **RISCV-on-PYNQ-Z2** 導入 Rocket Chip 作為 RISC-V 核心。 3. 配置必要的外設(UART、GPIO、Timer)和 AXI 總線互連。 --- ### **步驟 3:硬體設計與實現** #### **1. 安裝 FuseSoC 並導入 IP 模組** ```bash git clone https://github.com/yuyuranium/RTOS-Project-2023-riscv-freertos-on-pynq.git cd RTOS-Project-2023-riscv-freertos-on-pynq git submodule update --init --recursive # 獲取 bitstream 和硬體 handoff 文件 # 安裝 FuseSoC sudo apt update sudo apt install python3-pip sudo apt install --fix-missing python3-pip sudo apt install pipx pipx ensurepath pipx install fusesoc==2.1 echo 'export PATH=$PATH:/home/esslab/.local/bin' >> ~/.bashrc source ~/.bashrc # 添加所需的 IP 模組 cd pynq_z2/pl fusesoc library add --sync-type git ibex https://github.com/lowRISC/ibex.git # ibex library fusesoc library add --sync-type git pulp-axi https://github.com/pulp-platform/axi.git # pulp-axi library fusesoc library add --sync-type git pulp-common-cells https://github.com/pulp-platform/common_cells.git # pulp-common-cells library fusesoc library add --sync-type local ibex-axi . # ibex-axi local library fusesoc library list ``` #### **2. 配置硬體平台** - 修改 Rocket Chip 的設計來支持 AXI 總線與外設連接。 - 在 FuseSoC 項目中集成 FreeRTOS-Project 的外設模組(如 UART、Timer)。 - 確保 Rocket Chip 可以訪問 BRAM 和其他外設。 #### **3. 編譯與生成硬體** ```bash cd fusesoc_libraries/ibex pip install --user --break-system-packages -r python-requirements.txt pip3 install --user --break-system-packages anytree cd ~/RTOS-Project-2023-riscv-freertos-on-pynq/pynq_z2/pl fusesoc run --setup caslab:rtos:ibex_axi:1.0.0 fusesoc run --build caslab:rtos:ibex_axi:1.0.0 # 生成 Vivado 工程 cd ~/RTOS-Project-2023-riscv-freertos-on-pynq/pynq_z2/pl cd fusesoc_libraries/pulp-axi git stash git checkout tags/v0.38.0 ``` ``` cd ~ sudo apt install -y git cmake build-essential git clone https://github.com/chipsalliance/verible.git cd verible curl -LO "https://github.com/bazelbuild/bazel/releases/download/6.4.0/bazel-6.4.0-installer-linux-x86_64.sh" chmod +x bazel-6.4.0-installer-linux-x86_64.sh ./bazel-6.4.0-installer-linux-x86_64.sh --user export PATH="$HOME/bin:$PATH" bazel version bazel clean --expunge bazel build //... ###### ls ~/verible/bazel-bin/verible/verilog/tools/syntax ls ~/verible/bazel-bin/verible/verilog/tools/formatter ls ~/verible/bazel-bin/verible/verilog/tools/lint sudo cp ~/verible/bazel-bin/verible/verilog/tools/syntax/verible-verilog-syntax /usr/local/bin/ sudo cp ~/verible/bazel-bin/verible/verilog/tools/formatter/verible-verilog-format /usr/local/bin/ sudo cp ~/verible/bazel-bin/verible/verilog/tools/lint/verible-verilog-lint /usr/local/bin/ verible-verilog-syntax --version verible-verilog-format --version verible-verilog-lint --version ``` ``` cd ~/RTOS-Project-2023-riscv-freertos-on-pynq/pynq_z2/pl bash scripts/build_proj.sh ``` File: build/caslab_rtos_ibex_axi_1.0.0/default-vivado/caslab_rtos_ibex_axi_1.0.0.bit build/caslab_rtos_ibex_axi_1.0.0/default-vivado/caslab_rtos_ibex_axi_1.0.0.hwh ``` ``` --- ### **步驟 4:開發軟體應用** #### **1. 安裝 RISC-V 工具鏈** - 使用 **lowRISC GCC toolchain** 或 **RISC-V GCC toolchain**。 #### **2. 編譯 FreeRTOS** - 將 **FreeRTOS-Project** 中的 RTOS Demo 移植到 Rocket Chip 平台。 - 使用 GNU Make 构建 FreeRTOS 和 Baremetal 程式: ```bash make -C sw/FreeRTOS-Demo-Hello ``` #### **3. 部署新程式** 1. 在 `sw` 目錄下創建新程式文件夾。 2. 編寫程式及其 `Makefile`,確保指定正確的目標名稱: ```makefile PROGRAM := MyRTOSApp include ../common/freertos.mk ``` 3. 編譯後生成 `.bin` 檔案,供 PL 側運行。 --- ### **步驟 5:整合與測試** #### **1. 部署硬體與軟體** 1. 在 PS 側啟動 Python Notebook,配置 bitstream 和硬體 handoff: ```python from pynq import Overlay overlay = Overlay("caslab_rtos_ibex_axi_1.0.0.bit") ``` 2. 將 `.bin` 文件複製到開發板: ```bash scp MyRTOSApp.bin xilinx@pynq:/home/xilinx/ ``` #### **2. 啟動 RISC-V 核心** - 使用 Notebook 或 Shell 指令重置並啟動 Rocket Chip: ```python # 重置 RISC-V 核心並啟動應用程式 ibex.reset() ibex.load_program("/home/xilinx/MyRTOSApp.bin") ``` --- ### **步驟 6:優化與迭代** - 在 FreeRTOS 應用中新增多任務測試,驗證實時性和性能。 - 測試不同工作負載對 Rocket Chip 性能的影響。 - 設計更加複雜的硬體外設,如 DMA 控制器或 SPI 模組。 --- ### **結論** 通過結合 **RTOS-Project-2023** 的 **RTOS 支援與 FuseSoC 工具**,以及 **RISCV-on-PYNQ-Z2** 的 **高效能 Rocket Chip**,可以在 PYNQ-Z2 上構建一個靈活、高效的 RISC-V RTOS 系統,同時適用於學術研究和實際嵌入式應用開發。