2011年5月5日木曜日

SDメモリカードプレイヤー機能の実装10(CPUクロック20MHz=>50MHz)

16bit/44.1kHzのファイルならSDカードからのデータリード処理だけハード化でも十分処理できると踏んでいましたが、実際は全くもって処理が間に合っていないことが判明。


まず、達成必要な処理時間について整理しておきたいと思います。下表が、再生ファイルのsamplingフォーマット毎に達成必要なSDカードリードアクセス1回(512byte)あたりの達成必要な実行時間になります。要は、512byteのデータを再生する時間になります。
32bit/384kHzのファイルを再生するには、16bit/44.1kHzのファイル再生の17.4倍の処理速度が必要になります。


SDカード読出し処理1回(512byte)の達成必要な実行時間


デバッグ開始時点では、クラスタの切替がない場合で約38ms、クラスタ切替時には1200ms、クラスタ切替は64回周期に発生しますので、平均55msの処理時間がかかっています。

 とりあえず、CPUクロックを元々設定してあった50MHzに戻してみました。CPUクロックを20MHzに下げたのは、省電力化と、SDカードクロックと揃えて同期化を省くことにあったのですが、この状況ではそんなことは言ってられません。
 クラスタの切替がない場合で約23ms、クラスタ切替時には740ms、平均34msの処理時間までは短縮することができました。
 CPU速度は2.5倍になっているのに短縮率は、1.6倍程度に留まっています。これはSDRAMアクセス速度が変わっていないことが主要因と考えられます。

 クラスタ切替がない場合に限ってみても16bit/44.1kHz再生に必要な処理時間の約8倍かかっています。先はものすごく遠い... 
 
 次は、SDカードへのコマンド送信、レスポンス受信処理をハード化してみます。

 *表を修正:stereoのため2倍のデータ量となるのが抜けていたため訂正 5/15

0 件のコメント:

コメントを投稿