Design Wave Magazine(デザインウェーブマガジン)の2007年7月号にはXilinxのSpartan3eを搭載した基板が付属していた。今までGALのチップを大量購入したことはあったが、FPGAどころかGALを含めてCPLDやPLDを実際に使ったことはなかった。「使いたい!」と思うことは多かったがこのパッケージを手作業でハンダ付けするのはやる気がしない、GALはDIPパッケージだがゲート数が少なすぎて微妙...ということで手を出せずにいた。
このSPARTAN-IIIe「XC3S250E」は25万ゲートを備えている。私にとってみれば無限にあるのと同等。メモリが少なすぎるのは痛いが...
ただ困ったことに付属基板はそのままでは動かせない。動かすには部品などを買い足す必要がある。雑誌の値段は2480円だが、私の場合は動かすために1万円以上の出費が必要だった。
・3.3V動作の水晶発振子(SG-645PCP、秋月電子で4個300円)
・三端子レギュレーター(LM315T、秋月電子で4個100円)
・タクトスイッチ(秋月電子で100個700円、電気店店頭で1個10円)
・10μF程度の電解コンデンサー(今回は手持ちの面実装タイプを利用)
・1列&2列ピンソケット(秋月電子で1個50~150円程度)
・USB接続のプログラマー(データテクノで8000円)
ネット上を見ていると一番入手が難しいのがこの水晶発振子とコンフィグROMのようだ。水晶発振子は上に書いたように秋月電子でネットから通販、コンフィグROMはXCF02SVOG20CもしくはXCF02SVO20CをDigi-keyもしくはアヴネットから通販で購入できる。私はコンフィグROMは購入しなかった。そのうち買わなければ...
水晶発振子は表面実装タイプなので足をちょっと曲げてしまうとハンダ付けしやすい。
扇風機の風が当たる状態でハンダ付けしてしまったのでかなり汚なくなってしまった...
一通り動作に必要な部品を付けてみた。手前のポートにはピンソケットを取り付けていない。これはそのうちコンフィグROMを取り付けようと考えているが、ピンソケットがあるとハンダ付けしにくいと考えたため。
奥のピンソケットは2x17のピンソケットが手に入らなかったため、2x7の14ピンと2x5の10ピンソケットを1つずつ取り付けた。ただしそのままでは使えないのでピンソケットの側面をグラインダーで少し削っている。
これが付属基板を使う上でもう1つの難点だったJTAGライター。手持ちのパソコンはパラレルポートがないノートPC。しかもOSはWindows Vista。そのためどれを用意すればいいのかかなり悩んだ。Ez-USBなどを使って自作しようとも考えたが、初めて使うデバイスだから一発で動かなかったときの原因切り分けができる自信がないため市販品を購入した。
今回は京都のデータテクノという会社から通販で購入。ホームページ上の問い合わせページから購入したい旨と住所を伝えると金額と口座がメールされてくるので送金する。価格は8000円、送料などを入れて9450円だった。
FPGAの内部設計にはISE WebPackを利用する。これはXilinxのホームページから無料でダウンロード可能。今回はデザインウェーブの付属DVDからインストールした。サービスパックは適用していない。それにしてもRegistration IDが起動時に見えてしまうのはどうかと思うなぁ。
付属基板にはスイッチとLEDが1つずつ用意されている。まずはスイッチを押したらLEDが光るプログラムによってFPGAの動作確認をすることにした。
ISE WebPackを起動したらまずプロジェクトを作るため「File」メニューの「New Project」を選択する。
するとウイザードが開く。ここで「Project Name」と「Project Location」を適当に入力する。今回は「Test」というプロジェクト名で「c:\projects」というフォルダを指定した。
次にデバイスの選択をする。今回利用するデザインウェーブの基板に載っているデバイスの通りに「Family」を「Spartan3E」、「Device」を「XC3S250E」、「Package」を「VQ100」、「Speed」を「-4」に設定する。
次の画面ではソースファイルを新しく作る指定をする。ここで作成してもいいが、今回はプロジェクト作成後に指定することにする。そのため何もせずに「Next」ボタンを押す。
ここでは既存のソースファイルの追加が行える。今回は何も指定せずに「Next」ボタンで進む。
プロジェクトの設定概要が表示される。デバイスが「Spartan3E」になっていることを確認したら「Finish」ボタンを押す。
これでプロジェクトが作成された。次にプロジェクトに新しいソースコードを追加する。
「Project」メニューから「New Source」を選択する。
するとウイザードが開く。ここではソースコードの形式とファイル名を設定する。今回はVHDLという言語でプログラミングするため「VHDL Module」を選択する。ファイル名は「LEDTest」とした。
次の画面では利用する信号名と入出力の指定をする。今回はスイッチとLEDを利用する。「Port Name」に「SWIN」と「LED」を追加し、「Direction」をそれぞれ「In」と「Out」にする。スイッチ用のポート名を「SWIN」とするのは何でだろう?デザインウェーブの雑誌内に掲載されている回路図でSWINとなっていたのでここでもそれを採用した。「SWIN」と「LED」という名前は好きな用に入力して構わない。例えば「botan」と「ranpu」にしてもいい。
これでソースファイルがプロジェクトに追加された。今回は「VHDL Module」形式のソースファイルを追加したので拡張子は「vhd」となる。
作成したソースコードのファイル名と同じ「LEDTest.vhd」タブが追加されるのでそれをクリックする。
するとウイザードによって自動生成されたソースコードが見れる。
ここで39行目に「LED <= SWIN;」の1行を追加する。これは"「SWIN」の入力を「LED」に出力する"という意味になる。これでソースコード全体は以下のようになる。
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 16:55:53 07/02/2007
-- Design Name:
-- Module Name: LEDTest - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;entity LEDTest is
Port ( SWIN : in STD_LOGIC;
LED : out STD_LOGIC);
end LEDTest;architecture Behavioral of LEDTest is
begin
LED <= SWIN;
end Behavioral;
ソースコードを修正したら次にスイッチとLEDそれぞれのピン配置を設定する。FPGAではソースコードで信号の"挙動"をプログラミングし、それとは別にこれから作成する「ユーザー制約ファイル」というもので実際の"ピン配置"を設定して使う。"挙動"と"ピン配置"を別々に設定するため、使うデバイスが変わってもピン配置を指定しなおすだけでいい。FPGAではこの辺がかなり徹底されているようだからすごい。ソフトのプログラミングで言えばWindows用のソースコードでそのままMac用のソフトを生成できるようなものだ。
ユーザー制約ファイルをプロジェクトに追加するため「Project」メニューの「New Source」を選択する。
ソースコードの形式から「Implementation Constraints File」を選択する。「File name」は今回も「LEDTest」にした。
次にどのソースファイルに対してピン配置を設定するかの指定をする。今回はそのまま「Next」ボタンで進む。
最後に設定概要が表示されるので「Finish」ボタンを押す。
これでユーザー制約ファイルがプロジェクトに追加された。しかしその内容はまだ指定していない。次に実際のピン配置の指定を行う。
左側の「Process」ツリーの中にある「User Constraints」の「Assign Package Pins」をダブルクリックする。
VHDLで書いたソースファイルを保存するかどうか問われる。もちろん「Yes」ボタンで保存する。
すると別ウインドウで「Xilinx PASE」というツールが起動する。ここでピン配置を設定する。
左側の「Design Object List」にVHDLのソースファイル内で利用されている入出力信号名が列挙されている。ここの「Loc」部分でピン配置を設定する。ここでは「LED」を「P98」に、「SWIN」を「P89」にした。デザインウェーブ付属基板ではこれらのピンにLEDとスイッチが接続されているからだ。それぞれSpartan3Eの98ピンと89ピンを示している。
設定が終わったら右上の「×」ボタンで「Xilinx PASE」を閉じる。
これで一通りソースコード(挙動)の記述とピン配置の設定が終わった。次に実際にFPGAへ書き込む準備をする。
左側の「Process」ウインドウにある「Generate Programming File」を右クリックして現れるメニューから「Run」を選択する。
すると「Synthesize - XST」と「Generate Programming File」に水色のよく分からないアイコンが表示されてソースコードのビルド(論理合成など)が始まる。
途中「Xilinx WebTalk Dialog」が開いたらそのまま閉じる。
「Synthesize - XST」、「Implement Design」と「Generate Programming File」の前に緑色のチェックマークがついたら無事にビルドが終わった。もしも赤いバツ印だった場合はどこかに間違えがあるのでエラー内容を見て修正する。
ビルドが無事に済んだら、次に実際にFPGAに書き込むのに必要なバイナリファイル(XSVFファイル)を生成する。「Generate Programming File」の中にある「Configure Device(iMPACT)」を右クリックして現れるメニューから「Run」を選択する。
すると「iMPACT」の形式選択画面が開く。ここで「Enter a Boundary-Scan chain manually」を選択する。
これでバウンダリースキャン用のウインドウが開いた。ここで右クリックをして現れるメニューから「Add Xilinx Device」を選択する。
するとファイル選択画面が開く。ここでプロジェクトフォルダ内にある「ledtest.bit」を選択する。
この拡張子「bit」のファイルは先ほどのビルドにより作られたFPGA書き込み用のビットファイルになる。
「WARNING:iMPACT:2257 - Startup Clock has been changed to 'JtagClk' in the bitstream stored in memory, but the original bitstream file remains unchanged.」というよく分からない警告がでるが選択肢もないのでそのまま「OK」ボタンを押す。
この状態で「Output」メニューの「XSVF File」から「Create XSVF File」を選択して、XSVFファイルの作成を開始する。
すると保存するXSVFファイル名の指定画面が開く。ここでは「Test」とした。
これからの作業がそのままXSVFファイルに記録されるという旨が表示される。つまりExcelのマクロ記録のようにユーザーが行っている作業がそのままXSVFファイルとして出力される。
ICのアイコンを右クリックして現れるメニューから「Program」を選択する。
するとプロパティ設定画面が開く。ここではそのまま「OK」ボタンを押す。
するとプログレスダイアログが表示される。当然のことながらここでは実際にFPGAへ書き込んでいるわけではなく、XSVFファイルへ書き込むだけになる。
最後に「Program Succeede」と成功の旨が表示されたら、「Output」メニューの「XSVF File」から「Stop Writing to XSVF File」を選択する。これでXSVFファイルの作成が終わった。
実際にプロジェクトフォルダ内を見てみると「Test.xsvf」というファイルが生成されている。今回はスイッチを押したらLEDが光るという単純なものだが、XSVFファイルは166kBにも及んでいる。
ここまでの「ISE WebPack」による作業はWindows Vista上ではできなかったため、Virtual PC上のWindows 2000で行った。実際にXSVFファイルをFPGAへ書き込む作業はWindows Vistaに戻って行う。
実際にFPGAに書き込む前に付属基板をJTAGライターと接続する。さらに付属基板へ5Vを供給する。JTAGライターにはVCCという端子が用意されていたので基板に電源を供給してくれるのかな?とも思ったが、基板に直接電源を入れないとダメなようだ。
データテクノから購入したJTAGライターには「RunXSVFWin」というツールが付属していた。このファイルで先ほど作成したXSVFファイルを読み込み、「実行」ボタンを押す。
2秒ほどでFPGAへの書き込みが終わった。
これでタクトスイッチを押すと、そのすぐ隣りにあるLEDが緑色に光った。
昼に水晶発振子が秋月電子から届きようやくデザインウェーブ付属基板の実験ができた。今日初めてFPGAを触ったけどかなり簡単に使える雰囲気。「ISE WebPack」の動作が重たく、また、手順が多くて面倒だけどしばらく楽しめそうな予感。
実験している時間よりもホームページ用に画像をアップロードしたり文章を書いてる時間の方が長くなってしまった...