SlideShare a Scribd company logo
1 of 18
Ultra96-V2でVexRiscvと
DPUを動かしてみた
2022.04.19 fpgax #13
lp6m / にったやすひろ
自己紹介
● lp6m / Yasuhiro Nitta
● https://github.com/lp6m
● Twitter: @lp6m1
● 所属: 株式会社Fixstars
AIエッジコンテスト
● 経産省主催のコンテスト
● AIアルゴリズムのFPGA実装を趣旨とする
https://signate.jp/lp/ai-edge-contest
第5回コンテスト内容
● 対象ボード: Ultra96-V2
● 開催期間: 2021/10/18~2022/2/15
● 会社の同期とチームVertical_Beachとして参加
● 今日はHW実装, VexRiscvの話をします
https://signate.jp/competitions/537
https://www.avnet.com/wps/portal/japan/pro
ducts/product-highlights/ultra96/
最終成果物デモ
https://www.youtube.com/watch?v=xeXifLHZIno
● MOTA: 0.2807344
● 52.30ms/frame
● GitHub: https://github.com/Vertical-Beach/ai-edge-contest-5
● 実装レポート: Google Drive
最終成果物デモ
https://www.youtube.com/watch?v=xeXifLHZIno
開発方針
● 物体追跡アルゴリズム
○ Tracking-by-detection 方式を採用
○ 物体検出・物体追跡を分けて実装を進められる
○ 物体検出は Xilinx DPU を使用して実装を容易に
● RISC-V
○ オープンソースの命令セットアーキテクチャをもつCPU
○ オープンソースな実装が手に入れられる
■ VexRiscv/RocketChip/etc..
○ 今回はVexRiscvを使用
■ Scala DSL SpinalHDL製
■ プラグイン形式で色々なアーキテクチャのコアが生成
できる
システム概要
● HW構成
○ 対象ボード: Ultra96v2
○ Xilinx DPU + RISC-V
■ DPU: B1600
150/300MHz
■ RISC-V: VexRiscv
rv32imfac 150MHz
● SW構成
○ 物体検出アルゴリズム: YOLOv4-tiny
■ Xilinx DPU にオフロード
○ トラッキングアルゴリズム: ByteTrack
■ ARM コアで処理
■ 線形割当問題のハンガリアン法を RISC-V にオフロード
Xilinx DPU
RISCV
PL
PS
Cortex-A53
DPU
● Xilinx DPU (Deep-Learning Processor Unit) IP
● Vitis-AI: DPU向けの開発環境
○ Tensorflow/Caffe/PyTorch のモデルをサポート
○ モデルの量子化・DPU向けにモデルをコンパイル
○ VART(Vitis-AI Runtime)を使用してARMコアから制御
● 並列度の異なる複数のIPが存在
○ 比較的小さいB1600を採用
Vitis-AI: https://japan.xilinx.com/products/design-tools/vitis/vitis-ai.html
RISC-Vコアの生成
● プラグインを追加してrv32imfacに
FPUの追加
データバスをAXI化
● VexRiscvでVerilogHDLファイル生成、VivadoでIP化
coredef.scala
VexRiscv
coredef.v
Vivado
RISC-V IP
○ ARM / RISC-Vコア間でアドレス変換不要に
RISC-Vコアを含むデザインの作成
● 主催提供のリファレンス実装の問題を修正
○ RISC-VコアのリセットとAXIのリセットが別
○ RISC-Vコアの2回目以降の実行が正常に行えないことが発覚
Ultra96v2のpl_resetnxをPSから制御:
https://lp6m.hatenablog.com/entry/2021/12/30/004545
リファレンス実装のブロックデザイン
RISC-Vコアを含むデザインの作成
● VexRiscvの機能で命令・データバスをAXIプロトコル化
○ リファレンス実装ではAXI化に独自モジュールを使用していたが削除
RISC-Vコア
ARMコア
命令BRAM
データBRAM
AXI BRAM
コントローラ
RISC-Vを搭載したブロックデザイン
RISC-V + DPU HW構成の構築
● DPUを搭載するにはVitisを使用する必要がある
○ Vivadoのみのフロー も存在するがVARTとの連携が難しかった為不採用
● VitisではベースとなるVivadoプロジェクトにDPUを「アクセラレーショ
ンカーネル」として追加する
○ ブロックデザインにIPが自動的に追加される
○ RISC-Vを搭載したデザインをベースプロジェクトにし、VitisでDPUを追加する
Vitisにより作成されたRISC-V+DPUなブロックデザイン
クロスコンパイル環境の構築
● crosstool-NGを用いてriscv向けクロスコンパイラをビルド
● コンパイルしたオブジェクトからRISC-V向け命令列を配列として生成
○ ARMで動作させる評価アプリケーションから命令列をBRAMに設定
○ リンカスクリプトではDMEMの前半64Kをプログラムの実行に、後半64KをARM/RISC-V間の
データ入出力に割当
ARMコアからRISC-Vコアの駆動
ARMコア側のプログラム
RISC-V側のプログラム
コンパイル
開発フロー
● SW/HW 協調設計
○ 作業自体は完全分業
○ DPUの物体検出結果をチームメイトに渡して物体追跡改善してもらう
● VexRiscvをUltra96-V2で動作させるためのガイド
○ わりとがんばって書きました
○ https://github.com/lp6m/VexRiscv_Ultra96
● AIエッジコンテスト 提出物
○ 整理中
○ ByteTrackの改善手法などについても書いています
○ https://github.com/Vertical-Beach/ai-edge-contest-5
● 個人参加記
○ https://lp6m.hatenablog.com/entry/2022/03/02/234343
第6回エッジAIコンテストもあるそうなので、ぜひ参加してみてください
GitHubなど
fpgax #13.pptx

