FC2カウンター FPGAの部屋 Verilog2001版DDR SDRAMコントローラーのISE9.1iSP1によるインプリメント
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Verilog2001版DDR SDRAMコントローラーのISE9.1iSP1によるインプリメント

Verilog2001版DDR SDRAMコントローラーのインプリメントでISE9.1iSP1でインプリメントするとロータリーエンコーダと設定値を表示するLCD表示回路は動作するが(下の写真のピンクで囲んだ部分)、DDR SDRAMのリード値を表示するLCD表示回路(下の写真の緑色で囲んだ部分) は "0000" のままで表示が変化しない。
DDR_Verilog_ISE91i_Config_2_070224.jpg

ISE9.1iSP1 がおかしいのかと思って、.ngc を何とかテキストに変換して ISE8.2iSP3 のものと比較しようかと思ったが、うまく行かない。Translate終了後のVerilogシミュレーションモデルも比較してみたが、まったく違っていて比較が出来ない。
その時に、ふとFPGAインフォメーションBBSConfiguration Rateを変更したらコンフィギュレーションが安定したという記事を見たのを思い出した。

これ以下の記述は間違っています。コンフィギュレーションレートを変更して正常動作したのではなくて、何度もコンフィギュレーションすると正常動作するようです。

もしかしてと思って、"Generate Programming File" の Properties の Configuration Options の Configuration Rate の Default(1) を 3 に変更してみたら、今まで動かなかったDDR SDRAMのリード値を表示するLCD表示回路も動くようになった。
DDR_Verilog_ISE91i_Config_070224.png

Help を見ると Spartan3E のデフォルトの clock configuration rate は 1MHz だそうだ。ヘルプの文章を引用する。

Configuration Rate

Specifies the clock configuration rate in MHz. Select a value from the drop-down list. For Spartan™-3 devices, the default is 6 MHz. For Spartan-3E, the default is 1 MHz. For Spartan-3A and Spartan 3A Extended, the default is 25 MHz. For all other devices, the default is 4 MHz.


コンフィギュレーションのクロックをあげると、動作するようになるということはなぜなのだろう?
またナゾが増えたが、動作するようになったのはうれしいことだ。

ISE8.2iSP3 の設定を見てみたが、Default(1) で同じだった。ISE8.2iSP3 では問題なくて ISE9.1iSP1 では問題があるということだろうか? またナゾが。。。

補足:新しいプロジェクトを作成して、最初にコンフィグするときに正常動作しない状態になりやすいようでした。5回中2回再現しました。(iMPACTでコンフィグが成功しても、上記のように正常動作しませんでした)いずれの場合も、もう一度コンフィグすると正常になります。
それとはまた別にプロジェクトを作成する場合にISEが反応しなくなる、または落ちる状況が発生しました。

また1回は上の条件でなくても発生しました。やはりiMPACTを立ち上げて最初の一回目です。やり直せば問題ありません。
  1. 2007年02月24日 08:22 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:20

コメント

こんにちは。コンフィグレーションレートの件は謎ですね。
うちではいつも25MHzにしています。うろおぼえですが、たしかユーザーガイドに25MHzというのが何か載っていたような気がします。とりあえず問題なく書き込めているみたいなので気にしていませんでしたが、速い方が気持ちいいので^^
  1. 2007/02/24(土) 10:40:48 |
  2. URL |
  3. Sim #mQop/nM.
  4. [ 編集 ]

こんにちは。

そうですか。 25MHzでも大丈夫ですか? Spartan3Aは25MHzがデフォルトみたいです。
もしかすると、コンフィグレーションレートの問題でうまく動かないということが、他にもあるかもしれません。
今仕事では、わけがわからない状態になって困っていますので、(以前インプリメントできたプロジェクトが出来なくなった) 一度、コンフィグレーションレートをかえてコンフィグしてみようかと思っています。
  1. 2007/02/24(土) 11:50:29 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

始めまして
うまくいかなかった時ですが、DONE(コンフィグ完了時=H)はERRしていましたか
であるならレートを疑うべきですが。DONEに違いが出ていないなら、レートの問題とは違うと思います
  1. 2007/02/24(土) 23:35:38 |
  2. URL |
  3. NSX #-
  4. [ 編集 ]

