Python physicalcomputing | PDF
Recommended
PDF
PPTX
PPTX
PDF
PDF
KEY
関東GPGPU勉強会 LLVM meets GPU
ODP
PDF
組み込み関数(intrinsic)によるSIMD入門
PPTX
PPTX
研究者のための Python による FPGA 入門
PDF
Wrapping a C++ library with Cython
PPTX
PDF
PDF
PDF
PDF
Adaptive optimization of JIT compiler
PDF
PDF
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
PDF
Pythonを用いた高水準ハードウェア設計環境の検討
PDF
PDF
高位合成ツールVivado hlsのopen cv対応
PPTX
PDF
PDF
PDF
Pynqでカメラ画像をリアルタイムfastx コーナー検出
PDF
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
PDF
PDF
競技プログラミングにおけるコードの書き方とその利便性
PDF
PDF
More Related Content
PDF
PPTX
PPTX
PDF
PDF
KEY
関東GPGPU勉強会 LLVM meets GPU
ODP
PDF
組み込み関数(intrinsic)によるSIMD入門
What's hot
PPTX
PPTX
研究者のための Python による FPGA 入門
PDF
Wrapping a C++ library with Cython
PPTX
PDF
PDF
PDF
PDF
Adaptive optimization of JIT compiler
PDF
PDF
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
PDF
Pythonを用いた高水準ハードウェア設計環境の検討
PDF
PDF
高位合成ツールVivado hlsのopen cv対応
PPTX
PDF
PDF
PDF
Pynqでカメラ画像をリアルタイムfastx コーナー検出
PDF
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
PDF
PDF
競技プログラミングにおけるコードの書き方とその利便性
Similar to Python physicalcomputing
PDF
PDF
PPTX
もしも… Javaでヘテロジニアスコアが使えたら…
KEY
PDF
PPTX
PDF
第3回ローレイヤー勉強会 : FPGAでコンピュータを作ってみた
PDF
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PPTX
PDF
PDF
FPGAベースのソーティングアクセラレータの設計と実装
PDF
Synthesijer.Scala (PROSYM 2015)
PDF
ものづくりプロジェクトII 一日でわかるArduino入門
PDF
PDF
KEY
NVIDIA Japan Seminar 2012
PPTX
Androidとfpgaを高速fifo通信させちゃう
PDF
PDF
PPTX
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
Recently uploaded
PPTX
「Drupal SDCについて紹介」2025/10/17の勉強会で発表されたものです。
PDF
技育祭2025秋 サボろうとする生成AIの傾向と対策 登壇資料(フューチャー渋川)
PDF
FOSS4G Hokkaido - QFieldをランナーのために活用した - QField for runners
PDF
「似ているようで微妙に違う言葉」2025/10/17の勉強会で発表されたものです。
PPTX
How to buy a used computer and use it with Windows 11
PDF
DX人材育成 サービスデザインで実現する「巻き込み力」の育て方 by Graat
PDF
FOSS4G Japan 2024 ハザードマップゲームの作り方 Hazard Map Game QGIS Plugin
PPTX
FOSS4G Japan 2025 - QGISでスムーズに地図を比較 - QMapCompareプラグインの紹介
Python physicalcomputing 1. 2. 自己紹介!
Twitter @nobonobo
メカトロソフト屋
PythonMatrixJp 運営の Pythonista
” あ”のつく会社の大阪オフィスで働いている。
最近ホームページが出来ました!
http://osaka.accense.com/
3. Python を始めたきっかけ
8年前ロボットミドルウェア開発に携わった。
CORBA が使えるスクリプトが必要だった。
チャートからロボット動作の台本を作るツール。
→ 近未来家庭のセットでロボットのお芝居を
4. 5. 6. なぜ今ハードなのか?
最近ハードとソフトの融合が熱い!
光ったり動いたり音出たりって単純に楽しい!
新しいコミュニケーションの形が生まれるかも?
7. マルチタッチの躍進
直感的な意志を機器に伝えられることができるよう
になった!
GPS やコンパス、
加速度計を組合せて
セカイカメラ
TriSat
8. 9. いまこそハード&ソフトだ!
どちらか一方では成熟してきていて、
なかなか地味な変化しか生まれない。
新しいなにかを求めるならハードとソフトの融合を。
ソフト屋さんはハードを学ぼう!
ハード屋さんはソフトを学ぼう!
10. Python でハードに絡む
やり方は以下の3通り
a)ハード自体は専用言語で開発。 PC とハードをつ
ないで、 PC 上の Python から制御!
b)マイコン上で Python を動かす!
c)Python 記述をからハードそのものを作る!
11. 12. Python モジュールの充実ぶりは異常
PySerial
PyParallel
PyVISA ( GPIB )
PyUSB
PyBluez ( Bluetooth )
python-wifi ( WiFi )
pypcap ( Ether )
etc...
13. 14. b) 案について
専用言語で開発したくない!
マイコンソフト開発に Python 使えないの?
Python で書きたいでござる!
Python のノウハウを生かしたいでござる!
15. そこで python-on-a-chip ですよ
特徴
Python バイトコードが走る VM
マイコン向けに省メモリデザイン
ガベージコレクタ搭載
ROM64KB 、 RAM8KB あれば十分
すでに十数種のマイコンで動作実績あり
PyCon2009 の PyMite-LT で作者登壇
GPLv2
16. 従来のマイコン開発
組み込みの世界はプロプライエタリツールだらけ
コンパイル、リンク、バイナリ作成、ダウンロード
手順が複雑で初心者泣かせ。
マイコンごとに機能の違いや記述スタイルに差
アプリのダイナミックロードは基本できない
常にリビルド&バイナリ作成&ダウンロードの手間
17. 今回のやり方だとなにがいいの?
Python でアプリを組める!
バイトコードだけ入れ替えてアプリを更新できる
メモリ管理しなくていい
エラー処理がある
VM ならではの機能が使える
18. サポート機能
boolean
Integer / [float] / tuple / list / dict
function / module / class
generator / decorator
thread ( green-thread )
対話型コンソール
19. 20. 21. 実装コードの書き方
書き方は3種類
C 記述で機能実装
Pure-python で機能実装
Python 記述内に埋め込み C 記述
22. バイトコードの生成
pyImgCreator.py というユーティリティを使う
ByteCode
Python 記述
Python 記述
Python 記述 py ImgCreator
C ソース
(埋め込まれた
C コードがあれば)
もし C ソースが生成されたら必ず VM と一緒にリン
クする必要がある。
23. ユーザーコードの配置
ユーザコードをどの段階で VM に渡すか?
ユーザコードから
ByteCode C ランタイム
生成した C ソース
ユーザの C ソース VM の C ソース
ビルド&リンク
バイナリ
マイコン Flash ライター
24. VM ポーティングのポイント
6つのハンドラを実装するだけ
plat_init() 初期化や準備
plat_memGetByte() バイトコード取得
plat_getByte()
plat_putByte()
plat_getMsTicks() 起動後経過時間取得
plat_reportError() エラーハンドラ
25. 実際のアプリコード
メモリの読み書き API
def mem_read(addr): def mem_write(addr, value):
"""__NATIVE__ """__NATIVE__
pPmObj_t offset; pPmObj_t offset;
PmReturn_t retval = PM_RET_OK; pPmObj_t value;
pPmObj_t result; PmReturn_t retval = PM_RET_OK;
unsigned long *ptr; unsigned long *ptr;
if (NATIVE_GET_NUM_ARGS() != 1) { if (NATIVE_GET_NUM_ARGS() != 2){
PM_RAISE(retval, PM_RET_EX_TYPE); PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;} return retval;}
offset = NATIVE_GET_LOCAL(0); offset = NATIVE_GET_LOCAL(0);
if (OBJ_GET_TYPE(offset) != OBJ_TYPE_INT) { if (OBJ_GET_TYPE(offset) != OBJ_TYPE_INT) {
PM_RAISE(retval, PM_RET_EX_TYPE); PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;} return retval;}
ptr = (unsigned long *)(((pPmInt_t)offset)->val); value = NATIVE_GET_LOCAL(1);
retval = int_new(*ptr, &result); if (OBJ_GET_TYPE(value) != OBJ_TYPE_INT) {
NATIVE_SET_TOS(result); PM_RAISE(retval, PM_RET_EX_TYPE);
return retval; return retval;}
""" ptr = (unsigned long *)(((pPmInt_t)offset)->val);
pass *ptr = ((pPmInt_t)value)->val;
return retval;
"""
pass
26. 実際のアプリコード
ColorLED クラス
class ColorLed(object):
def __init__(self):
レジスタ初期設定
def set(self, r,g,b):
R,G,B 出力設定
27. 28. のこぎり波ジェネレータ
Python の記述でそのまんま
def gen(start):
phase = start
while 1:
phase += 1
phase &= 511
val = abs(phase-256)
if val<0:
val = 0
if val>255:
val = 255
yield val
29. 動作デモ
R と G と B でノコギリ波の初期値を 1/3 づつずらし
てジェネレータを初期化。
あとは延々と RGB を出力してる。
def main():
cled = ColorLed()
r = gen(0)
g = gen(512/3)
b = gen(512*2/3)
while 1:
cled.set(r.next(),g.next(),b.next())
sys.wait(1)
30. できたらいいなぁ
バイトコード生成が Python で出来ちゃうので。
AppEngine 上に開発環境構築できないか?
あとは足回りをしっかり揃えることで面白くなる。
31. python-on-a-chip まとめ
組み込みノウハウに詳しい人とそうでない人が分
業するのに使える。
苦労する部分を解決してしまえば、マイコン応用ア
プリがガンガン量産できる。
OS に頼らなくてもマルチタスクが実現できる。
32. 33. 34. FPGA/PLD
● コンフィグメモリを持ち
●
その内容により動作ロジックをカスタマイズ可能
●
ソフトの柔軟性を兼ね備えたハード
35. ASIC
● 一般に売られる「役割の決まった半導体」の製法
●
消費電力が少ない
●
作ってもらうのに大金と期間が必要
● FPGA で試作して ASIC で量産という流れが多い
36. 研究・試作分野での FPGA
● 初期費用が少なくて済む
●
画像処理やリアルタイム処理など
●
10 GbE や100 GbE のファイヤーウォール
● ナノ秒オーダーでのスケジューリングが動く
37. 方式の比較
変更の容易さ 消費電力
ソフトウェア
( DSP など) ◎ 高い
FPGA/PLD ○ 程々
ASIC × 低い
38. リアルの課題
● 現実の状況をより正確に把握するのは難しい!
●
人、車の動きを捉えること。
●
それもより現実的なスピードで!
● (人が通り過ぎたあとで人が通った事を知れても
役に立たない)
39. c) 案について
もっとハードならではという事が色々できないの?
リアルタイムに大量のデータを処理するとかできん
の?
ハードは並列処理が得意なんだからそれを生かせ
ないの?
40. そこで MyHDL ですよ!
特徴
Python2HDL トランスレータ
ジェネレータを使った並列ロジック設計及びシミュレー
ション
波形データの出力機能
他のオープンソースシミュレータとの連携
活発な開発
昨年末に0.7リリース
LGPL
41. 要するに
Python で FPGA/PLD の開発ができるよ!
予算があれば ASIC も!
というプロジェクトです。
42. MyHDL による FPGA 開発手順
Python コードによる機能モデル作成
動確用シミュレーションモデル作成
シミュレーション結果の検証
HDL へのトランスレート
論理合成
43. 余談2:ハード屋の常識
● モックモデルの重視
●
ユニットテストの重視
●
DbC ( DesignByContract )的な考えを重視
● つまり、実装コードよりもテストコードやモックコー
ドや制約ルールの方をたくさん書く事になる
44. ソフト業界で重視の間違いじゃね?
● 手戻りが許されにくい風潮もあってハード屋さんの
方が先にすんなり受け入れられた。
● ソフト屋さんは手直しすればよかったこともあって
導入が遅れたのかも?
45. MyHDL の基本デコレータ
@always_comb
常に従う振る舞いを記述するのに使う
HDL に変換可能
@always
特定タイミングの振る舞いを記述するのに使う
HDL に変換可能
@instance
シミュレーション用シナリオを記述するのに使う
HDL には変換できない
46. 実際のコード
Python コード
from myhdl import *
LED_NUM = 24
def driver(clock, sin, latch, led):
shift_latch = Signal(intbv(0)[LED_NUM*3:])
output_latch = Signal(intbv(0)[LED_NUM*3:])
@always_comb
def combination():
led.next = output_latch
@always(clock.posedge)
def main_proc():
shift_latch.next = concat(shift_latch[LED_NUM*3-1:0], sin)
@always(latch.posedge)
def latch_proc():
output_latch.next = shift_latch
return instances()
47. 実際のコード
トランスレート後 verilog コード
`timescale 1ns/10ps
module driver (clock, sin, latch, led);
input clock; input sin; input latch;
output [71:0] led; wire [71:0] led;
reg [71:0] shift_latch; reg [71:0] output_latch;
assign led = output_latch;
always @(posedge latch) begin: DRIVER_LATCH_PROC
output_latch <= shift_latch;
end
always @(posedge clock) begin: DRIVER_MAIN_PROC
shift_latch <= {shift_latch[((24 * 3) - 1)-1:0], sin};
end
endmodule
48. 実際のコード
シミュレーション記述
from myhdl import *
Import logic1
def test_logic1():
clock = Signal(bool(False))
a = Signal(bool(False))
b = Signal(bool(False))
y = Signal(bool(False))
log1 = logic1.Logic1(clock, a, b, y)
@always(delay(50))
def clock_gen():
clock.next = not clock
@instance
def sequence1():
a.next = 1
b.next = 0
yeild clock.posedge
return instances()
49. 50. 51. 最後はベンダーツールで
HDL ( verilog や VHDL )にトランスレートしたら、
フィッティング
ポストフィットシミュレーション
ビットストリーム生成
コンフィギュレーションメモリの更新
という流れは FPGA ベンダツールで
52. 実演
ドラム型 LED ディスプレイの動画紹介
53. 参考情報
http://python.matrix.jp/modules/myhdl.html
http://opencores.org/ HDL のオープンソースサイ
ト
rpexzeros Python プロセッサを作ろうとしていた。
(無茶しやがって・・・。)
myhdl-doc-jp ドキュメント翻訳プロジェクト
54. MyHDL まとめ
opencores にも MyHDL を使ったプロジェクトがち
らほら
MyHDL はベンダーロックインすることなくモデルを
みんなで共有できる。
シビアなスケジュールでの動きを Python の記述で
実現できる。(ナノ秒単位)
55. 56. まとめ全体
Python はハード屋の仕事に使えるモジュールがそ
ろっている。
ハードとソフトの融合から新しい世界が開ける。
ソフト屋のみなさんハードにチャレンジしよう!
57. 58.