Cyclone3の書き込みに成功
Cyclone3の書き込みが安定してできるようになってきました。
いままでALTERA DE0でのJTAG書き込みがうまくいったり、いかなかったりしていたのですが、その原因がわかってきました。
まず、DE0には、RUN-PROGと書かれたスイッチがあります。

Cyclone3が起動するにはnCE端子はLレベルでなければならないようなのですが、このスイッチをPROG側にするとFPGAのnCE端子がHレベルになるため、FPGAは起動できないようです。
ただ、私はALTERAに詳しくないので、このあたりの真相はわかりません。
それから、まだ未確認なのですが、書き込みに要する総時間がある程度長くないと、書き込みに失敗するようです。TCKの速度を速くして短い時間でコンフィギュレーションデータを送り込むと失敗します。逆に、TCKが速くても間に休みを入れて間欠的に送れば成功します。このあたりは謎です。
また、JTAGのシーケンスがどうなっているのか調べたくて、JTAGアナライザをつないでみました。

(携帯のカメラで撮ったので画質は荒いです)
そして、QuartusIIで書き込んだときの波形をキャプチャして調べてみました。

この解析ソフトにはまだバグがあるようで、シーケンスが100%正しく解読できていませんが、確実にいえることは、QuartusIIのProgrammerが出力するSVFファイルの内容とはかなり異なっていそうだということでした。
QuartusIIで出力できるSVFファイルよりも、QuartusIIのJTAG Programmerが発行するJTAGシーケンスのほうがずっと高度なようです。解析したところ、どうやらACTIVE_DISENGAGEという名前のJTAG命令を発行しています。
データシートによれば、ACTIVE_DISENGAGEというのはCyclone3に存在する命令で、ActiveSerialやAvtiveParallelのコントローラをアイドル状態にするものだそうです。なるほど、つまりJTAGコンフィギュレーション中にこれらのコントローラが悪さをしないようにしているものなのですね。(XILINXのSpartan-3では同様の機能がJTAGコンフィギュレーション中に悪さをすることがあった。)
この命令も発行してやる必要がありそうです。
| 固定リンク


コメント