labs.beatcraft.com
DE0-Nano

DE0-Nano/JavaRock

 JavaRock samples 内にある LED サンプルから VHDL を生成し、
生成されたVHDLに合わせた Pin 配置を行い全体を合成し Terasic 社製 FPGA ボード DE0-Nano 上で
動作させる手順について記載します。

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

・ホストマシン上の構成
 Windows PC 上に Virtul Machine(Ubuntu 12.04LTS、32bit版)を作成し作業を行っています。
(Ubuntu 12.04LTSのインストールについては本稿では省略します)
Windows、Ubuntu 上で使用しているアプリケーションの概要について記載しています。

・ Ubuntu の設定とファイル編集
 Ubuntu上での開発ツールのインストールや、DE0-Nano を動作させるための変更点などについて 記載しています。

・ DE0-Nano への書き込み
 Ubuntu 上から DE0-Nano の LED を点滅させるまでの手順について記載してます。

ホストマシン上の構成

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

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

OS:

  • ホストOS: Windows7 (64bit版)
  • ゲスト OS: Ubuntu 12.04LTS(32bit版、以降Ubuntuと記載します)

アプリケーション:

  • VMware Player (Windows、64bit版)
  • DE0-Nano System Builder (Windows)
  • Quartus II 12.0sp1 (Ubuntu、以降Quartsと記載します)

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を使用しています
これは JacaRock を Ubuntu 上でビルドしている事と参考文献として使用している
三好 健文(2013) 『インターフェース ZERO No.4 Hello World から始める FPGA 入門』 CQ出版社
に記載されている Quartus のバージョンと合わせているためです。
(本稿では Quartus のインストールについては省略します)。

Ubuntu の設定とファイル編集

 ゲストOSの Ubuntu の設定について記載します。

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

 Ubuntu 上に Quartus をインストールするための開発用ツールと
JavaRock を使用可能にするため OpenJDK をインストールします。

$ sudo apt-get install build-essential
$ sudo apt-get install openjdk-7-jdk

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

作業用ファイル・ディレクトリ構成

 本稿の Ubuntu 上で作業・使用する主なファイル・ディレクトリ構成は以下のとおりです。

${HOME}
   |-- altera/                      <- Quartusインストールディレクトリ
   |      
   `-- JavaRock           
          |- javarock_20130708.jar  <- JavaRock 実行ファイル
          `- samples/               <- JavaRock samples_20130707.tar.gz展開ディレクトリ
               |
            <snip>
               |
               |-- de0-nano/        <- DE0-Nano作業用追加ディレクトリ
               |     |-  model/     <- DE0-Nano プロジェクトファイル配置用ディレクトリ
               |     |     |- test.qpf 
               |     |     `- test.qsf
               |     |
               |     |- test.java
               |     `- test.sh
            <snip>
               |
               `-- led/
                     |- counter.java
                     `- led.java

環境変数設定

 Quartus の起動と JAVAROCK のビルドを実行しやすくするため、
Quartus の PATH と JAVAROCK の実行ファイルへの PATH(JAVAROCK) を
bashrc の末尾に追加します。

$ vi ~/.bashrc
  <snip>
  # sources /etc/bash.bashrc).
  if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
      . /etc/bash_completion
  fi
+ export PATH=$PATH:/home/beat/altera/12.0sp1/quartus/bin
+ export JAVAROCK=/home/beat/JavaRock/javarock_20130708.jar

追加ディレクトリ内のファイルについて

 本稿で追加してるファイルの概要は以下のとおりです。

  • de0-nano/model/test.qpf: 本稿用の DE0-Nano System Builder で作成したプロジェクトファイル
  • de0-nano/model/test.qsf : DE0-Nano System Builder 上で CLOCK と LED[8] のみ選択し作成した qsf ファイルを
    JavaRock で生成される vhd ファイルに合わせて編集したもの
  • de0-nano/test.sh、test.java: samples/test/test.sh、test.java を LED 点滅用に編集したもの

test.sh、test.javaの編集について

 test.java、test.shはそれぞれ以下のように編集しています。
本稿では LED の点滅のみ実行するため、test.java、test.sh に記載されている
LED 以外の部分を削除もしくはコメントアウトしています。

  • test.sh
$ diff -upN samples_orig/test/test.sh samples/de0-nano/test.sh
--- samples_orig/test/test.sh   2013-07-08 07:25:19.000000000 +0900
+++ samples/de0-nano/test.sh    2014-05-20 18:30:01.516000467 +0900
@@ -1,5 +1,3 @@
-java -cp $JAVAROCK:../led:../sc1602:../echo:. openjdk.com.sun.tools.javac.Main \
+java -cp $JAVAROCK:../led:. openjdk.com.sun.tools.javac.Main \
   ../led/counter.java ../led/led.java  \
