Caution:
The project of JavaRock, a high-level synthesis language has already been closed.
It has moved to its successor, which is called Synthesijer.
BC::labs puts weight on the project of Stnthesijer and frequently update the new project.
Please consider this page and JavaRock related articles as reference.
JavaRock is a high-level synthesis language, which generates HDL from Java language.
This article shows how to set up the basic working environment for JavaRock.
The newest compiled JavaRock is javarock_20130708.jar, and the latest sample code set of JavaRock is samples_20130707.tar,gz.
Please download them from the URL shown below.
http://sourceforge.net/projects/javarock/files/20130708/Install Ubuntu 12.04 (32bit version) and add the package listed below.
$ sudo apt-get install build-essential $ sudo apt-get install openjdk-7-jdk
Set PATH, which defines the location of javarock_20130708.jar is placed, to the environment variable of JavaRock, JAVAROCK.
$ export JAVAROCK=/home/beat/JavaRock/javarock_20130708.jar
Compile samples/pong.
Assume that the directory of samples is /home/beat/JavaRock/samples.
If comile_fpga.sh does not have the executable permission, give it, and execute it.$ 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
After the compile process is completed, please check that class files and vhd file are generated.$ 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
JavaRock can be compiled on Mac OS X Mavericks (10.9.3) if JDK7 is installed to Mac OS X.
The default Java on Mac OS X Mavericks is Java 1.6, but JavaRock cannot be compiled with Java 1.6. Java 1.7 is the requirement.
$ 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
Download Oracle JDK from the URL below.
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
After the download of jdk-7u55-maxosx-x64.dmg is completed, the execute the file.
As the installer screen shows up, please follow its instructions to install JDK.
After the installation is completed, please check its version of JDK.$ 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
Confirming that JDK7 is installed, set PATH, which defines the location of javarock_20130708.jar is placed, to the environment variable of JavaRock, JAVAROCK. This is the same way as having done to Ubuntu.
$ export JAVAROCK=/home/beat/JavaRock/javarock_20130708.jarSetting PATH to the environment variable, execute 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 tes
If the class file and vhd file exist, this file, test.sh, is executed correctly,
If test.sh is executed without updating the version of Java, these errors will occur. The details are shown below.
$ 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
The contents of expanded samples_201310707.tar.gz are organized as they are shown below.
In the following directories, kc705 indicates this directory for Xilinx Kintex-7 FPGA KC705.
Test directory is for Virtex-6 FPGA ML605 Evaluation Kit. microboard is the directory for Avnet Spartan-6 LX9 MicroBoard.
Zedboard is the test directory for Xulinx 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
- JavaRock's Official Web Page
http://javarock.sourceforge.net/
- JavaRock's Source Repository
http://sourceforge.net/p/javarock/git/ci/master/tree/
- 2014/12/24 This article is initially published
- Caution:
The development of JavaRock has been closed, and it has the successor, which is called Synthesijer.
If you are interested in a high-level synthesis, which is generates HDL from Java language, please go to Synthesijer.