Submit Search
Verilator勉強会 2021/05/29
Download as PPTX, PDF
1 like
1,040 views
R
ryuz88
Verilator勉強会 発表資料です https://connpass.com/event/212792/
Technology
Read more
1 of 35
Download now
Downloaded 22 times
1
2
3
4
5
6
7
8
9
Most read
10
11
Most read
12
13
14
15
16
17
18
19
20
21
Most read
22
23
24
25
26
27
28
29
30
31
32
33
34
35
More Related Content
PPTX
本当は恐ろしい分散システムの話
Kumazaki Hiroki
PDF
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
PDF
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
PDF
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
Takateru Yamagishi
PDF
FPGA+SoC+Linux実践勉強会資料
一路 川染
PDF
TVM の紹介
Masahiro Masuda
PDF
20111015 勉強会 (PCIe / SR-IOV)
Kentaro Ebisawa
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
本当は恐ろしい分散システムの話
Kumazaki Hiroki
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
Takateru Yamagishi
FPGA+SoC+Linux実践勉強会資料
一路 川染
TVM の紹介
Masahiro Masuda
20111015 勉強会 (PCIe / SR-IOV)
Kentaro Ebisawa
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
What's hot
(20)
PDF
計算機アーキテクチャを考慮した高能率画像処理プログラミング
Norishige Fukushima
PPTX
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Preferred Networks
PDF
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
PDF
Zynq mp勉強会資料
一路 川染
PDF
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai
PDF
VerilatorとSystemCでSoftware Driven Verification
Mr. Vengineer
PDF
ACRiウェビナー:小野様ご講演資料
直久 住川
PPTX
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
PDF
CUDAプログラミング入門
NVIDIA Japan
PDF
VerilatorとSystemC
Mr. Vengineer
PDF
containerdの概要と最近の機能
Kohei Tokunaga
PDF
大学研究室レベルでLocal 5Gを導入するための手法の考察
Yutaka Kikuchi
PDF
HTTP/2 入門
Yahoo!デベロッパーネットワーク
PDF
組み込みでこそC++を使う10の理由
kikairoya
PDF
Lispマシン・シミュレータの紹介
たけおか しょうぞう
PDF
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
Fixstars Corporation
PDF
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
PPTX
Microsemi FPGAで RISC-V を動かしてみた話 (Lチカ)
Takayasu Shibata
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
PDF
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
VirtualTech Japan Inc.
計算機アーキテクチャを考慮した高能率画像処理プログラミング
Norishige Fukushima
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Preferred Networks
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
Zynq mp勉強会資料
一路 川染
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai
VerilatorとSystemCでSoftware Driven Verification
Mr. Vengineer
ACRiウェビナー:小野様ご講演資料
直久 住川
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
CUDAプログラミング入門
NVIDIA Japan
VerilatorとSystemC
Mr. Vengineer
containerdの概要と最近の機能
Kohei Tokunaga
大学研究室レベルでLocal 5Gを導入するための手法の考察
Yutaka Kikuchi
HTTP/2 入門
Yahoo!デベロッパーネットワーク
組み込みでこそC++を使う10の理由
kikairoya
Lispマシン・シミュレータの紹介
たけおか しょうぞう
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
Fixstars Corporation
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
Microsemi FPGAで RISC-V を動かしてみた話 (Lチカ)
Takayasu Shibata
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
VirtualTech Japan Inc.
Ad
More from ryuz88
(9)
PPTX
LUT-Network その後の話(2022/05/07)
ryuz88
PDF
Rust で RTOS を考える
ryuz88
PDF
Fast and Light-weight Binarized Neural Network Implemented in an FPGA using L...
ryuz88
PPTX
FPGA勉強会資料 20210516
ryuz88
PPTX
Deep Learning development flow
ryuz88
PPTX
LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~
ryuz88
PPTX
LUT-Network Revision2 -English version-
ryuz88
PPTX
LUT-Network Revision2
ryuz88
PPTX
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
ryuz88
LUT-Network その後の話(2022/05/07)
ryuz88
Rust で RTOS を考える
ryuz88
Fast and Light-weight Binarized Neural Network Implemented in an FPGA using L...
ryuz88
FPGA勉強会資料 20210516
ryuz88
Deep Learning development flow
ryuz88
LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~
ryuz88
LUT-Network Revision2 -English version-
ryuz88
LUT-Network Revision2
ryuz88
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
ryuz88
Ad
Verilator勉強会 2021/05/29
1.
Verilatorやってみた! ~ OpenCVでテストベンチを書いてみた ~ 2021/05/29
Verilator勉強会 Ryuji Fuchikami @Ryuz88
2.
とりあえず 自己紹介させてください 2
3.
自己紹介 • 平日は某企業で働くサラリーマン • 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
4.
それでは Verilator の話 4
5.
使い始めて一か月程の身なので... 中身はブラックボックスのまま 使ってみた感想とか やってみた体験中心にお話しします 5
6.
巷で噂のVerilator 6
7.
何が凄いのか早速やってみた • 環境 • 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 でも快適に使えます。
8.
まだ使ってないVerilogな人に伝えたい事 • 思ったより簡単に導入できる • 思った以上に開発効率が上がる •
新しい使い方について、とても潜在力を 有している 8
9.
Verilatorすごい! • 数時間かかっていた画像処理シミュレーションが数分で終わった • VCD形式よりはるかに小さいFST形式 •
OpenCV はじめ C++ の資産がテストベンチ記述に使える • シミュレーションの進行や制御がC++で自由に弄れる • 体重が 2㎏減った 9 ※ 上記は個人の感想です。効果は個人差がある場合があります。
10.
まずはインストール 10 ドキュメント通りやれば 難なくインストール完了 https://verilator.org/guide/latest/install.html
11.
testbench(C++) ほぼVerilogのまま既存テストベンチを動かしてみる 11 testbench(Verilog) 画像出力 モデル ガウシアン フィルタ for文 クロック&リセット AXI4 Stream 画像保存 モデル $fscanf()で頑張って読む Mandrill.pgm img_0001.pgm $fdisplay()で頑張って書く AXI4
Stream 最小構成
12.
クロックとリセット準備しただけなのに 12 いろいろ制約心配していたら、いともあっさり結果でました こいつ・・・動くぞ!
13.
ちかっぱ速かとです 13 ツール 速度 Veritak 2分15秒 iverilog
4分7秒 xsim 2分17秒 Verilator 10秒 とある512x512画像でテスト さらに波形ダンプ止めたら瞬殺(1秒以下)でした
14.
ここまでに嵌った初心者の穴紹介(1) • 横着せずにクロックはC++まで引き出そう • 最初
–public つけて、そのまま全部外から弄ろうとしたら嵌りました • Warning対応をどこまでやるかは判断が必要 • Warningといいつつコンパイル止まるので、-Wno-XXX • 非常に強力な文法チェックなので、新規に書くならちゃんと対応したい (古い大量のコード抱えてると全部対応はツライ) 14
15.
で、本格的に使い方検討開始 15 C++でモデル書いたら OpenCVとか使えるんじゃ?
16.
普通のシミュレータとの違い # が使えない (@は使える) つまり単独ではイベントが起こらないのでシミュレーションが進行しない 16 シミュレーションの進行はユーザー側のC++に任されている eval()呼ばないと進行しない、信号入れないと@イベントも起きない C++テストベンチで時間も空間(信号)も自由自在 え?
何やってもいいんですか?
17.
はじめにやったこと 17 @Vengineerさんの薄い本を読む なんかわかった気になる C++が主導権を握ったシミュレーションの世界へGO!
18.
我々はシミュレータに時空間を支配されていた 18 Verilatorで支配者になろう!
19.
何が必要か? Verilog の文法に即した信号のハンドシェークが C++ ⇔
Verilog間で必要 19 • イベントキューの機能 • ノンブロッキング代入の機能 具体的にはC++側の
20.
イベントキューの機能(#の代替) 20 initial begin reset =
1’b1; #1000 reset = 1’b0; end always #5.0 clk = ~clk; 要はこんな記述の代わりに 1000ns後にリセット解除するコードの実行予約が必要だったり こんな記述の代わりに 5ns後に波形反転コードが呼ばれ、再び5ns後に再予約される仕組み だったりが必要 ⇒ C++ の std::priority_queue とかで楽に作れるよね
21.
C++でのノンブロッキング代入の対応 21 そもそもノンブロッキング代入のおさらい • 参照する変数はイベント前の値 • 代入は即時実施されず、イベント完了後に反映される イベント処理時に
eval() 呼ぶ前と呼んだ後の それぞれで変数アクセスタイミングがC++に必要
22.
その他のケア 22 initial な処理と、 final
な処理が必要だよね 細かい挙動は@Vengineerさんの薄い本で把握!
23.
結局こんな感じの基底クラス実装 23 必要な処理だけoverrideしてモデルを書けるフレームワークを考えてみた • 前処理/後処理 • 自分が動くべきタイミングかどうかの監視 •
イベント前の値取得と、イベント後の反映 • 怪しいUIを追加する為の別スレッド
24.
作ってみた自作クラスはこんな感じ 24 Manager イベント キュー Reset Node Clock Node ImageLoad Node (OpenCV利用) ImageDump Node (OpenCV利用) Verilator Node Verilator 生成の モジュール 必要に応じて値を参照 (テンプレートを活用して 型異存なく接続) C++で書いたモデル
25.
実行してみる(bmp/png/jpgが使える!) 25
26.
画像読み込みモデル 26 一応ブランキングとかもいれて、ビデオ信号っぽい波形も作れるように してみた。
27.
AXI4-Stream のテスト用に乱数ウェイトを入れてみる 27 valid/ready のハンドシェークは乱数入れるだけで初期のバグ出しに効果的 verilogでも困らないが、C++だとstd::random
とかが充実している
28.
調子にのってUIつけてみた 28 OpenCVで回転などの画像の前処理も楽々実装。 シミュレーション表示するスレッドとは別にのぞき見表示するスレッドを準備 ESCキーを押せば途中でも finish() 実行して中断するように実装
29.
波形ダンプとカバレッジOFFしてみた 29 とても速いです。 でも –threads オプション付けたら逆に遅くなったりもしたのでまだまだこれから
30.
ここまでに嵌った初心者の穴紹介(2) • Verilator 任せだとC++のオプションがうまく操作できない •
cmake は新しいものを使おう • 古い cmake 使っていたら、-std=++17 つけてるのに、-std=gnu++11 も一緒 について解析に手間取りました。 • cmake新しくしたら一発解決でした。 30
31.
おまけ 31 • コンパイルとても長い (多分私のVerilogコードも原因) • 実行が超速でびっくり •
大量のデータの実験にはよさそう (動画使った時系列処理の確認とか) 【LUT-Network(拙作のFPGA DNN)やってみた】 【非同期クロックもやってみた】 • 複数クロックを作ってみたが あっさり動いてくれた
32.
まとめ • 導入は思ったより簡単 • 普通の同期回路ならクロックだけ外に引っ張り出したらほとんどのVerilog記述のテス トベンチはほぼそのまま使えた •
SystemVerilogも基本的なところは使えそう?(使い込んでないので自信なし) • 爆速なのでシミュレーション時間が開発効率に直結する分野に人に超おすすめ • Verilator や cmake などはなるべく最新を入れましょう • WSL2 + VS code 最高! Ubuntu20.04 オススメ • 使い方の応用が非常に奥深い • OpenCV の例は一つの例に過ぎない (ROSとかUnityとか繋ぐと面白いかも) • C++のいいところとVerilogのいいところ混ぜてたテストベンチが簡単に書ける • 速いしいろいろなものと繋げてシステムシミュレーションできるかも (カメラとかの実デバイスとか、FPGAの実体とか) 32
33.
参考にさせて頂いた情報 • @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
34.
発表者アクセス先 • 渕上 竜司
(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.
ご清聴ありがとうございました 35
Download