ネットワーク上のmotionJPEG再生

サーバー側の準備が整ったので、クライアント側を考えます。FPGA上のプログラム djpeg で、ソケットをきちんと作成すれば、後は普通にファイルを読むようにデータをネットワーク越しに読み込めるはず。以下のようなシステムが動くはずです。 djpegの中で、フ…

ffserver

とりあえず簡単な通信ができるようになりました。いろいろHPを眺めていると、どうやらデータを送信するときには全てを一度に送れなかったりすることがあるようです。そこら辺もプログラムしても良いのですが、今回はサーバー側のプログラムは自作せずにffser…

TCP/IP 通信

せっかくLinux上でシステムが動いていますのでネットワークで通信させたいと考えて、TCP/IPのソケット通信について勉強してみました。geekなページ ネットワークプログラミングの基礎知識二つのHPを参考に勉強しました。サーバのIPアドレスを指定してソケッ…

バグ

動画が再生できるようになったのですが、どうやらどこかにバグが潜んでいるようで、motionJPEGファイルによっては画像が乱れます。たまにおかしくなるようなバグが一番厄介なのですが、、、、、 いろいろ探って、画像が壊れる一枚のJPEGファイルを作り出すこ…

motion JPEG再生

デバイスドライバのデバッグに苦労してました。 原因は、ioctlでデータを渡す構造体のサイズが大きすぎて、そこでページフォルトが起きていました。 8bitキャッシュのデータを一度に渡そうとしていました。ページサイズ相当のデータをいきなり渡していたら、…

雑記

前回のバスの問題というのは間違いでした。 書き込みがうまく行かなかったものは、JPEGモジュールの入り口と最終段のFIFOの段数が少ない時です。 FIFOをFPGAのブロックRAMぎりぎりの512段に変更した後は、バスのウェイトは起きてない模様です。そうすると性…

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内部のリソースに詳しくないので、とりあえずリソースを…