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

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



[第118回]


●CPLDロジアナ(8)AS6C62256

CPLDロジアナはサンプリングクロックによってプローブ入力をラッチしてそれをそのままRAMにデータとして書き込みます。
62256RAMの容量は8ビット×32768ですから8チャンネルのプロープ入力信号をそのまま8ビットのデータとして62256に書き込むことで32768回分の入力ラッチデータを記録することができます。
RAMの容量は固定なのでサンプリングクロックが変わっても記録できるデータ量は一定で変わりません。
クロックが速ければ1回のサンプリングデータをRAMに書き込む速度も速くなります。
ここで問題になるのは最高速のサンプリングクロック20MHzの場合のデータ書き込み速度です。
最初の試作版はRAMとしてIS61C5128(512KB)を実装しました。
IS61C5128を選択したのは現在でも普通に入手可能でかなりのメモリ容量であることがその理由でした。
ND80KL/86用に使っているIS61C5128はアクセスタイムが25nsなのでサンプリングクロックが20MHzでも余裕で間に合います。
しかし試作を重ねていくうちにそれほどの容量はなくてもよいのではないかと考えるようになりました。
結局ND80Z3.5やND8080などで使っている62256RAMに落ち着きました。
そのあたりのことについては前回でも説明をしました。
512KBのRAMから32KBのRAMへの変更は容量のみを考えてしたことで、その時点ではRAMのアクセスタイムについては考えていませんでした。
実際62256を実装するように設計変更した試作版ができてきたときにそれ以前からの流れで普通に20MHzのサンプリングクロックでテストしたのですが問題なく動作したのでそれでいいと思ってしまいました。
久し振りにCPLDロジアナについて書いていくなかで、本当に20MHzで大丈夫か、ということがふと気になりました。
そこで62256のアクセスタイムについて確認してみました。
今回CPLDロジアナに使うことにしたRAMはAS6C62256です。
あらためてデータシートで確認してみましたらアクセスタイムは55nsでした。

[出典] Alliance Memory,Inc. AS6C62256 Data Sheet

昔使っていた日立のHM62256などに比べたらかなり高速です。
しかしそれでも55nsではサンプリングクロック20MHzには使えないのでは?
20MHzの1周期は50nsです。
意識していなかったけれどこれはちょっとまずいのでは。

問題はサンプリングデータをRAMに書き込むときの速度です。
記録したデータをRAMから読み出すときはそれよりはうんと遅い速度で読み出しますから問題はありません。
RAMにデータを書き込むときの速度で一番問題になるのはサイクルタイムとWRパルスの幅です。
ここでAS6C62256のデータシートの値と比較するため、サンプリングクロックに同期してCPLDから出力されるMEMWRパルスについて説明をしておきます。
CPLDロジアナのVHDLプログラムでMEMWRについて記述しているのは下の部分です。

--MEMWR
--
        MWR<=cntrL(2) or r_w or cntrH(15);--MWR_=cntrL(2)='0' and r_w='0' 
--

cntrL(2)がそのままMEMWR信号として出力されます(r_wとcntrH(15)は測定期間中であることを示す内部信号です)。
そのcntrLは3ビットのカウンタです。
下がcntrLについて記述しているプログラム部分です。

process(clkwk2,res_clr)
begin
        if res_clr='0' then
                cntrL<="000";
        elsif clkwk2'event and clkwk2='0' then
                if cntrL="100" then
                        cntrL<="000";                   
                else
                        cntrL<=cntrL+"001";
                end if;
        end if;
end process;

cntrLはclkwk2の下がりエッジによってカウントアップします。
そしてそのときにcntrLの値が”100”だったならばそこでcntrLをクリアして”000”にセットします。
下はそれを図で示したものです。

clkwk2にはそのとき選択しているサンプリングクロックに対応する周波数のクロックが入りますがここではサンプリングクロックが20MHzのときについて書いていますので、そのときのclkwk2は100MHzです(プログラムの別のところで記述しています)。
cntrLはclkwk2の下がりエッジでクロックアップします。
厳密にいうとcntrLはclkwk2の下がりエッジと同時ではなくてその直後のタイミングでクロックアップしますから、cntrLがクリアされるのはcntrLが”100”になった瞬間ではなくてそれよりもclkwk2の1クロック分遅れたときになります。
そのcntrL(2)がそのままMEMWR信号としてCPLDから出力されます。
そのパルス幅はL期間が40nsでH期間が10nsになります。
なおまた別のプログラム部分でcntrL(2)の下がりエッジに同期してRAMのメモリアドレスがカウントアップされます。
図の一番下にCPLDからRAMに出力されるメモリアドレスのA0の波形を示しました。
また図では省略しましたが、これと同じタイミングでプローブ入力をラッチしてそれをそのままデータとしてRAMに出力します。

下はAS6C62256のWRITE信号のタイミング図です。


[出典] Alliance Memory,Inc. AS6C62256 Data Sheet

図中のパラメータについては下の表にまとめられています。


[出典] Alliance Memory,Inc. AS6C62256 Data Sheet

TWCはサイクルタイムです。
CPLDロジアナではサンプリングタイム20MHzのときのサイクルタイムは50nsですから規定値よりも5ns短い値になります。
TWPがWRITE信号幅です。
ロジアナでは40nsですからこれも規定値に5ns足りません。
おそらくメーカーはワーストケースを想定して上記のような規定値を設定しているはずとポジティブに考えれば5nsぐらいはなんとかクリアしてくれるのではと期待したいところです。
事実、上に書きましたように今のところ20MHzでも特に書き込みエラーはおきていないようです。
それとこのRAMは2.7V〜5.5Vの広い電圧範囲で動作します(今回の最初にお見せしたデータシートの中にその記載があります)。
そこには電流値としてVcc=3Vのときの値を示しています。
そのことから類推すればWRITEサイクルの規定値もVcc=3Vのときの値ではないかと考えても間違いではないように思えます。
一般にCPUでもメモリでもVccを高くすればより高速動作が可能になると考えられます。
そのように考えればVcc=3Vでは55ns、45nsが最小値だったとしてもVcc=5Vならばそれよりはもう少し余裕が出てきてもよいはずと思います。
しかしそれはあくまで希望的に考えたことなので、当CPLDロジアナについてはサンプリングクロック20MHzはとりあえず「おまけ」であると考えてください。

CPLD入門![第118回]
2022.1.7upload

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