[[labs.beatcraft.com]] ~
[[DE0-Nano]] ~

#contents

* DE0-Nano/JavaRock [#ue08de8e]
 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 を点滅させるまでの手順について記載してます。~


* ホストマシン上の構成 [#h11f1935]
 本稿のホストマシン上の構成について記載します。~
使用する 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:https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_player/6_0]] 上に Ubuntu のイメージを作成します。~
ディスク容量は20GBとしています。 ~

[[DE0-Nano System Builder:http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&No=593&PartNo=4]] は Terasic社から提供されている DE0-Nano の qpf(プロジェクトファイル)、~
qsf(ピンアサイン等の設定ファイル)を作成するためのアプリケーションです。 ~
~
また  DE0-Nano System Builderは Windows 上でのみ実行可能です。 ~
~ 
[[Quartus:http://www.altera.co.jp/products/software/quartus-ii/web-edition/qts-we-index.html]] は ALTERA 社から提供されている FPGA 、CPLD などのデザイン開発ツールです。~
~
Quartus は Ubuntu 上にインストールし、本稿でのバージョンは12.0sp1を使用しています ~
これは JacaRock を Ubuntu 上でビルドしている事と参考文献として使用している ~
三好 健文(2013) 『インターフェース ZERO No.4 Hello World から始める FPGA 入門』 CQ出版社 に ~
記載されている Quartus のバージョンと合わせているためです。 ~
三好 健文(2013) 『インターフェース ZERO No.4 Hello World から始める FPGA 入門』 CQ出版社~
に記載されている Quartus のバージョンと合わせているためです。 ~
(本稿では Quartus のインストールについては省略します)。~

* Ubuntu の設定とファイル編集 [#wbadc982]
 ゲストOSの Ubuntu の設定について記載します。~

** 開発ツールのインストール [#c650a63e]
 Ubuntu 上に Quartus をインストールするための開発用ツールと ~
JavaRock を使用可能にするため OpenJDK をインストールします。 ~
 
 $ sudo apt-get install build-essential
 $ sudo apt-get install openjdk-7-jdk

** udevルールの追加 [#wfe4b458]
 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

 
** 作業用ファイル・ディレクトリ構成 [#mef9ded6]
 本稿の 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


** 環境変数設定 [#l417a0e9]
 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

** 追加ディレクトリ内のファイルについて [#nf792475]
 本稿で追加してるファイルの概要は以下のとおりです。 ~

- 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の編集について [#b801ac88]
 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の実行 [#da6466f1]
上記の設定と修正完了後、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について [#m1ee0efc]
 test.qpf、test.qsfの詳細については添付ファイルを参照してください。~
test.qsf は上記で作成された test.vhd の entity test 内の変数に合わせて変更します。~
これはデフォルトの test.qsf では test.vhd の Pin と一致せずプログラミングをしても動作しないためです。~
~
また作成された vhd ファイル(test.vhd、led.vhd、counter.vhd)を ~
コンパイル時に読み込むよう以下のように変更してください。 ~
~
#ref(test.qpf); ~
#ref(test.qsf); ~
~

- 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 への書き込み [#nc2ff26c]
DE0-Nano への作成したファイルの書き込み手順は以下のとおりです。 ~
すべて Ubuntu 上で実行しています。 ~

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

 $ quartus

#ref(quartus01.png,,60%);  ~
~

2. Projcet ファイルの読み込み ~
Open Project から test.qpf(Projectファイル)の読み込みます。 ~
~
#ref(quartus02.png,,60%);  ~

~

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

~

4: Pin 設定の確認 ~
メニューバー「Assignments」内「Pin Planner」を押下すると表示されます。~
ここで想定どおりの Pin が設定されているか確認してください。 ~
本稿での Pin 設定は以下のとおりです。 ~
~
#ref(quartus04.png,,60%);  ~
~

4. Programmer の起動 ~
メニューバー 「Tools」 内 「Programmer」を押下します。 ~
Programmer は作成されたイメージを DE0-Nano にプログラミング(書き込む)ための機能です。~
またどのデバイスで書き込むかも選択します。~
本稿では USB-Blaster を選択します。~
~
仮に No Hardware と表示されている場合、Hardware Settingsを押下し、 ~
下図のように Currently selected hardware 内の USB-Blasterを選択します。 ~
~
注:USB-Blaster の選択が表示されていない場合は再度追加した~
udev ルールファイルを確認してください。 ~

~
#ref(quartus07.png,,60%);  ~
~

5. DE0-Nano へのイメージ転送と動作確認 ~
Programeer 内 Startを押下します。~
これで作成されたイメージを DE0-Nano に転送します。~
~
Progress が 100%(Successful)になることを確認し、 ~
その際 DE0-Nano の LED0が点滅を開始することを確認します。 ~

~
#ref(quartus06.png,,60%);  ~
~
#ref(javarock.jpg,,20%);  ~

~

* 参考文献 [#lf9bf8d9]
三好 健文(2013) 『インターフェース ZERO No.4 Hello World から始める FPGA 入門』 CQ出版社 ~
~

* 更新履歴 [#tfa5c976]
2014/05/27 参考文献の追加、本文の加筆訂正 ~
2014/05/26 初稿公開 ~

RIGHT:syariten

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS