[新連載]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
前へ
次へ
ホームページトップへ戻る