DWM-spartan3基板を使ってみる
by K.I
2005/07/11
Index
- DesignWaveMagagine2005年1月号には、XilinxのSpartan3の基板が付録に付いていた。
- 欲しくて、近くの本屋を3軒ぐらいハシゴしたが、買えなかった。。
- KKさんに1冊分けてもらった1ので、早速動かしてみよう。
1タダほど高いものはない、のかも。。
[top]
USBで使いたいということなので、ナヒテックのSmartJTAGというのを使ってみることにした。
- ちょっと高いので躊躇していたが、手軽に使えそうなので思い切って買ってみた。
- MITOUJTAGというツールに興味があったし→というより、これを使ってみたかった。
- ドライバをインストールしてSmartJTAGを接続すると、青いLEDが点灯してきれいだ。
- ヘッダピンだけ付けてMITOUJTAGを起動して、Cable→ConnectでSmartJTAGを選択すると、Dialogが表示される。
Nahitech SmartJTAG cable open successfully.
- とりあえず接続出来てるのかな?でも以下のエラーが出る。
EZUSB-FX2:bulk IN failed
- ナヒテックの内藤さんに相談すると、すぐメールが来た。
- USBマイコンが動作していないことが考えられる。
- 電源の接続を誤ると、電源が衝突してそのような現象が起こることがある
- でも外部電源は無いし、まだ回路を繋いでいない旨を伝えると、またメールが来た。
- OSはWindos2000かXPですか?
- USBポートはUSB2.0に対応していますか?
- それはもちろん大丈夫と思うけど。。OSは、Windows2000SP4なのでOK。
- USBは2年ぐらい前に買ったPCなので、当然USB2.0対応だろう。と思ってたけど。。。
- 取説の山から、PCの仕様を見つけ出した→USB1.1でした。。
- 早速、USB2.0のPCIボードを買って来た。IO-DATAのUSB2-PCIL4。
- Windows2000SP4以降ならドライバレス!ってことなので、簡単に取付完了。
- 再挑戦すると、簡単にConnect出来た!
- Cable-Optionで、LED TESTで3回LED点滅もOK。
思い込みで確認が足りなかったなぁ。。情けない。。。
DWM基板に、SmartJTAGを接続する。
- 本来は、SmartJTAGは3.3V出力なのに対して、Spartan3は2.5Vなのでレベル変換が必要になる。
- でもSmartJTAGの出力には 100Ωの抵抗が付いているので、3.3-2.5-0.5=0.3Vと2して約3mA、多分壊れはしないだろうということで、そのまま接続する。
- 電源には、SmartJTAGの3.3Vを使用する。
ということで、以下のように配線した。
- SmartJTAGのTCK,TDI,TMS,TDOをDWM基板の同端子に接続
- SmartJTAGのVccをDWM基板の3.3Vに接続
- DWM基板の2.5VをSmartJTAGのVrefに接続
- DWM基板にはXCF01Sを取付け、JP3を切断
(これ以外の配線、電源等の接続はなし)
早速、JTAG接続してみよう。
- Chain→Detectで何故かエラー。以下の内容のDialogが順に表示された。
Device index file format is obsolete.[@MANUFACTURE ARM]
Error: Device list file is not found
warning:device 'unknown' not found in device database
:
Some error has occured in initialization of device algorithm 'algxcfs'
TDIとTDOの間に2つの灰色のデバイスが接続された図が現れたが、
- いずれも、以下のような表示になっていてデバイスを認識しない。
View: TOP VIEW
Username:
Partname: unknown
Pkgtype:
State: RUN (normal operation)
Data reg: Bypass register
- また内藤さんから、やり方を教えてもらう。
- WebPack ISE等の開発ツールをインストール
- Nahitech/mitoujtag/devicedbとtxt,devindex.txtを削除。
- MITOUJTAGを起動して、デバイスインデックスを作りなおす。
これは、BSDLファイルというデバイスのピンやパッケージの情報のファイルを読み込む必要がある為らしい。
- WebPack6.2iは、インストール済みだったけど、デバイスインデックスを作った覚えが無い。
- 念のため、6.2iをアンインストールして、最新の7.1iをインストールし直した。
- デバイスインデックスを作りなおすと、今度は簡単にChain→Detect出来た。
- 何故、インデックスが出来てなかったのかな。
- WebPackが古かったから?
- かなり前のバージョンのMITOUJTAGをインストールしたことがあったから3かな?
- もしかすると、操作ミスしたかなぁ。まぁ出来たから良いか。。
Chain→Detectした状態だと、デバイスは完全には設定されていない。
- MITOUJTAGは、JTAGのIDCODEによりPartNameは表示する。
- でもIDCODEだけでは、パッケージの指定等は無理なので、デバイスの上で右クリックして、Change device で、正しいデバイスを選択する。
- とりあえず、xcf01s_vo20 と XC3S50_VQ100 を選択する。
2Spartan3の保護ダイオードのVthが約0.5Vとする。
3この時はFPGAの書き込みが出来なくて、実際には使えなかったけど。
[top]
DWM基板上には、赤と緑のチップLEDが実装済みだ。
タクトスイッチで、LEDを点灯させてみよう。
- WebPackの操作方法については、トラ技2003年5月号の3章「スイッチONでLEDが点灯する回路を動作させてみよう!」を参考にすると良い。
- まず、File→NewProjectで、新規プロジェクトを作成。とりあえず dwm0501とする。
- Device Family → Spartan3
- Device → xc3s50
- Package → vq100
- Speed Grade → -4
- Top-Level Module Type → HDL
- Synthesys Tool → XST(VHDL/Verilog)
- Simulator → Modelsim
- Generated Simulation Language → VHDL
- VHDL Module を作成。 とりあえず dwm0501.vhdにする。
- 回路モジュールの名前(とりあえず dwm0501)と、入出力の設定。
- SWIN input
- LED_G output
- LED_R output
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 dwm0501 is
Port ( LED_G : out std_logic;
LED_R : out std_logic;
SWIN : in std_logic);
end dwm0501;
architecture Behavioral of dwm0501 is
begin
LED_R <= SWIN; → 追加したのは
LED_G <= not SWIN; → この2行分だけ
end Behavioral;
- クロックも無いことだし、そのまま非同期で出力する
- Synthesizeをダブルクリックして、論理合成
- Sources in Projectのウィンドウを右クリックして、New Source
- Implementation Constraints File で、UCFファイルを作成。とりあえず、dwm0501.ucfとする。
- これで、UCFファイルがプロジェクトの追加される。
I/O Name | I/O Direction | Loc | Bank | I/O Std. |
LED_G | Output | P47 | BANK4 | |
LED_R | Output | P49 | BANK4 | |
SWIN | Input | P50 | BANK4 | |
- entity記述にあっても、実際に配線されていないと、この時点で表示されないようだ。
- これでUCFファイルが生成される。
NET "LED_G" LOC = "P47" ;
NET "LED_R" LOC = "P49" ;
NET "SWIN" LOC = "P50" ;
書き込みのための、bitファイルを作成する。MITOUJTAGで書き込むのでMSKファイルは作らなくても良いかも。。
- Generate Programing Fileのプロパティで、
- StartupOptionタブのFPGA StartupClockをJTAGにしておく。
- Readback OptionタブのCreate ReadBack Data Filesをチェックすると、Create Mask Fileが有効になるのでチェックしておく。
- Generate Programing Fileをダブルクリックして、bitファイルを生成する。
ここで、MITOUJTAGを起動、
- Chain→Detect、右クリックChange deviceでデバイス設定を済ましておく。
- XC3S50を右クリック
- Program→Writeで、Design Fileにbitファイルを指定
- OKボタンで書き込み開始。
コンフィグROMに書き込むために、普通はMCSファイルを作成する。
でも、MITOUJTAGで書き込むので、bitファイルを作れば良い。
FPGA StartupClockをCCLKにする以外は、FPGAと全く同じ手順になる。
- Generate Programing Fileのプロパティで、
- StartupOptionタブのFPGA StartupClockをCCLKにしておく。
- Readback OptionタブのCreate ReadBack Data Filesをチェックすると、Create Mask Fileが有効になるのでチェックしておく。
- Generate Programing Fileをダブルクリックして、bitファイルを生成する。
ここで、MITOUJTAGを起動、
- Chain→Detect、右クリックChange deviceでデバイス設定を済ましておく。
- XCF01Sを右クリック
- Program→Writeで、Design Fileにbitファイルを指定
- OKボタンで書き込み開始。
- うーん、簡単だ。MCSファイルを作らなくて良いのが、楽だよね。
[top]
MITOUJTAGは、FPGAの書き込み器として便利に使えることが分かったが、本来の機能はこれだけじゃない。
- 今回、評価版のMITOUJTAGで、どんなことが出来るかやってみた。
- MITOUJTAGでは、バウンダリスキャンレジスタを利用して、端子の状態をロジックアナライザのように表示出来る。
- それも、FPGAに特別の回路を入れる必要も無く、全端子を見ることが出来る!
- 上の図は手でスイッチをON/OFFしたもの。
- スキャン速くないけど、この機能はFPGAに何も回路を入れなくても使えるところが凄い。
- MITOUJTAGでは、バウンダリスキャンで、ピン状態をリアルタイムで確認出来る。
- それだけじゃなく、
- 内部状態に関係なく、出力を設定出来る。
- 外の配線と切り離して内部に信号を直接入れる。→これは凄いよね
これもスピード的には速くないが、デバッグ用に配線することを考えると夢のような機能だ。
- うーん、これは予想以上に使えそうな感じだ
- まだまだ機能がありそうだけど、とりあえずDWM基板を使えるようにするのが目的なので、MITOUJTAGについてはココまでにしておく。
[top]
[電子工作関連に戻る]