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

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



[第123回]


●CPLDロジアナ(13)100MHzでテスト

前回は駄目元のつもりでやってみた50MHzでのテストが信じられないことになんとほとんどエラーもなく実行できてしまいました。
まさに驚異的な結果です。
もとは20MHzの信頼性を確保するためにそれよりも高い周波数でテストしてみようということで始まった今回の一連のテストでしたが意外な結果となりました。
一体どうなっているんでしょうかねえ。
ま、しかし、これは喜ばしいことです。
ここまでうまくいったのなら。
当初の20MHzに加えてその上に50MHzクロックを追加してもよいのでは。
もちろん動作保証はありません。
RAMのアクセスタイムをはるかに越える高速でのアクセスですから、エラーが発生しても仕方がありません。
うまく動作したら儲けものというぐらいの軽い気持ちでならよいでしょう。

ところでカメレオンロジアナの最高周波数は100MHzです。
それはそこに使われているCPLDのクロックも高速でRAMのアクセスタイムも超高速だからこそできることです。
しかし。
わがCPLDロジアナもRAMのアクセスタイムをはるかに越えるまさかの50MHzで動作したではありませんか。
ここまできたら。
それこそ駄目元で100MHzに挑戦しないわけにはいきませんでしょう。
あ。
でも残念ながら50MHzはこのシステムとしては上限なので、100MHzのパルスは作れません…。
残念です…。

う。
待てよ。
確かに50MHzではMEMWRパルスをclkwk2(100MHz)を2分周して作り出しています。
clkwk2はそもそもCPLDに供給しているクロックをそのまま使っています。
それならば。
今までのようにclkwk2を何分周かしてそれをMEMWRにするのではなくて、clkwk2をそのままMEMWRにしたら100MHzになるじゃありませんか。

今回思いついた100MHzの場合は下の波形図のようになります。

ああ、しかし。
100MHzの1周期はなんとたったの10nsです。
それをそのままMEMWR信号として使います。
ということは。
そのパルス幅はL期間がたったの5nsでH期間も同じく5nsです(!)。
MEMWRのサイクルタイムは10nsということになります。
いやいやいや。
さすがに今度こそは絶対に無理でしょう。
AS6C62256のカタログ値は前回も書きましたようにWRITEパルスのL期間の最小値が45ns、サイクルタイムは55nsです([第118回])。
今回の100MHzではサイクルタイムはカタログ値の18%、WRITEパルス幅にいたってはなんとたったの11%です。
今度こそ本当に試してみるまでもないと思いました。
でもどうなるのか、ちょいと興味もありました。

下はMEMWR信号部分のVHDLプログラムです。

--MEMWR
--
        MWR<=cntrs or r_w or cntrH(15); 
--

下はcntrsについて記述しているプログラム部分です。

        cntrs<=clkwk2 when r_w='0' and trigon='1' else not IORD;

cntrs<=clkwk2としておいてMWR<=cntrsなどとしないでいきなりMWR<=clkwk2とすればよいのですけれど、とりあえずのテストですからもとのプログラムを必要最低限直すだけにしたため上のリストのように冗長なプログラムになっています。

さて。
結果はどうなったでしょうか。
下はサンプリングクロック100MHzでのCPLDからの出力波形をカメレオンロジアナで観測した波形です。

PROBE00はCPLDから出力されるメモリアドレスA0です。
サンプリングロックが100MHzですから10nsごとにH、Lを繰り返します。
おお。
まともに動いている?
PROBE01はCPLDロジアナのPROBE0でラッチされたデータ(4MHz)です。
H、Lが125nsの入力データを10nsごとにラッチしたデータです。
12回ラッチするごとに5nsのずれが出ます。
計算上はH、Lのどちらかが120nsでどちらかが130nsになるはずですが、問題はさらにその信号をラッチしているカメレオンロジアナのクロックも100MHzだという点です。
そのためもあってか上の画像では110ns〜130nsの波形として表示されています。
PROBE02はCPLDロジアナのPROBE1でラッチされたデータ(2MHz)です。
H、Lが250nsのデータです。
こちらはL、Hともにちょうど250nsになっています。
そしてPROBE03が注目のMEMWRです。
Lが5ns、Hが5ns、周期は10nsなのですが。
これはさすがのカメレオンロジアナでも無理です。
Lが10nsかHが10nsかの波形になっています。
ときどきそれも飛んでしまい20ns幅になっているところもあります。
PROBE04はクロック発生回路基板の4MHz出力信号です。
CPLDロジアナのPROBE0でラッチされる前の信号です。
PROBE04を10nsのサンプリングクロックでラッチした信号がPROBE01です。
理屈としては最大で10nsの遅れが発生するはずですが、上に書きましたようにカメレオンロジアナのクロックも関係しているはずで20nsの遅れとして見えているところもあります。
PROBE05はクロック発生回路基板の2MHz出力信号です。
CPLDロジアナのPROBE1でラッチされる前の信号です。
PROBE05を10nsのサンプリングクロックでラッチした信号がPROBE02です。
こちらも20nsの遅れがあるように見えています。

