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

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



[第130回]


●CPLDロジアナ(19)VHDLプログラム(3)

今回はサンプリングクロックのもとになるクロックを生成します。
サンプリングクロックは100MHz〜500KHzまで8種あります。
その全てはもとになる100MHzから作り出しますがそれぞれのクロックを個別にもとの100MHzから作り出したのでは効率が悪いのでグループ分けをしてできるだけ無駄を省きます。
サンプリングクロックはその名の通りプローブから入力されるデータをラッチする周期を決めるクロックです。
それと同時にラッチしたデータをメモリに書き込むためのWRITE信号の周期であるとともにメモリアドレスをインクリメントするためのクロックでもあります。
サンプリングクロックについては[第118回]で説明をしています。
CLKWK2を5分周したものがサンプリングクロックになります。
ここではそのCLKWK2を100MHzから作り出します。
しかし例外があってサンプリングクロック100MHzはもとの100MHzがそのままサンプリングクロックになります。
またサンプリングクロック50MHzは100MHzを2分周したものがサンプリングクロックになります。

--                      
--make clock for 50MHz,10MHz,5MHz
--clkwk(0)=50MHz clkwk(1)=25MHz
--
process(CLK)
begin
        if CLK'event and CLK='0' then
                clkwk<=clkwk+"01";--10M,5M
        end if;
end process;
--
--make clk2mwk for 2MHz
--clk2mwk(3)=10mhz
--
process(CLK)
begin
        if CLK'event and CLK='0' then
                if clk2mwk="1001" then
                        clk2mwk<="0000";
                else
                        clk2mwk<=clk2mwk+"0001";
                end if;
        end if;
end process;
--
--make clk2mwk2
--clk2mwk2(0)=5mhz clk2mwk2(1)=2.5mhz
--
clk2m<=clk2mwk(3);--10mhz
--
process(clk2m)
begin
        if clk2m'event and clk2m='0' then
                clk2mwk2<=clk2mwk2+"01";--1M,500k
        end if;
end process;
--
-- select clock
--
        clkwk2<=CLK when clkslct<="010" else --20MHz
                clkwk(0) when clkslct="011" else --10MHz
                clkwk(1) when clkslct="100" else --5MHz
                clk2m when clkslct="101" else --2MHz
                clk2mwk2(0) when clkslct="110" else --1MHz
                clk2mwk2(1) when clkslct="111" else --500KHz
                '1';
--                      

20MHzのCLKWK2は100MHz(CLK)をそのまま使います。
10MHzのCLKWK2は50MHzです。
100MHzの1/2です。
また5MHzのCLKWK2はそのさらに1/2の25MHzです。
CLKWKはそれらのクロックを作成するための2ビットのバイナリカウンタです。
2MHzのCLKWK2は10MHzですがこれは100MHzを10分周して作ります。
CLK2MWKは100MHzを10分周するための4ビットの10進カウンタです。
その最上位ビットCLK2MWK(3)は10MHzになります。
それをCLK2Mとします。
1MHzのCLKWK2は5MHzです。
これはCLK2M(10MHz)の1/2です。
また500KHzのCLKWK2はそのさらに1/2の2.5MHzです。
CLK2MWK2はそれらのクロックを作成するための2ビットのバイナリカウンタです。

CPLD入門![第130回]
2022.2.8upload

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