FC2ブログ

ModelSim-AEでALTPLLのシミュレーション?

ALTERA メガファンクションで生成したALTPLLのシミュレーションが、

ModelSim-AE(ALTERA Edition)でうまく実行できない事例

ハマリ度:☆☆☆

Altera CycloneデバイスのPLLを使う目的で、

Quartus2 のMega Function WizardでALTPLLを生成。

ModelSim-AEでPLLを組み込んだFPGAのシミュレーションを行おうとしたら、

PLLが動作しない。なんで?

ちなみにおおざっぱなPLLの機能は次の通り。

・入力クロック:1系統(clkin)

・生成クロック:1系統(c0)

・非同期リセット(areset)あり

問題が複雑化するのを避けるため、PLLモジュールのみをシミュレートする。

ModelSimを使用したシミュレーションは、次の単純な手順のみ。

1.clkinにクロックを入力

2.非同期リセットを200ns程度行って解除

3.あとはPLLからc0が出力されるのを待つ

しかし、PLLからのc0出力はリセット解除後にHighに張り付いたまま、動作しない。

《 ↑ ほらね。inclk0は入ってるけど、c0は動いてないでしょ。》

原因がわからないまま、関係ありそうな設定をいじくり回してみたが結果は変わらず。

様々な文献(といってもALTERA,Altimaのサイトで手に入る資料とgoogle検索だが)

を調査した結果、原因が判明した。

原因は、Simulation Property ダイアログ内にあるResolutionの設定。

Simulation PropertyはsimulateメニューのStart simulationで表示されるダイアログ。

ALTPLLのシミュレーションは、この設定をps(pico second)にしないとダメなのだ。

Defaultやnsはもちろん、10psや100psでもダメ。

厳密には、psよりも高分解能な単位に設定することが必要だということ。

その理由は「ALTPLLの場合、Phase Shift等をps単位で行うため」とのことらしい。

で、おもむろに設定をpsに変更し、デザインをリロードして再トライしたところ・・・

PLLのc0出力がトグルし始めた。

《 ↑ c0がちゃんとトグルしている。areset解除直後のUnkonwn期間はPLLのlock待ち 》

ヤッター!というより、むしろナンダヨォ!コンナコトカヨォ!って感じ。情けない。

思い返せば、確かにALTPLLのマニュアルのどこかにチラっと「psにしてね」と記述があったような

気がする。

しかし、ハマッっているときにはなかなか記憶から引き出すことはできないものだ(と言い訳)。

ちなみに、いろんな文献やweb上のBBSを探っていると・・・

やっぱり同じことで行き詰まっている人がいたらしく、そんなBBS(英語)を発見。

そこでは、原因として考えられることについて侃々諤々(喧々囂々)。

「aresetの期間がちょっと短いんじゃないの?(原文は英語)」

とか、

「いやいや、シミュレーションでaresetをかける必要はないぞ!(原文は英語)」

なんていう議論もあったりして、読んでるこっちが混乱してしまいそう。

そんな白熱した議論の最後に、

「ところでResolutionはpsにしてるよね?(原文は英語)」

というのがあって、思わす笑ってしまった。それが結論だったのにね。

分かってしまえば大したことではないが、解決までに費やした時間はかなり痛い。

スポンサーサイト



コメントの投稿

非公開コメント

RSSフィード
リンク