-  ../sc1602/SC1602Wrapper.java ../sc1602/SC1602Writer.java ../sc1602/sc1602_test.java  \
-  ../echo/echo.java ./rs232c.java \
   test.java
  • test.java
$ diff -upN samples_orig/test/test.java samples/de0-nano/test.java
--- samples_orig/test/test.java 2013-07-08 07:25:19.000000000 +0900
+++ samples/de0-nano/test.java  2014-05-20 17:38:47.528038697 +0900
@@ -3,8 +3,8 @@ import net.wasamon.javarock.rt.*;
 @javarockhdl
 public class test{
   led obj0 = new led();
-  echo obj1 = new echo();
-  sc1602_test obj2 = new sc1602_test();
+  //echo obj1 = new echo();
+  //sc1602_test obj2 = new sc1602_test();
   //VGAJavaTest vga = new VGAJavaTest();

   @combination
@@ -15,8 +15,8 @@ public class test{
   @auto
   public void main(){
     obj0.start();
-    obj1.start();
-    obj2.start();
+    //obj1.start();
+    //obj2.start();
     //vga.start();
   }
 }
 

test.shの実行

上記の設定と修正完了後、test.shを実行しtest.vhd、led.vhd、counter.vhd が
de0-nano ディレクトリに作成されていることを確認します。

$ ./test.sh
Compile: counter
Compile: led
Compile: test 
pass: connection
pass: bypass
pass: optimization
pass: linkage
pass: generate

$ ls
counter.vhd  led.vhd  model  test.class  test.java  test.sh  test.vhd

test.qpf、test.qsfについて

 test.qpf、test.qsfの詳細については添付ファイルを参照してください。
test.qsf は上記で作成された test.vhd の entity test 内の変数に合わせて変更します。
これはデフォルトの test.qsf では test.vhd の Pin と一致せずプログラミングをしても動作しないためです。

また作成された vhd ファイル(test.vhd、led.vhd、counter.vhd)を
コンパイル時に読み込むよう以下のように変更してください。


  • test.vhd(参考用)
entity test is -- net.wasamon.javarock.model.vhdl.VHDLModule@33117621
  port (
    notify_method_busy : OUT std_logic;
    output_port_led : OUT std_logic;
    notify_method_request : IN std_logic;
    reset : IN std_logic;
    clk : IN std_logic
  ); -- net.wasamon.javarock.model.vhdl.VHDLModule@33117621
  • model/test.qsf
 #============================================================
 # CLOCK
 #============================================================
-set_location_assignment PIN_R8 -to CLOCK_50
-set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK_50
+set_location_assignment PIN_R8 -to clk
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to clk

 #============================================================
 # LED
 #============================================================
-set_location_assignment PIN_A15 -to LED[0]
-set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[0]
+set_location_assignment PIN_A15 -to output_port_led
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to output_port_led

 #============================================================
 # 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 ../led.vhd
+set_global_assignment -name VHDL_FILE ../counter.vhd
+set_global_assignment -name VHDL_FILE ../test.vhd
+set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
+set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
+set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
+
+set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "2.5 V"
+
+
+
+set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

DE0-Nano への書き込み

DE0-Nano への作成したファイルの書き込み手順は以下のとおりです。
すべて Ubuntu 上で実行しています。

1. Quartus の起動
 Ubuntu上でQuartusを起動します。
作成した Project ファイルのビルドとビルド後のイメージを
DE0-Nano へのプログラミング(書き込み)に必要です。

$ quartus
quartus01.png


2. Projcet ファイルの読み込み
Open Project から test.qpf(Projectファイル)の読み込みます。

quartus02.png


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


4: Pin 設定の確認
メニューバー「Assignments」内「Pin Planner」を押下すると表示されます。
ここで想定どおりの Pin が設定されているか確認してください。
本稿での Pin 設定は以下のとおりです。

quartus04.png


4. Programmer の起動
メニューバー 「Tools」 内 「Programmer」を押下します。
Programmer は作成されたイメージを DE0-Nano にプログラミング(書き込む)ための機能です。
またどのデバイスで書き込むかも選択します。
本稿では USB-Blaster を選択します。

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

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


quartus07.png


5. DE0-Nano へのイメージ転送と動作確認
Programeer 内 Startを押下します。
これで作成されたイメージを DE0-Nano に転送します。

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


quartus06.png


javarock.jpg


参考文献

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

更新履歴

2014/05/27 参考文献の追加、本文の加筆訂正
2014/05/26 初稿公開

syariten

添付ファイル: filetest.qsf 1483件 [詳細] filetest.qpf 1456件 [詳細] filejavarock.jpg 1866件 [詳細] filequartus07.png 1632件 [詳細] filequartus06.png 1650件 [詳細] filequartus04.png 1832件 [詳細] filequartus02.png 1641件 [詳細] filequartus01.png 1748件 [詳細]

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2014-05-27 (火) 20:06:03 (3622d)