まずは、どんなモンか感じをつかむため、プログラミング言語でいうところの「Hello World」を表示するプログラムを作成したいと思います。
で、調査したところ、FPGAでやる場合は、「LCDコントローラ」を書く必要があるようで、「文字の表示」の難度は高いようです。
そこで、「LEDを光らせる」というプログラムを書いてみようかと思います。これが、一番の入門プログラムらしいので。
※下記は、「組込みプレス Vol.4」の「特集2 FPGA基礎」という記事を参考にさせていただきました。
1,新規プロジェクト作成
まず、ISEを起動してください。
そして、起動後、[File] → [New Project] とクリックします。
1-1,[Create New Project]ウィンドウ
下記の値を好きなように入力してください。
Project Name
Project Location
Top-Level Source Type:HDL
1-2,[Device Properties]ウィンドウ
デバイスの設定情報を設定します。Spartan-3Eでは、下記のような値を入力します。
Product Category:ALL
Family:spartan3e
Device:xc3s500e
Package:fg320
Speed:-4
Top-Level Source Type:HDL
Synthesis Tool:XST(VHDL/Verilog)
Simulator:ISE Simulator(VHDL/Verilog)
Enable Enhanced Design Summary:チェック
1-3,[Select Source Type]ウィンドウ
ソースファイルを作成します。ファイル名は、お好きなもので構いません。
Verilog Moduleを選択
File name:sw_led
1-4,[Define Module]ウィンドウ
ポートの入出力設定をします。下記のようにしてください。
・一行目
Port Name:led
Direction:output
・二行目
Port Name:sw
Direction:input
1-5,[Add Existing Sources]ウィンドウ
追加ソースがあれば、指定しますが、今回はナシでOKです。
1-6,終了
[Finish]をクリックします。
その後、[Adding Source Files]ウィンドウが出現しますが、[OK]をクリックします。
以上で、新規プロジェクト作成が終了です。
つづいて、プログラミングを行います。
2,プログラム作成
左上の[Sources]ウィンドウにある、上記で作成したファイルをダブルクリックします。
そうすると、ソースファイルが変更可能状態となります。
コメントを抜いた4行目に、下記コードを記述します。swの状態をled1の状態にするという記述です。
assign led1 = sw;
以上で、プログラミング終了です。(;^_^A アセアセ・・・
つづいて、配線を行います。どうやら、FPGAでのキモとなる部分のようです。
3,配線ファイルの作成
「1-4,[Define Module]」で、指定したものを具体的に配置します。
3-1,[Select Source Type]ウィンドウ
左上のWindow[Sources] にある、上記で作成したファイル上で、右クリック → [New source]をクリックします。
[Select Source Type]ウィンドウが、出現しますので、下記のようにします。
Implementation Constraints Fileを選択
File name:sw_led
3-2,[Associate Source]ウィンドウ
右クリックで選択したファイルがあることを確認して、[Finish]をクリックします。
そうすると、[Sources]ウィンドウ に、ucfファイルが追加されます。
3-3,[Xilinx PACE]ウィンドウ
上記で作成したucfファイルを選択すると、左下の[Processes]ウィンドウの内容が変わります。
その中の [User Constraints] → [Assign Package Pins]をダブルクリックします。
そうすると、[Xilinx PACE]という新しいウィンドウが開らきます。
これは、I/O(ピン配置)を設定できるツールとなります。
3-3-1,[Design Object List]ウィンドウ
[Design Object List]ウィンドウに、「1-4,[[Define Module]」で指定したデバイスがあるはずです。
そこの[Loc] に、下記のように入力します。
led1 = F12
sw = L13
3-3-2,[Save]する
[File] → [Save]で、セーブを行います。
このときに、[Bus Delimiter]ウィンドウが出現しますので、下記の設定で[Finish]をクリックします。
[Symplify Verilog Default:[]]
以上で、[Xilinx PACE]ウィンドウを終了します。
3-4,[Processes]ウィンドウ
[Sources]ウィンドウの[sw_led.v]ファイルをクリックします。
そうすると、[Processes]ウィンドウの内容が変更され、[Implement Design] に、オレンジ色の「?」がついているはずです。
※よくわかりませんが、設定が反映されないことがあるようです。そのときは、ISEを再起動してみてください。
このオレンジ色の「?」をダブルクリックします。
そうすると、配線が自動で作成されます。
4,回路作成
FPGAへ送るための配線データファイル(ビットファイル)を作成します。
4-1,[Generate Programming File]ウィンドウ
[Processes]ウィンドウの[Generate Programming File] → 右クリック → [Properties]をクリックします。
[Process Properties] ウィンドウが出現しますので、下記のようにし、[OK]をクリックします。
[Readback Oprions]内の
[Create ReadBack Data Files] チェック
[Create Mask File] チェック
4-2,データ生成
[Processes]ウィンドウの[Generate Programming File] を、ダブルクリックします。
以上で、論理合成などが生成されます。
4-3,ボード接続
ここまで終了したら、ボードを接続してください。これ以降は、ボードがないと動作しません。
4-4,[iMPACT]ウィンドウ
[Generate Programming File] → [Configure Device (iMPACT)] を、ダブルクリックします。
[iMPACT]ウィンドウが出現しますので、下記を選択して、[Finish]をクリックします。
[Configure devices using Boundary-Scan]
Automatically connect to a cable and idenify Boundary-Scan chain
以上で、コンパイルが始まりますが、数十分かかるので、覚悟の上でクリックしてください。
4-5,[Assign New Configuration File]ウィンドウ
「4-4」が終了すると、[Assign New Configuration File]ウィンドウが出現しますので、[sw_led.bit]を選択して、[Open]をクリックします。
その後、このウィンドウを終了します。
※「4-4」操作をしてから、この画面が出るまで、数十分くらいかかります。
4-6,[Programming Properties]ウィンドウ
[Boundary Scan]ウィンドウの[xc3s500e]を右クリックして、[Programming Properties]をクリックします。
[Programming Properties]ウィンドウが出現したら、何も変更せずに、[OK]をクリックします。
[Boundary Scan]ウィンドウに、「Program Successed」と表示されたら成功です。
以上で、データがボードに転送されます。
あとは、ボード上のsw0スイッチを操作するとLEDが点灯/消灯します。
以上、終了です。