DE0-Nano

DE0-Nano/Synthesijer

JavaRock の後継プロジェクトの Synthesijer の synthesijer_samples-20140818 を
Terasic 社製 FPGA ボード DE0-Nano 上で動作させる手順について記載します。

本稿の大まかな流れ、Quartus のバージョンなど一部項目については DE0-Nano/JavaRock と重複しています。

本稿の大まかな流れは以下のとおりです。

ホストマシン上の構成

本稿のホストマシン上の構成について記載します。
使用する OS と主なアプリケーションは以下のとおりです。

また本稿の作業はほぼ Ubuntu 12.04LTS(64bit版)上で行っています。

OS:

VMware Player 上に Ubuntu のイメージを作成します。
ディスク容量は20GBとしています。

DE0-Nano System Builder は Terasic社から提供されている DE0-Nano の qpf(プロジェクトファイル)、
qsf(ピンアサイン等の設定ファイル)を作成するためのアプリケーションです。

また DE0-Nano System Builderは Windows 上でのみ実行可能です。

Quartus は ALTERA 社から提供されている FPGA 、CPLD などのデザイン開発ツールです。

Quartus は Ubuntu 上にインストールします、本稿でのバージョンは12.0sp1を使用しています
これは DE0-Nano/JacaRock で使用しているバージョンとあわせるためです。

Ubuntu の設定とファイル編集

Ubuntu の設定とファイル編集について記載します。

開発ツールのインストール

Ubuntu 上に Quartus をインストールするために以下の開発ツールを
インストールします。

$ sudo apt-get install build-essential ia32-libs

ia32-libs は Quartus の各バイナリが 32bit版のためインストールしています。

下記 Java SE、Synthesijer、Quartus の配置、インストールは /home/beat ディレクトリで
行っていますが、適宜変更してください。

Synthesijer を動作させるために Java SE 7u67 をインストールします。
Oracle の Web ページから Linux 版の Java SE 7u67 をダウンロードしアーカイブを展開します。

$ tar xvfz jdk-7u67-linux-x64.tar.gz

注:Synthesijer のWeb では Java SE 7 and later と記載がありますが
synthesijer-20140818.jar では Java8 で使用するとアノテーションエラーがでるため
Java SE 7u67 を使用しています。

synthesijer-20140818.jar、synthesijer_samples-20140818.zipを
http://synthesijer.sourceforge.net/ からダウンロードします。
synthesijer_samples-20140818.zip は unzip コマンドで解凍します。

$ unzip synthesijer_samples-20140818.zip

Quartus をインストールします。アーカイブを展開し setup を実行します。
以降 GUI に沿ってインストールを行ってください。

$ tar xvfz 12.0sp1_232_quartus_free_linux.tar.gz
$ cd 12.0sp1_232_quartus_free_linux/
$ ./setup

また、この状態で Quartus を起動すると下記のエラーが
表示されますので~/altera/12.0sp1/quartus/ 以下に linux64 という ~ シンボリックリンクを作成します。

$ cd ~/altera/12.0sp1/quartus/
$ ln -s linux linux64
*** The Quartus II software cannot be started because the current platform,
    'linux64', does not appear to be installed in:
    '/home/beat/altera/12.0sp1/quartus'.

/home/beat/altera/12.0sp1/quartus/bin/jtagd: 69: exit: Illegal number: -1

作業を行いやすくするため以下の3行を .bashrc の末尾に追加します。

$ vi .bashrc

export JAVA_HOME=/home/beat/jdk1.7.0_67
export PATH=$JAVA_HOME/bin:/home/beat/altera/12.0sp1/quartus/bin:$PATH
export SYNTHESIJER=/home/beat/synthesijer-20140818.jar

udevルールの追加と適用

DE0-NanoとUbuntuをUSB接続しプログラミング(イメージの転送)するためのデバイス USB-Blaster を
Ubuntu 上で認識させるため udev (自動的にデバイスファイルの作成や削除を行う仕組み)のルールファイルに
USB-Blaster 用ルールファイル /etc/udev/rule.dにを51-usbblaster.rules を追加します。

また追加のみでは動作しないためルールファイル追加後 udev を再起動します。

$ sudo vi /etc/udev/rules.d/51-usbblaster.rules

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE="0666", SYMLINK+="usbblaster/%k"
$ sudo udevadm control --reload-rules

DE0-Nano への書き込み

synthesijer_samples-20140818 内の quickstart サンプルをビルドし
DE0-Nano 上で動作させる手順について記載します。

quickstart

quickstart は LED が点滅するサンプルです。
Synthesijer の Web ページに記載されているのと同様の手順でビルドします。

$ cd ~/synthesijer_samples/sample/quickstart/
$ java -cp $SYNTHESIJER synthesijer.Main Test.java Top.java
Output VHDL: Top.vhd
Output VHDL: Test.vhd
Output Verilog HDL: Top.v
Output Verilog HDL: Test.v

DE0-Nano System Builder でプロジェクトファイルを作成します。
Synthesijer の quickstart に合わせてプロジェクト名は Top にします。

SystemBuilder.png

作成したプロジェクトを Ubuntu に移動します。
その際プロジェクトファイル内にある Top.v はリネームしておきます。