アンサー #::22255 Spartan-3 コンフィギュレーション - JTAG でのコンフィギュレーションは正しく完了するがデバイスは完全に機能せず検証でエラーが発生する
というのがありました。Spartan-3となっていますが3Eもあてはまるそうです。全く無関係かもしれませんけど^^

  1. 2007/02/25(日) 00:24:56 |
  2. URL |
  3. Sim #mQop/nM.
  4. [ 編集 ]

NSXさん、はじめまして。
どちらもiMPACTのプログラムは成功しています。ISE9.1iSP1でデフォルトの時も一部機能が動作しています。iMPACTのプログラムが失敗すると、全部の機能が動かないですよね。
普通レートの違いとは思わないと思います。だからナゾなんです。
でも、私がどこか間違っているのかもしれません。

Simさん、情報ありがとうございます。
私もアンサー #::22255は承知しています。ので、いつもJTAGモードで使用しています。この点は大丈夫だと思います。
私もアンサー・サーチしてみましたが、該当するようなものはありませんでした。何か間違っているんですかね?

他のパソコンでどうなっているか知りたいところです。仕事でのパソコンもISE9.1iSP1で動作しないのは確認したんですが、コンフィギュレーションレートを変えて動くかどうかは確認していません。
  1. 2007/02/25(日) 06:44:34 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

Simさん、つけくわえますと。
写真のボードは以前の写真を流用しています。写真はマスタモードですが、これはPROMにプログラムしてマスタモードで動かした時のものです。普段はM0オープン、M1ショート、M2オープンのJTAGモードで実験しています。
  1. 2007/02/25(日) 08:25:35 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

#:22255は、XILINXのバグの話ではなく、ユーザのモードピン使用ミスにおける注意事項ですよね。
DONEが完了してERRということは、CRCチェックをERRが素通りしたということになります
もしそうなら、XILINXとして致命的なバグとなります。そんな情報が公にならないでしょうか。私は可能性はかなり低いと思います。
DDRなら高速ですし、単にHDL、基板、のAC要素ではないのでしょうか。
レートですが、100%正常になる値があるという話なら、そこに絞るのは意味があると思います。
  1. 2007/02/25(日) 10:55:42 |
  2. URL |
  3. NSX #-
  4. [ 編集 ]

NSXさんどうもです。おもいっきりはずしてたみたいですね。そもそも#22255って、marseeさんに教えていただいたものでした^^
以前、#22093 Spartan-3E、BitGen - コンフィギュレーション レート (ConfigRate) がツールで設定したレートと異なる、なんて問題もあったみたいなので、ソフトウェアバグっぽいような気もします。
  1. 2007/02/25(日) 12:16:24 |
  2. URL |
  3. Sim #mQop/nM.
  4. [ 編集 ]

NSXさん、Simさん、こんにちは。

NSXさん、”アンサー #::22255 Spartan-3 コンフィギュレーション - JTAG でのコンフィギュレーションは正しく完了するがデバイスは完全に機能せず検証でエラーが発生する” は正常に終了しているけど、動かないという状態です。
http://japan.xilinx.com/xlnx/xil_ans_display.jsp?iLanguageID=2&iCountryID=2&getPagePath=22255
ブログに書いた内容はISE8.2iSP3とISE9.1iSP1と同じVerilogファイルをインプリメントしているのにISE8.2iSP3は動作して、ISE9.1iSP1は動作しないということでした。


今、再度default (1) にしてやってみたところ、今度は動作するようになってしまいました。
プロジェクトをクリーンアップして、もう一度やってみましたが、動作します。
コンフィグレーションレートを 3 にする前は、何度かコンフィギュレーションしてもだめだったのですが。。。
一回動作したら、動くようになったのでしょうか?
それともFPGA Start-Up Clock を CCLK にしてあって、iMPACTでJTAGクロックに変更していたのがいけないんでしょうか?

仕事用パソコンは、まだ動作しないはずなので、でもう一度確かめてみます。


http://japan.xilinx.com/xlnx/xil_ans_display.jsp?iCountryID=2&iLanguageID=2&getPagePath=22093&BV_SessionID=@@@@0128916882.1172379636@@@@&BV_EngineID=cccdaddkfdmfllgcefeceihdffhdfkf.0
これを見て思ったのですが、もしかしてコンフィギュレーションレートはCCLKだけしか関係ないということですかね?
考えてみれば、JTAGポートは設定値にある50MHzとかで動作しそうもないですね。
そうなると、このブログに書いた結果は,、更にナゾということになります。
  1. 2007/02/25(日) 14:47:12 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