More Related Content

What's hot

FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみたFPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
 
TCAMのしくみ
TCAMのしくみTCAMのしくみ
TCAMのしくみ
ogatay
 

What's hot (20)

OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
 
Topology Managerについて / Kubernetes Meetup Tokyo 50
Topology Managerについて / Kubernetes Meetup Tokyo 50Topology Managerについて / Kubernetes Meetup Tokyo 50
Topology Managerについて / Kubernetes Meetup Tokyo 50
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
LUT-Network その後の話(2022/05/07)
LUT-Network その後の話(2022/05/07)LUT-Network その後の話(2022/05/07)
LUT-Network その後の話(2022/05/07)
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
 
Zynq mp勉強会資料
Zynq mp勉強会資料Zynq mp勉強会資料
Zynq mp勉強会資料
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
Gpu vs fpga
Gpu vs fpgaGpu vs fpga
Gpu vs fpga
 
ROS 2 Client Library for E^2
ROS 2 Client Library for E^2ROS 2 Client Library for E^2
ROS 2 Client Library for E^2
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
Tensor flow usergroup 2016 (公開版)
Tensor flow usergroup 2016 (公開版)Tensor flow usergroup 2016 (公開版)
Tensor flow usergroup 2016 (公開版)
 
KiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアルKiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアル
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Vivado hls勉強会2(レジスタの挿入とpipelineディレクティブ)
Vivado hls勉強会2(レジスタの挿入とpipelineディレクティブ)Vivado hls勉強会2(レジスタの挿入とpipelineディレクティブ)
Vivado hls勉強会2(レジスタの挿入とpipelineディレクティブ)
 
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
Rust で RTOS を考える
Rust で RTOS を考えるRust で RTOS を考える
Rust で RTOS を考える
 
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみたFPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
 
TCAMのしくみ
TCAMのしくみTCAMのしくみ
TCAMのしくみ
 

Similar to fpgax #13.pptx

[野良ハックチーム][カンパイシェア]Grデザインコンテスト2017 開発日誌
[野良ハックチーム][カンパイシェア]Grデザインコンテスト2017 開発日誌[野良ハックチーム][カンパイシェア]Grデザインコンテスト2017 開発日誌
[野良ハックチーム][カンパイシェア]Grデザインコンテスト2017 開発日誌
Ayachika Kitazaki
 
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...
Game Tools & Middleware Forum
 

Similar to fpgax #13.pptx (20)

PYNQ祭り
PYNQ祭りPYNQ祭り
PYNQ祭り
 
2017年のFPGA Community活動について
2017年のFPGA Community活動について2017年のFPGA Community活動について
2017年のFPGA Community活動について
 
Polyphony 新機能ツアー
Polyphony 新機能ツアーPolyphony 新機能ツアー
Polyphony 新機能ツアー
 
DCGANとStyleGAN2を試したときの話 / Dcgan and Stylegan2
DCGANとStyleGAN2を試したときの話 / Dcgan and Stylegan2DCGANとStyleGAN2を試したときの話 / Dcgan and Stylegan2
DCGANとStyleGAN2を試したときの話 / Dcgan and Stylegan2
 
OSC Nagoya NETMF 160528
OSC Nagoya NETMF 160528OSC Nagoya NETMF 160528
OSC Nagoya NETMF 160528
 
