アルテラで遊ぶ

実験中・・・

2003.10.13

最初にPLDに出会ったのはGALの頃でした。1個のGALで2〜3個分のTTLを作れるものでしたが、消費電力は多いし、回路設計はブール代数で面倒だし、値段もTTLの方が安い、アドレスデコーダには便利だけど、汎用論理回路向きでは無いと、PLDには失望していました(笑) で、ずっとPLDには悪いイメージを持っていました(笑) 5年程前から、アルテラやらザイリンクスの大規模(?)なPLDは、ツールも良くできていて回路図で入れられるし、かなりの規模の回路も入るのは知っていましたが、消費電力は相変わらずだし、デバイスもソコソコ高価、ツールも遊びに使うには向かない値段で興味を持てませんでした(^^;) 時は流れ、ふと気づくと、デバイスは1000円くらいから揃ってるし、ツールも制限付きながらフリーになってる。なにより、HDLが面白そうだったので、やってみることにしました。


アマチュア向きアルテラは?

アルテラには600ゲートから150万ゲートまで多用なラインナップが有るようです。値段は900円くらいから、5万円以上するものまで様々です。FPGAの性格上、ピン数は多い方が扱いやすいのですが、アマチュアがユニバーサル基板で製作するにはQFPは不便です。DIPパッケージ品は存在していませんので、1/10インチピッチの基板で扱えるのはPLCCに限られます。PLCCも44、68、84ピンの3種類しか無く、皆、ローエンドの製品ばかりです。最も小さいのはMAX7000シリーズの600〜1200ゲート品(7032/7064)で44ピン、大きい物だと、FLEX8000(8282)の2500ゲートやFLEX10K10の1万ゲート品で84ピンです。価格は900〜4000円程度です。FLEXシリーズは外付けROMが必要ですが、これは8ピンのDIPパッケージです。用途に合わせて、7032、7064、8282、10K10あたりが扱いやすそうです。

VRAM(ビデオジェネレータ)を作る


PICやH8ワンボードに繋げてTV画面に絵を表示する

2003.12.9

目的のFLEX8000が買えそうにないので、MAX7000シリーズのEPM7128SLCを買ってきてVRAMを作ることにしました。2500ゲートで84pinのPLCCパッケージ品です。正確にはFPGAではなく、CPLDと呼ばれるタイプです。AHLDでプログラム?を書いている分には、FPGAもCPLDも差はありません(^^;)

上の写真の右側がアルテラとSRAMを載せた本体です。見た目はすっきりしていますが、裏は配線がぐちゃぐちゃで凄いです(笑) メモリは余っていた256KBのキャッシュ用メモリを使いました。15nSと超高速ですが、そんなに速くなくても構いません。表示能力は、320x200x16色です。これはメモリの容量から決定したもので、別にパソコン並の表示能力を持たせることも可能ですが、TVモニタに映すなら、こんなもんで十分でしょう。データの入出力は、パソコンとのインターフェースが簡単になるようにシリアル方式です。おかげで、1画面書き換えるのに1〜2秒ほど掛かります(^^;) 大体、メモリが32Kバイトですから、PICのROMの中には入らない大容量です。絵を表示するならH8あたりが不可欠でしょうね。ちなみに、手抜きしてノンインターレース表示なので、すこしちらつきます(^^;) パチンコ液晶モニタなんかでは苦もなく使えます。なんせ、これで使うのが目標なので・・・

上の写真の左側は、秋月のRGB→コンポジット・コンバータです。むかーしのキットでPC8801なんかの画面をTVに映しましょうというキットです(^^;) 今でも、形を変えて売られているようですが、買ったことが無いので、どう変わったかは不明です。たぶん、似たようなものでしょう。これを使えば、簡単にカラーのビデオ信号を作ることができ便利です。

TVの画面にカラーバーを映してみた様子

