2009-01-01から1年間の記事一覧

雑記

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

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を立ち上げました。 (とりあえず応急処置。今のうちにコーディングしておきたいの…

問題点メモ

ここまでで、YCbCr-RGB変換と、Upsampleの部分がハードウェア化でき、無事に動画が再生できました。 ここで、いろいろ問題点が出てきているのでメモとしてまとめておきます。(1) windows上(msys, cygwin)のgrlibスクリプトがうまく動作しない。 最初は問題な…

gdbserver

さてさて、色々問題はありますが、VMware上のCentOSの方にISE10.1をインストールしてFPGAにマッピングをおこないました(ISE11.1を最初にインストールしましたが、現在のgrlibのスクリプトでは動かないようです。多分少し修正すれば動くのだと思いますが、安…

YCbCrメモリ+コントローラ 修正

メモリアクセス部分のステートマシンを修正しました。 readingからemptyに移る間に一つ何もしないステートを追加しました。 この間にメモリの出力を確定させます。メモリ出力はアドレスやenableを入れた次のクロックで確定しますので、確定してからスイッチ…

APB レジスタ

とりあえず、YCbCrメモリ+コントローラのコーディングが終わりました。 これ単体で検証をしても良いのですが、AMBAのインターフェースも設計して3つのモジュールを接続して検証しようと思います。以前の図には抜けていましたが、AMBAのインターフェース部分…

YCbCrメモリ+コントローラ アドレス生成 1

YCbCrメモリ+コントローラ部分の後段側アドレス生成部は、メモリアクセスによって、4:1:1または、4:2:2フォーマットのアップサンプリングを実現するため、少し複雑になります。 (4:4:4は、検証する motionJPEGファイルサンプルが手元にないことと、あまり使…

YCbCr-RGB変換モジュール アドレス生成 修正

IncaddY, IncaddMCUXは、APBレジスタではなく、固定値でした。YCbCr-RGB変換モジュール部分アドレス生成修正完了。 テストベンチによる検証も終了。次に、YCbCrメモリ+コントローラ部の設計に入ります。

YCbCr-RGB変換モジュール アドレス生成

具体的なアドレス生成部の詳細は以下のようにしました。 X方向に16pixel分出力した次のフレームバッファアドレスを算出するために加算する値をIncaddYとしてAPBレジスタに保存します。 次に1MCU分を出力した時に加算する値をIncaddMCUXというAPBレジスタに保…

フロー制御

YCbCr-RGB変換回路を修正するためには、全体のフローをきっちり理解する必要があります。以下は、IJGのdjpegにおけるJPEG処理フローです。4:2:2の場合を説明しています。 ソフトウェア中では、MCU一列分のDCTが行われて、その後ピクセル画面一列分を順にYCbC…

IDCTデータパス RTL

IDCTのデータパス部分のコーディングを行いました。 一部修正しています。 一段目: 二段目: データパスですが、コントロールFSMが必要となります。図中のcounterの部分が外部からのstart信号により動き始め、その値によって、各セレクタ等が動作を決めていき…

全体制御フロー案

IDCT二つとYCbCr-RGB変換モジュール等を前後の整合性を合わせて自律的に動作させねばなりません。その方法の最初の案が以下のようなものです。 ダブルバッファそれぞれのメモリのどちらを指しているかのスイッチと、それぞれのメモリの現在の状態をステート…

雑記

非常にラフにDCTのデータパスを一つコーディングして LUT使用率5% クリティカルパス約21nsecこれまでのトップレベルの設計結果が、Slice使用率88%, LUT使用率77% クリティカルパス約20nsec非常に微妙なのですが、まだ削れるモジュールもあるということで、そ…

IDCTハードウェア概要3

ハードウェア全体構成とIDCTアルゴリズムが確認できたので、以前と同じようにデータパスのビット幅を決定するのですが、ここでは、DesignWave誌 2008年1月号の記事で説明されている通りにビット幅を決定します。 ただし、2箇所だけ説明が納得できない部分が…

雑記

とうとう、GoogleがOSを開発してフリーで提供することを発表しました。 Chrome OSです。 軽量でセキュリティに強く、数秒でbrowserが立ち上がる。殆どの作業は、WEB上で行う。。。 これは、ほとんど、CrunchPadのコンセプトと重なるのでは!!! 結局皆求め…

IDCTハードウェア概要2

ここまでのIDCTブロックのハードウェアアルゴリズムを確認するために、jidctint.cをハードウェアと同じアルゴリズムに変更します。 とりあえず、データパスのビット数は考慮せずに、アルゴリズムの確認を行います。最終出力以外は、double型にします。最終出…

IDCTハードウェア概要

JPEG処理に用いられる二次元DCTは一次元DCT二回の演算に分割することができます。 その他にも演算負荷を軽くするためのアルゴリズムが大量に提案されてきています。IJGのデコードソフトウェアdjpegは、実行時オプションでどのようなDCT演算を使うかを指定す…

octave

JPEG処理の流れが理解できたところで、以前と同じようにホストPC側でプログラムを変更してアルゴリズム確認を行います。 ここで結構苦しみました。 IJGのコードの書き方が2次元行列を一次元配列で記述してポインタをずらしながら、さらに配列アクセスするよ…

IJGソフト内部でのJPEG処理の流れ 

IJGのソフトウェアのハフマンデコード以降の処理の流れが理解できました。 このソフトウェアでは、画像データの種類や、オプション指定によって、各処理関数が変更されるようになっています。以降の説明は、現在用いているmotion JPEGのデータをオプション無…

雑記

IJGのソースコードを読むのはかなり難解です。。。。。。 特にハフマンデコード部分とファイルパーサー部分。 DCTはまだなんとかなりそうなのですが、量子化テーブル設定等でどうしてもファイルパーサー部分も読まないといけなくなってかなり難儀しています…

雑記

要素技術習得フェーズが終了したため、JPEG処理全体の性能UPを行っていくわけですが、結局のところ、JPEG処理をきちんと分かっていないとできません。これまでで大分詳しくはなっていたのですが、もっときっちり抑えておく必要が出てきたため本を一冊購入し…

motion JPEG再生 3

作成した、ioctlを用いて16個データを unsigned int 型で送り込んで再生しました。 結果は、2.78fps です。 IOCTL_WRITE, IOCTL_PUSH どちらを用いても変わりませんでした。readyのチェック自体は重くないことが分かります。IOCTL_PUSHでは、カーネルに制御…

IOCTL

write,read ハンドラが動作しましたので、次は、ioctl です。 write, read は、どのように動作するのかが一意に決められていましたが、ioctlでは、どのようにデータを受け渡してどのように動作するかをユーザーが自由に決めることができます。とりあえず、YC…