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

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



[第139回]


●CPLDロジアナ(28)サンプリングクロックの下限を広げました

今納期が迫った仕事に追われています。
落ち着いて書いているだけの時間がなかなか取れません。
本日はほんの少しだけ書いて終ります。

CPLDロジアナのサンプリングクロックは100MHz〜500KHzの8通りのクロックですと説明してきました。
下限クロックは500KHzです。
それより低いクロックを必要とすることはあまり無いのでは、と適当に判断したためです。
使えるクロックの幅を広げるとCPLDのマクロセルが不足してしまうのでは、とも考えてキリのよいところで8通りにしました。
CPLDロジアナに使っているのはEPM7128でマクロセルは128個です。
ところが[第133回]に書きましたように、実際にプログラムを書いてみると意外に少なくて済んでしまいました。
そういうことならもう少し範囲を広げてもよかったか、と思いました。
たまたまちょっと測ってみたいものがでてきて、それを測るにはもっと低いサンプリングクロックが必要ということがわかりました。
何を測りたいと思ったのかということについては、本日は時間がありませんので次回あたりに書くことにします。
とにかく。
そのように考えてサンプリングクロックを倍に増やしました。



100MHzから1KHzまでをカバーできます。
これなら十分と言えますでしょう。

当然のこととしてVHDLプログラムも大幅に追加することになりました。
下が今回の変更によって追加したプログラム部分です。

--                     
--make clk200kwk for 200kHz
--clk200kwk(3)=1mhz
--
process(clk2m)
begin
        if clk2m'event and clk2m='0' then
                if clk200kwk="1001" then
                        clk200kwk<="0000";
                else
                        clk200kwk<=clk200kwk+"0001";
                end if;
        end if;
end process;
--
--make clk200kwk2
--clk200kwk2(0)=500khz clk200kwk2(1)=250khz
--
clk200k<=clk200kwk(3);--1mhz
--
process(clk200k)
begin
        if clk200k'event and clk200k='0' then
                clk200kwk2<=clk200kwk2+"01";--100k,50k
        end if;
end process;
--
--make clk20kwk for 20kHz
--clk20kwk(3)=100khz
--
process(clk200k)
begin
        if clk200k'event and clk200k='0' then
                if clk20kwk="1001" then
                        clk20kwk<="0000";
                else
                        clk20kwk<=clk20kwk+"0001";
                end if;
        end if;
end process;
--
--make clk20kwk2
--clk20kwk2(0)=50khz clk20kwk2(1)=25khz
--
clk20k<=clk20kwk(3);--100khz
--
process(clk20k)
begin
        if clk20k'event and clk20k='0' then
                clk20kwk2<=clk20kwk2+"01";--10k,5k
        end if;
end process;
--
--make clk2kwk for 2kHz
--clk2kwk(3)=10khz
--
process(clk20k)
begin
        if clk20k'event and clk20k='0' then
                if clk2kwk="1001" then
                        clk2kwk<="0000";
                else
                        clk2kwk<=clk2kwk+"0001";
                end if;
        end if;
end process;
--
--make clk2kwk2
--clk2kwk2(0)=5khz
--
clk2k<=clk2kwk(3);--10khz
--
process(clk2k)
begin
        if clk2k'event and clk2k='0' then
                clk2kwk2<=clk2kwk2+'1';--1k
        end if;
end process;
--
-- select clock
--
        clkwk2<=CLK when clkslct<="0010" else --20MHz
                clkwk(0) when clkslct="0011" else --10MHz
                clkwk(1) when clkslct="0100" else --5MHz
                clk2m when clkslct="0101" else --2MHz
                clk2mwk2(0) when clkslct="0110" else --1MHz
                clk2mwk2(1) when clkslct="0111" else --500KHz
                clk200k when clkslct="1000" else --200kHz
                clk200kwk2(0) when clkslct="1001" else --100kHz
                clk200kwk2(1) when clkslct="1010" else --50KHz
                clk20k when clkslct="1011" else --20kHz
                clk20kwk2(0) when clkslct="1100" else --10kHz
                clk20kwk2(1) when clkslct="1101" else --5KHz
                clk2k when clkslct="1110" else --2kHz
                clk2kwk2 when clkslct="1111" else --1kHz
                '1';
--                      

[訂正]22.3.10
上記プログラムに1箇所ミスがありました。
下から27行目が
clk2K<=clk20kwk(3);--10khz
になっていました。
上記リストは訂正済みです。

下は上の部分を追加した新しいVHDLプログラムをコンパイルした結果です。



[第133回]では128個のマクロセルのうち75個しか使っていません(59%)でしたがさすがに今回は使用数が増えて93個(73%)になりました。

CPLD入門![第139回]
2022.3.6upload

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