2015年2月16日月曜日

ubuntuからminiSpartan6+にテストプログラムを送信する


ScarabHardwareでminiSpartan6+を買いました。
LEDのカウントアッププログラムを動作させるまでが思ったとおり大変だったので、備忘録も兼ねて共有します。

全体像

全体の流れはGetting StartedMiniSpartan6+ bringupを参考にしました。
  1. xc3sprogをインストールする
  2. iseをインストールする
  3. iseでプロジェクトを作成する
  4. iseで必要なファイルを作成する
  5. iseでプロジェクトからbitファイルを作成する
  6. xc3sprogでbitファイルをminiSpartan6+に送信する

xc3sprogをインストールする

xc3sprogとはLinuxからJTAGを通じてXilinxのFPGAのプログラミングを行うプログラムです。

miniSpartan6+にはFTDIのチップが搭載されているので、そのチップをJTAGとして利用します。
そのためFTDIに関するプログラムもインストールします。

sudo apt-get install libftdi-dev
sudo xc3sprog -c ftdi

ダウンロード・インストールはGetting started with xc3sprogに書いてある通りです。

svn co https://xc3sprog.svn.sourceforge.net/svnroot/xc3sprog/trunk xc3sprog
cd xc3sprog
cmake .
sudo make install

インストールできたらminiSpartan6+をPCに接続して、下記のコマンドで接続を確認します。

sudo xc3sprog -c ftdi

下記のような情報が表示されたら成功です。

iseをインストールする

xilinxのホームページからiseのLinux用フルインストーラをダウンロードします。
※vivadoデザインツールではありません。


インストールのコマンドなどは、下記のサイトを参考にしました。
ISE WebPack 13.3 インストール(ESXi-Ubuntu 11.10)

tar xvf Xilinx_ISE_DS_Lin_14.7_1015_1.tar
cd Xilinx_ISE_DS_Lin_14.7_1015_1/
sudo ./xsetup

パスを通します

64bit PCの場合
echo "PATH=\$PATH:/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64" >> ~/.bashrc
32bit PCの場合
echo "PATH=\$PATH:/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin" >> ~/.bashrc


bashを読み直します。
source ~/.bashrc

下記のコマンドでiseが起動するはずです。
ise

iseでプロジェクトを作成する

iseでプロジェクトを作ります。
File -> New Project
Top-level source typeはHDLにします。
今回は~/xilinx/testを作成しました。

MiniSpartan6+ bringupと同じ設定にしました。

Finishを押すと、下のように新しいプロジェクトの画面になります。

iseで必要なファイルを作成する

MiniSpartan6+ bringupに従って、下記2つのファイルを作成します。

test_led.vhd

作成手順:
Project  -> New Source

VHDL moduleを選択します

その後はデフォルトの設定で良さそうなので、ポップアップが消えるまでOKやfinishを押します。

test_led.vhdに下記のプログラムを記述します。
test_led.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity led_Test is
    Port ( clk50 : in  STD_LOGIC;
           leds : out  STD_LOGIC_VECTOR (7 downto 0));
end led_Test;

architecture Behavioral of led_Test is
   signal count : unsigned(29 downto 0) := (others => '0');
begin

process(clk50)
   begin
      if rising_edge(clk50) then
         count <= count+1;
         leds  <= STD_LOGIC_VECTOR(count(count'high downto count'high-7));      
      end if;
   end process;

end Behavioral;

miniSpartan6.ucf

作成手順:
ucfファイルは作成前に設定を変更する必要があります。
Source -> Source properties

View AssociationをImplementationに変更して、Applyを押した後、OKを押します。

そうすると、ucfファイルを選択できるように鳴るので、先ほどのvhdのようにファイルを追加します。
Project -> New Source -> Implementation Constraints File


miniSpartan.ucfに下記のプログラムを書きます。
miniSpartan.ucf
NET "clk50" PERIOD = 20 ns | LOC = "K3"; # IO_L42P_GCLK25_TRDY2_M3UDM
NET "LEDS<0>" LOC="P11";
NET "LEDS<1>" LOC="N9";
NET "LEDS<2>" LOC="M9";
NET "LEDS<3>" LOC="P9";
NET "LEDS<4>" LOC="T8";
NET "LEDS<5>" LOC="N8";
NET "LEDS<6>" LOC="P8";
NET "LEDS<7>" LOC="P7";

test_led.vhdとminiSpartan6.ucfを作成したら、ファイルを保存します。

iseでプロジェクトからbitファイルを作成する

「▶」ボタンを押します。
しばらく経って成功した場合、Implement Designの横にチェックマークが付きます。



ここまで成功していたらGenerate Progarmming Fileの横の丸をダブルクリックします。


Generate Programming Fileの横にチェックマークが付いたら成功です。



xc3sprogでbitファイルをminiSpartan6+に送信する

iseで作ったプロジェクトのフォルダに移動します。
cd ~/xlinx/test

送信するbitファイルがあることを確認します。
ls *.bit

miniSpartan6+をPCに接続して、下記のコマンドを入力します。
sudo xc3sprog -c ftdi led_test.bit 

LEDがチカチカ(2進数のカウントアップを)していたら成功です。


お疲れ様でした!

備考

FPGAの設定が間違っていると、下記のエラーが出ます。
ERROR:MapLib:30 - LOC constraint P7 on leds<7> is invalid: No such site on the device. To bypass this error set the environment variable 'XIL_MAP_LOCWARN'.

自分の場合は、チップを右クリックして設定を修正したらうまくいくようになりました。

参考ページ

Getting StartedMiniSpartan6+ bringup
ISE 10.1 Quick Start Tutorial
Putting my code into the FPGA

0 件のコメント :