FPGAによる入出力回路の製作
概要
FPGAを用いて、簡単な入出力回路を製作する。
製作する回路の概要
方法
- アドレスデコーダや
実験システムのバス
などを復習しておきましょう。
- ノートパソコン, CPUボード, FPGAボードを接続する
必要ならば、ロジックアナライザを使用してもよい。
- アドレスマップの作成
実験用回路のアドレスマップ
を参考に、作成する回路のアドレスマップを作成する。
FPGAボード上のI/Oデバイスは、
I/Oアドレスが0x8200〜0x82FFの範囲を使用できる。
FPGAボード上のメモリは、
メモリアドレスが0x80800〜0x808FFの範囲を使用できる。
上記範囲の任意のアドレスに、
LED、押しボタンスイッチ、7セグメントLED表示器、
RAM等を配置する。
- サンプルプロジェクトのコピー
「all-pins」プロジェクトを
コピーする。
入出力ピンの名称と用途はFPGAのピンを参照。
ロジックアナライザ用のピンとアナログボード用のピンは、
任意の用途に変更しても良い。
- サンプルプロジェクトの加工
- 使用しない出力ピンは回路図から削除する
削除しないと、コンパイル時にエラーになる。
- CPUボードのデータバスcpu_ad0〜cpu_ad7に3状態バッファtriを接続する
3状態バッファtriの出力端子をデータバスに接続する。
接続しておかないと、コンパイル時にエラーになる。
まず最初に、下図のように配線しておくとよい。
空のデータバス
- CPUボードのアドレスバスcpu_a0〜cpu_a8は残しておくこと
未使用であっても削除してはならない。
削除すると、回路をダウンロードした直後にCPUボードが停止するようになる。
- アドレスデコーダの作成
アドレスバス, MCS, PCS等を入力して、
アクセスしようとするメモリやI/Oデバイスを選択する信号を出力する
回路を作成する。
PCSはI/Oアドレスが0x8200〜0x82FFの範囲であれば低レベルになる。
MCSはメモリアドレスが0x80800〜0x808FFの範囲であれば低レベルになる。
これを利用すると、アドレスバスのうちA0〜A7のみを使用すれば、
上記範囲にある任意のアドレスを選択できる。
アドレスデコーダの作成には、
回路図エディタを用いても良いし、
ハードウエア記述言語 (HDL) を使用しても良い。
HDLを使用する場合には、
真理値表が利用できる。
アドレスデコーダ単体で動作確認をする場合には、
アドレスバス, 制御信号 (RD, WR, MCS, PCS), アドレスデコーダの出力を
ロジックアナライザ用のピンに接続しておく。
アドレスデコーダの出力用のピンは、
空いているピン (例えばロジックアナライザのデータバスla_ad0〜la_ad7)
を転用する。
- アドレスデコーダの動作確認 (飛ばして先に進んでも良い)
アドレスマップに記載されているアドレスを
順にアクセスするプログラムを作成する。
ロジックアナライザでアドレスバス、制御信号、アドレスデコーダ出力を観測する。
- LED表示回路の作成
D-FFに書き込んだデータを用いてLEDを点灯させる。
D-Flip Flop with Enable
を使うと良い。
アドレスデコーダの出力でena信号をアクティブにして、
WR (Write Storobe) の立ち上がりでcklを立ち上げる。
通常のD-Flip Flopでは、
簡単な制御回路が必要になる。
LED表示回路の考え方
- LED表示回路の動作確認
- スイッチ入力回路の作成
データバスにデータを送る回路の出力には、
3状態バッファを使用する。
3状態バッファの出力をデータバスに接続する。
データバスにデータを送る時に、
3状態バッファのOutput Enableをアクティブにする。
スイッチ入力回路の考え方
- スイッチ入力回路の動作確認
スイッチで入力した値をLEDに表示させれば良い。
- 7セグメントLED表示回路の作成 (余裕があれば)
FPGAによる回路の製作で作成した表示回路と
D-FFを組み合わせる。
- 7セグメントLED表示回路の動作確認 (余裕があれば)
- RAM (さらに余裕があれば)
RAMを参考に。
- RAMの動作確認 (さらに余裕があれば)
書き込んだデータがそのまま読み出せれば良い。
(作成: 2003年9月26日, 最終更新: 2004年9月29日)