我想找到一种方法在Modelsim中的VHDL设计中返回某个路径的库的名称。
给定VHDL设计,其路径类似于“/ mega_tb / D0”。这是在一个非“工作”的库中编译的,比如说“libnwork”。 我当然可以查看我的'do'文件来获取正确的lib名称。或者我可以在ModelSim的Library选项卡中搜索。但我想拥有或创建一个modelsim命令,我稍后可以在Tcl脚本中使用它来获取正确的库名。
答案 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这样的东西来提取库名。
我仍在寻找更好,更轻松的方式。