Spartan6を使ってみた
by K.I
2010/09/12〜
Index
- 最近、Spartan3スターターキットを使って、Verilogを弄ることが多いんだけど、
- 入り切らなくなってきた。入れるために回路を削ったりしてたんだけど、だんだん面倒になってきた。
- もっと、大きな規模のFPGAが欲しいんだけど、なかなか良い物がない。
- Xilinxのキットもあるけど、高いし、何よりいろいろ部品が載りすぎて、大き過ぎる。
- ちいさな物はないかな〜と思い始めた。条件としては、
- 最低限、大容量のRAMが欲しい
- PCとの通信ポートも欲しいし、
- I/Oポートは、普通のヘッダピンが良い
- 探してみると、 特電のSpartan-6_FPGA評価ボードが小さいし、なんか良さそう。
- 但し、SDRAMなので、SRAMほど気楽に使えなさそう。SDRAMは多少コントロールが必要そうなので、面倒かも
- EzUSBなので、今までのCOMポートコントロールソフトが使えないかも。
- いろいろ不安はあるのだけど、他に良いものが無いので、買ってみることにした。
- TKDN-SP6-16 と、TKDN-SP6-45 の2種類があるけど、とりあえず容量が約3倍という45の方にしてみた。
[top]
- 小さいとは思っていたけど、思っていた以上にやっぱり小さい。
- 秋月のCタイプと同じかも、と思ったけど、それよりはちょっと大きい。
- 初め、上側にヘッダを立てて、Cタイプ基板を載せようと思っていたんだけど、
- 下側にヘッダを立てて、下においた基板に、この評価ボードを載せるようにした方が良さそうだ。
- 今まで使っていた、Xilinxの開発環境ISEは10.1だったけど、これはSpartan6に対応していない様なので、
- 最新のISE12.2をインストールしてみることにした。
- XilinxのダウンロードページからISE12.2をダウンロードして、インストール。
- ライセンスファイルが必要みたいなので、Xilinx License Configuration Managerから、何度かライセンスファイルの取得を試みたんだけど、うまく行かない。
- 結局、ダウンロードページの ライセンスファイルの取得のリンクから、やったりして出来た。
- というか、いろいろやってるうちに出来たので、どうやったら出来たのか正確には良く分らないんだけど。。
- ISE12.2を起動する。
- ライセンスファイルが設定されていない場合は、Xilinx License Configuration Managerが立ち上がるので、
- manage Xilinx LicensesタブのXILINXD_LICENSE_FILEのテキストボックスにライセンスファイルを記述して、Setすれば良い。
Virtex-6 または Spartan-6 をターゲットとしている場合は、スピードファイルのパッチを必ずインストールしてください。
このパッチを適用するには、ISE Design Suite 12.2 のインストール後、スピードファイルのパッチをダウンロードし、
ISE Design Suite ツールと同じ場所に解凍します。
意味分りにくい。結局、ISEというディレクトリに上書きすれば良いみたい。
- この評価ボードは、EzUSB経由で書き込むので、EzUSBのドライバのインストールが必要。
- あと、bitファイルを書き込むためのプログラム sp6jtag を、やはり ダウンロードページから
- ダウンロードして、適当なディレクトリに保存しておく。
- 今まで、WebPackのシュミレータと言えば、ModelSimのXilinxエディション(MXE)だったんだけど、
- ModelSim XEの、ISE12.1用は、まだあるみたいなので、 ここからダウンロードしてみる。
- とりあえず、現時点の最終バージョンのModelSim XE III 6.5cは使えるようになった。
- ライセンス発行も、101210までらしい。
- これからは、ISimが標準ということらしいので、そっちの使い方を覚えた方が良いんだろうなぁ。。
- ISE12.2を起動する
- New Project...ボタンを押して、プロジェクト名をセット。
- ProjectSettingsで、デバイスとかセットする。
- Family Spartan6
- Device XC6SLX45
- Package CSG324
- Speed -3
- Synthesis Tool XST(VHDL/Verilog)
- Simulator Modelsim-SE Mixed
- Preferred Language Verilog
- Property Specification in Project File Store all values
- Nextボタンで、内容を確認してFinishで終わり。
- 評価ボードと同梱の回路図を見ると、
- 50MHzの水晶発振器出力 →D11
- プッシュスイッチ →D6
- LED0 →F13
- LED1 →C11
- LED2 →C9
- LED3 →A9
- LED4 →B9
- LED5 →A8
- LED6 →B8
- LED7 →A7
- User Constraints→I/O Pin Planning - Pre-Synthesisで、ピンを設定してみた。
- 物凄く使いにくい。。これなら、直接UCFファイルを手書きした方が、全然簡単だ。
- 良く見ると、 特電のダウンロードページに、UCFファイルがある。
- プッシュボタンとLEDだけ切り取って、UCFファイルを作る。
- プロジェクトのDesignパネルを右クリックして、New Source...を選択。
- Verlog Moduleを選択、Verilogファイル名を記述
Port Name | Direction | Bus | MSB | LSB |
pushsw_ip | input | □ | | |
led_op | output | ■ | 7 | 0 |
module night(
input pushsw_ip,
output [7:0] led_op
);
assign led_op = {7'b0000000,pushsw_ip};
endmodule
- Generate Programming Fileをダブルクリックして、Verilogをコンパイルする。
- Synthesizeで、Verilogをコンパイルして、
- Implement Designで、FPGAにマッピングされる
- これでErrorがなければ、bitファイルが生成される。
- 普通のJTAGケーブルを使う場合は、iMPACTを起動して書き込むが、
- この評価ボードの場合は、EzUSB経由で書き込むので、bitファイルを作るところまで。
sp6jtag -detect →デバイスの検出
sptjtag -auto ビットファイル名 →書込み
- プッシュボタンを押すと、LEDが点灯されればOK!
- SPI経由で、フラッシュROMに書込むことも出来る
sptjtag -spi -auto ビットファイル名
でもエラーが出た。
SPI書き込み一時ファイル spi_xc6slx45.bit が見つかりません
うーん。指定したビットファイル名と違う。何でだろう。
spiオプションを付けると、まずSPI通信するための回路をFPGAに読み込み、
- これを使って、SPI経由でフラッシュROMにデータを書き込むようになっているらしい。
- これは、特電のJTAGひろばで確認したら、spi_xc6slx45.bitファイルが抜けていたらしい。
- 最新のドライバ・ファームウェアをダウンロードして、OK!
- SPI経由で起動する場合、ROMを読み込むのに5秒ぐらい時間が掛かる。
- 16に比べて、45は容量が大きい分、起動に時間が掛かるらしい。
- それなら、16の方が良かったかな〜と思っていたら、特電の内藤さんがコンフィグレーションを速くする方法を教えてくれた。
- Generate Programming Fileの、Process Propertiesを開いて、
- Configuration Optionsを選択、Configuration Rateを最大(26)にする
- Unused ICB Pinsを、Pull Upにしておく
- SPIのクロックが、2→26になるので10倍以上速くなる。
- で、久々に使ってみようと、USBケーブルでPCに繋いでみました。
- ところが、全く認識されなくなってしまった。
- SW2のPROGボタンを押すと、PC本体が再起動してしまった。
- 初めは、たまたま落ちたのかと思ったけど、3回再起動したので再現性がある
- USBハブ経由で接続に変えたら、再起動はしなくなった。
- USBケーブルの先がどうであろうと、再起動するのはちょっと困る。
- Ez-USBのデバイスドライバの問題かなぁ。まぁこれはWindowsXPの問題と言った方が良いか。
- SW2を押すと、ポピと鳴って、離すとピポと鳴る。それでデバイスマネージャで見ると、
- SW2を押している時だけ、「特殊電子回路Spartan-6評価ボード」が認識される。
- 特電のJTAGひろばで確認したら、未使用ピンがPull-Downに設定されていると、
- Spartan6ボード上の、Ez-USBチップがリセットされたままになってしまって、USB接続できない状態になるらしい。
- 以前、Unused ICB Pinsの設定はPull Upにしたはずなんだけど、
- いろいろ設定を変えて試したような気もする。ちょっと前だから、全然覚えて無いんだけど。。
- まぁ自分のことだから1、たぶん試しにPull Down設定しちゃったんだろうな〜。
- USB接続出来ないんだから、USBチップとの接続は最初に疑うべきところなんだけど、
- 以前動いていたという思い込みがあったので、あまり考えていなかった。.
- 未使用ピンをPull-Downnに設定して、SPI-ROMに書き込んでしまった場合の対処法も教えて頂いた。
① CN5の端子間(例えばMIとGの間)をピンセットなどでショートさせて起動し、SPI ROMから読み出しできないようにして電源をONにする。
- その後、 「オンボードUSB-JTAGツール for Windows」を使ってSPI書き換えモードにし、SPI ROMを消去する
② PROGを押したまま起動し、PROGを離してからFPGAが起動するまでの短い間に、
- 「オンボードUSB-JTAGツール for Windows」を使ってSPI書き換えモードにし、SPI ROMを消去する
- ②はタイミング的に難しそうと思ったんだけど、以下のようにしたらうまく行った。
- 「SP6JTAG for Windows」を起動する。最初は、ボードが認識できないので?になっている。
- PROGボタンを押し続けながら、Connectすると、ボードの写真が表示される。
- PROGボタンは離さずに、Programming targetをSPI ROMに変更する。
- まだPROGボタンを離さず、Progressバーが表示され終わって、SPI-ROMコマンドが使えるようになるまで待つ
- Progボタンを離したら、素早くERASEボタンを押す。これでSPI-ROMが消去される。
- あとは、Unused ICB Pinsの設定がPull-Upになっていることを確認して、書き直したら問題なしでした。
1設定しないと、どうなるんだろうと試してみたくなるんだよね。。たぶん最後に試して基板単体では動いたから、気が付かなかったんだろうな〜。。。
[top]
- TKDN-SP6-16,TKDN-SP6-45ボードのインターフェース
部品番号 | 信号名 | FPGA |
D1 | led_op(0) | F13 |
D2 | led_op(1) | C11 |
D3 | led_op(2) | C9 |
D4 | led_op(3) | A9 |
D5 | led_op(4) | B9 |
D6 | led_op(5) | A8 |
D7 | led_op(6) | B8 |
D8 | led_op(7) | A7 |
部品番号 | 信号名 | FPGA | 機能 |
SW1 | pushsw_ip | D6 | ユーザSW(青) |
SW2 | cfg_prog | V2 | 再コンフィギュレーションボタン(赤) |
部品番号 | 信号名 | FPGA | 機能 |
U10 | xtalclk_ip | D11 | 50MHz水晶発振器 |
PIN | FPGA | 機能 | PIN | FPGA | 機能 |
1 | V17 | DONE | 2 | | 3.3V電源(選択化) |
3 | B18 | JTAG信号(TMS) | 4 | V2 | PROGRAM_B |
5 | A17 | JTAG信号(TCK) | 6 | D16 | JTAG信号(TDO) |
7 | | GND | 8 | D15 | JTAG信号(TDI) |
9 | C6 | 汎用入出力(A0) | 10 | B2 | 汎用入出力(A1) |
11 | B3 | 汎用入出力(A2) | 12 | A2 | 汎用入出力(A3) |
13 | B4 | 汎用入出力(A4) | 14 | A3 | 汎用入出力(A5) |
15 | C5 | 汎用入出力(A6) | 16 | A4 | 汎用入出力(A7) |
17 | B6 | 汎用入出力(A8) | 18 | A5 | 汎用入出力(A9) |
19 | | GND | 20 | | GND |
21 | C7 | 汎用入出力(A10) | 22 | A6 | 汎用入出力(A11) |
23 | D8 | 汎用入出力(A12) | 24 | C8 | 汎用入出力(A13) |
25 | C10 | 汎用入出力(A14) | 26 | A10 | 汎用入出力(A15) |
27 | A11 | 汎用入出力(A16) | 28 | B11 | 汎用入出力(A17) |
29 | | 3.3V電源 | 30 | | 3.3V電源 |
31 | A12 | 汎用入出力(A18) | 32 | B12 | 汎用入出力(A19) |
33 | A13 | 汎用入出力(A20) | 34 | C13 | 汎用入出力(A21) |
35 | A14 | 汎用入出力(A22) | 36 | B14 | 汎用入出力(A23) |
37 | A15 | 汎用入出力(A24) | 38 | C15 | 汎用入出力(A25) |
39 | A16 | 汎用入出力(A26) | 40 | B16 | 汎用入出力(A27) |
PIN | FPGA | 機能 | PIN | FPGA | 機能 |
1 | P3 | 汎用入出力(B0) | 2 | N4 | 汎用入出力(B1) |
3 | P4 | 汎用入出力(B2) | 4 | N3 | 汎用入出力(B3) |
5 | N5 | 汎用入出力(B4) | 6 | V4 | 汎用入出力(B5) |
7 | T3 | 汎用入出力(B6) | 8 | T4 | 汎用入出力(B7) |
9 | R3 | 汎用入出力(B8) | 10 | T8 | 汎用入出力(B9) |
11 | R8 | 汎用入出力(B10) | 12 | T11 | 汎用入出力(B11) |
13 | T9 | 汎用入出力(B12) | 14 | R11 | 汎用入出力(B13) |
15 | P11 | 汎用入出力(B14) | 16 | N10 | 汎用入出力(B15) |
17 | | 3.3V電源 | 18 | | 3.3V電源 |
19 | U5 | 汎用入出力(B16) | 20 | V5 | 汎用入出力(B17) |
21 | T5 | 汎用入出力(B18) | 22 | U7 | 汎用入出力(B19) |
23 | V7 | 汎用入出力(B20) | 24 | U8 | 汎用入出力(B21) |
25 | V8 | 汎用入出力(B22) | 26 | V9 | 汎用入出力(B23) |
27 | | GND | 28 | | GND |
29 | U10 | 汎用入出力(B24) | 30 | V10 | 汎用入出力(B25) |
31 | V11 | 汎用入出力(B26) | 32 | U11 | 汎用入出力(B27) |
33 | U13 | 汎用入出力(B28) | 34 | V13 | 汎用入出力(B29) |
35 | U15 | 汎用入出力(B30) | 36 | V15 | 汎用入出力(B31) |
37 | U16 | 汎用入出力(B32) | 38 | V16 | 汎用入出力(B33) |
39 | R10 | 汎用入出力(B34) | 40 | T10 | 汎用入出力(B35) |
[top]
[電子工作関連に戻る]