SlideShare ist ein Scribd-Unternehmen logo
1 von 26
AndroidとFPGAを高速FIFO
     通信させちゃう
     す~ @ksksue
自己紹介
•   す~: @ksksue
•   「つなげる」ことが今おもしろい
•   てことでFTDI大好きっこ
•   FPGA/Android/マイコンと手広くやっと
    ります
AndroidとFPGA
• FPGA/マイコンのフロントエンドとして
  のAndroid




これまで
Jtagでキャラクタ表示か?    リッチなUIライブラリ
LCDでドット絵書くか?      LCD、タッチパネルがついて
え、LCD描画ライブラリが     なんと3万円ポッキリ!
ウン百万円!?
Androidとハードを繋げる
    課題はインタフェース
今Androidと繋げるならADK?
FPGAとならMicrobridgeがあるって?


なんでなじみのシリアル・
SPI・I2C・パラレル通信が
ないのさ!?
その問題FTDIが解決します
• USB to
  – シリアル(UART,RS232C)
  – SPI
  – I2C
  – Jtag
                    FPGAと通信するなら
  –FIFO(パラレル) コレでしょう
Android to/from FPGA FIFO




      Asynchronous FIFO
今日はいろいろ話題
         つめこんでます
話題
• FPGA
• Android
• USB

ここようわからんって人は
Twitter:@ksksueに
メンション飛ばしてください。
あとで答えますから。
Android to/from FPGA FIFO

まずFPGAまわりの話から




      Asynchronous FIFO
今のところのVerilogファイル群
fpga/
└DE0_TOP.v
      src/                       TOPモジュールと
      ├ ftdi_fifo.v                ソースコード
      ├ ftdi_fifo_rd.v
      ├ ftdi_fifo_wr.v
      ├ misc.v
      └ timescale.v

      sim/
      ├ftdi_fifo/
      │├ ftdi_fifo_tb.v
                                      あとは
      │└ ft245fifo_sim_model.v
                                    テストベクタと
      ├ftdi_fifo_rd/
                                  シミュレーションモデル
      │ └ ftdi_fifo_rd_tb.v
      └ftdi_fifo_wr/
        └ ftdi_fifo_wr_tb.v
FTDI Asynchronous FIFO
      Read Timing

IN


OUT


IN



      Write Timing
IN


OUT


OUT

↑FPGA側から見たIN/OUT     引用:FT245R データシート
ライブパワーポインティング



           ftdi_fifo
         ステートマシン


   ftdi_fifo_rd   ftdi_fifo_wr
ftdi_fifo_rd.vのインタフェース
module ftdi_fifo_rd(
 // Connect to Inner Logic
  input iACT_RD_n, // Activate Read Sequence Signal     Activate
  output oDONE_RD_n, // Done Read Sequence Signal
                                                         Done
                                                      でモジュールの動き
  output oREADY_RD_n, // READY Read Sequence Signal
                                                        管理します
  output [7:0] oRD_DATA, // Write Data


  // Connect to FTDI FIFO Module
  input iFIFO_RXF_n, // Read from FIFO
  output oFIFO_RD_n, // Read Enable        ここはFIFO インタフェース
  input [7:0] iFIFO_DATA, // Read Data


  // Connect to System Signals
  input clk, // System Clock 50MHz(20ns)
  input rst // System Reset      カンマ消しわすれるのがイヤだから固定clk,rstは
  );                              最後に書くっていういわゆる我流ってやつです
ftdi_fifo_wr.vもほぼ同じ
module ftdi_fifo_wr(
  // Connect to Inner Logic
  input iACT_WR_n, // Activate Write Sequence Signal
  output oDONE_WR_n, // Done Write Sequence Signal
  output oREADY_WR_n, // Ready Write Sequence Signal
  input [7:0] iWR_DATA, // Write Data
  output oFIFO_OE_n, // Output Enable for Bi-direction Bus


  // Connect to FTDI FIFO Module
  input iFIFO_TXE_n, // Write to FIFO
  output oFIFO_WR_n, // Write Enable
  output [7:0] oFIFO_DATA, // Write Data


  // Connect to System Signals
  input clk, // System Clock 50MHz(20ns)
  input rst // System Reset
  );
ftdi_fifo.v
ftdi_fifo.vはftdi_fifo_rdとwrをあやつるステートマシン



       INIT

                 テスト回数のループ制御

