Spartan-6 LX9 MicroBoard で未経験者シンプルHDLお試し
お安いFPGAボード Avnet Spartan-6 LX9 MicroBoard を遊びで購入したが、AvnetのチュートリアルはFPGA未経験の私にとって良く判らん。
可能な限りシンプルなやり方でFPGAを動かしてみたい。
で、そのやり方。
※ツッコンでください。
※USBのドライバとかは入っている前提。
1. ISE Project Navigatorを起動する
2. File > New Project
ウィザードで以下を入力
Name :Test1
Location :適当\Test1
Working Directory:Locationと同じ
Top-level source type::HDL
Nextクリック
Project Setting
Evaluation Development Board :Avnet Spartan-6 LX9 MicroBoard
※「Avnet Spartan-6 LX9 MicroBoard」が出てこない場合は、Avnetの
Support and Downloadページの「EDK 13.2 XBD/IP-XACT files」を
入れると出てきます。
Preterred Language :Verilog
Next
Finish
3. ソースファイルを作る
Project > New Source
Verilog Module
File name:DECODER.v
Next
Define Module
未入力でOK
Next
Finish
DECODER.vのソースは以下。
module DECODER(A,B,C,D,Y); input A,B,C,D; output [3:0] Y; reg [3:0] Y; always @(A or B or C or D) begin case({A,B,C,D}) 4'b0000:Y=4'b0000; 4'b0001:Y=4'b0001; 4'b0010:Y=4'b0010; 4'b0011:Y=4'b0011; 4'b0100:Y=4'b0100; 4'b0101:Y=4'b0101; 4'b0110:Y=4'b0110; 4'b0111:Y=4'b0111; 4'b1000:Y=4'b1000; 4'b1001:Y=4'b1001; 4'b1010:Y=4'b1010; 4'b1011:Y=4'b1011; 4'b1100:Y=4'b1100; 4'b1101:Y=4'b1101; 4'b1110:Y=4'b1110; 4'b1111:Y=4'b1111; default:Y=4'bxxxx; endcase end endmodule
次はポート定義的なもの
Project > New Source
Implimentation Constraints File
File name:DECODER.ucf
DECODER.ucfは以下。
NET A LOC = "B3"; NET B LOC = "A3"; NET C LOC = "B4"; NET D LOC = "A4"; NET Y[0] LOC = "P4"; NET Y[1] LOC = "L6"; NET Y[2] LOC = "F5"; NET Y[3] LOC = "C2";
4. 論理合成など
HierarchyでDECODER.vを選択
Generate Target DeviceConfigure Target Deviceをダブルクリック
(で、DECODER.vを再保存してもう一度Generate Target DeviceConfigure Target DeviceしないとFPGAでなぜか動かいない。初回だけ)
※2012/9/9 Generate Target Device から Configure Target Device に訂正(日曜プログラマさんからの指摘で訂正)
5. LX9に転送する
Tools > iMPACT
ProjectFileが無い的なワーニングダイアログが表示される。
OK
左上のBoundary Scanをダブクリ。
ウィンドウ右で右クリック Add Xilinx Device を選択。
decoder.bit を選択。
LX9のチップ画像をクリック。
LX9をPCに接続(おっきい方のUSBだけでOK)。
左中央の Program をダブクリ。
Device Programing Properties ダイアログが表示される。
OK
6. 動かしてみる
DipSwitchのOnOffでLEDが光る。
基本的にICEで論理合成して?iMPACTでFPGAにダウンロードする?感じ。
Avnetのチュートリアルでは色々なツールが登場してしまい良く判らない状態になりますが、上記の様なシンプル構成の方が初心者には優しいです。