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

  • 3,160 views
Uploaded on

2012/5/19の関西FPGA・DE0勉強会での発表資料です

2012/5/19の関西FPGA・DE0勉強会での発表資料です

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
3,160
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
5
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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 TimingINOUTIN Write TimingINOUTOUT↑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.vftdi_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 AC B DG F E できることなら直したいっ
  • 18. 余談:イラッとくるステートマシン2 「修正しました(横着しました) 」 ステートマシンalways@(posedge clk or negedge rst)begin if(!rst) begin a <= 1b0; b <= 1b0; state <= ST_IDLE; end else begin if(foo == 1’b1) begin a <= 1b0; えっ end case(state) ST_IDLE: begin a <= 1b1; b <= 1b1; … どんなステートマシンができるんだろ? end … (いまだによくわかっていない)
  • 19. 余談終了
  • 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() {@Overridepublic 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対応とか