2022.1.11
前へ
次へ
ホームページトップへ戻る

[新連載]CPLD入門!
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使うことになるだろうと思ってはいたのですが。
何を今頃になって、というようなものですが。
ようやく本気で、CPLDと四つに取り組みます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



[第120回]


●CPLDロジアナ(10)25MHzでテスト(2)

前回からの続きです。

比較のためにまずはサンプリングクロック20MHzでのCPLDからの出力波形をカメレオンロジアナで観測しました。

PROBE00はCPLDから出力されるメモリアドレスA0です。
サンプリングロックが20MHzですから50nsごとにH、Lを繰り返しています。
PROBE01はCPLDによってラッチされたCPLDロジアナのPROBE0のデータです(ちょっとややこしいですね)。
CPLDロジアナのPROBE0にはクロック発生回路基板の4MHz出力が入力されます。
L、Hがそれぞれ125nsの波形ですが、それを50nsごとにラッチしたものがRAMのデータのビット0になります。
もとの入力の125nsを50nsごとにラッチしますからCPLDから出力される波形はL、Hのどちらかが100nsで他方が150nsになります。
PROBE02は間を1つ空けてビット2のデータになっています。
CPLDロジアナのPROBE2の入力です。
CPLDロジアナのPROBE2にはクロック発生回路基板の1MHz出力が入力されます。
L、Hがそれぞれ500nsの波形です。
上の図ではちょうどH区間の500nsが見えています。
PROBE03はMEMWRです。
VHDLでプログラムした通りLが40ns、Hが10ns、周期が50nsの波形になっています。

そして下は今回のそもそもの目的のサンプリングクロック25MHzでのCPLDからの出力波形をカメレオンロジアナで観測した波形です。

PEOBE00〜PROBE03はクロック20MHzのときと同じです。
PROBE00はメモリアドレスA0です。
サンプリングロックが25MHzですから40nsごとにH、Lを繰り返しています。
PROBE01はCPLDロジアナのPROBE0のデータ(4MHz)です。
L、Hがそれぞれ125nsの波形ですが、それを40nsごとにラッチしたものがRAMのデータのビット0になります。
もとの入力の125nsを40nsごとにラッチしますからCPLDから出力される波形はL、Hのどちらも120nsになります。
計算が合いませんからどこかでどちらかが130nsになるはずです。
あれ。
そうするとその部分も確認しなければならないか。
ま。
そのはずなのでそれについてはパスしてしまってもよいのですけれど…。

やっぱり確認しておきましょうか。
結局そこのところを確認するためにもう一度やり直しました。
やり直しついでにカメレオンロジアナに入力する信号も増やしました。

PROBE00はCPLDから出力されるメモリアドレスA0で、40nsごとにH、Lを繰り返します。
ここは上と同じです。
PROBE01はCPLDロジアナのPROBE0でラッチされたデータ(4MHz)です。
H、Lが125nsの入力データを40nsごとにラッチしたデータです。
この波形を追跡することになります。
PROBE02はビット2のデータでしたがちょっと混乱しそうなのでここはCPLDロジアナのPROBE1でラッチされたデータ(2MHz)にしました。
H、Lが250nsのデータです。
これも40nsでは割り切れませんね。
PROBE03はMEMWRです。
VHDLでプログラムした通りLが30ns、Hが10ns、周期が40nsの波形になっています。
PROBE04とPROBE05を追加しました。
PROBE04はクロック発生回路基板の4MHz出力信号です。
CPLDロジアナのPROBE0でラッチされる前の信号です。
PROBE04を40nsのサンプリングクロックでラッチした信号がPROBE01です。
理屈としては最大で40nsの遅れが発生します。
PROBE05はクロック発生回路基板の2MHz出力信号です。
CPLDロジアナのPROBE1でラッチされる前の信号です。
PROBE05を40nsのサンプリングクロックでラッチした信号がPROBE02です。
こちらは最大で20nsの遅れが発生します。

さてそれで。
問題のPROBE01の波形(125nsを40nsでラッチした波形)です。
上で書きましたように125nsを40nsでラッチしていくと5nsのずれが蓄積していくことになります。
どこかの時点でHLの一方が160nsになるところが出てくるはずです。
波形を右にスライドさせていくとそれがみつかりました。

900nsから1000nsのあたりです。
PROBE01のHがPROBE00の2周期(40ns×4=160ns)になっています。
スタートからちょうど1000nsのところです。
1000nsは40nsの25個分です。
そして1000nsは125nsの8個分でもあります。
端数の5nsが8回蓄積すると40nsになりますからちょうど計算が合います。
ここまではCPLDロジアナでデータをRAMに書き込む前の波形の様子です。
それが正しくRAMに書き込まれるかどうかが肝心のところになります。
そこでいよいよRAMから読み出したデータの検証です。

CPLDロジアナのサンプリングクロック25MHzの波形です。

PROBE0がクロック発生回路基板から出力された4MHzの波形です。
カメレオンロジアナで観測した波形とは微妙に違っています。
カメレオンロジアナの波形はRAMに書き込む前のデータですがこちらはそれをWRITE信号で「ラッチ」した値です。
それが両者の違いになっていると考えられます。
確認してみると2000nsでちょうど8周期が収まっています(250×8=2000)から25MHzでも正しく機能していると考えられます。
PROBE1からPROBE4もきれいな波形で乱れはありません。
PROBE5からPROBE7は1周期の一部しか見えていませんが右にスライドしていけば1周期の全体を見ることができるはずです。

右にスライドさせました。

PROBE5のH区間が見えています。
4000nsです。
PROBE5は125KHzですから1周期は8000ns、その半波は4000nsです。
ちょうど計算通りです。

さらに右にスライドさせました。

PROBE5を見ると9000ns+のあたりで立ち上がっています。
さきほどは5000ns+のあたりで立ち下がっていますからL区間も4000nsで計算通りです。
PROBE6は13000ns+のあたりで立ち上がっています。
さきほどは5000ns+のあたりで立ち下がっていますからL区間は8000nsです。
PROBE6は62.5KHzですから1周期は16000ns、その半波は8000nsです。
これも計算通りです。

さらに右にスライドさせました。

PROBE6が21000ns+のあたりで立ち下がっています。
さきほどは13000ns+のあたりで立ち上がっていますからH区間も8000nsです。
ちょうど計算通りです。
PROBE7も21000ns+のあたりで立ち下がっています。
PROBE7は5000ns+のあたりで立ち上がっていますからH区間は16000nsです。
PROBE7は31.25KHzですから1周期は32000ns、その半波は16000nsです。
ちょうど計算通りです。

さらに右にスライドさせました。

PROBE7が37000ns+のあたりで立ち上がっています。
さきほどは21000ns+のあたりで立ち下がっていますからL区間も16000nsです。
こちらもちょうど計算通りです。

最後までスライドさせました。

データエンドは1309200nsです。
1309200/40=32730になります。
RAMには32768個のデータが書き込まれますがプログラムの都合で実際にそれを読み出して波形として表示するのは32735個です。
最初の画面で先頭の0nsの前に5バイト分の表示データがあるので(画面表示の都合で一部しか表示されていません)RAMに書き込みし、読み出したデータ数は25MHzの場合も設計した通りの値になっています。

おお。
すごいじゃありませんか。
なんと25MHzでも完璧に動作してしまいました!
ということなら20MHzは大丈夫ということになります。

これにて一件落着、というところなのですが。
実はまだ続きがあります。
それは次回にて。

CPLD入門![第120回]
2022.1.11upload

前へ
次へ
ホームページトップへ戻る