2011年11月24日木曜日

Spartan 3E Starter Kit 最初の一歩


by yosikawa » 2011年2月12日(土) 15:43
さてさて、Spartan 3E Starter Kit を使って遊びながら勉強を進めます。

Spartan 3E Starter Kit はいろんな機能がてんこ盛りで、FPGAやメモリの容量も十分なので当分は不自由しないでしょう。
こんな高機能なボードが2万円以下で買えるとは、本当にお買い得感があります。(私は3Eを買ってしまったが、3Aの方がいい)
これから始めようと言う人にはお勧めです。
クレジットカードとメールアドレスさえ持っていれば、digilentのサイトから簡単に購入できます。
英語が苦手な人は、"check out" (レジに進む)とか送り先住所の入力とか、多少は戸惑うでしょうけど、
まぁ簡単でしょう。

パッケージの中身は、
  • ボード本体
  • ACアダプタ
  • USBケーブル
  • Invoice (送り状)
以上。なんとなんと、マニュアルすらなし。

とりあえず、マニュアルと、サンプルをダウンロードする。
digilent
https://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,792&Prod=S3EBOARD
Xilinx
http://www.xilinx.com/products/boards/s3estarter/reference_designs.htm

買った後でリンク切れにされたら嫌だから、一通り全部ダウンロードして取っておくことにした。

さて、ACアダプタをつなぐ。
。。。。うんともすんとも言わないではないか。

。。。良く見たら左上に電源スイッチがある。なんとスイッチまで付いてるとは至れり尽くせりのボードだな。
スイッチオン。液晶にメッセージが表示された。ロータリスイッチを回すとLEDで左右に流れるように光る。
よしよし。ちゃんと動いている。
ロータリスイッチを押しこむと、モードが切り替わってスイッチのON/OFFがLEDに表示されるようになる。
4つのスライドスイッチと、4つのプッシュスイッチの計8個に対応して、8個のLEDが点滅する。

デモを確認したところで、自分でテストアプリを作ってみる。
まずは、プッシュスイッチを押したらLEDが点灯する、という簡単なもので動作確認します。
xilinxのサイトから、ISE Webpackをダウンロードし、インストールします。
http://www.xilinx.com/tools/webpack.htm
インストール方法は省略。他のサイトで詳しく説明されているし。
今回使用したISEのバージョンは 10.1.03
少し古いバージョンだが、以前購入したEDX-002を使うにはこのバージョンでなければならないため。
Spartan 3E Starter Kit しか使わないのであれば、単に最新版をインストールした方が良いだろう。

ISEを起動し、File->New Projectを選択。
プロジェクト名はT1_LED1としよう。ディレクトリを適当に入力してNext
デバイス情報の入力でいつも少し悩む。Speedのところだけ分からない。-4と-5があるが、どちらだろう?
分からないけど、-5にしてみた。Next
以降の画面はデフォルトのまま進める。
2011/2/13 追記: Speed は -4 らしい。

コード: 
Project:
    Project Name: T1_LED1
    Project Path: C:\WORK\FPGA\Spartan-3E\T1_LED1
    Top Level Source Type: HDL

Device:
    Device Family: Spartan3E
    Device:        xc3s500e
    Package:       fg320
    Speed:         -5

    Synthesis Tool: XST (VHDL/Verilog)
    Simulator: ISE Simulator (VHDL/Verilog)
    Preferred Language: Verilog

    Enhanced Design Summary: enabled
    Message Filtering: enabled
    Display Incremental Messages: disabled

以上のように入力した。開発言語を VHDL にするか、Verilog にするか、選択しなければならない。
もちろん後から乗り換えもできるけど、最初に選んだ言語はよく慣れ親しんで上手になっていくに違いないので、
初心者にいきなり難しい選択を迫られる。
以下の点から、Verilogを選択することにした。
  • 見た目の印象で、verilogの方が普通のプログラム言語と似ていて私のようなソフト屋に向いてるような気がする。
  • システムLSIの開発ではVerilogが良く使われているらしい。大規模な回路に向いているということか?
  • Veritakという低価格なシミュレータは、verilogに対応している。作者によると、verilogのシミュレーションの方が高速になるそうだ。

さて、トップモジュールを作成する。
Project->New Source
ファイルの種類として Verilog Moduleを選択、ファイル名はtopとする。
ファイル名はなんでも入力できるが、自動的に作られるコードのひな型が、ファイル名に基づいて作られるので、
verilogの名称ルールに従う方がいい。英字始りで、英数字とアンダーパーが使える。test-1はNG。test_1ならOK。
残りのウィザードはデフォルトで進める。

以下のコードを入力する。
コード: 
`timescale 1ns / 1ps
`default_nettype none
module top(btn, led);

   input wire btn;         // プッシュスイッチ
   output wire led;         // LED
   assign led = btn;

endmodule

