mjpeg stream viewer on FPGA
ハードウェア処理とソフトウェア処理の違いを理解する
栗元憲一
http://k2-garage.com
13年7月14日日曜日
Agenda
introduction
1. 自己紹介
2. FPGAって何?
main
3. JPEGアルゴリズム
4. softwareのみでmotionJPEG再生
5. YCbCr-RGB変換のみhardware化
6. JPEG処理すべてhardware化
7. まとめ
13年7月14日日曜日
自己紹介
excellent design inc
データパス系ハードマクロや
static timing analyzer の開発
九州工業大学笹尾研究室
論理合成アルゴリズムの研究
NP完全問題への挑戦
13年7月14日日曜日
自己紹介
ソニーLSIデザイン
SoCの物理設計
*これはIntelのチップです
NSCore inc
標準プロセスで作る不揮発メモリ
トランジスタバラつき測定システム
数万トランジスタ
を並べたチップ
switching
matrix
semiconductor
parametric
analyzer
pc
13年7月14日日曜日
motionJPEG
viewer
on FPGA
android + hardware
13年7月14日日曜日
書籍出版しました
表テーマ
ソフトウェア処理で重たい部分をハードウェア化
して高速化する手法を学ぶ
対象読者
FPGAで小さなロジックは作れるようになったが、
システムを作る方法はまだ知らない人
13年7月14日日曜日
Agenda
introduction
1. 自己紹介
2. FPGAって何?
main
3. JPEGアルゴリズム
4. softwareのみでmotionJPEG再生
5. YCbCr-RGB変換のみhardware化
6. JPEG処理すべてhardware化
7. まとめ
13年7月14日日曜日
まずは普通のSoCの中身を知ろう(1)
texus instrumentsのDM3730
ARM Cortex A-8 (processor), GPU,.......
example
これ
beagleboard-xM
13年7月14日日曜日
まずは普通のSoCの中身を知ろう(2)
Androidやlinuxが動作してinternetに接続
できたり複雑な動作をしている
Logic部分とSRAM部分とanalog回路部分
の組み合わせ
13年7月14日日曜日
まずは普通のSoCの中身を知ろう(3)
in_A in_B
BB
out
L L H
L H H
H L H
H H L
in_A in_B
BB
out
L L H
L H L
H L L
H H L
代表的な論理ゲートNAND NOR
その他INVERTERやD-FFと呼ばれる記憶素子等が
複雑に組み合わさっています
(数千万以上!!!!)
logic部分
13年7月14日日曜日
まずは普通のSoCの中身を知ろう(4)
SRAM部分
大量の0,1をアドレスに紐づけて記憶します。
DRAMと異なりTrが6個必要なので、DRAMと同じ面積だと容量は少ないですが、
特別な製造ライン無しにLogicと一緒に作れます。
13年7月14日日曜日
SoCはどうやって設計するの?
HDLで記述
-- controller part
if ((count_num = 0 and strobe1 = '1'
v.control_reg.counter :=
if(count_num = 73)then
v.control_reg.counter := (others =>
end if;
end if;
vready1 := '0';
論理合成ツール
テキスト 工場毎に設計された
論理セルの接続ネット
(1000万ゲート以上!)
配置配線ツール
工場毎に設計された
論理セルのレイアウトを
自動で配置配線
工場で製造できるレイアウトが完成!
13年7月14日日曜日
FPGA
FPGA内部構造
前ページのHDLを全く別の
方法で動作させます。
4∼5入力のSRAMの
メモリの中の値と
接続を変更することで
任意のlogicを実現
13年7月14日日曜日
FPGA vs ASIC
pros
一種類のチップで任意の機能のLSIをユーザの手元で実現
 動作中に書き換えるアプリケーションの可能性
少量生産のASICより安くなる可能性
cons
同一機能のASICより面積増大、速度遅い、消費電力大
大量生産するとASICよりコスト高
13年7月14日日曜日
Agenda
introduction
1. 自己紹介
2. FPGAって何?
main
3. JPEGアルゴリズム
4. softwareのみでmotionJPEG再生
5. YCbCr-RGB変換のみhardware化
6. JPEG処理すべてhardware化
7. まとめ
13年7月14日日曜日
JPEG algorithm
画像を人間の目では劣化が
分かりにくいように圧縮するアルゴリズム
とりあえずencodeを理解
decodeは逆向きにしただけ。
13年7月14日日曜日
JPEG encode Algorithmの主な構造
13年7月14日日曜日
RGB−YCbCr変換(1)
Y = 0.29900R + 0.58700G + 0.11400B
Cb = -0.16874R - 0.33126G + 0.5000B + 128
Cr = -0.5000R -0.41869G - 0.08131B + 128
13年7月14日日曜日
RGB−YCbCr変換(2)
Y成分と比較してCbCr成分に人間の目は
鈍感なので間引くことが可能
13年7月14日日曜日
2D-DCT変換(1)
右上の基底波形の重ねあわせの係数に
変換する正規直行変換
13年7月14日日曜日
2D-DCT変換(3)
8x8行列演算を2回行う
13年7月14日日曜日
量子化
dctと量子化によって、次のrun-length
huffman圧縮で
圧縮しやすいデータを作り出す
13年7月14日日曜日
ランレングス圧縮
基本:
 同じ文字が連続した数を記述
例:
「A A A A A B B B B B B B B B A A A」 → 「A 5 B 9 A 3」
JPEGでは:
0が連続した数を後ろに付ける
例:
2,1,-1,0,3,2,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,
→ 20,10,-11,30,20,11,14,14,EOB
13年7月14日日曜日
huffman圧縮
基本思想: 出現確率の大きい文字に少ないビット数のコードを、出現確率の小さい文
字に大きなビット数のコードを割り当てる
13年7月14日日曜日
Agenda
introduction
1. 自己紹介
2. FPGAって何?
main
3. JPEGアルゴリズム
4. softwareのみでmotionJPEG再生
5. YCbCr-RGB変換のみhardware化
6. JPEG処理すべてhardware化
7. まとめ
13年7月14日日曜日
FPGA上にSoCを実現!
13年7月14日日曜日
実現するシステム
LAN上にあるサーバからmotionJPEGファイル
をストリーミング。FPGA上のSoCで動画表示
13年7月14日日曜日
開発するSoC
SPARC V8 CPU, AHB・APBバス, ethernet mac......
13年7月14日日曜日
最初にFPGA上にSoCをインプリ
Linuxをブートしてソフトウェアのみで
システムを動作させる。
13年7月14日日曜日
aeroflex gaisler社からGPLライセンスのSoCが
公開されていて、前出の図からjpegモジュールを除
いたSoCが40種類ぐらいのボードでmakeコマンド
一つで実装できます。
この状態でrepositoryに含めてます
13年7月14日日曜日
linuxについてもconfigurationさえすれば
動作するsnapgear-linuxが公開されてます。
この状態でrepositoryに含めてます
13年7月14日日曜日
jpegソフトウェアについては定評のある
IJG(International Jpeg Group)のjpeg library
を使用します。
linuxのユーザランドアプリのディレクトリとして
repositoryに含めてます
13年7月14日日曜日
Boot!
とりあえず、フレームバッファにコンソール出力するとこうな
ります。以降はコンソールはUART。
13年7月14日日曜日
IJG付属のjpeg表示ソフトを少し変更すると
motionJPEG表示できます。
遅い!!!!!! (こんなに小さな画面でもカクカク)
(ちなみに動作周波数40MHz)
13年7月14日日曜日
ちなみにVGAサイズだと、、、
13年7月14日日曜日
開発フロー
ソフトウェア処理をハードウェ
ア処理に変更することでfpsが向
上。
ハードウェア処理が何故高速な
のかを学習。
13年7月14日日曜日
softもhardもgitで管理
sourceforgeの MJPEG-LEON-FPGA に
repositoryがあります。
xilinx
altera
actel
ASICでも!
動作します
13年7月14日日曜日
gprofを用いて処理時間を測定
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
32.26 0.20 0.20 62424 0.00 0.00 decode_mcu
24.19 0.35 0.15 249696 0.00 0.00 jpeg_idct_islow
20.97 0.48 0.13 2448 0.05 0.05 ycc_rgb_convert
8.06 0.53 0.05 1722390 0.00 0.00 jpeg_fill_bit_buffer
8.06 0.58 0.05 1 50.00 50.00 finish_output_bmp
3.23 0.60 0.02 2448 0.01 0.01 put_pixel_rows
1.61 0.61 0.01 236866 0.00 0.00 jpeg_huff_decode
1.61 0.62 0.01 4896 0.00 0.00 h2v1_fancy_upsample
0.00 0.62 0.00 62424 0.00 0.00 jzero_far
huffman decode, idct, YCbCr-RGB変換が占める
13年7月14日日曜日
software処理でデータはどう流れる? (1)
IU,cache,MMU
13年7月14日日曜日
software処理でデータはどう流れる? (3)
cache miss とMMU
13年7月14日日曜日
software処理でデータはどう流れる? (2)
cache miss とMMU
13年7月14日日曜日
software処理でデータはどう流れる? (4)
framebuffer出力も同時動作
memory controllerの入り口もかなり厳しい
13年7月14日日曜日
software処理でデータはどう流れる? (5)
memory controller入り口がボトルネックの
場合は回避策を考える
13年7月14日日曜日
Agenda
introduction
1. 自己紹介
2. FPGAって何?
main
3. JPEGアルゴリズム
4. softwareのみでmotionJPEG再生
5. YCbCr-RGB変換のみhardware化
6. JPEG処理すべてhardware化
7. まとめ
13年7月14日日曜日
以下の様な要素技術をマスター
・IPコア設計
・AMBAバスの理解とインターフェース設計
・デバイスドライバ開発 (この発表ではふれません)
13年7月14日日曜日
AMBA busにつながるIPコア
YCbCr
-RGB
13年7月14日日曜日
YCbCr-RGB演算をハード化
hardwareは並行動作可能
動作周波数を満たす限り直列接続可能
13年7月14日日曜日
Busって何? (1)
いつキャッシュミスが起きるかは
Hardware設計時にも分からないし、アプリケーション開発時にも分からない
busにつながるコアには
マスタとスレーブの2種
類ある
13年7月14日日曜日
Busって何? (2)
bus上にマスタは複数あって要求が出るタイミングは
分からないので当然ぶつかる
13年7月14日日曜日
Busって何? (3)
アービタが交通整理をしている
13年7月14日日曜日
Busって何? (4)
どのようなタイミングで要求や応答が起きても
正しく動くように構造やプロトコルを規定したもの
13年7月14日日曜日
YCbCr-RGBコア概要設計
13年7月14日日曜日
FIFO(First In First Out)
データを一定数貯めれる
バッファで一番古いデータ
から出力される
13年7月14日日曜日
実行すると
殆どfps変わらない!?
13年7月14日日曜日
CPU使用時間の変化
13年7月14日日曜日
データの流れ
13年7月14日日曜日
Agenda
introduction
1. 自己紹介
2. FPGAって何?
main
3. JPEGアルゴリズム
4. softwareのみでmotionJPEG再生
5. YCbCr-RGB変換のみhardware化
6. JPEG処理すべてhardware化
7. まとめ
13年7月14日日曜日
huffman, dctもhardware化
FIFOやダブルバッファで接続
シェークハンドで連携
13年7月14日日曜日
ダブルバッファ
13年7月14日日曜日
再生!
ソフト処理より遥かに大きな画面サイズで
動画再生
13年7月14日日曜日
fpsが上がる理由
13年7月14日日曜日
Agenda
introduction
1. 自己紹介
2. FPGAって何?
main
3. JPEGアルゴリズム
4. softwareのみでmotionJPEG再生
5. YCbCr-RGB変換のみhardware化
6. JPEG処理すべてhardware化
7. まとめ
13年7月14日日曜日
まとめ(1)
13年7月14日日曜日
まとめ(2)
13年7月14日日曜日
おまけ
裏テーマ
SoCに対するバザール開発の可能性
13年7月14日日曜日
買ってねw
13年7月14日日曜日

オープンハードセミナー