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

~
注:JavaRock プロジェクトは開発終了し、Synthesijer という後継プロジェクトに ~
移行しています。本ページでも [[Synthesijer]] を作成し今後はそちらを更新していきます。~

#contents

* JavaRock [#s65ae15b]
* JavaRock [#s65ae15b]
 Java プログラムから HDL を生成し FPGA 上の HW にするための ~
プロジェクト JavaRock を使用しサンプルプログラムを実行する手順について記載します。 ~
~
最新版のコンパイル済み JavaRock は javarock_20130708.jar 、 ~
サンプルコード一式は samples_20130707.tar.gz です。 ~
以下のURLからダウンロードします。~
http://sourceforge.net/projects/javarock/files/20130708/ ~


* Ubuntu 12.04(32bit版) でのコンパイル手順 [#caaae1da]
 Ubuntu 12.04(32bit版)インストール後以下のパッケージをインストールします。

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

** JavaRock samplesのコンパイル [#x01ee9db]
 javarock_20130708.jar を配置した PATH を環境変数JAVAROCK に設定します。

 $ export JAVAROCK=/home/beat/JavaRock/javarock_20130708.jar

samples/pongをコンパイルします。 ~
samplesディレクトリは/home/beat/JavaRock/samplesに配置しているものとします。 ~
compile_fpga.shに実行権限がなければ実行権限を付与し、実行します。 ~

 $ cd JavaRock/
 $ ls
 javarock_20130708.jar  samples  samples_20130707.tar.gz
 $ export JAVAROCK=/home/beat/JavaRock/javarock_20130708.jar
 $ cd samples/pong/
 $ ls
 ButtonIF.java  DE2-115  Game.java  Top.java  acknowledgement.txt  compile_fpga.bat  compile_fpga.sh
 $ chmod +x compile_fpga.sh
 $ ./compile_fpga.sh
 Compile: ButtonIF
 Compile: Game
 Compile: Top
 pass: connection
 pass: bypass
 pass: optimization
 pass: linkage
 pass: generate
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent

コンパイル完了後、各classファイルと、vhdファイルが生成されていることが確認できます。 ~

 $ ls
 ButtonIF.class  DE2-115     Game.java  Top.java             compile_fpga.bat  game.vhd
 ButtonIF.java   Game.class  Top.class  acknowledgement.txt  compile_fpga.sh   top.vhd

~


* Mac OS X でのコンパイル手順 [#mf79577c]
Mac OS X Mavericks (10.9.3) でのコンパイルは JDK7 をインストールすると可能になります。~
OS X Mavericks 上のdefault の java の version を確認すると1.6系ですが、これだとコンパイル出来ません。 
 $ java -version
 java version "1.6.0_65"
 Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
 Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
 
 $ /usr/libexec/java_home -V
 Matching Java Virtual Machines (2):
     1.6.0_65-b14-462, x86_64:   "Java SE 6"     /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
     1.6.0_65-b14-462, i386:     "Java SE 6"     /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Oracle JDK の現行版(2014年5月時点)をインストールします。 ~
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html ~
上記 URL から jdk-7u55-macosx-x64.dmg をダウンロード完了後実行し、~
インストーラー画面の指示に従ってインストールします。~
インストール完了後再度 version を確認します。
 $ java -version
 java version "1.7.0_55"
 Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
 Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)
 
 $ /usr/libexec/java_home -V
 Matching Java Virtual Machines (3):
     1.7.0_55, x86_64:   "Java SE 7"     /Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home
     1.6.0_65-b14-462, x86_64:   "Java SE 6"     /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
     1.6.0_65-b14-462, i386:     "Java SE 6"     /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

** JavaRock samplesのコンパイル [#a7174bbc]
JDK7 がインストールされたことを確認したら、Ubuntu での実行例と同様に javarock_20130708.jar を配置した PATH を環境変数JAVAROCK に設定します。
 $ export JAVAROCK=/home/beat/JavaRock/javarock_20130708.jar
設定が完了したら samples/test/test.shを実行します。
 $ cd ~/JavaRock/samples/test
 $ ./test.sh
 Compile: counter
 Compile: led
 Compile: SC1602Wrapper
 Compile: SC1602Writer
 Compile: sc1602_test
 Compile: echo
 Compile: rs232c
 Compile: test
 pass: connection
 pass: bypass
 pass: optimization
 pass: linkage
 pass: generate
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent
 VHDLArrayAccess:getReadSignal: TO => net.wasamon.javarock.model.vhdl.VHDLIdent

 $ ls
 counter.vhd             rs232c.vhd              test.class
 echo.vhd                sc1602_test.vhd         test.java
 led.vhd                 sc1602writer.vhd        test.sh
 rs232c.class            sim.VHD                 test.ucf
 rs232c.java             test.bat                test.vhd

正常に実行でき、class ファイルと vhd ファイルが生成されることが確認できます。

java のバージョンを変更せずに上記 test.sh を実行すると以下のようなエラーが起こります。 
 $ cd ~/JavaRock/samples/test
 $ ./test.sh 
 An exception has occurred in the compiler ((version info not available)). Please file a bug at the JavaRock BugTracks (http://sourceforge.net/p/javarock/bugs/)  after checking the Bug Parade for duplicates.
 Include your program and the following diagnostic in your report.  Thank you.
 java.lang.NoClassDefFoundError: javax/lang/model/type/UnionType
         at java.lang.ClassLoader.defineClass1(Native Method)
         at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
         at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
         at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
         at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
         at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
         at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
         at java.security.AccessController.doPrivileged(Native Method)
         at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
         at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
         at openjdk.com.sun.tools.javac.comp.MemberEnter.<init>(MemberEnter.java:95)
         at openjdk.com.sun.tools.javac.comp.MemberEnter.instance(MemberEnter.java:85)
         at openjdk.com.sun.tools.javac.comp.Enter.<init>(Enter.java:126)
         at openjdk.com.sun.tools.javac.comp.Enter.instance(Enter.java:114)
         at openjdk.com.sun.tools.javac.comp.Check.<init>(Check.java:96)
         at openjdk.com.sun.tools.javac.comp.Check.instance(Check.java:86)
         at openjdk.com.sun.tools.javac.code.Types.<init>(Types.java:101)
         at openjdk.com.sun.tools.javac.code.Types.instance(Types.java:88)
         at openjdk.com.sun.tools.javac.jvm.ClassReader.<init>(ClassReader.java:264)
         at openjdk.com.sun.tools.javac.jvm.ClassReader.instance(ClassReader.java:226)
         at openjdk.com.sun.tools.javac.main.JavaCompiler.<init>(JavaCompiler.java:331)
         at openjdk.com.sun.tools.javac.main.JavaCompiler.instance(JavaCompiler.java:88)
         at openjdk.com.sun.tools.javac.main.Main.compile(Main.java:424)
         at openjdk.com.sun.tools.javac.main.Main.compile(Main.java:353)
         at openjdk.com.sun.tools.javac.main.Main.compile(Main.java:342)
         at openjdk.com.sun.tools.javac.main.Main.compile(Main.java:333)
         at openjdk.com.sun.tools.javac.Main.compile(Main.java:76)
         at openjdk.com.sun.tools.javac.Main.main(Main.java:61)
 Caused by: java.lang.ClassNotFoundException: javax.lang.model.type.UnionType
         at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
         at java.security.AccessController.doPrivileged(Native Method)
         at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
         at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
         ... 30 more

* JavaRock samplesについて [#m76995ff]
 samples_20130707.tar.gz を展開した中身は以下のような構成になっています。 ~
以下のディレクトリのうち、kc705はザイリンクス Kintex-7 FPGA KC705 、~
testディレクトリは Virtex-6 FPGA ML605 Evaluation Kit 、microboardは Avnet Spartan-6 LX9 MicroBoard、~
zedboard はザイリンクス ZedBoard のテスト用ディレクトリです。 ~

 samples
 ├── altera
 │   ├── DE2_115.qsf
 │   ├── DE2_115.v
 │   ├── Test.java
 │   ├── Top.java
 │   ├── mandelbrot
 │   │   ├── Firefly.java
 │   │   ├── Mandelbrot.java
 │   │   ├── SC1602Wrapper.java
 │   │   ├── SC1602Writer.java
 │   │   ├── VGAIf.java
 │   │   ├── VGAJavaTest.java
 │   │   ├── VGAWrapper.java
 │   │   ├── compile
 │   │   │   ├── mandelbrot.sof
 │   │   │   ├── test.qsf
 │   │   │   └── test.sof
 │   │   ├── main.java
 │   │   ├── sc1602_test.java
 │   │   ├── test.sh
 │   │   └── test.v
 │   ├── mandelbrot.sof
 │   ├── test
 │   │   ├── Firefly.java
 │   │   ├── Mandelbrot.java
 │   │   ├── SC1602Wrapper.java
 │   │   ├── SC1602Writer.java
 │   │   ├── VGAIf.java
 │   │   ├── VGAJavaTest.java
 │   │   ├── VGAWrapper.java
 │   │   ├── main.java
 │   │   ├── sc1602_test.java
 │   │   ├── test.sh
 │   │   └── test.v
 │   ├── test.qsf
 │   └── test.sof
 ├── arith
 │   ├── arith.java
 │   ├── assign.java
 │   └── floating.java
 ├── array
 │   ├── BitVectorTest.java
 │   ├── bitvectortest_sim.VHD
 │   ├── fill.java
 │   ├── fillsim.java
 │   ├── fillsim_sim.VHD
 │   ├── main.java
 │   ├── out.vcd
 │   ├── rx.java
 │   ├── sum.java
 │   ├── sumsim.java
 │   ├── sumsim_sim.VHD
 │   ├── test.java
 │   ├── test2.java
 │   ├── test3.java
 │   ├── testTest.java
 │   ├── testtestsim.VHD
 │   ├── tx.java
 │   └── work-obj93.cf
 ├── bench
 │   ├── BubbleSort.java
 │   ├── BubbleSortMod.java
 │   ├── BubbleSortSim.java
 │   ├── BubbleSortThread.java
 │   ├── Sieve.java
 │   ├── SieveMod.java
 │   ├── SieveSim.java
 │   ├── SieveThread.java
 │   ├── bubblesort.sh
 │   ├── sieve.sh
 │   ├── simbubble.VHD
 │   └── simsieve.VHD
 ├── bf e-trees exStick
 │   ├── BF.java
 │   ├── HW.java
 │   ├── IO.java
 │   ├── Test.java
 │   ├── TestHW.java
 │   ├── compile.sh
 │   ├── exstick.VHD
 │   ├── exstick.ucf
 │   ├── exstick2.ucf
 │   ├── rs232c.java
 │   ├── sim
 │   │   └── IO.java
 │   ├── sim.VHD
 │   ├── test.ucf
 │   └── top.VHD
 ├── callback
 │   ├── CallBackTest.java
 │   ├── Counter.java
 │   ├── test.ucf
 │   └── top.v
 ├── container
 │   ├── List.java
 │   ├── Stack.java
 │   └── Test.java
 ├── echo
 │   ├── UpperEcho.java
 │   ├── echo.java
 │   └── rs232c.java
 ├── float
 │   └── test.java
 ├── i2c
 │   ├── I2C_IF.java
 │   ├── I2C_Master_Wrapper.java
 │   ├── I2C_Test.java
 │   ├── SimpleI2C_Wrapper.java
 │   ├── top.VHD
 │   └── zedboard.ucf
 ├── kc705 
 │   ├── compile.bat
 │   ├── compile.sh
 │   ├── rs232c.java
 │   ├── test.java
 │   ├── test.sh
 │   ├── top.VHD
 │   └── top.ucf
 ├── led
 │   ├── Firefly.java
 │   ├── counter.java
 │   └── led.java
 ├── microboard 
 │   ├── button.java
 │   ├── microboard.sh
 │   ├── sim.VHD
 │   ├── test.java
 │   ├── test.ucf
 │   └── top.VHD
 ├── old
 │   ├── Hoge.java
 │   ├── MUX.java
 │   ├── MyString.java
 │   ├── append.java
 │   ├── appendsim.java
 │   ├── arraysim.java
 │   ├── arraysim2.java
 │   ├── arraytest.java
 │   ├── arraytest2.java
 │   ├── echo0.java
 │   ├── echo1.java
 │   ├── put.java
 │   ├── state.java
 │   └── step.java
 ├── pong
 │   ├── ButtonIF.java
 │   ├── DE2-115
 │   │   ├── DE2-115.qpf
 │   │   └── DE2-115.qsf
 │   ├── Game.java
 │   ├── Top.java
 │   ├── acknowledgement.txt
 │   ├── compile_fpga.bat
 │   └── compile_fpga.sh
 ├── prime
 │   ├── Prime.java
 │   ├── PrimeSim.java
 │   ├── PrimeThread.java
 │   ├── sim.VHD
 │   └── test.sh
 ├── random
 │   ├── Random19Wrapper.java
 │   └── sim.VHD
 ├── sc1602
 │   ├── SC1602Wrapper.java
 │   ├── SC1602Writer.java
 │   ├── ml605_sc1602.ucf
 │   └── sc1602_test.java
 ├── sformat
 │   ├── SParser.java
 │   ├── SParserTest.java
 │   └── test.dat
 ├── syntax
 │   ├── cond.java
 │   ├── condtest.java
 │   ├── condtest_sim.VHD
 │   ├── for_test.java
 │   ├── for_test_test.java
 │   ├── for_test_test_sim.VHD
 │   ├── out.vcd
 │   ├── private_method.java
 │   ├── private_method_test.java
 │   ├── private_method_test_sim.VHD
 │   ├── public_constant.java
 │   ├── public_constant_test.java
 │   ├── public_constant_test_sim.VHD
 │   ├── subblock.java
 │   ├── subblock_test.java
 │   ├── subblock_test_sim.VHD
 │   ├── sync.java
 │   ├── sync_test.java
 │   ├── sync_test_sim.VHD
 │   ├── thread_test.java
 │   ├── thread_test_test.java
 │   ├── thread_test_test_sim.VHD
 │   ├── type_test.java
 │   ├── type_test_test.java
 │   ├── type_test_test_sim.VHD
 │   └── work-obj93.cf
 ├── test
 │   ├── rs232c.java
 │   ├── sim.VHD
 │   ├── test.bat
 │   ├── test.java
 │   ├── test.sh
 │   └── test.ucf
 ├── upl_tx_rx
 │   ├── Makefile
 │   ├── UPL32Test.java
 │   ├── UPL32_RX.java
 │   ├── UPL32_TX.java
 │   ├── UPL8Test.java
 │   ├── UPL8_RX.java
 │   ├── UPL8_TX.java
 │   ├── simpledualportram.VHD
 │   ├── upl32_sim.VHD
 │   ├── upl8_sim.VHD
 │   ├── vhdl_upl32_rx_wrapper.VHD
 │   ├── vhdl_upl32_tx_wrapper.VHD
 │   ├── vhdl_upl8_rx_wrapper.VHD
 │   ├── vhdl_upl8_tx_wrapper.VHD
 │   ├── vhdl_upl_rx.VHD
 │   └── vhdl_upl_tx.VHD
 ├── vgatest
 │   ├── VGAIf.java
 │   ├── VGAJavaTest.java
 │   ├── VGAWrapper.java
 │   ├── sramiface.VHD
 │   ├── swing
 │   │   └── VGAIf.java
 │   ├── vga.VHD
 │   ├── vgaclk.VHD
 │   ├── vgagen.VHD
 │   └── vgaiface.VHD
 ├── vhdl
 │   ├── arraytop.vhd
 │   ├── bitvector.vhd
 │   ├── blockram.vhd
 │   ├── button.vhd
 │   ├── clk_div.vhd
 │   ├── distributedram.vhd
 │   ├── ml605.ucf
 │   ├── rs232c_rx.vhd
 │   ├── rs232c_tx.vhd
 │   ├── sim.vhd
 │   └── simpledualportram.vhd
 ├── wait-notify
 │   ├── Consumer.java
 │   ├── NoWait.java
 │   ├── NoWait2.java
 │   ├── NoWait2Test.java
 │   ├── Producer.java
 │   ├── Simulation.java
 │   ├── Test.java
 │   ├── nowait2_sim.VHD
 │   └── nowait_sim.VHD
 └── zedboard 
     ├── FPGAMain.java
     ├── HDMI_1280_720_Wrapper.java
     ├── LED.java
     ├── compile.sh
     ├── i2cmem
     ├── top.VHD
     └── zedboard.ucf
 32 directories, 232 files




* 参考資料 [#r19f3c91]

- Sourceforge の JavaRock 公式 web ページ ~
http://javarock.sourceforge.net/ ~

- JavaRock のソースリポジトリ ~
http://sourceforge.net/p/javarock/git/ci/master/tree/ ~

- Mac OS X上でのJavaの扱いについて ~
http://www.pupha.net/archives/1907/ ~

- JavaRockを用いたHW/SW強調設計の検討 ~
http://www.wasamon.net/miyo/index.cgi?page=Diary%2F2012-5-30&file=reconf_201205.pdf ~

- JavaRockではじめる高位合成言語による気楽なFPGA開発  ~
http://www.sigemb.jp/ESS/2013/files/ess2013_tutorial_miyoshi.pdf ~


* 更新履歴 [#af98e121]
2014/05/26 初稿公開 ~

RIGHT:Satoshi Otsuka,syariten

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