1

Modelsim の VHDL デザインで、特定のパスのライブラリの名前を返す方法を見つけたいと考えています。

「/mega_tb/D0」のようなパスを持つ VHDL デザインを指定します。これは、「libnwork」などの「work」ではないライブラリでコンパイルされます。もちろん、「do」ファイルを調べて、正しいライブラリ名を取得できます。または、ModelSim の [ライブラリ] タブで検索できます。しかし、正しいライブラリ名を取得するために、後で Tcl スクリプトで使用できるように、modelsim コマンドを用意または作成したいと考えています。

4

2 に答える 2

1

Tcl スクリプト ファイル (すべて Modelsim の「do」ファイル) で何かを見つける最も簡単な方法の 1 つは、それを評価することです。Tclはそれがとても得意です。もちろん、コマンドにすべての慣習的なことをさせたくはありません。代わりに、必要な情報を生成するコマンドを除いて、すべてを何も行わないようにできるコンテキストで評価します。

# Set up our evaluation context, 'worker'
interp create worker -safe
interp eval worker {proc unknown args {}};   # Our do-nothing handler
interp alias worker theInterestingCommand {} ourHandler
proc ourHandler args {
    puts "We were called with: $args"
}

# Parse the file!
set f [open /the/file.tcl]
interp eval worker [read $f]

# Clean up
close $f
interp delete worker

あとtheInterestingCommandは、正しい名前を付けて、引数から興味深い情報を抽出するだけです。これは比較的簡単なはずです…</p>

于 2013-11-30T19:01:04.860 に答える
0

私が見つけた唯一の方法は、コマンドを使用することです

write report -tcl

これにより、正規表現でライブラリ名を検索した長いリストが出力されます。何かのようなもの

set data [ write report -tcl]
foreach_regexp { _ type lib entity} $data{
  if {$type == "Entity" && $entity == [entity_of_path /mega_tb/D0] } {
     ....
  }
}

もちろん、「foreach_regexp」プロシージャと「entity_of_path」プロシージャを定義する必要がありました。次に、regsub などを使用してライブラリ名を抽出できます。

私はまだより良い、より簡単な方法を探しています。

于 2013-11-29T11:47:45.187 に答える