2009/02/10(火)[NiosII][ACM] 動画再生装置(お試し版)
はじめに
NEEKを使用したACM code*1データの再生装置を試作してみた.ALTERA FPGA/cyclone IIIを用いて,NiosIIコア,SOPC Builder・QuartusIIなどの使用に慣れることを目的とした事例である.
実機動作動画
ニコニコのほうにうpしておいたので,会員の方は参照されたい.
構成
cycloneIII内部のブロック図を以下に記す.(UWXGAであればpixel/dotで表示できるだろう)
また,システム構成として,NEEKのブロック図を引用させていただく.
本試作においても,全てのリソースを使用しつくしていない.半田付けもせずに.それなりに遊べる評価ボードであると考える.
緒言
ITEM | Description | part name |
---|---|---|
FPGA | Altera Cyclone III | EP3C25F324 |
Parallel Flash Memory | 8M x16 low voltage parallel flash | PC28F128P30B85 |
DDR SDRAM | 4M x16 x 4 DDR SDRAM | A2S56D40CTP-G5PP |
Syncronus SRAM | 256K x 32 synchronous SRAM | IS61LPS25636A-200TQL1 |
ブロック説明
前述したブロック図を,SOPC Builderで配置・接続した例を以下に示す.
基本的には,NEEKサンプルの"picture_viewer"をベースとして捕らえ,QuartusIIでフルスクラッチでプロジェクトを作成した.\チュートリアルでは,既存プロジェクトを改変して云々とあるが,新規に自主開発を行ううえで必要となる知識を得ることができないと判断した.\そもそもQuartusIIのver.upに伴う差分に対応できるかも不安であり,また,SDカードI/F等,サードパーティ製のIPを用いている点が引っかかった.\ためしに無償評価ライセンスを取り寄せてみたりもしたが,期限が一月ということもあり,個人でまったりと遊ぶには心もとない.\[em:無ければ作る]の精神で,増築していく方針で進めた.
NiosIIコアの構成
ゲート規模から考えると,余力が十分にあるため,Nios II/fコアの採用とした./eについては,1命令の実行に複数サイクルを要することから,今回のようにCPU演算量が多くなりそうな用途の場合,不向きである.SOPC Builderで,Nios II Processorの編集ダイアログを見ておきましょう.
記憶領域
コアのインストラクション・データは,それぞれがAvalon-MM Masterとなっています.PCからのダウンロードで,全てのメモリへのデータ供給後にCPU startとなるようです.\それ以外はconfig ROMから吸い上げorスタートアップルーチンがFLASHから吸い上げて転送してくれるのかどうか(未確認).
基本的にSRAMにマッピングしておるので,DDRSDRAM側へのアクセスは少ないはずです.ただし,heap領域およびVRAM(裏面含む)を配置してあるので,データ転送量は相当*2なものとなります.CPUコアによる展開処理での転送と,LCD表示のためのSGDMAによる読み出しの転送とが発生しますので,さらに負荷があがります.LCDは,800x480x60FPSなので,92,160,000 Bytes/Secとなります.
このLCD用のSG-DMAは,DDRSDRAMコントローラとは64bitバスで接続されているので,帯域としては66.5x8=532 Mbytes/sec を有するので,占有は2割ほどです.ただし,コントローラのオーバヘッドや,CPUからのアクセス・SGDMA自身のデスクリプタテーブル読み出しによるアクセスが衝突することで,転送レートに大きな影響を与えます.*3
LCDC
前述のとおり,VRAMとしてDDRSDRAMを用いております.CPUとシェアしており,裏RAMからの転送処理が不要な反面,アクセス衝突によるパフォーマンス劣化が生じえます.
LCDとは,MAX IIを介して接続されており,レベル変換・demax処理をさせています.FPGAからは,RGB各8bitのデータを時分割で送信する形態をとっています.
現状は,picture viewerに習って,altera-video-sync-generatorを用いています.これはAavlon-STを受け取って,LCDに必要な同期信号・フロントポーチ・バックポーチ信号(クロック)を生成します.データはAvalon-ST Packetのback pressure機能を用いて,データ本体の未送出時には取り出さないようにさせています.
SG-DMAと,video sync generatorとは動作クロックも異なり,データ幅も異なります.途中でDFAやFIFOを噛ませて所望の形に直していきます.
表示装置や,Dot Per Pixelに手を加えるには,このあたりのモジュールや接続部分を変更していくと便利かもしれません.
MMC SPI
長船さんが公開されているVHDLのIPをVerilogに移植してみました.無償版のModelSimでのHDL混在シミュレーションができないため,やむを得ず移植しました.本来なら流用してウマーという流れなのでしょうが,無念ですw
その他
ALTERAの基本IPをぺたぺたと貼り付けただけなので,説明は不要でしょう.適宜邦訳版コンテンツやメモ,ALTERAから出ている資料に目を通してください;)
ドライバレベルソフト
ALTERA IPについては,基本的にドライバ(Hardware Adaption Layer)が用意されています.newlibの標準入出力関数に適応したドライバも用意されており,シリアル入出力ポートを用意しておけばデバッグ時に便利でしょう.\無論,JTAG debug機能が有効であれば Eclipse上(NiosII IDE上)からGDB経由でらくらくデバッグが可能でしょうが.
LCDC
NEEKサンプルのソフトを流用します.
C:\altera\72\kits\cycloneIII_3c25_niosII_eval\examples\picture_viewer\software_examples\app\picture_viewer\alt_video_display
SGDMAドライバも内部で使用しています.個人的にVsyncカウントもほしかったので,このソフトにも手を入れています.
SGDMAをPackモードで使用せず,デスクリプタチェインの終了を要因とした割り込みを用いてソフトで再キックしています.プロジェクトが落ち着いてから公開しましょう.恥ずかしいコメントだらけなので(ぇ-
MMC
当該IP制御に関するコードは長船さんのコードをパク…参考に,もってきました.FAT File Systemについては,おなじみのFatFsを使わせていただきます*4.
個人でいじっている分には自己責任でアレですが,製品や人に配布するものとして適用してしまうとゲイツ陣営と争う必要が出てくるかもしれません.
また,SDカードの使用については,MMCへのアクセスを行っているだけである,という主張でSDカード非対応を宣言すればライセンシ不要という見方もあるようですが,軽くWEBサイトを見てまわった感じだと,わかりかねます.
データライン4本で転送してみたいものですがね….SPI 25MHz*5だとちょっときつい.
DAI
今回のACM v0.1対応版お試し公開では未使用.MMC I/Fのテストとして,waveファイルオープン・DAI経由でDACへデータを流して再生までは確認済.DAIモジュールにもFIFOを用意してあり,FIFO残量が減ってきたときに割り込みをかけて,FIFOへのデータ転送を行う.将来的にはAvalon-ST sinkポートを設けて,DMA経由で流し込めればCPUの処理を削減することができよう.
現状,ソフトでメモリ上にFIFOを構築して,割込みハンドラでデータを吐き出させている.メイン処理ではメモリ上のFIFO残量をポーリングして,ファイルからデータを吸い出している.
ACM decoder
ALTERAで行こう!の暫定公開 → 軽量動画フォーマットの研究を参照ください.\更新されて名前が変わったりしているかもしれませんが,適宜対応ください(^^;
アプリケーションレベルソフト
Test Programとしてのみ実装.RTOSは未使用であり,単純にSDからデータを吸い出してデコード・表示しているだけです.
frame rateにあわせて時間間隔を所望の時間に近い値でウェイトを入れている.frame rateに対応する待ち時間はシステムクロックの整数倍にはならないので,誤差を吸収する措置を入れてある.(誤差を積算してウェイト値に加算するだけですが)
[コラム] SDカード
つい本日(2009年2月10日)のことです.
トラ技2009年3月号 BASICS [連載] Cによるマイコン操作術〈第12回〉SPIを利用してSDメモリーカードにアクセスしてみよう
ちょうど,この記事を目にできた.立ち読み程度で申し訳ないが,FATFSのライセンス・SDカード使用のライセンスについて,伝聞調で記されていた.参照資料も特別明記無く,商用利用時は調査すべきだ,程度で終わっている.
軽くググってみたものの,SDライセンス・FATライセンスに関する詳細がみあたらない.MSのパテントとして2007年末に米国で認められているようだが,パテント期限が17年(スラドJP過去ログ)とかなんとか….FAT12/FAT16/FAT32/VFATそれぞれで期限が異なるのかしら?
相変わらず疑問だけが残るけれども,ここでも解決せずに筆をおくことになる…(ゴメンナサイ)
- 切れるとしていつごろ切れるのか.
- 切れないとして無断使用はNGということで認識は正しいか.
- linuxのfile systemとしてサポートが残っているが,ライセンス問題はどうなっているのか.
容易に組込み機器とPCとの間でデータをシェアしようと考えると,SD+FATFSが現状の最適解だと思う.active syncプロトコル自体もライセンスが要るようだし
最悪,セガサターンのRAMカセット並みのフォーマットで作ってもいいわけだが….MSDOSのメモリチェーン並みのしょぼさだけど(笑)