Tech と Culture

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

ハフマンデコードモジュール 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 というプロシージャが実際にハフマン符号から値を取り出すものです。 …

JPEGのハフマン符号 (4) デコード用 ハフマン符号テーブルの生成

ここでは、ハフマンテーブルセグメントの情報から実際のデコードに使うためのテーブルを生成する方法を記します。 JPEG規格ドキュメントの Annex C に相当します。例として以下のハフマンテーブルセグメントを持つ場合を考えます。 jpegsnoopの出力ファイル…

JPEGのハフマン符号 (3) ハフマンテーブルの記述

JPEGの規格の中には、ハフマンテーブルの持ち方とそのデコードをどのように行うかのフローチャートが載っています。 ここではそれについて記します。まず、ハフマンテーブルの持ち方は以下の図のようになります。 DHTというのは、ここからハフマンテーブルが…

JPEGのハフマン符号 (2) AC成分

次にAC成分です。同様にエンコード時を考えます。AC成分もDC成分と同様に、数値を表現するのに必要なビット数毎にハフマンコードを割り当てて、その直後に数値を記録するという考え方を用います。しかし、さらにランレングス圧縮という手法を組み合わせます…

JPEGのハフマン符号 (1) DC成分

JPEGのハフマン符号を理解するため、エンコード時の符号化を考えます。JPEGのハフマン符号は、画素の値をそのまま符号化はしません。 ・画素の値を表現するために必要なビット数をハフマン符号化してデータ圧縮を行います。 ・DCT出力値のAC部分とDC部分で異…

ハフマン符号のアルゴリズム

非常に簡単にハフマン符号について説明します。アルゴリズムの教科書は沢山読みましたが、私が最も良いと思ったものは以下のものです。「アルゴリズムイントロダクション」T.コルメン C.ライザーソン R.リベスト 近代科学社定評のある本なので良く読み返し…

JPEG ファイルフォーマット

JPEGファイルの内部構造を調査しました。JPEGにおいて 0xFFXX (XXはいろいろな数値)という、最初の1バイトがFFで始まるマーカーというものが多数定義されています。 例えばJPEGデータは SOIマーカーで始まり、EOIマーカーで終わりますが、それぞれ以下の値…

雑記

別件で止まっていましたが、今日から開発再開します。 なかなかよさげなリーダが発表されてました。けど、ブラウザは欲しいなー。これから一年ぐらい、タブレットモバイル端末が激しい主戦場になりそうな雰囲気になってきました。

JPEG規格 ドキュメント

ハフマンコード部分は、JPEGファイルフォーマットとも関連する部分です。JPEGのドキュメントは以下のディレクトリから手に入れることができます。http://www.w3.org/Graphics/JPEG/itu-t81.pdfJPEGハフマンコードの仕様やファイルフォーマットがだいぶ分かっ…

JPEG ハフマンデコード

JPEGのハフマン符号に関しては、このページが詳しい。現在はIJGのハフマンデコード部分を解読中。 (ソフトウェアとハードウェアをつなぐため。)その他、動作が確認とれた後に、DMAコントローラを設計して、ソフトウェアを介さずにメモリからハードウェアモ…

データパス演算誤差

以下の5つについて調べました。(1)IJG ソフトウェアIDCT intバージョン (2)IJG ソフトウェアIDCT floatバージョン (3)ハードウェアアルゴリズム確認ソフト (4)ハードウェアビット幅エミュレーションソフト (5)RTLまず、前回以降で(3)のバグが見つかりました…

DropBox

設計データが大きくなってきたので万が一の事を考えてバックアップを取る必要が出てきました。 DVDに焼いておくのもかさばるなーと思っていたのですが、最近はオンラインストレージがかなり使われているようです。その中でも sugarsync というものと dropbox…

調査中

(1) デバイスドライバからの転送データ数について。 8bit x64 ではなく、 8bitx64x6 (MCU単位)で転送してみた。 なんと、fpsはややダウン。 8bit x64 では、デバイスドライバ内部でのレジスタアクセスを64行ダイレクトに記述していたものを、MCU単位では、fo…

motion JPEG再生 4

とりあえず、現在のシステムにつけているAHBペリフェラルモジュールを減らします。 PS/2のモジュールが二つ(マウス&キーボード用)ついていますのでこれを削除します。 ホスト側にteratermを立ち上げてこちらにRS232-Cでコンソール出力することにより、操…

IDCT モジュール RTL

頭の中にこれまでの設計があるうちにコーディングしてしまいたいため、msys上のパスの問題は、makeにより出力されるスクリプトファイルを強引にエディタで書き換えてmodelsimを立ち上げました。 (とりあえず応急処置。今のうちにコーディングしておきたいの…