[新連載]CPLD入門!
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使うことになるだろうと思ってはいたのですが。
何を今頃になって、というようなものですが。
ようやく本気で、CPLDと四つに取り組みます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第143回]
●CPLDロジアナ(32)先頭の測定データ
まず最初に過去記事の訂正についてのお知らせです。
今回の記事を書こうとして過去記事を確認していましたら図と説明文に間違いがあることに気が付きました。
[第118回]のMEMWRの説明のところです。
図とその下の説明のところで「MADRSはcntrL(2)の下がりエッジでカウントアップされます」と書いていましたが「下がりエッジ」ではなくて「上がりエッジ」の間違いでした。
現在は図も説明文も訂正済みです。
さて今回のテーマです。
[第126回]で波形表示の先頭のデータについて書いています。
この時点では0秒のラインの前(左)に4バイトのデータがあってそれについて説明をしています。
先頭の3バイトは「ファイル管理用のデータ」で4バイト目は「ゴミ」だと書きました。
その後に[第136回]では0秒のラインの左にあるのは3バイトのデータになっています。
そしてその3バイトの「ファイル管理データ」について説明をしていますが4バイト目は測定データの先頭0秒のデータとして扱っています。
この間はあれこれ迷っていたりしたのでそういう違いが出てしまいましたが現在は後者([第136回])に落ち着きました。
ゴミなのか最初の測定データなのかということについては実はどちらも間違っているわけではありません。
今回はそこのところの説明です。
下は測定を開始した最初のところのPROBE入力信号とそれをラッチしてメモリに書き込むMDATA信号とメモリアドレス(A0)とMEMWR信号の波形の説明図です。
この図は[第118回]のMEMWRの説明図にトリガON信号(trigon)とPROBE入力信号とそれをラッチした信号(MDATA)を加えたものです。
PROBE入力信号がトリガ条件に一致するとtrigonがHになってそこから測定が開始されます。
trigon信号はサンプリングクロックには同期していません。
この図はtrigon信号が都合のよい位置でアクティブになった場合の図です。
このとき最初の測定データは正しくメモリのアドレス0に記録されます。
しかしいつもそのように都合のよい位置でtrigon信号がアクティブになるとは限りません。
下はtrigon信号がcntrswkの立下りよりも後でアクティブになった場合の図です。
cntrsはtrigonがアクティブになったとき以後にアクティブになりますから図の場合cntrs信号のLの期間が短くなってしまいます。
cntrsは同時にメモリにデータを書き込むMEMWRでもありますからそのMEMWRの幅が短くなることを意味します。
その結果メモリにデータが正しく書き込まれない可能性が出てきます。
下はtrigonの立上り位置が上の図よりもさらに後方になった場合の図です。
MEMWRの幅が極端に短くなるためメモリに正しい値が書き込まれることは期待できなくなります。
この問題は最初の測定値をメモリのアドレス0に書き込むときだけに発生します。
このためメモリに書き込まれたデータを読み出して波形として表示するときに最初の測定値(0秒のところの値)は実際の値を正しく表示していない可能性があります。
これは上のほうに書きましたようにtrigonがサンプリングクロックに同期していないためです。
たとえばcntrswkの立上りエッジでtrigonの状態を確認してその結果によってcntrsをアクティブにするという工夫もできそうですがその分VHDLプログラムが複雑になってかえってそれが測定の精度に影響を及ぼす可能性が出てきます。
それにたとえそのように工夫したとしても最初にラッチされる測定データは最大で1サンプリングクロック分遅れてラッチされることになってしまうので結局正しい結果を記録したことにはなりません。
そのように考えてここは図のようなロジックのままのプログラムにしてあります。
結果として最初の測定データ(0秒のところの表示波形)は正しい測定結果を表示していない場合があります。
まあ余り信用できる値ではありませんから当初はそれをゴミと表現して説明をしました。
CPLD入門![第143回]
2022.3.17upload
前へ
次へ
ホームページトップへ戻る