DONE          LOOP
                                       0x00~0xFF Verifyの
                              VERIFY   ループ制御
                               LOOP


                     VERIFY            DATA
                      DATA             WAIT
余談
• 自分は基本的に
 – 順序回路
 – 組み合わせ回路
 – ステートマシン
でしか回路くめません。この3つしか使い
ません。ステートマシン設計がいつもア
タマを悩ませます。
余談:イラッとくるステートマシン1
「その遷移パターンないから大丈夫です」
      ステートマシン

      A                D
              依存



 C        B        G       E




     依存                F


 絶対にデッドロックおこさないんだな?
 おこさないよなっ!?
余談:イラッとくるステートマシン1




     A




C          B

                    D


G
               F         E




    できることなら直したいっ
余談:イラッとくるステートマシン2
 「修正しました(横着しました) 」
      ステートマシン
always@(posedge clk or negedge rst)
begin
  if(!rst) begin
      a <= 1'b0;
      b <= 1'b0;
      state <= ST_IDLE;
  end else begin
   if(foo == 1’b1) begin
       a <= 1'b0;                     えっ

   end
    case(state)
    ST_IDLE: begin
      a <= 1'b1;
      b <= 1'b1;
      …                   どんなステートマシンができるんだろ?
    end
  …                       (いまだによくわかっていない)
余談終了
Android to/from FPGA FIFO




      Asynchronous FIFO
                          次はAndroidの話
Androidの話
 • USB Host APIでUSBプログラミング
   おもしろい
   でもUSBと繋げるまでがめんどくさい

データ転送するために
前処理で
6種類のクラスを使う
必要がある

クラスの中に
さらに何種類か
メソッドがある
USBは前処理がいろいろあるんです

1. USBはハブでいくつもデバイスをぶら下げ
   られるからまずデバイスを「検索」するこ
   とから始める。大抵VID、PIDで見つける。
2. 物理的には1本しか繋げてなくても実は論
   理的なバスが何本かある
   e.g.Kinectは4本
   (Control,IR,RGB,Audio)ある
3. 転送方法が4種類ある(コントロール転送、
   バルク転送、インタラプト転送、アイソク
   ロナス転送)
ArduinoライクなFTDIドライバラッパー
             FTDriver

• USBのめんどくさい処理をライブラリ化
• 使うメソッドは4種類
 – begin(9600)
 – end()
 – read(rbuf)
 – write(wbuf)
FTDriverでプログラミング
FTSampleFIFO.java

 …
public void onCreate(Bundle savedInstanceState) {
 …
                                               1.インスタンス生成
 mSerial = new FTDriver((UsbManager) 
 getSystemService(Context.USB_SERVICE));

 if(mSerial.begin(SERIAL_BAUDRATE)) {
   new Thread(mLoop).start();
 }

 …                                       2.ポートのオープンと
                                           ボーレート設定
} // end of onCreate

…                                 ※ボーレートはFIFOの場合関係ない
…
private Runnable mLoop = new Runnable() {
@Override
public void run() {
int i;
int len;
byte[] rbuf = new byte[4096];


 for(;;){//this is the main loop for transferring
     //////////////////////////////////////////////////////////
     // Read and Display to Terminal
     ////////////////////////////////////////////////////////        3.データリード
     len = mSerial.read(rbuf);
 }
}
…


                                                                  そんなに難しくない、と思う
突然ですが、まとめ
• http://github.com/ksksue
• 全部オープンソースです

• 最後デモ

• 今後、Synchronous FIFOとか
• AvalonBus対応とか
• Xilinx対応とか

Weitere ähnliche Inhalte

Was ist angesagt?

2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理12章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1mao999
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくばHirotaka Kawata
 
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)marsee101
 
レベルを上げて物理で殴る 16x9
レベルを上げて物理で殴る 16x9レベルを上げて物理で殴る 16x9
レベルを上げて物理で殴る 16x9Knit Tiger
 
可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswiftTomohiro Kumagai
 
Using Xeon D 10GBase-T
Using Xeon D 10GBase-TUsing Xeon D 10GBase-T
Using Xeon D 10GBase-TMasaru Oki
 
OSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUGOSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUGHideki Aoshima
 
