DE0-nanoのバウンダリスキャン
平成24年11月23日
Terassic社からDE0-nanoという評価ボードが発売されています。コンパクトなサイズにALTERAのCyclone4が搭載されていて、1万円を切る価格という激安ボードです。このボードをMITOUJTAGでスキャンしてみます。
写真1 DE0-nanoの外観
JTAG信号が出ていない!
このボードはオンボードでUSB-Blasterが搭載されていて、逆にJTAGコネクタのピンヘッダは出ていません。
でも、大丈夫。最近のMITOUJTAGはUSB-Blasterに対応しているからです。
ケーブルの自動認識でUSB-Blasterと表示されます。(ちょっと格好悪いけど)
図2 MITOUJTAGでUSB-Blasterが認識された
デバイスの自動認識~バウンダリスキャン
次に、デバイスの自動認識。しかし、残念ながらCycloneIIIのEP3C25F256が認識されてしまいました。
どうやら、Cyclone IIIとCyclone IVはデバイスのIDCODEが一緒なのです。
図3 Cyclone3として認識されてしまう・・
しかし、バウンダリスキャンスキャン結果は正しいように思われます。少なくともプッシュボタンスイッチを押すと、回路図どおりのピンが変化するからです。
図4 しかし、バウンダリスキャン結果は正しい
おそらく、ALTERAの中の人が、JTAGのIDCODEを間違って付けてしまったか、Cyclone3とCyclone4は設計が同じなのかもしれません。謎ですね。
正しくCycloneIVをバウンダリスキャンするには
ALTERAのWebサイトから、CycloneIVのBSDLファイルをダウンロードしてきます。それをMITOUJTAGに読みこませると、ちゃんとCycloneIVのEP4CE22F17となりました。
図5 ダウンロードしたBSDLファイルを使うと正しくCycloneIVを表示した
DE0-Nanoに最初から入っているFPGAのデザインを動かして(つまりケーブルをつないだだけで自分では何も書き込んでいない)、I/O端子の波形も見ることができました。
図6 デフォルトのFPGAが動いているときの動作
LEDがPWMでじわじわ点滅しているので、それが見えています。また、J15番とE1番ピンはプッシュスイッチなので、それを押したタイミングでLレベルになるのも見えています。
DE-0 nanoへの書き込み
MITOUJTAG 2.40cと、それ以前のバージョンのMITOUJTAGでCyclone4に書き込むには、パッチが必要です。
パッチはこちらのページ /download.html にある、
「書き込みアルゴリズムの更新 更新日:平成24年12月22日」を適用してください。
ここで、MITOUJTAGの書き込み機能を起動します。
図7 書き込みダイアログ
書き込むファイルは、QualtusIIで生成した非圧縮RBF形式にしてください。SOFからの直接の書き込みはまだできません。
開始ボタンを押すと、びゅーーっと進捗バーが進んで、RBFファイルが書き込まれます。
図8 書き込み中のようす
しばらくすると、書き込みが完了して、私が作ったナイトライダー風LEDチカチカが起動しました。
図9 書き込んだ後にバウンダリスキャン
MITOUJTAGでは、このように書き込んだ直後から動いている端子の状態が見えます。
FPGAを起動させない技がある
単純に書き込むだけだとQualtusIIのJTAG Programmerにもできるので、MITOUJTAGならではの「かゆいところに手が届く機能」をつけました。
Cyclone4の書き込みアルゴリズムを解析していて、面白いことを発見したのです。この特徴を使うと、コンフィグROMから起動させたり、させなかったりすることができます。そういうJTAG命令が隠されていたのです。
MITOUJTAGのCyclone4書き込みダイアログで、「Reconfigration from ROM」というチェックを外して、Eraseをします。すると・・
図10 Reconfiguration from ROMのチェック
なんと、Cyclone4はコンフィグROMから起動せずに、完全に未コンフィグの状態に留まるのでした。つまり、コンフィグROMに何かのデータが入っている状態であっても、ROMを消さずに、FPGAを未コンフィグの状態にできます。
すべてのピンは静かな状態になって、コンフィグROMにつながるピンだけが出力になっているのがわかります。
図11 未コンフィグの状態にとどまらせることができた
まとめ
このように、ZED Boardのデフォルトのデザインについては全く知識がないものの、端子の状態だけは自由自在に見たり操作することができました。MITOUJTAGを使えば、このようなことが簡単にできます。