« 次はターゲットはCycloneIII | トップページ | Spartan-6のバウンダリスキャン問題のその後 »

2009.11.09

Cyclone3の書き込みに成功

Cyclone3の書き込みが安定してできるようになってきました。

いままでALTERA DE0でのJTAG書き込みがうまくいったり、いかなかったりしていたのですが、その原因がわかってきました。

まず、DE0には、RUN-PROGと書かれたスイッチがあります。
De0_jtag

Cyclone3が起動するにはnCE端子はLレベルでなければならないようなのですが、このスイッチをPROG側にするとFPGAのnCE端子がHレベルになるため、FPGAは起動できないようです。
ただ、私はALTERAに詳しくないので、このあたりの真相はわかりません。

それから、まだ未確認なのですが、書き込みに要する総時間がある程度長くないと、書き込みに失敗するようです。TCKの速度を速くして短い時間でコンフィギュレーションデータを送り込むと失敗します。逆に、TCKが速くても間に休みを入れて間欠的に送れば成功します。このあたりは謎です。

また、JTAGのシーケンスがどうなっているのか調べたくて、JTAGアナライザをつないでみました。
Jtag_analyzer
(携帯のカメラで撮ったので画質は荒いです)

そして、QuartusIIで書き込んだときの波形をキャプチャして調べてみました。
Jtag_analyzer_1_2

この解析ソフトにはまだバグがあるようで、シーケンスが100%正しく解読できていませんが、確実にいえることは、QuartusIIのProgrammerが出力するSVFファイルの内容とはかなり異なっていそうだということでした。

QuartusIIで出力できるSVFファイルよりも、QuartusIIのJTAG Programmerが発行するJTAGシーケンスのほうがずっと高度なようです。解析したところ、どうやらACTIVE_DISENGAGEという名前のJTAG命令を発行しています。

データシートによれば、ACTIVE_DISENGAGEというのはCyclone3に存在する命令で、ActiveSerialやAvtiveParallelのコントローラをアイドル状態にするものだそうです。なるほど、つまりJTAGコンフィギュレーション中にこれらのコントローラが悪さをしないようにしているものなのですね。(XILINXのSpartan-3では同様の機能がJTAGコンフィギュレーション中に悪さをすることがあった。)

この命令も発行してやる必要がありそうです。

|

« 次はターゲットはCycloneIII | トップページ | Spartan-6のバウンダリスキャン問題のその後 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 次はターゲットはCycloneIII | トップページ | Spartan-6のバウンダリスキャン問題のその後 »