Raspberry Jam #1 20121229
Raspberry Jam #1 20121229Raspberry Jam #1 20121229
Raspberry Jam #1 20121229Hideki Aoshima
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会Hirotaka Kawata
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-mainShotaro Uchida
 
ハードウェアを用いてPythonを学ぶ
ハードウェアを用いてPythonを学ぶハードウェアを用いてPythonを学ぶ
ハードウェアを用いてPythonを学ぶYuta Kitagami
 
Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編Tetsuya Morizumi
 
13apr2013 kernelvm8-main
13apr2013 kernelvm8-main13apr2013 kernelvm8-main
13apr2013 kernelvm8-mainShotaro Uchida
 
自作x86エミュレータの終焉
自作x86エミュレータの終焉自作x86エミュレータの終焉
自作x86エミュレータの終焉Daisuke Kamikawa
 
プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛titoi2
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)Mr. Vengineer
 
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__Tomohiro Kumagai
 
Immortal
ImmortalImmortal
Immortaldo_aki
 
cdev_write and_comwrite
cdev_write and_comwritecdev_write and_comwrite
cdev_write and_comwritekusabanachi
 

Was ist angesagt? (20)

2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理12章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
 
レベルを上げて物理で殴る 16x9
レベルを上げて物理で殴る 16x9レベルを上げて物理で殴る 16x9
レベルを上げて物理で殴る 16x9
 
可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift
 
Using Xeon D 10GBase-T
Using Xeon D 10GBase-TUsing Xeon D 10GBase-T
Using Xeon D 10GBase-T
 
OSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUGOSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUG
 
Raspberry Jam #1 20121229
Raspberry Jam #1 20121229Raspberry Jam #1 20121229
Raspberry Jam #1 20121229
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
 
ハードウェアを用いてPythonを学ぶ
ハードウェアを用いてPythonを学ぶハードウェアを用いてPythonを学ぶ
ハードウェアを用いてPythonを学ぶ
 
Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編
 
13apr2013 kernelvm8-main
13apr2013 kernelvm8-main13apr2013 kernelvm8-main
13apr2013 kernelvm8-main
 
自作x86エミュレータの終焉
自作x86エミュレータの終焉自作x86エミュレータの終焉
自作x86エミュレータの終焉
 
プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛
 
NetBSD/Zynq
NetBSD/ZynqNetBSD/Zynq
NetBSD/Zynq
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
 
Immortal
ImmortalImmortal
Immortal
 
cdev_write and_comwrite
cdev_write and_comwritecdev_write and_comwrite
cdev_write and_comwrite
 

Andere mochten auch

PI制御を作ってみた
PI制御を作ってみたPI制御を作ってみた
PI制御を作ってみたytanno
 
LEGO Mindstorms ev3 ハンズオン資料 (2014年3月版)
LEGO Mindstorms ev3 ハンズオン資料 (2014年3月版)LEGO Mindstorms ev3 ハンズオン資料 (2014年3月版)
LEGO Mindstorms ev3 ハンズオン資料 (2014年3月版)Yoshitaka Seo
 
Evaluation part 1
Evaluation part 1Evaluation part 1
Evaluation part 1fionapearce
 
Assistive technology web quest module 6 dobbs
Assistive technology web quest module 6 dobbsAssistive technology web quest module 6 dobbs
Assistive technology web quest module 6 dobbsadriennedobbs
 
Bep dien-tu-gia-re
Bep dien-tu-gia-reBep dien-tu-gia-re
Bep dien-tu-gia-reLinh Phuong
 
GEM: How does it work?
GEM: How does it work?GEM: How does it work?
GEM: How does it work?shuttl
 
Ucsf dev disabilities march 2012 v5
Ucsf dev disabilities march 2012 v5Ucsf dev disabilities march 2012 v5
Ucsf dev disabilities march 2012 v5healthylbc
 
Modular Home Floor Designs and the General Contractor's Responsibilities
Modular Home Floor Designs and the General Contractor's ResponsibilitiesModular Home Floor Designs and the General Contractor's Responsibilities
Modular Home Floor Designs and the General Contractor's ResponsibilitiesHome Builder
 
Evaluation part 2
Evaluation part 2Evaluation part 2
Evaluation part 2fionapearce
 
Lysende på sosiale media
Lysende på sosiale mediaLysende på sosiale media
Lysende på sosiale mediakineju
 
Emotions ( colours )
Emotions ( colours )Emotions ( colours )
Emotions ( colours )AndresDante
 
