Xilinx Spartan-3AN スタータ キットの覚え書き

No Image

XilinxのSpartan-3AN スタータ キットをゲットしました。
開発言語はVHDLです。
なぜかダウンロードケーブルも。
使うことはあるのだろうか・・・

Xilinx Spartan-3AN スタータ キットの覚え書き

スポンサーリンク


Spartan-3AN スタータ キット
ダウンロードケーブル

ゲットした当日にはPROMに書き込むまでいってみました。
ただ、相当苦労したので覚え書きしときます。
これから研究で1年以上使っていく予定なので覚えないわけにはいけません。
なぜか新しいバージョンのISEでの説明がネットになかったんですよね・・・

ISEのダウンロード&インストール&ライセンスの取得

これは基本中の基本。
ダウンロードとインストールはすぐにできました。

ライセンスの取得も調べるとすぐに出てきますので、そこまで苦労することはないです。

ISEの起動と新しいプロジェクトの作成

ISEを起動するとこんな画面が現れるはずです。
ISE スタート画面
そして[New Project…]をクリック。
Creat New Project
こんな画面が出てくるので、プロジェクトの名前とかを適当に埋めていきます。
今回の名前は「test」にしました。
今回はVHDLで書くので一番下はHDLになっています。
埋めたら[Next]を押します。

次の画面では[Evaluation Development Board]の項目で「Spartan-3AN Starter Kit」を選択します。
Project Setting
他は触らなくていいと思います。
そしてまた[Next]を押します。

その次に「Project Summary」という画面が出てきますが、何も気にせず[Finish]を押します。
これで新しいプロジェクトの作成は完了です。

VHDLファイルとUCFファイルの作成

VHDLファイル

VHDLファイルを作成するには左上の囲ってあるアイコン[New Source]をクリックします。
プロジェクト作成完了

このアイコンをクリックしたら「Select Source Type」という画面が出てきます。
Slect Source Type
「VHDL Module」を選択して、名前を適当に決めて、[Next]をクリックします。
Verilogなら「Verilog Mudule」を選択します。

Define Module
「Define Module」という画面が出てきますが、先に入出力を特に決めていないなら入力しなくていいです。
そして[Next]をクリック。

「Summary」という画面では気にせず[Finish]をクリックします。
これで、やっとコードを書く準備が整いました。

終わったら既に何か書いていると思いますが、普通に書いていったらいいです。

UCFファイル

ピン配置を定義する(?)ファイルです。
GUIのもあるそうですが。

作成するには[xc3s800an-4fgg484]または[test – Behavioral (test.vhd)]を右クリック。
メニューが出るので「New Source」をクリックします。
VHDLファイルの作成時と同じ画面が出てきたと思いますが、そこで今回は「Implementation Constraints File」を選択して、名前を適当に決めて、[Next]をクリックします。

次の画面では[Finish]をクリックします。

VHDLとUCFの記述、コンパイル

今回は動作確認をしたいのでVHDLはこんな感じに書いてみました。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity test is
    Port ( CLK : in  std_logic;
           LED : out std_logic_vector(7 downto 0));
end test;

architecture Behavioral of test is

signal DFF_24 : std_logic_vector(23 downto 0);
signal DFF_4 : std_logic_vector(3 downto 0);

