FPGAボードで学ぶVerilog HDL


2007/04/11

あなたは 人目のお客様です.

もともとFPGAをやってみたいなぁと思っていてちまちまと勉強していたのだけど, まあやっぱしこーいうのは本読むだけでなく実際にいじってみないことにはなーとか 思っていたときに,1月末くらいに神保町の書泉グランデ (この本屋は専門書がいいですねえ)で CQ出版社「FPGAボードで学ぶVerilog HDL」というキットを売っているのを見かけて, まあそれまでやってたちょっと長かった作業がひと段落したこともあって即買い. 2007/1/26発売ということで,ちょうどタイムリーでもあった.


パッケージ内容.ただし電源アダプタ,プリンタケーブル, ついでにDVDケースは別.


デモとしてLEDを光らせてみました.おお,きれい

左側中央にLED×4(左から赤赤緑緑,色は固定), そのすぐ上に7セグメントLED×4桁, 左側下段にプッシュスイッチ×4があります.

このキット,初心者の勉強用にはとてもいいと思います. 実は本当はこっち のほうが欲しいなあと以前から思っていたのだが, こちらはまあちょっと値段がお高めだし, とりあえず手始めは欲張らずにもっと安めのキットで慣れてからでいいかな,と. なんといっても1万円足らずだし, 初心者向けの解説本付きなので,ぼくのようなFPGAド初心者には非常に嬉しい. 専門ショップや代理店経由でなく,本屋で売ってるというのも初心者向けって感じで 気楽でよい.(まあ本屋で売ってるのは,CQが「出版社」なので販売ルートが そうなっているからだとは思うけど)

あとこの本,姉妹本というか,似たようなのに 「FPGAボードで学ぶ論理回路設計」 というのもある(値段も同じ).こちらはVerilogHDLでなくVHDLを対象にしていて, 実際グランデでも書棚にならんでいて(VerilogHDLのほうは平積みだったけど), どっちにしようか悩んだのだけど,こちらは2003/5/22発売とちと古く, 石もAltera(べつにAlteraがどうということではないのだが,手元にあるFPGA本が XilinxのISE WebPACKを対象にしてたので,Xilinxのほうがいいなーと思っていた)で, さらにこちらは1万ゲート(VerilogHDLのほうは10万ゲート)なので, 新しいほうにした.目次を見る限り,新しいほうがサンプルプログラムも 初心者向けというか,優しく丁寧な内容のような気もする (古いほうを読んでないのでなんとも言えないけど).

VerilogHDLかVHDLかは,べつにどちらでもいいかなとは思った. まあどうせ両方やることになるだろうし, 片方がわかればもう片方も読むことくらいできるだろうという気楽なかんじですな.


説明本.けっこう丁寧な説明.


付属のDVD


FPGAのボード.中央にでっかくXC3S100E(Spartan3E).
PCカードアダプタ2枚ぶんくらいか.

ただ注意しなければならないのは,このキット,入っているのは 説明本,DVD,あとはボードだけなので, 電源アダプタとプリンタケーブルは自前で用意しなければならない! なので買うのならば,そのへんも目星をつけておかないと,買って帰っても その日はISE WebPACKのインストール以外何もできない(しくしく)ということに なってしまいます(実際そうなりました.さらに付属メディアはDVDなので, DVDドライブを調達することにも...)

ちなみに電源アダプタはEIAJ統一規格(RC-5320A)の外形4.05mm,内側プラス, DC5.0V〜6.0V,200mA以上のものです.ぼくはビックカメラで購入しました.

プリンタケーブルはD-SUB25ピンのストレート結線の延長ケーブル(オス-メス)です. 電源アダプタはビックカメラとかで1000円そこそこくらいで買えますし, 電圧やコネクタを変えられるユニバーサルな奴を買っておくと何かと便利ですが, 問題はプリンタケーブルで,いまどきあまり売っていません (渋谷のビックカメラにはありませんでした). 通販でもあまり見当たらないし,あったとしてもちょっとなんだかなあみたいな 値段だったりします. 物持ちのよさそうな知合いに当たるか(けっこう持っていたりします), 秋葉原でジャンク屋を探すか, 複数のケーブルや変換コネクタを組み合わせて使うか (D-SUB36pinならば売ってたりします), 自作するか,といったところでしょうか. 残念ながらUSBのプリンタケーブルは使えないらしい(明記してあります). ぼくは近所のジャンク屋(?) でたまたまあったので購入しました. ただ実は必要なのは延長ケーブルなので,最終手段としてPCに直差し, という手が残されてはいます.あまりやりたくないですけど.


こーいう,単なる延長タイプのケーブルが必要


ボードのプリンタケーブルのコネクタ部

あと,PCはなるべく高速なものがあるといいです. 最初はCeleron600MHz+メモリ320MBくらいのPC (これでもウチでは高速なほうだったんです)を使っていましたが, CPUが遅いのかメモリが足りないのか(たぶん両方), とにかく論理合成に時間がかかって話にならない! (数分,なんていうオーダーではなかったです.そして失敗したりする) で,Pentium4-2.66GHz+メモリ768MBというPCを新規購入しました(中古ですが). これで論理合成からボードにダウンロードまでの一連の作業で, だいたい1〜2分というところでしょうか. これだとあまり気にならずに作業ができます.よかったよかった.

まずは説明本を見てそのとおりにやってみる. ISE WebPACKをインストール(これはDVD付属のものでも, Xilinxのホームページ から最新版をダウンロードしてもいいでしょう)し, DVDに入っているサンプルをPCにコピー, 説明本のとおりにFPGAボードにダウンロードして動作させてみる. ただ,プロジェクトを最初から自分で作成した場合には説明本のとおりで うまくいくのだが,サンプルをFPGAボードにダウンロードしようとしても, 説明本のとおりではiMPACTがうまくボードを認識してくれない.

iMPACTがうまく認識してくれない場合は,iMPACT起動後に左上の"Boundary Scan"を 左ダブルクリック,中央のメインウインドウで右クリックしプルダウンメニューの "Add Xilinx Device"でデバイスを追加する(この際に *.bit ファイルを指定できる) とうまくいった.で,サンプルをちょこちょこ試してみる.

で,いよいよVerilogHDLというものを書いてみた. 基本的には説明本のとおりにプロジェクトを作成し, VerilogHDLでやりたいことを書き, 制約ファイル(Constraints File:どのピンをどの信号に割り当てるかの設定ファイル. 説明本にサンプルがあります)を作成し,あとは論理合成してiMPACTでダウンロード, という手順です.まあ説明本のとおりです. このへんは説明本が丁寧に説明してあるので, 説明本とあとはVerilogHDLの文法本が1冊あれば,とりあえずは十分でしょう. 注意として,ソースを書き換えたらセーブしないと論理合成できません. あと,ワーニングがけっこう出ます.ほんとうはちゃんと対処すべきなのかも しれませんが,まあとっかかりなので,とりあえず気にせず慣れろ路線で やっちょります.


ストップウォッチ.ここまで動かすのに3日ほどかかってしまった...

とりあえず,ストップウォッチを作ってみた. 7セグメントLEDのダイナミック点灯というものを知らなくて手間取ったが (知ってしまうと非常に納得),3日ほどかけて(なにしろ初心者なので) なんとか無事に点灯.おもしろーい. ただ,クロックが速いと(タイミング的な問題だと思うが)全点灯してしまうので, クロックを1/100にして利用.

で,次はちょっとゲームでも作ってみようかと思いモグラ叩きを作成.


モグラ叩きゲームのデモ画面.わかりにくいけど,ピコピコ上下しています.

うんうん,おもしろい.

サンプルプログラムのソースコードはこちら(2009/10/01追加)
※ ソースコード公開していなかったのですが要望あったので公開します. でも古いディレクトリを探して持ってきたので,ファイルを取り違えているかも... その場合はごめんなさい.

このボード,値段的にも手頃だし,説明本も丁寧だし,シンプルだし, 入門用には非常にいいと思います. 入門者はいきなり高価な評価ボードを買うよりも,まずはこのボードで どんなもんか試してみるというのもいいと思います. ただこのボード,基本的に入出力はスイッチとLEDだけなので, あまりたいしたことはできません(まあ入門用なのでそれでいいのですが). オプションで自分で半田付けすることで, シリアルポートやコンフィグレーションROMなどを乗せることはできるそうです.


シリアルポート用コネクタ搭載用パターン

汎用I/Oを乗せることもできるので,がんばればかなりのことができるでしょう. ただ,やはりいろいろ試そうとすると欲が出てしまい, もっとI/Oのあるボードがすでに欲しくなっています. このボードでは,ボタンを押してLED光らせるというようなFPGAの基本的なことしか 試せなくて,I/Oまわりを試すことができないので, せめてVGA,シリアル,PS/2,LCDパネルくらいは欲しい. まあ頑張って自分で半田付けすればいいのだけど, それではちょっと手が出づらいしね.

てなわけで, Xilinxの Spartan-3Eスタータキットか Spartan-3Aスタータキットをすでに購入予定. やっぱりこういうふうに,I/Oが初めから乗っててくれるのは嬉しい. 金額も2万〜3万くらい,EDK付けても5万円以内なので, けっして安いわけではないが,まあ個人でも買える値段だしね. (ていうかEDK単体で買うよりも安いのね.てなわけでEDKは付けたほうがいいでしょう)

Spartan-3Eのほうが手頃なんだけど,今から買うならSpartan-3Aかしら. VGAがアナログ4096色,サウンド付きなのも魅力. とりあえず基本的なことはわかったので, あとは実際にVGAにカラーバー出力させたり, キーボード接続したり,シリアル通信したりを試してみたい.

ちなみに VerilogHDL はよく 「C言語と似たような感じ」とか 「C言語とたいして変わらない」とか言われますが, 実際にいじってみた感想をぼく主観で言うと...全然違う!

なんつーか,文法は似てるのだけど,考え方が全然違うのよね. C言語はプログラミング言語なので,CPUが上から順に実行していくという シーケンシャルな考えだけど,HDLは論理回路を構成する, という考えで書かなければならない. C言語では処理の流れが意味を持つが,HDLでは全体的な構成というか, 配線やフリップフロップの繋がりが意味を持つ.

回路なので基本的に複数のロジックが並列で同時に動くし, その場合のタイミングも考えなければならないし, C言語とは考えかたが全然違う,似てるのはパッと見の見かけだけ, というように感じます.あくまでぼく主観ですが.


メールは kozos(アットマーク)kozos.jp まで