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