Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Verilatorやってみた! ~ OpenCVでテストベンチを書いてみた ~
Search
Ryuji Fuchikami
May 29, 2021
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Verilatorやってみた! ~ OpenCVでテストベンチを書いてみた ~
Verilator勉強会 (2021/05/29) で発表した資料です。
https://connpass.com/event/212792/
Ryuji Fuchikami
May 29, 2021
More Decks by Ryuji Fuchikami
See All by Ryuji Fuchikami
Verilator + Rust + gRPC と Efinix の RISC-V でAIアクセラレータをAIで作ってる話 RTLを語る会(18) 2025/11/08
ryuz88
0
630
オリジナルの深層学習で HLS Challenge にチャレンジ
ryuz88
0
700
Zynq MP SoC で楽しむエッジコンピューティング ~RTLプログラミングのススメ~
ryuz88
0
2.4k
LUT-Network ~その後の話~
ryuz88
0
170
Rust で RTOSを考える
ryuz88
0
240
Fast and Light-weight Binarized Neural Network Implemented in an FPGA using LUT-based Signal Processing and its Time-domain Extension for Multi-bit Processing
ryuz88
0
300
LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~
ryuz88
0
91
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
ryuz88
0
1.8k
Other Decks in Programming
See All in Programming
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
390
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
20
21k
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
710
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
230
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
340
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.1k
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
370
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
7
1.9k
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
270
JRuby: Past, Present, and Future
headius
0
220
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
450
Featured
See All Featured
Balancing Empowerment & Direction
lara
6
1.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Designing for humans not robots
tammielis
254
26k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Claude Code のすすめ
schroneko
67
230k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
520
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
450
Documentation Writing (for coders)
carmenintech
77
5.6k
So, you think you're a good person
axbom
PRO
2
2.2k
Become a Pro
speakerdeck
PRO
31
6.3k
Transcript
Verilatorやってみた! ~ OpenCVでテストベンチを書いてみた ~ 2021/05/29 Verilator勉強会 Ryuji Fuchikami @Ryuz88
とりあえず 自己紹介させてください 2
自己紹介 • 平日は某企業で働くサラリーマン • 1976年生まれ 全国転々としつつも結局、福岡が一番長く、今も福岡在住 • 1998~ μITRON仕様 Real-Time
OS HOS-80 をリリース • 現在 HOS-V4a にて各種組み込みCPUに対応 (組み込みRustも実験中) (ARM,H8,SH,MIPS,x86,Z80,AM,V850,MicroBlaze, etc.) • 2008~ FPGA用ソフトコアSoC環境 Jelly をリリース(MIPS互換コア) • 現在 Zynq 上にて Real-Time GPU や LUT-Network の実験など 各種 Real-Time コア開発の実験場と化す • 2018~ LUT-Network用の環境 BinaryBrain を開発中 • 微分可能回路記述にてFPGA回路をそのまんま深層学習 • リアルタイムコンピューティング(当然Edgeコンピュータ)を探求中 • 電脳メガネ計画(いつかやりたい電脳コイルの世界) • Real-Time 画像I/O (カメラ[IMX219] & OLED 1kfps駆動) • Real-Time GPU開発 (frame buffer無し、ゼロ遅延描画) • Real-Time DNN開発 (超低遅延DNN認識) 3
それでは Verilator の話 4
使い始めて一か月程の身なので... 中身はブラックボックスのまま 使ってみた感想とか やってみた体験中心にお話しします 5
巷で噂のVerilator 6
何が凄いのか早速やってみた • 環境 • Intel Core
[email protected]
32GB/GT1660SUPPER/GT1030 • Ubuntu
18.04/20.04 (Windows 10 Pro WSL2) • Verilator v4.200 ← 必ず新しいものを入れよう! • VS code • Xming + GTKwave 7 WLSのおかげで Windows でも快適に使えます。
まだ使ってないVerilogな人に伝えたい事 • 思ったより簡単に導入できる • 思った以上に開発効率が上がる • 新しい使い方について、とても潜在力を 有している 8
Verilatorすごい! • 数時間かかっていた画像処理シミュレーションが数分で終わった • VCD形式よりはるかに小さいFST形式 • OpenCV はじめ C++ の資産がテストベンチ記述に使える
• シミュレーションの進行や制御がC++で自由に弄れる • 体重が 2㎏減った 9 ※ 上記は個人の感想です。効果は個人差がある場合があります。
まずはインストール 10 ドキュメント通りやれば 難なくインストール完了 https://verilator.org/guide/latest/install.html
testbench(C++) ほぼVerilogのまま既存テストベンチを動かしてみる 11 testbench(Verilog) 画像出力 モデル ガウシアン フィルタ for文 クロック&リセット
AXI4 Stream 画像保存 モデル $fscanf()で頑張って読む Mandrill.pgm img_0001.pgm $fdisplay()で頑張って書く AXI4 Stream 最小構成
クロックとリセット準備しただけなのに 12 いろいろ制約心配していたら、いともあっさり結果でました こいつ・・・動くぞ!
ちかっぱ速かとです 13 ツール 速度 Veritak 2分15秒 iverilog 4分7秒 xsim 2分17秒
Verilator 10秒 とある512x512画像でテスト さらに波形ダンプ止めたら瞬殺(1秒以下)でした
ここまでに嵌った初心者の穴紹介(1) • 横着せずにクロックはC++まで引き出そう • 最初 –public つけて、そのまま全部外から弄ろうとしたら嵌りました • Warning対応をどこまでやるかは判断が必要 •
Warningといいつつコンパイル止まるので、-Wno-XXX • 非常に強力な文法チェックなので、新規に書くならちゃんと対応したい (古い大量のコード抱えてると全部対応はツライ) 14
で、本格的に使い方検討開始 15 C++でモデル書いたら OpenCVとか使えるんじゃ?
普通のシミュレータとの違い # が使えない (@は使える) つまり単独ではイベントが起こらないのでシミュレーションが進行しない 16 シミュレーションの進行はユーザー側のC++に任されている eval()呼ばないと進行しない、信号入れないと@イベントも起きない C++テストベンチで時間も空間(信号)も自由自在 え?
何やってもいいんですか?
はじめにやったこと 17 @Vengineerさんの薄い本を読む なんかわかった気になる C++が主導権を握ったシミュレーションの世界へGO!
我々はシミュレータに時空間を支配されていた 18 Verilatorで支配者になろう!
何が必要か? Verilog の文法に即した信号のハンドシェークが C++ ⇔ Verilog間で必要 19 • イベントキューの機能 •
ノンブロッキング代入の機能 具体的にはC++側の
イベントキューの機能(#の代替) 20 initial begin reset = 1’b1; #1000 reset =
1’b0; end always #5.0 clk = ~clk; 要はこんな記述の代わりに 1000ns後にリセット解除するコードの実行予約が必要だったり こんな記述の代わりに 5ns後に波形反転コードが呼ばれ、再び5ns後に再予約される仕組み だったりが必要 ⇒ C++ の std::priority_queue とかで楽に作れるよね
C++でのノンブロッキング代入の対応 21 そもそもノンブロッキング代入のおさらい • 参照する変数はイベント前の値 • 代入は即時実施されず、イベント完了後に反映される イベント処理時に eval() 呼ぶ前と呼んだ後の
それぞれで変数アクセスタイミングがC++に必要
その他のケア 22 initial な処理と、 final な処理が必要だよね 細かい挙動は@Vengineerさんの薄い本で把握!
結局こんな感じの基底クラス実装 23 必要な処理だけoverrideしてモデルを書けるフレームワークを考えてみた • 前処理/後処理 • 自分が動くべきタイミングかどうかの監視 • イベント前の値取得と、イベント後の反映 •
怪しいUIを追加する為の別スレッド
作ってみた自作クラスはこんな感じ 24 Manager イベント キュー Reset Node Clock Node ImageLoad
Node (OpenCV利用) ImageDump Node (OpenCV利用) Verilator Node Verilator 生成の モジュール 必要に応じて値を参照 (テンプレートを活用して 型異存なく接続) C++で書いたモデル
実行してみる(bmp/png/jpgが使える!) 25
画像読み込みモデル 26 一応ブランキングとかもいれて、ビデオ信号っぽい波形も作れるように してみた。
AXI4-Stream のテスト用に乱数ウェイトを入れてみる 27 valid/ready のハンドシェークは乱数入れるだけで初期のバグ出しに効果的 verilogでも困らないが、C++だとstd::random とかが充実している
調子にのってUIつけてみた 28 OpenCVで回転などの画像の前処理も楽々実装。 シミュレーション表示するスレッドとは別にのぞき見表示するスレッドを準備 ESCキーを押せば途中でも finish() 実行して中断するように実装
波形ダンプとカバレッジOFFしてみた 29 とても速いです。 でも –threads オプション付けたら逆に遅くなったりもしたのでまだまだこれから
ここまでに嵌った初心者の穴紹介(2) • Verilator 任せだとC++のオプションがうまく操作できない • cmake は新しいものを使おう • 古い cmake
使っていたら、-std=++17 つけてるのに、-std=gnu++11 も一緒 について解析に手間取りました。 • cmake新しくしたら一発解決でした。 30
おまけ 31 • コンパイルとても長い (多分私のVerilogコードも原因) • 実行が超速でびっくり • 大量のデータの実験にはよさそう (動画使った時系列処理の確認とか)
【LUT-Network(拙作のFPGA DNN)やってみた】 【非同期クロックもやってみた】 • 複数クロックを作ってみたが あっさり動いてくれた
まとめ • 導入は思ったより簡単 • 普通の同期回路ならクロックだけ外に引っ張り出したらほとんどのVerilog記述のテス トベンチはほぼそのまま使えた • SystemVerilogも基本的なところは使えそう?(使い込んでないので自信なし) • 爆速なのでシミュレーション時間が開発効率に直結する分野に人に超おすすめ
• Verilator や cmake などはなるべく最新を入れましょう • WSL2 + VS code 最高! Ubuntu20.04 オススメ • 使い方の応用が非常に奥深い • OpenCV の例は一つの例に過ぎない (ROSとかUnityとか繋ぐと面白いかも) • C++のいいところとVerilogのいいところ混ぜてたテストベンチが簡単に書ける • 速いしいろいろなものと繋げてシステムシミュレーションできるかも (カメラとかの実デバイスとか、FPGAの実体とか) 32
参考にさせて頂いた情報 • @Vengineer様 「Verilator の薄い本」 • 「Verilatorの中を調べる」No.1、例題解析編] • https://booth.pm/ja/items/2917623 •
「Verilatorの中を調べる」No.2、テストデータ解析編] • https://vengineer.booth.pm/items/2927828 • 「みねっちょのマイコン関係ブログ」様 • WSL で 無償の Verilog な サイクルベースシミュレータ Verilator を使う • https://minettyo.com/entry/logicdesign_wsl_verilator • 「FPGA開発日記」 様 • Verilatorの使い方(1. Verilatorの考え方と基本的なシミュレーション実行方法) • https://msyksphinz.hatenablog.com/entry/2020/05/06/040000 • Verilatorの使い方(2. 波形ダンプの方法) • https://msyksphinz.hatenablog.com/entry/2020/05/08/040000 • Verilatorの使い方(3. Lintとして活用する) • https://msyksphinz.hatenablog.com/entry/2020/05/10/000000 33
発表者アクセス先 • 渕上 竜司 (Ryuji Fuchikami) • e-mail :
[email protected]
• Web-Site : http://ryuz.my.coocan.jp/ • Blog. : http://ryuz.txt-nifty.com/ https://ryuz.hatenablog.com/ • GitHub : https://github.com/ryuz/ • Twitter : https://twitter.com/Ryuz88 • Facebook : https://www.facebook.com/ryuji.fuchikami • YouTube : https://www.youtube.com/user/nekoneko1024 34 本発表に関連するブログ記事は下記の2件です • Verilatorやってみた https://ryuz.hatenablog.com/entry/2021/05/01/135821 • C++の動作モデル書いてみた(主にVerilator用) https://ryuz.hatenablog.com/entry/2021/05/02/104700
ご清聴ありがとうございました 35