スイッチを押したらLEDが点灯する。簡単そのもの。
ロジック回路では、アクティブ・ハイとアクティブ・ローがある。
信号がアクティブ(有効な状態)になったとき、ハイ(数字の1)になるのがアクティブ・ハイ。
このボードはほとんどの信号がアクティブ・ハイなので分かりやすい。
つまり、ボタンを押したらbtnが1になり、ledを1にすることでLEDが点灯する。

次に、ピンアサインを定義する。これをしないとFPGAの外部の回路と接続されない。
Project->New Source
ファイルの種類として Implementation Constraints File を選択、ファイル名はtopとする。
Sourcesペインでtop.vを展開してtop.ucfを選択。
ProcessesペインでUser Constraintsを展開してEdit constraintsをダブルクリックする。
top.ucfが開く。以下を入力する。

コード: 
# 右端のLED
NET "led" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;
# ロータリスイッチの下のボタン
NET "btn" LOC = "K17" | IOSTANDARD = LVTTL | PULLDOWN;


ctrl-sで保存する。
これで完成。コンパイルする。
Sourcesペインでtop.vを選択。
ProcessesペインでSynthesize - XST をダブルクリックする。
緑のチェックマークのアイコンに変わったら、エラー・警告なしで成功。

bitファイルを作成する。
Sourcesペインでtop.vを選択。
ProcessesペインでGenerate Programming File をダブルクリックする。
緑のチェックマークのアイコンに変わったら、エラー・警告なしで成功。

これでプロジェクトフォルダの下にtop.bitというファイルができる。
これがwindowsのexeファイルのようなもので、ハードウェアで実行可能なバイナリデータだ。

ではデバイスに書き込むために、パソコンにUSBケーブルを接続する。
接続する前に、iMPACT というツールをPCにインストールしておく必要がある。
ただしこれは、ISEに含まれているので既にインストール済みだ。
初めて接続すると、プラグアンドプレイで認識され、ドライバがインストールされる。

では書き込みツールであるiMPACTを起動する。
Sourcesペインでtop.vを選択。
ProcessesペインでConfigure Target Device を展開、Manage configuration Project(iMPACT) をダブルクリックする。

iMPACTのウィザードが始まる。
デフォルトで選択されている、JTAGのまま、プルダウンもデフォルトのAutomatically...のまま、finishをクリックする。
ボード上の3つのチップが自動認識された。JTAGチェインという仕組みによるものだ。
JTAGチェインの最初のチップが、FPGAであるxc3s500eだ。
これに書き込むファイルを聞いてくるので、先ほど作成したtop.bitを選択する。Open。
次に他のチップが選択状態になり、これらのチップに書き込むファイルを聞いてくるが、何も書かないのでBypass。
もう一度Bypass。
パラメータを入力する画面になるが、そのままOK。

では書き込みを開始する。
xc3s500eをクリックして、緑色表示にする。
ProcessesペインでProgramをダブルクリックする。

書き込み完了。書き込むと、ボードはすぐに動き出す。
ロータリスイッチのすぐ下のボタンを押してみる。LEDが点灯するはずだ。

これが基本的な流れだが、最後のiMPACTで書き込みをする手順は、バッチモードで書き込んだ方が素早くできる。
そこでバッチファイルを作成する。プロジェクトフォルダの中に 「書き込み.bat」というファイルを作成する。
以下の内容を書く。

コード: 
REM ##########################################################################
REM # This will create the iMPACT CMD file and then run iMPACT to program    #    
REM #    the Spartan-3E device on the Starter Kit board.                     #
REM ##########################################################################
@echo setMode -bscan                                      > impact_batch_commands.cmd
@echo setCable -p auto                                   >> impact_batch_commands.cmd
@echo addDevice -position 1 -file .\top.bit              >> impact_batch_commands.cmd
@echo addDevice -position 2 -part "xcf04s"               >> impact_batch_commands.cmd
@echo addDevice -position 2 -part "xcf04s"               >> impact_batch_commands.cmd
@echo ReadIdcode -p 1                                    >> impact_batch_commands.cmd
@echo program -p 1                                       >> impact_batch_commands.cmd
@echo quit                                               >> impact_batch_commands.cmd
impact -batch impact_batch_commands.cmd


実は詳しくはまだ調べてないので分からないが、このように書いておくと、
このバッチファイルと同じフォルダにあるtop.bitというファイルを書き込む。
bitファイルの名前をいつも同じ名前にしておけば、このバッチファイルを変更する必要はなく、使いまわせる。

試してみよう。ボードの電源を一旦OFFにして、再びONにする。
ボード搭載のPROMから起動するので、またデモが動き始めた。
「書き込み.bat」をダブルクリックする。
よしよし、デモが止まって今回作成したLED点灯アプリが動いた。




by yosikawa » 2011年2月13日(日) 15:10

0 件のコメント:

コメントを投稿