DMAによる外部バス占有対策

お世話になっております。

 

カイロスです。

 

DMAを使用時の外部バスの占有対策についてお聞きしたくご質問させていただきました。

 

DMAの外部バスの占有対策として以下を実施しました。

・リカバリサイクルのサイクル数を増やす。

 →5サイクル

 

・CSのウエイトと、CS、RD、WRのアサートウエイトのサイクル数を増やす。

 →CSウエイト:2サイクル。CS、RD、WRのアサートウエイト:1サイクル。

 

上記で、ある程度不安定な動作が収まったのですが、

他に対策できることとか、上記設定の際に気を付けることなどありましたら、お教えいただきたいです。

※DMA転送は、1µS間隔で計10000万回行います。

 

以上、よろしくお願い致します。

Parents
  • カイロスさん、こんにちは。NoMaYです。

    投稿されたタイトルだけ読むと、外部バスを使用するDMA転送が頻繁すぎて、それ以外の通常アクセスに支障を来たしている(例えば外部バスからのプログラムフェッチや外部バスに対する通常のデータリードライトの為の帯域が減ってしまって処理が遅くなってしまった)、といった話かと思ったのですが、対策された内容を読むと、DMA転送のトータルのサイクル数を増やすことになることをされていて、これですと状況はむしろ悪化する筈だと思うのです。(というか、DMA転送に限らず外部バスアクセス全般でトータルのサイクル数を増やして速度を低下させてしまうことになる、というところですね。)

    ですので、確認なのですが、そもそもどういった不安定な動作だったのですか?そして、それが「DMAによる外部バス占有」によるものだと推測された根拠はどういったものだったのですか?

    ひょっとして、外部バス動作速度が速すぎて、回路屋さん/基板屋さんが設計されたボードではタイミング不足や信号の暴れなどにより、外部メモリに書けない/読めないといった話だったりしませんか?

Reply
  • カイロスさん、こんにちは。NoMaYです。

    投稿されたタイトルだけ読むと、外部バスを使用するDMA転送が頻繁すぎて、それ以外の通常アクセスに支障を来たしている(例えば外部バスからのプログラムフェッチや外部バスに対する通常のデータリードライトの為の帯域が減ってしまって処理が遅くなってしまった)、といった話かと思ったのですが、対策された内容を読むと、DMA転送のトータルのサイクル数を増やすことになることをされていて、これですと状況はむしろ悪化する筈だと思うのです。(というか、DMA転送に限らず外部バスアクセス全般でトータルのサイクル数を増やして速度を低下させてしまうことになる、というところですね。)

    ですので、確認なのですが、そもそもどういった不安定な動作だったのですか?そして、それが「DMAによる外部バス占有」によるものだと推測された根拠はどういったものだったのですか?

    ひょっとして、外部バス動作速度が速すぎて、回路屋さん/基板屋さんが設計されたボードではタイミング不足や信号の暴れなどにより、外部メモリに書けない/読めないといった話だったりしませんか?

Children
  • NoMayさん

    ご返答ありがとうございます。

    起きている症状としては、FRAMに書き込まれている値が、ふらつく、という現象が起きています(表現が正しいのかわからないですが、デバッグで確認をしていると、値が違う値に変わったりしていました)。

    DMACが原因と考え、アクセスにディレイを持たせようと思い、上記のような対策を取りました(ふらつく現象がだいぶと抑えられた感じです)。

    しかし、DMACを使用しない状態でも、値がふらつく現象が起きていまして、もしかして、NoMayさんのおっしゃる通り、ハード側の要因もあるのかなと考えているところです。

    いま使用をしている、FRAMはMB85R4M2Tを使用していまして、外部バスクロックは24Mで使用をしています。

    外部バスクロックを落としたりして、また確認をしてみます。
  • カイロスさん値がふらつく現象なんですか、そういう症状はA/Dコンバータ自身の問題かもしれませんよ、DMACが原因でふらつく現象を確かめたいのでしたら転送元のアドレスをROMのアドレスにして固定アドレスを指定して確認してみたらどうですか。
  • IKUZOさん
    ご返信ありがとうございます。

    返事が遅れまして申し訳ありません。

    DMACを停止状態でも、FRAMの保存値がふらつきました(他の処理で読み書きを行っています)。
    外部バス自体に問題がありそうです。
    A/Dコンバータ自体も確認をしようと思います。