Xilinx ISE 12.1で気づいた点 のバックアップ(No.12)
更新- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 電気回路/HDL/Xilinx ISE 12.1で気づいた点 へ行く。
動作環境 †
以下の話は、ISE 12.1 と ModelSim 6.5c を Windows Vista Ultimate 上で動かしている時に気づいた点です。
ツールによっては Vista に公式に対応していないものもあるのですが、 「こうだったらいいのに」という希望などを書き連ねたもの、ということで。
ModelSim XE が使えない?! †
http://japan.origin.xilinx.com/support/answers/35482.htm
にあるとおり、
ERROR:ProjectMgmt:387 - TOE: ITclInterp::ExecuteCmd gave Tcl result 'can't read "value": no such variable'.
というエラーが出て、ISE から ModelSim XE を起動できません。
ISim もうまく動かない? †
→ この件は私の使い方が悪いのではないかということです。 個人的にはまだ解決できてない(努力してない)のですが、 ISE 12.1 のせいではないということで。
Behavioral 以外のモデルで ISim を起動しようとすると、
ERROR:Simulator:702 - Can not find design unit work.glbl in library work located at isim/work
と出て、うまく動きません。
こちらはネット上で情報を見つけられなかったので、私の環境だけかもしれません・・・
ということで、まともなシミュレーション環境が無くなってしまいました(泣
細かい操作感 †
コードエディターからフォーカスが失われなくなった †
11.5 では一旦他のアプリにフォーカスを写し、 ISE に戻ってきたときにエディターのフォーカスが おかしな所に行ってしまって、マウスでクリックしないと編集を続けられなかったのが、 12.1 では治っています。
Ctrl + => などでのキャレット移動がおかしい †
11.5 まではコントロールキー+矢印キーで正しく単語毎に移動できていたのですが、 12.1 ではおかしな所にキャレットが移動します。
結構しょっちゅう使うので直して欲しいです。。。
検索文字列入力時に全選択されたり、されなかったり †
Ctrl + F で検索したり、Ctrl + H で置き換えたりするときに、 文字列入力の TextBox が全選択状態になってくれないと、 毎回前回の文字列を削除してから新しい文字列を入力しなければならず、面倒です。
11.5 ではほぼいつでもそんな状況だったのですが、 12.1 になって、テキストエディタや Design - Hierarchy などでは ちゃんと全選択されるようになりました。
でもなぜか、Console ウィンドウでは全選択されないままのようです。
検索語句入力部のUIをちゃんとモジュール化して開発していれば こんな風に中途半端に改善されることは無いと思うので、 どんなコードになっているのか、様子を想像してしまう訳ですが・・・
Goto Line ダイアログで Line 値が全選択されない †
コードエディタ上で Ctrl+G を押すと、 行番号指定でキャレットを移動できるのですが、 このときダイアログ中で行番号部分が全選択されていないため、 バックスペースを連打して古い値を消してから Enter しなければならず面倒です。
11.5 でも気になっていたのですが、12.1 になっても改善されていませんでした。
コード中に全角文字が入ると ISE が落ちる †
突然起動しなくなりました †
コードの編集中に Ctrl+S で保存した瞬間、砂時計カーソルから戻ってこなくなってしまい、 ISE Project Navigator を強制終了せざるを得なくなりました。
その後、PC の再起動までしたのですが、ISE を起動できない状況が続きます。
ISE のアイコンをダブルクリックしても、ステータスバーの表示が "Loading Library" から、 "Opening Project: ??????.xise" に変わった後、 砂時計カーソルのまま、いつまで経っても画面が変化しません。
その間、_pn.exe が Core 2 duo の片方の CPU を100%使った状態です。
git でバージョン管理をしていたので、???.xise と ???.gise を正常に動作していた時点のものに戻したのですが、状況は改善されませんでした。
なんとか起動する †
regedit で HKEY_CURRENT_USER\Software\Xilinx\ISE\12.1\Project Navigator\Recent Project List1 の値を空にしたところ、ISE Project Navigator を起動することができました。
でも、件の .xise ファイルを開こうとするとやはり固まってしまいます。
新しいプロジェクトを1から作って、そこにファイルを追加していったところ、 ちょうど始めて固まったときに編集していたソースファイルを追加した瞬間、 やはり Project Navigator が固まってしまいます。
どうやら、そのソースファイルが悪いらしい。
12.1 から、ソースファイルをコンパイルしなくても、 メッセージウィンドウにエラーを表示してくれるようになっています。 そのせいで、たまたまコンパイラのバグを突いてしまうとこういう状況に陥るようです。
全角スペースが入っていた †
で、原因は、コードのインデント部分に全角スペースが1つ紛れ込んでいたことでした。
コメント部分なら問題ないようですが、 コード部分に全角文字が紛れ込んだソースファイルが プロジェクト中に1つでもあると ISE が固まるみたいです。
これは・・・日本では致命的なバグですね。
ModelSim XE が起動できない問題もあるので、 一旦 11.5 に戻して、12.2 が出るまで待った方が良いかもしれないと思い始めています。
論理合成時に原因不明のエラーが出るとき †
- プロジェクト中に明らかに存在するモジュールが見つからないと言ってきたり
- 指定しているはずの制約がどうしても正しく掛からなかったり
本当に原因不明の時は、[Project]-[Cleanup Project Files...] から、 論理合成時の中間ファイルを全て消去して、 もう一度合成をしてみるとうまく行くことがたびたびありました。
これは 12.1 だから、というのではなく、Xilinx ISE を使っていれば常識的な作業のようですね。
ModelSim 6.5c の細かい操作感 †
12.1 用の ModelSim に関する話です。
WAVE ウィンドウでの F5 キー †
ModelSim を使ってデバッグする際には WAVE ウィンドウで時間軸を拡大するショートカットキーとして、 日に何十回も F5 キーを押しています(汗
ところが、
- スクロールバーをクリックした後に F5 キーを押す
- 信号名欄あるいはカーソル名欄をクリックした後に F5 キーを押す
- 1回 F5 を押した後、画面が更新される前にもう一度 F5 キーを押す
の条件で、F5 キーがウィンドウの最大化用のショートカットキーとして 解釈されてしまうため、元に戻すまでデバッグ作業を中断させられてしまいます。
ISim と違い、ModelSim では時間スケールの拡大時に信号カーソルあるいは マウスカーソルを基準にするのではなく、画面の中心を基準にしてスケール拡大が行われるので、 信号カーソルを追いかけるのに常にカーソル名欄、あるいはスクロールバーをクリックする必要があり、 そこでもう一度 F5 を押すとウィンドウが最大化されてしまうという状況で、 かなりグロッキー気味です(泣
ちなみに、もう一度 F5 を押すことで最大化されたウィンドウが元に戻る場合もありますが、 そうでない場合もあって、そういうときは WAVE ウィンドウの右上の "−" ボタンをクリックするか、 スクロールバーをクリックしてから F5 キーを押して、最大化状態を元に戻しています。
回避策として F5 キーをウィンドウ最大化として解釈しないように設定する、 あるいは、WAVE の拡大用に別のキーを登録する、 といった手段があれば良いのですが、今のところうまいやり方を見つけられていません。
根本的には WAVE ウィンドウ上でのフォーカスの扱いについて、もう少し慎重に gui を設計して欲しいです。
#tcl/tk での gui 開発って、こういう根本的な部分で苦労するようなライブラリ構成なんですかね。。。
Ctrl + マウスホイール での拡大・縮小 †
普段開発用の ThinkPad にマウスを繋いでいないのですが、もしや、と思いマウスを繋いでみたところ、 Ctrl キーを押しながらホイールを回すことで WAVE ウィンドウの拡大・縮小ができるようですね。
これだと少なくともウィンドウが不必要に最大化されてしまうことは無いようです。
ただ、
- 拡大では、マウスカーソル近辺?を基準に拡大されるようです?
実際には計算ミス?のせいでちょっとずれたところが中心になっています - 縮小では、、、時刻ゼロを基準に縮小されるようです?少なくともマウスカーソルとは違う位置なような。
しかも、時刻ゼロが画面範囲に入ると、なぜか同じ操作で拡大されます?
うーん、まじめにデバッグされていないんでしょうか???
WAVE ウィンドウの拡大・縮小はもっとも頻繁に行われる操作の1つだと思うので、
上記がソフトの不具合なのであれば、早急に対策を講じてくれることを望みます。
#私の使い方が悪いのであれば、どなたか指摘して下さるとありがたいです。
回避策 †
marsee さんから、Ctrl + ドラッグで、選択範囲のみを拡大できることを教えていただきました。
これは・・・便利すぎます!(笑
貴重な情報をありがとうございました。
欲を言えば †
信号カーソル名をクリック(あるいはダブルクリック)したときに、 カーソル時刻が中央にくるようスクロールして欲しいです。
現在は、カーソルが画面外にあればそのように動作しますが、 カーソルが画面内にあるときはスクロールしません。
WAVE ウィンドウのリコンパイル前後のスクロール状態 †
ISE 11.5 と一緒に使っていたバージョン (6.4b?) では、 WAVE ウィンドウを縦にスクロールした状態でコードのリコンパイルをすると その後表示がおかしくなってしまうバグがありました。 おかしくなった表示を直すには、 ほんのわずかで良いのでスクロールバーを動かす必要がありました。
この問題は 6.5c で、少なくとも表面上は改善されています。
どうなったかというと、 以前のようにリコンパイルの前後でスクロール対置を覚えているのをやめて、 毎回初期位置にリセットされるようになりました。 そのため、表示も問題なくなった、という話です。
結局、手動でスクロールしなおさなければならないのは変わりませんでした。
もっと言うと、 以前はスクロールバーに少しさわるだけで正しい表示が得られていたのに、 これからは毎回ゼロから必要な場所までスクロールしなければならない訳で、 今回の変更は仕様上は改善であっても、 操作感としては多少なりとも改悪になってしまったように感じられます。
リコンパイル途中で WAVE ウィンドウは一端空になって、*.do ファイルによりもう一度信号で埋められるので、 その間の動作を考えれば開発者の気持ちも分からないわけでは無いのですが、 操作感の向上を目指して何とかうまくやって欲しかったところです。
ModelSim 6.5c メモリウィンドウのスクロール †
一番下の行が見られない †
私の環境では、スクロールバーだけを使ってスクロールしたのでは 一番下の行が半分見えるところまでしか縦スクロールできません。
矢印キーやページダウンキーでスクロールすると、 一番最後を完全に表示しきるところまでスクロールできるようです。
キーボードでのスクロールがおかしい †
ただ、キーボードでのスクロールも何だか動作がおかしくて、
- ページアップ・ダウンキーを押しっぱなしにして移動すると、 キーを離したときに元の位置に戻ってしまう
- Ctrl + Home で表示だけ先頭に飛べるように見えるが、 カーソル移動キーやスクロールバーを操作すると、 元の位置に戻ってしまう
- Ctrl + End で、何も表示されないおかしな状態になってしまう
- カーソル移動キーを押すと非表示のキャレット位置が画面から 外に出すタイミングでスクロールが始まるが、 いかんせんキャレットが非表示なので、非常に直感的でない動作となっている
といったように、画面上でのスクロール状態と、 (非表示の)キャレット位置との整合性が取れていないことが原因と思われる不具合が満載です。
コメント †
ModelSim、Waveウインドウの拡大 †
[marsee] (2010-06-13 (日) 19:23:35)
ご存知でしたら、申し訳ないですが、私は拡大したい部分をCTRL+ドラックで拡大しています。これじゃダメですか?
- いえいえそれでばっちりです!ModelSim でのデバッグ効率が一気に上がりました。 F5 とかホイールとかは普通の人があまり使わないインターフェースだからバグが残っている、ということだったのかもしれませんね。 -- [武内(管理人)]
全角スペースは(笑) †
[アプロ] (2010-06-06 (日) 14:27:17)
2byteコードの全角スペースは、コメントも含めて使用しない方がベターです
半角カタカナもNGです
英語圏のソフトなので、日本語などの2byteコードは理解してくれまへん(笑)
- すみません。よく分からなかったのですが、コメント部分で他の全角文字と全角スペースとを区別する必要性があるということでしょうか?普通に ISE で編集していると、ソースコードは SJIS で保存されるようです。http://charset.7jp.net/sjis.html 文字コード的に全角スペースに特に注意が必要、という気がしなかったのですが・・・ -- [武内(管理人)]
- 全角スペース自体は悪くないのですが、解釈するほうで混乱するのです(笑) ですので、昔昔から全角スペースは全面禁止にしていますよ -- [アプロ]
- 「解釈するほう」というのは、コードを読む人、ということでしょうかか?それともコンパイラでしょうか?英語圏かどうかは関係なく、通常のコンパイラの作り方をしていれば不正な文字コードは語彙抽出段階ではじくことになるので、おかしな文字コードが出現したからと言ってハングアップするようなコンパイラの作り方は逆に想像するのが難しいのですですけれど、どうなってるのか不思議に感じています。 -- [武内(管理人)]
- あ、全角文字がコードに紛れ込んでコンパイルエラーになったときに、その原因を見つけられるかどうか、と言う話でしょうか?それでしたらそういう取り決めをする開発現場があっても不思議はないですね。 -- [武内(管理人)]
- 今回の場合は、全角スペースかどうかにかかわらず、全角文字が1つ入るだけでエディタがハングアップするという話なので、また違う問題なのですが。 -- [武内(管理人)]
- コンパイラの方です。昔から、全角スペースは鬼門なんですよ(笑) -- [アプロ]
- あら、私の勘違いだったみたいですね。全角スペースでコンパイラが混乱するというのは、ソフトウェアの開発環境ではあまり聞かなかったように思うので、もし良ければ詳しく教えていただけると勉強になります。 -- [武内(管理人)]
- ソフトも昔も今もあると思うけれど(笑) 英語圏のソフトは特に(^^ゞ シミュレータや論理合成ツールなどのEDAは特に敏感なので注意が必要と思います -- [アプロ]
- そうでしたか。EDA を使った開発現場ではコメントの記述で全角スペースを使用してはいけないというルールが一般的ということですね。コメント中で他の全角文字は問題なくて、全角スペースだけが不具合を起こすコンパイラの実装方法が思い浮かばないので、個人的にはちょっと納得できていないのですが勉強になりました。情報ありがとうございました。今のところ私のところではコメント中の全角スペースによる不具合は生じていないようなので、今後何か見つかったら報告します。 -- [武内(管理人)]
work.glbl はおまじないが足りないと思う †
[アプロ] (2010-06-04 (金) 12:33:32)
トップと、glbl を両方選択し、ロードしないと、エラーになるみたいですよ
回路記述に、 Xilinx 特有のプリミティブを埋め込まないと、いけないんぢゃなかったけ?
- いままでほとんどビヘイビャレベルのシミュレーションだけで何とかやってきてしまったので、Post-Translation 以上のシミュレーションについてはまだまだ勉強しなければならないことがたくさんありそうです。「トップと、glbl を両方選択し、ロード」というのもまだ理解できていないのですが、何とか調べてみようと思います。 -- [武内(管理人)]
- これは、こういうことですか?でもProject Navigatorからシミュレーションしたら、自動的につけてくれるはずだと思います。やはり、どこかおかしい?でしょうね? http://marsee101.blog19.fc2.com/blog-entry-392.html -- [marsee]
単体で起動すればいいんぢゃね(笑) †
[アプロ] (2010-06-04 (金) 12:29:06)
ModelSim XE を単体で起動できませんか?
でも、スターター版は、行数制限があるので、IPとか使うと動作しなくなりますが(笑)
※テストベンチもカウントされるよん(^_^;)
- これは動作しなくなるのではなく、極端に遅くなるだけではないでしょうか? -- [marsee]
- 単体起動を試そうかとも思ったのですが、何と何とを指定して vsim を起動したらいいか、パラメータが分からず頓挫しました。ISE の古いバージョンで .tdo を作って中を見れば単体起動で行けそうですね。 -- [武内(管理人)]
- スターター版のリミット、きついですね。Ethernet 経由でコマンドをやりとりする回路を作っているので、データをUDPパケットで渡して・・・なんてやっていると「動作しない」のと同じくらいの時間が掛かるようになってたり。どこかの時点で製品版が必要になるかもしれません。 -- [武内(管理人)]
- リミット越えると、100倍遅くなるし(笑) vlib work, vlog (コンパイルファイル), vsim だよ。 modelsimのインストールしたフォルダにサンプルがあるから試してみるといいですよ -- [アプロ]
- たっく さんのverilogシミュレータとかではダメですか? とりあえずベクターを参照してくらさい -- [アプロ]
- ザイリンクス版でもリミットがあるので、注意してください。メンターの本当の製品版は大丈夫ですが(^^ゞ -- [アプロ]
- はい Veritak も調べてみようと思います。一方で、内部にデバッグ用のロジアナっぽい回路を仕込み、Block RAM に記録した信号を Ethernet 経由で見るようなことを検討し始めています。デバッグ用に内部回路をつなぎ替えなければならない手間はありますが、LED や Push Button よりはずっと役立ちそうな気がしています(汗 -- [武内(管理人)]
- まあ、Block RAM だと一瞬しか記録できないですけどね。SDRAM が使えるようになれば、かなり長時間にわたって記録できるので、実用的なデバッグツールになりそうです。 -- [武内(管理人)]
- ロジアナもどき、やってみたところ結構良さそうですね。ただ、これは便利すぎるので・・・同じ考え方で、結果を PicoBlaze 経由のシリアル通信で読み出せるようなものがどこかで公開されていてもいいような。また車輪の再発明をしてしまったんじゃないかという気がしてきました。 -- [武内(管理人)]
- ChipScope ProというXilinx純正のロジアナもどきはご存知なんですよね?BlockRAMしか使用できませんが。。。 -- [marsee]
- ChipScope Pro とはそういうものでしたか! 噂には聞いていたのですが(笑 -- [武内(管理人)]
- ちょっとびっくりして調べたところ、残念ながら WebPACK では使えないのですね。残念半分、労力が無駄にならずにうれしいのが半分で、ちょっと複雑な心境です(苦笑 -- [武内(管理人)]
- 現時点で、FPGA 内部に張った 32bit バスに BlockRAM を繋げば Ethernet 経由で読み書きできるようになっているので、しばらくは自作の「ChipScope もどき」で開発を続けられそうです。キャプチャ結果をグラフィカルに表示するところまでは作っていないので、16進数とにらめっこですが・・・なんとか、かんとか。(ダブっていた投稿は削除させていただきました) -- [武内(管理人)]