大規模Webを支えるAgileな技術
大規模Webを支えるAgileな技術大規模Webを支えるAgileな技術
大規模Webを支えるAgileな技術
 
Win10Pcap を使って見る
Win10Pcap を使って見るWin10Pcap を使って見る
Win10Pcap を使って見る
 
さわってみようQGIS (QGIS初級中級編 for ver.2.14 at FOSS4G 2016 Hokkaido)
さわってみようQGIS (QGIS初級中級編 for ver.2.14 at FOSS4G 2016 Hokkaido)さわってみようQGIS (QGIS初級中級編 for ver.2.14 at FOSS4G 2016 Hokkaido)
さわってみようQGIS (QGIS初級中級編 for ver.2.14 at FOSS4G 2016 Hokkaido)
 
HTML5 and Graphics
HTML5 and GraphicsHTML5 and Graphics
HTML5 and Graphics
 
[野良ハックチーム][カンパイシェア]Grデザインコンテスト2017 開発日誌
[野良ハックチーム][カンパイシェア]Grデザインコンテスト2017 開発日誌[野良ハックチーム][カンパイシェア]Grデザインコンテスト2017 開発日誌
[野良ハックチーム][カンパイシェア]Grデザインコンテスト2017 開発日誌
 
Riscv+fpga200606
Riscv+fpga200606Riscv+fpga200606
Riscv+fpga200606
 
楽天の e コマースと HTML5 活用事例
楽天の e コマースと HTML5 活用事例楽天の e コマースと HTML5 活用事例
楽天の e コマースと HTML5 活用事例
 
QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)
QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)
QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)
 
Html5 and Graphics
Html5 and GraphicsHtml5 and Graphics
Html5 and Graphics
 
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...
 
VyOSの開発とか運用の話
VyOSの開発とか運用の話VyOSの開発とか運用の話
VyOSの開発とか運用の話
 
BLEビーコン活用例
BLEビーコン活用例BLEビーコン活用例
BLEビーコン活用例
 
P4 Updates (2020) (Japanese)
P4 Updates (2020) (Japanese)P4 Updates (2020) (Japanese)
P4 Updates (2020) (Japanese)
 
IGDA日本 GDC2015報告会 「ゲームから社会へ、社会からゲームへ」
IGDA日本 GDC2015報告会 「ゲームから社会へ、社会からゲームへ」IGDA日本 GDC2015報告会 「ゲームから社会へ、社会からゲームへ」
IGDA日本 GDC2015報告会 「ゲームから社会へ、社会からゲームへ」
 
concrete5 導入活用セミナー in 徳島 [2016年7月]
concrete5 導入活用セミナー in 徳島 [2016年7月]concrete5 導入活用セミナー in 徳島 [2016年7月]
concrete5 導入活用セミナー in 徳島 [2016年7月]
 

fpgax #13.pptx

Editor's Notes

  1. クロスコンパイル環境の構築について説明します。 crosstool-NGというクロスコンパイラを簡単にビルドできるツールがあるので、今回はそれを使ってコンパイラをビルドしました。 RISCーVで実行したいプログラムをコンパイルし、コンパイルされたオブジェクトからRISC-V命令列を「この図」に示すような配列の形でダンプするプログラムを使っています。 RISCーVコアはARMコアから駆動されるので、ARMコアで実行する評価アプリケーションをビルドするときに、このソースコードと一緒にコンパイルすることができるので利用しやすくなっています。 リンカスクリプトに施した工夫について説明すると、下の図の通り今回のデザインでは命令BRAMに64K、データBRAMに128Kの範囲を割り当てているのですが、 リンカスクリプトではデータBRAMは前半64Kのみを使用するようにしています。 後ろ64KはRISCーVで実行するプログラムが使用する入出力データ用に確保するために、今回はこういった形になっています。
  2. ARMコアからRISC-Vコアが駆動される様子について説明します。 右側がRISC-Vコアで実行されるプログラムで、先程説明したとおりコンパイルされたRISC-V向け実行命令列は配列の形で出力されます。 左側がARMコアで実行されるRISC-V実行用アプリケーションです。 まず最初にRISC-Vの実行命令列をBRAMに書き込み、そのあと入力データをセットし、pl_resetn1をリセットします。 ここでは簡単のためにRISC-Vの実行完了はsleepでしていますが、コンテストではポーリング方式を使用しました。 最後にRISC-Vが書き込んだ結果を参照してテスト完了となります。