PICで作った手抜きコントロールプログラムなので、バーが直線になっていません(笑)
ゆくゆくは、H8のナビトラモニタに組み込んで、地図画面にコールサイン表示をやってみる
予定です。ただ、H8(3048)は128KBしかメモリが無いので、無圧縮なら全部で4枚しか
入りません。実質的には2〜3枚がいいところかな? パソコンを使った方が遙かに実用的
ですね(笑) ・・・ それに何時完成することやら・・・

MAX7000 EPM7128SLC84

アルテラ(ALTER) EPM7064SLC44


試作した実験用基板

EPM7064SLC44は、MAX7000シリーズの製品で、1250ゲート、PLCC44ピン、CPLDと言われるデバイスです。ROMを内蔵しているので、外部にコンフィグレーションを必要としません。見かけはFPGAと変わらないのですが、内部構造が違います。CPLDは昔のPLDやGALの大規模化したもの、FPGAはASICなどゲートアレイ構造です。7000シリーズの特徴に高速性があります、今回買ってきたのは-10タイプで100MHzで使える製品です。目的のEPF8282ALC84が買えなかったので代わりに買ってきました(^^;) CPLDの特徴として、内部のカウンタ全部が、この速度で動くので、かなりの高速性が期待できる製品です。

現在、16MHzのオシレータと、書き込み用コネクタのみ実装した基板を作ってみました。これで、ビデオの同期信号発生回路をAHDLで組み込んでみたところ、プログラム通りに動作したのを確認しました。色々と作ってみたいのですが、作ってみたい物は、1200ゲート、44ピンには入りません(^^;) それに、CPLD特有の欠点(FFが64個しか作れない)があり、カウンタを多用する回路では無理があるようです。やっぱ、FLEX8000か、10K10を買えば良かったかな・・・

書き込みツールを作る

パラレルポート式ダウンロードケーブルと呼ばれるタイプです。プリンタポートに付けて、アルテラに直接書き込める回路で、中は74HC244が1個入っただけの、単なるバッファです。買うと1〜3万円だそうですが、作れば自宅の備品だけで作れそうなので作ってみました。しかし、これが結構、苦労する羽目に・・・ 配線ミスが発見できず、製作から動作確認まで2日も掛かってしまいました(^^;) まあ、動いてしまえば他愛ないものです。

回路図はアルテラのHPにある「ByteBlasterMV」の説明書の回路図を真似ます。ケースは25ピン×2用のケースを使いました。これならサイズも大きくラクに使えますし、それほど邪魔にもならず便利です。ケーブル側は1m程のフラットケーブルを直接つないであります。MAX7000シリーズとの接続は、右の図のように1KΩの抵抗でプルアップして使います。

ビデオジェネレータを作りたい

最初に作って見たかったのは、ビデオジェネレータ(VRAM)です、以前PICで作ってみた物の、速度とメモリの関係で、お粗末なものしか作れませんでした(笑) まあ、文字を出すには良いのですが、グラフィックを出すのは不可能です。ナビトラモニタに使える、VRAMを作ることが最初のテーマでした。で、設計してみると、最低でも2500ゲートのデバイスが必要です。使えそうなデバイスは、FLEX 8000か、10Kの最廉価グレードが良さそうです。ちなみに、これ以上のデバイスは、フリー版の開発ツールでは扱えません(^^;)

設計第2段として、7064で使えるケチケチ設計をしてみました。モノクロモードで、2bit x 32768 のRAMを使う変則設計です(笑) やっぱり、これでも、CPUインターフェースを作ると溢れてしまいます。うーん、2日も考えてAHDL書いたのに・・・

周波数カウンタを考える

MAX7000の高速性を生かして、周波数カウンタの製作を思いつきました。が、しかし、これも上手くいきません(^^;) 8桁表示とするなら、バイナリ構成で27ビット、BCD構成なら32ビット必要です。カウンタとラッチが必要なので54〜64のFFを消費します。タイムベースに12.8MHzのオシレータを使うと、1/12800000が必要となり24ビットカウンタが必要です。全部で78〜88ビット分のFFが必要となり、7064ではできません・・・ さらに、多機能化していくと最低100個は必要ですね。と、考えると、周波数カウンタはCPLDには向かないことが分かりました。 ・・・うむむ