命令返回modelsim中路径的库(不工作)名称

时间:2013-11-29 11:47:45

标签: tcl vhdl modelsim

我想找到一种方法在Modelsim中的VHDL设计中返回某个路径的库的名称。

给定VHDL设计,其路径类似于“/ mega_tb / D0”。这是在一个非“工作”的库中编译的,比如说“libnwork”。 我当然可以查看我的'do'文件来获取正确的lib名称。或者我可以在ModelSim的Library选项卡中搜索。但我想拥有或创建一个modelsim命令,我稍后可以在Tcl脚本中使用它来获取正确的库名。

2 个答案:

答案 0 :(得分:1)

在Tcl脚本文件中找到某些东西的最简单方法之一 - 就是所有的Modelsim“do”文件 - 是评估它。 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具有正确的名称并从参数中提取有趣的信息。这应该相对容易......

答案 1 :(得分:0)

我发现的唯一方法是使用命令

write report -tcl

这会打印一个很长的列表,我在其中搜索带有regexp的lib名称。 像

这样的东西
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这样的东西来提取库名。

我仍在寻找更好,更轻松的方式。