[[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