2008/12/11(木)[FPGA][ModelSIM] シミュレーションとライセンス
[SOPC] Model-Simによるシミュレーション
設定~ModelSimのライセンス
最初のインストールでQuartusIIしか入れていなかったため,ModelSim AlteraEditionを入れる.ライセンスが無いといわれたので,その追加方法についてメモを残しておく.
SOPC Builderにて,[System Generation]タブのOptionグループの"Simulation. Create project simulator files."をcheckする.
- "Run Simulator"を押下するとModelSimが起動する模様.
(ModelSimのインストール,ライセンスの取得は必須である.)
QuartusIIの,メニュー"Tool"→ "License Setup.." → "WebLicense Update"ボタンを押下すると,ALTERAのサイトに接続しにいきます.ALTERA WEB SITEのアカウントを取得しておき,LOGINします.
ユーザ情報を確認した後に,"ModelSim WEB edition"のライセンスも必要か問うているチェックボックスがあるので,忘れずにチェックを入れておきます.ライセンスファイルはメールで送られてきますので,コレを任意のフォルダに保存して,LM license managerがそれを参照するように設定します.
ユーザによっては,すでにxilinxやLM license managerを使用する製品を利用されているかもしれません.
マイコンピュータ→(右クリック)→ property → "詳細徹底"タブ → "環境変数"ボタン → ユーザの環境変数またはシステム環境変数
ここを参照して,下記の変数の値を修正します.存在しなければ新規に作成します.
QuartusIIに限れば,Option Dialogにて,"Use LM_LICENSE_FILE"の指定ができるチェックボックスが存在します.
ModelSimにはソレが無いため,環境変数の設定が必須となります.
ライセンスファイルが存在しない場合は,ここで記すような解決策の定時をダイアログで受けることになるでしょう.
環境変数
MGLS_LICENSE_FILE LM_LICENSE_FILE
複数のファイルや,ライセンスサーバ(
設定が正しくできているかどうかは,スタートメニューからたどって,"ModelSim-Altera 6.3g_p1 (Quartus II 8.1)"を実行します.
コマンド待ち受け画面("transcript")が出てくるので,ここで"lmutil lmdiag"と入力します.出力例を以下に示します.(IPやNETBIOS名を'x'で塗り替えています)
>lmutil lmdiag # # This license can be checked out # ----------------------------------------------------- # # Enter <CR> to continue: "adwu" v1.31, vendor: armlmd # License server: xxxxxxxx # floating license no expiration date # # Requests from the same USER/HOST/DISPLAY do not consume a new license # # This license can be checked out # ----------------------------------------------------- # ----------------------------------------------------- # License file: 8224@xxxxxxxx # ----------------------------------------------------- # ----------------------------------------------------- # License file: C:\altera\xxxxxxxxxxxx__0-xxxx3015308023.dat # ----------------------------------------------------- # "quartus_lite" v2009.05, vendor: alterad # uncounted nodelocked license, locked to ethernet address "xxxxxxxxxxxx" expires: 15-may-2009 # # This is the correct node for this node-locked license # ----------------------------------------------------- # # Enter <CR> to continue: "alteramtiwe" v2009.05, vendor: mgcld # uncounted nodelocked license, locked to ethernet address "xxxxxxxxxxxx" starts: 9-dec-2008, expires: 15-may-2009 # # This is the correct node for this node-locked license # ----------------------------------------------------- # ----------------------------------------------------- # License file: C:\altera\xxxxxxxxxxxx__0-xxxx42759966265.dat # ----------------------------------------------------- # "quartus_lite" v2008.12, vendor: alterad # uncounted nodelocked license, locked to ethernet address "xxxxxxxxxxxx" expires: 15-dec-2008 # # This is the correct node for this node-locked license # -----------------------------------------------------
この例では,旧ファイルも残っているようで,複数のライセンスが見て取れます.
一部ライセンスサーバからも取得してきており,ADSのライセンスも見受けられます.(各種ツールの名称が並びますが,個々では無関係なので省略しました.)
ModelSimのライセンスは,"alteramtiwe"であると考えられます.QuartusIIは"quartus_lite"でしょう.これらの文字列が見えない,または,"License file: "で,取得したライセンスファイル名がない場合は,どこかの設定が誤っているか,設定終了後にアプリを起動していないのかもしれません.
[SOPC][ModelSim] 不定値伝播
気持ちよくシミュレーションを実行すると,不定値が伝播しており,testbenchモジュールで $stopコマンドが発令された.cpu coreのあたりで,ddr_sdramからの信号のようだ.タイミングはreset_nがネゲートされたあたりで,PLL unlock状態なのが問題のように思える.
現状は,system clockとddrclockの2系統があり,これらの安定化を待つようなシステムになっているのかは不明である.少なくともシミュレーションで不定値が伝播してきているので,下記のいずれかの問題が生じていると考えられる.
- 自動生成されるテストベンチが不正
- PLL lock状態までシステムをとめるような仕組みが存在しない\これはこれで問題な気がする.どこかのサンプルでPLLをSOPCからはずしていた理由はコレか...
- シミュレーション実行において手順が抜け落ちている?\ALTERAセミナ資料どおりにやってるはず...
実機+JTAGがぶら下がっている状態では動いているので,PLL安定後は正常動作する模様です.
初期起動時の不安定性がシミュレーションにより予見されたということでしょうかね.
妄想レベルでの対策は,すべてのPLL出力が安定(lock信号がアサートされるまで)は,NiosIIシステム全体をリセット状態にしておくことですね.SOPC builderにより生成されたモジュールへのリセット信号が,本当の全域リセットと,PLLブロックへ入っている?リセットと区別されていることが条件になりますねぇ.もしくはPLLブロックをSOPC Builderから離して生成するか.そうなるとdynamicなclock制御ができなくなるか.
そんなことするのは当面先のことになるし,clock domain境界の処理をどうすべきかを検討する必要がありますが.クロック・モジュールリセットの集中管理が必須となってくるでしょうねぇ.そんなことできるかな...
2008/08/12(火)[ISE] 久しぶりのHDL, WebPackISE, 初めてのFPGA
WebPackISE v10.1sp2上で, Verilog記述を行い, おもちゃを作ろうとしている.久しぶりにHDLに触れたのと, CPLDとは規模が違いすぎるので, 真面目に検証しておこうと思う.途中ツールの使い方や設計自体に問題がありそうなので, メモを記しておくことにする.
識者の方にツッコミを入れてもらえると非常にありがたい...
また, 検索したりアンサーを探したり, 本を見たりと参照先がややこしくなっているので,可能な限りリンクを貼って残したいと思います. リンク先が消える可能性もあるから,せめてローカルには保存しておきたいと思うけれども, blog形式だと管理が面倒ですよねぇ...とりあえず, FPGAの部屋のまとめサイトは外せなさそうです.ほかにもあるけれど, 今開いているページだけ貼っておきました.
タイミング制約(timing constraints)について
Synthesize - XST
ISEWebPackにて, Synthesisを行ってレポートを見る.なんだかタイミング間に合ってないような書き方されているが, Synthesisだけで判断しないほうがいいのかな.だんだんとイヤになってきたしw.
summaryは以下のとおり. 結果としてClockは127MHzまでokよと言われていると考えていいのだろうか.
Timing Summary: --------------- Speed Grade: -4 Minimum period: 7.824ns (Maximum Frequency: 127.815MHz) Minimum input arrival time before clock: 9.067ns Maximum output required time after clock: 11.857ns Maximum combinational path delay: 14.951ns
Detailを少し引用してみるが, この遅延が支配して, 上限が確定してしまっているように見受けられる. DCMで2逞倍にしたクロックで内部ロジックをまわしているのだけれども, 100MHz想定だからOK??配置配線完了すると, route timeとか logic timeに変動があるかもしれないけれど. setup time/hold timeを加味した上での値, と見ていいのかしらねぇ?
Timing constraint: Default period analysis for Clock 'CLKOUT_DCM1/CLKFX_BUF' Clock period: 7.824ns (frequency: 127.815MHz) Total number of paths / destination ports: 10190 / 330 .... (4.609ns logic, 3.215ns route)
まぁ, こう書いてあることだし, とりあえず保留...
TIMING REPORT NOTE: THESE TIMING NUMBERS ARE ONLY A SYNTHESIS ESTIMATE. FOR ACCURATE TIMING INFORMATION PLEASE REFER TO THE TRACE REPORT GENERATED AFTER PLACE-and-ROUTE.
Implement Design / Translate
Checking Constraint Associations... WARNING:NgdBuild:1011 - The constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_5 = PERIOD "CLKOUT_DCM1_CLKFX...> is overridden by the constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_5 = PERIOD "CLKOUT_DCM1_CLKFX...>. WARNING:NgdBuild:1011 - The constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_5 = PERIOD "CLKOUT_DCM1_CLKFX...> is overridden by the constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_5 = PERIOD "CLKOUT_DCM1_CLKFX...>. WARNING:NgdBuild:1011 - The constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_6 = PERIOD "CLKOUT_DCM1_CLKFX...> is overridden by the constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_6 = PERIOD "CLKOUT_DCM1_CLKFX...>. WARNING:NgdBuild:1011 - The constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_6 = PERIOD "CLKOUT_DCM1_CLKFX...> is overridden by the constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_6 = PERIOD "CLKOUT_DCM1_CLKFX...>.
検索した. 1011は場所かな? と判断して, メッセージ部分をAND指定すればOK. *1
アンサーに登録されている, 10.1 NGDBUILD - 制約の優先順位での問題というのが該当しそうだ. 抽出した部分, 長すぎてはしょられてしまっているので, 制約が読み取れないけれど...
しかし, ucfでは該当しそうな制約条件を記述していない. CLKFXは DCMの出力クロックだと思われる. FPGAの部屋では, DCM入力クロックの制約事項を記述しておけば, 出力クロックの制約を自動生成するようだ, と書かれていた.
少し気がかりだが, 致命的ではなさそうなのでおいておこう...
Place and Route Report
ここが気になる英文. 英語赤点できたのと, 仕事でも添削してもらわないと送れないレベルの儂惨状*2
WARNING:Route:455 - CLK Net:CLKFX_OUT may have excessive skew because 0 CLK pins and 2 NON_CLK pins failed to route using a CLK template. => ~は, 極端なスキューを持つ. NON_CLK pin2つがCLK temlateを使った配線で失敗している(?)
なんか調子悪そうにみえる... のだけれど.
大きすぎて引用をためらったが, ヘンにはしょるのもよろしくなさそうなので貼り付け.
Derived Constraint Report Derived Constraints for TS_clk_in +-------------------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | | Period | Actual Period | Timing Errors | Paths Analyzed | | Constraint | Requirement |-------------+-------------|-------------+-------------|-------------+-------------| | | | Direct | Derivative | Direct | Derivative | Direct | Derivative | +-------------------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ |TS_clk_in | 20.000ns| 4.972ns| 19.983ns| 0| 0| 336| 10214| | TS_CLKOUT_DCM1_CLKFX_BUF | 6.667ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_0 | 6.667ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_1 | 6.667ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_2 | 6.667ns| 6.661ns| N/A| 0| 0| 10214| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_3 | 6.667ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_4 | 5.000ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_5 | 10.000ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_6 | 10.000ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_7 | 10.000ns| N/A| N/A| 0| 0| 0| 0| +-------------------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+
おそらく自動生成された制約だろう. DCM入力50MHz(20nSec)に対して, x2の100MHz(10nSec)という制約が...
おかしいやん.. 6.6nSecとか5nSecて, 3倍4倍じゃね?しかも負荷ぶら下がってるし.見方が悪いのかナァ. それにしてもErrorの項はゼロだしなぁ...
動くものと信じて検証しておきますか. シミュレータでの確認がまだだったりします...
DCMのリセット
なひたふ先生のblogにて、Spartan3E DCMからクロックが出てこないというエントリがありました. DCMの使用例を探していてヒットしたのです.
ここにあるように, 入力クロックが心配であれば, DCMの出力が安定してなければ再度リセットを行うような回路を入れるべきという提案に賛同します.コメント欄で いくら先生も引っかかったようですので, 先人の経験をありがたく授受しようかと思います.
で, この回路は比較的簡単に実装できたので, module testの練習(思い出し)を兼ねて実施. XSTを使い, パターンをふって, 17mSec程度まわしたら アプリケーションが落ちた...しかもメモリをガメたまま. ファイルもロックしたまま. \(^o^)/
ModelSimだと遅いから, とりあえずの動作確認としてXSTを使ったのが敗因か?本気でHDLで遊ぶなら, Veritakの購入も考えたほうがいいのかしら...下手なゲームソフトを買うより安いものネェ. その上実用的だし:)
本日の結論
reportの見方が判らないが, エラーとして明示されていないので, とりあえず疑問点を挙げて記録したから満足.検証を済ませてマイコンとの配線を済ませるつもりだったが全く進捗が無い. これはかなり厄介だ...
N:TMに途中成果を持っていけない臭いがぷんぷんするぜ...