XilinxのSpartan-3AN スタータ キットをゲットしました。
開発言語はVHDLです。
なぜかダウンロードケーブルも。
使うことはあるのだろうか・・・
スポンサーリンク
ゲットした当日にはPROMに書き込むまでいってみました。
ただ、相当苦労したので覚え書きしときます。
これから研究で1年以上使っていく予定なので覚えないわけにはいけません。
なぜか新しいバージョンのISEでの説明がネットになかったんですよね・・・
目次
ISEのダウンロード&インストール&ライセンスの取得
これは基本中の基本。
ダウンロードとインストールはすぐにできました。
ライセンスの取得も調べるとすぐに出てきますので、そこまで苦労することはないです。
ISEの起動と新しいプロジェクトの作成
ISEを起動するとこんな画面が現れるはずです。
そして[New Project...]をクリック。
こんな画面が出てくるので、プロジェクトの名前とかを適当に埋めていきます。
今回の名前は「test」にしました。
今回はVHDLで書くので一番下はHDLになっています。
埋めたら[Next]を押します。
次の画面では[Evaluation Development Board]の項目で「Spartan-3AN Starter Kit」を選択します。
他は触らなくていいと思います。
そしてまた[Next]を押します。
その次に「Project Summary」という画面が出てきますが、何も気にせず[Finish]を押します。
これで新しいプロジェクトの作成は完了です。
VHDLファイルとUCFファイルの作成
VHDLファイル
VHDLファイルを作成するには左上の囲ってあるアイコン[New Source]をクリックします。
このアイコンをクリックしたら「Select Source Type」という画面が出てきます。
「VHDL Module」を選択して、名前を適当に決めて、[Next]をクリックします。
Verilogなら「Verilog Mudule」を選択します。
「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」をダブルクリックします。
結構時間がかかると思いますが、成功すると思います。
WARNINGが出る場合は気にしなくていいですが、ERRORが出るの場合は直す必要がありますので何度も見直してみてください。
FPGAにプログラムを書き込む
まず、左下のメニューの「Configure Target Device」をダブルクリックします。
何か警告が出ると思いますが、気にせず[OK]をクリックします。
スポンサーリンク
出てきたウィンドウの左上にあるメニューから「Boundary Scan」をクリックします。
次に白くなった右側のエリアで右クリックし、メニューから[Initialize Chain]を選択します。
ちゃんとUSBが接続されていると、次のような画面になると思います。
ここで[OK]を押し、.bitファイルを選択します。(今回はtest.bit)
選択すると、左のICのアイコンが緑色になると思います。
そしてまた同じ選択画面が出ますが、このときは何も選択せずに[Bypass]をクリックします。
次にプロパティが出ますが、そのまま[OK]をクリックします。
「xc3s700an」を右クリックすると、メニューに「Program FPGA only」という項目があると思うのでこれをクリックすれば、FPGAへの書き込みが完了します。
画像を見ると分かると思いますが、左下のメニューにも「PRogmram FPGA only」の項目があるので、そこをダブルクリックしても書き込むことができます。
PROMにプログラムを書き込む
前項で説明したのはFPGAのRAMに書き込む方法です。
このままでは、電源を切ってしまうとプログラムが消えてしまいます。
前項と同じウィンドウの左上のメニューの「Create PROM File (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」を押します。
今のところの画面はこのようになっていると思います。
ここで左下のメニューの「Generate File」をダブルクリックします。
すると「Genarate Succeeded」と右下の方に出ると思います。
出たら、「Boundary Scan」のタブに戻ります。
右側の「xcf04s」を選択し、右クリックでメニューを開きます。
そのメニューから[Assign New Configuration File...]を選択します。
選択画面が出たら、.mcsを選択します。(今回はtest.mcs)
選択して元の画面に戻ったら、もう一度「xcf04s」を選択し、右クリックでメニューを開きます。
そこから[Program]を選択することで、PROMへの書き込むが完了します。
前項と同様に左下のメニューにも[Program]はあります。
書き込みができなかったら、ボードのジャンパピンを一度見てみてください。
私は一番上の画像のようになっている場合でしか、書き込みを確認できていません。
やっと一通りできるようになったので、次はシミュレータの操作方法なんかを紹介していきたいと思います。
ADCも動かさないとなあ・・・
スポンサーリンク
Leave a Comment