- 追加された行はこの色です。
- 削除された行はこの色です。
[[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 をインストールすると samples のコードはコンパイル出来るようになります。~
~
OS X 上の標準 java の version を確認すると1.6系のため、1.7系に変更します。 ~
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 を確認します。 ~
インストーラー画面の指示に従ってインストールします。~
インストール完了後再度 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 がインストールされたことを確認しsamples/test/test.shを実行します。 ~
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を実行すると、~
以下のようなエラーが起こります。 ~
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