iCEstick Evaluation KitをUSBシリアル・アダプタとして使う

FPGA

ずいぶん前に、iCEstickという評価キットを入手しました。Lattice社製のiCE40というFPGAが搭載されている、USBポート直結で使える小型のFPGA評価キットです。何に使おうかとずっと悩んでいたのですが、3.3VのUSBシリアルが必要になったときに、iCEstickを思い出しました。Raspberry PIなどの小型コンピュータでは、ピン・ヘッダにターミナル用のUARTが接続できます。しかし、このピン・ヘッダにPC用のUSBシリアル・ケーブルは直接接続できません。一般的には、FTDIのICなどを使ってレベルを変換してから接続する必要があります。今回はICEstickをFTDI-USBシリアル変換ケーブル(アダプタ)として代用しました。

iCEstick Evaluation Kit

iCEstick Evaluation Kit

SDカードとの大きさの比較

SDカードとの大きさの比較

iCEstick Evaluation Kitについて

IrDAトランシーバーと、Pmodコネクタが搭載されているのが特徴です。また、USBとiCE40HX1Kの間にはFTDI 2232Hが接続されています。これを使えば、USBシリアルとして動作させることができます。

全体の接続

iCEstickとRaspberry PIの接続は次のとおりです。接続は、TX,RX,GNDの3本です。Raspberry PI側GPIOのTXとRXは専用ピンです。iCEstick側Pmodの接続端子は、FPGAの設定次第です。この例ではPmodの1番ピンをTX、2番ピンをRXとしています。

iCEstickとRaspberry PIの接続

iCEstickとRaspberry PIの接続

iCEcube2をつかったbitstreamの作成

HDLファイル

iCEstickに搭載されているFTDIのTXとRXを、Pmodコネクタから出力します。一言でいえば、FPGAをバイパスしているだけです。それだけでは寂しいので、デバッグ用としてサンプリングしたシリアル信号をLEDに出力しています(機能的には不要)。

module uart_ice (
  input  clk_in,
  input  i_tx_pc, 
  output o_rx_pc, 
  output o_tx_pm,
  input  i_rx_pm,
  output [4:0] led   
);

reg r_tx;
reg r_rx;

assign o_tx_pm = i_tx_pc;
assign o_rx_pc = i_rx_pm;
 
always @ (posedge clk_in) begin
  r_tx <= i_tx_pc;
  r_rx <= i_rx_pm;
end

assign led = {3'b0,r_rx,r_tx};
  
endmodule

iCEcube2でbitstream作成

iCE40の開発ツールは、Lattice Diamondではなく、iCEcube2です。Lattice Diamondに比べると、GUIが非常にシンプルです。論理合成にSymplifyが使われている点は、Lattice Diamondと同じです。

iCEcube2のGUI

iCEcube2のGUI

iCEcube2の使い方やプロジェクト・データの作成方法は、”iCEstick Evaluation Kit User’s Guide”というpdfとサンプル見れば一応なんとかなります。というよりも、それ以外に情報があまり見当たりません。基本的には、次の順番で処理を実行すると、FPGAに書き込むbitstreamデータが生成されます。

  1. Synthesis Tool->Run Synplify Pro Synthesis
  2. P&R Flow->Import P&R Input Files
  3. P&R Flow->Run Placer
  4. P&R Flow->Run Router
  5. P&R Flow->Generate Bitmap

FPGAのリソース使用率は次のとおりです。バイパスしているだけなので、FPGAのリソースはほとんど使っていません。

Final Design Statistics
    Number of LUTs      	:	0
    Number of DFFs      	:	0
    Number of DFFs packed to IO	:	2
    Number of Carrys    	:	0
    Number of RAMs      	:	0
    Number of ROMs      	:	0
    Number of IOs       	:	9
    Number of GBIOs     	:	1
    Number of GBs       	:	0
    Number of WarmBoot  	:	0
    Number of PLLs      	:	0
Device Utilization Summary
    LogicCells                  :	0/1280
    PLBs                        :	0/160
    BRAMs                       :	0/16
    IOs and GBIOs               :	10/96
    PLLs                        :	0/1

ピンアサインについて

“iCEstick Evaluation Kit User’s Guide”というpdfに記載されているボードの回路図を見ると、Pmodのピンアサインがわかります。実際に使用した設定は次のとおりです。

set_io clk_in 21
set_io i_tx_pc 9
set_io o_rx_pc 8
set_io o_tx_pm 78
set_io i_rx_pm 79
set_io led[0] 99
set_io led[1] 98
set_io led[2] 97
set_io led[3] 96
set_io led[4] 95

bitstreamの書き込み

bitstreamのプログラムはDiamond Programmerで行います。Diamond Programmerは、(iCEcube2ではなく)Lattice Diamondに含まれています。iCECube2ではiCE40HX1Kをプログラムできないようです。Diamond Programmerの具体的な設定方法は、”iCEstick Evaluation Kit User’s Guide”に詳しく手順が記載されています。

Diamond Programmer

Diamond Programmer

動作確認

Raspberry PIのGPIOとiCEstickのPmodをワイヤーで接続します。

Raspberry PIと接続

Raspberry PIと接続

Tera Termなどのターミナル・ソフトを起動します。iCEstickは、”USB Serial Port”として認識されるので、ボーレート115200で接続します。この状態でRaspberry PIに電源を投入すると、起動ログが表示されます。

Raspberry PIの起動ログ

Raspberry PIの起動ログ

まとめ

USBシリアルとして、問題なく動作しました(正確にはiCE40をバイパスしてFTDIを使っているだけですが。。)

タイトルとURLをコピーしました