Slideshare & scribd
Slideshare & scribdSlideshare & scribd
Slideshare & scribdjozefjozsef
 
Bep tu-xach-tay-tu-duc
Bep tu-xach-tay-tu-ducBep tu-xach-tay-tu-duc
Bep tu-xach-tay-tu-ducLinh Phuong
 
Rassegna stampa251212 salerno
Rassegna stampa251212 salernoRassegna stampa251212 salerno
Rassegna stampa251212 salernoGerardo Grimaldi
 
Bep tu-thong-minh
Bep tu-thong-minhBep tu-thong-minh
Bep tu-thong-minhLinh Phuong
 

Andere mochten auch (20)

PI制御を作ってみた
PI制御を作ってみたPI制御を作ってみた
PI制御を作ってみた
 
Bluetooth v3+HS
Bluetooth v3+HSBluetooth v3+HS
Bluetooth v3+HS
 
PID制御
PID制御PID制御
PID制御
 
LEGO Mindstorms ev3 ハンズオン資料 (2014年3月版)
LEGO Mindstorms ev3 ハンズオン資料 (2014年3月版)LEGO Mindstorms ev3 ハンズオン資料 (2014年3月版)
LEGO Mindstorms ev3 ハンズオン資料 (2014年3月版)
 
Evaluation part 1
Evaluation part 1Evaluation part 1
Evaluation part 1
 
B.m.e.m.p.
B.m.e.m.p.B.m.e.m.p.
B.m.e.m.p.
 
You can do it
You can do itYou can do it
You can do it
 
Assistive technology web quest module 6 dobbs
Assistive technology web quest module 6 dobbsAssistive technology web quest module 6 dobbs
Assistive technology web quest module 6 dobbs
 
Bio Data - 1
Bio Data - 1Bio Data - 1
Bio Data - 1
 
Bep dien-tu-gia-re
Bep dien-tu-gia-reBep dien-tu-gia-re
Bep dien-tu-gia-re
 
GEM: How does it work?
GEM: How does it work?GEM: How does it work?
GEM: How does it work?
 
Ucsf dev disabilities march 2012 v5
Ucsf dev disabilities march 2012 v5Ucsf dev disabilities march 2012 v5
Ucsf dev disabilities march 2012 v5
 
Modular Home Floor Designs and the General Contractor's Responsibilities
Modular Home Floor Designs and the General Contractor's ResponsibilitiesModular Home Floor Designs and the General Contractor's Responsibilities
Modular Home Floor Designs and the General Contractor's Responsibilities
 
Evaluation part 2
Evaluation part 2Evaluation part 2
Evaluation part 2
 
Lysende på sosiale media
Lysende på sosiale mediaLysende på sosiale media
Lysende på sosiale media
 
Emotions ( colours )
Emotions ( colours )Emotions ( colours )
Emotions ( colours )
 
Slideshare & scribd
Slideshare & scribdSlideshare & scribd
Slideshare & scribd
 
Bep tu-xach-tay-tu-duc
Bep tu-xach-tay-tu-ducBep tu-xach-tay-tu-duc
Bep tu-xach-tay-tu-duc
 
Rassegna stampa251212 salerno
Rassegna stampa251212 salernoRassegna stampa251212 salerno
Rassegna stampa251212 salerno
 
Bep tu-thong-minh
Bep tu-thong-minhBep tu-thong-minh
Bep tu-thong-minh
 

Ähnlich wie Androidとfpgaを高速fifo通信させちゃう

201104016 osc2011 kobe
201104016 osc2011 kobe201104016 osc2011 kobe
201104016 osc2011 kobeYamauchi isamu
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)Kazuyuki Sato
 
VHDL-2008が好きなんです
VHDL-2008が好きなんですVHDL-2008が好きなんです
VHDL-2008が好きなんですwindy12806
 
Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119metamd
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりYuya Rin
 
高位合成友の会@ドワンゴ,2015年12月8日
高位合成友の会@ドワンゴ,2015年12月8日高位合成友の会@ドワンゴ,2015年12月8日
高位合成友の会@ドワンゴ,2015年12月8日貴大 山下
 
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015CODE BLUE
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kKenji Aoyama
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタl_b__
 
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry PiNetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pitokudahiroshi
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門Hirotaka Kawata
 
