FPGAの最近のブログ記事

お待たせしました。MFT2015で頒布したPICUAL(PERIDOT用LCDシールド)のデモデータを公開しました。

相変わらずの更新ペースですみません...。

先日MFT2015にサークルsilicombi名義で出展してきました。
そこで出してきたものの紹介や、頒布物を購入して頂いた人への情報ページリンクを提供します。

IMG_20150801_120055.jpg

SoCKitがやってきた

| コメント(0) | トラックバック(0)

Terasicに注文していたSoCKitが届きました。注文時はPre-Order 2014/03/07と表示されていましたが、

待たされるのを覚悟で注文してみたら、2週間で届いてしまいました^^;
PC050669.JPG
(http://sockit_support.terasic.com/)
送料(FedEx)含めて$330くらい。

載っているのは、AlteraのCycloneVにARM(Cortex-A9)を混載したSoCです。5CSXFC6D6のES版。
データシート等は誰でもダウンロードできます。→ http://www.altera.co.jp/literature/lit-cyclone-v.jsp

http://www.rocketboards.org/foswiki/Documentation/ArrowSoCKitEvaluationBoard
にブロック図がありますが、このボードはFPGA側、HPS(Hard Processor System; 要するにARM)側それぞれに
DDR3、スイッチ、LED等がついています。この規模の評価ボードとなると、DE0の頃のようなMILコネによる
GPIOはもはや付いていません。右端にあるHSMCになります。変換基板も一緒に買うべきか迷いましたが、
今回は保留しました。

rubic (mruby on NiosII)

| コメント(0) | トラックバック(0)

イベントの時だけ更新する、という放置っぷりから脱却を図るべく、現在挑戦中(そして次のイベントで出展予定)のネタについて書いておこうと思います。

組み込み向けRubyの「mruby」をAltera FPGAのソフトコアCPU「Nios II」で動かそう、というプロジェクトです。プロジェクト名を rubic と名付けてぼちぼち進めています。

Nios IIはソフトコアCPUだけあって、自分で命令セットを増やせるとか、Tight coupled memoryが使えるとか、普通のプロセッサには無い特徴があります。それを上手く使ったらmrubyを高速化させたりできないか?というのが、このプロジェクトを始めたきっかけですね。
詳しいことはコミケで頒布している薄い本(silicombi電子工作本 vol.3)に書いてます。

作業場所はこちらに。
https://github.com/kimushu/rubic

東雲LCDの件で半年ほどrubicから離れていたら本家mrubyの進化に追いつけなくなったので(^^;)、これまでの成果は放置してやり直しをするかもしれません。

これからしばらく、rubicやmrubyの話を書いていこうかと思います。では。

コミックマーケット80で暑い中ブースを見に来ていただいた方、どうもありがとうございました。
そして、本が売り切れだった方、行ってみたら撤収した後だった方、すみませんでした。
今度からのイベント参加では、十分な数を用意するようにします。

さて、頒布していた本の「FPGA向けMPEG2デコーダ」の記事について、現状のソースコードを公開します。

m2v_dec_impl_r250.zip

1つめはデコーダIP本体、2つめはデコーダIPのテストに用いるソフトウェアデコーダです。
いずれも最初にreadme.txtをお読みください。

現状、
・単体テストは入力データ終端の取り扱いが上手く行かないかもしれません(=テストの最後でデータの取りこぼし等発生するかもしれません)
・結合テストは3フレーム目以降は動かないかもしれません。
・実機ではまだ動きません(ダレカタスケテ...)。回路図等もまだ含まれていません。
と、ひどい有様です。ただ、完璧を目指していてはいつまで経っても公開できないので、
大きな修正がある毎にアップしていきたいと思います。要望が多ければ管理しているsubversionのリポジトリ自体を見てもらえるようにできるかも。

前回のmakeから取り組んでいるプロジェクトなので、やりきってしまいたいですね。もうちょっと頑張ろうと思います。

気がついたら3ヶ月ちかく更新さぼってました...。

いきなりですが、夏コミに出展しています!本日(土曜日)、東地区T-02b サークル「silicombi」です!

今回の記事は「FPGA向けMPEG2デコーダをほぼフルスクラッチで作ってみた」です。
動画再生挑戦結局結合デバッグが通り始めたところまで進捗しましたので、そこまでの内容を書いています。

なお、ソースコードを当ブログで配布しますが、会場からのネットワークでトラブっているため、後日アップロードします。
ソースコード目当てで来られた方、申し訳ないですが少々お待ちください。

今回はMPEG2デコードIPの全体構成についてです。

その前に、まず動画像の基本を軽く解説します。
動画像とは、パラパラ漫画のように複数の静止画を連続して表示することで実現されます。これについてはご存じの方が大半でしょう。この静止画のことをフレームと呼びます。

問題はフレームの情報をどうやって圧縮するかです。1枚1枚をJPEGなどで圧縮すれば良さそうに思えますが、それだけでは圧縮率を上げることが出来ません。
そこで、動画像の時間的連続性を利用します。

動画像では多くの場合、連続する2枚のフレームの間に共通要素があります。シーンチェンジの瞬間を除き、前後2枚が全く別の画像になることは稀で、
・カメラの動きによる背景の移動
・物が動くことによる、一部の画像の移動
・全く変化無し
など、少なからずとも共通点があります。そこで、1枚前のフレームからの差分を用いることで、データ量を減らす工夫をします。

mpeg2mb.png

また、MPEG2ではフレーム内を図のように空間的に分けて取り扱います。16x16ピクセルの領域をマクロブロック と呼び、1つのマクロブロック(MB)は6つの小ブロック からなります。(分かりやすくするために私は「小」ブロックと読んでますが、規格書ではただの "block" と表されています)
小ブロックは 8x8 のサイズで、輝度成分4つと色差成分2つの計6つです。

なお、MPEG-2規格そのものについては書き始めるときりがないので、当ブログではあまり詳しく解説しません。
その代わり、
・「MPEG Video 技術」 http://home.catv.ne.jp/dd/pub/book/mpeg.html
・規格仕様書「ISO/IEC13818-2 Information technology -- Generic coding
of moving pictures and associated audio
information: Video」
などが参考になります。規格書は本来無料で手に入るものではありませんが、ドラフト版ならばネットで探せば手に入ります。
(大学の理工系図書館や、けいはんなの国立図書館なら正式版を読めるかと思います)


ふぅ、導入だけで書き疲れてしまいましたが、ここから本題のIP構成です。

mpeg2blocks.png

青色の枠が自作するモジュールです。

vctrl ・・・ 入力したビットストリームを解析し、デコードの必要な情報の取り出しと、画素データをrun&lengthペアに分解するところまで行います。run&lengthペアとは、量子化されたデータから、非ゼロの値と、その間にあったゼロの個数とをペアで表したものです。8x8の小ブロック単位で取り扱うので、最大64項目あります。

vdequant ・・・ run&lengthペアと量子化係数を用いて逆量子化を行います。vdequantを出る時点で、各ブロックのデータは8x8の周波数領域画素データになっています。

vidct ・・・ 8x8のIDCT(逆離散コサイン変換)を行います。vidctの出力は、8x8の空間領域画素データになります。

vmc ・・・ 動き補償を行います。前述の通り、MPEG2では直前のフレームとの差分を用いるので、前フレームの参照MBを計算し、vidctからの画素データを足し合わせて、最終的な画像を作ります。作った画像はフレームバッファにいったん格納します。

vdispdrv ・・・ 1枚のフレームをすべて処理し終わったあと、フレームバッファから画像を読み取ってLCDに転送します。

ざっとこんな感じ。すでに全てのモジュールを書き終えていて、単体でのデバッグを進めている段階です。

さて、次回はもうちょっと詳しい内容に踏み込んで書こうと思います。今日はここまで。

復活後一発目の記事では、まず現在作業している内容について紹介しようかと思います。

過去にはMP3プレイヤー(を途中まで)とかアンプ(今は訳あって使ってないけど)とかを書いてましたが、今はちょっとお休みしています。

現在はというと、MPEG2デコーダIPの製作を進めています。
この手のものって市販のIPが存在するので新規性はないんですが、動画コーデックの勉強を兼ねているので良しとします。

その代わり、
  • XC3S250E (Xilinx Spantan3E) ×1の中に収める。すなわち、DWM2007年7月号の付録基板で使えるようにする。
  • フルスクラッチで作る (=OpenCores等からIPの一部をコピーしたりしない。全部自分で書く)
  • (後に述べる)制約条件さえ満たしていれば、MPEG2の規格通りのストリームを処理する。(=コーデック仕様を都合に合わせて勝手に改変しない)
を目標にしています。

まあ、規模の小さいFPGAなんで、解像度が高いのとかはもちろん無理で、以下のように条件を設定しています。
  • MPEG2 PS (ISO13818-2) に準拠
  • 解像度は最高 320x240 (QVGA) まで
  • フレームレートは30fps固定
  • プログレッシブ形式限定
  • フレームタイプは I と P のみ許可
などです。
実は、これをmakeで出したくて前回のMTM06に参加してました。もちろん完成してませんでしたが^^;
会場で見に来てくれた方に次回こそは完成品持ってきます!なんて言っちゃったので頑張って作らないとw

というわけで、これから何回かに分けて製作の様子を公開していこうと思います。
実機で走るレベルまで達成したら、ソースは公開するつもりです。お楽しみに。(MPEG2はライセンス問題とかグレーなところがありますが、趣味でだれでも使えるようオープンにして、いろんな人に使ってもらってこそ取り組んだ甲斐があるので...)

今回は取り組みの紹介まででしたー。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちFPGAカテゴリに属しているものが含まれています。

次のカテゴリはMP3です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 6.1.2