Tech と Culture

テクノロジーとカルチャー

未分類

Linux上でのJPEG表示

デバッグしてました。。。前のエントリに書いた修正以外にも沢山。 fetch stageのステートマシンの遷移条件は以下のように修正。 デバッグ以外にも、motionJPEGへの対応のためSOSマーカーが出てくるまでFIFOデータを単に消費し続けるモードを追加しました。t…

雑記

FPGAに収めるためにいろいろ変更中です。。。シフタを純粋なシフタ記述に変更 ハフマンモジュールとDCTモジュールの間のメモリを3つから2つに減らす。 YCC-RGB変換の固定値乗算の部分を部分積の足し算にRTL変更。 ISEのバージョンアップ それに伴うVHDL微小…

雑記

シフタを乗算器を使わずに普通に記述し、YCC-RGB変換モジュールの固定値乗算を乗算器を使わないようにすれば入るかもしれないと思い変更中です。ISEの謎のInternal Error等が出るのでISEのバージョンUPを行いました。これまでISE10を使っていましたが、Gaisl…

FPGA仮インプリ

メモリとコントローラを以前のものを変更してコーディングし、接続してISEにかけてみました。 面積と周波数(クリティカルパスの遅延)を見るためです。 合成結果は、、、、、Device utilization summary: ---------------------------Selected Device : 3s1…

64画素メモリ

複数のjpeg画像ファイルでハフマンデコードが問題なく行われていることが確認できました。これまでの方針で一応ハフマンデコードできると考えられます(バグはまだ入っている可能性大)。 しかし、FPGAにインプリしてまともに動くかどうかはまだ分かりません…

雑記

いきなりRTLを書いて、シミュレーションを通すという方法をとりましたが、デバッグにかなりてこずりました。。。 ようやく、いつもの80x80の画像のハフマン符号がきちんと出力されるようになりました。 過去のエントリの図も修正しました。まだまだバグがい…

雑記

デバッグ中。。。。 フェッチの部分に問題が発覚して修正方法を考えている最中です。。。。「電子書籍の衝撃」佐々木俊尚著 を読みました。 なかなか面白い本でした。日本には本の再販制度というものがあり、書店の売れ残りは出版社が保障してくれるようにな…

ハフマンデコードモジュール 11 AMBAアドレス

AMBAのアドレスは以下のようにしました。 とりあえず、これで頭の中での設計は一旦終了。実際のコーディングに入ります。 C言語でワークメモリのウェイトを表現して検証するのが面倒くさいので、直接RTL書こうかと思っていたのだけど、これぐらいの規模にな…

ハフマンデコードモジュール 10 デコードパート ステートマシン

デコードパートのステートマシンは以下のようにしました。 条件が書かれていない部分は、他の矢印の条件以外すべての意味です。

ハフマンデコードモジュール 9 メモリアドレスカウンタ

デコードしたRunlengthの値分だけアドレスを飛ばして、値を書き込んでいきます。 そのためのカウンターは以下のようにしました。 また、このカウンタの値によって、Huffman Cache mem や Serial Huffval mem で出てきた符号(DC/AC, id)を決定します。

雑記

ここまで考えてきて、今更ながらシリアルと呼んでいるものを16個作って比較器の出力でどれか一つ選ぶハードウェアが一番シンプルで高速なように思えてきました。。。。。。まあ、けど、いろいろ考えていると際限がないので、とりあえず今のまま設計します。 …

ハフマンデコードモジュール 8 レジスタ演算とシフト量演算

内部レジスタの演算と、シフト量演算部分は以下のようにしました。Huffman cache -> シフト量演算 -> -> シフタ -> sign_extention -> メモリ のパスが一番重そうな気がします。。。ここで出てくるレジスタ信号はステートマシンの遷移の判断にも使用されます…

ハフマンデコードモジュール 7 シフター

シフターは、32bitならまじめにコーディングしても結構良いものができるような気もしますが、FPGAリソースに詳しくないので以下のように乗算器を用いて構成しようと思います。乗算器ハードを使ってくれれば高速になるかと思ってやっていますが、実際のところ…

ハフマンデコードモジュール 6 シリアル

シリアル処理部分の回路は以下のようにしました。 基本的にIJGのハフマンデコードの所で調べた、Huffval[code + offset[k]] という演算を行います。 serialcheckステートで、9,10,11,.....とフェッチレジスタから持ってくるデータ量を増やしながら、Maxvalue…

ハフマンデコードモジュール 5 デコードパート

デコード部分については以下のように変更しました。 後段の64画素メモリに書き込み可能になったら、スタンバイ状態からSymReqステートに移動します。 図中には64画素メモリは一つしかありませんが、実際には3つ置いてダブルバッファのように使用します。 2つ…

ハフマンデコードモジュール 4 (キャッシュ)

