FPGAをはじめる

FPGA(Field Programmable Gate Array)は書き換えが可能であることが最大の特徴でハードウェア言語HDLで内部回路の記述をおこないます。
製品開発では大量生産のしやすいASICを用いるのが一般的ですが一度書き込むと回路の変更ができないため学習には向いていません。
その点FPGAは書き換えが可能なのでHDLや論理回路の学習に役立つのではないかと思います。

FPGA開発に必要なもの

FPGA開発に当たって必要なものは

この二つです。FPGAには種類がたくさんあります。さらにそれを搭載した評価ボードも何種類もあります。 FPGAは主流なものとしてXilinx社製とAltera社製があり、どこ製のFPGAを使用するかで開発環境は変わってくるので気をつけてください。
ここではXilinx社製のFPGAを搭載したDigilent社製の評価ボードを使用して説明していきます。

改めて用意するものはこちらです。

ISE Design SuiteがあればXilinx社製FPGAを搭載したボードは同様に開発できます。

ISEのインストール

まずは開発環境をインストールします。Xilinx Xilinx社のISEWebPACKダウンロードのページからISEをダウンロードします。

ダウンロードにはXilinxのアカウント登録が必要になるので登録してダウンロードしてください。

FPGAの開発

開発の手順を説明していきます。 はじめにISEを起動します。 起動するとスタート画面になるのでメニューから[File]→[NewProject]を選択しプロジェクトを作成します。

スタート画面

プロジェクトウィザードが起動するのでプロジェクト名を設定して[Next]を押します。

新規プロジェクト

デバイスの設定画面に移るので使用しているFPGAの種類を入力します。手元のボードがAtlysでないは場合仕様書を読んでFPGAの種類を確認してください。
[Family] [Device] [Package] を該当するものに変更します。
また、今回は言語としてVerilogを使用するので[Preterred Language]をVerilogに変更します。
変更したら[Next]を押します。

新規プロジェクト

設定の確認なので[Finish]を押してプロジェクトの作成を終了します。

新規プロジェクト

次に動作を記述するソースファイルを作成します。
メニューから[File]→[New]→[Text File]を選択すると空のファイルが作成されます。

空のファイル

空のファイルに以下のソースを入力して保存します。保存するときはverilogファイルの拡張子「.v」を選択します。


module test(
	input CLK,
	output LED
	);

reg [26:0] count;
reg T1s;
reg toggle;

always@(posedge CLK)begin
	if(count == 27'd99999999)
		begin
			count <= 27'd0;
			T1s <= 1'b1;
		end
	else
		begin
			count <= count + 27'd1;
			T1s <= 1'b0;
		end
end

always@(posedge T1s)begin
	toggle <= ~toggle;
end

assign LED = toggle;

endmodule

保存が完了したらProcessesペイン内の[Synthesize-XST]をダブルクリックして文法チェックを行います。

Synthesize-XST

次に配線を記述するソースファイルを作成します。先ほどと同様に[File]→[New]→[Text File]を選択し、空のファイルを作成します。

空のファイルに以下のソースを入力して保存します。保存するときはucfファイルの拡張子「.ucf」を選択します。
このファイルは配線ファイルなのでボード特有のソースになります。ボードの仕様書を読んでソースコードの番号を変えてください。 (入力の水晶発振子と出力のLEDをFPGAから配線しています。)


NET "CLK" LOC = L15;
NET "LED" LOC = U18;

Processesペイン内の[Implement Design]をダブルクリックして配線チェックを行います。問題がなければ緑のチェックマークが付きます。

さらに[Generate Programming File]をダブルクリックしてFPGAに書き込むファイルを生成します。成功すれば緑のチェックマークが付きます。

bitファイル生成

最後はFPGAに書き込む作業です。

FPGAとパソコンを付属のUSBケーブルで接続してAtlysの電源を入れます。 接続したら左下の[configure Target Device]を開いて[Manage Configuration Project]をダブルクリックします。ISEiMPACTが起動します。

iseインパクトの起動

ウィンドウ左上のiMPACT Flowsペイン内の[Boundary Scan]をダブルクリックします。その後メニューから[File]→[Initialize Chain]を選択します。 これでデバイスとの接続が完了しました。

iseインパクト

ダイアログが表示され、書き込むファイルの選択を聞いてくるので[Yes]を押します。

iseインパクトダイアログ1

FPGAに書き込むファイルの選択します。[Generate Programming File]によって先ほどの プロジェクトの中に[.bit]という拡張子のファイルができているのでそのファイルを選択し、[open]を押します。

iseインパクトファイル選択

ダイアログが表示されPROMの搭載を確認してくるので[No]を押します。

iseインパクトダイアログ2

デバイスのプロパティが開かれるので[OK]を押して終了します。

iseインパクトデバイスプロパティ

最後にiMPACT Processesペイン内の[Program]をダブルクリックするとFPGAにプログラムが書き込まれ動き出します。1秒毎に消灯と点灯が切り替わっていれば成功です。 1秒毎になっていない場合は水晶発振子の周波数が違う可能性があります。

文法について

製作物にverilog-HDL簡易文法書があるのでもっといろいろ動かしてみたい人はそれを参考にしてみてください。