オープンハードセミナー

66
mjpeg stream viewer on FPGA ハードウェア処理とソフトウェア処理の違いを理解する 栗元憲一 http://k2-garage.com 13714日日曜日

Transcript of オープンハードセミナー

Page 1: オープンハードセミナー

mjpeg stream viewer on FPGAハードウェア処理とソフトウェア処理の違いを理解する

栗元憲一http://k2-garage.com

13年7月14日日曜日

Page 2: オープンハードセミナー

Agenda

introduction 1. 自己紹介 2. FPGAって何?main 3. JPEGアルゴリズム 4. softwareのみでmotionJPEG再生 5. YCbCr-RGB変換のみhardware化 6. JPEG処理すべてhardware化 7. まとめ

13年7月14日日曜日

Page 3: オープンハードセミナー

自己紹介

excellent design incデータパス系ハードマクロやstatic timing analyzer の開発

九州工業大学笹尾研究室論理合成アルゴリズムの研究

NP完全問題への挑戦

13年7月14日日曜日

Page 4: オープンハードセミナー

自己紹介

ソニーLSIデザイン

SoCの物理設計

*これはIntelのチップです

NSCore inc

標準プロセスで作る不揮発メモリトランジスタバラつき測定システム

数万トランジスタを並べたチップ

switching matrix

semiconductorparametric analyzer

pc

13年7月14日日曜日

Page 5: オープンハードセミナー

motionJPEG viewer

on FPGA

android + hardware

13年7月14日日曜日

Page 6: オープンハードセミナー

書籍出版しました

表テーマソフトウェア処理で重たい部分をハードウェア化して高速化する手法を学ぶ

対象読者FPGAで小さなロジックは作れるようになったが、システムを作る方法はまだ知らない人

13年7月14日日曜日

Page 7: オープンハードセミナー

Agenda

introduction 1. 自己紹介 2. FPGAって何?main 3. JPEGアルゴリズム 4. softwareのみでmotionJPEG再生 5. YCbCr-RGB変換のみhardware化 6. JPEG処理すべてhardware化 7. まとめ

13年7月14日日曜日

Page 8: オープンハードセミナー

まずは普通のSoCの中身を知ろう(1)

texus instrumentsのDM3730

ARM Cortex A-8 (processor), GPU,.......

example

これ

beagleboard-xM

13年7月14日日曜日

Page 9: オープンハードセミナー

まずは普通のSoCの中身を知ろう(2)

Androidやlinuxが動作してinternetに接続できたり複雑な動作をしている

Logic部分とSRAM部分とanalog回路部分の組み合わせ

13年7月14日日曜日

Page 10: オープンハードセミナー

まずは普通のSoCの中身を知ろう(3)

in_A in_BBB

out

L L HL H HH L HH H L

in_A in_BBB

out

L L HL H LH L LH H L

代表的な論理ゲートNAND NORその他INVERTERやD-FFと呼ばれる記憶素子等が

複雑に組み合わさっています(数千万以上!!!!)

logic部分

13年7月14日日曜日

Page 11: オープンハードセミナー

まずは普通のSoCの中身を知ろう(4)SRAM部分

大量の0,1をアドレスに紐づけて記憶します。DRAMと異なりTrが6個必要なので、DRAMと同じ面積だと容量は少ないですが、

特別な製造ライン無しにLogicと一緒に作れます。

13年7月14日日曜日

Page 12: オープンハードセミナー

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日日曜日

Page 13: オープンハードセミナー

FPGA

FPGA内部構造前ページのHDLを全く別の方法で動作させます。

4~5入力のSRAMのメモリの中の値と接続を変更することで任意のlogicを実現

13年7月14日日曜日

Page 14: オープンハードセミナー

FPGA vs ASICpros 一種類のチップで任意の機能のLSIをユーザの手元で実現 動作中に書き換えるアプリケーションの可能性 少量生産のASICより安くなる可能性

cons 同一機能のASICより面積増大、速度遅い、消費電力大 大量生産するとASICよりコスト高

13年7月14日日曜日

Page 15: オープンハードセミナー

Agenda

introduction 1. 自己紹介 2. FPGAって何?main 3. JPEGアルゴリズム 4. softwareのみでmotionJPEG再生 5. YCbCr-RGB変換のみhardware化 6. JPEG処理すべてhardware化 7. まとめ

13年7月14日日曜日

Page 16: オープンハードセミナー

JPEG algorithm

画像を人間の目では劣化が分かりにくいように圧縮するアルゴリズム

とりあえずencodeを理解decodeは逆向きにしただけ。

