Overlay 簡介
RISC-V-On-PYNQ Overlay實現了在PYNQ-Z2板上的RISC-V處理器及工具鏈集成,并提供了完整的RISC-V源碼與設計流程,得益于PYNQ軟件框架,其支持在Jupyter Notebook對RISC-V進行編譯、調試與驗證,即可以在Jupyter Notebook上編寫一段C/C++/RISC-V匯編程序,將編譯后的二進制文件放到picoRV32上運行。
以下兩張圖是本Overlay的系統框圖,其中picoRV32是一個開源的RISC-V核,它具有占用資源少的特點,并且它自帶AXI接口,可以方便地使用Xilinx提供的各種基于AXI總線的IP。本項目有兩個工程,它們的區別主要是picoRV32接的RAM:上圖只使用BRAM,而下圖同時使用到了BRAM和外部DRAM。
快速開始
- 環境需求PYNQ V2.4。
- 在PS端,我們需要編譯安裝RISC-V工具鏈和對應的庫。
Github內的項目文件Clone到本地。
git clone
https://github.com/Siudya/RISC-V-On-PYNQ.git /home/xilinx/ RISC-V-On-PYNQ
在RISC-V-On-PYNQ/notebooks/tutorial中有5個Notebook,包含了Overlay完整的部署流程。
鑒于從零開始部署的時間會較長,所以我們也提供了完整的鏡像文件,直接燒錄到SD卡就可以運行(注:提供的ext4分區剩余容量較小,請用戶根據需要自行調整)。
在OpenHW的遠程PYNQ實驗平臺上也已經為大家安裝好了環境,可以直接使用。
示例Notebook
裝好Overlay后,打開RISC-V-Examples/PicoRV32 Processor Mixed-Memory Processor Demo.ipynb,這是使用DRAM和BRAM混合儲存器的示例工程。實際上代碼與使用只BRAM的工程類似,只不過使用了不同的bit文件。
開始時下載bit文件,在這個過程中所有驅動都會注冊完成。
可以用help函數查看Overlay和processor的有關信息,可以看到,這里的Overlay和processor使用了本項目設計的驅動,這說明驅動注冊成功了。
在Notebook中包含了一段C程序,作用是返回一個數組的第二個元素。可以看到我們使用了python magics來聲明并編譯一段C程序,這和PYNQ本身對Microblaze核的編程方法類似。然后調用processor的run方法將程序裝載進RAM中來運行picoRV32。
我們也可以調用BRAM controller的mmio來看看內存的情況。在這之后也有使用C++和匯編程序的例子,這里不作贅述,讀者通過執行Jupyter Notebook中的代碼來體驗。
Overlay詳解
- PS與PL功能劃分
PS部分主要是用Python通過PYNQ框架控制PL中各IP的運行。
PL部分則例化一個pcioRV32核和和BRAM。
- Vivado工程block design介紹
具體硬件設計是這樣的:
上圖是項目的總體布局,下圖是processor展開后的內容。
其中BRAM是一個雙口RAM,它兩端連接的是PS和picoRV32。另外,可以看到PS的GPIO連接的是processor的復位端,當二進制程序裝入BRAM后,復位picoRV32,使它運行程序。picoRV32運行結束后,會觸發一個中斷。利用這個設計,可以例化許多RISC-V核心,并讓其運行獨立的程序,實現一個靈活可配置的眾核處理器,事實上已經有用這種方法實現了例化超過一千個RISC-V核的項目。
在Processor內部,picoRV32通過AXI總線來訪問其他IP,可以使用AXI總線來給它增加各種各樣不同的外設。在這里,本項目只是添加了另一個內存(通過PS的HP AXI 0接口訪問內存控制器)。
另外,這里的picoRV32核心的運行頻率可以通過利用AXI總線配置時鐘資源來調整。
注意:RISC-V核的hierarchy名字必須為processor,并且processor中的復位模塊必須為rscvReset。如果改動這些名字,必須修改對應的驅動源文件,否則不能正確加載驅動。
Overlay API介紹
在此工程中,通過riscvc、riscvcpp和riscvasm這三個python magics來編譯一段程序。例如:%%riscvcpp test_cpp overlay.processor。其中test_cpp是程序的名字,overlay.processor是想要寫入的RISCV核hierarchy的名字。然后在本cell中編寫代碼,運行后將調用前面安裝的RISC-V的工具鏈編譯。
編譯成功后,利用processor的run方法運行程序。例如:overlay.processor.run(test_cpp, test_cpp_arg)。其中test_cpp是程序名字,test_cpp_arg是參數數組,它兼容numpy的類型。
對于更詳細的解釋,可以參看前面的tutorial中5個notebook和項目中的.py源文件。
編輯:hfy
-
Xilinx
+關注
關注
73文章
2179瀏覽量
123878 -
AXI
+關注
關注
1文章
132瀏覽量
17011 -
內存控制器
+關注
關注
0文章
40瀏覽量
9089 -
RISC-V
+關注
關注
46文章
2460瀏覽量
47972
發布評論請先 登錄
相關推薦
FPGA與RISC-V淺談

關于RISC-V芯片的應用學習總結
《RISC-V能否復制Linux 的成功?》
RISC-V和arm指令集的對比分析
加入全球 RISC-V Advocate 行列,共筑 RISC-V 的未來 !

RISC-V Summit China 2024 青稞RISC-V+接口PHY,賦能RISC-V高效落地

RISC-V Summit China 2024 | 青稞RISC-V+接口PHY,賦能RISC-V高效落地
2024 RISC-V 中國峰會:華秋電子助力RISC-V生態!

2024 RISC-V 中國峰會:華秋電子助力RISC-V生態!
Imagination CPU 系列研討會 | RISC-V 平臺的性能分析和調試

risc-v的發展歷史
rIsc-v的缺的是什么?
淺析RISC-V領先ARM的優勢
risc-v的mcu對RTOS兼容性如何
RISC-V為何如此重要?

評論