XILINX Spartan3A/3AN評価ボード
はじめに
Spartan3A/3AN評価ボードは、XILINXの第3世代FPGAであるSpartan3A/3ANを搭載したFPGAボードです。
このボードにはFPGAのほか、コンフィグROM(XCF04S)、2種類のSPIフラッシュメモリ、DDR2 SDRAM、NOR型フラッシュメモリ、LANコントローラ、液晶ディスプレイ、各種スイッチ、オーディオチップなどが搭載されています。
Spartan3A評価ボードと3AN評価ボードの基本的な構成は相違ありません。
この評価ボードは、MITOUJTAGを使うと、
- FPGA、コンフィグROM端子の状態の観察
- FPGA、コンフィグROM端子の状態の操作
- I/O端子の波形表示
- FPGA、コンフィグROMの書き換え
- コンフィギュレーション失敗時の原因解析
- FPGA内部信号の波形表示
- 論理合成せずにDDR2 SDRAMを操作
- 論理合成せずに液晶に文字を表示
- 論理合成せずにNORフラッシュのメモリ読み出し
などのデバッグを行うことができます。
写真1 Spartan3A/3AN評価ボードの外観
Spartan3Aと3ANは非常によく似たデバイスで、違いはコンフィギュレーション用のフラッシュメモリをチップ内に搭載しているか否かという点です。JTAG的には、Spartan3Aと3ANはバウンダリスキャンレジスタ長や命令コードなどは一致しており、IDCODEが若干異なります。
オンボードのPlatform-USB-JTAGは使用しない
Spartan3A/3AN評価ボードは、基板上にXILINXのPlatform USBケーブルに相当する回路が搭載されており、基板とパソコンをUSBケーブルで接続すると使えるようになります。しかしながら、本章の説明ではこのPlatformUSB回路は使用しません。このケーブルを使用すると本章で述べるような先進のJTAGデバッグはできません。
JTAGケーブルの接続
JTAG信号は基板の右上の位置にあるコネクタJ25に出ています。 このコネクタは2列になっていて、上の段がJTAG用、下の段がSPI用となっています。USBコネクタに何もつながなければ、このJTAGコネクタはデフォルトで有効になっています。
このコネクタ5に、右から順にVCC、GND、TCK、TDO、TDI、TMSの線を接続します。
写真2 JTAGコネクタ
ジャンパの設定
Spartan3A/3AN評価ボードには、いくつか設定するべきジャンパがあります。通常の動作をさせる場合のジャンパの設定方法を以下に示します。
CEピンの設定ジャンパ(J46)
FPGAのコンフィギュレーションをコンフィグROMから行う場合は、J46の上側(DONEとCE PROM)を接続します。
写真3 CEピンの設定ジャンパ
ROMの選択ジャンパ(J1)
J1は下側を接続します。
写真4 ROMの選択ジャンパ
PROGピンの固定ジャンパ(J16)
PROG_Bのジャンパは通常動作時はオープンにします。このジャンパをショートさせると、常にコンフィギュレーション要求がかかった状態になり、FPGAは起動しません。
写真5 PROGピンの固定ジャンパ
ブートモード設定ジャンパ(J26)
コンフィギュレーションROMから起動する場合、J26は3つあるすべてのジャンパをショートします。このジャンパの状態を変えると、SPI ROMやBPI ROMから起動させることができます。
写真6 ブートモードピン選択ジャンパ
MITOUJTAGの起動と基本操作
Pocket JTAG Cableを基板に接続し、ジャンパを適切に設定したらMITOUJTAGを起動します。ここではMITOUJTAG BASIC Version1.5.0 SP6を使用します。
ツールバーの「」ボタンを押すと、デバイスの自動認識が行われ、2個のデバイスが検出された旨が表示されます。
図7 デバイス検出の表示
最初のデバイスはXC3S700AN(あるいはXC3S700A)です。候補を選ぶダイアログが出るので、FG484ピンのものを選択します。複数の候補が表示された場合は、どれを選択しても構いません。
図8 デバイスの候補の中からXC3S700AN FG484を選択する(クリックで拡大)
次に、コンフィグROMのXCF04Sが検出された旨のメッセージが表示されます。候補を選ぶダイアログが出たら、VO20ピンのものを選択します。複数の候補が表示された場合は、どれを選択しても構いません。
図9 デバイスの候補の中からXCF04Sを選択する
これで、チェーンのセットアップは完了です。次の図のように、BGAパッケージのFPGAと、SOPパッケージのコンフィグROMの絵が画面上に表示されたら成功です。
図10 FPGAとコンフィグROMがチェーンに追加された(クリックで拡大)
もし、すべてのピンが灰色で表示されている場合は、BSDLファイルが正しく設定されていませんので、MITOUJTAGのメインメニューから[ファイル]→[デバイスデータベースの作成]の処理を行ってください。
バウンダリスキャンをやってみる
画面上に表示されたXC3S700ANの絵をクリックします。すると、デバイスの絵のボディーが網掛け状態になります。ここでツールバーの「」ボタンを押すと、バウンダリスキャンが行われ、BGAの1個1個の端子の状態が、赤や青の色で表示されます。
図11 端子の状態が画面上に可視化された(クリックで拡大)
この図で表示された端子の色は、赤(ピンク)がHレベル、青(水色)がLレベル、塗りつぶしが出力信号、網掛けが入力信号であることを示しています。真っ赤と真っ黒は電源ピンです。
図12 端子の表示の見方の例
ここで、ツールバーの「」ボタンを押すと、連続してサンプリングが行われます。FPGAが動作していれば、端子の状態がチカチカと変わっていくのが見えるはずです。
また、スライドスイッチを動かしたり、押しボタンスイッチを押したり、ロータリーエンコーダを回したりすると、それらの部品が接続された端子の入力状態がリアルタイムにサンプリングされ、チカチカと変わるのが観察できるはずです。
図13 端子の状態をリアルタイムに観察できる
ピン名の設定
MITOUJTAGでは、XILINXの論理合成に用いた制約ファイル(UCFファイル)を読み込んで、ピンの名前を設定することができます。そのためには、画面上に表示されたデバイスのボディー(灰色の部分)の上で右クリックし、プルダウンメニューから「ピン定義ファイルの読み込み」を実行します。
図14 UCFファイルの読み込み方法
そして、開いたダイアログボックスで、UCFファイルを指定します。Spartan3A評価ボードのデフォルトのアプリケーションでは、解凍フォルダ名 demosourceoarddemo.ucfです。
これで1つ1つの端子に名前が設定されました。
ピン番号の表示
マウスのホイールを上下に回転させると拡大・縮小ができます。操作に慣れてくれば拡大・縮小を行いながら、任意の場所に視点を移動させることができます。ピンを大きく拡大すると、そのピン番号が表示されます。
目的のピンにカーソルを合わせると、ステータスバーにそのピンの名前が表示されます。
図15 ステータスバーに端子の名前が表示される
目的のピンにカーソルを合わせ、右クリックすると、詳しい情報が表示されます。
図16 端子の詳しい情報を表示
入出力信号を波形として観察する
メイン画面のツールバーにあるロジアナボタン「」を押すと、JTAGロジックアナライザが起動します。前の操作でUCFファイルを読み込んでおけば、各信号に名前が自動でセットされているはずです。
図17 JTAGロジックアナライザの起動画面
ロジアナ・サンプル開始ボタン「」を押せば、波形が取得されて画面に表示されます。全端子の状態が数十秒間サンプリングされます。
表示された波形のうち、赤で表示されたものは出力信号、緑で表示されたものは入力信号を表します。波形をよく見ると、LCD、NORフラッシュ、SPIフラッシュは常にアクセスされているようですが、DDR2 SDRAMは一切アクセスがされていないことがわかります。
このようなことは、全端子の状態を見ることができるJTAGバウンダリスキャンであるからこそ、判別できることです。
図18 JTAGロジックアナライザのサンプリング結果
FPGAの端子の状態を変える
JTAGでFPGAの端子を操作することのメリット
MITOUJTAGではFPGAの端子の状態を見るだけではなく、自由自在に変えることができます。
従来の常識では、FPGAの端子の状態を変えるには、FPGAのHDLコード(あるいは回路図入力)を書き換えて、再度論理合成しなければなりませんでした。しかし、FPGAの論理合成は時間がかかるうえ、HDLを記述して望みの信号を生成するのは簡単な作業ではありません。
FPGAとコネクタの間の接続や、FPGAと他のICとの接続を調べるために、特定のピンからテスト信号(例えばクロックを分周した矩形波など)を出力することは、面倒であり時間の無駄といえるでしょう。
このような場合JTAGを使うと便利です。MITOUJTAGは他のJTAGツールとは違って、マウスによる操作でFPGAの端子を操作することができます。
もう、FPGAの端子を操作するために論理合成する必要はありません。しかも、動かせるのはFPGAだけではありません。コンフィグROMの端子さえも動かすことができてしまいます。
デバイスをEXTESTモードにする
FPGAやコンフィグROMをEXTESTモードにすると、デバイスの内部回路と端子の間の接続が切り離され、端子をJTAG経由で動かすことができるようになります。
EXTESTモードにするには、操作したいデバイスをマウスクリックし、ツールバーの「」を押します。すると、 次のダイアログが開くので「はい」を選択します。FPGAは、現在の出力状態をホールドしたまま停止します。
図19 EXTESTの警告ダイアログでは「はい」を選択する
端子の状態を変える
画面上に表示されたFPGAの端子をどこでもよいので、マウスでクリックしてください。クリックする場所は、FPGAの左上のほうの端子が良いでしょう。このあたり(下の図21の赤線の範囲内)はLEDが接続されているため、操作しても安全です。クリックするとポップアップメニューが開きます。
HIと書かれたアイテムを選択すると、その端子がHレベルになります。同様にLOを選択すればLレベルに、Zを選択すればハイインピーダンス(もしくは入力)に、Toggleを選択すれば現在の状態が反転します。
図20 端子の操作方法を選択するポップアップメニュー
こうして、目的の端子をどんどんクリックしていくと、クリックされた端子の状態が変化します。下の図の赤線で囲まれた端子はLEDが接続されているので、クリックするたびにLEDの光り方が変わるのが確認できるでしょう。
図21 LEDが接続されている端子と光り方1
図22 LEDが接続されている端子と光り方2
実際のデバッグでは、LEDの端子の状態を変化させるだけではなく、メモリの端子やコネクタへつながるI/O端子をバウンダリスキャンで操作することにより、プリント基板実装の不良や、回路の接続検査、FPGAのピン配置の確認などを極めて迅速に行うことができます。
もう、論理合成をする必要はないのです。
FPGA/コンフィグROMの書き換え
現在出荷しているMITOUJTAG BASIC Version1.5では、Spartan3Aに対する書き込みと、コンフィグROM XCF04Sへの書き込みをサポートしています。
MITOUJTAGのコンフィグROM書き込み機能は、MCSファイルを経由することなく、Bitファイルを直接ROMに書き込むことができます。したがって、iMPACTを起動する必要はありません。ISEが出力したBITファイルをそのままコンフィグROMに書き込むことができるということは、余計な苦労をしなくて済みます。
コンフィグROMに書き込む場合の操作方法も、FPGAに書き込む場合の操作方法もだいたい同じです。最初に書き込みたい対象のデバイスをマウスでクリックして選択します。
図23 書き込みたい対象のデバイスをマウスでクリックする
次に、ツールバーの「」ボタンを押します。書き込みコントロールダイアログが開くので、「デザインファイル」のところにBitファイル名を指定します。コンフィグROMに書き込む場合でも.bitを指定することができます。MITOUJTAGの中でbit→mcsへの変換は自動的に行われます。
このダイアログで「データファイルが更新されるまで待機する」のチェックボックスをONにすると、BitファイルやMCSファイルが更新されるまで書き込みを保留します。論理合成に時間がかかるような場合は、このチェックボックスをONにして書き込みを予約しておけば、論理合成完了と同時に書き込まれるのでパソコンの前から離れることができます。
図24 書き込みコントロールダイアログ
デバイス書き込み中は下の図のようなダイアログが表示されます。
図25 書き込み中
Write Succesと表示されたら書き込みは成功です。
図26 書き込みが完了すると、Successと表示される
MITOUJTAGだけができる先進のデバッグ
起動していないFPGAに対するデバッグ
MITOUJTAGの強力なバウンダリスキャンは、FPGAが起動する前からI/O端子の状態を見ることができます。FPGAは起動すれば埋め込みロジックアナライザなど様々なデバッグ手段が用意されていますが、起動前のFPGAに対して端子の状態を調べたり操作したり、また、起動に失敗した原因を探る方法は、MITOUJTAG以外の選択肢はありません。
この節では、MITOUJTAGを使うと起動前のFPGAに対してどのようなデバッグができるのかを示します。
起動していないFPGAの端子の状態を見る
Spartan-3A評価ボードではジャンパJ46を外すとFPGAがROMからコンフィギュレーションできなくなります。この状態で電源を入れ、FPGAの端子の状態をサンプリングしてみると、ほとんどすべてのピンが入力状態になって動いていないことがわかります。
そして、左上のほうに1つだけLを出力している(水色で塗りつぶされた)端子が見えますが、これはDONEピンです。また、いくつかの端子については、網掛けのままピンクと水色に点滅しているのがわかります。これは、FPGAの外から入力されたクロック信号です。
図27 コンフィギュレーションされる前でもクロックが入っているのがわかる
次の図は、FPGA起動前の状態で、基板上のロータリエンコーダを回したり、スライドスイッチを動かしたときの端子の状態を波形としてキャプチャしたものです。FPGAが起動していないのに、クロックやスイッチなどの入力が見えているのがわかります。
図28 コンフィギュレーションされる前のFPGAの端子状態
モードピンの設定間違いを見つける
XILINX FPGAは、モードピン(M0~M2)の設定を間違えると起動することができません。しかし、MITOUJTAGを使えば、コンフィギュレーション前であっても、FPGA(XC3S700A FG484)のモードピンの状態を見ることができます。Spartan-3A評価ボードでは、モードピンはジャンパJ26に出ているので、このジャンパを抜き差してキャプチャした波形を次の図に示します。
もし、評価ボードではなく実機、でモードピンの設定が予期したとおりになっていないような場合では、すぐに原因がわかります。
また、モードピンは双方向ピンなので、バウンダリスキャンのEXTESTモードを使ってアクティブに操作することも可能です。MITOUJTAGの画面上でモードピンを動かし、基板上のプルダウン抵抗の部分をオシロで見る・・という今までにないデバッグ方法も可能になります。
図29 コンフィギュレーションされる前のFPGAのモードピン
PROG、INITなどの制御信号の間違いを発見する
FPGAを使用した回路を設計する上で間違いやすい事例のひとつとして、コンフィギュレーション用の信号(DONE、CCLK、INIT、PROG、D0)などの接続を間違えるということがあります。
MITOUJTAGを使うと、普通のFPGA設計方法では絶対に操作できない、「コンフィグ関連端子」をマウスクリックで操作し、コンフィグROMとFPGA間の接続や、それらの機能が正しく動作しているかを調べることができます。
例えば、以下のようにコンフィグROMの端子を操作し、FPGAの反応を調べます。
- D0ピンを操作する→FPGAのAB20番ピン(SPI_MISO)が変化する
- CFピンを操作する→ FPGAのC4番ピン(PROG_B)が変化する
- OE_RESETをHにしてCFピンをHにする→ FPGAのV13番ピン(FPGA_INIT_B)がHに変化し、コンフィグROMのCLK端子にクロックが供給される
- OE_RESETをHにしてCFピンをLにする→ FPGAのV13番ピン(FPGA_INIT_B)が変化する
図30 コンフィギュレーションされる前のFPGAのモードピン
このように、コンフィグROMとFPGA間のような、従来の手法ではデバッグできなかった領域まで、MITOUJTAGはデバッグできます。逆に、MITOUJTAGを使わなければ、この部分をデバッグすることはできません。
コンフィギュレーション成否を見る
FPGAがコンフィギュレーションに成功しているかどうか、MITOUJTAGを使えば一目でわかります。コンフィギュレーションに成功したFPGAは、Hレベル、Lレベル、入力、出力と、端子がにぎやかに動いています。
図31 コンフィギュレーションされる前のFPGAのモードピン
それに対して、コンフィギュレーション前の(あるいは失敗した)FPGAは、ほとんどの端子が入力状態になっていてます。FPGAの内部プルアップ抵抗などによってHレベルやLレベルに固定され動いていません。
そして、DONEピンがLを出力しているのが確かめられます。
そのような状態でも、クロックやM0-M2、INIT、PROGなどのピンの状態は見えています。
図32 コンフィギュレーションされる前のFPGAのモードピン
コンフィギュレーション過程を見る
FPGAが正しくコンフィギュレーションされる過程を、JTAGロジックアナライザで見てみます。
コンフィグROMのCE端子がLに下がり、CLKが与えられ、D0から何らかのデータが出力され、約400msでコンフィグレーションがおこなわれているのがわかります。
コンフィギュレーションが行われると、FPGAが起動し、約100ms後にLEDの点滅が開始しているのが波形として見えています。
図33 コンフィギュレーション過程
このように、MITOUJTAGを使うと、FPGAの動作をコンフィギュレーション前から連続して追跡することができます。