13年7月14日日曜日

Page 17: オープンハードセミナー

JPEG encode Algorithmの主な構造

13年7月14日日曜日

Page 18: オープンハードセミナー

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日日曜日

Page 19: オープンハードセミナー

RGB−YCbCr変換(2)

Y成分と比較してCbCr成分に人間の目は鈍感なので間引くことが可能

13年7月14日日曜日

Page 20: オープンハードセミナー

2D-DCT変換(1)

右上の基底波形の重ねあわせの係数に変換する正規直行変換

13年7月14日日曜日

Page 21: オープンハードセミナー

2D-DCT変換(3)

8x8行列演算を2回行う

13年7月14日日曜日

Page 22: オープンハードセミナー

量子化

dctと量子化によって、次のrun-length

huffman圧縮で圧縮しやすいデータを作り出す

13年7月14日日曜日

Page 23: オープンハードセミナー

ランレングス圧縮

基本: 同じ文字が連続した数を記述例:「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日日曜日

Page 24: オープンハードセミナー

huffman圧縮

基本思想: 出現確率の大きい文字に少ないビット数のコードを、出現確率の小さい文字に大きなビット数のコードを割り当てる

13年7月14日日曜日

Page 25: オープンハードセミナー

Agenda

introduction 1. 自己紹介 2. FPGAって何?main 3. JPEGアルゴリズム 4. softwareのみでmotionJPEG再生 5. YCbCr-RGB変換のみhardware化 6. JPEG処理すべてhardware化 7. まとめ

13年7月14日日曜日

Page 26: オープンハードセミナー

FPGA上にSoCを実現!

13年7月14日日曜日

Page 27: オープンハードセミナー

実現するシステム

LAN上にあるサーバからmotionJPEGファイルをストリーミング。FPGA上のSoCで動画表示

13年7月14日日曜日

Page 28: オープンハードセミナー

開発するSoC

SPARC V8 CPU, AHB・APBバス, ethernet mac......

13年7月14日日曜日

Page 29: オープンハードセミナー

最初にFPGA上にSoCをインプリLinuxをブートしてソフトウェアのみで

システムを動作させる。

13年7月14日日曜日

Page 30: オープンハードセミナー

aeroflex gaisler社からGPLライセンスのSoCが公開されていて、前出の図からjpegモジュールを除いたSoCが40種類ぐらいのボードでmakeコマンド一つで実装できます。

この状態でrepositoryに含めてます

13年7月14日日曜日

Page 31: オープンハードセミナー

linuxについてもconfigurationさえすれば動作するsnapgear-linuxが公開されてます。

この状態でrepositoryに含めてます

13年7月14日日曜日

Page 32: オープンハードセミナー

jpegソフトウェアについては定評のあるIJG(International Jpeg Group)のjpeg library

を使用します。

linuxのユーザランドアプリのディレクトリとしてrepositoryに含めてます

13年7月14日日曜日

Page 33: オープンハードセミナー

Boot!

とりあえず、フレームバッファにコンソール出力するとこうなります。以降はコンソールはUART。

13年7月14日日曜日

Page 34: オープンハードセミナー

IJG付属のjpeg表示ソフトを少し変更するとmotionJPEG表示できます。

遅い!!!!!! (こんなに小さな画面でもカクカク)

(ちなみに動作周波数40MHz)13年7月14日日曜日

Page 35: オープンハードセミナー

ちなみにVGAサイズだと、、、

13年7月14日日曜日

Page 36: オープンハードセミナー

開発フロー

ソフトウェア処理をハードウェア処理に変更することでfpsが向上。ハードウェア処理が何故高速なのかを学習。

13年7月14日日曜日

Page 37: オープンハードセミナー

softもhardもgitで管理

sourceforgeの MJPEG-LEON-FPGA にrepositoryがあります。

xilinxalteraactel

ASICでも!動作します

13年7月14日日曜日

Page 38: オープンハードセミナー

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_mcu24.19 0.35 0.15 249696 0.00 0.00 jpeg_idct_islow20.97 0.48 0.13 2448 0.05 0.05 ycc_rgb_convert8.06 0.53 0.05 1722390 0.00 0.00 jpeg_fill_bit_buffer8.06 0.58 0.05 1 50.00 50.00 finish_output_bmp3.23 0.60 0.02 2448 0.01 0.01 put_pixel_rows1.61 0.61 0.01 236866 0.00 0.00 jpeg_huff_decode1.61 0.62 0.01 4896 0.00 0.00 h2v1_fancy_upsample0.00 0.62 0.00 62424 0.00 0.00 jzero_far