begin
  process(CLK)
  begin
    if (CLK'event and CLK = '1') then
      DFF_24 <= DFF_24 + '1';
    end if;
  end process;

  process(DFF_24(23))
  begin
    if (DFF_24(23)'event and DFF_24(23) = '1') then
      DFF_4 <= DFF_4 + '1';
       case DFF_4 is
         when "0000" => LED <= "00000001";
         when "0001" => LED <= "00000010";
         when "0010" => LED <= "00000100";
         when "0011" => LED <= "00001000";
         when "0100" => LED <= "00010000";
         when "0101" => LED <= "00100000";
         when "0110" => LED <= "01000000";
         when "0111" => LED <= "10000000";
         when "1000" => LED <= "10000000";
         when "1001" => LED <= "01000000";
         when "1010" => LED <= "00100000";
         when "1011" => LED <= "00010000";
         when "1100" => LED <= "00001000";
         when "1101" => LED <= "00000100";
         when "1110" => LED <= "00000010";
         when "1111" => LED <= "00000001";
         when others => LED <= "XXXXXXXX";
      end case;
    end if;
  end process;
end Behavioral;

LEDが左右に行ったり来たりするだけのプログラムです。
もっと短いプログラムでもいいけど、なんとなく・・・。
クロックが50MHzってのを忘れてて、結構悩んだのは秘密。

これに対応するUCFは次のようになります。

NET "LED<7>" LOC = "W21" | IOSTANDARD = LVTTL | SLEW = QUIETIO | DRIVE = 4 ;
NET "LED<6>" LOC = "Y22" | IOSTANDARD = LVTTL | SLEW = QUIETIO | DRIVE = 4 ;
NET "LED<5>" LOC = "V20" | IOSTANDARD = LVTTL | SLEW = QUIETIO | DRIVE = 4 ;
NET "LED<4>" LOC = "V19" | IOSTANDARD = LVTTL | SLEW = QUIETIO | DRIVE = 4 ;
NET "LED<3>" LOC = "U19" | IOSTANDARD = LVTTL | SLEW = QUIETIO | DRIVE = 4 ;
NET "LED<2>" LOC = "U20" | IOSTANDARD = LVTTL | SLEW = QUIETIO | DRIVE = 4 ;
NET "LED<1>" LOC = "T19" | IOSTANDARD = LVTTL | SLEW = QUIETIO | DRIVE = 4 ;
NET "LED<0>" LOC = "R20" | IOSTANDARD = LVTTL | SLEW = QUIETIO | DRIVE = 4 ;

NET "CLK" LOC = "E12" | IOSTANDARD = LVCMOS33 ;

これはユーザガイドに書いてあるので参考にしてください。
UCF制約というやつです。

プログラムファイルの作成

ひと通り書き終わったら保存して、左下のメニューの「Generate Programming File」をダブルクリックします。
もし個別にコンパイルしたいときは、VHDLは「Synthesize – XST」を、UCFだと「Implement Design」をダブルクリックします。
Generate Programming File

結構時間がかかると思いますが、成功すると思います。
WARNINGが出る場合は気にしなくていいですが、ERRORが出るの場合は直す必要がありますので何度も見直してみてください。

FPGAにプログラムを書き込む

まず、左下のメニューの「Configure Target Device」をダブルクリックします。
何か警告が出ると思いますが、気にせず[OK]をクリックします。

出てきたウィンドウの左上にあるメニューから「Boundary Scan」をクリックします。
次に白くなった右側のエリアで右クリックし、メニューから[Initialize Chain]を選択します。
Initialize Chain

ちゃんとUSBが接続されていると、次のような画面になると思います。
xc3s700an bit
ここで[OK]を押し、.bitファイルを選択します。(今回はtest.bit)

選択すると、左のICのアイコンが緑色になると思います。
そしてまた同じ選択画面が出ますが、このときは何も選択せずに[Bypass]をクリックします。
次にプロパティが出ますが、そのまま[OK]をクリックします。

「xc3s700an」を右クリックすると、メニューに「Program FPGA only」という項目があると思うのでこれをクリックすれば、FPGAへの書き込みが完了します。
画像を見ると分かると思いますが、左下のメニューにも「PRogmram FPGA only」の項目があるので、そこをダブルクリックしても書き込むことができます。
Program FPGA

PROMにプログラムを書き込む

前項で説明したのはFPGAのRAMに書き込む方法です。
このままでは、電源を切ってしまうとプログラムが消えてしまいます。

前項と同じウィンドウの左上のメニューの「Create PROM File (PROM File Formatter)」という項目をクリックすると以下のような画面が出てくると思います。
PROM File Formatter

Step1では[Xilinx Flash/PROM]を選択し、「→」をクリックします。
Step2では「PROM Family」は[PROM Platform Flash]、「Device (bits)」は[xcf04s [4M]]を選択します。
次に、[Add Storage Device]をクリックし、「→」をクリックします。
Step3では「Output File Name」を適当に変更します。
「Output File Location」は作業フォルダでいいと思います。
他は変更せずそのままにして[OK]をクリックします。

すると「Start adding device…」とかかれたダイアログが出ますが、気にせず「OK」を押します。
次に、選択画面が出ますので、.bitファイルを選択します。(今回はtest.bit)
また「Would you like to…」とかかれたダイアログが出ますが、ここでは[No]をクリックします。
その次にもダイアログが出ますが「OK」を押します。

今のところの画面はこのようになっていると思います。
mcs genarate
ここで左下のメニューの「Generate File」をダブルクリックします。
すると「Genarate Succeeded」と右下の方に出ると思います。
出たら、「Boundary Scan」のタブに戻ります。

Assign New Configuration File
右側の「xcf04s」を選択し、右クリックでメニューを開きます。
そのメニューから[Assign New Configuration File…]を選択します。
選択画面が出たら、.mcsを選択します。(今回はtest.mcs)
選択して元の画面に戻ったら、もう一度「xcf04s」を選択し、右クリックでメニューを開きます。
そこから[Program]を選択することで、PROMへの書き込むが完了します。
前項と同様に左下のメニューにも[Program]はあります。


書き込みができなかったら、ボードのジャンパピンを一度見てみてください。
私は一番上の画像のようになっている場合でしか、書き込みを確認できていません。

やっと一通りできるようになったので、次はシミュレータの操作方法なんかを紹介していきたいと思います。
ADCも動かさないとなあ・・・

Xilinx Spartan-3AN スタータ キットの覚え書き

スポンサーリンク

Leave a Comment