アットウィキロゴ

発表用資料

CPLDの利用


CPLD(complex programmable logic device)の略で、論理回路をプログラムで組むこ とができる。これにより、PICとは比べられない速度が得られる。
利点としては、プログラムの書き換えができるため、デバッグが非常に楽であること
があげられる。論理回路を手配線で組み、しかもデバッグまでするのでは、時間も
コストもかなりかかると推測できる。この点から論理回路をプログラムで書き換えが
可能であることのメリットは非常に大きいことが分かる。

目的

CPLDの利用目的は、PICでは性能(主に速度)的に使用が厳しいデバイスとの接続の際の、
中間デバイスとして用いることである。これを利用した最終段階ではカラー液晶に利用した
いと考えている。近い目標としてはSRAMの制御のために利用することにした、SRAMは、高
速に大容量を読み書きできるデバイスである。今回のCPLDの役割は、・PICだけでは通信不
可能な速度で通信すること・PICのpin数を補うこと。の二つが考えられる。

今回のCPLDの動き

今回はCPLDのプログラムをVHDLという言語を用いて書いた。通信テスト・動作テストを兼
ねて電子工の“Hello World!”であるLEDの点滅を試みた。短いプログラムなので、全部
載せることにした。アルゴリズムは、単純で、

  1. 数字を無限にインクリメントし続ける。
  2. その数字を2進数で考え20番目が0ならledを点灯
  3. 20番目が1ならledを消灯させる。 20番目は2の20乗に1回変化するので、8MHZのクロックであるこのボード上では250ms
    に1回LEDが~点滅するはずである。

プログラムの説明

VHDL習得希望者はいないと思うので、軽い説明とする。上3行は、C言語でいうincludeと同
じである。この行がif, then, =, +, などの分岐の文や、計算の文を書くために必要である。
Portの()でくくられたなかに、CPLDの外部との接続を書く。この例ではclkは外部からデー
タを受けている。逆にled_outは外部にデータを出力している。If文のところの意味はクロッ
ク信号が変化して、かつその変化後の値が1の時counterを増やすというものである。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity test is
port(
clk:in std_logic;
led_out:out std_logic);
end test;

architecture Behavioral of test is 
signal counter:std_logic_vector(20 downto 0);

begin
process(clk)
begin
if clk'event and clk='1' then
counter<=counter+1;
end if;
end process;
led_out<=counter(20);

end Behavioral;

これらに興味があれば

なお、PLDに興味を持ってもらえたならばFPGA,CPLD
Quartus(アルテラ社のPLD書き込みソフト)
Xilinx IDEにもそれぞれ対応したページが用意してあるので
一度ご覧ください。

とあるアドバイスを踏まえて

  1. 聴者に分かりにくい専門用語を事前にpick up
    1. 論理回路
      AND素子OR素子を代表するデジタル回路の基礎。
      信号をhighかlowかで入力値を演算する。
      
    2. SRAM
      高速で通信でき、かつ、比較的容量の大きいメモリ
      
    3. クロック周波数
      論理回路系を使うときにつかう、順番に入出力を行うために
      論理回路にhigh→low→high→lowを繰り返す信号を入力
      する。これをクロックと呼びその速度を周波数であらわす。
      PCのCPU性能に書かれている周波数もこれのこと
      
    4. インクリメント
      ある値に1を加えること。またはそれを繰り返すこと
      
  2. 難しい用語を使わない
    1. 中間デバイス
      あるデバイスとあるデバイス間で通信する際に、間に挟むデバイス。
      今回は、速度の遅いデバイスから速度の速いデバイスに接続する際に
      少しでも速度を上げるために間に中間デバイスをはさんでいる。
      
  3. 理解の努力を聴者に投げない
    1. 8MHzのクロックで2真数の20番目を利用すると250msになる
      8MHzは一秒間に8000000回クロックを動かす。
      2の20乗は  2097152でおよそある。
      よって2097152/8000000がおよそ1/4つまり0.25秒つまり250msと
      なったわけである。
      

タグ:

+ タグ編集
  • タグ:
最終更新:2009年04月28日 22:10