huffman decode, idct, YCbCr-RGB変換が占める

13年7月14日日曜日

Page 39: オープンハードセミナー

software処理でデータはどう流れる? (1)

IU,cache,MMU

13年7月14日日曜日

Page 40: オープンハードセミナー

software処理でデータはどう流れる? (3)

cache miss とMMU13年7月14日日曜日

Page 41: オープンハードセミナー

software処理でデータはどう流れる? (2)

cache miss とMMU13年7月14日日曜日

Page 42: オープンハードセミナー

software処理でデータはどう流れる? (4)

framebuffer出力も同時動作memory controllerの入り口もかなり厳しい

13年7月14日日曜日

Page 43: オープンハードセミナー

software処理でデータはどう流れる? (5)

memory controller入り口がボトルネックの場合は回避策を考える

13年7月14日日曜日

Page 44: オープンハードセミナー

Agenda

introduction 1. 自己紹介 2. FPGAって何?main 3. JPEGアルゴリズム 4. softwareのみでmotionJPEG再生 5. YCbCr-RGB変換のみhardware化 6. JPEG処理すべてhardware化 7. まとめ

13年7月14日日曜日

Page 45: オープンハードセミナー

以下の様な要素技術をマスター

・IPコア設計・AMBAバスの理解とインターフェース設計・デバイスドライバ開発 (この発表ではふれません)

13年7月14日日曜日

Page 46: オープンハードセミナー

AMBA busにつながるIPコア

YCbCr-RGB

13年7月14日日曜日

Page 47: オープンハードセミナー

YCbCr-RGB演算をハード化

hardwareは並行動作可能動作周波数を満たす限り直列接続可能

13年7月14日日曜日

Page 48: オープンハードセミナー

Busって何? (1)

いつキャッシュミスが起きるかはHardware設計時にも分からないし、アプリケーション開発時にも分からない

busにつながるコアにはマスタとスレーブの2種類ある

13年7月14日日曜日

Page 49: オープンハードセミナー

Busって何? (2)

bus上にマスタは複数あって要求が出るタイミングは分からないので当然ぶつかる

13年7月14日日曜日

Page 50: オープンハードセミナー

Busって何? (3)

アービタが交通整理をしている

13年7月14日日曜日

Page 51: オープンハードセミナー

Busって何? (4)

どのようなタイミングで要求や応答が起きても正しく動くように構造やプロトコルを規定したもの

13年7月14日日曜日

Page 52: オープンハードセミナー

YCbCr-RGBコア概要設計

13年7月14日日曜日

Page 53: オープンハードセミナー

FIFO(First In First Out)

データを一定数貯めれるバッファで一番古いデータから出力される

13年7月14日日曜日

Page 54: オープンハードセミナー

実行すると

殆どfps変わらない!?

13年7月14日日曜日

Page 55: オープンハードセミナー

CPU使用時間の変化

13年7月14日日曜日

Page 56: オープンハードセミナー

データの流れ

13年7月14日日曜日

Page 57: オープンハードセミナー

Agenda

introduction 1. 自己紹介 2. FPGAって何?main 3. JPEGアルゴリズム 4. softwareのみでmotionJPEG再生 5. YCbCr-RGB変換のみhardware化 6. JPEG処理すべてhardware化 7. まとめ

13年7月14日日曜日

Page 58: オープンハードセミナー

huffman, dctもhardware化

FIFOやダブルバッファで接続シェークハンドで連携

13年7月14日日曜日

Page 59: オープンハードセミナー

ダブルバッファ

13年7月14日日曜日

Page 60: オープンハードセミナー

再生!

ソフト処理より遥かに大きな画面サイズで動画再生

13年7月14日日曜日

Page 61: オープンハードセミナー

fpsが上がる理由

13年7月14日日曜日

Page 62: オープンハードセミナー

Agenda

introduction 1. 自己紹介 2. FPGAって何?main 3. JPEGアルゴリズム 4. softwareのみでmotionJPEG再生 5. YCbCr-RGB変換のみhardware化 6. JPEG処理すべてhardware化 7. まとめ

13年7月14日日曜日

Page 63: オープンハードセミナー

まとめ(1)

13年7月14日日曜日

Page 64: オープンハードセミナー

まとめ(2)

13年7月14日日曜日

Page 65: オープンハードセミナー

おまけ

裏テーマ

SoCに対するバザール開発の可能性

13年7月14日日曜日

Page 66: オープンハードセミナー

買ってねw

13年7月14日日曜日