質問: 転送レート:0.0512 どこかで計算を間違えてる気がするのです、、すみません、、H/Wについて知識が浅いもので、ご教示頂けると幸いです。 > > (だからデータシートにも載っていないし載せることが不可能) > > > こちらについては、わからないと DMA を使う意味がわからないと思いました。 その為、厳密な値でなくても、参考値みたいなものまではたどり着ける必要があるかなと思いました。 こういった場合によく使う求め方があったりしないかなぁと思い、質問した次第です。 --- 追記 > > それはその通りなんですが、データシートを深く理解する時間が取れない場合も多々あります。 > > 最近はマイコンラインアップも充実してますし、最初の設計段階では深く考えずに > > 「このマイコンのこのクロックで処理速度を実測して間に合わないなら、 > > 上位マイコンにしてクロック上げちゃえ」 > > などという恥ずべき設計者もかなり居る様子っす。 > > > なんと、そうなんですね。。非常に残念な実態です。。 自身が実装しようとしている物の上位にあたるシステムを理解せずに開発を進めるということですよね。。 WEBアプリなどでも言えることですが、フレームワークのふるまいを理解せずに開発するのって、バグの温床だと思っています。。 また、リソースを増やすことで問題解決って、、なんか残念ですね。。まあ、よくある話なのはわかっています。。笑 > > 実際それで行けちゃう(コスト的に)場合も多いので、それなら開発期間短縮のほうが優先、 > > なんてのが多いようですね。 > > > ちょっと、ショックですがコストなど含めて問題ないのであれば、そうなってしまうのかもしれないですね。。 > > あるいは通常の割り込み処理でソフトウエア処理しても間に合うマイコンを採用するとか。 > > ソフトウエア処理では間に合わなくて DMA だと間に合う、ようなぎりぎりの設計することは > > オイラの周りでは稀っす。 > > > そうなのですね。 今回は、「ある時間」内に、ADCからの音声データをソフトコーデックしながら...というシステムなのですが、ADCからのデータをマイコンに割り込みで渡していてはソフトコーデックに支障が出て、間に合わないのでは?という推測により、DMAの利用を検討していました。 私の個人的意見になってしまうのですが、今回の様な要件については「DMA だと間に合う」っていうのはH/Wを有効に使えているのでシステムとして良いかなと思いました。 > > そこまでぎりぎりだと機能追加していくと破綻すること必至だし。 > > > "ソフト"の機能追加という意味ならば、DMAで処理を分散したほうが、マイコンの余裕もできて、むしろ拡張性もあるかなと感じました。 > > DMA TransferSize / (1/Clock) / (1+1) > > > すみません、ちょっと分からないのですが、周波数は1秒間のサイクル数ですよね? そうなると、「DMA TransferSize * Clock」ではダメでしょうか? 要するに、例だと「32bit * 48MHz」かなと思いました。 それから、1clockで1bitだけのRead/Writeって考えにくくないでしょうか? だいたい、1clockでワード単位ではないですか?なので「/ (1+1)」について疑問に思ってしまいました。あえて、計算に加えなくても良いかなとも思えました。 (検討違いなこと言っていたら、すみません。。)
回答: コメントでは引用しづらいので別回答の形式で > > そうなると、「DMA TransferSize * Clock」ではダメでしょうか? > > > はい、問題ないです。個人的に、オイラがこの手の計算するときの考え方として、 求めたい解が bit / sec であれば「 ビット数 割る 時間 」になるよう式を考えるので ああいう書き方をしました。 ただし、この式はバスアクセスに何クロックかかるかを計算していませんので未完成です。 > > それから、1clockで1bitだけのRead/Writeって考えにくくないでしょうか? > > だいたい、1clockでワード単位ではないですか? > > > CPU core にせよ DMAC にせよ、考え方は - 1回のバスアクセス何ビットが転送できるか - 1回のバスアクセスで何クロックがかかるか (速度の考察ならここまで。必要時間の計算なら下記も) - バスアクセス何回が必要か です。 1回のバスアクセスで1ビット転送というのは指摘のとおりまずありえません。 では何ビットの転送ができるか、というと周辺装置のアクセスにはハードウエアによる制約が 課せれていることが多く、それで決まってしまいます。 32bit なマイコンでも、特定ポートは 8bit アクセスのみ許可なんてのはよくあります。 その場合先の DMA TransferSize=8 になってしまいます。 もちろん 32bit アクセス可能なポートなら 32bit DMA できて DMA TransferSize=32 っす。 > > なので「/ (1+1)」について疑問に思ってしまいました。 > > > この除算は1回のバスアクセスに何クロックかかるか、の考慮分ですので必要です。 Read と Write が同時にできないなら Read に1クロック Write に1クロック必要なので 「1回の転送」には2クロックが必要です。 RAM/ROM は 0wait (1clock) でアクセスできるとしても、 周辺回路のアクセスには複数クロックが必要なことが多いです。 実際に何クロックかかるかはデータシートを見る必要があります。 で、最終的にどのくらいの性能が出るかの例は前のコメントで計算したような感じになりますね。