そしていよいよです。
CPLDロジアナのサンプリングクロック100MHzの波形です。

PROBE0がクロック発生回路基板から出力された4MHzの波形です。
H、Lの125nsを10nsでラッチしていますから波形に短いところ(120ns)と長いところ(130ns)が出来ています。
上の画像ではたまたまH=120ns、L=130nsになっているようです。
おお。
なんと100MHzクロックでもジャスト計算通りじゃありませんか!
PROBE1は2MHzですから周期は500nsです。
半波は250nsですがちょうどその通りの波形になっています。
すごい!
PROBE2は1MHzですから周期は1000ns、半波は500nsです。
PROBE2もH=500ns、L=500nsでぴったりです!

PROBE3からPROBE7は1周期の一部しか見えていませんが右にスライドしていけば1周期の全体を見ることができるはずです。
PROBE3は460nsで立ち下がっています。
逆にPROBE4はそこで立ち上がっています。

右にスライドしました。

PROBE3のL区間が見えています。
1450nsで立ち上がっています。
PROBE3は500KHzです。
周期は2000nsですから半波は1000nsです。
L区間は1450−460=990nsです。
10nsは誤差の範囲ですから計算通りです。

右にスライドしました。

PROBE3のH区間が見えています。
2460nsで立ち下がっています。
2460−1450=1010nsですからH区間も計算通りです。
PROBE4も2460nsで立ち下がっています。
立ち上がりは460nsでした。
PROBE4のH区間は2000nsです。
PROBE4は250KHzです。
周期は4000ns、半波は2000nsですから計算通りです。
PROBE5も2460nsで立ち上がっています。

右にスライドしました。

PROBE4が4460nsで立ち上がっています。
立ち下がりは2460nsでしたからPROBE4のL区間も2000nsで計算通りです。

右にスライドしました。

PROBE5が6460nsで立ち下がっています。
立ち上がりは2460nsでしたからPROBE5のH区間は4000nsです。
PROBE5は125KHzですから1周期は8000ns、その半波は4000nsです。
ちょうど計算通りです。
PROBE6とPROBE7が6470nsで立ち下がっています。

右にスライドしました。

PROBE5が10460nsで立ち上がっています。
立ち下がりは6460nsでしたからPROBE5のL区間も4000nsで計算通りです。

右にスライドしました。

PROBE6が14470nsで立ち上がっています。
PROBE6は6470nsのところで立ち下がっていました。
L区間は8000nsです。
PROBE6は62.5KHzですから1周期は16000ns、その半波は8000nsですからちょうど計算通りです。

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

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

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

PROBE7が38470nsで立ち下がっています。
さきほどは22470nsで立ち上がっていましたからH区間も16000nsです。
こちらもちょうど計算通りです。

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

データエンドは327300nsです。
327300/10=32730です。
RAMには32768個のデータが書き込まれますがプログラムの都合で実際にそれを読み出して波形として表示するのは32735個です。
最初の画面で先頭の0nsの前に5バイト分の表示データがあるのでそれを加算すると32735バイトになります。
ちょうど計算通りです。
さらに326400nsあたりのところを見てみますと。
PROBE1とPROBE2がPROBE0に10ns遅れて立ち下がっています。
PROBE3〜PROBE5はさらにそれに10ns遅れて立ち下がっています。
そしてPROBE6とPROBE7がさらにそれに10ns遅れて立ち下がっています。
このところなどはクロック発生回路からの出力がバイナリカウンタからの出力のため少しずつ遅延する様子をそのまま捉えているようです。
いやあ。
すごい!

前回は50MHzでテストをしました。
その結果はまさに「驚異的」なものでした。
今回はそれこそまさかのまさかの100MHzです。
これはもう驚異的なんてもんじゃありません。
ありえないことが起きたというべきでありましょう。
今はちょっと興奮しております。
正常な判断ができる状態ではありません。
まま。
ここはとにかく落ち着いて。
そうそう。
まずは金麦で乾杯!です。

CPLD入門![第123回]
2022.1.18upload

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