labs.beatcraft.com
DE0-Nano/JavaRock

JavaRock

 Java プログラムから HDL を生成し FPGA 上の HW にするための
プロジェクト JavaRock を使用しサンプルプログラムを実行する手順について記載します。

最新版のコンパイル済み JavaRock は javarock_20130708.jar 、
サンプルコード一式は samples_20130707.tar.gz です。
http://sourceforge.net/projects/javarock/files/20130708/

Ubuntu 12.04(32bit版) でのコンパイル手順

 Ubuntu 12.04(32bit版)インストール後以下のパッケージをインストールします。

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

JavaRock samplesのコンパイル

 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 でのコンパイル手順

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のコンパイル

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について

 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

参考資料

更新履歴

2014/05/26 初稿公開

Satoshi Otsuka,syariten

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   新規 一覧 単語検索 最終更新   最終更新のRSS