Comments
Transcript
XAPP632: "電子メールによる FPGA のプログラミング" v1.0 (05/02)
アプリケーション ノート: Virtex-II シリーズ R 電子メールによる FPGA のプログラミング 著者 : Marc Defossez XAPP632 (v1.0) 2002 年 5 月 13 日 概要 このアプリケーション ノートでは、イントラネットまたはインターネット接続を介して FPGA をプロ グラムおよび再プログラムする方法について説明します。この題材には、多くのバリエーションがあり ます。このアプリケーション ノートで示すアプリケーション例は、理論的な外部コントローラで、可能 性を示すためのものです。アプリケーション例の各モジュールは、ハードウェアとソフトウェアについ てテストされています。このアプリケーション ノートは、すべてのテスト済みデザイン パーツをまと めたものです。 はじめに インターネットやイントラネットの最も一般的な用途は、電子メールの送受信です。電子メールを使用 して FPGA のプログラムや再プログラムができるということは、FPGA を使用するアプリケーションの アップデートやサポートを行う場合の利点となります。このアプリケーション ノートでは、いくつかの ソリューションを紹介します。ソリューションによっては、インターネットやイントラネットを認識す る外部のマイクロプロセッサが必要になります。リファレンス デザイン例では Ubicom の SX52BD プ ロセッサを使用していますが、IP2022 など他のコンポーネントや Rabbit、Lantronix、Zilog など他の メーカーのコンポーネントも使用できます。 インターネットの プロトコル スタック インターネット/イントラネットを利用する通信は、規格化されています。これらの規格は、RFC 文書 として http://www.ietf.org にあります。インターネット/イントラネットの動作メカニズムは、図 1 に示 すようにプロトコル スタックとして組織化されています。スタックを役割別にグループ化したものをレ イヤと呼びます。各レイヤは独立したプログラムの集まりで、物理インターフェイス (物理レイヤ) から ユーザー アプリケーション (アプリケーション レイヤ) またはその逆に情報が移動できるようにします。 STMP POP3 HTTP UDP FTP TCP Application layer Transport layer ICMP Internet layer IP PPP Modem UART Ethernet Network access layer Ethernet Physical layer x632_01_022702 図 1: インターネット レイヤ プロトコル © 2002 Xilinx, Inc. All rights reserved. すべての Xilinx の商標、登録商標、特許、免責条項は、http://www.xilinx.com/legal.htm にリストされています。他のすべての商標および登録商標 は、それぞれの所有者が所有しています。すべての仕様は通知なしに変更される可能性があります。 保証否認の通知 : Xilinx ではデザイン、コード、その他の情報を「現状有姿の状態」で提供しています。この特徴、アプリケーションまたは規格の一実施例としてデザイン、コード、そ の他の情報を提供しておりますが、Xilinx はこの実施例が権利侵害のクレームを全く受けないということを表明するものではありません。お客様がご自分で実装される場合には、必要な 権利の許諾を受ける責任があります。Xilinx は、実装の妥当性に関するいかなる保証を行なうものではありません。この保証否認の対象となる保証には、権利侵害のクレームを受けない ことの保証または表明、および市場性や特定の目的に対する適合性についての黙示的な保証も含まれます。 XAPP632 (v1.0) 2002 年 5 月 13 日 www.xilinx.co.jp 1 R 電子メールによる FPGA のプログラミング 各レイヤは上位または下位のレイヤから独立しており、受け取ったデータを処理して上位または下位の レイヤに渡すという作業のみを行います。 • 物理レイヤ - 同軸ケーブル、光ファイバー、電話回線、電波など、デバイス間の通信に使用される ハードウェアです。モデムと UART の組み合わせまたは Ethernet コントローラに接続されます。 • ネットワーク アクセス レイヤ - このレイヤでは、受け取ったプロトコル (Ethernet など) の管理、 上位のレイヤから受け取ったパケットのカプセル化、上位レイヤのプロトコル用のアクセス レイ ヤ プロトコルの分解を行います。PPP (モデムと UART) や Ethernet などが含まれます。 • インターネット レイヤ - このレイヤは、インターネット プロトコル (IP) とも呼ばれます。イン ターネット制御メッセージ プロトコル (ICMP) というサービス プロトコルも、このレベルにあり ます。 IP プロトコルは、パケット ルーティングを提供します。エラー修復やフロー制御は行いません。こ のプロトコルで行う作業には、送信側で大きいデータ ブロックを分割して受信側で復元するという ものもあります。 0 8 Version 16 24 IHL 32 Type Of Service Total Length Identification Time To Live Flags Protocol Fragment Offset Header Checksum Source Address Destination Address x632_02_022802 図 2: IP ヘッダのフォーマット ICMP プロトコルは IP プロトコルを拡張したもので、診断メッセージに使用されます。最も幅広く 使用されている ICMP コマンドは、ping ユーティリティです。 インターネット プロトコル スタックが機能するためには必ずしも全体のインプリメントは必要あ りませんが、ping はインプリメントするべきです。このアプリケーション ノートでは、ping をイ ンプリメントします。 0 8 16 24 Type Code 32 Checksum Identification Sequence Number Data ……………………………………………………… x632_03_022802 図 3: ICMP レイヤのフォーマット • 2 トランスポート レイヤ - インターネット/イントラネットのトラフィックは、ほとんどすべてが TCP および UDP という 2 種類のプロトコルによって処理されます。 - 伝送制御プロトコル (TCP) - こ れはデフ ォ ル ト のプ ロ ト コ ルで、 イ ン タ ーネ ッ ト のデー タ ト ラ フ ィ ッ ク に幅広 く 使用 さ れてい る 規格です。 他のプ ロ ト コ ル (HTTP、 SMTP、 POP3) の下位 レ イ ヤ と し て使用 さ れます。 - ユーザー データグラム プロトコル (UDP) - TCP ほ ど の信頼性がないので、 最近のアプ リ ケー シ ョ ンではあ ま り 使用 さ れてい ません。 www.xilinx.co.jp XAPP632 (v1.0) 2002 年 5 月 13 日 R 電子メールによる FPGA のプログラミング 0 8 16 24 Source Port 32 Destination Port Sequence Number Acknowledgement Number Offset Reserved Flags Window Checksum Urgent Pointer Options ……………….. Data …………………………… x632 04 030702 図 4: TCP ヘッダのフォーマット • 電子メールの原理 アプリケーション レイヤ - アプリケーション レイヤには HTTP、FTP、POP3、SMTP などのプロ トコルがあり、幅広く使用されているインターネット ブラウザや電子メール クライアント プログ ラムに組み込まれています。このアプリケーション ノートは電子メールを対象にしているので、 電子メール プロトコルのみを扱います。 インターネットでメール メッセージの送受信を行うためのクライアント サーバ プロトコルで最も一般 的に使用されているのは、SMTP と POP3 です。通常、クライアントはデスクトップの電子メール プロ グラムで、サーバはインターネット サービス プロバイダ (ISP) の SMTP サーバです。SMTP と POP3 は、どちらも単純なテキスト ベースのプロトコルを対象とする処理指向のクライアント サーバ プロト コルです。リファレンス デザインは POP3 クライアントとして機能し、POP3 サーバから電子メールを 取得するという処理のみを行います。サーバとの接続が確立すると、POP3 接続がクライアントによっ て開始され、電子メール メッセージの取得が始まります。処理中の通信の各段階で、相手側 (サーバ) か らの応答 (アクション) を得る必要があります。 XAPP632 (v1.0) 2002 年 5 月 13 日 www.xilinx.co.jp 3 R 電子メールによる FPGA のプログラミング POP3 Server > POP3 Client An email has been sent to the POP3 client. It’s waiting at the server side to be retrieved. Open PPP connection When a server–client connection has been made, the POP3 client attempts to retrieve its mail. USER Command The USER command is sent to the sever. When the user is known at the sever side, a +OK positive acknowledge is replied. PASS Command The client then sends its password. When it’s the correct password, again a positive acknowledge is the response, else the link is aborted. +OK STAT Command The STAT command is the question for e-mail. +OK xx yy When mail is available, the server responds with the number of mail messages waiting and the total byte count. RETR Command The client wants to get the messages and send the RETR command. +OK Message After acknowledging to the retrieve command, the server sends the messages to the client. DELE Command The client then can delete the message(s) available at the server side. Again acknowledged by the server. +OK QUIT Command After retrieving the message(s), the client aborts the link with the server. After the necessary reply, the link is aborted and all messages requested to be deleted are deleted. x632_08_032502 QUIT Reply 図 5: POP_3 の通信 4 www.xilinx.co.jp XAPP632 (v1.0) 2002 年 5 月 13 日 R 電子メールによる FPGA のプログラミング 外部コントローラ SX52BD Ubicom の SX52BD は、RISC アーキテクチャに基づく小さいコントローラです。高速な計算、柔軟な I/O 制御、最大 100MHz の速度での効率的なデータ操作が可能です。ほとんどの命令は、単一サイク ルのイベントに最適化されています。既製のソフトウェア モジュール (Virtual Peripheral) と組み合 わせると、インターネットやイントラネットでの可能性が広がります。このデバイスのデータシートは、 http://www.ubicom.com/products/sx/index.html にある Ubicom の Web サイトから入手できます。このリ ファレンス デザイン例で使用するソフトウェア モジュールは、無料で入手できる SX-Stack です。この モジュールに小規模な修正と追加を行って、FPGA のプログラムに使用します。 動作 インプリメンテーションは、SX52BD プロセッサと 2 つの UART ポートが含まれている Ubicom の SXB-TCP01-02 ボードでテストされています。 Ubicom の Web サイトから、eSXv1_0_4.src という電子メール サーバ アセンブラのソース コードをダ ウンロードします。このファイルで、POP3 デモと POP3 デバッグ機能を選択します。POP3 デバッグ 機能は、PPP ポートで受信した電子メールの内容をそのままデバッグ ポートに送信します。このコード に、次のような修正を加えます。 • 場合によっては電子メールを FPGA のビットストリームとしては扱わないようにするメカニズム をインプリメントする必要があります。ここで使用するメカニズムでは、ビットストリームが含ま れるメールに特定の件名を与えます。 • スレーブ シリアル ダウンロードをエミュレートする場合は、データの各ビット毎にクロック パル スを生成する必要があります。 • インターネット/イントラネット接続を中止するには、マイクロコントローラへの入力として DONE ピンを使用する必要があります。 アセンブラのソース コードを修正するときのヒントには、次のようなものがあります。 • Windows 2000 または Linux を使用する場合は、WIN32 および WIN98 オプションを設定または 設定解除します。 • コードのオプション セクションで PO3DEBUG のコメントを解除すると、2 番目の UART である デバッグ UART が使用されます。 • POP3 制約セクションで POP3address1、POP3address2、POP3address3 を変更すると、デモの デフォルト IP アドレスを修正できます。 • 2 番目の UART が使用するポートは、別のロケーションに変更できます。「debug_rx_pin」と 「debug_tx_pin」を探して、ピン番号を変更します。 • POP3 のユーザ名とパスワードを変更できます。これを行うには、コードの canned ppp セクショ ンで「USER_eSX」と「PASS_eSX」を変更します。 • POP3 デモを初期化するサブルーチンは、ソース コードの 2164 行から始まります。これは、次の ようになっています。 2164 IFDEF POP3DEMO 2165 ;----------------------------------------------------------------2166 ;Subroutine: AppInit • POP3 アプリケーションは、4439 行から始まります。 4439 4440 4441 ;======================================================= ; TCP POP3 Demo Functions ;======================================================= これは、POP3 ステート マシンとそのサブルーチンです。 • 「Subject: ...」という電子メール ヘッダを認識して、ビットを渡すか文字を転送するように、修正 できます。FPGA にダウンロードするビットストリームは、電子メールのバイナリ添付ファイル として送信するか、Xilinx のツールで ASCII コードに変換してから電子メールの本文に組み込む ことができます。採用する方法に従って、アセンブラのソース コードを修正する必要があります。 • 各データ ビットに合わせてクロック パルスを生成するには、デバッグ UART のコードを少し修正 します。 XAPP632 (v1.0) 2002 年 5 月 13 日 www.xilinx.co.jp 5 R 電子メールによる FPGA のプログラミング このプロセッサは、TCP/IP の POP3 アプリケーションを実行するには最大限のパフォーマンスを発揮 しなければならず、データ メモリがほぼ完全に使用されます。このコントローラは、UART (PPP) ポー トを介してのみ動作します。同じく Ubicom の IP2022 プロセッサを使用すると、より優れたソリュー ションになります。 内部コントローラ FPGA内部で使用できるマイクロコントローラ (MicroBlaze ソフト コアまたは PowerPC ハード コア コントローラ) を使用して FPGA をコンフィギュレーションすることもできます。 この方法では、外部コントローラを使用する場合よりも少し複雑になり、追加ロジックが必要になり ます。 内部コントローラを使用する場合は、ペリフェラルをダウンロードする必要があります。MicroBlaze ソ フト コアを使用する場合は、コントローラもダウンロードする必要があります。コントローラとペリ フェラルは、インターネットやイントラネットとの接続などのハードウェアの操作をする前に作動して いなければなりません。 インターネットから新しいコンフィギュレーションをダウンロードするセットアップを図 6 に示します。 Xtal TDI TMS TCK TDO VCC GND Power Status Master Mode CoolRunner-II FPGA PROM 1 XC1800 TDI TMS TCK TDO OPB arbiter DOUT CEO OE/Rst CF CE DATA CLK PROG_B DIN CCLK PROM 2 XC1800 New Conf CEO OE/Rst CF CE DATA CLK OPB slave (IRQ ctrl) OPB slave (GPIO) OPB slave (JTAG) OPB slave (UART or Ethernet) TDI TMS TCK TDO TDI TMS TCK TDO Processor DONE Ethernet PHY RS232 x632_06_032502 図 6: 内部のダウンロード 動作 基本になる FPGA デザインを作成します。この基本デザインは、ペリフェラルがあるプロセッサかある いは完全なかたちの初期 FPGA デザインになります。 • 6 初期 FPGA デザインがプロセッサといくつかのペリフェラルのみの場合、アプリケーションを起 動するときに実際のデザインをネットワークからダウンロードする必要があります。動作可能なデ ザインが FPGA に含まれている場合は、新しいビットストリームのダウンロードが必要になるま でネットワークへの接続を遅らせることができます。 www.xilinx.co.jp XAPP632 (v1.0) 2002 年 5 月 13 日 R 電子メールによる FPGA のプログラミング どちらの場合も、コントローラで TCP/IP スタックと POP3 アプリケーションを実行する必要がありま す。これは、OS がプロセッサにインプリメントされている場合に可能です。そうでなければ、独立し たコードとしてプロセッサに入力する必要があります。 半永久的なメモリ (フラッシュ PROM) のバンクを 2 つ以上デザインする必要があります。マスター ス レーブ コンフィギュレーション モードの FPGA の数や使用する FPGA のサイズに従って複数のフラッ シュ メモリ デバイスを 1 つのバンクに配置できます。たとえば、XC2VP20 のバンクには 2 つの XC18V04 デバイスが必要です。この例では、FPGA の JTAG ポートを使用してフラッシュ メモリをコ ンフィギュレーションします (CPLD も FPGA でコンフィギュレーションできます)。ただし、JTAG ポートを制御するプロセッサ ペリフェラルをデザインする必要があります。 FPGA に送信するビットストリームは、JTAG に対応している必要があります。つまり、PROM をプロ グラムするときに CF 出力にパルスを生成するコマンドが含まれている必要があります。PROM の CF ピンを使用すると、FPGA をパワー ダウンしなくても JTAG CONFIG 命令で FPGA のコンフィギュ レーションを開始できます。CF ピンはオープン ドレイン出力で、11101110 という JTAG CONFIG コ マンドによって Low になります。FPGA へのデータ ストリームのソースを制御するため、ダウンロー ド コントローラ デバイス (ここでは CoolRunner-II CPLD) を使用します。1 番目の FPGA は、マス タ シリアル モードに設定する必要があります。この FPGA に、他の FPGA をスレーブ シリアル モー ドで接続できます。 ダウンロード コントローラ このデザインの主要な部分は、入力と出力の状態を示す 8 ビット レジスタです。2 つのダウン カウンタ が必要になります。一つはダウンロード再試行ループの数、もう一つはビットストリーム全体の長さを 表します。このレジスタを表 1 に示します。 表 1: レジスタ Valid Conf_2 Done2 CEN_2 New Conf_2 Valid Conf_1 Done1 CEN_1 New Conf_1 パワー ス テータス 0 0 1 0 1 0 1 1 0 内部 入力 出力 入力 内部 入力 出力 入力 入力 フラッシュ PROM と CoolRunner-II CPLD は出荷時にプログラムされています。PROM 1 には基本的 な FPGA コードが格納されており、PROM 2 は空です。CPLD にはコントローラのデザインが格納さ れており、PROM 0 に有効なコードが格納されていることを示すようレジスタがあらかじめ設定されて います。 コントローラの機能 コントローラはステート マシンです。プロセスのフローチャートを、図 7 に示します。 1. パワーアップ後、ダウンロード コントローラはあらかじめ定義された状態で起動し、有効なパワー ステータスを待ちます。これによって、すべての電源が有効な電圧レベルに達していて FPGA のダ ウンロードを開始できるかチェックします。 2. 「Valid Conf_1」と「Valid Conf_2」をチェックします。「Valid Conf_1」はあらかじめプログラム されています。 3. 既知のコンフィギュレーションで PROM を有効にします。 4. カウンタを起動します。 a. 「LoopCnt」は、必要なときにダウンロード操作を数回行うための小さいダウン カウンタです。 b. 「DldCnt」は、ビットストリームの転送に合わせてカウント ダウンします。 5. FPGA の PROGRAM ピンにパルスを与えます。 6. マスタ シリアル モードに設定されている FPGA は、クロックを CCLK ピンに出力し、PROM か らデータを読み込みます。このとき、CCLK クロックが CPLD コントローラに供給され、CCLK のパルスによって「DldCnt」がカウント ダウンします。 XAPP632 (v1.0) 2002 年 5 月 13 日 www.xilinx.co.jp 7 R 電子メールによる FPGA のプログラミング 7. FPGA のダウンロードが正しく行われると、DONE ピンが High になります。この状態は、CPLD コントローラにラッチされます。 8. 数クロック後、「DldCnt」ダウン カウンタが 0 になり、DONE ステータスを制御できるようにな ります。 9. DONE が High になると、次のようになります。 - 「Valid Conf_1」ビットと「Valid Conf_2」ビットがセットされます。 - 「New Conf_1」ビットと「New Conf_2」ビットがリセットされます。 - DONE ステータスが 0 にリセットされます。 - PROM が使用禁止になります。 10. FPGA が動作可能になります。 11. DONE ステータス ビットが High でない場合、 「LoopCnt」がデクリメントして、ステート マシン はステート 4b に戻ります。 12. ダウンロードに失敗した場合は、「LoopCnt」が 0 になるまで次の処理が行われます。 - 「Valid Conf_1」ビットと「Valid Conf_2」ビットがリセットされます。 - 「New Conf_1」ビットと「New Conf_2」ビットがリセットされます。 - LED が点滅して、FPGA をコンフィギュレーションできないことを示します。 13. 新しいビットストリームがフラッシュ PROM にロードされると、ダウンロードを処理するプロ セッサは CPLD コントローラの「New Conf_1」ビットまたは「New Conf_2」ビットをセットし て新しいコンフィギュレーションが可能になることを示します。 - プロセッサは「Valid Conf_1」、「Valid Conf_2」、「New Conf_1」、「New Conf_2」の各ビッ トを読み込んで、どのフラッシュ PROM バンクに新しいコンフィギュレーションを格納する か調べます。 14. JTAG プログラミングが終了すると、PROM は CF パルスを生成します。 15. このパルスはステート マシンにトリガを与え、ダウンロードが始まります。 8 - DONE が High になると、「Valid Conf_1」ビットまたは「Valid Conf_2」ビットがセットさ れ、新しいコンフィギュレーションがデフォルトになります。 - DONE が High にならない場合、ダウンロードが数回行われます。それでも DONE が High にならない場合は、以前に有効だったコンフィギュレーションがダウンロードされます。 www.xilinx.co.jp XAPP632 (v1.0) 2002 年 5 月 13 日 R 電子メールによる FPGA のプログラミング B 1 C N PwrGood On CCLK Subtract DldCnt CF Y N Valid Conf 1 Valid Conf 0 Enable PROM CEN 1 = 0 Enable PROM CEN 0 = 0 DldCnt = 0 No Valid Conf Y New Conf 1 LoopCnt –1 New Conf 0 N DONE = 1 Y LoopCnt = Max N CEN 1 = 0 LoopCnt = 0 CEN 0 = 0 Set Valid Conf bit Y DldCnt = Max Reset New Conf bit N New Conf PROG pulse 1 Reset DONE Y Reset Valid Conf bit Reset New Conf bit Blink LED C A Disable PROM CEN = 1 x632_07_022802 図 7: コントローラのフローチャート ステート マシンが図の A の状態になると、動作が停止します。図 7 を参照してください。FPGA は CCLK パルスを生成し、ステート マシンは B の状態になり、「DldCnt」カウンタは 0 になるまでデク リメントします。これで、コントローラのステート マシンの処理が終了します。 リファレンス デザイン SX52BD のアセンブラ参考コードを入手するには、 http://support.software911.com/ubicom/login.asp?op=8 にある Ubicom のサポート ポータルにログイン してください。 終わりに FPGA のプログラミングと再プログラミングは、インターネットまたはイントラネット システムを介し て行うことができ、しかも非常に簡単です。このアプリケーション ノートとリファレンス デザインを 利用することで、このプロトコルをすぐに使用できます。 改訂履歴 次の表に、このドキュメントの改訂履歴を示します。 日付 バージョン 05/13/02 1.0 XAPP632 (v1.0) 2002 年 5 月 13 日 改訂内容 初期リリース www.xilinx.co.jp 9