シリアルに順にチェックしていくルーチンも、それほどクロック数を必要としないみたいなので、IJGと同じくキャッシュは8bitにしようと思います。IJGでは、8bitでキャッシュにヒットしなかった場合とバッファに8bit未満のデータしかない場合にシリアルチェッ…

雑記

むむむ、Cache memoryは、AC,DC2種類づつあってあまりにもでかくなる。16bit Cacheをやめて n bit cacheにしたときに、nよりも少ないビットしかフェッチレジスタに無いときキャッシュアクセスでは間違った値が出てくる。 根本的に作り直す必要がある?勘違い…

ハフマンデコードモジュール 3 

fetch partは以下のようにしました。 bytefetch ステートでフェッチレジスタに余裕があれば、8bit毎フェッチします。 FIFOにデータが無い場合は、Memwait ステートでメモリ要素が0でなくなるまで待機します。 データにFFが出てきた時は次の値を読まないと解…

ハフマンデコードモジュール 2 

AHBインターフェース部分は以下のようにします。 FIFO自体は2port memoryで実現します。かつて、ycc-rgb変換モジュールで設計したものと同じです。 AHBアドレスは、ハフマンコード用のアドレス範囲に書き込みがあれば、アドレスの値に関わらず、FIFOに順番に…

ハフマンデコードモジュール 1 

ハフマンデコードモジュール全体像は以下のようなものにしました。 AHBからFIFOにデータを入れるところまでのAHB interfaceと、 32bit fetch registerのデータが24bit以下になった時に8bitづつ供給していく fetch part と、fetch registerの値からハフマンデ…

ハフマンデコードモジュール 構成案修正

とりあえず、フェッチレジスタ32bitでフェッチ単位が8bitのものの構成を考えました。 (ステートマシンは適当です。これから詳細調べます)フェッチを8bit単位にしたので、フェッチするさいに"FF"を検出します。 "FF"を検出した場合、次に"00"であれば、FFを…

雑記

64ビットシフタはとんでもなくでかくなりそう。フェッチレジスタが32ビットでも性能に対して影響なさそうなので、フェッチレジスタ32ビットにしてシフタも32ビットに変更中です。。。 (フェッチは8ビット単位)以下のニュースが私的にすごく気になりました…

ハフマンデコードモジュール 構成案

ハフマンデコード部分の構成を考えます。ハフマンデコード部分は様々な構成方法がありえます。そこで前提条件として以下のように考えました。 ・現在のFPGAボードにはどう設計しても入らない、かつFPGA内部のリソースに詳しくないので、とりあえずリソースを…

ffmpeg 出力 motionJPEG フォーマット

motionJPEG と言う規格は存在しません。実際にどのようなデータになっているのか調べてみました。 ffmpegの出力した mjpeg ファイルに対して、 od -x ****.mjpeg として表示させてみました(INTELプロセッサ上)。 0000000 d8ff feff 0e00 614c 6376 3235 312e…

IJGソフト内部 ハフマン符号化 3

HUFF_DECODE は、 jdhuff.h で defineされています。#define HUFF_DECODE(result,state,htbl,failaction,slowlabel) \ { register int nb, look; \ if (bits_left バッファ内に、8bit(キャッシュサイズ)以上データ有るかチェック if (! jpeg_fill_bit_buffer…

IJGソフト内部 ハフマン符号化 2

全体の流れは、 decode_mcuという関数内に記述されています。 MCU一つ分のハフマンデコードを行います。 細かい所を省略して流れ部分を書き出すと以下のようなものです。 コメント文として全体の流れを書き込んで説明しています。decode_mcu (j_decompress_p…

IJGソフト内部 ハフマン符号化 1

IJG のjpeglibのハフマンデコード部分のソースコードを読みました。 ハフマンデコード部分は非常に読みにくいソースコードになっています。 綺麗に説明するのは難しいですが、多くのシステムで使用されている非常にユーザ数の多いソースコードなので、今後ソ…

雑記

とうとうiPadが発表されました。ちまたでは、売れないと言っている人たちも結構いるようですが、私はかなり売れると思いました。 一家の主婦がリビングに一台置いておくのに最適のネットビューワーだと思います。(android or ChromeOS) + Tegra のタブレット…

JPEG アルゴリズム全体像

ここまでで、今更ですがJPEGの全体像を掴むことができました。 JPEGというアルゴリズムがどのような思想でデータ圧縮しているか理解できたので、メモ代わりにまとめておきます。 エンコード側で考えます。デコードは逆に操作するだけです。 JPEGは上図の4つ…

JPEGのハフマン符号 (5) デコードフローチャート

次に、JPEG規格ドキュメントの Annex F.2 にデコードフローチャートが載っていますので、そこを見ていきます。 AC成分のデコードの全体フローは以下のようなものです。 この中の DECODE というプロシージャが実際にハフマン符号から値を取り出すものです。 …