本ブログの投稿って、落ち着いていていいもんですね
marseeさん、Simさん、また何かの機会に参加します
これからもお付き合いできたらと思います

#22255 の件は、以前より症状も聞いていました。場所は違いますがもしかするとここがネタ元だったのかもしれません。
ただ仕様違反の場合の話なので、特に気にすることなく、メーカーもアンサーに載せていて対応もいいと思います。

レートの件ですが、
新レビューの内容からして、不具合との原因性は薄くなったと思います
実物のことを知りませんが、ここの情報からだけなら、私なら、片隅には置いといて原因から切り離すと思います

>もしかしてコンフィギュレーションレートはCCLKだけしか関係ないということですかね?

TCKで同期してTDO、ステータス信号が動いているだけですね、TCKに自動追随します

>考えてみれば、JTAGポートは設定値にある50MHzとかで動作しそうもないですね。

実際に出来ているかはわかりませんが、USBなら、50M=7Mbyteなので、充分問題ないとおもいます。
CLK-dutyはFPGA側では実は曖昧に管理されていて、PCからの入力に間断があってバッファが空で
少し一時停止みたいなことやっても多分大丈夫なはずです
  1. 2007/02/25(日) 21:31:47 |
  2. URL |
  3. NSX #-
  4. [ 編集 ]

NSXさん、こんにちは。

レートの件は片隅においてということでも良いと思いますが、そのプロジェクトで最初にインプリメントした時に起こる。もしくは、インストールしたパソコンのISE9.1iSP1をインストールして、ある条件で起こり、コンフィグレートを変えないとそのプロジェクトは動作しない。などが可能性としては考えられます。
私のパソコンと職場のパソコンの2台で同じ症状ですので、なにかあるかもしれません。(ないのかもしれませんが、いろいろISEには悩まされることもあるので疑い深くなってしまっています。偏見かもしれませんが。。。)
"Generate Programming File" の Properties の Configuration Options の Configuration Rate の Default(1) を 3 に変更する直前にも、以前のビットファイルで動作しないことは確認済みです。変更してビットファイルだけを生成して、やってみたら動作しました。

>TCKで同期してTDO、ステータス信号が動いているだけですね、TCKに自動追随します
ということはわかっているつもりなんですが、もしかしたら、コンフィグレートの周波数をiMPACTでコンフィグするときに見て、TCKの周波数を変えるのかなと思ったからです。もし私がiMPACTをつくるとしたら、動作周波数を次々に変更してTDIにいれ、TDOにきちんと出てくるかをしらべるでしょう。その限界値か、その下でコンフィグすると思います。といってもJTAGにテストモードがある場合ですが、実際はコンフィグレートで設定した周波数でやっているのかもしれませんね。要調査ですね。

>実際に出来ているかはわかりませんが、USBなら、50M=7Mbyteなので、充分問題ないとおもいます。
>CLK-dutyはFPGA側では実は曖昧に管理されていて、PCからの入力に間断があってバッファが空で
>少し一時停止みたいなことやっても多分大丈夫なはずです
50MHzと書いたのは、JTAGポートやJTAGポートからFPGAまでの配線が、高周波を通すように考えられていないのではないかと思ったからです。でも実際は大丈夫かもしれませんね。


  1. 2007/02/25(日) 22:04:51 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

Spartan-3E starter kitのTCKですが、16MHzだとNG、8MHzだとok、内部のUSBは6MHzで動作しているとのことです。
http://nahitafu.cocolog-nifty.com/nahitafu/2006/04/spartan3e_start_fd6d.html
  1. 2007/02/26(月) 00:23:45 |
  2. URL |
  3. Sim #mQop/nM.
  4. [ 編集 ]

Simさん、ありがとうございました。

TCKはコンフィグレートで制御されているということがわかりました。とても勉強になりました。
でも何で、JTAGスピードテストをしていないんだろう? JTAGあまり知らないけどテストモードがなくて、テストするにはスキャン長が長すぎるのかな?

