CPLDを考える

  • 投稿日:
  • 更新日:2009/02/09
  • by
  • カテゴリ:

西田さんの作られた基板を送っていただいているので(感謝!)、到着するまでの間、CPLDを使った実装について考え始めています。

まず、手持ちのCPLDがXC9536XL-PC44なので、それでどこまでできるか考えてみました。 結果、次のような課題が明らかになりました。

  • このチップは外部I/Oが34ピンしかないため、アドレス線をフルデコードすることは無理。 そのため、アドレスは外部でラッチするか、本体のアドレスカウンタを利用する変態実装をする必要がある。
  • (変態実装時)VHDLのコーディングが悪いのか、メモリ系とI/O系を同時にハンドリングするとマクロセル(36個)が不足する。 まぁそれ以前に、変態実装時はアドレスの同期が結構大変そうですけど。

単純に考えると、I/Oは以下のとおりです。

  • PCからのアドレスバス(16)
  • PCからのデータバス(8)
  • PCからのMREQ, IORQ, RD, WR(4)
  • SRAMへのアドレスバス(15)
  • SRAMおよびAVRへのデータバス(8)
  • SRAMへCS, WE, OE(2)
  • AVRへの入力および出力の割り込みリクエスト(2)
  • AVRからのINIT(PC/SRAMセレクト), WR, RD信号(3)

合計58ピンとなります。 SRAMを使うので、EXRAS/EXCASや、CS2/CS3はなくても動作するのではないかと思います。

もっと規模の大きなCPLDを使えばいいだけなんですが、手持ちにないのと、回路を複雑にしたくないので迷っています。 また、規模の大きいものはかなり値が張るようです。XC9536XLが320円なのに対し、規模を大きくしてピン数の同じXC9572が800円、100ピンのものは1000円します。

やたらI/Oを喰うのはアドレスバスで、これを外部で任せれば、CPLD内で必要なのはSRAMデコードのためのA15, A14およびI/O用のA3~A0(と他のアドレス線をORしたもの)くらいなので、初期化時のアドレス発生を安価なAVRに任せたほうが全体として安くなりそうです。

または、9536を2個使う構成も考えられますね。アドレスの発生とバッファ用に1つ使ってもいいかもしれません。

こちらもよく読まれています