coma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino Workshopcoma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino WorkshopEto Haruhiko
 

Ähnlich wie Androidとfpgaを高速fifo通信させちゃう (20)

201104016 osc2011 kobe
201104016 osc2011 kobe201104016 osc2011 kobe
201104016 osc2011 kobe
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
 
VHDL-2008が好きなんです
VHDL-2008が好きなんですVHDL-2008が好きなんです
VHDL-2008が好きなんです
 
Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119
 
Inside winnyp
Inside winnypInside winnyp
Inside winnyp
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 
InfiniBand on Debian
InfiniBand on DebianInfiniBand on Debian
InfiniBand on Debian
 
高位合成友の会@ドワンゴ,2015年12月8日
高位合成友の会@ドワンゴ,2015年12月8日高位合成友の会@ドワンゴ,2015年12月8日
高位合成友の会@ドワンゴ,2015年12月8日
 
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
 
Reconf 201901
Reconf 201901Reconf 201901
Reconf 201901
 
Lagos running on small factor machine
Lagos running on small factor machineLagos running on small factor machine
Lagos running on small factor machine
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88k
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタ
 
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry PiNetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pi
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
Open VZ
Open VZOpen VZ
Open VZ
 
coma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino Workshopcoma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino Workshop
 

Kürzlich hochgeladen

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Kürzlich hochgeladen (9)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Androidとfpgaを高速fifo通信させちゃう

  • 1. AndroidとFPGAを高速FIFO 通信させちゃう す~ @ksksue
  • 2. 自己紹介 • す~: @ksksue • 「つなげる」ことが今おもしろい • てことでFTDI大好きっこ • FPGA/Android/マイコンと手広くやっと ります
  • 3. AndroidとFPGA • FPGA/マイコンのフロントエンドとして のAndroid これまで Jtagでキャラクタ表示か? リッチなUIライブラリ LCDでドット絵書くか? LCD、タッチパネルがついて え、LCD描画ライブラリが なんと3万円ポッキリ! ウン百万円!?
  • 4. Androidとハードを繋げる 課題はインタフェース 今Androidと繋げるならADK? FPGAとならMicrobridgeがあるって? なんでなじみのシリアル・ SPI・I2C・パラレル通信が ないのさ!?
  • 5. その問題FTDIが解決します • USB to – シリアル(UART,RS232C) – SPI – I2C – Jtag FPGAと通信するなら –FIFO(パラレル) コレでしょう
  • 6. Android to/from FPGA FIFO Asynchronous FIFO
  • 7. 今日はいろいろ話題 つめこんでます 話題 • FPGA • Android • USB ここようわからんって人は Twitter:@ksksueに メンション飛ばしてください。 あとで答えますから。
  • 8. Android to/from FPGA FIFO まずFPGAまわりの話から Asynchronous FIFO
  • 9. 今のところのVerilogファイル群 fpga/ └DE0_TOP.v src/ TOPモジュールと ├ ftdi_fifo.v ソースコード ├ ftdi_fifo_rd.v ├ ftdi_fifo_wr.v ├ misc.v └ timescale.v sim/ ├ftdi_fifo/ │├ ftdi_fifo_tb.v あとは │└ ft245fifo_sim_model.v テストベクタと ├ftdi_fifo_rd/ シミュレーションモデル │ └ ftdi_fifo_rd_tb.v └ftdi_fifo_wr/ └ ftdi_fifo_wr_tb.v
  • 10. FTDI Asynchronous FIFO Read Timing IN OUT IN Write Timing IN OUT OUT ↑FPGA側から見たIN/OUT 引用:FT245R データシート
  • 11. ライブパワーポインティング ftdi_fifo ステートマシン ftdi_fifo_rd ftdi_fifo_wr
  • 12. ftdi_fifo_rd.vのインタフェース module ftdi_fifo_rd( // Connect to Inner Logic input iACT_RD_n, // Activate Read Sequence Signal Activate output oDONE_RD_n, // Done Read Sequence Signal Done でモジュールの動き output oREADY_RD_n, // READY Read Sequence Signal 管理します output [7:0] oRD_DATA, // Write Data // Connect to FTDI FIFO Module input iFIFO_RXF_n, // Read from FIFO output oFIFO_RD_n, // Read Enable ここはFIFO インタフェース input [7:0] iFIFO_DATA, // Read Data // Connect to System Signals input clk, // System Clock 50MHz(20ns) input rst // System Reset カンマ消しわすれるのがイヤだから固定clk,rstは ); 最後に書くっていういわゆる我流ってやつです
  • 13. ftdi_fifo_wr.vもほぼ同じ module ftdi_fifo_wr( // Connect to Inner Logic input iACT_WR_n, // Activate Write Sequence Signal output oDONE_WR_n, // Done Write Sequence Signal output oREADY_WR_n, // Ready Write Sequence Signal input [7:0] iWR_DATA, // Write Data output oFIFO_OE_n, // Output Enable for Bi-direction Bus // Connect to FTDI FIFO Module input iFIFO_TXE_n, // Write to FIFO output oFIFO_WR_n, // Write Enable output [7:0] oFIFO_DATA, // Write Data // Connect to System Signals input clk, // System Clock 50MHz(20ns) input rst // System Reset );
  • 14. ftdi_fifo.v ftdi_fifo.vはftdi_fifo_rdとwrをあやつるステートマシン INIT テスト回数のループ制御 DONE LOOP 0x00~0xFF Verifyの VERIFY ループ制御 LOOP VERIFY DATA DATA WAIT
  • 15. 余談 • 自分は基本的に – 順序回路 – 組み合わせ回路 – ステートマシン でしか回路くめません。この3つしか使い ません。ステートマシン設計がいつもア タマを悩ませます。
  • 16. 余談:イラッとくるステートマシン1 「その遷移パターンないから大丈夫です」 ステートマシン A D 依存 C B G E 依存 F 絶対にデッドロックおこさないんだな? おこさないよなっ!?
  • 17. 余談:イラッとくるステートマシン1 A C B D G F E できることなら直したいっ
  • 18. 余談:イラッとくるステートマシン2 「修正しました(横着しました) 」 ステートマシン always@(posedge clk or negedge rst) begin if(!rst) begin a <= 1'b0; b <= 1'b0; state <= ST_IDLE; end else begin if(foo == 1’b1) begin a <= 1'b0; えっ end case(state) ST_IDLE: begin a <= 1'b1; b <= 1'b1; … どんなステートマシンができるんだろ? end … (いまだによくわかっていない)
  • 20. Android to/from FPGA FIFO Asynchronous FIFO 次はAndroidの話
  • 21. Androidの話 • USB Host APIでUSBプログラミング おもしろい でもUSBと繋げるまでがめんどくさい データ転送するために 前処理で 6種類のクラスを使う 必要がある クラスの中に さらに何種類か メソッドがある
  • 22. USBは前処理がいろいろあるんです 1. USBはハブでいくつもデバイスをぶら下げ られるからまずデバイスを「検索」するこ とから始める。大抵VID、PIDで見つける。 2. 物理的には1本しか繋げてなくても実は論 理的なバスが何本かある e.g.Kinectは4本 (Control,IR,RGB,Audio)ある 3. 転送方法が4種類ある(コントロール転送、 バルク転送、インタラプト転送、アイソク ロナス転送)
  • 23. ArduinoライクなFTDIドライバラッパー FTDriver • USBのめんどくさい処理をライブラリ化 • 使うメソッドは4種類 – begin(9600) – end() – read(rbuf) – write(wbuf)
  • 24. FTDriverでプログラミング FTSampleFIFO.java … public void onCreate(Bundle savedInstanceState) { … 1.インスタンス生成 mSerial = new FTDriver((UsbManager) getSystemService(Context.USB_SERVICE)); if(mSerial.begin(SERIAL_BAUDRATE)) { new Thread(mLoop).start(); } … 2.ポートのオープンと ボーレート設定 } // end of onCreate … ※ボーレートはFIFOの場合関係ない
  • 25. … private Runnable mLoop = new Runnable() { @Override public void run() { int i; int len; byte[] rbuf = new byte[4096]; for(;;){//this is the main loop for transferring ////////////////////////////////////////////////////////// // Read and Display to Terminal //////////////////////////////////////////////////////// 3.データリード len = mSerial.read(rbuf); } } … そんなに難しくない、と思う
  • 26. 突然ですが、まとめ • http://github.com/ksksue • 全部オープンソースです • 最後デモ • 今後、Synchronous FIFOとか • AvalonBus対応とか • Xilinx対応とか