NSXさん、Simさん、有意義なコメントありがとうございます。こういうやり取りが私が求めていたものだと思います。
  1. 2007/02/26(月) 06:18:13 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

おはよういございます
Simさん、情報ありがとうございます
marsee さん、50Mはどうやら無理そうかも
元々基板側はデータシートに無いような独自の終端を入れているので出来そうでうが、USB出力装置がそもそも50M時どの程度安定しているか不明ですね
marsee さん、良い展開があることを願っております
  1. 2007/02/26(月) 10:06:42 |
  2. URL |
  3. NSX #-
  4. [ 編集 ]

NSXさん、こんにちは。

よい展開かどうかわかりませんが、あまり再現しませんでした。

最初にコンフィグしようとしたら、なぜかISEの Generate Programming File だけ ? になっていました。再度、実行すると問題なく動作しましました。

新しいプロジェクトを作成して、最初にコンフィグするときになりやすいようでした。5回中2回再現しました。いずれの場合も、もう一度コンフィグすると正常になります。
それとはまた別にプロジェクトを作成する場合にISEが反応しなくなる、または落ちる状況が発生しました。

また1回は上の条件でなくても発生しました。やはりiMPACTを立ち上げて最初の一回目です。やり直せば問題ありません。

という状況なので、申し訳ありませんが、ブログの記事を修正したいと思います。ご了承ください。
修正は、コメントの経緯がわかるように、前の文章はそのまま残し、加筆修正した部分は赤で修正したいと思います。
  1. 2007/02/26(月) 12:17:44 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

WebPack ver.7にした時に1回目にフェイルするのが頻発しました。
2回目で通るので、まあいいかと使っていまして、
ver.8になってから、、、1度だけありました。
ver.6までの安定性が欲しいです。
  1. 2007/02/27(火) 10:36:41 |
  2. URL |
  3. smz #-
  4. [ 編集 ]

こんにちは。
コメントありがとうございます。

この場合は、iMPACTでコンフィグが成功したと表示されるが、正常に動作しないという状態になります。
  1. 2007/02/27(火) 13:07:11 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

こんちには
「Configuration Rate」ですが、これはFPGAのコンフィグモードがマスタシリアルか、マスタパラレル(SelectMAP)で有効になる項目です。
FPGAがマスタとなるコンフィグモードでは外部コンフィグROM等へのクロック(CCLK)をFPGAが内部オシレータで生成しますが、このCCLKのレートを指定するものです。
JTAGコンフィグする場合のTCLKは、iMPACTの「Cable Setup」での設定値が使用されます。

という訳で、JTAGコンフィグにおいてはCCLKのConfiguration Rateは無関係なはずですが、#22255(これは明らかにバグです)の件もありJTAGコンフィグでもFPGAがCCLKをお漏らししていてそれがなんらか影響してるのでは?と思います。

iMPACTの9.1iで「また」書込みロジックがどこか変わったのでしょう。
僕のところはEDKも使ってるのでまだ8.3です。
  1. 2007/02/28(水) 16:11:16 |
  2. URL |
  3. windy #JalddpaA
  4. [ 編集 ]

ちなみにCCLKのレートはSpa3シリーズとコンフィグシリアルコンフィグPROM(XCF??S)の組み合わせでは25MHzが最適値です。
FPGAは設定すれば50MHzを出力できますが(50~140%くらい変動しますが)PROM側の上限が33MHzです。

JTAGコンフィグでは以下の設定を行うと、FPGAでもベリファイができます。
「Generate Programming File」オプションの「Readback Option」で、
・Security → Enable Readback and Reconfiguration
・Create ReadBack Data File → チェックする
・Create Mask File → チェックする
上記の設定でファイル生成すれば、iMPACTでFPGAにもVerifyが実行できます。

先日Spa3Eの#22255関連で丸2日無駄にしました…
  1. 2007/02/28(水) 16:28:25 |
  2. URL |
  3. windy #JalddpaA
  4. [ 編集 ]

windyさん、こんにちは。

コンフィグ・ケーブルのTCKの設定はiMPACT -> Output -> Cable Setup に確かにありました。
だめなときにベリファイしてみると、何かわかるかもしれませんね。

貴重な情報ありがとうございました。
  1. 2007/03/01(木) 12:14:49 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/424-cea04332
この記事にトラックバックする(FC2ブログユーザー)