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

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



[第121回]


●CPLDロジアナ(11)33MHzでテスト

前回はまさかの25MHzでも正常動作することが確認できました。
こうなると欲が出てきます。
もう少しぐらいならなんとかなるのでは、という気持ちになってきます。
そこでもう少しなんとかしてみることにいたしました。
ちょっと半端ですけれどクロックのところを無理なく変えることで33MHzを作り出すことができます。
33MHzの場合は下の波形図のようになります。

20MHz(50ns)のときの波形図に似ています([第118回])。
20MHzではcntrLが”100”のときにクリアしましたが33MHzでは”010”のときにクリアします。
cntrL(1)がそのままMEMWR信号になります。
そのパルス幅はL期間が20nsでH期間が10nsになります。
1サイクルが30nsですから厳密に言うと33MHzではなくて33.333MHzです。
下はその部分のVHDLプログラムです。

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

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

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

下はサンプリングクロック33MHzでのCPLDからの出力波形をカメレオンロジアナで観測した波形です。

PROBE00はCPLDから出力されるメモリアドレスA0です。
サンプリングロックが33MHzですから30nsごとにH、Lを繰り返しています。
PROBE01はCPLDロジアナのPROBE0でラッチされたデータ(4MHz)です。
H、Lが125nsの入力データを30nsごとにラッチしたデータです。
4回ラッチするごとに5nsのずれが出ます
PROBE02はCPLDロジアナのPROBE1でラッチされたデータ(2MHz)です。
H、Lが250nsのデータです。
これも30nsでは割り切れません。
PROBE03はMEMWRです。
Lが20ns、Hが10ns、周期が30nsの波形のはずなのですがカメレオンロジアナの100MHzクロックで観測しても10nsのずれが出ます。
PROBE04はクロック発生回路基板の4MHz出力信号です。
CPLDロジアナのPROBE0でラッチされる前の信号です。
PROBE04を30nsのサンプリングクロックでラッチした信号がPROBE01です。
理屈としては最大で30nsの遅れが発生します。
PROBE05はクロック発生回路基板の2MHz出力信号です。
CPLDロジアナのPROBE1でラッチされる前の信号です。
PROBE05を30nsのサンプリングクロックでラッチした信号がPROBE02です。
こちらも最大で30nsの遅れが発生します。

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

PROBE0がクロック発生回路基板から出力された4MHzの波形です。
H、Lが125nsのところを30nsでラッチしていますから波形に短いところと長いところが出来ています。
しかし確認してみると600nsから2100nsの間にちょうど6周期が収まっています(250×6=1500)から33MHzでも正しく機能していると考えられます。
PROBE1からPROBE3もきれいな波形で乱れはありません。
PROBE4からPROBE7は1周期の一部しか見えていませんが右にスライドさせて大体問題なく表示されていることを確認しました。

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

PROBE6に1箇所ゴミが見えます。
ちょうどそれよりも低い波形のHLの境の部分ですからノイズかなと思います。

データエンドは981900nsです。
981900/30=32730になります。
RAMには32768個のデータが書き込まれますがプログラムの都合で実際にそれを読み出して波形として表示するのは32735個です。
先頭の0nsの前に5バイト分の表示データがあるのでRAMに書き込みし、読み出したデータ数は設計した通りの値になっています。

なんと33MHzでも動作してしまいました!

こうなると。
もっと上の周波数でも試してみたくなってきます(さすがに無理だとは思いますが)。

CPLD入門![第121回]
2022.1.13upload

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