Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
あいさつ
自己紹介!   Twitter @nobonobo   メカトロソフト屋   PythonMatrixJp 運営の Pythonista   ” あ”のつく会社の大阪オフィスで働いている。   最近ホームページが出来ました!    h...
Python を始めたきっかけ   8年前ロボットミドルウェア開発に携わった。   CORBA が使えるスクリプトが必要だった。   チャートからロボット動作の台本を作るツール。   → 近未来家庭のセットでロボットのお芝居を
そのときの成果物は・・・   いろいろ発展して使われているみたいです。
Python でフィジカルコンピューティング ハードに挑戦してみませんか?
なぜ今ハードなのか?   最近ハードとソフトの融合が熱い!   光ったり動いたり音出たりって単純に楽しい!   新しいコミュニケーションの形が生まれるかも?
マルチタッチの躍進   直感的な意志を機器に伝えられることができるよう    になった!   GPS やコンパス、    加速度計を組合せて       セカイカメラ       TriSat
Kinnect の可能性   すでに多くの応用ハックが!   人の人数、顔や骨の姿勢まで推定できる!   応用範囲が広すぎる!
いまこそハード&ソフトだ!   どちらか一方では成熟してきていて、    なかなか地味な変化しか生まれない。   新しいなにかを求めるならハードとソフトの融合を。   ソフト屋さんはハードを学ぼう!   ハード屋さんはソフトを学ぼう!
Python でハードに絡む   やり方は以下の3通りa)ハード自体は専用言語で開発。 PC とハードをつ ないで、 PC 上の Python から制御!b)マイコン上で Python を動かす!c)Python 記述をからハードそのものを作る!
PC にハードをつなぐ   例えば・・・
Python モジュールの充実ぶりは異常   PySerial   PyParallel   PyVISA ( GPIB )   PyUSB   PyBluez ( Bluetooth )   python-wifi ( WiFi ...
ぜひやってみてください   楽しいですよ〜
b) 案について   専用言語で開発したくない!   マイコンソフト開発に Python 使えないの?   Python で書きたいでござる!   Python のノウハウを生かしたいでござる!
そこで python-on-a-chip ですよ   特徴       Python バイトコードが走る VM       マイコン向けに省メモリデザイン       ガベージコレクタ搭載       ROM64KB 、 RAM8KB...
従来のマイコン開発   組み込みの世界はプロプライエタリツールだらけ   コンパイル、リンク、バイナリ作成、ダウンロード   手順が複雑で初心者泣かせ。   マイコンごとに機能の違いや記述スタイルに差   アプリのダイナミックロードは...
今回のやり方だとなにがいいの?   Python でアプリを組める!   バイトコードだけ入れ替えてアプリを更新できる   メモリ管理しなくていい   エラー処理がある   VM ならではの機能が使える
サポート機能   boolean   Integer / [float] / tuple / list / dict   function / module / class   generator / decorator   thre...
残念ながらまだない   Python コードコンパイラ   足回りのモジュール   初心者向けの環境
Python-on-a-chip の勘所   実装コードの書き方   バイトコード生成   ユーザコードの配置戦略   VM ポーティングのポイント   実際のアプリコード紹介
実装コードの書き方   書き方は3種類       C 記述で機能実装       Pure-python で機能実装       Python 記述内に埋め込み C 記述
バイトコードの生成   pyImgCreator.py というユーティリティを使う                                       ByteCode    Python 記述     Python 記述      ...
ユーザーコードの配置   ユーザコードをどの段階で VM に渡すか?                        ユーザコードから     ByteCode                                      C ラン...
VM ポーティングのポイント   6つのハンドラを実装するだけ       plat_init()   初期化や準備       plat_memGetByte()   バイトコード取得       plat_getByte()    ...
実際のアプリコード      メモリの読み書き APIdef mem_read(addr):                                       def mem_write(addr, value):  """__NA...
実際のアプリコード   ColorLED クラス    class ColorLed(object):       def __init__(self):           レジスタ初期設定       def set(self, r,g,...
PWM による電力制御   パルス幅で電力出力を可変させる手法。   最近のマイコンはたいがいこの機能を持っている。
のこぎり波ジェネレータ   Python の記述でそのまんま     def gen(start):       phase = start       while 1:          phase += 1          phase ...
動作デモ   R と G と B でノコギリ波の初期値を 1/3 づつずらし    てジェネレータを初期化。   あとは延々と RGB を出力してる。    def main():      cled = ColorLed()      r...
できたらいいなぁ   バイトコード生成が Python で出来ちゃうので。   AppEngine 上に開発環境構築できないか?   あとは足回りをしっかり揃えることで面白くなる。
python-on-a-chip まとめ   組み込みノウハウに詳しい人とそうでない人が分    業するのに使える。   苦労する部分を解決してしまえば、マイコン応用ア    プリがガンガン量産できる。   OS に頼らなくてもマルチタス...
質問
余談1:最近のハードウェア事情●   プログラマブルなハードデバイス●   さらっと紹介
FPGA/PLD●   コンフィグメモリを持ち●    その内容により動作ロジックをカスタマイズ可能●    ソフトの柔軟性を兼ね備えたハード
ASIC●   一般に売られる「役割の決まった半導体」の製法●    消費電力が少ない●    作ってもらうのに大金と期間が必要●   FPGA で試作して ASIC で量産という流れが多い
研究・試作分野での FPGA●   初期費用が少なくて済む●    画像処理やリアルタイム処理など●    10 GbE や100 GbE のファイヤーウォール●   ナノ秒オーダーでのスケジューリングが動く
方式の比較            変更の容易さ   消費電力ソフトウェア( DSP など)     ◎      高い FPGA/PLD     ○      程々   ASIC       ×      低い
リアルの課題●   現実の状況をより正確に把握するのは難しい!●    人、車の動きを捉えること。●    それもより現実的なスピードで!●   (人が通り過ぎたあとで人が通った事を知れても    役に立たない)
c) 案について   もっとハードならではという事が色々できないの?   リアルタイムに大量のデータを処理するとかできん    の?   ハードは並列処理が得意なんだからそれを生かせ    ないの?
そこで MyHDL ですよ!   特徴       Python2HDL トランスレータ       ジェネレータを使った並列ロジック設計及びシミュレー        ション       波形データの出力機能       他のオープン...
要するに   Python で FPGA/PLD の開発ができるよ!   予算があれば ASIC も!   というプロジェクトです。
MyHDL による FPGA 開発手順   Python コードによる機能モデル作成   動確用シミュレーションモデル作成   シミュレーション結果の検証   HDL へのトランスレート   論理合成
余談2:ハード屋の常識●   モックモデルの重視●    ユニットテストの重視●    DbC ( DesignByContract )的な考えを重視●   つまり、実装コードよりもテストコードやモックコー    ドや制約ルールの方をたくさん書...
ソフト業界で重視の間違いじゃね?●   手戻りが許されにくい風潮もあってハード屋さんの    方が先にすんなり受け入れられた。●   ソフト屋さんは手直しすればよかったこともあって    導入が遅れたのかも?
MyHDL の基本デコレータ   @always_comb    常に従う振る舞いを記述するのに使う    HDL に変換可能   @always    特定タイミングの振る舞いを記述するのに使う    HDL に変換可能   @inst...
実際のコード   Python コード     from myhdl import *     LED_NUM = 24     def driver(clock, sin, latch, led):       shift_latch = ...
実際のコード   トランスレート後 verilog コード       `timescale 1ns/10ps       module driver (clock, sin, latch, led);       input clock; ...
実際のコード   シミュレーション記述    from myhdl import *    Import logic1    def test_logic1():      clock = Signal(bool(False))      a...
テストの実行テストを実行する Python コードtb_fsm = traceSignals(test_logic1)sim = Simulation(tb_fsm)sim.run()これで、vcdファイルという波形ログが保存される。
テスト結果波形vcdファイルは gtkview というツールで見れる。
最後はベンダーツールで   HDL ( verilog や VHDL )にトランスレートしたら、       フィッティング       ポストフィットシミュレーション       ビットストリーム生成       コンフィギュレーシ...
実演   ドラム型 LED ディスプレイの動画紹介
参考情報   http://python.matrix.jp/modules/myhdl.html   http://opencores.org/ HDL のオープンソースサイ    ト   rpexzeros Python プロセッサを...
MyHDL まとめ   opencores にも MyHDL を使ったプロジェクトがち    らほら   MyHDL はベンダーロックインすることなくモデルを    みんなで共有できる。   シビアなスケジュールでの動きを Python ...
質問
まとめ全体   Python はハード屋の仕事に使えるモジュールがそ    ろっている。   ハードとソフトの融合から新しい世界が開ける。   ソフト屋のみなさんハードにチャレンジしよう!
おまけハードの事始めには是非弊社グループ企業運営のはんだづけカフェ にお越しください。
おしまいご静聴ありがとうございました
Upcoming SlideShare
Loading in …5
×

Python physicalcomputing

3,669 views

Published on

#pyconjp 2011/01

Published in: Technology
  • Be the first to comment

Python physicalcomputing

  1. 1. あいさつ
  2. 2. 自己紹介! Twitter @nobonobo メカトロソフト屋 PythonMatrixJp 運営の Pythonista ” あ”のつく会社の大阪オフィスで働いている。 最近ホームページが出来ました! http://osaka.accense.com/
  3. 3. Python を始めたきっかけ 8年前ロボットミドルウェア開発に携わった。 CORBA が使えるスクリプトが必要だった。 チャートからロボット動作の台本を作るツール。 → 近未来家庭のセットでロボットのお芝居を
  4. 4. そのときの成果物は・・・ いろいろ発展して使われているみたいです。
  5. 5. Python でフィジカルコンピューティング ハードに挑戦してみませんか?
  6. 6. なぜ今ハードなのか? 最近ハードとソフトの融合が熱い! 光ったり動いたり音出たりって単純に楽しい! 新しいコミュニケーションの形が生まれるかも?
  7. 7. マルチタッチの躍進 直感的な意志を機器に伝えられることができるよう になった! GPS やコンパス、 加速度計を組合せて  セカイカメラ  TriSat
  8. 8. Kinnect の可能性 すでに多くの応用ハックが! 人の人数、顔や骨の姿勢まで推定できる! 応用範囲が広すぎる!
  9. 9. いまこそハード&ソフトだ! どちらか一方では成熟してきていて、 なかなか地味な変化しか生まれない。 新しいなにかを求めるならハードとソフトの融合を。 ソフト屋さんはハードを学ぼう! ハード屋さんはソフトを学ぼう!
  10. 10. Python でハードに絡む やり方は以下の3通りa)ハード自体は専用言語で開発。 PC とハードをつ ないで、 PC 上の Python から制御!b)マイコン上で Python を動かす!c)Python 記述をからハードそのものを作る!
  11. 11. PC にハードをつなぐ 例えば・・・
  12. 12. Python モジュールの充実ぶりは異常 PySerial PyParallel PyVISA ( GPIB ) PyUSB PyBluez ( Bluetooth ) python-wifi ( WiFi ) pypcap ( Ether ) etc...
  13. 13. ぜひやってみてください 楽しいですよ〜
  14. 14. b) 案について 専用言語で開発したくない! マイコンソフト開発に Python 使えないの? Python で書きたいでござる! Python のノウハウを生かしたいでござる!
  15. 15. そこで python-on-a-chip ですよ 特徴  Python バイトコードが走る VM  マイコン向けに省メモリデザイン  ガベージコレクタ搭載  ROM64KB 、 RAM8KB あれば十分  すでに十数種のマイコンで動作実績あり  PyCon2009 の PyMite-LT で作者登壇  GPLv2
  16. 16. 従来のマイコン開発 組み込みの世界はプロプライエタリツールだらけ コンパイル、リンク、バイナリ作成、ダウンロード 手順が複雑で初心者泣かせ。 マイコンごとに機能の違いや記述スタイルに差 アプリのダイナミックロードは基本できない 常にリビルド&バイナリ作成&ダウンロードの手間
  17. 17. 今回のやり方だとなにがいいの? Python でアプリを組める! バイトコードだけ入れ替えてアプリを更新できる メモリ管理しなくていい エラー処理がある VM ならではの機能が使える
  18. 18. サポート機能 boolean Integer / [float] / tuple / list / dict function / module / class generator / decorator thread ( green-thread ) 対話型コンソール
  19. 19. 残念ながらまだない Python コードコンパイラ 足回りのモジュール 初心者向けの環境
  20. 20. Python-on-a-chip の勘所 実装コードの書き方 バイトコード生成 ユーザコードの配置戦略 VM ポーティングのポイント 実際のアプリコード紹介
  21. 21. 実装コードの書き方 書き方は3種類  C 記述で機能実装  Pure-python で機能実装  Python 記述内に埋め込み C 記述
  22. 22. バイトコードの生成 pyImgCreator.py というユーティリティを使う ByteCode Python 記述 Python 記述 Python 記述 py ImgCreator C ソース (埋め込まれた C コードがあれば) もし C ソースが生成されたら必ず VM と一緒にリン クする必要がある。
  23. 23. ユーザーコードの配置 ユーザコードをどの段階で VM に渡すか? ユーザコードから ByteCode C ランタイム 生成した C ソース ユーザの C ソース VM の C ソース ビルド&リンク バイナリ マイコン Flash ライター
  24. 24. VM ポーティングのポイント 6つのハンドラを実装するだけ  plat_init() 初期化や準備  plat_memGetByte() バイトコード取得  plat_getByte()  plat_putByte()  plat_getMsTicks() 起動後経過時間取得  plat_reportError() エラーハンドラ
  25. 25. 実際のアプリコード  メモリの読み書き APIdef 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. 26. 実際のアプリコード ColorLED クラス class ColorLed(object): def __init__(self): レジスタ初期設定 def set(self, r,g,b): R,G,B 出力設定
  27. 27. PWM による電力制御 パルス幅で電力出力を可変させる手法。 最近のマイコンはたいがいこの機能を持っている。
  28. 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. 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. 30. できたらいいなぁ バイトコード生成が Python で出来ちゃうので。 AppEngine 上に開発環境構築できないか? あとは足回りをしっかり揃えることで面白くなる。
  31. 31. python-on-a-chip まとめ 組み込みノウハウに詳しい人とそうでない人が分 業するのに使える。 苦労する部分を解決してしまえば、マイコン応用ア プリがガンガン量産できる。 OS に頼らなくてもマルチタスクが実現できる。
  32. 32. 質問
  33. 33. 余談1:最近のハードウェア事情● プログラマブルなハードデバイス● さらっと紹介
  34. 34. FPGA/PLD● コンフィグメモリを持ち● その内容により動作ロジックをカスタマイズ可能● ソフトの柔軟性を兼ね備えたハード
  35. 35. ASIC● 一般に売られる「役割の決まった半導体」の製法● 消費電力が少ない● 作ってもらうのに大金と期間が必要● FPGA で試作して ASIC で量産という流れが多い
  36. 36. 研究・試作分野での FPGA● 初期費用が少なくて済む● 画像処理やリアルタイム処理など● 10 GbE や100 GbE のファイヤーウォール● ナノ秒オーダーでのスケジューリングが動く
  37. 37. 方式の比較 変更の容易さ 消費電力ソフトウェア( DSP など) ◎ 高い FPGA/PLD ○ 程々 ASIC × 低い
  38. 38. リアルの課題● 現実の状況をより正確に把握するのは難しい!● 人、車の動きを捉えること。● それもより現実的なスピードで!● (人が通り過ぎたあとで人が通った事を知れても 役に立たない)
  39. 39. c) 案について もっとハードならではという事が色々できないの? リアルタイムに大量のデータを処理するとかできん の? ハードは並列処理が得意なんだからそれを生かせ ないの?
  40. 40. そこで MyHDL ですよ! 特徴  Python2HDL トランスレータ  ジェネレータを使った並列ロジック設計及びシミュレー ション  波形データの出力機能  他のオープンソースシミュレータとの連携  活発な開発  昨年末に0.7リリース  LGPL
  41. 41. 要するに Python で FPGA/PLD の開発ができるよ! 予算があれば ASIC も! というプロジェクトです。
  42. 42. MyHDL による FPGA 開発手順 Python コードによる機能モデル作成 動確用シミュレーションモデル作成 シミュレーション結果の検証 HDL へのトランスレート 論理合成
  43. 43. 余談2:ハード屋の常識● モックモデルの重視● ユニットテストの重視● DbC ( DesignByContract )的な考えを重視● つまり、実装コードよりもテストコードやモックコー ドや制約ルールの方をたくさん書く事になる
  44. 44. ソフト業界で重視の間違いじゃね?● 手戻りが許されにくい風潮もあってハード屋さんの 方が先にすんなり受け入れられた。● ソフト屋さんは手直しすればよかったこともあって 導入が遅れたのかも?
  45. 45. MyHDL の基本デコレータ @always_comb 常に従う振る舞いを記述するのに使う HDL に変換可能 @always 特定タイミングの振る舞いを記述するのに使う HDL に変換可能 @instance シミュレーション用シナリオを記述するのに使う HDL には変換できない
  46. 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. 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. 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. 49. テストの実行テストを実行する Python コードtb_fsm = traceSignals(test_logic1)sim = Simulation(tb_fsm)sim.run()これで、vcdファイルという波形ログが保存される。
  50. 50. テスト結果波形vcdファイルは gtkview というツールで見れる。
  51. 51. 最後はベンダーツールで HDL ( verilog や VHDL )にトランスレートしたら、  フィッティング  ポストフィットシミュレーション  ビットストリーム生成  コンフィギュレーションメモリの更新 という流れは FPGA ベンダツールで
  52. 52. 実演 ドラム型 LED ディスプレイの動画紹介
  53. 53. 参考情報 http://python.matrix.jp/modules/myhdl.html http://opencores.org/ HDL のオープンソースサイ ト rpexzeros Python プロセッサを作ろうとしていた。 (無茶しやがって・・・。) myhdl-doc-jp ドキュメント翻訳プロジェクト
  54. 54. MyHDL まとめ opencores にも MyHDL を使ったプロジェクトがち らほら MyHDL はベンダーロックインすることなくモデルを みんなで共有できる。 シビアなスケジュールでの動きを Python の記述で 実現できる。(ナノ秒単位)
  55. 55. 質問
  56. 56. まとめ全体 Python はハード屋の仕事に使えるモジュールがそ ろっている。 ハードとソフトの融合から新しい世界が開ける。 ソフト屋のみなさんハードにチャレンジしよう!
  57. 57. おまけハードの事始めには是非弊社グループ企業運営のはんだづけカフェ にお越しください。
  58. 58. おしまいご静聴ありがとうございました

×