Ubuntu 上で Top.qsf をビルドした quickstart のTop.vhd にあわせて以下のように編集します。
また上記ビルドした Top.vhd、Test.vhd をコピー同じディレクトリにコピーします。

$ vi Top.vhd

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

entity Top is
  port (
    clk : in std_logic;
    reset : in std_logic;
    flag_return : out std_logic
  );
end Top;
...<略>
$ vi Top.qsf

...<略>
#============================================================
# CLOCK
#============================================================
set_location_assignment PIN_R8 -to clk
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to clk
#set_location_assignment PIN_R8 -to CLOCK_50
#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK_50
#============================================================
# LED
#============================================================
set_location_assignment PIN_A15 -to flag_return
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to flag_return
#set_location_assignment PIN_A15 -to LED[0]
#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[0]
...<略>
#============================================================
# End of pin assignments by Terasic System Builder
#============================================================
set_location_assignment PIN_A11 -to reset
set_instance_assignment -name IO_STANDARD 2.5V -to reset
set_global_assignment -name VHDL_FILE Test.vhd
set_global_assignment -name VHDL_FILE Top.vhd
set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "2.5 V"

Quartus を起動し、File -> Open Project から Top.qpf を選択します。

$ quartus
quartus001.png

Processing -> Start Complication を押下します。
ここで作成した Project 内の各ファイルのコンパイル(分析・統合)を行います。
注: Warning は大量に表示されますが、特に問題ありません。

Assignments -> Pin Planner を押下し、上記変更箇所が反映されていることを確認します。

quartus002.png

Tools -> Programmer を押下します。
Programmer は作成されたイメージを DE0-Nano にプログラミング(書き込む)ための機能です。
またどのデバイスで書き込むかも選択します。本稿では上記で設定した USB-Blaster を選択します。

もし No Hardware と表示されている場合、Hardware Settingsを押下し、
下図のように Currently selected hardware 内の USB-Blasterを選択します。

注:USB-Blaster の選択が表示されていない場合は再度追加した
udev ルールファイルを確認してください。

完了後Programeer 内 Startを押下します。
これで作成されたイメージを DE0-Nano に転送します。

Progress が 100%(Successful)になることを確認し、
その際 DE0-Nano の LED0が点滅を開始することを確認します。 ~

quartus003.png


quickstart.JPG

以上で quickstart の動作確認は完了です。

led

quickstart と同じく LED が点滅するサンプルです。
led ディレクトリ内に Makefile がありますので make コマンドでビルドを実行します。

$ cd ~/synthesijer_samples/sample/led/
$ make
java -cp /home/beat/synthesijer-20140818.jar synthesijer.Main led.java counter.java
Output VHDL: counter.vhd
Output VHDL: led.vhd
Output Verilog HDL: counter.v
Output Verilog HDL: led.v
javac -cp /home/beat/synthesijer-20140818.jar:. led_top.java
java -cp /home/beat/synthesijer-20140818.jar:. led_top

DE0-Nano System Builder でプロジェクトファイルを作成します。
Synthesijer の led に合わせてプロジェクト名は led_top にします。

作成したプロジェクトを Ubuntu に移動します。
その際プロジェクトファイル内にある led_top.v はリネームしておきます。

Ubuntu 上で led_top.qsf をビルドした led の led_top.vhd にあわせて以下のように編集します。
ここでは、exstick.ucf にあるように reset の PIN は配置しません。
また上記ビルドした led_top.vhd、led.vhd、counter.vhd をコピー同じディレクトリにコピーします。

$ vi exstick.ucf

NET reset      LOC = A12  | IOSTANDARD = LVCMOS33;    # "USER_RESET"
NET reset      TIG;

NET clk        LOC = N7 | IOSTANDARD = LVCMOS33;               # "USER_CLOCK"

NET clk TNM_NET = clk;
TIMESPEC ts_clk = PERIOD clk 25000 kHz;

NET q LOC = A2 | IOSTANDARD = LVCMOS33;
$ vi led_top.vhd
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity led_top is
  port (
    clk : in std_logic;
    reset : in std_logic;
    q : out std_logic
  );
end led_top;
...<略>
$ vi led_top.qsf
...<略>
#============================================================
# CLOCK
#============================================================
set_location_assignment PIN_R8 -to clk
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to clk
# set_location_assignment PIN_R8 -to CLOCK_50
# set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK_50
#============================================================
# LED
#============================================================
set_location_assignment PIN_A15 -to field_flag_output
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to field_flag_output
#set_location_assignment PIN_A15 -to LED[0]
#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[0]
...<略>
#============================================================^M
# End of pin assignments by Terasic System Builder^M
#============================================================^M
^M
set_global_assignment -name VHDL_FILE led.vhd^M
set_global_assignment -name VHDL_FILE counter.vhd^M
set_global_assignment -name VHDL_FILE led_top.vhd^M
set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "2.5 V"^M

あとは上記 quickstart と同じ手順にて DE0-Nano の動作確認ができます。

参考文献

三好 健文(2013) 『インターフェース ZERO No.4 Hello World から始める FPGA 入門』 CQ出版社

更新履歴

2014/08/27 項目追加(led)
2014/08/27 初稿公開

syariten

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   新規 一覧 単語検索 最終更新   最終更新のRSS