Submit Search
Fpgax 20130830
3 likes
3,857 views
Takefumi MIYOSHI
1 of 33
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
More Related Content
KEY
core dumpでcode golf
Nomura Yusuke
PPTX
Sharing Deep Dive
Takaaki Suzuki
PDF
SEH on mingw32
kikairoya
PDF
Visual C++コード分析を支えるSAL
egtra
PDF
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
PDF
C++ Transactional Memory言語拡張の紹介
yohhoy
PDF
Effective modern-c++#9
Tatsuki SHIMIZU
PDF
constexpr idioms
fimbul
core dumpでcode golf
Nomura Yusuke
Sharing Deep Dive
Takaaki Suzuki
SEH on mingw32
kikairoya
Visual C++コード分析を支えるSAL
egtra
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
C++ Transactional Memory言語拡張の紹介
yohhoy
Effective modern-c++#9
Tatsuki SHIMIZU
constexpr idioms
fimbul
What's hot
(20)
ODP
Buffer overflow
ionis111
PDF
エキ Py 読書会02 2010/9/7
Tetsuya Morimoto
PDF
effective modern c++ chapeter36
Tatsuki SHIMIZU
PDF
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
PDF
Effective Modern C++ 勉強会#3 Item16
Mitsuru Kariya
PDF
C++ マルチスレッドプログラミング
Kohsuke Yuasa
PPTX
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
PDF
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
PDF
いいかげんな人のためのTransactional Memory Primer
Yuto Hayamizu
PPT
Altanative macro
Motohiro KOSAKI
PDF
Scalaの限定継続の応用と基本
Kota Mizushima
PDF
Async design with Unity3D
Kouji Hosoda
PDF
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
PDF
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
PDF
エキ Py 読書会02 2章後半
Tetsuya Morimoto
PDF
組み込みでこそC++を使う10の理由
kikairoya
PDF
コルーチンの使い方
Naohiro Yoshikawa
PDF
Slide
Takefumi MIYOSHI
PDF
イマドキC++erのモテカワリソース管理術
Kohsuke Yuasa
PDF
中3女子でもわかる constexpr
Genya Murakami
Buffer overflow
ionis111
エキ Py 読書会02 2010/9/7
Tetsuya Morimoto
effective modern c++ chapeter36
Tatsuki SHIMIZU
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
Effective Modern C++ 勉強会#3 Item16
Mitsuru Kariya
C++ マルチスレッドプログラミング
Kohsuke Yuasa
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
いいかげんな人のためのTransactional Memory Primer
Yuto Hayamizu
Altanative macro
Motohiro KOSAKI
Scalaの限定継続の応用と基本
Kota Mizushima
Async design with Unity3D
Kouji Hosoda
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
エキ Py 読書会02 2章後半
Tetsuya Morimoto
組み込みでこそC++を使う10の理由
kikairoya
コルーチンの使い方
Naohiro Yoshikawa
Slide
Takefumi MIYOSHI
イマドキC++erのモテカワリソース管理術
Kohsuke Yuasa
中3女子でもわかる constexpr
Genya Murakami
Ad
More from Takefumi MIYOSHI
(20)
PDF
ACRi_webinar_20220118_miyo
Takefumi MIYOSHI
PDF
DAS_202109
Takefumi MIYOSHI
PDF
ACRiルーム1年間の活動と 新たな取り組み
Takefumi MIYOSHI
PDF
RISC-V introduction for SIG SDR in CQ 2019.07.29
Takefumi MIYOSHI
PDF
Misc for edge_devices_with_fpga
Takefumi MIYOSHI
PDF
Cq off 20190718
Takefumi MIYOSHI
PDF
Synthesijer - HLS frineds 20190511
Takefumi MIYOSHI
PDF
Reconf 201901
Takefumi MIYOSHI
PDF
Hls friends 201803.key
Takefumi MIYOSHI
PPTX
Abstracts of FPGA2017 papers (Temporary Version)
Takefumi MIYOSHI
PDF
Hls friends 20161122.key
Takefumi MIYOSHI
PDF
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Takefumi MIYOSHI
PDF
Das 2015
Takefumi MIYOSHI
PDF
Microblaze loader
Takefumi MIYOSHI
PDF
Reconf 201506
Takefumi MIYOSHI
PDF
Synthesijer jjug 201504_01
Takefumi MIYOSHI
PDF
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
PDF
Synthesijer fpgax 20150201
Takefumi MIYOSHI
PDF
Synthesijer hls 20150116
Takefumi MIYOSHI
PDF
Synthesijer.Scala (PROSYM 2015)
Takefumi MIYOSHI
ACRi_webinar_20220118_miyo
Takefumi MIYOSHI
DAS_202109
Takefumi MIYOSHI
ACRiルーム1年間の活動と 新たな取り組み
Takefumi MIYOSHI
RISC-V introduction for SIG SDR in CQ 2019.07.29
Takefumi MIYOSHI
Misc for edge_devices_with_fpga
Takefumi MIYOSHI
Cq off 20190718
Takefumi MIYOSHI
Synthesijer - HLS frineds 20190511
Takefumi MIYOSHI
Reconf 201901
Takefumi MIYOSHI
Hls friends 201803.key
Takefumi MIYOSHI
Abstracts of FPGA2017 papers (Temporary Version)
Takefumi MIYOSHI
Hls friends 20161122.key
Takefumi MIYOSHI
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Takefumi MIYOSHI
Das 2015
Takefumi MIYOSHI
Microblaze loader
Takefumi MIYOSHI
Reconf 201506
Takefumi MIYOSHI
Synthesijer jjug 201504_01
Takefumi MIYOSHI
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
Synthesijer fpgax 20150201
Takefumi MIYOSHI
Synthesijer hls 20150116
Takefumi MIYOSHI
Synthesijer.Scala (PROSYM 2015)
Takefumi MIYOSHI
Ad
Fpgax 20130830
1.
JavaRockで BlokusDuoプレーヤを作る話 三好 健文 @miyox 株式会社イーツリーズ・ジャパン 1
2.
いつもの,前置き
3.
FPGAとは 3 論理回路・データパスを自由に作り込める クロックレベルの同期と並列性の活用 Field Programmable Gate
Array HDLがドレスを着たお姫さまだとすると,コンパイル時 にエラーをしっかり検出してくれるが故にコンパイルを通 すのが困難な反面,コンパイルさえ通れば合成した回路が きちんと動作してくれるBluespecはパワフルなツンデレ 娘と筆者はイメージしています(図2). Verilog HDLやVHDLを使った設計で, ― あぁ∼,数字って32ビットだった.うっかりキャスト されていたよ… ― テスト・ベンチのステート・マシンを書くのが面倒だな. ― モジュールのインスタンシーエーションで入出力ピン をつなぎ忘れていた という思いをしたことはありませんか? 単純な記述の羅列や細かいミスへの注力が続くと,本来 力を入れるべき,アーキテクチャの設計まで億劫になって しまいます.また,「コンパイル(論理合成)は通るのに, シミュレーションやFPGA上で動作させると,何かおか しい」という事態に頭を悩ませ,原因はうっかりミスだっ たということも一度や二度ではないと思います. 記述の手間がもっと省けて,コンパイル時に強力にエ ラー・チェックしてくれるHDL言語ないかなあ…という 要求に応えてくれるのがBluespec System Verilogです (図1).VHDLがまじめなキャリア・ウーマン,Verilog ▲ 図2 Bluespec System Verilogは ツ ンデレ娘 きっちりしていてキャリアも長いVHDL,あいま 新世代のESL合成ソリューション Bluespec System Verilogのすすめ 本章では,高位設計言語であるBluespec System Verilogを紹介する.こ の言語では,コンパイル時にしっかりエラー検出ができ,また,さまざまなライブ ラリも提供している.FPGAやASICが大規模化し複雑な回路を設計する機会が 増えてきた今,知っておくべき技術だろう. (編集部) 三好 健文 出典: CQ出版 Interface 2011年2月号より
4.
FPGAの活用シーン 4 独自の回路を実現できるハードウェア 特定の処理を低消費電力で高性能処理 デバイスに近い処理を簡単に実現 自由なI/Oポートの定義 ASIC開発のプロトタイプとして 特定用途向け少数生産の製品として
5.
例) freeocean 5 最大スループット: 1Gbps 最大同時処理コネクション数:
50万 秒間同時接続数: 約2万HTTPリクエスト 最大消費電力: 300W以下 ハードウェアWebキャッシュサーバ
6.
ここから,今日の本題
7.
.java% Java % .vhdl% Java % / JavaRock% JVM% JavaRockやってます 7 JavaRockの目指すところ JavaプログラムをそのままHDLに変換→FPGA上のHWにする 追加構文,データ型は導入しない 記述に制限は加える HDLで書けることをJavaで書けるようにする
ではない Javaで書けることを全部HDLにする ではない http://javarock.sourceforge.net/
8.
FPGAの開発手法の主役 8 HDL(Hardware Description Language) によるRTL(Register
Transfer Level)設計 + > a b x y f g h counter+1 clk
9.
FPGA上のプログラミングとは 9 論理回路構成要素の演算内容を決める 論理回路構成要素同士をどう接続するかを決める cf. http://commons.wikimedia.org/wiki/File:Two_women_operating_ENIAC_(full_resolution).jpg
10.
HDLによる設計のメリット/デメリット 10 ロジックを抽象化した式/構文で設計できる クロックレベルのデータ制御 細粒度の並列性の活用 状態 を自分で管理しなければいけない デバッグ/動作検証が難しい アルゴリズムを設計するには記述が煩雑 メリット デメリット
11.
HDLによる設計のデメリットを克服する方法 11 FPGAとは別にプロセッサを持ってくる FPGAの中にプロセッサを作る より抽象度の高い設計をする FPGAを使うのをやめる 高位合成言語/処理系の活用
12.
HDLによる設計のデメリットを克服する方法 12 FPGAとは別にプロセッサを持ってくる FPGAの中にプロセッサを作る より抽象度の高い設計をする FPGAを使うのをやめる 高位合成言語/処理系の活用 環境/ソース保守コストの増大
13.
HDLによる設計のデメリットを克服する方法 13 FPGAとは別にプロセッサを持ってくる FPGAの中にプロセッサを作る より抽象度の高い設計をする FPGAを使うのをやめる 高位合成言語/処理系の活用
14.
高位合成言語/処理系に何を求めるか 記述コストの軽減 高い抽象度の表現方法を利用したい 言語習得のコストは低く抑えたい 動作検証/デバッグコストの軽減 短時間で動作を確認したい 見通しよく手軽なデバッグをしたい FPGAのパフォーマンスの活用 粗粒度,細粒度の並列性を活用したい IPコア,FPGA内蔵機能を活用したい 14
15.
沢山の高位合成言語/処理系 15 Vol. 29 No.
1 Feb. 2012 81 表 1 ベース言語別に分類した高位合成言語の例 ベースの言語 言語名 C BACH-C[5],Handel-C[6],DeepC Compiler[7],PICASSO[8],COBRA-ABS[9], DEFACTO Compiler[10],Streams-C[11],GARP C Compiler[12],SA-C[13], Impulse-C[14],SpecC[15],GorillaC[16] C++ SystemC[17],OCAPI[18],HP-Machine[19] Java Galadriel/Nenya[20],JHDL[21],Lime[22],MaxCompiler[23],Sea Cucumber[24], JavaRock[25] C# Kiwi[26] Python PHDL[27],MyHDL[28] Ruby RHDL[29] ML CAPH[30] Fortran DeepC Compiler[7],ROCCC[31],SRC-6[32] Haskell Lava[33], Bluespec System Verilog[34](BSV) Matlab MATCH[35],DEFACTO Compiler[10] た言語および言語処理系では,高水準言語の機能を 用いて記述された部分とハードウェア化の対象とな また,オブジェクト指向言語において,クラスのイ ンスタンスの動的な生成を実現するのは困難である.
16.
沢山の高位合成言語/処理系(設計方針別) 16 タイプ1: 既存の言語を活用したHDL(文法.型の導入) タイプ2: 既存の言語をそのままHWに タイプ3:
抽象度の高い新しいHDL コンパイラでがんばる FPGAをどう活用するか,が 洗練されていて素敵!! 型?型クラス? レジスタ? 高階関数 既存の言語に文法,型を導入 馴染みの文法でハードウェア記述ができる デバッグに時間がかかる(RTL/TLMでシミュレーション)
17.
沢山の高位合成言語/処理系(設計方針別) 17 タイプ1: 既存の言語を活用したHDL(文法.型の導入) タイプ2: 既存の言語をそのままHWに タイプ3:
抽象度の高い新しいHDL コンパイラでがんばる FPGAをどう活用するか,が 洗練されていて素敵!! 型?型クラス? レジスタ? 高階関数 既存の言語に文法,型を導入 馴染みの文法でハードウェア記述ができる デバッグに時間がかかる(RTL/TLMでシミュレーション)
18.
高位合成処理系 入力言語として見たJava 18 クラスによるオブジェクト指向設計 ←HWのモジュール設計との親和性が高そう Threadやwait-notify,synchronizedの仕組み ←言語仕様内で並列性の記述ができそう 明示的なポインタを扱う必要がない ←言語の想定するメモリ構造から自由になれそう 動的な振る舞いがたくさんある ←HW化するのは厄介そう コンパイラでがんばれるか?
19.
第391回 PTT 2013.
6. 28 JavaRockの現状 JavaプログラムをそのままHW化する 追加構文,データ型は導入しない 記述に制限は加える(できないものはできない) プログラムカウンタをステートマシンに置換 基本1文1状態 ← 基本ブロック内の並列化くらい 制御構造に対応するステートマシンの入れ子 メソッド呼び出し相当のHDLコード生成 Threadによる並列処理記述 いくつかの都合の良いアノテーション 19
20.
今日のお品書き JavaRockってこんな感じ BlokusDuoプレーヤ作ってます(...のはず) 20
21.
はじめてのJavaRock LEDをチカチカする シリアルでエコーバック ボタンを押したら何か(LED反転) 21
22.
LEDチカチカ ゆっくり明るくして,ゆっくり暗くして 22 PERIOD時間かけてゆっくり明るくする: for i in
0..PERIOD-1 LEDを点灯する (i * 単位時間) 待つ LEDを消灯する (PERIDO-i * 単位時間) 待つ } たとえば,↓な感じです.
23.
Javaで書くと... 23 public class Firefly
extends Thread{ public boolean flag = false; private final static int PERIOD = 500; private final static int SLEEP_WEIGHT = 256; private void sleep(int v){ for(int k = 0; k < (v * SLEEP_WEIGHT); k++){ ; } } public void run(){ while(true){ for(int i = 0; i < PERIOD; i++){ flag = true; sleep(i); flag = false; sleep(PERIOD-i); } for(int i = 0; i < PERIOD; i++){ flag = true; sleep(PERIOD-i); flag = false; sleep(i); } sleep(1); sleep(1); } } }
24.
トップでインスタンス生成/実行 24 import net.wasamon.javarock.rt.*; @javarockhdl public class
test{ private final Firefly obj0 = new Firefly(); private final echo obj1 = new echo(); private final MemoriedButton obj2 = new MemoriedButton(); public boolean flag; public boolean btn_out; @auto public void main(){ obj0.start(); obj1.start(); obj2.start(); while(true){ flag = obj0.flag; btn_out = obj2.flag; } } }
25.
デモ
26.
BlokusDuoプレーヤを作ろう!! 1∼5個の正方形によるコマを使う 2人のプレーヤが交互に打ち合う 打てる場所は 自分のコマと辺を共有しない 自分のコマと頂点を共有する 余った正方形数が多い方が負け いくつかボーナスポイントがある 26
27.
何が必要か 手をやりとするプロトコルのやりとり コンテストの場合UARTを使う 手のエンコード/デコード 間違ったところに置かない 勝てるようなところに置いていく 27
28.
BlokusDuoプレーヤ 28 SimplePlayer BlokusBoard + init +
setTurnCode + setOpponentMove + getFirstMoveCode + getNextMove + init + get(x, y) + byte getSym() + isValid(x, y, c, id, rot) + move(x, y, c, id, rot) board プレーヤとしての思考ルーチン 盤面の管理/合法手の判定 GameAgent プロトコル処理/手のやりとり player IO
29.
すごーく単純な戦略の場合 29 private int getNextMove1(){ int
code = 0; while(true){ if(nextId < 0){ break; } // もうコマが残ってないからあきらめ for(int i = 0; i < COLS; i++){ // 左の for(int j = 0; j < ROWS; j++){ // 一番上から for(int k = 0; k < 8; k++){ // コマを回転させつつ if(board.isValid(COLS - i - 1, ROWS - j - 1, myColor, nextId, k) == true){ // 置ける? // 置けるなら置いちゃう!! board.move(COLS - i - 1, ROWS - j - 1, myColor, nextId, k); // 自分の盤を更新 code = encode(COLS - i -1, ROWS - j - 1, nextId, k); // 相手に通知するため nextId = nextId - 1; // 次回は次のコマから return code; } } } } nextId = nextId - 1; // 今のコマは諦めて次のコマを試す. } return -1; }
30.
JavaRockを使うメリット ややこしいコードはJavaの方が楽 SimplePlayer,BlokusBoardみたいなHWに 関係ないコードはSWとして実行可能 30 → SW上でアルゴリズムの素性を手軽にチェック → v.s
HDLで 「いやX言語の方が」...もあるでしょうけど
31.
デモ
32.
勘違いして欲しくないこと 32 JavaだけでFPGAが活用できるわけがないじゃない!! AXI Main Logic generated by
JavaRock Main Logic generated by VHDL/Verilog Central Direct Memory Access Controller DDR3 PCIe Controller ロジック ロジック DMA DDR3 PCIe AXI VHDL/Verilogで書いたモジュールを埋め込み可能 JavaRockで書いたモジュールをVHDL/Verilogな モジュールにつなぐことも →私もそう思います...
33.
まとめなど JavaRockの紹介をしました JavaRockでBlokusDuoプレーヤ作ってます アルゴリズムに手がまわってない 9/20が申し込み締め切り(ICFPT併設コンペ) http://javarock.sourceforge.net/ http://www.slideshare.net/miyox/ptt391 33 JavaRock関連URL http://lut.eee.u-ryukyu.ac.jp/dc13/index.html
Download