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

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

 

カイロスです。

 

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

 

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

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

 →5サイクル

 

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

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

 

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

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

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

 

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

  • カイロスさんいま63Tのバスでギリギリなのですよねもし費用や時間が許して余裕を持って運用したい場合ですが
    >外部AD変換データを外部FRAMへ保存するのであればCPUBUSを使用するよりADコンバータと大容量FIFORAMを直接接続できないのですかそうすればCPUはその周りの制御に余裕が持てると思いますよ、CPUの外部バス同士の転送なのであまり魅力を感じません、インターネット検索ではADコンバータとメモリバスを接続してアドレスとR/WのタイミングをロジックICで簡単に配線していわばDMACを手作りしている人もいますよ私でしたらFPGAを使用します。
  • カイロスさん、こんにちは。NoMaYです。

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

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

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

  • IKUZOさん

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

    申し訳ありません。
    予想されている通り、時間と費用面から上記のような動作をしております。
    そういったやり方もあるのですね!
    勉強になりました。
  • NoMayさん

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

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

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

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

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

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

    その後、どうでしょうか?外部バスクロックを落としたりなどして、状況に変化はありましたでしょうか?

  • IKUZOさん
    ご返信ありがとうございます。

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

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

    外部バスのクロックを落としたところ、ふらつきが解消されました。
    しかし、DMACを動作させると、今度はクロックが遅すぎて、LEDなどの点灯がふらつくようになってしまいました(リカバリサイクルなどを6以上にしたところ同様の現象でした)。

    したがって、ハード的な問題が原因の一つだと考えられます。

    しかし現状、分周比が1/8→1/16に変更して上記となったため、ちょうど良いクロック数がなさそうです、、、
    ですので、現状はリカバリサイクルや、各種ウエイトを設けて、ふらつかないよう調整をして動作させています。

    設定値は以下です。
    リカバリサイクル = 5
    CSウエイトサイクル = 5
    リード時CS延長サイクル = 1
    ライト時CS延長サイクル = 1
    CS アサートウエイト = 2
    RDアサートウエイト = 3
    WRアサートウエイト = 3
    WDアサートウエイト = 3

    上記設定で、今のところ正常動作となっています。
    何かご指摘などありましたら、ご教授ください。
  • みなさん。

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

    上記原因が判明いたしましたので、ご報告します。

    値がふらつく原因は、CS+のデバックツール設定のメモリ・マッピングの外部領域のアクセス幅の設定が問題の一つだったようです。こちらが、16bitでアクセスしないといけないところを8bitアクセスとなっていたため、FRAMの値がふらついていたようでした。

    皆様、いろいろとご教授頂きありがとうございます。

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

    FRAM MB85R4M2Tのデータシート(画面コピー)を見ますと、バイトリードもバイトライトも可能なメモリですので、以下の原因は、ちょっと腑に落ちないような、という気もします、、、(もう、これ以上調査している時間も無いのでしょうけど、、、)

    > 値がふらつく原因は、CS+のデバックツール設定のメモリ・マッピングの外部領域のアクセス幅の設定が問題の一つだったようです。こちらが、16bitでアクセスしないといけないところを8bitアクセスとなっていたため、FRAMの値がふらついていたようでした。

    データシートの画面コピー
    www.fujitsu.com/jp/group/fsm/documents/products/fram/lineup/MB85R4M2T-DS501-00024-5v0-J.pdf