FPGAに慣れる  【2009.10.12】


XC3S500E

 SVZさんの力作であるデジタルFM受信機を作ってみたものの、まだまだ、中身を理解するのは、まったくの力不足で、VHDLとFPGAを使いこなせるようになりたいという思いは募るばかりです。いきなり、FMチューナーの実験プラットフォームをいじり込むのは、なんだか不用意なことをしでかして、挙句の果てに壊してしまいそうで、ちょいと心配です。ということで、自由にいじることのできる、お遊び用のモジュールが欲しくなってきました。ということでまずは、LatticeのXP2-5Eの載ってるボードを3組そろえました。こいつは、デジタルデザインテクノロジ誌に付属のものです。これは雑誌に付属ですが、あとで個別のボードとして発売されるときには、5000円とかいう値段がつくに決まっていますから、なるべく雑誌が流通しているうちにと思って、買い込みました。これはFM受信機のページにあるので、写真は省略します。


 さて、次なるツールは、・・・・なんといってもFPGAへのダウンローダー(書き込み器)がないと話になりません。↑はLattice用のダウンロードケーブルです。パラレルポートを使って書き込むタイプです。今ではUSBタイプが主流ですが、純正品は3万円ちかくしますので、おいそれと購入する気になりません。(たかがダウンロードケーブルごときに、高すぎるわ)というわけで、パラレルタイプを自作するわけです。当初、私のメインPCにもプリンタポートはついてるはずと思っていたけど、実は無かった顛末はこちらに書きました。このパラレルポートを使えば、問題ないだろうとタカをくくっていましたが、あっさり{NG」が出ました。Latticeの書き込みツールであるispVMのダウンロードケーブルの設定ページには、パラレルポートのアドレスが設定できるようなのですが、増設パラレルポートのアドレスを書き込んで、書き込みデータをダウンロードしようにも、どうにもできません。デジタルストレージオシロを引っ張り出して、いろいろ波形観測しましたが、FPGAからの応答のタイミングがまともに見えなかったまでは分かったのですが、原因が不明です。

 仕方がないので、プリンタポートのある旧メインのP4-1800MHzにispVMをインストールして、書き込みはこちらですることで妥協しました。こんな面倒なことはしたくないので、新たに、プリンタポートのある安いPCを買おうと思っています。調べてみると、2万円も出せば、セレロンのE3200くらいが新品で手に入るようです。OSをXP−proで3万5千円なら、FPGA、DSP、AVRの開発システム用に購入してもいいかも知れません。

 さて、Latticeは書き込みできるようになりましたが、やっぱり業界標準?のXilinxもいじりたいと思っています。Latticeのデバイスは配置配線記憶用のFLASHをデバイス内に持っていることが、他のFPGAに比べてアドバンテージになるので、外せないのですが、やっぱりXilinxをいじってないと「もぐり」のそしりを受けそうですので、LatticeとXilinxの二頭立てにすることにしました。


 ということで、↑はXilinxのこれまたパラレルポート用のダウンロードケーブルです。74AC125を2個使う「標準回路」で作っています。でもねぇ、簡単に動かないのですよね、これが。特に3.3V系のFPGAでは、Xilinxオリジナル回路では絶対動きません。回路を見てみると、論理レベルスレッショルドを丹念に追って行けば、何が原因か分かると思います。ヒントはあるデバイスをショートすればOKです。意地悪のようですが、ヒントでピンとこない方はケーブルつくりは止めたほうがいいと思います。市販のUSBケーブルをお使いください。(と、昔、DSPでいじめられた仕返しをしてみる・・・・・いやな奴だなぁ(笑)・・・・・といってもFPGAなんてこの界隈の人はいじらないだろうから、あまり関係ないでしょう・・・・・(再笑))

 <続 き> 【2009.10.17】

 次の図はUSB接続のダウンロードツールとXilinxのFPGAです。左の赤いボードはなひたふさんのところで販売しているJwriterと呼ばれる汎用書き込みツールです。Xilinx、Altera、Latticeと3大メーカーのFPGAに対応しているので、頼もしい限りです。発売が7月ころだったと思いますが、ちょうどFPGAの開発ツールを整備していた最中だったので、思わず飛びつきました。これは汎用なので、FPGAに書き込むファイルが完成したあと、JTAGを使って書き込むためのもので、各社の書き込みツール(IMPACT/ispVM等)から自動で認識されるるものではないようです。(これが認識されるようになれば、お値段を考えると無敵ですけど)


 また、上図の右側は2005年のデザインウェーブマガジン誌に付属していた、Xilinxのボードを気安くいじれるようにマウントしたものです。この、ボード付きDWM誌は、当時、「なんだか分からんが、将来いじることがあるかもしれない」くらいに思って購入してあったもののようです。今はこれにクロック回路(33MHz)、電源レギュレータと引き出し用の40ピンのピンヘッダー(写真には写っていない)が実装されており、いろいろI/Oを引き出して遊ぼうと思っています。FPGAはSPARTAN3の5万ゲート相当の小ぶりな奴です。XC3S50という名前です。それでも、5万ゲートもあり、乗算器も4つ入っていますから、基本的な回路ブロックの実装演習には丁度いいサイズです。


 続いて上の写真はデジタルデザインテクノロジ誌の創刊号付属のLatticeのボードとその拡張予定ベースボードです。ベースボードは秋月の400円のスルーホール基板です。何を拡張するか分かりませんが、基本的には、ピンヘッダー(50ピン)×2に接続できる子ボードを作って(D/Aコンとか)実験をするつもりです。LatticeのFPGAはXP2-5というもので、LUTで4800程度ですから(FF無しも含む)XilinxだとSPARTAN3EのXC3S200くらいに相当するのでしょうか?RAMの規模やLUTにFFがある/なし、また、配線記憶用のFLASHのある/なしという条件が揃えられないので単純比較はできませんが。先のXC3S50の4-5倍の規模というところでしょうか?

 実はベースボードをどういう形にしようか少し迷いました。汎用的なI/Oを搭載したこういうベースボードや、そもそもFPGAに大量にI/Oが付いている大きな評価ボード等もあるのですが、いろいろなI/Oが付いていても、それは実験、知識習得のためのもののような気がして、どうせすぐに使えなくなると思いました。それで、個別のFPGAボード+個別機能モジュール(今はD/Aコンバータを製作中)の結合で、勉強しながら所要機能を実現していくほうが、結果的に安く上がるのではないかと考えました。

 話が少しそれますが、これ↑は、相当古いFPGAです。Alteraのボードで、「FPGAで学ぶ論理回路設計」の旧版についていたものです。ゲート数は1万ゲートとのこと。一応買ったときは、これもいつか使うだろうと思ってお蔵入りしていたものです。PC側の動作環境にはPentiumV 400MHz以上とありますから、殆ど骨董品の領域ですね。これ、中身はVHDLの勉強と銘打って、野球ゲームをロジックで作る話が延々と書いてありましたが、殆ど食傷気味で、なんじゃ?この内容は?と思って、ほおりだしてあったようです。

 今回、Alteraの最新開発ツールのQuartusUのV9.0をダウンロードして、このボードをいじってみました。簡単なカウンタのソースをコンパイルして動作させて見ましたが、いまでもちゃんと動きます(って当たり前だが)。しかし、馬鹿にしてはいけません。インテルの8080マイコンが、当時6000トランジスタ程度だったかと思いますが、それより、圧倒的にトランジスタ数で見れば多いのですから(笑)。

 最後のボードはエムエーアイ社というところのボードです。Xilinx SPARTAN-3EのX3CS500Eという、50万ゲートのFPGAが搭載されています。それだけでなく4MビットのSRAM、コンフィギュレーション用ROMも搭載していて、かなりお安い値段です(といっても諭吉が1枚飛びますが)ので2枚購入してしまいました。このFPGAは50万ゲート、乗算器が20もあり、この領域を使いきれる「シロートさん」は殆ど居ないでしょう。まさに今の私には「猫に小判」状態です。でも、近くに置いておけば、早く使えるようになりたいと焦るでしょうから、そういう効能を狙って買い込みました。また、ここまで用意して、「途中でギブアップしたら、もったいないから、絶対に習熟せーよ」という自分にプレッシャーを与えるものでもあります(笑)



はい、ちょっとアップの図↑です。でかいパッケージですねぇ。208本もピンがあります。こんなものが基板に半田づけ(リフロー?)されているのが、なんだか不思議です。




最後におまけのFPGAの側面図です。このパッケージは見た目、厚さが3mmくらいありそうで、ピンは異様にひょろひょろ長いです。こんなLSIは今まで見たことがなかったので、珍しくなってアップしてみました。パッケージの中のダイサイズは小さくても引き出し配線のお化けなんでしょうねぇ。

<D/Aコンバータその1> 【2009.10.24】 

 さて、FPGAとツールについては一通り揃ってきたので、肝心の機能実装に移ることにします。FPGAでディジタル信号処理を行う場合、「手錬」(←「てだれ」と読む)の方なら、シミュレーションツールを駆使して完成まで一気に突っ走ることができるのでしょうが、初心者の場合はそうは行きません。まず、肝心なシミュレーションのためのテスト信号をまともに書けるようになるまで、たっぷり時間がかかりそうです(笑)。ということで、デジタル信号処理途中のパラレル信号をアナログ信号に引き戻して見てやれば、ある程度は動作確認ができるのではないかと思い、D/Aコンバータを作ることにしました。

 その気になっていろいろ調べたのですが、RFの信号からAF帯の信号まで一台のD/Aでまかなうの自信がなかったので、およそMHz帯以上と数100kHzまでの守備範囲で2つに分割してみることにしました。適応領域をオーバーラップさせることもできますが、手持ちのD/Aで低い周波数用のものは、とても古いものなので、周波数範囲は「動作するところまで」に留めることにしました。




AD7531を使った12ビットD/A

 まずは、低い周波数用ですが、ジャンク箱のなかから出てきたのはAD7531という、Intersil(HARRIS)の石です。10年くらい前に、何かの用途に買い込んだ記憶があるのですが、何をしようとしたのか覚えていません(笑)。データシートを見れば分かりますが、setting timeが1μsなので、どんなにがんばっても数100kHzどまりでしょう。データシートに出ていた回路でそのまま使っています。PC用途ではなかったのか、書き込みパルスが不要で、入力のパラレルビットに相当するアナログ信号が常時得られるタイプです。OPAはこれも、古(いにしえ)のLF356です。(最新ものじゃなくなってしまいましたが、昔たっぷり買い込んだのが余っているので、使ってあげないと・・・・) それにしても、なんともオールドファッションな組み合わせですね。



8ビットカウンターの出力を表示

 とりあえずくみ上がったので動作確認ですが、なにかデジタル信号が要ります。(当たり前だろ!)なににしよーかなーと思ったら、大昔に買ってあった、これがあることを思い出しました。岩田さんのところの初期の製品で、買い込んだ後はあまり使わず棚の肥やしになっていましたが、今回引っ張り出してきました。8ビットのカウンタ出力があるのでそれをそのままD/Aのパラレル入力に突っ込んだのが、上の図です。ダウンカウントに従って鋸波が得られます。8ビットですから、扱ってる最高周波数はこの表示周波数の256倍の397kHzです。なんとか動いているようですが、スパイクも少し見えています。まさかこれの出力が非同期カウンタってことはないと思いますが、詳しくはFPGAで同期カウンタを組んでチェックしてみることにします。


さて、↓は高速D/Aです。こいつは現行品でSVZさんから教えていただいた14ビット165Mspsのものです。これも今はなきBurr-Brown (なつかしー!、TIに買収されました)の製品です。これは次回にでも。