ALTERA Cycloneボードのセットアップ
DesignWave Magazine 2003.10月号おまけ
CQ出版のDesignWaveMagazine 2003.10月号にALTERAのFPGA Cycloneを搭載したボードが付属されたので、これを機にFPGAレベルの開発の準備をすることにしました。
とりあえず、ALTERA用のダウンロードケーブルを作成して、Cycloneボードを動かしてみます。
Cyclone EP1C3は50000ゲート相当のAlteraのローコストFPGAです。 XilinxのCPLDをはじめようで使ったXC9572は1600ゲート程度だったのですが、FPGAだけあって低価格で回路規模が30倍以上あります。XC9572に収めたストップウオッチ回路などより、遥かに高度なものが組み込めます。この回路規模のデバイスが使えるのはウレシイ限り。
Xilinxのネタからしばらくたっているので、基本的なところから考えてみることにします。
↓EP1C3T100C8
Cycloneボードを見ると以下のものがついています。
Cycloneボードについているもの EP1C3T100C8 3端子レギュレータLM317で5V→3.3V 3端子レギュレータLM317で5V→1.5V LED2つ 抵抗、コンデンサが少々
また、Cycloneボードからは58本のI/Oが引き出されています。
いろいろのな部品が既についてるCycloneボードですが、これだけでは動作させることができません。以下のものが不足しています。
Cycloneボードに不足しているもの ダウンロードケーブル ダウンロード用のピンヘッダ 外部接続用のピンヘッダとコネクタ 5Vの安定電源 クロック
開発ツールについては、XilinxのデバイスにはISE WebPACKがあるように、ALTERAにもQuartusU Web Editionというフリーの統合開発環境があります。これもVHDL、VerilogHDLに対応していています。とは言ってもRTLはデバイスに依存しないので、設計フローとして使い慣れたツールでRTLを設計して、完成したらQuartusUでフィッティングしていくという感じでもいいでしょう。
あえて、QuartusUのツール類を使い込むのも手ですけど。
FPGAに書き込むためにはダウンロードケーブルです。作るか買うかは自分次第、XilinxCPLDボードの製作では買いましたが、簡単な回路の製作に慣れてきたので今回は自作します。
Cycloneボードには、JTAGのダウンロードポートと、ASDIのダウンロードポートがあります。Alteraのサイトを見るとパラレルポート、USB、RS-232Cで接続するケーブルがありますが、パラレルポート接続でJTAGポートを使うByteBlasterMVのデータシートには回路図が掲載されているので、これを元に作成するのが一番楽なようです。DesignWaveMagazine 2003.10月号にもByteBlasterMVの回路図が掲載されています。
CycloneボードにはコンフィグレーションROMを搭載するランドがあります。これはASDIのダウンロードポートからサクセスできます。ASDIのダウンロードができるByteBlasterUのデータシートには回路図が無かったので、コンフィギュレーションROMを搭載したかったら、ByteBlasterUを入手するしかありません。しかし、アルテラ純正品のPL-ByteBlaster2は3万円以上もするのでとてもコレだけの為に手が出せる値段ではありません。ところが、丁度良いことに、HuMANDATAさんのサイトでByteBlasterU/ByteBlasterMV互換ケーブルの回路図が公開されてました。ByteBlasterU互換のものはこれ以外に見当たらなかったので今回はこれを参考にして作成しました。HuMANDATAさんでは比較的安価な自作キットも販売されていますので、面倒ならこちらを利用するのもいいかもしれません。Xilinx用のダウンロードケーブルは私も買いましたし・・・。
FPGAのブレッドボードの販売をしているHuMANDATA LTD.さんでは、製品のすべて回路図、マニュアルなど公開しているので、学習には大変参考になっています。
では、今回作成したダウンロードケーブルは部品をこんな風に配置してみました。制作費は数百円です、秋葉原まで行く電車賃の方が高いよなぁ。
↓自作ダウンロードケーブルおもて
↓自作ダウンロードケーブルうら
あぁ、線が、線がいっぱい!
回路図をラインマーカーで塗りながらテスターで入念に結線をチェックしました。
HuMANDATAさんの自作キットの写真と比べてみると、イイカゲンさがハッキリ出て恥ずかしい。配線を74HC244の間に通したかったので横に配置したのですが、これだとプルアップ抵抗の位置が全然よろしくない。当然のようにウレタン線を引き回すことになったのですが、線が縦、横に這ってなかなか凄いことになってしまいました。回路図の抵抗器つきトランジスタは4.7kΩの抵抗と2SC1815で代用しています。
フラットケーブルを使うとJTAGポートとの接続が楽になります。丁度PCのM/Bの拡張用のもので、D-SUB25Pin⇔26Pinのフラットケーブルがあったので活用しました。シリアル用のD-SUB9Pin⇔10Pinフラットとセットでなんと200円、こういうのがあると便利です。秋葉原の路地裏でみつけました秋葉のお店は奥が深い。
なければ、コネクタを自作する必要があります。D-SUB25ピンのプリンタケーブルをカットして繋いでおわりです。いちいち作るのが面倒ですけど。
↓D-SUB25Pin⇔26Pin
cycloneボードだけでは何もできません。電源やクロックが必要です。cycloneボードは小さいので、ユニバーサルボードで作ったマザーボードの上に搭載する形がセオリーですが、テスト用のLEDを光らせるくらいなら電源とクロックを入れるだけのもので十分です。今回は秋月C基板にピンソケットを取り付けたものを作ることにしました。
JTAGポートと電源のピンヘッダはおもてに、I/Oのピンヘッダはうらに取り付けます。よく見ると、2つあるI/Oのソケットはクロックの位置、電源の位置が同じになっていました。どちらに繋ぐこともできるということですね。
作った回路はこんなもの。
↓ボード周りの回路図
まぁ、描くまでもないと思いますが一応。
秋月の9V1.2AのACアダプタから、3端子レギュレータ7805で5Vに落としてCycloneボードに供給します。入力側に100μFの電解コンデンサと出力側に47μFの電解コンデンサと0.1μF(104)の積層セラミックコンデンサを取り付けています。セラミックコンデンサはICの側に無いと意味がありませんのでタダの気休めです。16MHzの発信器は電源とGNDをつなげば勝手にでるので、I/OポートのA01へ接続します。コレでOK。
↓製作した・・・というほどでもない回路
うん、いかにも簡易。
CycloneボードにはLEDが2つ搭載され、I/Oポートと繋がっています。デバッグ用にLEDを接続するのは常套手段なので、無い場合は自分でつなげることなりますので、すでに搭載済みなのは助かります。実験的にこのLEDを点滅させるようにしてみることにします。
回路の設計では回路図による入力は余り効率的ではないのですが、RTLではPLLやメモリは専用モデルの容易が必要なので面倒です。ロジックはRTLで記述して、PLL、メモリ、ロジックを最上位階層で同階層にしてQuartusUの回路図入力ツールでまとめると便利そうです。この場合、PLLやメモリはパラメータ設定で簡単に生成できます。
EP1C3T100C8はPLLを1つ持っています、このPLLは外部クロックを分周または逓倍することでFPGA内部で16MHz〜275MHzのクロック信号を作ることができます。まぁ、今回のようにLEDを点滅させるくらいならあえてPLLを使う必要も無いでしょう。
結局、21bitのカウンタを一つ作ってカウントさせて、そのまま最上位bitをLEDのPinにつないだだけの回路にすることにしました。
↓FPGA内部の回路図
OUT_COUNT[20]をLEDとつながったPinに割り当ててます。QuartusUのAssignment EditerでPinと信号を以下のように割り当てます。
Cycloneボードの信号割り当て Pin_10 → MAIN_CLOCK Pin_2 → OUT_COUNT[20] Pin_26 → POWER_ON
これらは制約としてPinに割り当てられ、回路をフィッティングするときに用いられます。それ以外の出力ポートはQuartusUが勝手に割り当てるようです。回路図の下側にあるNOTはCycloneボードではEP1C3T100C8のPin_26がLowの時にLEDが発光するようになっているので、論理を反転させています。
サンプルcount21.v
//21bitカウンタ count21.v module count21( mclk, rst, cnt ); input mclk; input rst; output [20:0] cnt; reg [20:0] cnt; always @(posedge mclk) begin if(rst==1'b0)begin cnt<=21'h0; end else begin cnt<=cnt+1'b1; end end endmodule
カウンタだけの単純の回路です。XilinxのCPLDの時はVHDLで書きましたので、今回はVerilogHDLで書きました。RTLを書くならVHDLでもVerilogHDLでも余り違いは無いのですが、個人的には記述量が少ないのでVerilogHDLの方が好みです。Cと似ているので、記述中にCでプログラムしていると偶に混同してsyntax errorの嵐にあうことがあるのが玉に瑕です。そんなことやるの私だけか・・・。
↓作業風景
この写真だけだと何がどうなったのかサッパリですが、Cycloneのすぐ下に緑色に光っているものがLEDです、しっかり光っています。
今回作成したダウンロードケーブルはByteBlasterUモード、ByteBlasterMVモードが共にJTAGポートに接続して認識していました。ByteBlasterUモードはASDIのダウンロードポート専用というわけではないってこと?
↓点滅しているところ
写真だとわかりませんが、ちゃんと点滅しています。左のLEDがPin_2に繋がっているD1です。カウンタの最上位bitを割り当てています。右のLEDは余ったのでとりあえず光らせただけだったりします。
ちゃんと動くFPGAのボードが¥1980かぁ。
今回はとりあえず、Cycloneボードの環境を立ち上げることができました。FPGAネタはこれでスタートできます。FPGAを作る準備ができたので、次はFPGAを使う準備をすることになります。
さてさて、どうしましょうか。
DesignWave誌では学習のためにPLLやカウンタをQuartusUのMegaWizardで作成しています。Cycloneのデバイスに依存する部分はツール頼りですが、それ以外は自分でRTLを書いたものを呼び出すだけにした方が意図しないツールのおせっかいで苦労しなくてすむので、私の好みです。よって作業フローは以下のようになります。