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